Support CMake build with MSVC

PiperOrigin-RevId: 306688450
diff --git a/CMakeLists.txt b/CMakeLists.txt
index c84804a..4687d5e 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1602,6 +1602,8 @@
 ENDIF()
 TARGET_COMPILE_DEFINITIONS(XNNPACK PRIVATE "XNN_LOG_LEVEL=$<IF:$<CONFIG:Debug>,5,0>")
 IF(MSVC)
+  # Even though MSVC has __restrict, it can't be used in all the same contexts as the C99 restrict keyword
+  TARGET_COMPILE_DEFINITIONS(XNNPACK PRIVATE "restrict=")
   SET_PROPERTY(SOURCE ${XNNPACK_MICROKERNEL_SRCS} APPEND_STRING PROPERTY COMPILE_FLAGS "$<$<NOT:$<CONFIG:Debug>>: /O2 >")
   SET_PROPERTY(SOURCE ${XNNPACK_HOT_SRCS} APPEND_STRING PROPERTY COMPILE_FLAGS "$<$<NOT:$<CONFIG:Debug>>: /O2 >")
   SET_PROPERTY(SOURCE ${XNNPACK_COLD_SRCS} APPEND_STRING PROPERTY COMPILE_FLAGS "$<$<NOT:$<CONFIG:Debug>>: /O1 >")
diff --git a/src/average-pooling-nhwc.c b/src/average-pooling-nhwc.c
index f508237..657c6c6 100644
--- a/src/average-pooling-nhwc.c
+++ b/src/average-pooling-nhwc.c
@@ -395,9 +395,9 @@
   void* output,
   uint32_t log2_input_element_size,
   uint32_t log2_output_element_size,
-  struct avgpool_parameters avgpool[restrict static 1],
+  struct avgpool_parameters avgpool[restrict XNN_MIN_ELEMENTS(1)],
   struct pavgpool_parameters pavgpool[restrict 1],
-  struct gavgpool_parameters gavgpool[restrict static 1],
+  struct gavgpool_parameters gavgpool[restrict XNN_MIN_ELEMENTS(1)],
   const void* params,
   size_t params_size,
   const void* global_params,
diff --git a/src/binary-elementwise-nd.c b/src/binary-elementwise-nd.c
index efae360..806b8ea 100644
--- a/src/binary-elementwise-nd.c
+++ b/src/binary-elementwise-nd.c
@@ -144,7 +144,7 @@
     const float* input1,
     const float* input2,
     float* output,
-    const struct vbinary_parameters vbinary[restrict static 1],
+    const struct vbinary_parameters vbinary[restrict XNN_MIN_ELEMENTS(1)],
     size_t num_threads)
 {
   if (binary_elementwise_op->type != expected_operator_type) {
diff --git a/src/channel-shuffle-nc.c b/src/channel-shuffle-nc.c
index fc01b89..75e877a 100644
--- a/src/channel-shuffle-nc.c
+++ b/src/channel-shuffle-nc.c
@@ -137,7 +137,7 @@
     const void* input,
     void* output,
     uint32_t log2_element_size,
-    const struct zip_parameters zip[restrict static 1])
+    const struct zip_parameters zip[restrict XNN_MIN_ELEMENTS(1)])
 {
   channel_shuffle_op->state = xnn_run_state_invalid;
 
diff --git a/src/f16-gemm/1x16-aarch64-neonfp16arith-ld32.S.in b/src/f16-gemm/1x16-aarch64-neonfp16arith-ld32.S.in
index 7b00dd2..1addece 100644
--- a/src/f16-gemm/1x16-aarch64-neonfp16arith-ld32.S.in
+++ b/src/f16-gemm/1x16-aarch64-neonfp16arith-ld32.S.in
@@ -17,9 +17,9 @@
 #     size_t cn_stride,         [sp] -> x14
 $if INC:
   #     const float*restrict acc,  [sp + 8] -> x15
-  #     const union xnn_f16_minmax_params params[restrict static 1])  [sp + 16] -> x8
+  #     const union xnn_f16_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])  [sp + 16] -> x8
 $else:
-  #     const union xnn_f16_minmax_params params[restrict static 1])  [sp + 8] -> x8
+  #     const union xnn_f16_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])  [sp + 8] -> x8
 
 # d8-d15 need to be preserved if used.
 # x19-30 need to be preserved if used.
diff --git a/src/f16-gemm/4x16-aarch64-neonfp16arith-ld32.S.in b/src/f16-gemm/4x16-aarch64-neonfp16arith-ld32.S.in
index 7231d7d..a2c9ff4 100644
--- a/src/f16-gemm/4x16-aarch64-neonfp16arith-ld32.S.in
+++ b/src/f16-gemm/4x16-aarch64-neonfp16arith-ld32.S.in
@@ -17,9 +17,9 @@
 #     size_t cn_stride,         [sp] -> x14
 $if INC:
   #     const float*restrict acc,  [sp + 8] -> x15
-  #     const union xnn_f16_output_params params[restrict static 1])  [sp + 16] -> x8
+  #     const union xnn_f16_output_params params[restrict XNN_MIN_ELEMENTS(1)])  [sp + 16] -> x8
 $else:
-  #     const union xnn_f16_output_params params[restrict static 1])  [sp + 8] -> x8
+  #     const union xnn_f16_output_params params[restrict XNN_MIN_ELEMENTS(1)])  [sp + 8] -> x8
 
 # d8-d15 need to be preserved if used.
 # x19-30 need to be preserved if used.
diff --git a/src/f16-gemm/6x16-aarch64-neonfp16arith-ld32.S.in b/src/f16-gemm/6x16-aarch64-neonfp16arith-ld32.S.in
index 2d45184..af556d4 100644
--- a/src/f16-gemm/6x16-aarch64-neonfp16arith-ld32.S.in
+++ b/src/f16-gemm/6x16-aarch64-neonfp16arith-ld32.S.in
@@ -17,9 +17,9 @@
 #     size_t cn_stride,         [sp] -> x14
 $if INC:
   #     const float*restrict acc,  [sp + 8] -> x15
-  #     const union xnn_f16_output_params params[restrict static 1])  [sp + 16] -> x8
+  #     const union xnn_f16_output_params params[restrict XNN_MIN_ELEMENTS(1)])  [sp + 16] -> x8
 $else:
-  #     const union xnn_f16_output_params params[restrict static 1])  [sp + 8] -> x8
+  #     const union xnn_f16_output_params params[restrict XNN_MIN_ELEMENTS(1)])  [sp + 8] -> x8
 
 # d8-d15 need to be preserved if used.
 # x19-30 need to be preserved if used.
diff --git a/src/f16-gemm/gen-inc/1x16inc-minmax-aarch64-neonfp16arith-ld32.S b/src/f16-gemm/gen-inc/1x16inc-minmax-aarch64-neonfp16arith-ld32.S
index 53ebfd4..b8bfb4c 100644
--- a/src/f16-gemm/gen-inc/1x16inc-minmax-aarch64-neonfp16arith-ld32.S
+++ b/src/f16-gemm/gen-inc/1x16inc-minmax-aarch64-neonfp16arith-ld32.S
@@ -20,7 +20,7 @@
 #     size_t cm_stride,         (x7) - unused
 #     size_t cn_stride,         [sp] -> x14
 #     const float*restrict acc,  [sp + 8] -> x15
-#     const union xnn_f16_minmax_params params[restrict static 1])  [sp + 16] -> x8
+#     const union xnn_f16_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])  [sp + 16] -> x8
 
 # d8-d15 need to be preserved if used.
 # x19-30 need to be preserved if used.
diff --git a/src/f16-gemm/gen-inc/4x16inc-minmax-aarch64-neonfp16arith-ld32.S b/src/f16-gemm/gen-inc/4x16inc-minmax-aarch64-neonfp16arith-ld32.S
index ff80aa6..18b330d 100644
--- a/src/f16-gemm/gen-inc/4x16inc-minmax-aarch64-neonfp16arith-ld32.S
+++ b/src/f16-gemm/gen-inc/4x16inc-minmax-aarch64-neonfp16arith-ld32.S
@@ -20,7 +20,7 @@
 #     size_t cm_stride,         x7
 #     size_t cn_stride,         [sp] -> x14
 #     const float*restrict acc,  [sp + 8] -> x15
-#     const union xnn_f16_output_params params[restrict static 1])  [sp + 16] -> x8
+#     const union xnn_f16_output_params params[restrict XNN_MIN_ELEMENTS(1)])  [sp + 16] -> x8
 
 # d8-d15 need to be preserved if used.
 # x19-30 need to be preserved if used.
diff --git a/src/f16-gemm/gen-inc/6x16inc-minmax-aarch64-neonfp16arith-ld32.S b/src/f16-gemm/gen-inc/6x16inc-minmax-aarch64-neonfp16arith-ld32.S
index a1d96ee..e20191a 100644
--- a/src/f16-gemm/gen-inc/6x16inc-minmax-aarch64-neonfp16arith-ld32.S
+++ b/src/f16-gemm/gen-inc/6x16inc-minmax-aarch64-neonfp16arith-ld32.S
@@ -20,7 +20,7 @@
 #     size_t cm_stride,         x7
 #     size_t cn_stride,         [sp] -> x14
 #     const float*restrict acc,  [sp + 8] -> x15
-#     const union xnn_f16_output_params params[restrict static 1])  [sp + 16] -> x8
+#     const union xnn_f16_output_params params[restrict XNN_MIN_ELEMENTS(1)])  [sp + 16] -> x8
 
 # d8-d15 need to be preserved if used.
 # x19-30 need to be preserved if used.
diff --git a/src/f16-gemm/gen/1x16-minmax-aarch64-neonfp16arith-ld32.S b/src/f16-gemm/gen/1x16-minmax-aarch64-neonfp16arith-ld32.S
index 5bbbb6f..36d0872 100644
--- a/src/f16-gemm/gen/1x16-minmax-aarch64-neonfp16arith-ld32.S
+++ b/src/f16-gemm/gen/1x16-minmax-aarch64-neonfp16arith-ld32.S
@@ -19,7 +19,7 @@
 #     uint8_t*restrict c,       x6
 #     size_t cm_stride,         (x7) - unused
 #     size_t cn_stride,         [sp] -> x14
-#     const union xnn_f16_minmax_params params[restrict static 1])  [sp + 8] -> x8
+#     const union xnn_f16_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])  [sp + 8] -> x8
 
 # d8-d15 need to be preserved if used.
 # x19-30 need to be preserved if used.
diff --git a/src/f16-gemm/gen/1x8-neonfp16arith-ld64.c b/src/f16-gemm/gen/1x8-neonfp16arith-ld64.c
index a7c8eea..becfdf1 100644
--- a/src/f16-gemm/gen/1x8-neonfp16arith-ld64.c
+++ b/src/f16-gemm/gen/1x8-neonfp16arith-ld64.c
@@ -28,7 +28,7 @@
     void* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const struct xnn_f16_output_params params[restrict static 1])
+    const struct xnn_f16_output_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/f16-gemm/gen/4x16-minmax-aarch64-neonfp16arith-ld32.S b/src/f16-gemm/gen/4x16-minmax-aarch64-neonfp16arith-ld32.S
index f84bcc2..a644dfe 100644
--- a/src/f16-gemm/gen/4x16-minmax-aarch64-neonfp16arith-ld32.S
+++ b/src/f16-gemm/gen/4x16-minmax-aarch64-neonfp16arith-ld32.S
@@ -19,7 +19,7 @@
 #     uint8_t*restrict c,       x6
 #     size_t cm_stride,         x7
 #     size_t cn_stride,         [sp] -> x14
-#     const union xnn_f16_output_params params[restrict static 1])  [sp + 8] -> x8
+#     const union xnn_f16_output_params params[restrict XNN_MIN_ELEMENTS(1)])  [sp + 8] -> x8
 
 # d8-d15 need to be preserved if used.
 # x19-30 need to be preserved if used.
diff --git a/src/f16-gemm/gen/4x8-neonfp16arith-ld64.c b/src/f16-gemm/gen/4x8-neonfp16arith-ld64.c
index 3d4326c..76d4bf6 100644
--- a/src/f16-gemm/gen/4x8-neonfp16arith-ld64.c
+++ b/src/f16-gemm/gen/4x8-neonfp16arith-ld64.c
@@ -28,7 +28,7 @@
     void* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const struct xnn_f16_output_params params[restrict static 1])
+    const struct xnn_f16_output_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/f16-gemm/gen/6x16-minmax-aarch64-neonfp16arith-ld32.S b/src/f16-gemm/gen/6x16-minmax-aarch64-neonfp16arith-ld32.S
index e32b2c0..a26f500 100644
--- a/src/f16-gemm/gen/6x16-minmax-aarch64-neonfp16arith-ld32.S
+++ b/src/f16-gemm/gen/6x16-minmax-aarch64-neonfp16arith-ld32.S
@@ -19,7 +19,7 @@
 #     uint8_t*restrict c,       x6
 #     size_t cm_stride,         x7
 #     size_t cn_stride,         [sp] -> x14
-#     const union xnn_f16_output_params params[restrict static 1])  [sp + 8] -> x8
+#     const union xnn_f16_output_params params[restrict XNN_MIN_ELEMENTS(1)])  [sp + 8] -> x8
 
 # d8-d15 need to be preserved if used.
 # x19-30 need to be preserved if used.
diff --git a/src/f16-gemm/gen/6x8-neonfp16arith-ld64.c b/src/f16-gemm/gen/6x8-neonfp16arith-ld64.c
index ec31db4..ea6ddb0 100644
--- a/src/f16-gemm/gen/6x8-neonfp16arith-ld64.c
+++ b/src/f16-gemm/gen/6x8-neonfp16arith-ld64.c
@@ -28,7 +28,7 @@
     void* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const struct xnn_f16_output_params params[restrict static 1])
+    const struct xnn_f16_output_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 6);
diff --git a/src/f16-gemm/gen/8x8-neonfp16arith-ld64.c b/src/f16-gemm/gen/8x8-neonfp16arith-ld64.c
index 8a5e8ad..a4f4729 100644
--- a/src/f16-gemm/gen/8x8-neonfp16arith-ld64.c
+++ b/src/f16-gemm/gen/8x8-neonfp16arith-ld64.c
@@ -28,7 +28,7 @@
     void* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const struct xnn_f16_output_params params[restrict static 1])
+    const struct xnn_f16_output_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 8);
diff --git a/src/f16-gemm/neonfp16arith-ld64.c.in b/src/f16-gemm/neonfp16arith-ld64.c.in
index e04f876..215b9c3 100644
--- a/src/f16-gemm/neonfp16arith-ld64.c.in
+++ b/src/f16-gemm/neonfp16arith-ld64.c.in
@@ -26,7 +26,7 @@
     void* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const struct xnn_f16_output_params params[restrict static 1])
+    const struct xnn_f16_output_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= ${MR});
diff --git a/src/f16-spmm/gen/16x1-minmax-neonfp16arith-unroll2.c b/src/f16-spmm/gen/16x1-minmax-neonfp16arith-unroll2.c
index 724f659..70b23fb 100644
--- a/src/f16-spmm/gen/16x1-minmax-neonfp16arith-unroll2.c
+++ b/src/f16-spmm/gen/16x1-minmax-neonfp16arith-unroll2.c
@@ -22,7 +22,7 @@
     const int32_t*restrict widx_dmap,
     const uint32_t*restrict nidx_nnzmap,
     void*restrict output,
-    const struct xnn_f16_output_params params[restrict static 1])
+    const struct xnn_f16_output_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(m != 0);
 
diff --git a/src/f16-spmm/gen/16x1-minmax-neonfp16arith.c b/src/f16-spmm/gen/16x1-minmax-neonfp16arith.c
index da7f716..973f162 100644
--- a/src/f16-spmm/gen/16x1-minmax-neonfp16arith.c
+++ b/src/f16-spmm/gen/16x1-minmax-neonfp16arith.c
@@ -22,7 +22,7 @@
     const int32_t*restrict widx_dmap,
     const uint32_t*restrict nidx_nnzmap,
     void*restrict output,
-    const struct xnn_f16_output_params params[restrict static 1])
+    const struct xnn_f16_output_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(m != 0);
 
diff --git a/src/f16-spmm/gen/24x1-minmax-neonfp16arith-unroll2.c b/src/f16-spmm/gen/24x1-minmax-neonfp16arith-unroll2.c
index 55cfa4e..1fc51e1 100644
--- a/src/f16-spmm/gen/24x1-minmax-neonfp16arith-unroll2.c
+++ b/src/f16-spmm/gen/24x1-minmax-neonfp16arith-unroll2.c
@@ -22,7 +22,7 @@
     const int32_t*restrict widx_dmap,
     const uint32_t*restrict nidx_nnzmap,
     void*restrict output,
-    const struct xnn_f16_output_params params[restrict static 1])
+    const struct xnn_f16_output_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(m != 0);
 
diff --git a/src/f16-spmm/gen/24x1-minmax-neonfp16arith.c b/src/f16-spmm/gen/24x1-minmax-neonfp16arith.c
index f95bb9d..ce7c9a5 100644
--- a/src/f16-spmm/gen/24x1-minmax-neonfp16arith.c
+++ b/src/f16-spmm/gen/24x1-minmax-neonfp16arith.c
@@ -22,7 +22,7 @@
     const int32_t*restrict widx_dmap,
     const uint32_t*restrict nidx_nnzmap,
     void*restrict output,
-    const struct xnn_f16_output_params params[restrict static 1])
+    const struct xnn_f16_output_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(m != 0);
 
diff --git a/src/f16-spmm/gen/32x1-minmax-neonfp16arith-unroll2.c b/src/f16-spmm/gen/32x1-minmax-neonfp16arith-unroll2.c
index 047c5cc..cc9588f 100644
--- a/src/f16-spmm/gen/32x1-minmax-neonfp16arith-unroll2.c
+++ b/src/f16-spmm/gen/32x1-minmax-neonfp16arith-unroll2.c
@@ -22,7 +22,7 @@
     const int32_t*restrict widx_dmap,
     const uint32_t*restrict nidx_nnzmap,
     void*restrict output,
-    const struct xnn_f16_output_params params[restrict static 1])
+    const struct xnn_f16_output_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(m != 0);
 
diff --git a/src/f16-spmm/gen/32x1-minmax-neonfp16arith.c b/src/f16-spmm/gen/32x1-minmax-neonfp16arith.c
index 1b450ea..84a2147 100644
--- a/src/f16-spmm/gen/32x1-minmax-neonfp16arith.c
+++ b/src/f16-spmm/gen/32x1-minmax-neonfp16arith.c
@@ -22,7 +22,7 @@
     const int32_t*restrict widx_dmap,
     const uint32_t*restrict nidx_nnzmap,
     void*restrict output,
-    const struct xnn_f16_output_params params[restrict static 1])
+    const struct xnn_f16_output_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(m != 0);
 
diff --git a/src/f16-spmm/gen/8x1-minmax-neonfp16arith-unroll2.c b/src/f16-spmm/gen/8x1-minmax-neonfp16arith-unroll2.c
index 2f5c42c..1bb57a2 100644
--- a/src/f16-spmm/gen/8x1-minmax-neonfp16arith-unroll2.c
+++ b/src/f16-spmm/gen/8x1-minmax-neonfp16arith-unroll2.c
@@ -22,7 +22,7 @@
     const int32_t*restrict widx_dmap,
     const uint32_t*restrict nidx_nnzmap,
     void*restrict output,
-    const struct xnn_f16_output_params params[restrict static 1])
+    const struct xnn_f16_output_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(m != 0);
 
diff --git a/src/f16-spmm/gen/8x1-minmax-neonfp16arith.c b/src/f16-spmm/gen/8x1-minmax-neonfp16arith.c
index 7aa6863..6f965e2 100644
--- a/src/f16-spmm/gen/8x1-minmax-neonfp16arith.c
+++ b/src/f16-spmm/gen/8x1-minmax-neonfp16arith.c
@@ -22,7 +22,7 @@
     const int32_t*restrict widx_dmap,
     const uint32_t*restrict nidx_nnzmap,
     void*restrict output,
-    const struct xnn_f16_output_params params[restrict static 1])
+    const struct xnn_f16_output_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(m != 0);
 
diff --git a/src/f16-spmm/neonfp16arith.c.in b/src/f16-spmm/neonfp16arith.c.in
index 11e4ea0..2013194 100644
--- a/src/f16-spmm/neonfp16arith.c.in
+++ b/src/f16-spmm/neonfp16arith.c.in
@@ -20,7 +20,7 @@
     const int32_t*restrict widx_dmap,
     const uint32_t*restrict nidx_nnzmap,
     void*restrict output,
-    const struct xnn_f16_output_params params[restrict static 1])
+    const struct xnn_f16_output_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(m != 0);
 
diff --git a/src/f32-argmaxpool/4x-psimd-c4.c b/src/f32-argmaxpool/4x-psimd-c4.c
index d3a10a1..b1e05f8 100644
--- a/src/f32-argmaxpool/4x-psimd-c4.c
+++ b/src/f32-argmaxpool/4x-psimd-c4.c
@@ -20,7 +20,7 @@
     uint32_t* index,
     size_t input_increment,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(output_pixels != 0);
   assert(pooling_elements != 0);
diff --git a/src/f32-argmaxpool/4x-scalar-c1.c b/src/f32-argmaxpool/4x-scalar-c1.c
index a1e4175..1cf68e8 100644
--- a/src/f32-argmaxpool/4x-scalar-c1.c
+++ b/src/f32-argmaxpool/4x-scalar-c1.c
@@ -19,7 +19,7 @@
     uint32_t* index,
     size_t input_increment,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(output_pixels != 0);
   assert(pooling_elements != 0);
diff --git a/src/f32-argmaxpool/4x-sse2-c4.c b/src/f32-argmaxpool/4x-sse2-c4.c
index 5b86992..721b21c 100644
--- a/src/f32-argmaxpool/4x-sse2-c4.c
+++ b/src/f32-argmaxpool/4x-sse2-c4.c
@@ -20,7 +20,7 @@
     uint32_t* index,
     size_t input_increment,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(output_pixels != 0);
   assert(pooling_elements != 0);
diff --git a/src/f32-argmaxpool/9p8x-psimd-c4.c b/src/f32-argmaxpool/9p8x-psimd-c4.c
index 388fda2..d6a4026 100644
--- a/src/f32-argmaxpool/9p8x-psimd-c4.c
+++ b/src/f32-argmaxpool/9p8x-psimd-c4.c
@@ -22,7 +22,7 @@
     uint32_t* index,
     size_t input_increment,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(output_pixels != 0);
   assert(pooling_elements != 0);
diff --git a/src/f32-argmaxpool/9p8x-scalar-c1.c b/src/f32-argmaxpool/9p8x-scalar-c1.c
index 6302921..b63cf1b 100644
--- a/src/f32-argmaxpool/9p8x-scalar-c1.c
+++ b/src/f32-argmaxpool/9p8x-scalar-c1.c
@@ -21,7 +21,7 @@
     uint32_t* index,
     size_t input_increment,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(output_pixels != 0);
   assert(pooling_elements != 0);
diff --git a/src/f32-argmaxpool/9p8x-sse2-c4.c b/src/f32-argmaxpool/9p8x-sse2-c4.c
index 794c0db..3a94dbc 100644
--- a/src/f32-argmaxpool/9p8x-sse2-c4.c
+++ b/src/f32-argmaxpool/9p8x-sse2-c4.c
@@ -22,7 +22,7 @@
     uint32_t* index,
     size_t input_increment,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(output_pixels != 0);
   assert(pooling_elements != 0);
diff --git a/src/f32-argmaxpool/9x-psimd-c4.c b/src/f32-argmaxpool/9x-psimd-c4.c
index 3c89c14..d0626ff 100644
--- a/src/f32-argmaxpool/9x-psimd-c4.c
+++ b/src/f32-argmaxpool/9x-psimd-c4.c
@@ -20,7 +20,7 @@
     uint32_t* index,
     size_t input_increment,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(output_pixels != 0);
   assert(pooling_elements != 0);
diff --git a/src/f32-argmaxpool/9x-scalar-c1.c b/src/f32-argmaxpool/9x-scalar-c1.c
index b07b69f..4075102 100644
--- a/src/f32-argmaxpool/9x-scalar-c1.c
+++ b/src/f32-argmaxpool/9x-scalar-c1.c
@@ -19,7 +19,7 @@
     uint32_t* index,
     size_t input_increment,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(output_pixels != 0);
   assert(pooling_elements != 0);
diff --git a/src/f32-argmaxpool/9x-sse2-c4.c b/src/f32-argmaxpool/9x-sse2-c4.c
index b9c3b33..1f194f1 100644
--- a/src/f32-argmaxpool/9x-sse2-c4.c
+++ b/src/f32-argmaxpool/9x-sse2-c4.c
@@ -20,7 +20,7 @@
     uint32_t* index,
     size_t input_increment,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(output_pixels != 0);
   assert(pooling_elements != 0);
diff --git a/src/f32-avgpool/9p8x-minmax-neon-c4.c b/src/f32-avgpool/9p8x-minmax-neon-c4.c
index 22b2795..b06e5b2 100644
--- a/src/f32-avgpool/9p8x-minmax-neon-c4.c
+++ b/src/f32-avgpool/9p8x-minmax-neon-c4.c
@@ -21,7 +21,7 @@
     float* output,
     size_t input_increment,
     size_t output_increment,
-    const union xnn_f32_scaleminmax_params params[restrict static 1])
+    const union xnn_f32_scaleminmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(output_pixels != 0);
   assert(kernel_elements > 9);
diff --git a/src/f32-avgpool/9p8x-minmax-psimd-c4.c b/src/f32-avgpool/9p8x-minmax-psimd-c4.c
index 5ff7619..512752f 100644
--- a/src/f32-avgpool/9p8x-minmax-psimd-c4.c
+++ b/src/f32-avgpool/9p8x-minmax-psimd-c4.c
@@ -21,7 +21,7 @@
     float* output,
     size_t input_increment,
     size_t output_increment,
-    const union xnn_f32_scaleminmax_params params[restrict static 1])
+    const union xnn_f32_scaleminmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(output_pixels != 0);
   assert(kernel_elements > 9);
diff --git a/src/f32-avgpool/9p8x-minmax-scalar-c1.c b/src/f32-avgpool/9p8x-minmax-scalar-c1.c
index 55a22ee..32ecc64 100644
--- a/src/f32-avgpool/9p8x-minmax-scalar-c1.c
+++ b/src/f32-avgpool/9p8x-minmax-scalar-c1.c
@@ -20,7 +20,7 @@
     float* output,
     size_t input_increment,
     size_t output_increment,
-    const union xnn_f32_scaleminmax_params params[restrict static 1])
+    const union xnn_f32_scaleminmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(output_pixels != 0);
   assert(kernel_elements > 9);
diff --git a/src/f32-avgpool/9p8x-minmax-sse-c4.c b/src/f32-avgpool/9p8x-minmax-sse-c4.c
index f5508d5..53fc4a5 100644
--- a/src/f32-avgpool/9p8x-minmax-sse-c4.c
+++ b/src/f32-avgpool/9p8x-minmax-sse-c4.c
@@ -21,7 +21,7 @@
     float* output,
     size_t input_increment,
     size_t output_increment,
-    const union xnn_f32_scaleminmax_params params[restrict static 1])
+    const union xnn_f32_scaleminmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(output_pixels != 0);
   assert(kernel_elements > 9);
diff --git a/src/f32-avgpool/9p8x-minmax-wasm-c1.c b/src/f32-avgpool/9p8x-minmax-wasm-c1.c
index 202cf06..5285c71 100644
--- a/src/f32-avgpool/9p8x-minmax-wasm-c1.c
+++ b/src/f32-avgpool/9p8x-minmax-wasm-c1.c
@@ -20,7 +20,7 @@
     float* output,
     size_t input_increment,
     size_t output_increment,
-    const union xnn_f32_scaleminmax_params params[restrict static 1])
+    const union xnn_f32_scaleminmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(output_pixels != 0);
   assert(kernel_elements > 9);
diff --git a/src/f32-avgpool/9x-minmax-neon-c4.c b/src/f32-avgpool/9x-minmax-neon-c4.c
index fdf0f14..1062418 100644
--- a/src/f32-avgpool/9x-minmax-neon-c4.c
+++ b/src/f32-avgpool/9x-minmax-neon-c4.c
@@ -20,7 +20,7 @@
     float* output,
     size_t input_increment,
     size_t output_increment,
-    const union xnn_f32_scaleminmax_params params[restrict static 1])
+    const union xnn_f32_scaleminmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(output_pixels != 0);
   assert(kernel_elements != 0);
diff --git a/src/f32-avgpool/9x-minmax-psimd-c4.c b/src/f32-avgpool/9x-minmax-psimd-c4.c
index 3a25e5c..f42f61a 100644
--- a/src/f32-avgpool/9x-minmax-psimd-c4.c
+++ b/src/f32-avgpool/9x-minmax-psimd-c4.c
@@ -20,7 +20,7 @@
     float* output,
     size_t input_increment,
     size_t output_increment,
-    const union xnn_f32_scaleminmax_params params[restrict static 1])
+    const union xnn_f32_scaleminmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(output_pixels != 0);
   assert(kernel_elements != 0);
diff --git a/src/f32-avgpool/9x-minmax-scalar-c1.c b/src/f32-avgpool/9x-minmax-scalar-c1.c
index e6ec3fb..b15048f 100644
--- a/src/f32-avgpool/9x-minmax-scalar-c1.c
+++ b/src/f32-avgpool/9x-minmax-scalar-c1.c
@@ -19,7 +19,7 @@
     float* output,
     size_t input_increment,
     size_t output_increment,
-    const union xnn_f32_scaleminmax_params params[restrict static 1])
+    const union xnn_f32_scaleminmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(output_pixels != 0);
   assert(kernel_elements != 0);
diff --git a/src/f32-avgpool/9x-minmax-sse-c4.c b/src/f32-avgpool/9x-minmax-sse-c4.c
index 8c628f9..7333063 100644
--- a/src/f32-avgpool/9x-minmax-sse-c4.c
+++ b/src/f32-avgpool/9x-minmax-sse-c4.c
@@ -20,7 +20,7 @@
     float* output,
     size_t input_increment,
     size_t output_increment,
-    const union xnn_f32_scaleminmax_params params[restrict static 1])
+    const union xnn_f32_scaleminmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(output_pixels != 0);
   assert(kernel_elements != 0);
diff --git a/src/f32-avgpool/9x-minmax-wasm-c1.c b/src/f32-avgpool/9x-minmax-wasm-c1.c
index 8261a25..2a19352 100644
--- a/src/f32-avgpool/9x-minmax-wasm-c1.c
+++ b/src/f32-avgpool/9x-minmax-wasm-c1.c
@@ -19,7 +19,7 @@
     float* output,
     size_t input_increment,
     size_t output_increment,
-    const union xnn_f32_scaleminmax_params params[restrict static 1])
+    const union xnn_f32_scaleminmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(output_pixels != 0);
   assert(kernel_elements != 0);
diff --git a/src/f32-clamp/avx.c.in b/src/f32-clamp/avx.c.in
index 6440477..1b94a4c 100644
--- a/src/f32-clamp/avx.c.in
+++ b/src/f32-clamp/avx.c.in
@@ -20,7 +20,7 @@
     size_t n,
     const float* x,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-clamp/avx512f.c.in b/src/f32-clamp/avx512f.c.in
index c1b5930..f9cb23b 100644
--- a/src/f32-clamp/avx512f.c.in
+++ b/src/f32-clamp/avx512f.c.in
@@ -19,7 +19,7 @@
     size_t n,
     const float* x,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-clamp/gen/avx-x16.c b/src/f32-clamp/gen/avx-x16.c
index cdcdbf1..789924b 100644
--- a/src/f32-clamp/gen/avx-x16.c
+++ b/src/f32-clamp/gen/avx-x16.c
@@ -21,7 +21,7 @@
     size_t n,
     const float* x,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-clamp/gen/avx-x8.c b/src/f32-clamp/gen/avx-x8.c
index 34935e4..9440a7f 100644
--- a/src/f32-clamp/gen/avx-x8.c
+++ b/src/f32-clamp/gen/avx-x8.c
@@ -21,7 +21,7 @@
     size_t n,
     const float* x,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-clamp/gen/avx512f-x16.c b/src/f32-clamp/gen/avx512f-x16.c
index 1a706a6..3fc6d1a 100644
--- a/src/f32-clamp/gen/avx512f-x16.c
+++ b/src/f32-clamp/gen/avx512f-x16.c
@@ -20,7 +20,7 @@
     size_t n,
     const float* x,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-clamp/gen/avx512f-x32.c b/src/f32-clamp/gen/avx512f-x32.c
index 9a5d77c..0de2b71 100644
--- a/src/f32-clamp/gen/avx512f-x32.c
+++ b/src/f32-clamp/gen/avx512f-x32.c
@@ -20,7 +20,7 @@
     size_t n,
     const float* x,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-clamp/gen/neon-x4.c b/src/f32-clamp/gen/neon-x4.c
index 882d2e7..a22c4af 100644
--- a/src/f32-clamp/gen/neon-x4.c
+++ b/src/f32-clamp/gen/neon-x4.c
@@ -19,7 +19,7 @@
     size_t n,
     const float* x,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-clamp/gen/neon-x8.c b/src/f32-clamp/gen/neon-x8.c
index 2c73da2..d8e1519 100644
--- a/src/f32-clamp/gen/neon-x8.c
+++ b/src/f32-clamp/gen/neon-x8.c
@@ -19,7 +19,7 @@
     size_t n,
     const float* x,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-clamp/gen/psimd-x4.c b/src/f32-clamp/gen/psimd-x4.c
index 99becf4..7c6d874 100644
--- a/src/f32-clamp/gen/psimd-x4.c
+++ b/src/f32-clamp/gen/psimd-x4.c
@@ -19,7 +19,7 @@
     size_t n,
     const float* x,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-clamp/gen/psimd-x8.c b/src/f32-clamp/gen/psimd-x8.c
index 43e0149..739d161 100644
--- a/src/f32-clamp/gen/psimd-x8.c
+++ b/src/f32-clamp/gen/psimd-x8.c
@@ -19,7 +19,7 @@
     size_t n,
     const float* x,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-clamp/gen/scalar-x1.c b/src/f32-clamp/gen/scalar-x1.c
index 9067b89..3d03256 100644
--- a/src/f32-clamp/gen/scalar-x1.c
+++ b/src/f32-clamp/gen/scalar-x1.c
@@ -18,7 +18,7 @@
     size_t n,
     const float* x,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-clamp/gen/scalar-x2.c b/src/f32-clamp/gen/scalar-x2.c
index ffeb06e..c8fd6c5 100644
--- a/src/f32-clamp/gen/scalar-x2.c
+++ b/src/f32-clamp/gen/scalar-x2.c
@@ -18,7 +18,7 @@
     size_t n,
     const float* x,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-clamp/gen/scalar-x4.c b/src/f32-clamp/gen/scalar-x4.c
index 96fdcce..8660f59 100644
--- a/src/f32-clamp/gen/scalar-x4.c
+++ b/src/f32-clamp/gen/scalar-x4.c
@@ -18,7 +18,7 @@
     size_t n,
     const float* x,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-clamp/gen/sse-x4.c b/src/f32-clamp/gen/sse-x4.c
index eadcadb..34f1271 100644
--- a/src/f32-clamp/gen/sse-x4.c
+++ b/src/f32-clamp/gen/sse-x4.c
@@ -19,7 +19,7 @@
     size_t n,
     const float* x,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-clamp/gen/sse-x8.c b/src/f32-clamp/gen/sse-x8.c
index 0cdf641..4dc7f28 100644
--- a/src/f32-clamp/gen/sse-x8.c
+++ b/src/f32-clamp/gen/sse-x8.c
@@ -19,7 +19,7 @@
     size_t n,
     const float* x,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-clamp/gen/wasm-x1.c b/src/f32-clamp/gen/wasm-x1.c
index 346faf0..2ebb1ff 100644
--- a/src/f32-clamp/gen/wasm-x1.c
+++ b/src/f32-clamp/gen/wasm-x1.c
@@ -18,7 +18,7 @@
     size_t n,
     const float* x,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-clamp/gen/wasm-x2.c b/src/f32-clamp/gen/wasm-x2.c
index 89def95..7e7f1a1 100644
--- a/src/f32-clamp/gen/wasm-x2.c
+++ b/src/f32-clamp/gen/wasm-x2.c
@@ -18,7 +18,7 @@
     size_t n,
     const float* x,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-clamp/gen/wasm-x4.c b/src/f32-clamp/gen/wasm-x4.c
index ce2c54c..2d2072a 100644
--- a/src/f32-clamp/gen/wasm-x4.c
+++ b/src/f32-clamp/gen/wasm-x4.c
@@ -18,7 +18,7 @@
     size_t n,
     const float* x,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-clamp/neon.c.in b/src/f32-clamp/neon.c.in
index 9188314..77093d3 100644
--- a/src/f32-clamp/neon.c.in
+++ b/src/f32-clamp/neon.c.in
@@ -18,7 +18,7 @@
     size_t n,
     const float* x,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-clamp/psimd.c.in b/src/f32-clamp/psimd.c.in
index 42c8870..a249939 100644
--- a/src/f32-clamp/psimd.c.in
+++ b/src/f32-clamp/psimd.c.in
@@ -18,7 +18,7 @@
     size_t n,
     const float* x,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-clamp/scalar.c.in b/src/f32-clamp/scalar.c.in
index 24a73a6..9d422f0 100644
--- a/src/f32-clamp/scalar.c.in
+++ b/src/f32-clamp/scalar.c.in
@@ -18,7 +18,7 @@
     size_t n,
     const float* x,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-clamp/sse.c.in b/src/f32-clamp/sse.c.in
index 395d802..bc2196a 100644
--- a/src/f32-clamp/sse.c.in
+++ b/src/f32-clamp/sse.c.in
@@ -18,7 +18,7 @@
     size_t n,
     const float* x,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-conv-hwc/3x3s2p0p1c3x4-scalar-1x1.c b/src/f32-conv-hwc/3x3s2p0p1c3x4-scalar-1x1.c
index b29da03..fe720eb 100644
--- a/src/f32-conv-hwc/3x3s2p0p1c3x4-scalar-1x1.c
+++ b/src/f32-conv-hwc/3x3s2p0p1c3x4-scalar-1x1.c
@@ -22,7 +22,7 @@
     size_t output_channels,
     size_t output_height_stride,
     size_t output_width_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(input_width != 0);
   assert(output_y_end > output_y_start);
diff --git a/src/f32-conv-hwc/3x3s2p1c3x4-neonfma-2x2.c b/src/f32-conv-hwc/3x3s2p1c3x4-neonfma-2x2.c
index 480aa6c..293d470 100644
--- a/src/f32-conv-hwc/3x3s2p1c3x4-neonfma-2x2.c
+++ b/src/f32-conv-hwc/3x3s2p1c3x4-neonfma-2x2.c
@@ -24,7 +24,7 @@
     size_t output_channels,
     size_t output_height_stride,
     size_t output_width_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(input_width != 0);
   assert(output_y_end > output_y_start);
diff --git a/src/f32-conv-hwc/3x3s2p1c3x4-scalar-1x1.c b/src/f32-conv-hwc/3x3s2p1c3x4-scalar-1x1.c
index 02102b4..18c2dfa 100644
--- a/src/f32-conv-hwc/3x3s2p1c3x4-scalar-1x1.c
+++ b/src/f32-conv-hwc/3x3s2p1c3x4-scalar-1x1.c
@@ -22,7 +22,7 @@
     size_t output_channels,
     size_t output_height_stride,
     size_t output_width_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(input_width != 0);
   assert(output_y_end > output_y_start);
diff --git a/src/f32-conv-hwc/3x3s2p1c3x8-neonfma-2x2.c b/src/f32-conv-hwc/3x3s2p1c3x8-neonfma-2x2.c
index d296b45..3c1071f 100644
--- a/src/f32-conv-hwc/3x3s2p1c3x8-neonfma-2x2.c
+++ b/src/f32-conv-hwc/3x3s2p1c3x8-neonfma-2x2.c
@@ -24,7 +24,7 @@
     size_t output_channels,
     size_t output_height_stride,
     size_t output_width_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(input_width != 0);
   assert(output_y_end > output_y_start);
diff --git a/src/f32-conv-hwc2spchw/3x3s2p1c3x4-neonfma-2x2.c b/src/f32-conv-hwc2spchw/3x3s2p1c3x4-neonfma-2x2.c
index 6ed30ae..e01d9ab 100644
--- a/src/f32-conv-hwc2spchw/3x3s2p1c3x4-neonfma-2x2.c
+++ b/src/f32-conv-hwc2spchw/3x3s2p1c3x4-neonfma-2x2.c
@@ -24,7 +24,7 @@
     size_t output_channels,
     size_t output_height_stride,
     size_t output_channel_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(input_width != 0);
   assert(output_y_end > output_y_start);
diff --git a/src/f32-conv-hwc2spchw/3x3s2p1c3x4-scalar-1x1.c b/src/f32-conv-hwc2spchw/3x3s2p1c3x4-scalar-1x1.c
index d601c8c..9e26884 100644
--- a/src/f32-conv-hwc2spchw/3x3s2p1c3x4-scalar-1x1.c
+++ b/src/f32-conv-hwc2spchw/3x3s2p1c3x4-scalar-1x1.c
@@ -22,7 +22,7 @@
     size_t output_channels,
     size_t output_height_stride,
     size_t output_channel_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(input_width != 0);
   assert(output_y_end > output_y_start);
diff --git a/src/f32-dwconv-spchw/3x3p1-neonfma.c b/src/f32-dwconv-spchw/3x3p1-neonfma.c
index 37956a2..d6d6dbc 100644
--- a/src/f32-dwconv-spchw/3x3p1-neonfma.c
+++ b/src/f32-dwconv-spchw/3x3p1-neonfma.c
@@ -21,7 +21,7 @@
     size_t output_tuple_stride,
     size_t input_width_stride,
     size_t output_width_stride,
-    const union xnn_f32_spchw_params params[restrict static 1])
+    const union xnn_f32_spchw_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
 
diff --git a/src/f32-dwconv-spchw/3x3p1-scalar.c b/src/f32-dwconv-spchw/3x3p1-scalar.c
index 28feefb..d5d69e1 100644
--- a/src/f32-dwconv-spchw/3x3p1-scalar.c
+++ b/src/f32-dwconv-spchw/3x3p1-scalar.c
@@ -19,7 +19,7 @@
     size_t output_tuple_stride,
     size_t input_width_stride,
     size_t output_width_stride,
-    const union xnn_f32_spchw_params params[restrict static 1])
+    const union xnn_f32_spchw_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
 
diff --git a/src/f32-dwconv-spchw/3x3p1-sse.c b/src/f32-dwconv-spchw/3x3p1-sse.c
index eba2dc5..baf1e21 100644
--- a/src/f32-dwconv-spchw/3x3p1-sse.c
+++ b/src/f32-dwconv-spchw/3x3p1-sse.c
@@ -21,7 +21,7 @@
     size_t output_tuple_stride,
     size_t input_width_stride,
     size_t output_width_stride,
-    const union xnn_f32_spchw_params params[restrict static 1])
+    const union xnn_f32_spchw_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
 
diff --git a/src/f32-dwconv-spchw/3x3s2p1-neonfma.c b/src/f32-dwconv-spchw/3x3s2p1-neonfma.c
index 069b608..3d0e36b 100644
--- a/src/f32-dwconv-spchw/3x3s2p1-neonfma.c
+++ b/src/f32-dwconv-spchw/3x3s2p1-neonfma.c
@@ -21,7 +21,7 @@
     size_t output_tuple_stride,
     size_t input_width_stride,
     size_t output_width_stride,
-    const union xnn_f32_spchw_params params[restrict static 1])
+    const union xnn_f32_spchw_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
 
diff --git a/src/f32-dwconv-spchw/3x3s2p1-scalar.c b/src/f32-dwconv-spchw/3x3s2p1-scalar.c
index b525bf6..d9dc3bd 100644
--- a/src/f32-dwconv-spchw/3x3s2p1-scalar.c
+++ b/src/f32-dwconv-spchw/3x3s2p1-scalar.c
@@ -19,7 +19,7 @@
     size_t output_tuple_stride,
     size_t input_width_stride,
     size_t output_width_stride,
-    const union xnn_f32_spchw_params params[restrict static 1])
+    const union xnn_f32_spchw_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
 
diff --git a/src/f32-dwconv-spchw/3x3s2p1-sse.c b/src/f32-dwconv-spchw/3x3s2p1-sse.c
index b8e7480..0ed70f1 100644
--- a/src/f32-dwconv-spchw/3x3s2p1-sse.c
+++ b/src/f32-dwconv-spchw/3x3s2p1-sse.c
@@ -21,7 +21,7 @@
     size_t output_tuple_stride,
     size_t input_width_stride,
     size_t output_width_stride,
-    const union xnn_f32_spchw_params params[restrict static 1])
+    const union xnn_f32_spchw_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
 
diff --git a/src/f32-dwconv-spchw/5x5p2-neonfma.c b/src/f32-dwconv-spchw/5x5p2-neonfma.c
index 7ec1d0f..2a729c4 100644
--- a/src/f32-dwconv-spchw/5x5p2-neonfma.c
+++ b/src/f32-dwconv-spchw/5x5p2-neonfma.c
@@ -21,7 +21,7 @@
     size_t output_tuple_stride,
     size_t input_width_stride,
     size_t output_width_stride,
-    const union xnn_f32_spchw_params params[restrict static 1])
+    const union xnn_f32_spchw_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
 
diff --git a/src/f32-dwconv-spchw/5x5p2-scalar.c b/src/f32-dwconv-spchw/5x5p2-scalar.c
index 236da16..1596059 100644
--- a/src/f32-dwconv-spchw/5x5p2-scalar.c
+++ b/src/f32-dwconv-spchw/5x5p2-scalar.c
@@ -19,7 +19,7 @@
     size_t output_tuple_stride,
     size_t input_width_stride,
     size_t output_width_stride,
-    const union xnn_f32_spchw_params params[restrict static 1])
+    const union xnn_f32_spchw_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
 
diff --git a/src/f32-dwconv-spchw/5x5s2p2-neonfma.c b/src/f32-dwconv-spchw/5x5s2p2-neonfma.c
index 5f6ef0c..5c93d47 100644
--- a/src/f32-dwconv-spchw/5x5s2p2-neonfma.c
+++ b/src/f32-dwconv-spchw/5x5s2p2-neonfma.c
@@ -21,7 +21,7 @@
     size_t output_tuple_stride,
     size_t input_width_stride,
     size_t output_width_stride,
-    const union xnn_f32_spchw_params params[restrict static 1])
+    const union xnn_f32_spchw_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
 
diff --git a/src/f32-dwconv-spchw/5x5s2p2-scalar.c b/src/f32-dwconv-spchw/5x5s2p2-scalar.c
index 3b7f61b..6d97589 100644
--- a/src/f32-dwconv-spchw/5x5s2p2-scalar.c
+++ b/src/f32-dwconv-spchw/5x5s2p2-scalar.c
@@ -19,7 +19,7 @@
     size_t output_tuple_stride,
     size_t input_width_stride,
     size_t output_width_stride,
-    const union xnn_f32_spchw_params params[restrict static 1])
+    const union xnn_f32_spchw_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
 
diff --git a/src/f32-dwconv/gen/up16x25-minmax-avx-acc2.c b/src/f32-dwconv/gen/up16x25-minmax-avx-acc2.c
index 4b8c7c5..2e27c2a 100644
--- a/src/f32-dwconv/gen/up16x25-minmax-avx-acc2.c
+++ b/src/f32-dwconv/gen/up16x25-minmax-avx-acc2.c
@@ -24,7 +24,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up16x25-minmax-avx.c b/src/f32-dwconv/gen/up16x25-minmax-avx.c
index f38284a..a6414d8 100644
--- a/src/f32-dwconv/gen/up16x25-minmax-avx.c
+++ b/src/f32-dwconv/gen/up16x25-minmax-avx.c
@@ -24,7 +24,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up16x25-minmax-avx512f-acc2.c b/src/f32-dwconv/gen/up16x25-minmax-avx512f-acc2.c
index e61b647..85f3551 100644
--- a/src/f32-dwconv/gen/up16x25-minmax-avx512f-acc2.c
+++ b/src/f32-dwconv/gen/up16x25-minmax-avx512f-acc2.c
@@ -23,7 +23,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up16x25-minmax-avx512f.c b/src/f32-dwconv/gen/up16x25-minmax-avx512f.c
index 058261a..80987f8 100644
--- a/src/f32-dwconv/gen/up16x25-minmax-avx512f.c
+++ b/src/f32-dwconv/gen/up16x25-minmax-avx512f.c
@@ -23,7 +23,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up16x25-minmax-fma3-acc2.c b/src/f32-dwconv/gen/up16x25-minmax-fma3-acc2.c
index fb670b4..dc0fcef 100644
--- a/src/f32-dwconv/gen/up16x25-minmax-fma3-acc2.c
+++ b/src/f32-dwconv/gen/up16x25-minmax-fma3-acc2.c
@@ -24,7 +24,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up16x25-minmax-fma3.c b/src/f32-dwconv/gen/up16x25-minmax-fma3.c
index e86417b..e894215 100644
--- a/src/f32-dwconv/gen/up16x25-minmax-fma3.c
+++ b/src/f32-dwconv/gen/up16x25-minmax-fma3.c
@@ -24,7 +24,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up16x4-minmax-avx-acc2.c b/src/f32-dwconv/gen/up16x4-minmax-avx-acc2.c
index c72128e..b49912b 100644
--- a/src/f32-dwconv/gen/up16x4-minmax-avx-acc2.c
+++ b/src/f32-dwconv/gen/up16x4-minmax-avx-acc2.c
@@ -24,7 +24,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up16x4-minmax-avx.c b/src/f32-dwconv/gen/up16x4-minmax-avx.c
index 08821a4..cb94558 100644
--- a/src/f32-dwconv/gen/up16x4-minmax-avx.c
+++ b/src/f32-dwconv/gen/up16x4-minmax-avx.c
@@ -24,7 +24,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up16x4-minmax-avx512f-acc2.c b/src/f32-dwconv/gen/up16x4-minmax-avx512f-acc2.c
index 8e64b22..389d29f 100644
--- a/src/f32-dwconv/gen/up16x4-minmax-avx512f-acc2.c
+++ b/src/f32-dwconv/gen/up16x4-minmax-avx512f-acc2.c
@@ -23,7 +23,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up16x4-minmax-avx512f.c b/src/f32-dwconv/gen/up16x4-minmax-avx512f.c
index 6d0cde6..6172828 100644
--- a/src/f32-dwconv/gen/up16x4-minmax-avx512f.c
+++ b/src/f32-dwconv/gen/up16x4-minmax-avx512f.c
@@ -23,7 +23,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up16x4-minmax-fma3-acc2.c b/src/f32-dwconv/gen/up16x4-minmax-fma3-acc2.c
index 62caec7..09d1e07 100644
--- a/src/f32-dwconv/gen/up16x4-minmax-fma3-acc2.c
+++ b/src/f32-dwconv/gen/up16x4-minmax-fma3-acc2.c
@@ -24,7 +24,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up16x4-minmax-fma3.c b/src/f32-dwconv/gen/up16x4-minmax-fma3.c
index 0fecec7..7f1a228 100644
--- a/src/f32-dwconv/gen/up16x4-minmax-fma3.c
+++ b/src/f32-dwconv/gen/up16x4-minmax-fma3.c
@@ -24,7 +24,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up16x9-minmax-avx-acc2.c b/src/f32-dwconv/gen/up16x9-minmax-avx-acc2.c
index 6f902a7..3374b5e 100644
--- a/src/f32-dwconv/gen/up16x9-minmax-avx-acc2.c
+++ b/src/f32-dwconv/gen/up16x9-minmax-avx-acc2.c
@@ -24,7 +24,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up16x9-minmax-avx.c b/src/f32-dwconv/gen/up16x9-minmax-avx.c
index 66bf59d..7e76215 100644
--- a/src/f32-dwconv/gen/up16x9-minmax-avx.c
+++ b/src/f32-dwconv/gen/up16x9-minmax-avx.c
@@ -24,7 +24,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up16x9-minmax-avx512f-acc2.c b/src/f32-dwconv/gen/up16x9-minmax-avx512f-acc2.c
index 3a4d064..f251a6e 100644
--- a/src/f32-dwconv/gen/up16x9-minmax-avx512f-acc2.c
+++ b/src/f32-dwconv/gen/up16x9-minmax-avx512f-acc2.c
@@ -23,7 +23,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up16x9-minmax-avx512f.c b/src/f32-dwconv/gen/up16x9-minmax-avx512f.c
index 11074b1..6d3e5cf 100644
--- a/src/f32-dwconv/gen/up16x9-minmax-avx512f.c
+++ b/src/f32-dwconv/gen/up16x9-minmax-avx512f.c
@@ -23,7 +23,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up16x9-minmax-fma3-acc2.c b/src/f32-dwconv/gen/up16x9-minmax-fma3-acc2.c
index fb3eebb..47d3e7c 100644
--- a/src/f32-dwconv/gen/up16x9-minmax-fma3-acc2.c
+++ b/src/f32-dwconv/gen/up16x9-minmax-fma3-acc2.c
@@ -24,7 +24,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up16x9-minmax-fma3.c b/src/f32-dwconv/gen/up16x9-minmax-fma3.c
index 69dd732..ec3e178 100644
--- a/src/f32-dwconv/gen/up16x9-minmax-fma3.c
+++ b/src/f32-dwconv/gen/up16x9-minmax-fma3.c
@@ -24,7 +24,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up1x25-minmax-scalar-acc2.c b/src/f32-dwconv/gen/up1x25-minmax-scalar-acc2.c
index b5f18f0..0536835 100644
--- a/src/f32-dwconv/gen/up1x25-minmax-scalar-acc2.c
+++ b/src/f32-dwconv/gen/up1x25-minmax-scalar-acc2.c
@@ -21,7 +21,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up1x25-minmax-scalar.c b/src/f32-dwconv/gen/up1x25-minmax-scalar.c
index 81e304f..03f5ed9 100644
--- a/src/f32-dwconv/gen/up1x25-minmax-scalar.c
+++ b/src/f32-dwconv/gen/up1x25-minmax-scalar.c
@@ -21,7 +21,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up1x25-minmax-wasm-acc2.c b/src/f32-dwconv/gen/up1x25-minmax-wasm-acc2.c
index 92db631..694d6df 100644
--- a/src/f32-dwconv/gen/up1x25-minmax-wasm-acc2.c
+++ b/src/f32-dwconv/gen/up1x25-minmax-wasm-acc2.c
@@ -21,7 +21,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up1x25-minmax-wasm.c b/src/f32-dwconv/gen/up1x25-minmax-wasm.c
index 3d0ee04..cdb712b 100644
--- a/src/f32-dwconv/gen/up1x25-minmax-wasm.c
+++ b/src/f32-dwconv/gen/up1x25-minmax-wasm.c
@@ -21,7 +21,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up1x25-scalar-acc2.c b/src/f32-dwconv/gen/up1x25-scalar-acc2.c
index 5ea7778..857a24c 100644
--- a/src/f32-dwconv/gen/up1x25-scalar-acc2.c
+++ b/src/f32-dwconv/gen/up1x25-scalar-acc2.c
@@ -21,7 +21,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up1x25-scalar.c b/src/f32-dwconv/gen/up1x25-scalar.c
index bbce4b5..0190a06 100644
--- a/src/f32-dwconv/gen/up1x25-scalar.c
+++ b/src/f32-dwconv/gen/up1x25-scalar.c
@@ -21,7 +21,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up1x25-wasm-acc2.c b/src/f32-dwconv/gen/up1x25-wasm-acc2.c
index e55612d..a699831 100644
--- a/src/f32-dwconv/gen/up1x25-wasm-acc2.c
+++ b/src/f32-dwconv/gen/up1x25-wasm-acc2.c
@@ -21,7 +21,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up1x25-wasm.c b/src/f32-dwconv/gen/up1x25-wasm.c
index e15c1dc..4c58b33 100644
--- a/src/f32-dwconv/gen/up1x25-wasm.c
+++ b/src/f32-dwconv/gen/up1x25-wasm.c
@@ -21,7 +21,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up1x4-minmax-scalar-acc2.c b/src/f32-dwconv/gen/up1x4-minmax-scalar-acc2.c
index 16337cb..06ae4b0 100644
--- a/src/f32-dwconv/gen/up1x4-minmax-scalar-acc2.c
+++ b/src/f32-dwconv/gen/up1x4-minmax-scalar-acc2.c
@@ -21,7 +21,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up1x4-minmax-scalar.c b/src/f32-dwconv/gen/up1x4-minmax-scalar.c
index 84eefb4..1a3fe7c 100644
--- a/src/f32-dwconv/gen/up1x4-minmax-scalar.c
+++ b/src/f32-dwconv/gen/up1x4-minmax-scalar.c
@@ -21,7 +21,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up1x4-minmax-wasm-acc2.c b/src/f32-dwconv/gen/up1x4-minmax-wasm-acc2.c
index 8598a6d..a808841 100644
--- a/src/f32-dwconv/gen/up1x4-minmax-wasm-acc2.c
+++ b/src/f32-dwconv/gen/up1x4-minmax-wasm-acc2.c
@@ -21,7 +21,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up1x4-minmax-wasm.c b/src/f32-dwconv/gen/up1x4-minmax-wasm.c
index f14a78c..e4d6bba 100644
--- a/src/f32-dwconv/gen/up1x4-minmax-wasm.c
+++ b/src/f32-dwconv/gen/up1x4-minmax-wasm.c
@@ -21,7 +21,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up1x4-scalar-acc2.c b/src/f32-dwconv/gen/up1x4-scalar-acc2.c
index a7257ff..f18486f 100644
--- a/src/f32-dwconv/gen/up1x4-scalar-acc2.c
+++ b/src/f32-dwconv/gen/up1x4-scalar-acc2.c
@@ -21,7 +21,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up1x4-scalar.c b/src/f32-dwconv/gen/up1x4-scalar.c
index e567e25..45a34dc 100644
--- a/src/f32-dwconv/gen/up1x4-scalar.c
+++ b/src/f32-dwconv/gen/up1x4-scalar.c
@@ -21,7 +21,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up1x4-wasm-acc2.c b/src/f32-dwconv/gen/up1x4-wasm-acc2.c
index 2f282c3..947ed82 100644
--- a/src/f32-dwconv/gen/up1x4-wasm-acc2.c
+++ b/src/f32-dwconv/gen/up1x4-wasm-acc2.c
@@ -21,7 +21,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up1x4-wasm.c b/src/f32-dwconv/gen/up1x4-wasm.c
index 61d931c..20ed577 100644
--- a/src/f32-dwconv/gen/up1x4-wasm.c
+++ b/src/f32-dwconv/gen/up1x4-wasm.c
@@ -21,7 +21,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up1x9-minmax-scalar-acc2.c b/src/f32-dwconv/gen/up1x9-minmax-scalar-acc2.c
index fe08803..e7dada3 100644
--- a/src/f32-dwconv/gen/up1x9-minmax-scalar-acc2.c
+++ b/src/f32-dwconv/gen/up1x9-minmax-scalar-acc2.c
@@ -21,7 +21,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up1x9-minmax-scalar.c b/src/f32-dwconv/gen/up1x9-minmax-scalar.c
index 4ac0052..faee86b 100644
--- a/src/f32-dwconv/gen/up1x9-minmax-scalar.c
+++ b/src/f32-dwconv/gen/up1x9-minmax-scalar.c
@@ -21,7 +21,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up1x9-minmax-wasm-acc2.c b/src/f32-dwconv/gen/up1x9-minmax-wasm-acc2.c
index d6255dc..a8d55be 100644
--- a/src/f32-dwconv/gen/up1x9-minmax-wasm-acc2.c
+++ b/src/f32-dwconv/gen/up1x9-minmax-wasm-acc2.c
@@ -21,7 +21,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up1x9-minmax-wasm.c b/src/f32-dwconv/gen/up1x9-minmax-wasm.c
index 579c808..e38576e 100644
--- a/src/f32-dwconv/gen/up1x9-minmax-wasm.c
+++ b/src/f32-dwconv/gen/up1x9-minmax-wasm.c
@@ -21,7 +21,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up1x9-scalar-acc2.c b/src/f32-dwconv/gen/up1x9-scalar-acc2.c
index aac8db5..b6756b0 100644
--- a/src/f32-dwconv/gen/up1x9-scalar-acc2.c
+++ b/src/f32-dwconv/gen/up1x9-scalar-acc2.c
@@ -21,7 +21,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up1x9-scalar.c b/src/f32-dwconv/gen/up1x9-scalar.c
index 8a74a48..66ba15c 100644
--- a/src/f32-dwconv/gen/up1x9-scalar.c
+++ b/src/f32-dwconv/gen/up1x9-scalar.c
@@ -21,7 +21,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up1x9-wasm-acc2.c b/src/f32-dwconv/gen/up1x9-wasm-acc2.c
index 81bc10f..c616d5f 100644
--- a/src/f32-dwconv/gen/up1x9-wasm-acc2.c
+++ b/src/f32-dwconv/gen/up1x9-wasm-acc2.c
@@ -21,7 +21,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up1x9-wasm.c b/src/f32-dwconv/gen/up1x9-wasm.c
index b2c740f..76711a4 100644
--- a/src/f32-dwconv/gen/up1x9-wasm.c
+++ b/src/f32-dwconv/gen/up1x9-wasm.c
@@ -21,7 +21,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up2x25-minmax-scalar-acc2.c b/src/f32-dwconv/gen/up2x25-minmax-scalar-acc2.c
index b7d0a5d..dda20bc 100644
--- a/src/f32-dwconv/gen/up2x25-minmax-scalar-acc2.c
+++ b/src/f32-dwconv/gen/up2x25-minmax-scalar-acc2.c
@@ -21,7 +21,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up2x25-minmax-scalar.c b/src/f32-dwconv/gen/up2x25-minmax-scalar.c
index 48e9559..538536f 100644
--- a/src/f32-dwconv/gen/up2x25-minmax-scalar.c
+++ b/src/f32-dwconv/gen/up2x25-minmax-scalar.c
@@ -21,7 +21,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up2x25-minmax-wasm-acc2.c b/src/f32-dwconv/gen/up2x25-minmax-wasm-acc2.c
index 29e9fe1..29deea5 100644
--- a/src/f32-dwconv/gen/up2x25-minmax-wasm-acc2.c
+++ b/src/f32-dwconv/gen/up2x25-minmax-wasm-acc2.c
@@ -21,7 +21,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up2x25-minmax-wasm.c b/src/f32-dwconv/gen/up2x25-minmax-wasm.c
index 4c4994a..532404d 100644
--- a/src/f32-dwconv/gen/up2x25-minmax-wasm.c
+++ b/src/f32-dwconv/gen/up2x25-minmax-wasm.c
@@ -21,7 +21,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up2x25-scalar-acc2.c b/src/f32-dwconv/gen/up2x25-scalar-acc2.c
index 7959371..5ad4b45 100644
--- a/src/f32-dwconv/gen/up2x25-scalar-acc2.c
+++ b/src/f32-dwconv/gen/up2x25-scalar-acc2.c
@@ -21,7 +21,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up2x25-scalar.c b/src/f32-dwconv/gen/up2x25-scalar.c
index 6450af3..042ff22 100644
--- a/src/f32-dwconv/gen/up2x25-scalar.c
+++ b/src/f32-dwconv/gen/up2x25-scalar.c
@@ -21,7 +21,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up2x25-wasm-acc2.c b/src/f32-dwconv/gen/up2x25-wasm-acc2.c
index d99eeca..848bfe8 100644
--- a/src/f32-dwconv/gen/up2x25-wasm-acc2.c
+++ b/src/f32-dwconv/gen/up2x25-wasm-acc2.c
@@ -21,7 +21,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up2x25-wasm.c b/src/f32-dwconv/gen/up2x25-wasm.c
index db97d3b..a4797ab 100644
--- a/src/f32-dwconv/gen/up2x25-wasm.c
+++ b/src/f32-dwconv/gen/up2x25-wasm.c
@@ -21,7 +21,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up2x4-minmax-scalar-acc2.c b/src/f32-dwconv/gen/up2x4-minmax-scalar-acc2.c
index c5d1964..fb000f5 100644
--- a/src/f32-dwconv/gen/up2x4-minmax-scalar-acc2.c
+++ b/src/f32-dwconv/gen/up2x4-minmax-scalar-acc2.c
@@ -21,7 +21,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up2x4-minmax-scalar.c b/src/f32-dwconv/gen/up2x4-minmax-scalar.c
index 63042fc..7e01048 100644
--- a/src/f32-dwconv/gen/up2x4-minmax-scalar.c
+++ b/src/f32-dwconv/gen/up2x4-minmax-scalar.c
@@ -21,7 +21,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up2x4-minmax-wasm-acc2.c b/src/f32-dwconv/gen/up2x4-minmax-wasm-acc2.c
index 597d30a..620533a 100644
--- a/src/f32-dwconv/gen/up2x4-minmax-wasm-acc2.c
+++ b/src/f32-dwconv/gen/up2x4-minmax-wasm-acc2.c
@@ -21,7 +21,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up2x4-minmax-wasm.c b/src/f32-dwconv/gen/up2x4-minmax-wasm.c
index cbb568c..d436a8c 100644
--- a/src/f32-dwconv/gen/up2x4-minmax-wasm.c
+++ b/src/f32-dwconv/gen/up2x4-minmax-wasm.c
@@ -21,7 +21,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up2x4-scalar-acc2.c b/src/f32-dwconv/gen/up2x4-scalar-acc2.c
index 79d48ed..69140e5 100644
--- a/src/f32-dwconv/gen/up2x4-scalar-acc2.c
+++ b/src/f32-dwconv/gen/up2x4-scalar-acc2.c
@@ -21,7 +21,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up2x4-scalar.c b/src/f32-dwconv/gen/up2x4-scalar.c
index eebf1c4..7e87fad 100644
--- a/src/f32-dwconv/gen/up2x4-scalar.c
+++ b/src/f32-dwconv/gen/up2x4-scalar.c
@@ -21,7 +21,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up2x4-wasm-acc2.c b/src/f32-dwconv/gen/up2x4-wasm-acc2.c
index e43051a..41c50f3 100644
--- a/src/f32-dwconv/gen/up2x4-wasm-acc2.c
+++ b/src/f32-dwconv/gen/up2x4-wasm-acc2.c
@@ -21,7 +21,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up2x4-wasm.c b/src/f32-dwconv/gen/up2x4-wasm.c
index f83b17b..c672504 100644
--- a/src/f32-dwconv/gen/up2x4-wasm.c
+++ b/src/f32-dwconv/gen/up2x4-wasm.c
@@ -21,7 +21,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up2x9-minmax-scalar-acc2.c b/src/f32-dwconv/gen/up2x9-minmax-scalar-acc2.c
index 0e0af16..b00c8b3 100644
--- a/src/f32-dwconv/gen/up2x9-minmax-scalar-acc2.c
+++ b/src/f32-dwconv/gen/up2x9-minmax-scalar-acc2.c
@@ -21,7 +21,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up2x9-minmax-scalar.c b/src/f32-dwconv/gen/up2x9-minmax-scalar.c
index 0fe63eb..5f7e7b4 100644
--- a/src/f32-dwconv/gen/up2x9-minmax-scalar.c
+++ b/src/f32-dwconv/gen/up2x9-minmax-scalar.c
@@ -21,7 +21,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up2x9-minmax-wasm-acc2.c b/src/f32-dwconv/gen/up2x9-minmax-wasm-acc2.c
index 5d65623..835b918 100644
--- a/src/f32-dwconv/gen/up2x9-minmax-wasm-acc2.c
+++ b/src/f32-dwconv/gen/up2x9-minmax-wasm-acc2.c
@@ -21,7 +21,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up2x9-minmax-wasm.c b/src/f32-dwconv/gen/up2x9-minmax-wasm.c
index 0ff7dd6..81ec0ba 100644
--- a/src/f32-dwconv/gen/up2x9-minmax-wasm.c
+++ b/src/f32-dwconv/gen/up2x9-minmax-wasm.c
@@ -21,7 +21,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up2x9-scalar-acc2.c b/src/f32-dwconv/gen/up2x9-scalar-acc2.c
index 9ca6ade..20a5f14 100644
--- a/src/f32-dwconv/gen/up2x9-scalar-acc2.c
+++ b/src/f32-dwconv/gen/up2x9-scalar-acc2.c
@@ -21,7 +21,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up2x9-scalar.c b/src/f32-dwconv/gen/up2x9-scalar.c
index 782a07f..e5d4d6a 100644
--- a/src/f32-dwconv/gen/up2x9-scalar.c
+++ b/src/f32-dwconv/gen/up2x9-scalar.c
@@ -21,7 +21,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up2x9-wasm-acc2.c b/src/f32-dwconv/gen/up2x9-wasm-acc2.c
index 11ab70e..42a5537 100644
--- a/src/f32-dwconv/gen/up2x9-wasm-acc2.c
+++ b/src/f32-dwconv/gen/up2x9-wasm-acc2.c
@@ -21,7 +21,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up2x9-wasm.c b/src/f32-dwconv/gen/up2x9-wasm.c
index 09ba380..d146493 100644
--- a/src/f32-dwconv/gen/up2x9-wasm.c
+++ b/src/f32-dwconv/gen/up2x9-wasm.c
@@ -21,7 +21,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up32x25-minmax-avx512f-acc2.c b/src/f32-dwconv/gen/up32x25-minmax-avx512f-acc2.c
index 2bec930..519c28a 100644
--- a/src/f32-dwconv/gen/up32x25-minmax-avx512f-acc2.c
+++ b/src/f32-dwconv/gen/up32x25-minmax-avx512f-acc2.c
@@ -23,7 +23,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up32x25-minmax-avx512f.c b/src/f32-dwconv/gen/up32x25-minmax-avx512f.c
index 6fbeda4..54cf57e 100644
--- a/src/f32-dwconv/gen/up32x25-minmax-avx512f.c
+++ b/src/f32-dwconv/gen/up32x25-minmax-avx512f.c
@@ -23,7 +23,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up32x4-minmax-avx512f-acc2.c b/src/f32-dwconv/gen/up32x4-minmax-avx512f-acc2.c
index 008d9f7..55ce652 100644
--- a/src/f32-dwconv/gen/up32x4-minmax-avx512f-acc2.c
+++ b/src/f32-dwconv/gen/up32x4-minmax-avx512f-acc2.c
@@ -23,7 +23,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up32x4-minmax-avx512f.c b/src/f32-dwconv/gen/up32x4-minmax-avx512f.c
index 4e13f95..6de0600 100644
--- a/src/f32-dwconv/gen/up32x4-minmax-avx512f.c
+++ b/src/f32-dwconv/gen/up32x4-minmax-avx512f.c
@@ -23,7 +23,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up32x9-minmax-avx512f-acc2.c b/src/f32-dwconv/gen/up32x9-minmax-avx512f-acc2.c
index 318d64f..18ce99d 100644
--- a/src/f32-dwconv/gen/up32x9-minmax-avx512f-acc2.c
+++ b/src/f32-dwconv/gen/up32x9-minmax-avx512f-acc2.c
@@ -23,7 +23,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up32x9-minmax-avx512f.c b/src/f32-dwconv/gen/up32x9-minmax-avx512f.c
index b376e51..d6dc3fb 100644
--- a/src/f32-dwconv/gen/up32x9-minmax-avx512f.c
+++ b/src/f32-dwconv/gen/up32x9-minmax-avx512f.c
@@ -23,7 +23,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up4x25-minmax-psimd-acc2.c b/src/f32-dwconv/gen/up4x25-minmax-psimd-acc2.c
index beeadc6..8522a71 100644
--- a/src/f32-dwconv/gen/up4x25-minmax-psimd-acc2.c
+++ b/src/f32-dwconv/gen/up4x25-minmax-psimd-acc2.c
@@ -22,7 +22,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up4x25-minmax-psimd.c b/src/f32-dwconv/gen/up4x25-minmax-psimd.c
index 7e12c1a..0d058c7 100644
--- a/src/f32-dwconv/gen/up4x25-minmax-psimd.c
+++ b/src/f32-dwconv/gen/up4x25-minmax-psimd.c
@@ -22,7 +22,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up4x25-minmax-sse-acc2.c b/src/f32-dwconv/gen/up4x25-minmax-sse-acc2.c
index 8ef36a5..d4dd27e 100644
--- a/src/f32-dwconv/gen/up4x25-minmax-sse-acc2.c
+++ b/src/f32-dwconv/gen/up4x25-minmax-sse-acc2.c
@@ -22,7 +22,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up4x25-minmax-sse.c b/src/f32-dwconv/gen/up4x25-minmax-sse.c
index 0f40088..618c518 100644
--- a/src/f32-dwconv/gen/up4x25-minmax-sse.c
+++ b/src/f32-dwconv/gen/up4x25-minmax-sse.c
@@ -22,7 +22,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up4x4-minmax-psimd-acc2.c b/src/f32-dwconv/gen/up4x4-minmax-psimd-acc2.c
index 12cfafe..fbb751f 100644
--- a/src/f32-dwconv/gen/up4x4-minmax-psimd-acc2.c
+++ b/src/f32-dwconv/gen/up4x4-minmax-psimd-acc2.c
@@ -22,7 +22,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up4x4-minmax-psimd.c b/src/f32-dwconv/gen/up4x4-minmax-psimd.c
index a2556e2..d109b2f 100644
--- a/src/f32-dwconv/gen/up4x4-minmax-psimd.c
+++ b/src/f32-dwconv/gen/up4x4-minmax-psimd.c
@@ -22,7 +22,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up4x4-minmax-sse-acc2.c b/src/f32-dwconv/gen/up4x4-minmax-sse-acc2.c
index 4c53b03..7b988b9 100644
--- a/src/f32-dwconv/gen/up4x4-minmax-sse-acc2.c
+++ b/src/f32-dwconv/gen/up4x4-minmax-sse-acc2.c
@@ -22,7 +22,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up4x4-minmax-sse.c b/src/f32-dwconv/gen/up4x4-minmax-sse.c
index 5eae2fd..7fc92d6 100644
--- a/src/f32-dwconv/gen/up4x4-minmax-sse.c
+++ b/src/f32-dwconv/gen/up4x4-minmax-sse.c
@@ -22,7 +22,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up4x9-minmax-neon-acc2.c b/src/f32-dwconv/gen/up4x9-minmax-neon-acc2.c
index 71935f5..d2b0ff4 100644
--- a/src/f32-dwconv/gen/up4x9-minmax-neon-acc2.c
+++ b/src/f32-dwconv/gen/up4x9-minmax-neon-acc2.c
@@ -22,7 +22,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up4x9-minmax-neon.c b/src/f32-dwconv/gen/up4x9-minmax-neon.c
index 19782eb..9fd849c 100644
--- a/src/f32-dwconv/gen/up4x9-minmax-neon.c
+++ b/src/f32-dwconv/gen/up4x9-minmax-neon.c
@@ -22,7 +22,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up4x9-minmax-neonfma-acc2.c b/src/f32-dwconv/gen/up4x9-minmax-neonfma-acc2.c
index 7faa1c1..61ced48 100644
--- a/src/f32-dwconv/gen/up4x9-minmax-neonfma-acc2.c
+++ b/src/f32-dwconv/gen/up4x9-minmax-neonfma-acc2.c
@@ -22,7 +22,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up4x9-minmax-neonfma.c b/src/f32-dwconv/gen/up4x9-minmax-neonfma.c
index 495af58..9d87788 100644
--- a/src/f32-dwconv/gen/up4x9-minmax-neonfma.c
+++ b/src/f32-dwconv/gen/up4x9-minmax-neonfma.c
@@ -22,7 +22,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up4x9-minmax-psimd-acc2.c b/src/f32-dwconv/gen/up4x9-minmax-psimd-acc2.c
index 4806afc..6a20530 100644
--- a/src/f32-dwconv/gen/up4x9-minmax-psimd-acc2.c
+++ b/src/f32-dwconv/gen/up4x9-minmax-psimd-acc2.c
@@ -22,7 +22,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up4x9-minmax-psimd.c b/src/f32-dwconv/gen/up4x9-minmax-psimd.c
index db85fe5..8895bb3 100644
--- a/src/f32-dwconv/gen/up4x9-minmax-psimd.c
+++ b/src/f32-dwconv/gen/up4x9-minmax-psimd.c
@@ -22,7 +22,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up4x9-minmax-sse-acc2.c b/src/f32-dwconv/gen/up4x9-minmax-sse-acc2.c
index 683eb1c..e7915c4 100644
--- a/src/f32-dwconv/gen/up4x9-minmax-sse-acc2.c
+++ b/src/f32-dwconv/gen/up4x9-minmax-sse-acc2.c
@@ -22,7 +22,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up4x9-minmax-sse.c b/src/f32-dwconv/gen/up4x9-minmax-sse.c
index 6a9b9a8..327a39b 100644
--- a/src/f32-dwconv/gen/up4x9-minmax-sse.c
+++ b/src/f32-dwconv/gen/up4x9-minmax-sse.c
@@ -22,7 +22,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up8x25-minmax-avx-acc2.c b/src/f32-dwconv/gen/up8x25-minmax-avx-acc2.c
index 747f6e8..ba5c75f 100644
--- a/src/f32-dwconv/gen/up8x25-minmax-avx-acc2.c
+++ b/src/f32-dwconv/gen/up8x25-minmax-avx-acc2.c
@@ -24,7 +24,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up8x25-minmax-avx.c b/src/f32-dwconv/gen/up8x25-minmax-avx.c
index 44a5cd0..6f0aa39 100644
--- a/src/f32-dwconv/gen/up8x25-minmax-avx.c
+++ b/src/f32-dwconv/gen/up8x25-minmax-avx.c
@@ -24,7 +24,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up8x25-minmax-fma3-acc2.c b/src/f32-dwconv/gen/up8x25-minmax-fma3-acc2.c
index e6b58e8..6756a43 100644
--- a/src/f32-dwconv/gen/up8x25-minmax-fma3-acc2.c
+++ b/src/f32-dwconv/gen/up8x25-minmax-fma3-acc2.c
@@ -24,7 +24,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up8x25-minmax-fma3.c b/src/f32-dwconv/gen/up8x25-minmax-fma3.c
index 35953a2..921ca42 100644
--- a/src/f32-dwconv/gen/up8x25-minmax-fma3.c
+++ b/src/f32-dwconv/gen/up8x25-minmax-fma3.c
@@ -24,7 +24,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up8x25-minmax-psimd-acc2.c b/src/f32-dwconv/gen/up8x25-minmax-psimd-acc2.c
index 612e8dd..165ffca 100644
--- a/src/f32-dwconv/gen/up8x25-minmax-psimd-acc2.c
+++ b/src/f32-dwconv/gen/up8x25-minmax-psimd-acc2.c
@@ -22,7 +22,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up8x25-minmax-psimd.c b/src/f32-dwconv/gen/up8x25-minmax-psimd.c
index 59489a5..a4f9af5 100644
--- a/src/f32-dwconv/gen/up8x25-minmax-psimd.c
+++ b/src/f32-dwconv/gen/up8x25-minmax-psimd.c
@@ -22,7 +22,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up8x25-minmax-sse-acc2.c b/src/f32-dwconv/gen/up8x25-minmax-sse-acc2.c
index c8d8a69..a8b3793 100644
--- a/src/f32-dwconv/gen/up8x25-minmax-sse-acc2.c
+++ b/src/f32-dwconv/gen/up8x25-minmax-sse-acc2.c
@@ -22,7 +22,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up8x25-minmax-sse.c b/src/f32-dwconv/gen/up8x25-minmax-sse.c
index 8619bde..81deb02 100644
--- a/src/f32-dwconv/gen/up8x25-minmax-sse.c
+++ b/src/f32-dwconv/gen/up8x25-minmax-sse.c
@@ -22,7 +22,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up8x4-minmax-avx-acc2.c b/src/f32-dwconv/gen/up8x4-minmax-avx-acc2.c
index a8eb889..972e724 100644
--- a/src/f32-dwconv/gen/up8x4-minmax-avx-acc2.c
+++ b/src/f32-dwconv/gen/up8x4-minmax-avx-acc2.c
@@ -24,7 +24,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up8x4-minmax-avx.c b/src/f32-dwconv/gen/up8x4-minmax-avx.c
index 2c4cfbd..060c9a7 100644
--- a/src/f32-dwconv/gen/up8x4-minmax-avx.c
+++ b/src/f32-dwconv/gen/up8x4-minmax-avx.c
@@ -24,7 +24,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up8x4-minmax-fma3-acc2.c b/src/f32-dwconv/gen/up8x4-minmax-fma3-acc2.c
index 0967ad5..30b63c2 100644
--- a/src/f32-dwconv/gen/up8x4-minmax-fma3-acc2.c
+++ b/src/f32-dwconv/gen/up8x4-minmax-fma3-acc2.c
@@ -24,7 +24,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up8x4-minmax-fma3.c b/src/f32-dwconv/gen/up8x4-minmax-fma3.c
index 14eb4a6..c90809d 100644
--- a/src/f32-dwconv/gen/up8x4-minmax-fma3.c
+++ b/src/f32-dwconv/gen/up8x4-minmax-fma3.c
@@ -24,7 +24,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up8x4-minmax-psimd-acc2.c b/src/f32-dwconv/gen/up8x4-minmax-psimd-acc2.c
index 4da2b28..9846a00 100644
--- a/src/f32-dwconv/gen/up8x4-minmax-psimd-acc2.c
+++ b/src/f32-dwconv/gen/up8x4-minmax-psimd-acc2.c
@@ -22,7 +22,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up8x4-minmax-psimd.c b/src/f32-dwconv/gen/up8x4-minmax-psimd.c
index ecb5139..20279da 100644
--- a/src/f32-dwconv/gen/up8x4-minmax-psimd.c
+++ b/src/f32-dwconv/gen/up8x4-minmax-psimd.c
@@ -22,7 +22,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up8x4-minmax-sse-acc2.c b/src/f32-dwconv/gen/up8x4-minmax-sse-acc2.c
index c693a99..8a4e249 100644
--- a/src/f32-dwconv/gen/up8x4-minmax-sse-acc2.c
+++ b/src/f32-dwconv/gen/up8x4-minmax-sse-acc2.c
@@ -22,7 +22,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up8x4-minmax-sse.c b/src/f32-dwconv/gen/up8x4-minmax-sse.c
index 7650a8a..8060da3 100644
--- a/src/f32-dwconv/gen/up8x4-minmax-sse.c
+++ b/src/f32-dwconv/gen/up8x4-minmax-sse.c
@@ -22,7 +22,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up8x9-minmax-avx-acc2.c b/src/f32-dwconv/gen/up8x9-minmax-avx-acc2.c
index 363ec0f..9a48b36 100644
--- a/src/f32-dwconv/gen/up8x9-minmax-avx-acc2.c
+++ b/src/f32-dwconv/gen/up8x9-minmax-avx-acc2.c
@@ -24,7 +24,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up8x9-minmax-avx.c b/src/f32-dwconv/gen/up8x9-minmax-avx.c
index 038a80c..ca4d83b 100644
--- a/src/f32-dwconv/gen/up8x9-minmax-avx.c
+++ b/src/f32-dwconv/gen/up8x9-minmax-avx.c
@@ -24,7 +24,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up8x9-minmax-fma3-acc2.c b/src/f32-dwconv/gen/up8x9-minmax-fma3-acc2.c
index 951d68b..07f553b 100644
--- a/src/f32-dwconv/gen/up8x9-minmax-fma3-acc2.c
+++ b/src/f32-dwconv/gen/up8x9-minmax-fma3-acc2.c
@@ -24,7 +24,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up8x9-minmax-fma3.c b/src/f32-dwconv/gen/up8x9-minmax-fma3.c
index f3062a3..04f771f 100644
--- a/src/f32-dwconv/gen/up8x9-minmax-fma3.c
+++ b/src/f32-dwconv/gen/up8x9-minmax-fma3.c
@@ -24,7 +24,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up8x9-minmax-neon-acc2.c b/src/f32-dwconv/gen/up8x9-minmax-neon-acc2.c
index a6365a6..65479c5 100644
--- a/src/f32-dwconv/gen/up8x9-minmax-neon-acc2.c
+++ b/src/f32-dwconv/gen/up8x9-minmax-neon-acc2.c
@@ -22,7 +22,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up8x9-minmax-neon.c b/src/f32-dwconv/gen/up8x9-minmax-neon.c
index 8a2be8d..b68f7a7 100644
--- a/src/f32-dwconv/gen/up8x9-minmax-neon.c
+++ b/src/f32-dwconv/gen/up8x9-minmax-neon.c
@@ -22,7 +22,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up8x9-minmax-neonfma-acc2.c b/src/f32-dwconv/gen/up8x9-minmax-neonfma-acc2.c
index fe3725a..1339428 100644
--- a/src/f32-dwconv/gen/up8x9-minmax-neonfma-acc2.c
+++ b/src/f32-dwconv/gen/up8x9-minmax-neonfma-acc2.c
@@ -22,7 +22,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up8x9-minmax-neonfma.c b/src/f32-dwconv/gen/up8x9-minmax-neonfma.c
index b43ca38..6e30560 100644
--- a/src/f32-dwconv/gen/up8x9-minmax-neonfma.c
+++ b/src/f32-dwconv/gen/up8x9-minmax-neonfma.c
@@ -22,7 +22,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up8x9-minmax-psimd-acc2.c b/src/f32-dwconv/gen/up8x9-minmax-psimd-acc2.c
index 763bfff..b16b60f 100644
--- a/src/f32-dwconv/gen/up8x9-minmax-psimd-acc2.c
+++ b/src/f32-dwconv/gen/up8x9-minmax-psimd-acc2.c
@@ -22,7 +22,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up8x9-minmax-psimd.c b/src/f32-dwconv/gen/up8x9-minmax-psimd.c
index d5f2a73..fa840b8 100644
--- a/src/f32-dwconv/gen/up8x9-minmax-psimd.c
+++ b/src/f32-dwconv/gen/up8x9-minmax-psimd.c
@@ -22,7 +22,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up8x9-minmax-sse-acc2.c b/src/f32-dwconv/gen/up8x9-minmax-sse-acc2.c
index f478881..a3accc7 100644
--- a/src/f32-dwconv/gen/up8x9-minmax-sse-acc2.c
+++ b/src/f32-dwconv/gen/up8x9-minmax-sse-acc2.c
@@ -22,7 +22,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/gen/up8x9-minmax-sse.c b/src/f32-dwconv/gen/up8x9-minmax-sse.c
index c132b45..ca5dbe0 100644
--- a/src/f32-dwconv/gen/up8x9-minmax-sse.c
+++ b/src/f32-dwconv/gen/up8x9-minmax-sse.c
@@ -22,7 +22,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/up-avx.c.in b/src/f32-dwconv/up-avx.c.in
index 3963ae9..0f32617 100644
--- a/src/f32-dwconv/up-avx.c.in
+++ b/src/f32-dwconv/up-avx.c.in
@@ -25,7 +25,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/up-avx512.c.in b/src/f32-dwconv/up-avx512.c.in
index 49e4255..4e542d6 100644
--- a/src/f32-dwconv/up-avx512.c.in
+++ b/src/f32-dwconv/up-avx512.c.in
@@ -23,7 +23,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/up-neon.c.in b/src/f32-dwconv/up-neon.c.in
index 4c2385a..9a0bd27 100644
--- a/src/f32-dwconv/up-neon.c.in
+++ b/src/f32-dwconv/up-neon.c.in
@@ -23,7 +23,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/up-psimd.c.in b/src/f32-dwconv/up-psimd.c.in
index aef406a..87feacf 100644
--- a/src/f32-dwconv/up-psimd.c.in
+++ b/src/f32-dwconv/up-psimd.c.in
@@ -22,7 +22,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/up-scalar.c.in b/src/f32-dwconv/up-scalar.c.in
index c8b66b4..2d14415 100644
--- a/src/f32-dwconv/up-scalar.c.in
+++ b/src/f32-dwconv/up-scalar.c.in
@@ -26,7 +26,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union ${PARAMS} params[restrict static 1])
+    const union ${PARAMS} params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/up-sse.c.in b/src/f32-dwconv/up-sse.c.in
index 670a753..f242cd3 100644
--- a/src/f32-dwconv/up-sse.c.in
+++ b/src/f32-dwconv/up-sse.c.in
@@ -22,7 +22,7 @@
     float* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(channels != 0);
   assert(output_width != 0);
diff --git a/src/f32-dwconv/up4x9-minmax-aarch64-neonfma-cortex-a55.S b/src/f32-dwconv/up4x9-minmax-aarch64-neonfma-cortex-a55.S
index c20c500..335bde7 100644
--- a/src/f32-dwconv/up4x9-minmax-aarch64-neonfma-cortex-a55.S
+++ b/src/f32-dwconv/up4x9-minmax-aarch64-neonfma-cortex-a55.S
@@ -13,7 +13,7 @@
 #     float* output,
 #     size_t input_stride,
 #     size_t output_increment,
-#     const union xnn_f32_minmax_params params[restrict static 1])
+#     const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 BEGIN_FUNCTION xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma_cortex_a55
 
         # Save d10-d15 on stack
diff --git a/src/f32-dwconv/up4x9-minmax-aarch64-neonfma.S b/src/f32-dwconv/up4x9-minmax-aarch64-neonfma.S
index 0b5d244..22524f9 100644
--- a/src/f32-dwconv/up4x9-minmax-aarch64-neonfma.S
+++ b/src/f32-dwconv/up4x9-minmax-aarch64-neonfma.S
@@ -13,7 +13,7 @@
 #     float* output,
 #     size_t input_stride,
 #     size_t output_increment,
-#     const union xnn_f32_minmax_params params[restrict static 1])
+#     const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 BEGIN_FUNCTION xnn_f32_dwconv_minmax_ukernel_up4x9__aarch64_neonfma
 
         # Save d8-d15 on stack
diff --git a/src/f32-gavgpool-spchw/neon-x4.c b/src/f32-gavgpool-spchw/neon-x4.c
index a219637..849ca22 100644
--- a/src/f32-gavgpool-spchw/neon-x4.c
+++ b/src/f32-gavgpool-spchw/neon-x4.c
@@ -16,7 +16,7 @@
     size_t channels,
     const float* input,
     float* output,
-    const union xnn_f32_gavgpool_params params[restrict static 1])
+    const union xnn_f32_gavgpool_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(elements != 0);
   assert(elements % sizeof(float) == 0);
diff --git a/src/f32-gavgpool-spchw/scalar-x1.c b/src/f32-gavgpool-spchw/scalar-x1.c
index 63599fa..96e7977 100644
--- a/src/f32-gavgpool-spchw/scalar-x1.c
+++ b/src/f32-gavgpool-spchw/scalar-x1.c
@@ -14,7 +14,7 @@
     size_t channels,
     const float* input,
     float* output,
-    const union xnn_f32_gavgpool_params params[restrict static 1])
+    const union xnn_f32_gavgpool_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(elements != 0);
   assert(elements % sizeof(float) == 0);
diff --git a/src/f32-gavgpool-spchw/sse-x4.c b/src/f32-gavgpool-spchw/sse-x4.c
index e294cfb..8a100b4 100644
--- a/src/f32-gavgpool-spchw/sse-x4.c
+++ b/src/f32-gavgpool-spchw/sse-x4.c
@@ -16,7 +16,7 @@
     size_t channels,
     const float* input,
     float* output,
-    const union xnn_f32_gavgpool_params params[restrict static 1])
+    const union xnn_f32_gavgpool_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(elements != 0);
   assert(elements % sizeof(float) == 0);
diff --git a/src/f32-gavgpool/7p7x-minmax-neon-c4.c b/src/f32-gavgpool/7p7x-minmax-neon-c4.c
index 29a2204..2a708ca 100644
--- a/src/f32-gavgpool/7p7x-minmax-neon-c4.c
+++ b/src/f32-gavgpool/7p7x-minmax-neon-c4.c
@@ -19,7 +19,7 @@
     const float* zero,
     float* buffer,
     float* output,
-    const union xnn_f32_scaleminmax_params params[restrict static 1])
+    const union xnn_f32_scaleminmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(rows > 7);
   assert(channels != 0);
diff --git a/src/f32-gavgpool/7p7x-minmax-psimd-c4.c b/src/f32-gavgpool/7p7x-minmax-psimd-c4.c
index 7bc0c76..12271a6 100644
--- a/src/f32-gavgpool/7p7x-minmax-psimd-c4.c
+++ b/src/f32-gavgpool/7p7x-minmax-psimd-c4.c
@@ -19,7 +19,7 @@
     const float* zero,
     float* buffer,
     float* output,
-    const union xnn_f32_scaleminmax_params params[restrict static 1])
+    const union xnn_f32_scaleminmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(rows > 7);
   assert(channels != 0);
diff --git a/src/f32-gavgpool/7p7x-minmax-scalar-c1.c b/src/f32-gavgpool/7p7x-minmax-scalar-c1.c
index 1887d7a..5291c0c 100644
--- a/src/f32-gavgpool/7p7x-minmax-scalar-c1.c
+++ b/src/f32-gavgpool/7p7x-minmax-scalar-c1.c
@@ -17,7 +17,7 @@
     const float* zero,
     float* buffer,
     float* output,
-    const union xnn_f32_scaleminmax_params params[restrict static 1])
+    const union xnn_f32_scaleminmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(rows > 7);
   assert(channels != 0);
diff --git a/src/f32-gavgpool/7p7x-minmax-sse-c4.c b/src/f32-gavgpool/7p7x-minmax-sse-c4.c
index b8ad3b8..3d9af70 100644
--- a/src/f32-gavgpool/7p7x-minmax-sse-c4.c
+++ b/src/f32-gavgpool/7p7x-minmax-sse-c4.c
@@ -19,7 +19,7 @@
     const float* zero,
     float* buffer,
     float* output,
-    const union xnn_f32_scaleminmax_params params[restrict static 1])
+    const union xnn_f32_scaleminmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(rows > 7);
   assert(channels != 0);
diff --git a/src/f32-gavgpool/7p7x-minmax-wasm-c1.c b/src/f32-gavgpool/7p7x-minmax-wasm-c1.c
index 04ed43d..9a5c040 100644
--- a/src/f32-gavgpool/7p7x-minmax-wasm-c1.c
+++ b/src/f32-gavgpool/7p7x-minmax-wasm-c1.c
@@ -17,7 +17,7 @@
     const float* zero,
     float* buffer,
     float* output,
-    const union xnn_f32_scaleminmax_params params[restrict static 1])
+    const union xnn_f32_scaleminmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(rows > 7);
   assert(channels != 0);
diff --git a/src/f32-gavgpool/7x-minmax-neon-c4.c b/src/f32-gavgpool/7x-minmax-neon-c4.c
index 915446c..c597472 100644
--- a/src/f32-gavgpool/7x-minmax-neon-c4.c
+++ b/src/f32-gavgpool/7x-minmax-neon-c4.c
@@ -17,7 +17,7 @@
     size_t input_stride,
     const float* zero,
     float* output,
-    const union xnn_f32_scaleminmax_params params[restrict static 1])
+    const union xnn_f32_scaleminmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(rows != 0);
   assert(rows <= 7);
diff --git a/src/f32-gavgpool/7x-minmax-psimd-c4.c b/src/f32-gavgpool/7x-minmax-psimd-c4.c
index b1069de..7bd204a 100644
--- a/src/f32-gavgpool/7x-minmax-psimd-c4.c
+++ b/src/f32-gavgpool/7x-minmax-psimd-c4.c
@@ -17,7 +17,7 @@
     size_t input_stride,
     const float* zero,
     float* output,
-    const union xnn_f32_scaleminmax_params params[restrict static 1])
+    const union xnn_f32_scaleminmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(rows != 0);
   assert(rows <= 7);
diff --git a/src/f32-gavgpool/7x-minmax-scalar-c1.c b/src/f32-gavgpool/7x-minmax-scalar-c1.c
index 04b5b8a..d6d0986 100644
--- a/src/f32-gavgpool/7x-minmax-scalar-c1.c
+++ b/src/f32-gavgpool/7x-minmax-scalar-c1.c
@@ -16,7 +16,7 @@
     size_t input_stride,
     const float* zero,
     float* output,
-    const union xnn_f32_scaleminmax_params params[restrict static 1])
+    const union xnn_f32_scaleminmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(rows != 0);
   assert(rows <= 7);
diff --git a/src/f32-gavgpool/7x-minmax-sse-c4.c b/src/f32-gavgpool/7x-minmax-sse-c4.c
index 32f73ea..436b964 100644
--- a/src/f32-gavgpool/7x-minmax-sse-c4.c
+++ b/src/f32-gavgpool/7x-minmax-sse-c4.c
@@ -17,7 +17,7 @@
     size_t input_stride,
     const float* zero,
     float* output,
-    const union xnn_f32_scaleminmax_params params[restrict static 1])
+    const union xnn_f32_scaleminmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(rows != 0);
   assert(rows <= 7);
diff --git a/src/f32-gavgpool/7x-minmax-wasm-c1.c b/src/f32-gavgpool/7x-minmax-wasm-c1.c
index da6f408..c517ee7 100644
--- a/src/f32-gavgpool/7x-minmax-wasm-c1.c
+++ b/src/f32-gavgpool/7x-minmax-wasm-c1.c
@@ -16,7 +16,7 @@
     size_t input_stride,
     const float* zero,
     float* output,
-    const union xnn_f32_scaleminmax_params params[restrict static 1])
+    const union xnn_f32_scaleminmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(rows != 0);
   assert(rows <= 7);
diff --git a/src/f32-gemm/1x12-aarch64-neonfma-cortex-a53.S.in b/src/f32-gemm/1x12-aarch64-neonfma-cortex-a53.S.in
index 351bf40..1043eca 100644
--- a/src/f32-gemm/1x12-aarch64-neonfma-cortex-a53.S.in
+++ b/src/f32-gemm/1x12-aarch64-neonfma-cortex-a53.S.in
@@ -17,9 +17,9 @@
 #     size_t cn_stride,         [sp] -> x14
 $if INC:
   #     const float*restrict acc,  [sp + 8] -> x15
-  #     const union xnn_f32_minmax_params params[restrict static 1])  [sp + 16] -> x8
+  #     const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])  [sp + 16] -> x8
 $else:
-  #     const union xnn_f32_minmax_params params[restrict static 1])  [sp + 8] -> x8
+  #     const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])  [sp + 8] -> x8
 
 # d8-d15 need to be preserved if used.
 # x19-30 need to be preserved if used.
diff --git a/src/f32-gemm/1x8-aarch64-neonfma-cortex-a53.S.in b/src/f32-gemm/1x8-aarch64-neonfma-cortex-a53.S.in
index 8ed4e5f..d812c2c 100644
--- a/src/f32-gemm/1x8-aarch64-neonfma-cortex-a53.S.in
+++ b/src/f32-gemm/1x8-aarch64-neonfma-cortex-a53.S.in
@@ -17,9 +17,9 @@
 #     size_t cn_stride,         [sp] -> x14
 $if INC:
   #     const float*restrict acc,  [sp + 8] -> x15
-  #     const union xnn_f32_minmax_params params[restrict static 1])  [sp + 16] -> x8
+  #     const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])  [sp + 16] -> x8
 $else:
-  #     const union xnn_f32_minmax_params params[restrict static 1])  [sp + 8] -> x8
+  #     const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])  [sp + 8] -> x8
 
 # d8-d15 need to be preserved if used.
 # x19-30 need to be preserved if used.
diff --git a/src/f32-gemm/1x8-aarch64-neonfma-cortex-a75.S.in b/src/f32-gemm/1x8-aarch64-neonfma-cortex-a75.S.in
index 2ecd475..3beb346 100644
--- a/src/f32-gemm/1x8-aarch64-neonfma-cortex-a75.S.in
+++ b/src/f32-gemm/1x8-aarch64-neonfma-cortex-a75.S.in
@@ -17,9 +17,9 @@
 #     size_t cn_stride,         [sp] -> x14
 $if INC:
   #     const float*restrict acc,  [sp + 8] -> x15
-  #     const union xnn_f32_minmax_params params[restrict static 1])  [sp + 16] -> x8
+  #     const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])  [sp + 16] -> x8
 $else:
-  #     const union xnn_f32_minmax_params params[restrict static 1])  [sp + 8] -> x8
+  #     const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])  [sp + 8] -> x8
 
 # d8-d15 need to be preserved if used.
 # x19-30 need to be preserved if used.
diff --git a/src/f32-gemm/1x8-aarch64-neonfma-ld64.S.in b/src/f32-gemm/1x8-aarch64-neonfma-ld64.S.in
index d5a6350..3b0237b 100644
--- a/src/f32-gemm/1x8-aarch64-neonfma-ld64.S.in
+++ b/src/f32-gemm/1x8-aarch64-neonfma-ld64.S.in
@@ -17,9 +17,9 @@
 #     size_t cn_stride,         [sp] -> x14
 $if INC:
   #     const float*restrict acc,  [sp + 8] -> x15
-  #     const union xnn_f32_minmax_params params[restrict static 1])  [sp + 16] -> x8
+  #     const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])  [sp + 16] -> x8
 $else:
-  #     const union xnn_f32_minmax_params params[restrict static 1])  [sp + 8] -> x8
+  #     const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])  [sp + 8] -> x8
 
 # d8-d15 need to be preserved if used.
 # x19-30 need to be preserved if used.
diff --git a/src/f32-gemm/4x12-aarch64-neonfma-cortex-a53.S.in b/src/f32-gemm/4x12-aarch64-neonfma-cortex-a53.S.in
index a3d41e4..05e19ae 100644
--- a/src/f32-gemm/4x12-aarch64-neonfma-cortex-a53.S.in
+++ b/src/f32-gemm/4x12-aarch64-neonfma-cortex-a53.S.in
@@ -17,9 +17,9 @@
 #     size_t cn_stride,         [sp] -> x14
 $if INC:
   #     const float*restrict acc,  [sp + 8] -> x15
-  #     const union xnn_f32_minmax_params params[restrict static 1])  [sp + 16] -> x8
+  #     const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])  [sp + 16] -> x8
 $else:
-  #     const union xnn_f32_minmax_params params[restrict static 1])  [sp + 8] -> x8
+  #     const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])  [sp + 8] -> x8
 
 # d8-d15 need to be preserved if used.
 # x19-30 need to be preserved if used.
diff --git a/src/f32-gemm/4x8-aarch32-neon-cortex-a75.S.in b/src/f32-gemm/4x8-aarch32-neon-cortex-a75.S.in
index f8778c7..9a627a3 100644
--- a/src/f32-gemm/4x8-aarch32-neon-cortex-a75.S.in
+++ b/src/f32-gemm/4x8-aarch32-neon-cortex-a75.S.in
@@ -17,7 +17,7 @@
 //     uint8_t*restrict c,       sp + 104 -> r11
 //     size_t cm_stride,         sp + 108 -> (r6)
 //     size_t cn_stride,         sp + 112 -> r7
-//     const union xnn_f32_minmax_params params[restrict static 1])  sp + 116 -> (r7)
+//     const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])  sp + 116 -> (r7)
 
 
 // inner loop registers
diff --git a/src/f32-gemm/4x8-aarch64-neonfma-cortex-a53.S.in b/src/f32-gemm/4x8-aarch64-neonfma-cortex-a53.S.in
index 88f8b04..fc0b8f2 100644
--- a/src/f32-gemm/4x8-aarch64-neonfma-cortex-a53.S.in
+++ b/src/f32-gemm/4x8-aarch64-neonfma-cortex-a53.S.in
@@ -17,9 +17,9 @@
 #     size_t cn_stride,         [sp] -> x14
 $if INC:
   #     const float*restrict acc,  [sp + 8] -> x15
-  #     const union xnn_f32_minmax_params params[restrict static 1])  [sp + 16] -> x8
+  #     const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])  [sp + 16] -> x8
 $else:
-  #     const union xnn_f32_minmax_params params[restrict static 1])  [sp + 8] -> x8
+  #     const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])  [sp + 8] -> x8
 
 # d8-d15 need to be preserved if used.
 # x19-30 need to be preserved if used.
diff --git a/src/f32-gemm/4x8-aarch64-neonfma-cortex-a55.S.in b/src/f32-gemm/4x8-aarch64-neonfma-cortex-a55.S.in
index 21d3ab3..dee1997 100644
--- a/src/f32-gemm/4x8-aarch64-neonfma-cortex-a55.S.in
+++ b/src/f32-gemm/4x8-aarch64-neonfma-cortex-a55.S.in
@@ -17,9 +17,9 @@
 #     size_t cn_stride,         [sp] -> x14
 $if INC:
   #     const float*restrict acc,  [sp + 8] -> x15
-  #     const union xnn_f32_minmax_params params[restrict static 1])  [sp + 16] -> x8
+  #     const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])  [sp + 16] -> x8
 $else:
-  #     const union xnn_f32_minmax_params params[restrict static 1])  [sp + 8] -> x8
+  #     const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])  [sp + 8] -> x8
 
 # d8-d15 need to be preserved if used.
 # x19-30 need to be preserved if used.
diff --git a/src/f32-gemm/4x8-aarch64-neonfma-cortex-a75.S.in b/src/f32-gemm/4x8-aarch64-neonfma-cortex-a75.S.in
index 461a6f6..19168ea 100644
--- a/src/f32-gemm/4x8-aarch64-neonfma-cortex-a75.S.in
+++ b/src/f32-gemm/4x8-aarch64-neonfma-cortex-a75.S.in
@@ -17,9 +17,9 @@
 #     size_t cn_stride,         [sp] -> x14
 $if INC:
   #     const float*restrict acc,  [sp + 8] -> x15
-  #     const union xnn_f32_minmax_params params[restrict static 1])  [sp + 16] -> x8
+  #     const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])  [sp + 16] -> x8
 $else:
-  #     const union xnn_f32_minmax_params params[restrict static 1])  [sp + 8] -> x8
+  #     const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])  [sp + 8] -> x8
 
 # d8-d15 need to be preserved if used.
 # x19-30 need to be preserved if used.
diff --git a/src/f32-gemm/4x8-aarch64-neonfma-ld128.S.in b/src/f32-gemm/4x8-aarch64-neonfma-ld128.S.in
index 1bfc6e4..a4918da 100644
--- a/src/f32-gemm/4x8-aarch64-neonfma-ld128.S.in
+++ b/src/f32-gemm/4x8-aarch64-neonfma-ld128.S.in
@@ -17,9 +17,9 @@
 #     size_t cn_stride,         [sp] -> x14
 $if INC:
   #     const float*restrict acc,  [sp + 8] -> x15
-  #     const union xnn_f32_minmax_params params[restrict static 1])  [sp + 16] -> x8
+  #     const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])  [sp + 16] -> x8
 $else:
-  #     const union xnn_f32_minmax_params params[restrict static 1])  [sp + 8] -> x8
+  #     const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])  [sp + 8] -> x8
 
 # d8-d15 need to be preserved if used.
 # x19-30 need to be preserved if used.
diff --git a/src/f32-gemm/4x8-aarch64-neonfma-ld64.S.in b/src/f32-gemm/4x8-aarch64-neonfma-ld64.S.in
index b72f5d8..edc2a82 100644
--- a/src/f32-gemm/4x8-aarch64-neonfma-ld64.S.in
+++ b/src/f32-gemm/4x8-aarch64-neonfma-ld64.S.in
@@ -17,9 +17,9 @@
 #     size_t cn_stride,         [sp] -> x14
 $if INC:
   #     const float*restrict acc,  [sp + 8] -> x15
-  #     const union xnn_f32_minmax_params params[restrict static 1])  [sp + 16] -> x8
+  #     const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])  [sp + 16] -> x8
 $else:
-  #     const union xnn_f32_minmax_params params[restrict static 1])  [sp + 8] -> x8
+  #     const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])  [sp + 8] -> x8
 
 # d8-d15 need to be preserved if used.
 # x19-30 need to be preserved if used.
diff --git a/src/f32-gemm/4x8-minmax-aarch32-neon-cortex-a53.S b/src/f32-gemm/4x8-minmax-aarch32-neon-cortex-a53.S
index fd84115..2ef7904 100644
--- a/src/f32-gemm/4x8-minmax-aarch32-neon-cortex-a53.S
+++ b/src/f32-gemm/4x8-minmax-aarch32-neon-cortex-a53.S
@@ -17,7 +17,7 @@
 //     uint8_t*restrict c,       sp + 108 -> r11
 //     size_t cm_stride,         sp + 112 -> (r6)
 //     size_t cn_stride,         sp + 116 -> (r0)
-//     const union xnn_f32_minmax_params params[restrict static 1])  sp + 120 -> (r5)
+//     const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])  sp + 120 -> (r5)
 
 
 // inner loop registers
diff --git a/src/f32-gemm/4x8-minmax-aarch32-neon-ld64.S b/src/f32-gemm/4x8-minmax-aarch32-neon-ld64.S
index 6356b85..6bcefff 100644
--- a/src/f32-gemm/4x8-minmax-aarch32-neon-ld64.S
+++ b/src/f32-gemm/4x8-minmax-aarch32-neon-ld64.S
@@ -17,7 +17,7 @@
 //     uint8_t*restrict c,       sp + 104 -> r11
 //     size_t cm_stride,         sp + 108 -> (r6)
 //     size_t cn_stride,         sp + 112 -> r7
-//     const union xnn_f32_minmax_params params[restrict static 1])  sp + 116 -> (r7)
+//     const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])  sp + 116 -> (r7)
 
 
 // inner loop registers
diff --git a/src/f32-gemm/5x8-aarch64-neonfma-cortex-a75.S.in b/src/f32-gemm/5x8-aarch64-neonfma-cortex-a75.S.in
index fde0ea3..11dd17d 100644
--- a/src/f32-gemm/5x8-aarch64-neonfma-cortex-a75.S.in
+++ b/src/f32-gemm/5x8-aarch64-neonfma-cortex-a75.S.in
@@ -17,9 +17,9 @@
 #     size_t cn_stride,         [sp] -> x14
 $if INC:
   #     const float*restrict acc,  [sp + 8] -> x15
-  #     const union xnn_f32_minmax_params params[restrict static 1])  [sp + 16] -> x8
+  #     const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])  [sp + 16] -> x8
 $else:
-  #     const union xnn_f32_minmax_params params[restrict static 1])  [sp + 8] -> x8
+  #     const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])  [sp + 8] -> x8
 
 # unused compared to 5x8
 #  x4 a5
diff --git a/src/f32-gemm/6x8-aarch64-neonfma-cortex-a53.S.in b/src/f32-gemm/6x8-aarch64-neonfma-cortex-a53.S.in
index d11faa8..f09ea65 100644
--- a/src/f32-gemm/6x8-aarch64-neonfma-cortex-a53.S.in
+++ b/src/f32-gemm/6x8-aarch64-neonfma-cortex-a53.S.in
@@ -17,9 +17,9 @@
 #     size_t cn_stride,         [sp] -> x14
 $if INC:
   #     const float*restrict acc,  [sp + 8] -> x15
-  #     const union xnn_f32_minmax_params params[restrict static 1])  [sp + 16] -> x8
+  #     const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])  [sp + 16] -> x8
 $else:
-  #     const union xnn_f32_minmax_params params[restrict static 1])  [sp + 8] -> x8
+  #     const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])  [sp + 8] -> x8
 
 # d8-d15 need to be preserved if used.
 # x19-30 need to be preserved if used.
diff --git a/src/f32-gemm/6x8-aarch64-neonfma-cortex-a55.S.in b/src/f32-gemm/6x8-aarch64-neonfma-cortex-a55.S.in
index 4ec3df2..7582bee 100644
--- a/src/f32-gemm/6x8-aarch64-neonfma-cortex-a55.S.in
+++ b/src/f32-gemm/6x8-aarch64-neonfma-cortex-a55.S.in
@@ -17,9 +17,9 @@
 #     size_t cn_stride,         [sp] -> x14
 $if INC:
   #     const float*restrict acc,  [sp + 8] -> x15
-  #     const union xnn_f32_minmax_params params[restrict static 1])  [sp + 16] -> x8
+  #     const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])  [sp + 16] -> x8
 $else:
-  #     const union xnn_f32_minmax_params params[restrict static 1])  [sp + 8] -> x8
+  #     const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])  [sp + 8] -> x8
 
 # d8-d15 need to be preserved if used.
 # x19-30 need to be preserved if used.
diff --git a/src/f32-gemm/6x8-aarch64-neonfma-cortex-a73.S.in b/src/f32-gemm/6x8-aarch64-neonfma-cortex-a73.S.in
index 0c80557..654c288 100644
--- a/src/f32-gemm/6x8-aarch64-neonfma-cortex-a73.S.in
+++ b/src/f32-gemm/6x8-aarch64-neonfma-cortex-a73.S.in
@@ -17,9 +17,9 @@
 #     size_t cn_stride,         [sp] -> x14
 $if INC:
   #     const float*restrict acc,  [sp + 8] -> x15
-  #     const union xnn_f32_minmax_params params[restrict static 1])  [sp + 16] -> x8
+  #     const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])  [sp + 16] -> x8
 $else:
-  #     const union xnn_f32_minmax_params params[restrict static 1])  [sp + 8] -> x8
+  #     const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])  [sp + 8] -> x8
 
 # d8-d15 need to be preserved if used.
 # x19-30 need to be preserved if used.
diff --git a/src/f32-gemm/6x8-aarch64-neonfma-cortex-a75.S.in b/src/f32-gemm/6x8-aarch64-neonfma-cortex-a75.S.in
index a4fc3c8..821584e 100644
--- a/src/f32-gemm/6x8-aarch64-neonfma-cortex-a75.S.in
+++ b/src/f32-gemm/6x8-aarch64-neonfma-cortex-a75.S.in
@@ -17,9 +17,9 @@
 #     size_t cn_stride,         [sp] -> x14
 $if INC:
   #     const float*restrict acc,  [sp + 8] -> x15
-  #     const union xnn_f32_minmax_params params[restrict static 1])  [sp + 16] -> x8
+  #     const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])  [sp + 16] -> x8
 $else:
-  #     const union xnn_f32_minmax_params params[restrict static 1])  [sp + 8] -> x8
+  #     const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])  [sp + 8] -> x8
 
 # d8-d15 need to be preserved if used.
 # x19-30 need to be preserved if used.
diff --git a/src/f32-gemm/6x8-aarch64-neonfma-ios.S.in b/src/f32-gemm/6x8-aarch64-neonfma-ios.S.in
index 1ea7358..2ca8cf5 100644
--- a/src/f32-gemm/6x8-aarch64-neonfma-ios.S.in
+++ b/src/f32-gemm/6x8-aarch64-neonfma-ios.S.in
@@ -17,9 +17,9 @@
 #     size_t cn_stride,         [sp] -> (x0)
 $if INC:
   #     const float*restrict acc,  [sp + 8] -> x15
-  #     const union xnn_f32_minmax_params params[restrict static 1])  [sp + 16] -> x8
+  #     const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])  [sp + 16] -> x8
 $else:
-  #     const union xnn_f32_minmax_params params[restrict static 1])  [sp + 8] -> x8
+  #     const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])  [sp + 8] -> x8
 
 # d8-d15 need to be preserved if used.
 # x19-30 need to be preserved if used.
diff --git a/src/f32-gemm/6x8-aarch64-neonfma-ld128.S.in b/src/f32-gemm/6x8-aarch64-neonfma-ld128.S.in
index 205deca..fbd04d4 100644
--- a/src/f32-gemm/6x8-aarch64-neonfma-ld128.S.in
+++ b/src/f32-gemm/6x8-aarch64-neonfma-ld128.S.in
@@ -17,9 +17,9 @@
 #     size_t cn_stride,         [sp] -> x14
 $if INC:
   #     const float*restrict acc,  [sp + 8] -> x15
-  #     const union xnn_f32_minmax_params params[restrict static 1])  [sp + 16] -> x8
+  #     const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])  [sp + 16] -> x8
 $else:
-  #     const union xnn_f32_minmax_params params[restrict static 1])  [sp + 8] -> x8
+  #     const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])  [sp + 8] -> x8
 
 # d8-d15 need to be preserved if used.
 # x19-30 need to be preserved if used.
diff --git a/src/f32-gemm/6x8-aarch64-neonfma-ld64.S.in b/src/f32-gemm/6x8-aarch64-neonfma-ld64.S.in
index 3199d3b..f35ffb0 100644
--- a/src/f32-gemm/6x8-aarch64-neonfma-ld64.S.in
+++ b/src/f32-gemm/6x8-aarch64-neonfma-ld64.S.in
@@ -17,9 +17,9 @@
 #     size_t cn_stride,         [sp] -> x14
 $if INC:
   #     const float*restrict acc,  [sp + 8] -> x15
-  #     const union xnn_f32_minmax_params params[restrict static 1])  [sp + 16] -> x8
+  #     const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])  [sp + 16] -> x8
 $else:
-  #     const union xnn_f32_minmax_params params[restrict static 1])  [sp + 8] -> x8
+  #     const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])  [sp + 8] -> x8
 
 # d8-d15 need to be preserved if used.
 # x19-30 need to be preserved if used.
diff --git a/src/f32-gemm/MRx2-neon-ld64.c.in b/src/f32-gemm/MRx2-neon-ld64.c.in
index 0f4937c..bf23bc3 100644
--- a/src/f32-gemm/MRx2-neon-ld64.c.in
+++ b/src/f32-gemm/MRx2-neon-ld64.c.in
@@ -24,7 +24,7 @@
     size_t cn_stride,
     $if INC:
       const float*restrict acc,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= ${MR});
diff --git a/src/f32-gemm/MRx2c4-psimd.c.in b/src/f32-gemm/MRx2c4-psimd.c.in
index bac6072..52b6a31 100644
--- a/src/f32-gemm/MRx2c4-psimd.c.in
+++ b/src/f32-gemm/MRx2c4-psimd.c.in
@@ -22,7 +22,7 @@
     float* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= ${MR});
diff --git a/src/f32-gemm/MRx2c4-sse.c.in b/src/f32-gemm/MRx2c4-sse.c.in
index 2bc22e9..609e51d 100644
--- a/src/f32-gemm/MRx2c4-sse.c.in
+++ b/src/f32-gemm/MRx2c4-sse.c.in
@@ -22,7 +22,7 @@
     float* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= ${MR});
diff --git a/src/f32-gemm/avx-broadcast.c.in b/src/f32-gemm/avx-broadcast.c.in
index 27da05f..cc697c4 100644
--- a/src/f32-gemm/avx-broadcast.c.in
+++ b/src/f32-gemm/avx-broadcast.c.in
@@ -25,7 +25,7 @@
     size_t cn_stride,
     $if INC:
       const float*restrict acc,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= ${MR});
diff --git a/src/f32-gemm/avx-shuffle4.c.in b/src/f32-gemm/avx-shuffle4.c.in
index 74bdb76..e5229da 100644
--- a/src/f32-gemm/avx-shuffle4.c.in
+++ b/src/f32-gemm/avx-shuffle4.c.in
@@ -25,7 +25,7 @@
     size_t cn_stride,
     $if INC:
       const float*restrict acc,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= ${MR});
diff --git a/src/f32-gemm/avx512-broadcast.c.in b/src/f32-gemm/avx512-broadcast.c.in
index debe35b..e303597 100644
--- a/src/f32-gemm/avx512-broadcast.c.in
+++ b/src/f32-gemm/avx512-broadcast.c.in
@@ -25,7 +25,7 @@
     size_t cn_stride,
     $if INC:
       const float*restrict acc,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= ${MR});
diff --git a/src/f32-gemm/gen-inc/1x12inc-minmax-aarch64-neonfma-cortex-a53.S b/src/f32-gemm/gen-inc/1x12inc-minmax-aarch64-neonfma-cortex-a53.S
index bd7dac8..bcf6c4e 100644
--- a/src/f32-gemm/gen-inc/1x12inc-minmax-aarch64-neonfma-cortex-a53.S
+++ b/src/f32-gemm/gen-inc/1x12inc-minmax-aarch64-neonfma-cortex-a53.S
@@ -20,7 +20,7 @@
 #     size_t cm_stride,         (x7) - unused
 #     size_t cn_stride,         [sp] -> x14
 #     const float*restrict acc,  [sp + 8] -> x15
-#     const union xnn_f32_minmax_params params[restrict static 1])  [sp + 16] -> x8
+#     const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])  [sp + 16] -> x8
 
 # d8-d15 need to be preserved if used.
 # x19-30 need to be preserved if used.
diff --git a/src/f32-gemm/gen-inc/1x16inc-minmax-avx-broadcast.c b/src/f32-gemm/gen-inc/1x16inc-minmax-avx-broadcast.c
index 093e495..33eb2a1 100644
--- a/src/f32-gemm/gen-inc/1x16inc-minmax-avx-broadcast.c
+++ b/src/f32-gemm/gen-inc/1x16inc-minmax-avx-broadcast.c
@@ -25,7 +25,7 @@
     size_t cm_stride,
     size_t cn_stride,
     const float*restrict acc,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/f32-gemm/gen-inc/1x16inc-minmax-avx512f-broadcast.c b/src/f32-gemm/gen-inc/1x16inc-minmax-avx512f-broadcast.c
index 764332e..84992b3 100644
--- a/src/f32-gemm/gen-inc/1x16inc-minmax-avx512f-broadcast.c
+++ b/src/f32-gemm/gen-inc/1x16inc-minmax-avx512f-broadcast.c
@@ -26,7 +26,7 @@
     size_t cm_stride,
     size_t cn_stride,
     const float*restrict acc,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/f32-gemm/gen-inc/1x16inc-minmax-fma3-broadcast.c b/src/f32-gemm/gen-inc/1x16inc-minmax-fma3-broadcast.c
index 49cccd9..e8621e4 100644
--- a/src/f32-gemm/gen-inc/1x16inc-minmax-fma3-broadcast.c
+++ b/src/f32-gemm/gen-inc/1x16inc-minmax-fma3-broadcast.c
@@ -25,7 +25,7 @@
     size_t cm_stride,
     size_t cn_stride,
     const float*restrict acc,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/f32-gemm/gen-inc/1x16s4inc-minmax-fma3-broadcast.c b/src/f32-gemm/gen-inc/1x16s4inc-minmax-fma3-broadcast.c
index e05df39..5421402 100644
--- a/src/f32-gemm/gen-inc/1x16s4inc-minmax-fma3-broadcast.c
+++ b/src/f32-gemm/gen-inc/1x16s4inc-minmax-fma3-broadcast.c
@@ -25,7 +25,7 @@
     size_t cm_stride,
     size_t cn_stride,
     const float*restrict acc,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/f32-gemm/gen-inc/1x4inc-minmax-scalar.c b/src/f32-gemm/gen-inc/1x4inc-minmax-scalar.c
index 5210723..f7dc618 100644
--- a/src/f32-gemm/gen-inc/1x4inc-minmax-scalar.c
+++ b/src/f32-gemm/gen-inc/1x4inc-minmax-scalar.c
@@ -24,7 +24,7 @@
     size_t cm_stride,
     size_t cn_stride,
     const float*restrict acc,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/f32-gemm/gen-inc/1x4inc-minmax-wasm.c b/src/f32-gemm/gen-inc/1x4inc-minmax-wasm.c
index 0b414bb..2a15e64 100644
--- a/src/f32-gemm/gen-inc/1x4inc-minmax-wasm.c
+++ b/src/f32-gemm/gen-inc/1x4inc-minmax-wasm.c
@@ -24,7 +24,7 @@
     size_t cm_stride,
     size_t cn_stride,
     const float*restrict acc,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/f32-gemm/gen-inc/1x8inc-minmax-aarch64-neonfma-cortex-a53.S b/src/f32-gemm/gen-inc/1x8inc-minmax-aarch64-neonfma-cortex-a53.S
index 548ce1b..a87e499 100644
--- a/src/f32-gemm/gen-inc/1x8inc-minmax-aarch64-neonfma-cortex-a53.S
+++ b/src/f32-gemm/gen-inc/1x8inc-minmax-aarch64-neonfma-cortex-a53.S
@@ -20,7 +20,7 @@
 #     size_t cm_stride,         (x7) - unused
 #     size_t cn_stride,         [sp] -> x14
 #     const float*restrict acc,  [sp + 8] -> x15
-#     const union xnn_f32_minmax_params params[restrict static 1])  [sp + 16] -> x8
+#     const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])  [sp + 16] -> x8
 
 # d8-d15 need to be preserved if used.
 # x19-30 need to be preserved if used.
diff --git a/src/f32-gemm/gen-inc/1x8inc-minmax-aarch64-neonfma-cortex-a57.S b/src/f32-gemm/gen-inc/1x8inc-minmax-aarch64-neonfma-cortex-a57.S
index c423df8..ed7b29e 100644
--- a/src/f32-gemm/gen-inc/1x8inc-minmax-aarch64-neonfma-cortex-a57.S
+++ b/src/f32-gemm/gen-inc/1x8inc-minmax-aarch64-neonfma-cortex-a57.S
@@ -20,7 +20,7 @@
 #     size_t cm_stride,         (x7) - unused
 #     size_t cn_stride,         [sp] -> x14
 #     const float*restrict acc,  [sp + 8] -> x15
-#     const union xnn_f32_minmax_params params[restrict static 1])  [sp + 16] -> x8
+#     const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])  [sp + 16] -> x8
 
 # d8-d15 need to be preserved if used.
 # x19-30 need to be preserved if used.
diff --git a/src/f32-gemm/gen-inc/1x8inc-minmax-aarch64-neonfma-cortex-a75.S b/src/f32-gemm/gen-inc/1x8inc-minmax-aarch64-neonfma-cortex-a75.S
index 49bf7ba..783f3b0 100644
--- a/src/f32-gemm/gen-inc/1x8inc-minmax-aarch64-neonfma-cortex-a75.S
+++ b/src/f32-gemm/gen-inc/1x8inc-minmax-aarch64-neonfma-cortex-a75.S
@@ -20,7 +20,7 @@
 #     size_t cm_stride,         (x7) - unused
 #     size_t cn_stride,         [sp] -> x14
 #     const float*restrict acc,  [sp + 8] -> x15
-#     const union xnn_f32_minmax_params params[restrict static 1])  [sp + 16] -> x8
+#     const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])  [sp + 16] -> x8
 
 # d8-d15 need to be preserved if used.
 # x19-30 need to be preserved if used.
diff --git a/src/f32-gemm/gen-inc/1x8inc-minmax-aarch64-neonfma-ld64.S b/src/f32-gemm/gen-inc/1x8inc-minmax-aarch64-neonfma-ld64.S
index 6b657be..043e721 100644
--- a/src/f32-gemm/gen-inc/1x8inc-minmax-aarch64-neonfma-ld64.S
+++ b/src/f32-gemm/gen-inc/1x8inc-minmax-aarch64-neonfma-ld64.S
@@ -20,7 +20,7 @@
 #     size_t cm_stride,         (x7) - unused
 #     size_t cn_stride,         [sp] -> x14
 #     const float*restrict acc,  [sp + 8] -> x15
-#     const union xnn_f32_minmax_params params[restrict static 1])  [sp + 16] -> x8
+#     const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])  [sp + 16] -> x8
 
 # d8-d15 need to be preserved if used.
 # x19-30 need to be preserved if used.
diff --git a/src/f32-gemm/gen-inc/1x8inc-minmax-avx-broadcast.c b/src/f32-gemm/gen-inc/1x8inc-minmax-avx-broadcast.c
index 971751e..880f964 100644
--- a/src/f32-gemm/gen-inc/1x8inc-minmax-avx-broadcast.c
+++ b/src/f32-gemm/gen-inc/1x8inc-minmax-avx-broadcast.c
@@ -25,7 +25,7 @@
     size_t cm_stride,
     size_t cn_stride,
     const float*restrict acc,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/f32-gemm/gen-inc/1x8inc-minmax-fma3-broadcast.c b/src/f32-gemm/gen-inc/1x8inc-minmax-fma3-broadcast.c
index eaf08ed..f437068 100644
--- a/src/f32-gemm/gen-inc/1x8inc-minmax-fma3-broadcast.c
+++ b/src/f32-gemm/gen-inc/1x8inc-minmax-fma3-broadcast.c
@@ -25,7 +25,7 @@
     size_t cm_stride,
     size_t cn_stride,
     const float*restrict acc,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/f32-gemm/gen-inc/1x8inc-minmax-neon-dup-ld64.c b/src/f32-gemm/gen-inc/1x8inc-minmax-neon-dup-ld64.c
index 7297cb1..68a8af0 100644
--- a/src/f32-gemm/gen-inc/1x8inc-minmax-neon-dup-ld64.c
+++ b/src/f32-gemm/gen-inc/1x8inc-minmax-neon-dup-ld64.c
@@ -26,7 +26,7 @@
     size_t cm_stride,
     size_t cn_stride,
     const float*restrict acc,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/f32-gemm/gen-inc/1x8inc-minmax-neon-lane-ld64.c b/src/f32-gemm/gen-inc/1x8inc-minmax-neon-lane-ld64.c
index 3a03a36..3124c16 100644
--- a/src/f32-gemm/gen-inc/1x8inc-minmax-neon-lane-ld64.c
+++ b/src/f32-gemm/gen-inc/1x8inc-minmax-neon-lane-ld64.c
@@ -26,7 +26,7 @@
     size_t cm_stride,
     size_t cn_stride,
     const float*restrict acc,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/f32-gemm/gen-inc/1x8inc-minmax-neonfma-dup-ld64.c b/src/f32-gemm/gen-inc/1x8inc-minmax-neonfma-dup-ld64.c
index 5991b48..0008135 100644
--- a/src/f32-gemm/gen-inc/1x8inc-minmax-neonfma-dup-ld64.c
+++ b/src/f32-gemm/gen-inc/1x8inc-minmax-neonfma-dup-ld64.c
@@ -26,7 +26,7 @@
     size_t cm_stride,
     size_t cn_stride,
     const float*restrict acc,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/f32-gemm/gen-inc/1x8inc-minmax-neonfma-lane-ld64.c b/src/f32-gemm/gen-inc/1x8inc-minmax-neonfma-lane-ld64.c
index 03608a4..d4895fa 100644
--- a/src/f32-gemm/gen-inc/1x8inc-minmax-neonfma-lane-ld64.c
+++ b/src/f32-gemm/gen-inc/1x8inc-minmax-neonfma-lane-ld64.c
@@ -26,7 +26,7 @@
     size_t cm_stride,
     size_t cn_stride,
     const float*restrict acc,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/f32-gemm/gen-inc/1x8inc-minmax-psimd-loadsplat.c b/src/f32-gemm/gen-inc/1x8inc-minmax-psimd-loadsplat.c
index 4074812..ea0ff4b 100644
--- a/src/f32-gemm/gen-inc/1x8inc-minmax-psimd-loadsplat.c
+++ b/src/f32-gemm/gen-inc/1x8inc-minmax-psimd-loadsplat.c
@@ -25,7 +25,7 @@
     size_t cm_stride,
     size_t cn_stride,
     const float*restrict acc,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/f32-gemm/gen-inc/1x8inc-minmax-psimd-splat.c b/src/f32-gemm/gen-inc/1x8inc-minmax-psimd-splat.c
index d659a94..e60ad1a 100644
--- a/src/f32-gemm/gen-inc/1x8inc-minmax-psimd-splat.c
+++ b/src/f32-gemm/gen-inc/1x8inc-minmax-psimd-splat.c
@@ -25,7 +25,7 @@
     size_t cm_stride,
     size_t cn_stride,
     const float*restrict acc,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/f32-gemm/gen-inc/1x8inc-minmax-sse-dup.c b/src/f32-gemm/gen-inc/1x8inc-minmax-sse-dup.c
index 70ea5b3..0b3dd55 100644
--- a/src/f32-gemm/gen-inc/1x8inc-minmax-sse-dup.c
+++ b/src/f32-gemm/gen-inc/1x8inc-minmax-sse-dup.c
@@ -25,7 +25,7 @@
     size_t cm_stride,
     size_t cn_stride,
     const float*restrict acc,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/f32-gemm/gen-inc/1x8inc-minmax-sse-load1.c b/src/f32-gemm/gen-inc/1x8inc-minmax-sse-load1.c
index 972b325..7cf4aca 100644
--- a/src/f32-gemm/gen-inc/1x8inc-minmax-sse-load1.c
+++ b/src/f32-gemm/gen-inc/1x8inc-minmax-sse-load1.c
@@ -25,7 +25,7 @@
     size_t cm_stride,
     size_t cn_stride,
     const float*restrict acc,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/f32-gemm/gen-inc/1x8s4inc-minmax-neon.c b/src/f32-gemm/gen-inc/1x8s4inc-minmax-neon.c
index 9d15b09..b2406b2 100644
--- a/src/f32-gemm/gen-inc/1x8s4inc-minmax-neon.c
+++ b/src/f32-gemm/gen-inc/1x8s4inc-minmax-neon.c
@@ -26,7 +26,7 @@
     size_t cm_stride,
     size_t cn_stride,
     const float*restrict acc,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/f32-gemm/gen-inc/1x8s4inc-minmax-neonfma.c b/src/f32-gemm/gen-inc/1x8s4inc-minmax-neonfma.c
index 11eab3e..32f2b3f 100644
--- a/src/f32-gemm/gen-inc/1x8s4inc-minmax-neonfma.c
+++ b/src/f32-gemm/gen-inc/1x8s4inc-minmax-neonfma.c
@@ -26,7 +26,7 @@
     size_t cm_stride,
     size_t cn_stride,
     const float*restrict acc,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/f32-gemm/gen-inc/1x8s4inc-minmax-psimd.c b/src/f32-gemm/gen-inc/1x8s4inc-minmax-psimd.c
index 407480b..fba398f 100644
--- a/src/f32-gemm/gen-inc/1x8s4inc-minmax-psimd.c
+++ b/src/f32-gemm/gen-inc/1x8s4inc-minmax-psimd.c
@@ -25,7 +25,7 @@
     size_t cm_stride,
     size_t cn_stride,
     const float*restrict acc,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/f32-gemm/gen-inc/1x8s4inc-minmax-sse.c b/src/f32-gemm/gen-inc/1x8s4inc-minmax-sse.c
index 1f53b92..9febc75 100644
--- a/src/f32-gemm/gen-inc/1x8s4inc-minmax-sse.c
+++ b/src/f32-gemm/gen-inc/1x8s4inc-minmax-sse.c
@@ -25,7 +25,7 @@
     size_t cm_stride,
     size_t cn_stride,
     const float*restrict acc,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/f32-gemm/gen-inc/2x4inc-minmax-scalar.c b/src/f32-gemm/gen-inc/2x4inc-minmax-scalar.c
index 81fa2a9..1b203a0 100644
--- a/src/f32-gemm/gen-inc/2x4inc-minmax-scalar.c
+++ b/src/f32-gemm/gen-inc/2x4inc-minmax-scalar.c
@@ -24,7 +24,7 @@
     size_t cm_stride,
     size_t cn_stride,
     const float*restrict acc,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/f32-gemm/gen-inc/2x4inc-minmax-wasm.c b/src/f32-gemm/gen-inc/2x4inc-minmax-wasm.c
index 77af060..9808b69 100644
--- a/src/f32-gemm/gen-inc/2x4inc-minmax-wasm.c
+++ b/src/f32-gemm/gen-inc/2x4inc-minmax-wasm.c
@@ -24,7 +24,7 @@
     size_t cm_stride,
     size_t cn_stride,
     const float*restrict acc,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/f32-gemm/gen-inc/3x16inc-minmax-avx-broadcast.c b/src/f32-gemm/gen-inc/3x16inc-minmax-avx-broadcast.c
index 42a0bf7..a204277 100644
--- a/src/f32-gemm/gen-inc/3x16inc-minmax-avx-broadcast.c
+++ b/src/f32-gemm/gen-inc/3x16inc-minmax-avx-broadcast.c
@@ -25,7 +25,7 @@
     size_t cm_stride,
     size_t cn_stride,
     const float*restrict acc,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/f32-gemm/gen-inc/3x16inc-minmax-fma3-broadcast.c b/src/f32-gemm/gen-inc/3x16inc-minmax-fma3-broadcast.c
index bcb4cdb..ef634db 100644
--- a/src/f32-gemm/gen-inc/3x16inc-minmax-fma3-broadcast.c
+++ b/src/f32-gemm/gen-inc/3x16inc-minmax-fma3-broadcast.c
@@ -25,7 +25,7 @@
     size_t cm_stride,
     size_t cn_stride,
     const float*restrict acc,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/f32-gemm/gen-inc/3x16s4inc-minmax-fma3-broadcast.c b/src/f32-gemm/gen-inc/3x16s4inc-minmax-fma3-broadcast.c
index ec32a8d..117f730 100644
--- a/src/f32-gemm/gen-inc/3x16s4inc-minmax-fma3-broadcast.c
+++ b/src/f32-gemm/gen-inc/3x16s4inc-minmax-fma3-broadcast.c
@@ -25,7 +25,7 @@
     size_t cm_stride,
     size_t cn_stride,
     const float*restrict acc,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/f32-gemm/gen-inc/4x12inc-minmax-aarch64-neonfma-cortex-a53.S b/src/f32-gemm/gen-inc/4x12inc-minmax-aarch64-neonfma-cortex-a53.S
index 1e96ca0..7577570 100644
--- a/src/f32-gemm/gen-inc/4x12inc-minmax-aarch64-neonfma-cortex-a53.S
+++ b/src/f32-gemm/gen-inc/4x12inc-minmax-aarch64-neonfma-cortex-a53.S
@@ -20,7 +20,7 @@
 #     size_t cm_stride,         x7
 #     size_t cn_stride,         [sp] -> x14
 #     const float*restrict acc,  [sp + 8] -> x15
-#     const union xnn_f32_minmax_params params[restrict static 1])  [sp + 16] -> x8
+#     const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])  [sp + 16] -> x8
 
 # d8-d15 need to be preserved if used.
 # x19-30 need to be preserved if used.
diff --git a/src/f32-gemm/gen-inc/4x16inc-minmax-avx-broadcast.c b/src/f32-gemm/gen-inc/4x16inc-minmax-avx-broadcast.c
index 2218c07..445bac8 100644
--- a/src/f32-gemm/gen-inc/4x16inc-minmax-avx-broadcast.c
+++ b/src/f32-gemm/gen-inc/4x16inc-minmax-avx-broadcast.c
@@ -25,7 +25,7 @@
     size_t cm_stride,
     size_t cn_stride,
     const float*restrict acc,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/f32-gemm/gen-inc/4x16inc-minmax-avx512f-broadcast.c b/src/f32-gemm/gen-inc/4x16inc-minmax-avx512f-broadcast.c
index 2ecf3da..44072d5 100644
--- a/src/f32-gemm/gen-inc/4x16inc-minmax-avx512f-broadcast.c
+++ b/src/f32-gemm/gen-inc/4x16inc-minmax-avx512f-broadcast.c
@@ -26,7 +26,7 @@
     size_t cm_stride,
     size_t cn_stride,
     const float*restrict acc,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/f32-gemm/gen-inc/4x16inc-minmax-fma3-broadcast.c b/src/f32-gemm/gen-inc/4x16inc-minmax-fma3-broadcast.c
index b96c8ce..d30da63 100644
--- a/src/f32-gemm/gen-inc/4x16inc-minmax-fma3-broadcast.c
+++ b/src/f32-gemm/gen-inc/4x16inc-minmax-fma3-broadcast.c
@@ -25,7 +25,7 @@
     size_t cm_stride,
     size_t cn_stride,
     const float*restrict acc,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/f32-gemm/gen-inc/4x16s4inc-minmax-fma3-broadcast.c b/src/f32-gemm/gen-inc/4x16s4inc-minmax-fma3-broadcast.c
index 79157ef..702b224 100644
--- a/src/f32-gemm/gen-inc/4x16s4inc-minmax-fma3-broadcast.c
+++ b/src/f32-gemm/gen-inc/4x16s4inc-minmax-fma3-broadcast.c
@@ -25,7 +25,7 @@
     size_t cm_stride,
     size_t cn_stride,
     const float*restrict acc,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/f32-gemm/gen-inc/4x4inc-minmax-scalar.c b/src/f32-gemm/gen-inc/4x4inc-minmax-scalar.c
index ceaf9cd..0e663a0 100644
--- a/src/f32-gemm/gen-inc/4x4inc-minmax-scalar.c
+++ b/src/f32-gemm/gen-inc/4x4inc-minmax-scalar.c
@@ -24,7 +24,7 @@
     size_t cm_stride,
     size_t cn_stride,
     const float*restrict acc,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/f32-gemm/gen-inc/4x4inc-minmax-wasm.c b/src/f32-gemm/gen-inc/4x4inc-minmax-wasm.c
index 1400f21..8bf91e0 100644
--- a/src/f32-gemm/gen-inc/4x4inc-minmax-wasm.c
+++ b/src/f32-gemm/gen-inc/4x4inc-minmax-wasm.c
@@ -24,7 +24,7 @@
     size_t cm_stride,
     size_t cn_stride,
     const float*restrict acc,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/f32-gemm/gen-inc/4x8inc-minmax-aarch64-neonfma-cortex-a53.S b/src/f32-gemm/gen-inc/4x8inc-minmax-aarch64-neonfma-cortex-a53.S
index 2eecd58..0235800 100644
--- a/src/f32-gemm/gen-inc/4x8inc-minmax-aarch64-neonfma-cortex-a53.S
+++ b/src/f32-gemm/gen-inc/4x8inc-minmax-aarch64-neonfma-cortex-a53.S
@@ -20,7 +20,7 @@
 #     size_t cm_stride,         x7
 #     size_t cn_stride,         [sp] -> x14
 #     const float*restrict acc,  [sp + 8] -> x15
-#     const union xnn_f32_minmax_params params[restrict static 1])  [sp + 16] -> x8
+#     const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])  [sp + 16] -> x8
 
 # d8-d15 need to be preserved if used.
 # x19-30 need to be preserved if used.
diff --git a/src/f32-gemm/gen-inc/4x8inc-minmax-aarch64-neonfma-cortex-a55.S b/src/f32-gemm/gen-inc/4x8inc-minmax-aarch64-neonfma-cortex-a55.S
index eb04bbe..9f68e77 100644
--- a/src/f32-gemm/gen-inc/4x8inc-minmax-aarch64-neonfma-cortex-a55.S
+++ b/src/f32-gemm/gen-inc/4x8inc-minmax-aarch64-neonfma-cortex-a55.S
@@ -20,7 +20,7 @@
 #     size_t cm_stride,         x7
 #     size_t cn_stride,         [sp] -> x14
 #     const float*restrict acc,  [sp + 8] -> x15
-#     const union xnn_f32_minmax_params params[restrict static 1])  [sp + 16] -> x8
+#     const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])  [sp + 16] -> x8
 
 # d8-d15 need to be preserved if used.
 # x19-30 need to be preserved if used.
diff --git a/src/f32-gemm/gen-inc/4x8inc-minmax-aarch64-neonfma-cortex-a57.S b/src/f32-gemm/gen-inc/4x8inc-minmax-aarch64-neonfma-cortex-a57.S
index 042c35c..b478e41 100644
--- a/src/f32-gemm/gen-inc/4x8inc-minmax-aarch64-neonfma-cortex-a57.S
+++ b/src/f32-gemm/gen-inc/4x8inc-minmax-aarch64-neonfma-cortex-a57.S
@@ -20,7 +20,7 @@
 #     size_t cm_stride,         x7
 #     size_t cn_stride,         [sp] -> x14
 #     const float*restrict acc,  [sp + 8] -> x15
-#     const union xnn_f32_minmax_params params[restrict static 1])  [sp + 16] -> x8
+#     const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])  [sp + 16] -> x8
 
 # d8-d15 need to be preserved if used.
 # x19-30 need to be preserved if used.
diff --git a/src/f32-gemm/gen-inc/4x8inc-minmax-aarch64-neonfma-cortex-a75.S b/src/f32-gemm/gen-inc/4x8inc-minmax-aarch64-neonfma-cortex-a75.S
index 25b94f4..ab192b5 100644
--- a/src/f32-gemm/gen-inc/4x8inc-minmax-aarch64-neonfma-cortex-a75.S
+++ b/src/f32-gemm/gen-inc/4x8inc-minmax-aarch64-neonfma-cortex-a75.S
@@ -20,7 +20,7 @@
 #     size_t cm_stride,         x7
 #     size_t cn_stride,         [sp] -> x14
 #     const float*restrict acc,  [sp + 8] -> x15
-#     const union xnn_f32_minmax_params params[restrict static 1])  [sp + 16] -> x8
+#     const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])  [sp + 16] -> x8
 
 # d8-d15 need to be preserved if used.
 # x19-30 need to be preserved if used.
diff --git a/src/f32-gemm/gen-inc/4x8inc-minmax-aarch64-neonfma-ld128.S b/src/f32-gemm/gen-inc/4x8inc-minmax-aarch64-neonfma-ld128.S
index 38277bc..f51323c 100644
--- a/src/f32-gemm/gen-inc/4x8inc-minmax-aarch64-neonfma-ld128.S
+++ b/src/f32-gemm/gen-inc/4x8inc-minmax-aarch64-neonfma-ld128.S
@@ -20,7 +20,7 @@
 #     size_t cm_stride,         x7
 #     size_t cn_stride,         [sp] -> x14
 #     const float*restrict acc,  [sp + 8] -> x15
-#     const union xnn_f32_minmax_params params[restrict static 1])  [sp + 16] -> x8
+#     const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])  [sp + 16] -> x8
 
 # d8-d15 need to be preserved if used.
 # x19-30 need to be preserved if used.
diff --git a/src/f32-gemm/gen-inc/4x8inc-minmax-aarch64-neonfma-ld64.S b/src/f32-gemm/gen-inc/4x8inc-minmax-aarch64-neonfma-ld64.S
index d7a0ecc..a4b0918 100644
--- a/src/f32-gemm/gen-inc/4x8inc-minmax-aarch64-neonfma-ld64.S
+++ b/src/f32-gemm/gen-inc/4x8inc-minmax-aarch64-neonfma-ld64.S
@@ -20,7 +20,7 @@
 #     size_t cm_stride,         x7
 #     size_t cn_stride,         [sp] -> x14
 #     const float*restrict acc,  [sp + 8] -> x15
-#     const union xnn_f32_minmax_params params[restrict static 1])  [sp + 16] -> x8
+#     const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])  [sp + 16] -> x8
 
 # d8-d15 need to be preserved if used.
 # x19-30 need to be preserved if used.
diff --git a/src/f32-gemm/gen-inc/4x8inc-minmax-avx-broadcast.c b/src/f32-gemm/gen-inc/4x8inc-minmax-avx-broadcast.c
index 22b7af2..972c1c5 100644
--- a/src/f32-gemm/gen-inc/4x8inc-minmax-avx-broadcast.c
+++ b/src/f32-gemm/gen-inc/4x8inc-minmax-avx-broadcast.c
@@ -25,7 +25,7 @@
     size_t cm_stride,
     size_t cn_stride,
     const float*restrict acc,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/f32-gemm/gen-inc/4x8inc-minmax-fma3-broadcast.c b/src/f32-gemm/gen-inc/4x8inc-minmax-fma3-broadcast.c
index 38e2e57..43a6a78 100644
--- a/src/f32-gemm/gen-inc/4x8inc-minmax-fma3-broadcast.c
+++ b/src/f32-gemm/gen-inc/4x8inc-minmax-fma3-broadcast.c
@@ -25,7 +25,7 @@
     size_t cm_stride,
     size_t cn_stride,
     const float*restrict acc,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/f32-gemm/gen-inc/4x8inc-minmax-neon-dup-ld128.c b/src/f32-gemm/gen-inc/4x8inc-minmax-neon-dup-ld128.c
index 2f60665..5d2a8c9 100644
--- a/src/f32-gemm/gen-inc/4x8inc-minmax-neon-dup-ld128.c
+++ b/src/f32-gemm/gen-inc/4x8inc-minmax-neon-dup-ld128.c
@@ -26,7 +26,7 @@
     size_t cm_stride,
     size_t cn_stride,
     const float*restrict acc,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/f32-gemm/gen-inc/4x8inc-minmax-neon-dup-ld64.c b/src/f32-gemm/gen-inc/4x8inc-minmax-neon-dup-ld64.c
index 299a242..16fcea1 100644
--- a/src/f32-gemm/gen-inc/4x8inc-minmax-neon-dup-ld64.c
+++ b/src/f32-gemm/gen-inc/4x8inc-minmax-neon-dup-ld64.c
@@ -26,7 +26,7 @@
     size_t cm_stride,
     size_t cn_stride,
     const float*restrict acc,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/f32-gemm/gen-inc/4x8inc-minmax-neon-lane-ld128.c b/src/f32-gemm/gen-inc/4x8inc-minmax-neon-lane-ld128.c
index 3280bbc..672c898 100644
--- a/src/f32-gemm/gen-inc/4x8inc-minmax-neon-lane-ld128.c
+++ b/src/f32-gemm/gen-inc/4x8inc-minmax-neon-lane-ld128.c
@@ -26,7 +26,7 @@
     size_t cm_stride,
     size_t cn_stride,
     const float*restrict acc,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/f32-gemm/gen-inc/4x8inc-minmax-neon-lane-ld64.c b/src/f32-gemm/gen-inc/4x8inc-minmax-neon-lane-ld64.c
index 011b02e..df471a0 100644
--- a/src/f32-gemm/gen-inc/4x8inc-minmax-neon-lane-ld64.c
+++ b/src/f32-gemm/gen-inc/4x8inc-minmax-neon-lane-ld64.c
@@ -26,7 +26,7 @@
     size_t cm_stride,
     size_t cn_stride,
     const float*restrict acc,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/f32-gemm/gen-inc/4x8inc-minmax-neonfma-dup-ld128.c b/src/f32-gemm/gen-inc/4x8inc-minmax-neonfma-dup-ld128.c
index 9fb5959..781a6ef 100644
--- a/src/f32-gemm/gen-inc/4x8inc-minmax-neonfma-dup-ld128.c
+++ b/src/f32-gemm/gen-inc/4x8inc-minmax-neonfma-dup-ld128.c
@@ -26,7 +26,7 @@
     size_t cm_stride,
     size_t cn_stride,
     const float*restrict acc,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/f32-gemm/gen-inc/4x8inc-minmax-neonfma-dup-ld64.c b/src/f32-gemm/gen-inc/4x8inc-minmax-neonfma-dup-ld64.c
index ac13c6d..ad868b8 100644
--- a/src/f32-gemm/gen-inc/4x8inc-minmax-neonfma-dup-ld64.c
+++ b/src/f32-gemm/gen-inc/4x8inc-minmax-neonfma-dup-ld64.c
@@ -26,7 +26,7 @@
     size_t cm_stride,
     size_t cn_stride,
     const float*restrict acc,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/f32-gemm/gen-inc/4x8inc-minmax-neonfma-lane-ld128.c b/src/f32-gemm/gen-inc/4x8inc-minmax-neonfma-lane-ld128.c
index c083432..c2fbe0d 100644
--- a/src/f32-gemm/gen-inc/4x8inc-minmax-neonfma-lane-ld128.c
+++ b/src/f32-gemm/gen-inc/4x8inc-minmax-neonfma-lane-ld128.c
@@ -26,7 +26,7 @@
     size_t cm_stride,
     size_t cn_stride,
     const float*restrict acc,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/f32-gemm/gen-inc/4x8inc-minmax-neonfma-lane-ld64.c b/src/f32-gemm/gen-inc/4x8inc-minmax-neonfma-lane-ld64.c
index 48f0810..4a57317 100644
--- a/src/f32-gemm/gen-inc/4x8inc-minmax-neonfma-lane-ld64.c
+++ b/src/f32-gemm/gen-inc/4x8inc-minmax-neonfma-lane-ld64.c
@@ -26,7 +26,7 @@
     size_t cm_stride,
     size_t cn_stride,
     const float*restrict acc,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/f32-gemm/gen-inc/4x8inc-minmax-psimd-loadsplat.c b/src/f32-gemm/gen-inc/4x8inc-minmax-psimd-loadsplat.c
index df0bc30..f6f1f42 100644
--- a/src/f32-gemm/gen-inc/4x8inc-minmax-psimd-loadsplat.c
+++ b/src/f32-gemm/gen-inc/4x8inc-minmax-psimd-loadsplat.c
@@ -25,7 +25,7 @@
     size_t cm_stride,
     size_t cn_stride,
     const float*restrict acc,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/f32-gemm/gen-inc/4x8inc-minmax-psimd-splat.c b/src/f32-gemm/gen-inc/4x8inc-minmax-psimd-splat.c
index 750c7a7..bb1cbbf 100644
--- a/src/f32-gemm/gen-inc/4x8inc-minmax-psimd-splat.c
+++ b/src/f32-gemm/gen-inc/4x8inc-minmax-psimd-splat.c
@@ -25,7 +25,7 @@
     size_t cm_stride,
     size_t cn_stride,
     const float*restrict acc,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/f32-gemm/gen-inc/4x8inc-minmax-sse-dup.c b/src/f32-gemm/gen-inc/4x8inc-minmax-sse-dup.c
index aa827f3..ca1dc0d 100644
--- a/src/f32-gemm/gen-inc/4x8inc-minmax-sse-dup.c
+++ b/src/f32-gemm/gen-inc/4x8inc-minmax-sse-dup.c
@@ -25,7 +25,7 @@
     size_t cm_stride,
     size_t cn_stride,
     const float*restrict acc,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/f32-gemm/gen-inc/4x8inc-minmax-sse-load1.c b/src/f32-gemm/gen-inc/4x8inc-minmax-sse-load1.c
index bd08df0..1da90ec 100644
--- a/src/f32-gemm/gen-inc/4x8inc-minmax-sse-load1.c
+++ b/src/f32-gemm/gen-inc/4x8inc-minmax-sse-load1.c
@@ -25,7 +25,7 @@
     size_t cm_stride,
     size_t cn_stride,
     const float*restrict acc,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/f32-gemm/gen-inc/4x8s4inc-minmax-neon.c b/src/f32-gemm/gen-inc/4x8s4inc-minmax-neon.c
index d89b617..f5b8ed4 100644
--- a/src/f32-gemm/gen-inc/4x8s4inc-minmax-neon.c
+++ b/src/f32-gemm/gen-inc/4x8s4inc-minmax-neon.c
@@ -26,7 +26,7 @@
     size_t cm_stride,
     size_t cn_stride,
     const float*restrict acc,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/f32-gemm/gen-inc/4x8s4inc-minmax-neonfma.c b/src/f32-gemm/gen-inc/4x8s4inc-minmax-neonfma.c
index 49b054a..72c4455 100644
--- a/src/f32-gemm/gen-inc/4x8s4inc-minmax-neonfma.c
+++ b/src/f32-gemm/gen-inc/4x8s4inc-minmax-neonfma.c
@@ -26,7 +26,7 @@
     size_t cm_stride,
     size_t cn_stride,
     const float*restrict acc,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/f32-gemm/gen-inc/4x8s4inc-minmax-psimd.c b/src/f32-gemm/gen-inc/4x8s4inc-minmax-psimd.c
index 1e5d781..d8d63cd 100644
--- a/src/f32-gemm/gen-inc/4x8s4inc-minmax-psimd.c
+++ b/src/f32-gemm/gen-inc/4x8s4inc-minmax-psimd.c
@@ -25,7 +25,7 @@
     size_t cm_stride,
     size_t cn_stride,
     const float*restrict acc,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/f32-gemm/gen-inc/4x8s4inc-minmax-sse.c b/src/f32-gemm/gen-inc/4x8s4inc-minmax-sse.c
index 7e12afc..eb7e376 100644
--- a/src/f32-gemm/gen-inc/4x8s4inc-minmax-sse.c
+++ b/src/f32-gemm/gen-inc/4x8s4inc-minmax-sse.c
@@ -25,7 +25,7 @@
     size_t cm_stride,
     size_t cn_stride,
     const float*restrict acc,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/f32-gemm/gen-inc/5x16inc-minmax-avx-broadcast.c b/src/f32-gemm/gen-inc/5x16inc-minmax-avx-broadcast.c
index bc34810..f7aab3b 100644
--- a/src/f32-gemm/gen-inc/5x16inc-minmax-avx-broadcast.c
+++ b/src/f32-gemm/gen-inc/5x16inc-minmax-avx-broadcast.c
@@ -25,7 +25,7 @@
     size_t cm_stride,
     size_t cn_stride,
     const float*restrict acc,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 5);
diff --git a/src/f32-gemm/gen-inc/5x16inc-minmax-avx512f-broadcast.c b/src/f32-gemm/gen-inc/5x16inc-minmax-avx512f-broadcast.c
index 113af3f..b1047e1 100644
--- a/src/f32-gemm/gen-inc/5x16inc-minmax-avx512f-broadcast.c
+++ b/src/f32-gemm/gen-inc/5x16inc-minmax-avx512f-broadcast.c
@@ -26,7 +26,7 @@
     size_t cm_stride,
     size_t cn_stride,
     const float*restrict acc,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 5);
diff --git a/src/f32-gemm/gen-inc/5x16inc-minmax-fma3-broadcast.c b/src/f32-gemm/gen-inc/5x16inc-minmax-fma3-broadcast.c
index 8bc6fc0..1813f17 100644
--- a/src/f32-gemm/gen-inc/5x16inc-minmax-fma3-broadcast.c
+++ b/src/f32-gemm/gen-inc/5x16inc-minmax-fma3-broadcast.c
@@ -25,7 +25,7 @@
     size_t cm_stride,
     size_t cn_stride,
     const float*restrict acc,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 5);
diff --git a/src/f32-gemm/gen-inc/5x16s4inc-minmax-fma3-broadcast.c b/src/f32-gemm/gen-inc/5x16s4inc-minmax-fma3-broadcast.c
index c7b8c76..6bc4549 100644
--- a/src/f32-gemm/gen-inc/5x16s4inc-minmax-fma3-broadcast.c
+++ b/src/f32-gemm/gen-inc/5x16s4inc-minmax-fma3-broadcast.c
@@ -25,7 +25,7 @@
     size_t cm_stride,
     size_t cn_stride,
     const float*restrict acc,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 5);
diff --git a/src/f32-gemm/gen-inc/5x8inc-minmax-aarch64-neonfma-cortex-a57.S b/src/f32-gemm/gen-inc/5x8inc-minmax-aarch64-neonfma-cortex-a57.S
index 9b38e2c..f7782ac 100644
--- a/src/f32-gemm/gen-inc/5x8inc-minmax-aarch64-neonfma-cortex-a57.S
+++ b/src/f32-gemm/gen-inc/5x8inc-minmax-aarch64-neonfma-cortex-a57.S
@@ -20,7 +20,7 @@
 #     size_t cm_stride,         x7
 #     size_t cn_stride,         [sp] -> x14
 #     const float*restrict acc,  [sp + 8] -> x15
-#     const union xnn_f32_minmax_params params[restrict static 1])  [sp + 16] -> x8
+#     const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])  [sp + 16] -> x8
 
 # unused compared to 5x8
 #  x4 a5
diff --git a/src/f32-gemm/gen-inc/5x8inc-minmax-aarch64-neonfma-cortex-a75.S b/src/f32-gemm/gen-inc/5x8inc-minmax-aarch64-neonfma-cortex-a75.S
index 7f44d8b..965c4a3 100644
--- a/src/f32-gemm/gen-inc/5x8inc-minmax-aarch64-neonfma-cortex-a75.S
+++ b/src/f32-gemm/gen-inc/5x8inc-minmax-aarch64-neonfma-cortex-a75.S
@@ -20,7 +20,7 @@
 #     size_t cm_stride,         x7
 #     size_t cn_stride,         [sp] -> x14
 #     const float*restrict acc,  [sp + 8] -> x15
-#     const union xnn_f32_minmax_params params[restrict static 1])  [sp + 16] -> x8
+#     const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])  [sp + 16] -> x8
 
 # unused compared to 5x8
 #  x4 a5
diff --git a/src/f32-gemm/gen-inc/5x8inc-minmax-avx-broadcast.c b/src/f32-gemm/gen-inc/5x8inc-minmax-avx-broadcast.c
index cd4166b..516b7e6 100644
--- a/src/f32-gemm/gen-inc/5x8inc-minmax-avx-broadcast.c
+++ b/src/f32-gemm/gen-inc/5x8inc-minmax-avx-broadcast.c
@@ -25,7 +25,7 @@
     size_t cm_stride,
     size_t cn_stride,
     const float*restrict acc,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 5);
diff --git a/src/f32-gemm/gen-inc/5x8inc-minmax-fma3-broadcast.c b/src/f32-gemm/gen-inc/5x8inc-minmax-fma3-broadcast.c
index c9c70d0..b867208 100644
--- a/src/f32-gemm/gen-inc/5x8inc-minmax-fma3-broadcast.c
+++ b/src/f32-gemm/gen-inc/5x8inc-minmax-fma3-broadcast.c
@@ -25,7 +25,7 @@
     size_t cm_stride,
     size_t cn_stride,
     const float*restrict acc,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 5);
diff --git a/src/f32-gemm/gen-inc/5x8inc-minmax-neon-lane-ld64.c b/src/f32-gemm/gen-inc/5x8inc-minmax-neon-lane-ld64.c
index b347abe..e5a2841 100644
--- a/src/f32-gemm/gen-inc/5x8inc-minmax-neon-lane-ld64.c
+++ b/src/f32-gemm/gen-inc/5x8inc-minmax-neon-lane-ld64.c
@@ -26,7 +26,7 @@
     size_t cm_stride,
     size_t cn_stride,
     const float*restrict acc,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 5);
diff --git a/src/f32-gemm/gen-inc/5x8inc-minmax-neonfma-lane-ld64.c b/src/f32-gemm/gen-inc/5x8inc-minmax-neonfma-lane-ld64.c
index 82e00ca..c8db8e4 100644
--- a/src/f32-gemm/gen-inc/5x8inc-minmax-neonfma-lane-ld64.c
+++ b/src/f32-gemm/gen-inc/5x8inc-minmax-neonfma-lane-ld64.c
@@ -26,7 +26,7 @@
     size_t cm_stride,
     size_t cn_stride,
     const float*restrict acc,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 5);
diff --git a/src/f32-gemm/gen-inc/6x16inc-minmax-avx512f-broadcast.c b/src/f32-gemm/gen-inc/6x16inc-minmax-avx512f-broadcast.c
index fea592e..3a9b12b 100644
--- a/src/f32-gemm/gen-inc/6x16inc-minmax-avx512f-broadcast.c
+++ b/src/f32-gemm/gen-inc/6x16inc-minmax-avx512f-broadcast.c
@@ -26,7 +26,7 @@
     size_t cm_stride,
     size_t cn_stride,
     const float*restrict acc,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 6);
diff --git a/src/f32-gemm/gen-inc/6x8inc-minmax-aarch64-neonfma-cortex-a53.S b/src/f32-gemm/gen-inc/6x8inc-minmax-aarch64-neonfma-cortex-a53.S
index d57ab0e..cbf5294 100644
--- a/src/f32-gemm/gen-inc/6x8inc-minmax-aarch64-neonfma-cortex-a53.S
+++ b/src/f32-gemm/gen-inc/6x8inc-minmax-aarch64-neonfma-cortex-a53.S
@@ -20,7 +20,7 @@
 #     size_t cm_stride,         x7
 #     size_t cn_stride,         [sp] -> x14
 #     const float*restrict acc,  [sp + 8] -> x15
-#     const union xnn_f32_minmax_params params[restrict static 1])  [sp + 16] -> x8
+#     const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])  [sp + 16] -> x8
 
 # d8-d15 need to be preserved if used.
 # x19-30 need to be preserved if used.
diff --git a/src/f32-gemm/gen-inc/6x8inc-minmax-aarch64-neonfma-cortex-a55.S b/src/f32-gemm/gen-inc/6x8inc-minmax-aarch64-neonfma-cortex-a55.S
index a8cb2a5..aec8b43 100644
--- a/src/f32-gemm/gen-inc/6x8inc-minmax-aarch64-neonfma-cortex-a55.S
+++ b/src/f32-gemm/gen-inc/6x8inc-minmax-aarch64-neonfma-cortex-a55.S
@@ -20,7 +20,7 @@
 #     size_t cm_stride,         x7
 #     size_t cn_stride,         [sp] -> x14
 #     const float*restrict acc,  [sp + 8] -> x15
-#     const union xnn_f32_minmax_params params[restrict static 1])  [sp + 16] -> x8
+#     const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])  [sp + 16] -> x8
 
 # d8-d15 need to be preserved if used.
 # x19-30 need to be preserved if used.
diff --git a/src/f32-gemm/gen-inc/6x8inc-minmax-aarch64-neonfma-cortex-a57.S b/src/f32-gemm/gen-inc/6x8inc-minmax-aarch64-neonfma-cortex-a57.S
index 0e81521..234760e 100644
--- a/src/f32-gemm/gen-inc/6x8inc-minmax-aarch64-neonfma-cortex-a57.S
+++ b/src/f32-gemm/gen-inc/6x8inc-minmax-aarch64-neonfma-cortex-a57.S
@@ -20,7 +20,7 @@
 #     size_t cm_stride,         x7
 #     size_t cn_stride,         [sp] -> x14
 #     const float*restrict acc,  [sp + 8] -> x15
-#     const union xnn_f32_minmax_params params[restrict static 1])  [sp + 16] -> x8
+#     const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])  [sp + 16] -> x8
 
 # d8-d15 need to be preserved if used.
 # x19-30 need to be preserved if used.
diff --git a/src/f32-gemm/gen-inc/6x8inc-minmax-aarch64-neonfma-cortex-a73.S b/src/f32-gemm/gen-inc/6x8inc-minmax-aarch64-neonfma-cortex-a73.S
index d53887c..ec8ddea 100644
--- a/src/f32-gemm/gen-inc/6x8inc-minmax-aarch64-neonfma-cortex-a73.S
+++ b/src/f32-gemm/gen-inc/6x8inc-minmax-aarch64-neonfma-cortex-a73.S
@@ -20,7 +20,7 @@
 #     size_t cm_stride,         x7
 #     size_t cn_stride,         [sp] -> x14
 #     const float*restrict acc,  [sp + 8] -> x15
-#     const union xnn_f32_minmax_params params[restrict static 1])  [sp + 16] -> x8
+#     const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])  [sp + 16] -> x8
 
 # d8-d15 need to be preserved if used.
 # x19-30 need to be preserved if used.
diff --git a/src/f32-gemm/gen-inc/6x8inc-minmax-aarch64-neonfma-cortex-a75.S b/src/f32-gemm/gen-inc/6x8inc-minmax-aarch64-neonfma-cortex-a75.S
index 5b11bb0..ba21107 100644
--- a/src/f32-gemm/gen-inc/6x8inc-minmax-aarch64-neonfma-cortex-a75.S
+++ b/src/f32-gemm/gen-inc/6x8inc-minmax-aarch64-neonfma-cortex-a75.S
@@ -20,7 +20,7 @@
 #     size_t cm_stride,         x7
 #     size_t cn_stride,         [sp] -> x14
 #     const float*restrict acc,  [sp + 8] -> x15
-#     const union xnn_f32_minmax_params params[restrict static 1])  [sp + 16] -> x8
+#     const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])  [sp + 16] -> x8
 
 # d8-d15 need to be preserved if used.
 # x19-30 need to be preserved if used.
diff --git a/src/f32-gemm/gen-inc/6x8inc-minmax-aarch64-neonfma-ios.S b/src/f32-gemm/gen-inc/6x8inc-minmax-aarch64-neonfma-ios.S
index 93e8e21..d604691 100644
--- a/src/f32-gemm/gen-inc/6x8inc-minmax-aarch64-neonfma-ios.S
+++ b/src/f32-gemm/gen-inc/6x8inc-minmax-aarch64-neonfma-ios.S
@@ -20,7 +20,7 @@
 #     size_t cm_stride,         x7
 #     size_t cn_stride,         [sp] -> (x0)
 #     const float*restrict acc,  [sp + 8] -> x15
-#     const union xnn_f32_minmax_params params[restrict static 1])  [sp + 16] -> x8
+#     const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])  [sp + 16] -> x8
 
 # d8-d15 need to be preserved if used.
 # x19-30 need to be preserved if used.
diff --git a/src/f32-gemm/gen-inc/6x8inc-minmax-aarch64-neonfma-ld128.S b/src/f32-gemm/gen-inc/6x8inc-minmax-aarch64-neonfma-ld128.S
index 668f929..07a8746 100644
--- a/src/f32-gemm/gen-inc/6x8inc-minmax-aarch64-neonfma-ld128.S
+++ b/src/f32-gemm/gen-inc/6x8inc-minmax-aarch64-neonfma-ld128.S
@@ -20,7 +20,7 @@
 #     size_t cm_stride,         x7
 #     size_t cn_stride,         [sp] -> x14
 #     const float*restrict acc,  [sp + 8] -> x15
-#     const union xnn_f32_minmax_params params[restrict static 1])  [sp + 16] -> x8
+#     const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])  [sp + 16] -> x8
 
 # d8-d15 need to be preserved if used.
 # x19-30 need to be preserved if used.
diff --git a/src/f32-gemm/gen-inc/6x8inc-minmax-aarch64-neonfma-ld64.S b/src/f32-gemm/gen-inc/6x8inc-minmax-aarch64-neonfma-ld64.S
index da46833..c0e8d91 100644
--- a/src/f32-gemm/gen-inc/6x8inc-minmax-aarch64-neonfma-ld64.S
+++ b/src/f32-gemm/gen-inc/6x8inc-minmax-aarch64-neonfma-ld64.S
@@ -20,7 +20,7 @@
 #     size_t cm_stride,         x7
 #     size_t cn_stride,         [sp] -> x14
 #     const float*restrict acc,  [sp + 8] -> x15
-#     const union xnn_f32_minmax_params params[restrict static 1])  [sp + 16] -> x8
+#     const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])  [sp + 16] -> x8
 
 # d8-d15 need to be preserved if used.
 # x19-30 need to be preserved if used.
diff --git a/src/f32-gemm/gen-inc/6x8inc-minmax-avx-broadcast.c b/src/f32-gemm/gen-inc/6x8inc-minmax-avx-broadcast.c
index 99c2410..c40e732 100644
--- a/src/f32-gemm/gen-inc/6x8inc-minmax-avx-broadcast.c
+++ b/src/f32-gemm/gen-inc/6x8inc-minmax-avx-broadcast.c
@@ -25,7 +25,7 @@
     size_t cm_stride,
     size_t cn_stride,
     const float*restrict acc,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 6);
diff --git a/src/f32-gemm/gen-inc/6x8inc-minmax-fma3-broadcast.c b/src/f32-gemm/gen-inc/6x8inc-minmax-fma3-broadcast.c
index 746a976..8369e27 100644
--- a/src/f32-gemm/gen-inc/6x8inc-minmax-fma3-broadcast.c
+++ b/src/f32-gemm/gen-inc/6x8inc-minmax-fma3-broadcast.c
@@ -25,7 +25,7 @@
     size_t cm_stride,
     size_t cn_stride,
     const float*restrict acc,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 6);
diff --git a/src/f32-gemm/gen-inc/6x8inc-minmax-neon-dup-ld128.c b/src/f32-gemm/gen-inc/6x8inc-minmax-neon-dup-ld128.c
index d46c73a..70d2345 100644
--- a/src/f32-gemm/gen-inc/6x8inc-minmax-neon-dup-ld128.c
+++ b/src/f32-gemm/gen-inc/6x8inc-minmax-neon-dup-ld128.c
@@ -26,7 +26,7 @@
     size_t cm_stride,
     size_t cn_stride,
     const float*restrict acc,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 6);
diff --git a/src/f32-gemm/gen-inc/6x8inc-minmax-neon-dup-ld64.c b/src/f32-gemm/gen-inc/6x8inc-minmax-neon-dup-ld64.c
index acf9c81..c2afbe3 100644
--- a/src/f32-gemm/gen-inc/6x8inc-minmax-neon-dup-ld64.c
+++ b/src/f32-gemm/gen-inc/6x8inc-minmax-neon-dup-ld64.c
@@ -26,7 +26,7 @@
     size_t cm_stride,
     size_t cn_stride,
     const float*restrict acc,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 6);
diff --git a/src/f32-gemm/gen-inc/6x8inc-minmax-neon-lane-ld128.c b/src/f32-gemm/gen-inc/6x8inc-minmax-neon-lane-ld128.c
index 2baeed6..e503c03 100644
--- a/src/f32-gemm/gen-inc/6x8inc-minmax-neon-lane-ld128.c
+++ b/src/f32-gemm/gen-inc/6x8inc-minmax-neon-lane-ld128.c
@@ -26,7 +26,7 @@
     size_t cm_stride,
     size_t cn_stride,
     const float*restrict acc,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 6);
diff --git a/src/f32-gemm/gen-inc/6x8inc-minmax-neon-lane-ld64.c b/src/f32-gemm/gen-inc/6x8inc-minmax-neon-lane-ld64.c
index 1b70d56..0f00174 100644
--- a/src/f32-gemm/gen-inc/6x8inc-minmax-neon-lane-ld64.c
+++ b/src/f32-gemm/gen-inc/6x8inc-minmax-neon-lane-ld64.c
@@ -26,7 +26,7 @@
     size_t cm_stride,
     size_t cn_stride,
     const float*restrict acc,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 6);
diff --git a/src/f32-gemm/gen-inc/6x8inc-minmax-neonfma-dup-ld128.c b/src/f32-gemm/gen-inc/6x8inc-minmax-neonfma-dup-ld128.c
index a991bff..7290033 100644
--- a/src/f32-gemm/gen-inc/6x8inc-minmax-neonfma-dup-ld128.c
+++ b/src/f32-gemm/gen-inc/6x8inc-minmax-neonfma-dup-ld128.c
@@ -26,7 +26,7 @@
     size_t cm_stride,
     size_t cn_stride,
     const float*restrict acc,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 6);
diff --git a/src/f32-gemm/gen-inc/6x8inc-minmax-neonfma-dup-ld64.c b/src/f32-gemm/gen-inc/6x8inc-minmax-neonfma-dup-ld64.c
index a997048..05e6ae8 100644
--- a/src/f32-gemm/gen-inc/6x8inc-minmax-neonfma-dup-ld64.c
+++ b/src/f32-gemm/gen-inc/6x8inc-minmax-neonfma-dup-ld64.c
@@ -26,7 +26,7 @@
     size_t cm_stride,
     size_t cn_stride,
     const float*restrict acc,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 6);
diff --git a/src/f32-gemm/gen-inc/6x8inc-minmax-neonfma-lane-ld128.c b/src/f32-gemm/gen-inc/6x8inc-minmax-neonfma-lane-ld128.c
index 311362e..1f53d94 100644
--- a/src/f32-gemm/gen-inc/6x8inc-minmax-neonfma-lane-ld128.c
+++ b/src/f32-gemm/gen-inc/6x8inc-minmax-neonfma-lane-ld128.c
@@ -26,7 +26,7 @@
     size_t cm_stride,
     size_t cn_stride,
     const float*restrict acc,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 6);
diff --git a/src/f32-gemm/gen-inc/6x8inc-minmax-neonfma-lane-ld64.c b/src/f32-gemm/gen-inc/6x8inc-minmax-neonfma-lane-ld64.c
index da7bb24..cc4dcdf 100644
--- a/src/f32-gemm/gen-inc/6x8inc-minmax-neonfma-lane-ld64.c
+++ b/src/f32-gemm/gen-inc/6x8inc-minmax-neonfma-lane-ld64.c
@@ -26,7 +26,7 @@
     size_t cm_stride,
     size_t cn_stride,
     const float*restrict acc,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 6);
diff --git a/src/f32-gemm/gen-inc/6x8inc-minmax-psimd-loadsplat.c b/src/f32-gemm/gen-inc/6x8inc-minmax-psimd-loadsplat.c
index 8494da7..fcec27e 100644
--- a/src/f32-gemm/gen-inc/6x8inc-minmax-psimd-loadsplat.c
+++ b/src/f32-gemm/gen-inc/6x8inc-minmax-psimd-loadsplat.c
@@ -25,7 +25,7 @@
     size_t cm_stride,
     size_t cn_stride,
     const float*restrict acc,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 6);
diff --git a/src/f32-gemm/gen-inc/6x8inc-minmax-psimd-splat.c b/src/f32-gemm/gen-inc/6x8inc-minmax-psimd-splat.c
index 51f5e1f..8ab4f35 100644
--- a/src/f32-gemm/gen-inc/6x8inc-minmax-psimd-splat.c
+++ b/src/f32-gemm/gen-inc/6x8inc-minmax-psimd-splat.c
@@ -25,7 +25,7 @@
     size_t cm_stride,
     size_t cn_stride,
     const float*restrict acc,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 6);
diff --git a/src/f32-gemm/gen-inc/6x8s4inc-minmax-neon.c b/src/f32-gemm/gen-inc/6x8s4inc-minmax-neon.c
index b857c93..03b9cbc 100644
--- a/src/f32-gemm/gen-inc/6x8s4inc-minmax-neon.c
+++ b/src/f32-gemm/gen-inc/6x8s4inc-minmax-neon.c
@@ -26,7 +26,7 @@
     size_t cm_stride,
     size_t cn_stride,
     const float*restrict acc,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 6);
diff --git a/src/f32-gemm/gen-inc/6x8s4inc-minmax-neonfma.c b/src/f32-gemm/gen-inc/6x8s4inc-minmax-neonfma.c
index 3ca935e..e882bff 100644
--- a/src/f32-gemm/gen-inc/6x8s4inc-minmax-neonfma.c
+++ b/src/f32-gemm/gen-inc/6x8s4inc-minmax-neonfma.c
@@ -26,7 +26,7 @@
     size_t cm_stride,
     size_t cn_stride,
     const float*restrict acc,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 6);
diff --git a/src/f32-gemm/gen-inc/6x8s4inc-minmax-psimd.c b/src/f32-gemm/gen-inc/6x8s4inc-minmax-psimd.c
index e4312fc..303954e 100644
--- a/src/f32-gemm/gen-inc/6x8s4inc-minmax-psimd.c
+++ b/src/f32-gemm/gen-inc/6x8s4inc-minmax-psimd.c
@@ -25,7 +25,7 @@
     size_t cm_stride,
     size_t cn_stride,
     const float*restrict acc,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 6);
diff --git a/src/f32-gemm/gen-inc/7x16inc-minmax-avx512f-broadcast.c b/src/f32-gemm/gen-inc/7x16inc-minmax-avx512f-broadcast.c
index 229a163..5aaa334 100644
--- a/src/f32-gemm/gen-inc/7x16inc-minmax-avx512f-broadcast.c
+++ b/src/f32-gemm/gen-inc/7x16inc-minmax-avx512f-broadcast.c
@@ -26,7 +26,7 @@
     size_t cm_stride,
     size_t cn_stride,
     const float*restrict acc,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 7);
diff --git a/src/f32-gemm/gen-inc/7x8inc-minmax-avx-broadcast.c b/src/f32-gemm/gen-inc/7x8inc-minmax-avx-broadcast.c
index f3e49f5..3d34d7d 100644
--- a/src/f32-gemm/gen-inc/7x8inc-minmax-avx-broadcast.c
+++ b/src/f32-gemm/gen-inc/7x8inc-minmax-avx-broadcast.c
@@ -25,7 +25,7 @@
     size_t cm_stride,
     size_t cn_stride,
     const float*restrict acc,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 7);
diff --git a/src/f32-gemm/gen-inc/7x8inc-minmax-fma3-broadcast.c b/src/f32-gemm/gen-inc/7x8inc-minmax-fma3-broadcast.c
index 0dd9f1a..713126b 100644
--- a/src/f32-gemm/gen-inc/7x8inc-minmax-fma3-broadcast.c
+++ b/src/f32-gemm/gen-inc/7x8inc-minmax-fma3-broadcast.c
@@ -25,7 +25,7 @@
     size_t cm_stride,
     size_t cn_stride,
     const float*restrict acc,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 7);
diff --git a/src/f32-gemm/gen-inc/8x16inc-minmax-avx512f-broadcast.c b/src/f32-gemm/gen-inc/8x16inc-minmax-avx512f-broadcast.c
index a4a0d0e..af36b95 100644
--- a/src/f32-gemm/gen-inc/8x16inc-minmax-avx512f-broadcast.c
+++ b/src/f32-gemm/gen-inc/8x16inc-minmax-avx512f-broadcast.c
@@ -26,7 +26,7 @@
     size_t cm_stride,
     size_t cn_stride,
     const float*restrict acc,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 8);
diff --git a/src/f32-gemm/gen-inc/8x8inc-minmax-fma3-broadcast.c b/src/f32-gemm/gen-inc/8x8inc-minmax-fma3-broadcast.c
index 26bf8cd..284c232 100644
--- a/src/f32-gemm/gen-inc/8x8inc-minmax-fma3-broadcast.c
+++ b/src/f32-gemm/gen-inc/8x8inc-minmax-fma3-broadcast.c
@@ -25,7 +25,7 @@
     size_t cm_stride,
     size_t cn_stride,
     const float*restrict acc,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 8);
diff --git a/src/f32-gemm/gen-inc/8x8s4inc-minmax-neon.c b/src/f32-gemm/gen-inc/8x8s4inc-minmax-neon.c
index f9b934f..b3f98f9 100644
--- a/src/f32-gemm/gen-inc/8x8s4inc-minmax-neon.c
+++ b/src/f32-gemm/gen-inc/8x8s4inc-minmax-neon.c
@@ -26,7 +26,7 @@
     size_t cm_stride,
     size_t cn_stride,
     const float*restrict acc,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 8);
diff --git a/src/f32-gemm/gen-inc/8x8s4inc-minmax-neonfma.c b/src/f32-gemm/gen-inc/8x8s4inc-minmax-neonfma.c
index 3acbb90..fa323ce 100644
--- a/src/f32-gemm/gen-inc/8x8s4inc-minmax-neonfma.c
+++ b/src/f32-gemm/gen-inc/8x8s4inc-minmax-neonfma.c
@@ -26,7 +26,7 @@
     size_t cm_stride,
     size_t cn_stride,
     const float*restrict acc,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 8);
diff --git a/src/f32-gemm/gen/1x12-minmax-aarch64-neonfma-cortex-a53.S b/src/f32-gemm/gen/1x12-minmax-aarch64-neonfma-cortex-a53.S
index 4366f14..9178f59 100644
--- a/src/f32-gemm/gen/1x12-minmax-aarch64-neonfma-cortex-a53.S
+++ b/src/f32-gemm/gen/1x12-minmax-aarch64-neonfma-cortex-a53.S
@@ -19,7 +19,7 @@
 #     uint8_t*restrict c,       x6
 #     size_t cm_stride,         (x7) - unused
 #     size_t cn_stride,         [sp] -> x14
-#     const union xnn_f32_minmax_params params[restrict static 1])  [sp + 8] -> x8
+#     const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])  [sp + 8] -> x8
 
 # d8-d15 need to be preserved if used.
 # x19-30 need to be preserved if used.
diff --git a/src/f32-gemm/gen/1x16-minmax-avx-broadcast.c b/src/f32-gemm/gen/1x16-minmax-avx-broadcast.c
index 08ba646..010176d 100644
--- a/src/f32-gemm/gen/1x16-minmax-avx-broadcast.c
+++ b/src/f32-gemm/gen/1x16-minmax-avx-broadcast.c
@@ -24,7 +24,7 @@
     float*restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/f32-gemm/gen/1x16-minmax-avx512f-broadcast.c b/src/f32-gemm/gen/1x16-minmax-avx512f-broadcast.c
index e0bc740..dab502f 100644
--- a/src/f32-gemm/gen/1x16-minmax-avx512f-broadcast.c
+++ b/src/f32-gemm/gen/1x16-minmax-avx512f-broadcast.c
@@ -25,7 +25,7 @@
     float*restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/f32-gemm/gen/1x16-minmax-fma3-broadcast.c b/src/f32-gemm/gen/1x16-minmax-fma3-broadcast.c
index 19ccba3..0cc5de4 100644
--- a/src/f32-gemm/gen/1x16-minmax-fma3-broadcast.c
+++ b/src/f32-gemm/gen/1x16-minmax-fma3-broadcast.c
@@ -24,7 +24,7 @@
     float*restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/f32-gemm/gen/1x16s4-minmax-fma3-broadcast.c b/src/f32-gemm/gen/1x16s4-minmax-fma3-broadcast.c
index fe480bb..48209a6 100644
--- a/src/f32-gemm/gen/1x16s4-minmax-fma3-broadcast.c
+++ b/src/f32-gemm/gen/1x16s4-minmax-fma3-broadcast.c
@@ -24,7 +24,7 @@
     float*restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/f32-gemm/gen/1x4-minmax-scalar.c b/src/f32-gemm/gen/1x4-minmax-scalar.c
index 85baa9f..10d58c9 100644
--- a/src/f32-gemm/gen/1x4-minmax-scalar.c
+++ b/src/f32-gemm/gen/1x4-minmax-scalar.c
@@ -23,7 +23,7 @@
     float* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/f32-gemm/gen/1x4-minmax-wasm.c b/src/f32-gemm/gen/1x4-minmax-wasm.c
index 9f4665e..759dd9f 100644
--- a/src/f32-gemm/gen/1x4-minmax-wasm.c
+++ b/src/f32-gemm/gen/1x4-minmax-wasm.c
@@ -23,7 +23,7 @@
     float* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/f32-gemm/gen/1x4-scalar.c b/src/f32-gemm/gen/1x4-scalar.c
index 28a9c39..0bfdc77 100644
--- a/src/f32-gemm/gen/1x4-scalar.c
+++ b/src/f32-gemm/gen/1x4-scalar.c
@@ -23,7 +23,7 @@
     float* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/f32-gemm/gen/1x4-wasm.c b/src/f32-gemm/gen/1x4-wasm.c
index e71010e..14252b3 100644
--- a/src/f32-gemm/gen/1x4-wasm.c
+++ b/src/f32-gemm/gen/1x4-wasm.c
@@ -23,7 +23,7 @@
     float* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/f32-gemm/gen/1x8-minmax-aarch64-neonfma-cortex-a53.S b/src/f32-gemm/gen/1x8-minmax-aarch64-neonfma-cortex-a53.S
index 5a982ad..13eacab 100644
--- a/src/f32-gemm/gen/1x8-minmax-aarch64-neonfma-cortex-a53.S
+++ b/src/f32-gemm/gen/1x8-minmax-aarch64-neonfma-cortex-a53.S
@@ -19,7 +19,7 @@
 #     uint8_t*restrict c,       x6
 #     size_t cm_stride,         (x7) - unused
 #     size_t cn_stride,         [sp] -> x14
-#     const union xnn_f32_minmax_params params[restrict static 1])  [sp + 8] -> x8
+#     const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])  [sp + 8] -> x8
 
 # d8-d15 need to be preserved if used.
 # x19-30 need to be preserved if used.
diff --git a/src/f32-gemm/gen/1x8-minmax-aarch64-neonfma-cortex-a57.S b/src/f32-gemm/gen/1x8-minmax-aarch64-neonfma-cortex-a57.S
index 6b612a3..6d89b24 100644
--- a/src/f32-gemm/gen/1x8-minmax-aarch64-neonfma-cortex-a57.S
+++ b/src/f32-gemm/gen/1x8-minmax-aarch64-neonfma-cortex-a57.S
@@ -19,7 +19,7 @@
 #     uint8_t*restrict c,       x6
 #     size_t cm_stride,         (x7) - unused
 #     size_t cn_stride,         [sp] -> x14
-#     const union xnn_f32_minmax_params params[restrict static 1])  [sp + 8] -> x8
+#     const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])  [sp + 8] -> x8
 
 # d8-d15 need to be preserved if used.
 # x19-30 need to be preserved if used.
diff --git a/src/f32-gemm/gen/1x8-minmax-aarch64-neonfma-cortex-a75.S b/src/f32-gemm/gen/1x8-minmax-aarch64-neonfma-cortex-a75.S
index f4fd9b6..562760f 100644
--- a/src/f32-gemm/gen/1x8-minmax-aarch64-neonfma-cortex-a75.S
+++ b/src/f32-gemm/gen/1x8-minmax-aarch64-neonfma-cortex-a75.S
@@ -19,7 +19,7 @@
 #     uint8_t*restrict c,       x6
 #     size_t cm_stride,         (x7) - unused
 #     size_t cn_stride,         [sp] -> x14
-#     const union xnn_f32_minmax_params params[restrict static 1])  [sp + 8] -> x8
+#     const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])  [sp + 8] -> x8
 
 # d8-d15 need to be preserved if used.
 # x19-30 need to be preserved if used.
diff --git a/src/f32-gemm/gen/1x8-minmax-aarch64-neonfma-ld64.S b/src/f32-gemm/gen/1x8-minmax-aarch64-neonfma-ld64.S
index 37ea41b..c714e43 100644
--- a/src/f32-gemm/gen/1x8-minmax-aarch64-neonfma-ld64.S
+++ b/src/f32-gemm/gen/1x8-minmax-aarch64-neonfma-ld64.S
@@ -19,7 +19,7 @@
 #     uint8_t*restrict c,       x6
 #     size_t cm_stride,         (x7) - unused
 #     size_t cn_stride,         [sp] -> x14
-#     const union xnn_f32_minmax_params params[restrict static 1])  [sp + 8] -> x8
+#     const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])  [sp + 8] -> x8
 
 # d8-d15 need to be preserved if used.
 # x19-30 need to be preserved if used.
diff --git a/src/f32-gemm/gen/1x8-minmax-avx-broadcast.c b/src/f32-gemm/gen/1x8-minmax-avx-broadcast.c
index 8061564..b12d76b 100644
--- a/src/f32-gemm/gen/1x8-minmax-avx-broadcast.c
+++ b/src/f32-gemm/gen/1x8-minmax-avx-broadcast.c
@@ -24,7 +24,7 @@
     float*restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/f32-gemm/gen/1x8-minmax-fma3-broadcast.c b/src/f32-gemm/gen/1x8-minmax-fma3-broadcast.c
index 6c464a5..b212bfd 100644
--- a/src/f32-gemm/gen/1x8-minmax-fma3-broadcast.c
+++ b/src/f32-gemm/gen/1x8-minmax-fma3-broadcast.c
@@ -24,7 +24,7 @@
     float*restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/f32-gemm/gen/1x8-minmax-neon-dup-ld64.c b/src/f32-gemm/gen/1x8-minmax-neon-dup-ld64.c
index 7c0375c..9410712 100644
--- a/src/f32-gemm/gen/1x8-minmax-neon-dup-ld64.c
+++ b/src/f32-gemm/gen/1x8-minmax-neon-dup-ld64.c
@@ -25,7 +25,7 @@
     float* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/f32-gemm/gen/1x8-minmax-neon-lane-ld64.c b/src/f32-gemm/gen/1x8-minmax-neon-lane-ld64.c
index bfd8ad1..252ffe9 100644
--- a/src/f32-gemm/gen/1x8-minmax-neon-lane-ld64.c
+++ b/src/f32-gemm/gen/1x8-minmax-neon-lane-ld64.c
@@ -25,7 +25,7 @@
     float* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/f32-gemm/gen/1x8-minmax-neonfma-dup-ld64.c b/src/f32-gemm/gen/1x8-minmax-neonfma-dup-ld64.c
index 30e6f3f..b4e5f59 100644
--- a/src/f32-gemm/gen/1x8-minmax-neonfma-dup-ld64.c
+++ b/src/f32-gemm/gen/1x8-minmax-neonfma-dup-ld64.c
@@ -25,7 +25,7 @@
     float* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/f32-gemm/gen/1x8-minmax-neonfma-lane-ld64.c b/src/f32-gemm/gen/1x8-minmax-neonfma-lane-ld64.c
index 5347234..d639334 100644
--- a/src/f32-gemm/gen/1x8-minmax-neonfma-lane-ld64.c
+++ b/src/f32-gemm/gen/1x8-minmax-neonfma-lane-ld64.c
@@ -25,7 +25,7 @@
     float* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/f32-gemm/gen/1x8-minmax-psimd-loadsplat.c b/src/f32-gemm/gen/1x8-minmax-psimd-loadsplat.c
index 4e480d2..d96e55b 100644
--- a/src/f32-gemm/gen/1x8-minmax-psimd-loadsplat.c
+++ b/src/f32-gemm/gen/1x8-minmax-psimd-loadsplat.c
@@ -24,7 +24,7 @@
     float*restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/f32-gemm/gen/1x8-minmax-psimd-splat.c b/src/f32-gemm/gen/1x8-minmax-psimd-splat.c
index 9b630fb..99d2363 100644
--- a/src/f32-gemm/gen/1x8-minmax-psimd-splat.c
+++ b/src/f32-gemm/gen/1x8-minmax-psimd-splat.c
@@ -24,7 +24,7 @@
     float*restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/f32-gemm/gen/1x8-minmax-sse-dup.c b/src/f32-gemm/gen/1x8-minmax-sse-dup.c
index 7c4e638..e53823f 100644
--- a/src/f32-gemm/gen/1x8-minmax-sse-dup.c
+++ b/src/f32-gemm/gen/1x8-minmax-sse-dup.c
@@ -24,7 +24,7 @@
     float*restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/f32-gemm/gen/1x8-minmax-sse-load1.c b/src/f32-gemm/gen/1x8-minmax-sse-load1.c
index d7e9819..c81877d 100644
--- a/src/f32-gemm/gen/1x8-minmax-sse-load1.c
+++ b/src/f32-gemm/gen/1x8-minmax-sse-load1.c
@@ -24,7 +24,7 @@
     float*restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/f32-gemm/gen/1x8s4-minmax-neon.c b/src/f32-gemm/gen/1x8s4-minmax-neon.c
index 96edba2..b80ec49 100644
--- a/src/f32-gemm/gen/1x8s4-minmax-neon.c
+++ b/src/f32-gemm/gen/1x8s4-minmax-neon.c
@@ -25,7 +25,7 @@
     float* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/f32-gemm/gen/1x8s4-minmax-neonfma.c b/src/f32-gemm/gen/1x8s4-minmax-neonfma.c
index 8641764..d85656b 100644
--- a/src/f32-gemm/gen/1x8s4-minmax-neonfma.c
+++ b/src/f32-gemm/gen/1x8s4-minmax-neonfma.c
@@ -25,7 +25,7 @@
     float* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/f32-gemm/gen/1x8s4-minmax-psimd.c b/src/f32-gemm/gen/1x8s4-minmax-psimd.c
index c3e4e36..b231448 100644
--- a/src/f32-gemm/gen/1x8s4-minmax-psimd.c
+++ b/src/f32-gemm/gen/1x8s4-minmax-psimd.c
@@ -24,7 +24,7 @@
     float*restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/f32-gemm/gen/1x8s4-minmax-sse.c b/src/f32-gemm/gen/1x8s4-minmax-sse.c
index 8450772..7a97241 100644
--- a/src/f32-gemm/gen/1x8s4-minmax-sse.c
+++ b/src/f32-gemm/gen/1x8s4-minmax-sse.c
@@ -24,7 +24,7 @@
     float*restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/f32-gemm/gen/2x4-minmax-scalar.c b/src/f32-gemm/gen/2x4-minmax-scalar.c
index e59da86..3548546 100644
--- a/src/f32-gemm/gen/2x4-minmax-scalar.c
+++ b/src/f32-gemm/gen/2x4-minmax-scalar.c
@@ -23,7 +23,7 @@
     float* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/f32-gemm/gen/2x4-minmax-wasm.c b/src/f32-gemm/gen/2x4-minmax-wasm.c
index c3ff277..4ccdb3e 100644
--- a/src/f32-gemm/gen/2x4-minmax-wasm.c
+++ b/src/f32-gemm/gen/2x4-minmax-wasm.c
@@ -23,7 +23,7 @@
     float* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/f32-gemm/gen/2x4-scalar.c b/src/f32-gemm/gen/2x4-scalar.c
index fc02d2b..6ed59da 100644
--- a/src/f32-gemm/gen/2x4-scalar.c
+++ b/src/f32-gemm/gen/2x4-scalar.c
@@ -23,7 +23,7 @@
     float* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/f32-gemm/gen/2x4-wasm.c b/src/f32-gemm/gen/2x4-wasm.c
index 4083692..d13d590 100644
--- a/src/f32-gemm/gen/2x4-wasm.c
+++ b/src/f32-gemm/gen/2x4-wasm.c
@@ -23,7 +23,7 @@
     float* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/f32-gemm/gen/3x16-minmax-avx-broadcast.c b/src/f32-gemm/gen/3x16-minmax-avx-broadcast.c
index 7f5340c..b3e02d0 100644
--- a/src/f32-gemm/gen/3x16-minmax-avx-broadcast.c
+++ b/src/f32-gemm/gen/3x16-minmax-avx-broadcast.c
@@ -24,7 +24,7 @@
     float*restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/f32-gemm/gen/3x16-minmax-fma3-broadcast.c b/src/f32-gemm/gen/3x16-minmax-fma3-broadcast.c
index fa9218a..fada6fa 100644
--- a/src/f32-gemm/gen/3x16-minmax-fma3-broadcast.c
+++ b/src/f32-gemm/gen/3x16-minmax-fma3-broadcast.c
@@ -24,7 +24,7 @@
     float*restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/f32-gemm/gen/3x16s4-minmax-fma3-broadcast.c b/src/f32-gemm/gen/3x16s4-minmax-fma3-broadcast.c
index a72f559..844ab1d 100644
--- a/src/f32-gemm/gen/3x16s4-minmax-fma3-broadcast.c
+++ b/src/f32-gemm/gen/3x16s4-minmax-fma3-broadcast.c
@@ -24,7 +24,7 @@
     float*restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/f32-gemm/gen/4x12-minmax-aarch64-neonfma-cortex-a53.S b/src/f32-gemm/gen/4x12-minmax-aarch64-neonfma-cortex-a53.S
index 9dbf8e9..47f10ed 100644
--- a/src/f32-gemm/gen/4x12-minmax-aarch64-neonfma-cortex-a53.S
+++ b/src/f32-gemm/gen/4x12-minmax-aarch64-neonfma-cortex-a53.S
@@ -19,7 +19,7 @@
 #     uint8_t*restrict c,       x6
 #     size_t cm_stride,         x7
 #     size_t cn_stride,         [sp] -> x14
-#     const union xnn_f32_minmax_params params[restrict static 1])  [sp + 8] -> x8
+#     const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])  [sp + 8] -> x8
 
 # d8-d15 need to be preserved if used.
 # x19-30 need to be preserved if used.
diff --git a/src/f32-gemm/gen/4x16-minmax-avx-broadcast.c b/src/f32-gemm/gen/4x16-minmax-avx-broadcast.c
index 31654ce..1ed8873 100644
--- a/src/f32-gemm/gen/4x16-minmax-avx-broadcast.c
+++ b/src/f32-gemm/gen/4x16-minmax-avx-broadcast.c
@@ -24,7 +24,7 @@
     float*restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/f32-gemm/gen/4x16-minmax-avx512f-broadcast.c b/src/f32-gemm/gen/4x16-minmax-avx512f-broadcast.c
index 900ceb4..5444c9a 100644
--- a/src/f32-gemm/gen/4x16-minmax-avx512f-broadcast.c
+++ b/src/f32-gemm/gen/4x16-minmax-avx512f-broadcast.c
@@ -25,7 +25,7 @@
     float*restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/f32-gemm/gen/4x16-minmax-fma3-broadcast.c b/src/f32-gemm/gen/4x16-minmax-fma3-broadcast.c
index 1e0977f..c58e41a 100644
--- a/src/f32-gemm/gen/4x16-minmax-fma3-broadcast.c
+++ b/src/f32-gemm/gen/4x16-minmax-fma3-broadcast.c
@@ -24,7 +24,7 @@
     float*restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/f32-gemm/gen/4x16s4-minmax-fma3-broadcast.c b/src/f32-gemm/gen/4x16s4-minmax-fma3-broadcast.c
index 2b8e31e..86530f5 100644
--- a/src/f32-gemm/gen/4x16s4-minmax-fma3-broadcast.c
+++ b/src/f32-gemm/gen/4x16s4-minmax-fma3-broadcast.c
@@ -24,7 +24,7 @@
     float*restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/f32-gemm/gen/4x2-minmax-neon-lane-ld64.c b/src/f32-gemm/gen/4x2-minmax-neon-lane-ld64.c
index d7a3f4c..6376c70 100644
--- a/src/f32-gemm/gen/4x2-minmax-neon-lane-ld64.c
+++ b/src/f32-gemm/gen/4x2-minmax-neon-lane-ld64.c
@@ -25,7 +25,7 @@
     float*restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/f32-gemm/gen/4x2-minmax-neonfma-lane-ld64.c b/src/f32-gemm/gen/4x2-minmax-neonfma-lane-ld64.c
index 50052a1..6bc5639 100644
--- a/src/f32-gemm/gen/4x2-minmax-neonfma-lane-ld64.c
+++ b/src/f32-gemm/gen/4x2-minmax-neonfma-lane-ld64.c
@@ -25,7 +25,7 @@
     float*restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/f32-gemm/gen/4x2-minmax-scalar.c b/src/f32-gemm/gen/4x2-minmax-scalar.c
index 6da36f2..8804e9f 100644
--- a/src/f32-gemm/gen/4x2-minmax-scalar.c
+++ b/src/f32-gemm/gen/4x2-minmax-scalar.c
@@ -23,7 +23,7 @@
     float* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/f32-gemm/gen/4x2-minmax-wasm.c b/src/f32-gemm/gen/4x2-minmax-wasm.c
index cde4381..1bd31c0 100644
--- a/src/f32-gemm/gen/4x2-minmax-wasm.c
+++ b/src/f32-gemm/gen/4x2-minmax-wasm.c
@@ -23,7 +23,7 @@
     float* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/f32-gemm/gen/4x2-scalar.c b/src/f32-gemm/gen/4x2-scalar.c
index 0df2cf6..5ae86b9 100644
--- a/src/f32-gemm/gen/4x2-scalar.c
+++ b/src/f32-gemm/gen/4x2-scalar.c
@@ -23,7 +23,7 @@
     float* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/f32-gemm/gen/4x2-wasm.c b/src/f32-gemm/gen/4x2-wasm.c
index b6aa324..bd1a1c9 100644
--- a/src/f32-gemm/gen/4x2-wasm.c
+++ b/src/f32-gemm/gen/4x2-wasm.c
@@ -23,7 +23,7 @@
     float* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/f32-gemm/gen/4x2c4-minmax-psimd.c b/src/f32-gemm/gen/4x2c4-minmax-psimd.c
index d953532..f4a333f 100644
--- a/src/f32-gemm/gen/4x2c4-minmax-psimd.c
+++ b/src/f32-gemm/gen/4x2c4-minmax-psimd.c
@@ -24,7 +24,7 @@
     float* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/f32-gemm/gen/4x2c4-minmax-sse.c b/src/f32-gemm/gen/4x2c4-minmax-sse.c
index 04e4b61..4d99b66 100644
--- a/src/f32-gemm/gen/4x2c4-minmax-sse.c
+++ b/src/f32-gemm/gen/4x2c4-minmax-sse.c
@@ -24,7 +24,7 @@
     float* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/f32-gemm/gen/4x4-minmax-scalar.c b/src/f32-gemm/gen/4x4-minmax-scalar.c
index 80b6f0b..fbc1f95 100644
--- a/src/f32-gemm/gen/4x4-minmax-scalar.c
+++ b/src/f32-gemm/gen/4x4-minmax-scalar.c
@@ -23,7 +23,7 @@
     float* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/f32-gemm/gen/4x4-minmax-wasm.c b/src/f32-gemm/gen/4x4-minmax-wasm.c
index 3982697..af26137 100644
--- a/src/f32-gemm/gen/4x4-minmax-wasm.c
+++ b/src/f32-gemm/gen/4x4-minmax-wasm.c
@@ -23,7 +23,7 @@
     float* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/f32-gemm/gen/4x4-scalar.c b/src/f32-gemm/gen/4x4-scalar.c
index ed5d802..b6f787b 100644
--- a/src/f32-gemm/gen/4x4-scalar.c
+++ b/src/f32-gemm/gen/4x4-scalar.c
@@ -23,7 +23,7 @@
     float* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/f32-gemm/gen/4x4-wasm.c b/src/f32-gemm/gen/4x4-wasm.c
index 331d42b..c617005 100644
--- a/src/f32-gemm/gen/4x4-wasm.c
+++ b/src/f32-gemm/gen/4x4-wasm.c
@@ -23,7 +23,7 @@
     float* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/f32-gemm/gen/4x8-minmax-aarch32-neon-cortex-a75.S b/src/f32-gemm/gen/4x8-minmax-aarch32-neon-cortex-a75.S
index a485341..f8e7f35 100644
--- a/src/f32-gemm/gen/4x8-minmax-aarch32-neon-cortex-a75.S
+++ b/src/f32-gemm/gen/4x8-minmax-aarch32-neon-cortex-a75.S
@@ -21,7 +21,7 @@
 //     uint8_t*restrict c,       sp + 104 -> r11
 //     size_t cm_stride,         sp + 108 -> (r6)
 //     size_t cn_stride,         sp + 112 -> r7
-//     const union xnn_f32_minmax_params params[restrict static 1])  sp + 116 -> (r7)
+//     const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])  sp + 116 -> (r7)
 
 
 // inner loop registers
diff --git a/src/f32-gemm/gen/4x8-minmax-aarch32-neon-pld-cortex-a75.S b/src/f32-gemm/gen/4x8-minmax-aarch32-neon-pld-cortex-a75.S
index 0055c40..a04c04d 100644
--- a/src/f32-gemm/gen/4x8-minmax-aarch32-neon-pld-cortex-a75.S
+++ b/src/f32-gemm/gen/4x8-minmax-aarch32-neon-pld-cortex-a75.S
@@ -21,7 +21,7 @@
 //     uint8_t*restrict c,       sp + 104 -> r11
 //     size_t cm_stride,         sp + 108 -> (r6)
 //     size_t cn_stride,         sp + 112 -> r7
-//     const union xnn_f32_minmax_params params[restrict static 1])  sp + 116 -> (r7)
+//     const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])  sp + 116 -> (r7)
 
 
 // inner loop registers
diff --git a/src/f32-gemm/gen/4x8-minmax-aarch64-neonfma-cortex-a53.S b/src/f32-gemm/gen/4x8-minmax-aarch64-neonfma-cortex-a53.S
index a4b7ee7..ca955f1 100644
--- a/src/f32-gemm/gen/4x8-minmax-aarch64-neonfma-cortex-a53.S
+++ b/src/f32-gemm/gen/4x8-minmax-aarch64-neonfma-cortex-a53.S
@@ -19,7 +19,7 @@
 #     uint8_t*restrict c,       x6
 #     size_t cm_stride,         x7
 #     size_t cn_stride,         [sp] -> x14
-#     const union xnn_f32_minmax_params params[restrict static 1])  [sp + 8] -> x8
+#     const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])  [sp + 8] -> x8
 
 # d8-d15 need to be preserved if used.
 # x19-30 need to be preserved if used.
diff --git a/src/f32-gemm/gen/4x8-minmax-aarch64-neonfma-cortex-a55.S b/src/f32-gemm/gen/4x8-minmax-aarch64-neonfma-cortex-a55.S
index d458898..44cb3f3 100644
--- a/src/f32-gemm/gen/4x8-minmax-aarch64-neonfma-cortex-a55.S
+++ b/src/f32-gemm/gen/4x8-minmax-aarch64-neonfma-cortex-a55.S
@@ -19,7 +19,7 @@
 #     uint8_t*restrict c,       x6
 #     size_t cm_stride,         x7
 #     size_t cn_stride,         [sp] -> x14
-#     const union xnn_f32_minmax_params params[restrict static 1])  [sp + 8] -> x8
+#     const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])  [sp + 8] -> x8
 
 # d8-d15 need to be preserved if used.
 # x19-30 need to be preserved if used.
diff --git a/src/f32-gemm/gen/4x8-minmax-aarch64-neonfma-cortex-a57.S b/src/f32-gemm/gen/4x8-minmax-aarch64-neonfma-cortex-a57.S
index 68651ac..f074547 100644
--- a/src/f32-gemm/gen/4x8-minmax-aarch64-neonfma-cortex-a57.S
+++ b/src/f32-gemm/gen/4x8-minmax-aarch64-neonfma-cortex-a57.S
@@ -19,7 +19,7 @@
 #     uint8_t*restrict c,       x6
 #     size_t cm_stride,         x7
 #     size_t cn_stride,         [sp] -> x14
-#     const union xnn_f32_minmax_params params[restrict static 1])  [sp + 8] -> x8
+#     const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])  [sp + 8] -> x8
 
 # d8-d15 need to be preserved if used.
 # x19-30 need to be preserved if used.
diff --git a/src/f32-gemm/gen/4x8-minmax-aarch64-neonfma-cortex-a75.S b/src/f32-gemm/gen/4x8-minmax-aarch64-neonfma-cortex-a75.S
index 4803e02..f42fd6a 100644
--- a/src/f32-gemm/gen/4x8-minmax-aarch64-neonfma-cortex-a75.S
+++ b/src/f32-gemm/gen/4x8-minmax-aarch64-neonfma-cortex-a75.S
@@ -19,7 +19,7 @@
 #     uint8_t*restrict c,       x6
 #     size_t cm_stride,         x7
 #     size_t cn_stride,         [sp] -> x14
-#     const union xnn_f32_minmax_params params[restrict static 1])  [sp + 8] -> x8
+#     const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])  [sp + 8] -> x8
 
 # d8-d15 need to be preserved if used.
 # x19-30 need to be preserved if used.
diff --git a/src/f32-gemm/gen/4x8-minmax-aarch64-neonfma-ld128.S b/src/f32-gemm/gen/4x8-minmax-aarch64-neonfma-ld128.S
index 158d6f8..c114866 100644
--- a/src/f32-gemm/gen/4x8-minmax-aarch64-neonfma-ld128.S
+++ b/src/f32-gemm/gen/4x8-minmax-aarch64-neonfma-ld128.S
@@ -19,7 +19,7 @@
 #     uint8_t*restrict c,       x6
 #     size_t cm_stride,         x7
 #     size_t cn_stride,         [sp] -> x14
-#     const union xnn_f32_minmax_params params[restrict static 1])  [sp + 8] -> x8
+#     const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])  [sp + 8] -> x8
 
 # d8-d15 need to be preserved if used.
 # x19-30 need to be preserved if used.
diff --git a/src/f32-gemm/gen/4x8-minmax-aarch64-neonfma-ld64.S b/src/f32-gemm/gen/4x8-minmax-aarch64-neonfma-ld64.S
index a93249a..072980c 100644
--- a/src/f32-gemm/gen/4x8-minmax-aarch64-neonfma-ld64.S
+++ b/src/f32-gemm/gen/4x8-minmax-aarch64-neonfma-ld64.S
@@ -19,7 +19,7 @@
 #     uint8_t*restrict c,       x6
 #     size_t cm_stride,         x7
 #     size_t cn_stride,         [sp] -> x14
-#     const union xnn_f32_minmax_params params[restrict static 1])  [sp + 8] -> x8
+#     const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])  [sp + 8] -> x8
 
 # d8-d15 need to be preserved if used.
 # x19-30 need to be preserved if used.
diff --git a/src/f32-gemm/gen/4x8-minmax-avx-broadcast.c b/src/f32-gemm/gen/4x8-minmax-avx-broadcast.c
index f6b3ba7..88ac1a7 100644
--- a/src/f32-gemm/gen/4x8-minmax-avx-broadcast.c
+++ b/src/f32-gemm/gen/4x8-minmax-avx-broadcast.c
@@ -24,7 +24,7 @@
     float*restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/f32-gemm/gen/4x8-minmax-fma3-broadcast.c b/src/f32-gemm/gen/4x8-minmax-fma3-broadcast.c
index ed945f5..bc5296e 100644
--- a/src/f32-gemm/gen/4x8-minmax-fma3-broadcast.c
+++ b/src/f32-gemm/gen/4x8-minmax-fma3-broadcast.c
@@ -24,7 +24,7 @@
     float*restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/f32-gemm/gen/4x8-minmax-neon-dup-ld128.c b/src/f32-gemm/gen/4x8-minmax-neon-dup-ld128.c
index ebd330c..dc6c4c7 100644
--- a/src/f32-gemm/gen/4x8-minmax-neon-dup-ld128.c
+++ b/src/f32-gemm/gen/4x8-minmax-neon-dup-ld128.c
@@ -25,7 +25,7 @@
     float* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/f32-gemm/gen/4x8-minmax-neon-dup-ld64.c b/src/f32-gemm/gen/4x8-minmax-neon-dup-ld64.c
index 3ee36d4..758d0f4 100644
--- a/src/f32-gemm/gen/4x8-minmax-neon-dup-ld64.c
+++ b/src/f32-gemm/gen/4x8-minmax-neon-dup-ld64.c
@@ -25,7 +25,7 @@
     float* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/f32-gemm/gen/4x8-minmax-neon-lane-ld128.c b/src/f32-gemm/gen/4x8-minmax-neon-lane-ld128.c
index e702383..b0d1493 100644
--- a/src/f32-gemm/gen/4x8-minmax-neon-lane-ld128.c
+++ b/src/f32-gemm/gen/4x8-minmax-neon-lane-ld128.c
@@ -25,7 +25,7 @@
     float* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/f32-gemm/gen/4x8-minmax-neon-lane-ld64.c b/src/f32-gemm/gen/4x8-minmax-neon-lane-ld64.c
index 1b4d4fd..3e6959b 100644
--- a/src/f32-gemm/gen/4x8-minmax-neon-lane-ld64.c
+++ b/src/f32-gemm/gen/4x8-minmax-neon-lane-ld64.c
@@ -25,7 +25,7 @@
     float* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/f32-gemm/gen/4x8-minmax-neonfma-dup-ld128.c b/src/f32-gemm/gen/4x8-minmax-neonfma-dup-ld128.c
index 5f25f5f..954d822 100644
--- a/src/f32-gemm/gen/4x8-minmax-neonfma-dup-ld128.c
+++ b/src/f32-gemm/gen/4x8-minmax-neonfma-dup-ld128.c
@@ -25,7 +25,7 @@
     float* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/f32-gemm/gen/4x8-minmax-neonfma-dup-ld64.c b/src/f32-gemm/gen/4x8-minmax-neonfma-dup-ld64.c
index d0b62f0..734df7d 100644
--- a/src/f32-gemm/gen/4x8-minmax-neonfma-dup-ld64.c
+++ b/src/f32-gemm/gen/4x8-minmax-neonfma-dup-ld64.c
@@ -25,7 +25,7 @@
     float* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/f32-gemm/gen/4x8-minmax-neonfma-lane-ld128.c b/src/f32-gemm/gen/4x8-minmax-neonfma-lane-ld128.c
index 3ffc70a..a712f01 100644
--- a/src/f32-gemm/gen/4x8-minmax-neonfma-lane-ld128.c
+++ b/src/f32-gemm/gen/4x8-minmax-neonfma-lane-ld128.c
@@ -25,7 +25,7 @@
     float* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/f32-gemm/gen/4x8-minmax-neonfma-lane-ld64.c b/src/f32-gemm/gen/4x8-minmax-neonfma-lane-ld64.c
index c5c70fa..d0bb539 100644
--- a/src/f32-gemm/gen/4x8-minmax-neonfma-lane-ld64.c
+++ b/src/f32-gemm/gen/4x8-minmax-neonfma-lane-ld64.c
@@ -25,7 +25,7 @@
     float* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/f32-gemm/gen/4x8-minmax-psimd-loadsplat.c b/src/f32-gemm/gen/4x8-minmax-psimd-loadsplat.c
index 6e3ae4c..d35d455 100644
--- a/src/f32-gemm/gen/4x8-minmax-psimd-loadsplat.c
+++ b/src/f32-gemm/gen/4x8-minmax-psimd-loadsplat.c
@@ -24,7 +24,7 @@
     float*restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/f32-gemm/gen/4x8-minmax-psimd-splat.c b/src/f32-gemm/gen/4x8-minmax-psimd-splat.c
index 0b1c3f5..9755d7a 100644
--- a/src/f32-gemm/gen/4x8-minmax-psimd-splat.c
+++ b/src/f32-gemm/gen/4x8-minmax-psimd-splat.c
@@ -24,7 +24,7 @@
     float*restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/f32-gemm/gen/4x8-minmax-sse-dup.c b/src/f32-gemm/gen/4x8-minmax-sse-dup.c
index 984d950..05114b0 100644
--- a/src/f32-gemm/gen/4x8-minmax-sse-dup.c
+++ b/src/f32-gemm/gen/4x8-minmax-sse-dup.c
@@ -24,7 +24,7 @@
     float*restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/f32-gemm/gen/4x8-minmax-sse-load1.c b/src/f32-gemm/gen/4x8-minmax-sse-load1.c
index a827e22..21bb6ce 100644
--- a/src/f32-gemm/gen/4x8-minmax-sse-load1.c
+++ b/src/f32-gemm/gen/4x8-minmax-sse-load1.c
@@ -24,7 +24,7 @@
     float*restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/f32-gemm/gen/4x8s4-minmax-neon.c b/src/f32-gemm/gen/4x8s4-minmax-neon.c
index a7ef9b3..ec21c73 100644
--- a/src/f32-gemm/gen/4x8s4-minmax-neon.c
+++ b/src/f32-gemm/gen/4x8s4-minmax-neon.c
@@ -25,7 +25,7 @@
     float* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/f32-gemm/gen/4x8s4-minmax-neonfma.c b/src/f32-gemm/gen/4x8s4-minmax-neonfma.c
index 0033219..1c6f2af 100644
--- a/src/f32-gemm/gen/4x8s4-minmax-neonfma.c
+++ b/src/f32-gemm/gen/4x8s4-minmax-neonfma.c
@@ -25,7 +25,7 @@
     float* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/f32-gemm/gen/4x8s4-minmax-psimd.c b/src/f32-gemm/gen/4x8s4-minmax-psimd.c
index e123cbf..e4401dc 100644
--- a/src/f32-gemm/gen/4x8s4-minmax-psimd.c
+++ b/src/f32-gemm/gen/4x8s4-minmax-psimd.c
@@ -24,7 +24,7 @@
     float*restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/f32-gemm/gen/4x8s4-minmax-sse.c b/src/f32-gemm/gen/4x8s4-minmax-sse.c
index c00ce69..777c966 100644
--- a/src/f32-gemm/gen/4x8s4-minmax-sse.c
+++ b/src/f32-gemm/gen/4x8s4-minmax-sse.c
@@ -24,7 +24,7 @@
     float*restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/f32-gemm/gen/5x16-minmax-avx-broadcast.c b/src/f32-gemm/gen/5x16-minmax-avx-broadcast.c
index 8970994..5eed569 100644
--- a/src/f32-gemm/gen/5x16-minmax-avx-broadcast.c
+++ b/src/f32-gemm/gen/5x16-minmax-avx-broadcast.c
@@ -24,7 +24,7 @@
     float*restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 5);
diff --git a/src/f32-gemm/gen/5x16-minmax-avx512f-broadcast.c b/src/f32-gemm/gen/5x16-minmax-avx512f-broadcast.c
index 745e516..bd00e0c 100644
--- a/src/f32-gemm/gen/5x16-minmax-avx512f-broadcast.c
+++ b/src/f32-gemm/gen/5x16-minmax-avx512f-broadcast.c
@@ -25,7 +25,7 @@
     float*restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 5);
diff --git a/src/f32-gemm/gen/5x16-minmax-fma3-broadcast.c b/src/f32-gemm/gen/5x16-minmax-fma3-broadcast.c
index 7745f1d..177fb7c 100644
--- a/src/f32-gemm/gen/5x16-minmax-fma3-broadcast.c
+++ b/src/f32-gemm/gen/5x16-minmax-fma3-broadcast.c
@@ -24,7 +24,7 @@
     float*restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 5);
diff --git a/src/f32-gemm/gen/5x16s4-minmax-fma3-broadcast.c b/src/f32-gemm/gen/5x16s4-minmax-fma3-broadcast.c
index 43ff581..d4f66b5 100644
--- a/src/f32-gemm/gen/5x16s4-minmax-fma3-broadcast.c
+++ b/src/f32-gemm/gen/5x16s4-minmax-fma3-broadcast.c
@@ -24,7 +24,7 @@
     float*restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 5);
diff --git a/src/f32-gemm/gen/5x8-minmax-aarch64-neonfma-cortex-a57.S b/src/f32-gemm/gen/5x8-minmax-aarch64-neonfma-cortex-a57.S
index ccd42ef..12c3638 100644
--- a/src/f32-gemm/gen/5x8-minmax-aarch64-neonfma-cortex-a57.S
+++ b/src/f32-gemm/gen/5x8-minmax-aarch64-neonfma-cortex-a57.S
@@ -19,7 +19,7 @@
 #     uint8_t*restrict c,       x6
 #     size_t cm_stride,         x7
 #     size_t cn_stride,         [sp] -> x14
-#     const union xnn_f32_minmax_params params[restrict static 1])  [sp + 8] -> x8
+#     const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])  [sp + 8] -> x8
 
 # unused compared to 5x8
 #  x4 a5
diff --git a/src/f32-gemm/gen/5x8-minmax-aarch64-neonfma-cortex-a75.S b/src/f32-gemm/gen/5x8-minmax-aarch64-neonfma-cortex-a75.S
index ece0ee1..7965d1e 100644
--- a/src/f32-gemm/gen/5x8-minmax-aarch64-neonfma-cortex-a75.S
+++ b/src/f32-gemm/gen/5x8-minmax-aarch64-neonfma-cortex-a75.S
@@ -19,7 +19,7 @@
 #     uint8_t*restrict c,       x6
 #     size_t cm_stride,         x7
 #     size_t cn_stride,         [sp] -> x14
-#     const union xnn_f32_minmax_params params[restrict static 1])  [sp + 8] -> x8
+#     const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])  [sp + 8] -> x8
 
 # unused compared to 5x8
 #  x4 a5
diff --git a/src/f32-gemm/gen/5x8-minmax-avx-broadcast.c b/src/f32-gemm/gen/5x8-minmax-avx-broadcast.c
index 717c530..1b80630 100644
--- a/src/f32-gemm/gen/5x8-minmax-avx-broadcast.c
+++ b/src/f32-gemm/gen/5x8-minmax-avx-broadcast.c
@@ -24,7 +24,7 @@
     float*restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 5);
diff --git a/src/f32-gemm/gen/5x8-minmax-fma3-broadcast.c b/src/f32-gemm/gen/5x8-minmax-fma3-broadcast.c
index 8ec66cd..f16f86b 100644
--- a/src/f32-gemm/gen/5x8-minmax-fma3-broadcast.c
+++ b/src/f32-gemm/gen/5x8-minmax-fma3-broadcast.c
@@ -24,7 +24,7 @@
     float*restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 5);
diff --git a/src/f32-gemm/gen/5x8-minmax-neon-lane-ld64.c b/src/f32-gemm/gen/5x8-minmax-neon-lane-ld64.c
index b5a504e..da1ac33 100644
--- a/src/f32-gemm/gen/5x8-minmax-neon-lane-ld64.c
+++ b/src/f32-gemm/gen/5x8-minmax-neon-lane-ld64.c
@@ -25,7 +25,7 @@
     float* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 5);
diff --git a/src/f32-gemm/gen/5x8-minmax-neonfma-lane-ld64.c b/src/f32-gemm/gen/5x8-minmax-neonfma-lane-ld64.c
index ff14319..e7300d2 100644
--- a/src/f32-gemm/gen/5x8-minmax-neonfma-lane-ld64.c
+++ b/src/f32-gemm/gen/5x8-minmax-neonfma-lane-ld64.c
@@ -25,7 +25,7 @@
     float* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 5);
diff --git a/src/f32-gemm/gen/6x16-minmax-avx512f-broadcast.c b/src/f32-gemm/gen/6x16-minmax-avx512f-broadcast.c
index 07cfa8f..c7b5267 100644
--- a/src/f32-gemm/gen/6x16-minmax-avx512f-broadcast.c
+++ b/src/f32-gemm/gen/6x16-minmax-avx512f-broadcast.c
@@ -25,7 +25,7 @@
     float*restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 6);
diff --git a/src/f32-gemm/gen/6x8-minmax-aarch64-neonfma-cortex-a53.S b/src/f32-gemm/gen/6x8-minmax-aarch64-neonfma-cortex-a53.S
index d3c64bf..be5a04c 100644
--- a/src/f32-gemm/gen/6x8-minmax-aarch64-neonfma-cortex-a53.S
+++ b/src/f32-gemm/gen/6x8-minmax-aarch64-neonfma-cortex-a53.S
@@ -19,7 +19,7 @@
 #     uint8_t*restrict c,       x6
 #     size_t cm_stride,         x7
 #     size_t cn_stride,         [sp] -> x14
-#     const union xnn_f32_minmax_params params[restrict static 1])  [sp + 8] -> x8
+#     const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])  [sp + 8] -> x8
 
 # d8-d15 need to be preserved if used.
 # x19-30 need to be preserved if used.
diff --git a/src/f32-gemm/gen/6x8-minmax-aarch64-neonfma-cortex-a55.S b/src/f32-gemm/gen/6x8-minmax-aarch64-neonfma-cortex-a55.S
index c79d594..f62e56a 100644
--- a/src/f32-gemm/gen/6x8-minmax-aarch64-neonfma-cortex-a55.S
+++ b/src/f32-gemm/gen/6x8-minmax-aarch64-neonfma-cortex-a55.S
@@ -19,7 +19,7 @@
 #     uint8_t*restrict c,       x6
 #     size_t cm_stride,         x7
 #     size_t cn_stride,         [sp] -> x14
-#     const union xnn_f32_minmax_params params[restrict static 1])  [sp + 8] -> x8
+#     const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])  [sp + 8] -> x8
 
 # d8-d15 need to be preserved if used.
 # x19-30 need to be preserved if used.
diff --git a/src/f32-gemm/gen/6x8-minmax-aarch64-neonfma-cortex-a57.S b/src/f32-gemm/gen/6x8-minmax-aarch64-neonfma-cortex-a57.S
index af0d1fc..4a7e7a0 100644
--- a/src/f32-gemm/gen/6x8-minmax-aarch64-neonfma-cortex-a57.S
+++ b/src/f32-gemm/gen/6x8-minmax-aarch64-neonfma-cortex-a57.S
@@ -19,7 +19,7 @@
 #     uint8_t*restrict c,       x6
 #     size_t cm_stride,         x7
 #     size_t cn_stride,         [sp] -> x14
-#     const union xnn_f32_minmax_params params[restrict static 1])  [sp + 8] -> x8
+#     const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])  [sp + 8] -> x8
 
 # d8-d15 need to be preserved if used.
 # x19-30 need to be preserved if used.
diff --git a/src/f32-gemm/gen/6x8-minmax-aarch64-neonfma-cortex-a73.S b/src/f32-gemm/gen/6x8-minmax-aarch64-neonfma-cortex-a73.S
index 589b182..6589d73 100644
--- a/src/f32-gemm/gen/6x8-minmax-aarch64-neonfma-cortex-a73.S
+++ b/src/f32-gemm/gen/6x8-minmax-aarch64-neonfma-cortex-a73.S
@@ -19,7 +19,7 @@
 #     uint8_t*restrict c,       x6
 #     size_t cm_stride,         x7
 #     size_t cn_stride,         [sp] -> x14
-#     const union xnn_f32_minmax_params params[restrict static 1])  [sp + 8] -> x8
+#     const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])  [sp + 8] -> x8
 
 # d8-d15 need to be preserved if used.
 # x19-30 need to be preserved if used.
diff --git a/src/f32-gemm/gen/6x8-minmax-aarch64-neonfma-cortex-a75.S b/src/f32-gemm/gen/6x8-minmax-aarch64-neonfma-cortex-a75.S
index 7a4255d..eb3e246 100644
--- a/src/f32-gemm/gen/6x8-minmax-aarch64-neonfma-cortex-a75.S
+++ b/src/f32-gemm/gen/6x8-minmax-aarch64-neonfma-cortex-a75.S
@@ -19,7 +19,7 @@
 #     uint8_t*restrict c,       x6
 #     size_t cm_stride,         x7
 #     size_t cn_stride,         [sp] -> x14
-#     const union xnn_f32_minmax_params params[restrict static 1])  [sp + 8] -> x8
+#     const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])  [sp + 8] -> x8
 
 # d8-d15 need to be preserved if used.
 # x19-30 need to be preserved if used.
diff --git a/src/f32-gemm/gen/6x8-minmax-aarch64-neonfma-ios.S b/src/f32-gemm/gen/6x8-minmax-aarch64-neonfma-ios.S
index 31f1fb9..4ea5878 100644
--- a/src/f32-gemm/gen/6x8-minmax-aarch64-neonfma-ios.S
+++ b/src/f32-gemm/gen/6x8-minmax-aarch64-neonfma-ios.S
@@ -19,7 +19,7 @@
 #     uint8_t*restrict c,       x6
 #     size_t cm_stride,         x7
 #     size_t cn_stride,         [sp] -> (x0)
-#     const union xnn_f32_minmax_params params[restrict static 1])  [sp + 8] -> x8
+#     const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])  [sp + 8] -> x8
 
 # d8-d15 need to be preserved if used.
 # x19-30 need to be preserved if used.
diff --git a/src/f32-gemm/gen/6x8-minmax-aarch64-neonfma-ld128.S b/src/f32-gemm/gen/6x8-minmax-aarch64-neonfma-ld128.S
index 7e2e0e2..c9a0207 100644
--- a/src/f32-gemm/gen/6x8-minmax-aarch64-neonfma-ld128.S
+++ b/src/f32-gemm/gen/6x8-minmax-aarch64-neonfma-ld128.S
@@ -19,7 +19,7 @@
 #     uint8_t*restrict c,       x6
 #     size_t cm_stride,         x7
 #     size_t cn_stride,         [sp] -> x14
-#     const union xnn_f32_minmax_params params[restrict static 1])  [sp + 8] -> x8
+#     const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])  [sp + 8] -> x8
 
 # d8-d15 need to be preserved if used.
 # x19-30 need to be preserved if used.
diff --git a/src/f32-gemm/gen/6x8-minmax-aarch64-neonfma-ld64.S b/src/f32-gemm/gen/6x8-minmax-aarch64-neonfma-ld64.S
index 098683b..241d7a0 100644
--- a/src/f32-gemm/gen/6x8-minmax-aarch64-neonfma-ld64.S
+++ b/src/f32-gemm/gen/6x8-minmax-aarch64-neonfma-ld64.S
@@ -19,7 +19,7 @@
 #     uint8_t*restrict c,       x6
 #     size_t cm_stride,         x7
 #     size_t cn_stride,         [sp] -> x14
-#     const union xnn_f32_minmax_params params[restrict static 1])  [sp + 8] -> x8
+#     const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])  [sp + 8] -> x8
 
 # d8-d15 need to be preserved if used.
 # x19-30 need to be preserved if used.
diff --git a/src/f32-gemm/gen/6x8-minmax-avx-broadcast.c b/src/f32-gemm/gen/6x8-minmax-avx-broadcast.c
index 3dd475a..2e95d68 100644
--- a/src/f32-gemm/gen/6x8-minmax-avx-broadcast.c
+++ b/src/f32-gemm/gen/6x8-minmax-avx-broadcast.c
@@ -24,7 +24,7 @@
     float*restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 6);
diff --git a/src/f32-gemm/gen/6x8-minmax-fma3-broadcast.c b/src/f32-gemm/gen/6x8-minmax-fma3-broadcast.c
index 14db34e..a5c2f3f 100644
--- a/src/f32-gemm/gen/6x8-minmax-fma3-broadcast.c
+++ b/src/f32-gemm/gen/6x8-minmax-fma3-broadcast.c
@@ -24,7 +24,7 @@
     float*restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 6);
diff --git a/src/f32-gemm/gen/6x8-minmax-neon-dup-ld128.c b/src/f32-gemm/gen/6x8-minmax-neon-dup-ld128.c
index 470e653..8a7d575 100644
--- a/src/f32-gemm/gen/6x8-minmax-neon-dup-ld128.c
+++ b/src/f32-gemm/gen/6x8-minmax-neon-dup-ld128.c
@@ -25,7 +25,7 @@
     float* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 6);
diff --git a/src/f32-gemm/gen/6x8-minmax-neon-dup-ld64.c b/src/f32-gemm/gen/6x8-minmax-neon-dup-ld64.c
index 71958b3..9870256 100644
--- a/src/f32-gemm/gen/6x8-minmax-neon-dup-ld64.c
+++ b/src/f32-gemm/gen/6x8-minmax-neon-dup-ld64.c
@@ -25,7 +25,7 @@
     float* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 6);
diff --git a/src/f32-gemm/gen/6x8-minmax-neon-lane-ld128.c b/src/f32-gemm/gen/6x8-minmax-neon-lane-ld128.c
index 2980980..493bcbd 100644
--- a/src/f32-gemm/gen/6x8-minmax-neon-lane-ld128.c
+++ b/src/f32-gemm/gen/6x8-minmax-neon-lane-ld128.c
@@ -25,7 +25,7 @@
     float* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 6);
diff --git a/src/f32-gemm/gen/6x8-minmax-neon-lane-ld64.c b/src/f32-gemm/gen/6x8-minmax-neon-lane-ld64.c
index 87d8468..37bf811 100644
--- a/src/f32-gemm/gen/6x8-minmax-neon-lane-ld64.c
+++ b/src/f32-gemm/gen/6x8-minmax-neon-lane-ld64.c
@@ -25,7 +25,7 @@
     float* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 6);
diff --git a/src/f32-gemm/gen/6x8-minmax-neonfma-dup-ld128.c b/src/f32-gemm/gen/6x8-minmax-neonfma-dup-ld128.c
index 8174829..0ae2aa7 100644
--- a/src/f32-gemm/gen/6x8-minmax-neonfma-dup-ld128.c
+++ b/src/f32-gemm/gen/6x8-minmax-neonfma-dup-ld128.c
@@ -25,7 +25,7 @@
     float* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 6);
diff --git a/src/f32-gemm/gen/6x8-minmax-neonfma-dup-ld64.c b/src/f32-gemm/gen/6x8-minmax-neonfma-dup-ld64.c
index de7fd1d..2a1a69e 100644
--- a/src/f32-gemm/gen/6x8-minmax-neonfma-dup-ld64.c
+++ b/src/f32-gemm/gen/6x8-minmax-neonfma-dup-ld64.c
@@ -25,7 +25,7 @@
     float* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 6);
diff --git a/src/f32-gemm/gen/6x8-minmax-neonfma-lane-ld128.c b/src/f32-gemm/gen/6x8-minmax-neonfma-lane-ld128.c
index b5b4841..be8d5fe 100644
--- a/src/f32-gemm/gen/6x8-minmax-neonfma-lane-ld128.c
+++ b/src/f32-gemm/gen/6x8-minmax-neonfma-lane-ld128.c
@@ -25,7 +25,7 @@
     float* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 6);
diff --git a/src/f32-gemm/gen/6x8-minmax-neonfma-lane-ld64.c b/src/f32-gemm/gen/6x8-minmax-neonfma-lane-ld64.c
index ba7a698..469a898 100644
--- a/src/f32-gemm/gen/6x8-minmax-neonfma-lane-ld64.c
+++ b/src/f32-gemm/gen/6x8-minmax-neonfma-lane-ld64.c
@@ -25,7 +25,7 @@
     float* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 6);
diff --git a/src/f32-gemm/gen/6x8-minmax-psimd-loadsplat.c b/src/f32-gemm/gen/6x8-minmax-psimd-loadsplat.c
index a4e11d5..baaebd3 100644
--- a/src/f32-gemm/gen/6x8-minmax-psimd-loadsplat.c
+++ b/src/f32-gemm/gen/6x8-minmax-psimd-loadsplat.c
@@ -24,7 +24,7 @@
     float*restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 6);
diff --git a/src/f32-gemm/gen/6x8-minmax-psimd-splat.c b/src/f32-gemm/gen/6x8-minmax-psimd-splat.c
index e9045ae..2215cf7 100644
--- a/src/f32-gemm/gen/6x8-minmax-psimd-splat.c
+++ b/src/f32-gemm/gen/6x8-minmax-psimd-splat.c
@@ -24,7 +24,7 @@
     float*restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 6);
diff --git a/src/f32-gemm/gen/6x8s4-minmax-neon.c b/src/f32-gemm/gen/6x8s4-minmax-neon.c
index 6016f7c..8209a67 100644
--- a/src/f32-gemm/gen/6x8s4-minmax-neon.c
+++ b/src/f32-gemm/gen/6x8s4-minmax-neon.c
@@ -25,7 +25,7 @@
     float* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 6);
diff --git a/src/f32-gemm/gen/6x8s4-minmax-neonfma.c b/src/f32-gemm/gen/6x8s4-minmax-neonfma.c
index 6b04836..49e15c2 100644
--- a/src/f32-gemm/gen/6x8s4-minmax-neonfma.c
+++ b/src/f32-gemm/gen/6x8s4-minmax-neonfma.c
@@ -25,7 +25,7 @@
     float* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 6);
diff --git a/src/f32-gemm/gen/6x8s4-minmax-psimd.c b/src/f32-gemm/gen/6x8s4-minmax-psimd.c
index 75fe16c..c8f91c6 100644
--- a/src/f32-gemm/gen/6x8s4-minmax-psimd.c
+++ b/src/f32-gemm/gen/6x8s4-minmax-psimd.c
@@ -24,7 +24,7 @@
     float*restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 6);
diff --git a/src/f32-gemm/gen/7x16-minmax-avx512f-broadcast.c b/src/f32-gemm/gen/7x16-minmax-avx512f-broadcast.c
index 569744c..3890f29 100644
--- a/src/f32-gemm/gen/7x16-minmax-avx512f-broadcast.c
+++ b/src/f32-gemm/gen/7x16-minmax-avx512f-broadcast.c
@@ -25,7 +25,7 @@
     float*restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 7);
diff --git a/src/f32-gemm/gen/7x8-minmax-avx-broadcast.c b/src/f32-gemm/gen/7x8-minmax-avx-broadcast.c
index 39202a6..3df8abf 100644
--- a/src/f32-gemm/gen/7x8-minmax-avx-broadcast.c
+++ b/src/f32-gemm/gen/7x8-minmax-avx-broadcast.c
@@ -24,7 +24,7 @@
     float*restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 7);
diff --git a/src/f32-gemm/gen/7x8-minmax-fma3-broadcast.c b/src/f32-gemm/gen/7x8-minmax-fma3-broadcast.c
index 7929b2a..9bdc7d7 100644
--- a/src/f32-gemm/gen/7x8-minmax-fma3-broadcast.c
+++ b/src/f32-gemm/gen/7x8-minmax-fma3-broadcast.c
@@ -24,7 +24,7 @@
     float*restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 7);
diff --git a/src/f32-gemm/gen/8x16-minmax-avx512f-broadcast.c b/src/f32-gemm/gen/8x16-minmax-avx512f-broadcast.c
index 1192780..c5a1f10 100644
--- a/src/f32-gemm/gen/8x16-minmax-avx512f-broadcast.c
+++ b/src/f32-gemm/gen/8x16-minmax-avx512f-broadcast.c
@@ -25,7 +25,7 @@
     float*restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 8);
diff --git a/src/f32-gemm/gen/8x8-minmax-fma3-broadcast.c b/src/f32-gemm/gen/8x8-minmax-fma3-broadcast.c
index 902beb4..05dde8c 100644
--- a/src/f32-gemm/gen/8x8-minmax-fma3-broadcast.c
+++ b/src/f32-gemm/gen/8x8-minmax-fma3-broadcast.c
@@ -24,7 +24,7 @@
     float*restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 8);
diff --git a/src/f32-gemm/gen/8x8s4-minmax-neon.c b/src/f32-gemm/gen/8x8s4-minmax-neon.c
index ff9ecc9..72f6a7d 100644
--- a/src/f32-gemm/gen/8x8s4-minmax-neon.c
+++ b/src/f32-gemm/gen/8x8s4-minmax-neon.c
@@ -25,7 +25,7 @@
     float* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 8);
diff --git a/src/f32-gemm/gen/8x8s4-minmax-neonfma.c b/src/f32-gemm/gen/8x8s4-minmax-neonfma.c
index 332bf9a..d166a29 100644
--- a/src/f32-gemm/gen/8x8s4-minmax-neonfma.c
+++ b/src/f32-gemm/gen/8x8s4-minmax-neonfma.c
@@ -25,7 +25,7 @@
     float* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 8);
diff --git a/src/f32-gemm/neon-ld128.c.in b/src/f32-gemm/neon-ld128.c.in
index 420994c..0823266 100644
--- a/src/f32-gemm/neon-ld128.c.in
+++ b/src/f32-gemm/neon-ld128.c.in
@@ -27,7 +27,7 @@
     size_t cn_stride,
     $if INC:
       const float*restrict acc,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= ${MR});
diff --git a/src/f32-gemm/neon-ld64.c.in b/src/f32-gemm/neon-ld64.c.in
index 5f94109..d650aaa 100644
--- a/src/f32-gemm/neon-ld64.c.in
+++ b/src/f32-gemm/neon-ld64.c.in
@@ -27,7 +27,7 @@
     size_t cn_stride,
     $if INC:
       const float*restrict acc,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= ${MR});
diff --git a/src/f32-gemm/neon-shuffle.c.in b/src/f32-gemm/neon-shuffle.c.in
index f09c67d..f860317 100644
--- a/src/f32-gemm/neon-shuffle.c.in
+++ b/src/f32-gemm/neon-shuffle.c.in
@@ -26,7 +26,7 @@
     size_t cn_stride,
     $if INC:
       const float*restrict acc,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= ${MR});
diff --git a/src/f32-gemm/psimd-loadsplat.c.in b/src/f32-gemm/psimd-loadsplat.c.in
index c5cd45f..270183a 100644
--- a/src/f32-gemm/psimd-loadsplat.c.in
+++ b/src/f32-gemm/psimd-loadsplat.c.in
@@ -24,7 +24,7 @@
     size_t cn_stride,
     $if INC:
       const float*restrict acc,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= ${MR});
diff --git a/src/f32-gemm/psimd-s4.c.in b/src/f32-gemm/psimd-s4.c.in
index 177fe6a..a347762 100644
--- a/src/f32-gemm/psimd-s4.c.in
+++ b/src/f32-gemm/psimd-s4.c.in
@@ -24,7 +24,7 @@
     size_t cn_stride,
     $if INC:
       const float*restrict acc,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= ${MR});
diff --git a/src/f32-gemm/psimd-splat.c.in b/src/f32-gemm/psimd-splat.c.in
index 02ac54e..2f969de 100644
--- a/src/f32-gemm/psimd-splat.c.in
+++ b/src/f32-gemm/psimd-splat.c.in
@@ -24,7 +24,7 @@
     size_t cn_stride,
     $if INC:
       const float*restrict acc,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= ${MR});
diff --git a/src/f32-gemm/scalar.c.in b/src/f32-gemm/scalar.c.in
index e567a07..bf5fb20 100644
--- a/src/f32-gemm/scalar.c.in
+++ b/src/f32-gemm/scalar.c.in
@@ -27,7 +27,7 @@
     size_t cn_stride,
     $if INC:
       const float*restrict acc,
-    const union ${PARAMS} params[restrict static 1])
+    const union ${PARAMS} params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= ${MR});
diff --git a/src/f32-gemm/sse-dup.c.in b/src/f32-gemm/sse-dup.c.in
index 7b9c1df..ee2e041 100644
--- a/src/f32-gemm/sse-dup.c.in
+++ b/src/f32-gemm/sse-dup.c.in
@@ -24,7 +24,7 @@
     size_t cn_stride,
     $if INC:
       const float*restrict acc,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= ${MR});
diff --git a/src/f32-gemm/sse-load1.c.in b/src/f32-gemm/sse-load1.c.in
index 02274c6..1636d0e 100644
--- a/src/f32-gemm/sse-load1.c.in
+++ b/src/f32-gemm/sse-load1.c.in
@@ -24,7 +24,7 @@
     size_t cn_stride,
     $if INC:
       const float*restrict acc,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= ${MR});
diff --git a/src/f32-gemm/sse-shuffle.c.in b/src/f32-gemm/sse-shuffle.c.in
index 64bac24..eff6a24 100644
--- a/src/f32-gemm/sse-shuffle.c.in
+++ b/src/f32-gemm/sse-shuffle.c.in
@@ -24,7 +24,7 @@
     size_t cn_stride,
     $if INC:
       const float*restrict acc,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= ${MR});
diff --git a/src/f32-hswish/avx.c.in b/src/f32-hswish/avx.c.in
index d810502..b86be1d 100644
--- a/src/f32-hswish/avx.c.in
+++ b/src/f32-hswish/avx.c.in
@@ -21,7 +21,7 @@
     size_t n,
     const float* x,
     float* y,
-    const union xnn_f32_hswish_params params[restrict static 1])
+    const union xnn_f32_hswish_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-hswish/avx512f.c.in b/src/f32-hswish/avx512f.c.in
index 89edb6c..30a2e84 100644
--- a/src/f32-hswish/avx512f.c.in
+++ b/src/f32-hswish/avx512f.c.in
@@ -19,7 +19,7 @@
     size_t n,
     const float* x,
     float* y,
-    const union xnn_f32_hswish_params params[restrict static 1])
+    const union xnn_f32_hswish_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-hswish/gen/avx-x16.c b/src/f32-hswish/gen/avx-x16.c
index e353578..0b6b30b 100644
--- a/src/f32-hswish/gen/avx-x16.c
+++ b/src/f32-hswish/gen/avx-x16.c
@@ -21,7 +21,7 @@
     size_t n,
     const float* x,
     float* y,
-    const union xnn_f32_hswish_params params[restrict static 1])
+    const union xnn_f32_hswish_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-hswish/gen/avx-x8.c b/src/f32-hswish/gen/avx-x8.c
index d10034e..9aaed59 100644
--- a/src/f32-hswish/gen/avx-x8.c
+++ b/src/f32-hswish/gen/avx-x8.c
@@ -21,7 +21,7 @@
     size_t n,
     const float* x,
     float* y,
-    const union xnn_f32_hswish_params params[restrict static 1])
+    const union xnn_f32_hswish_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-hswish/gen/avx512f-x16.c b/src/f32-hswish/gen/avx512f-x16.c
index 5fb158f..11bd25d 100644
--- a/src/f32-hswish/gen/avx512f-x16.c
+++ b/src/f32-hswish/gen/avx512f-x16.c
@@ -20,7 +20,7 @@
     size_t n,
     const float* x,
     float* y,
-    const union xnn_f32_hswish_params params[restrict static 1])
+    const union xnn_f32_hswish_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-hswish/gen/avx512f-x32.c b/src/f32-hswish/gen/avx512f-x32.c
index ea95106..289dc60 100644
--- a/src/f32-hswish/gen/avx512f-x32.c
+++ b/src/f32-hswish/gen/avx512f-x32.c
@@ -20,7 +20,7 @@
     size_t n,
     const float* x,
     float* y,
-    const union xnn_f32_hswish_params params[restrict static 1])
+    const union xnn_f32_hswish_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-hswish/gen/fma3-x16.c b/src/f32-hswish/gen/fma3-x16.c
index 1aeb360..b7e187c 100644
--- a/src/f32-hswish/gen/fma3-x16.c
+++ b/src/f32-hswish/gen/fma3-x16.c
@@ -21,7 +21,7 @@
     size_t n,
     const float* x,
     float* y,
-    const union xnn_f32_hswish_params params[restrict static 1])
+    const union xnn_f32_hswish_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-hswish/gen/fma3-x8.c b/src/f32-hswish/gen/fma3-x8.c
index 8fe960b..dd3b302 100644
--- a/src/f32-hswish/gen/fma3-x8.c
+++ b/src/f32-hswish/gen/fma3-x8.c
@@ -21,7 +21,7 @@
     size_t n,
     const float* x,
     float* y,
-    const union xnn_f32_hswish_params params[restrict static 1])
+    const union xnn_f32_hswish_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-hswish/gen/neon-x4.c b/src/f32-hswish/gen/neon-x4.c
index 572a8ac..c89d034 100644
--- a/src/f32-hswish/gen/neon-x4.c
+++ b/src/f32-hswish/gen/neon-x4.c
@@ -19,7 +19,7 @@
     size_t n,
     const float* x,
     float* y,
-    const union xnn_f32_hswish_params params[restrict static 1])
+    const union xnn_f32_hswish_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-hswish/gen/neon-x8.c b/src/f32-hswish/gen/neon-x8.c
index c13d648..7828de2 100644
--- a/src/f32-hswish/gen/neon-x8.c
+++ b/src/f32-hswish/gen/neon-x8.c
@@ -19,7 +19,7 @@
     size_t n,
     const float* x,
     float* y,
-    const union xnn_f32_hswish_params params[restrict static 1])
+    const union xnn_f32_hswish_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-hswish/gen/neonfma-x4.c b/src/f32-hswish/gen/neonfma-x4.c
index f570133..091baad 100644
--- a/src/f32-hswish/gen/neonfma-x4.c
+++ b/src/f32-hswish/gen/neonfma-x4.c
@@ -19,7 +19,7 @@
     size_t n,
     const float* x,
     float* y,
-    const union xnn_f32_hswish_params params[restrict static 1])
+    const union xnn_f32_hswish_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-hswish/gen/neonfma-x8.c b/src/f32-hswish/gen/neonfma-x8.c
index 9d45646..015b0b9 100644
--- a/src/f32-hswish/gen/neonfma-x8.c
+++ b/src/f32-hswish/gen/neonfma-x8.c
@@ -19,7 +19,7 @@
     size_t n,
     const float* x,
     float* y,
-    const union xnn_f32_hswish_params params[restrict static 1])
+    const union xnn_f32_hswish_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-hswish/gen/psimd-x4.c b/src/f32-hswish/gen/psimd-x4.c
index 6e1930d..9db2f83 100644
--- a/src/f32-hswish/gen/psimd-x4.c
+++ b/src/f32-hswish/gen/psimd-x4.c
@@ -19,7 +19,7 @@
     size_t n,
     const float* x,
     float* y,
-    const union xnn_f32_hswish_params params[restrict static 1])
+    const union xnn_f32_hswish_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-hswish/gen/psimd-x8.c b/src/f32-hswish/gen/psimd-x8.c
index 621228c..7e0937c 100644
--- a/src/f32-hswish/gen/psimd-x8.c
+++ b/src/f32-hswish/gen/psimd-x8.c
@@ -19,7 +19,7 @@
     size_t n,
     const float* x,
     float* y,
-    const union xnn_f32_hswish_params params[restrict static 1])
+    const union xnn_f32_hswish_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-hswish/gen/scalar-x1.c b/src/f32-hswish/gen/scalar-x1.c
index c6d80b9..6a15c2a 100644
--- a/src/f32-hswish/gen/scalar-x1.c
+++ b/src/f32-hswish/gen/scalar-x1.c
@@ -18,7 +18,7 @@
     size_t n,
     const float* x,
     float* y,
-    const union xnn_f32_hswish_params params[restrict static 1])
+    const union xnn_f32_hswish_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-hswish/gen/scalar-x2.c b/src/f32-hswish/gen/scalar-x2.c
index 6f8d58e..0076350 100644
--- a/src/f32-hswish/gen/scalar-x2.c
+++ b/src/f32-hswish/gen/scalar-x2.c
@@ -18,7 +18,7 @@
     size_t n,
     const float* x,
     float* y,
-    const union xnn_f32_hswish_params params[restrict static 1])
+    const union xnn_f32_hswish_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-hswish/gen/scalar-x4.c b/src/f32-hswish/gen/scalar-x4.c
index e9fdff0..7d3a292 100644
--- a/src/f32-hswish/gen/scalar-x4.c
+++ b/src/f32-hswish/gen/scalar-x4.c
@@ -18,7 +18,7 @@
     size_t n,
     const float* x,
     float* y,
-    const union xnn_f32_hswish_params params[restrict static 1])
+    const union xnn_f32_hswish_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-hswish/gen/sse-x4.c b/src/f32-hswish/gen/sse-x4.c
index 25d8c27..a09107e 100644
--- a/src/f32-hswish/gen/sse-x4.c
+++ b/src/f32-hswish/gen/sse-x4.c
@@ -19,7 +19,7 @@
     size_t n,
     const float* x,
     float* y,
-    const union xnn_f32_hswish_params params[restrict static 1])
+    const union xnn_f32_hswish_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-hswish/gen/sse-x8.c b/src/f32-hswish/gen/sse-x8.c
index bd0b354..87e2d50 100644
--- a/src/f32-hswish/gen/sse-x8.c
+++ b/src/f32-hswish/gen/sse-x8.c
@@ -19,7 +19,7 @@
     size_t n,
     const float* x,
     float* y,
-    const union xnn_f32_hswish_params params[restrict static 1])
+    const union xnn_f32_hswish_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-hswish/gen/wasm-x1.c b/src/f32-hswish/gen/wasm-x1.c
index 0914018..2eea5df 100644
--- a/src/f32-hswish/gen/wasm-x1.c
+++ b/src/f32-hswish/gen/wasm-x1.c
@@ -18,7 +18,7 @@
     size_t n,
     const float* x,
     float* y,
-    const union xnn_f32_hswish_params params[restrict static 1])
+    const union xnn_f32_hswish_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-hswish/gen/wasm-x2.c b/src/f32-hswish/gen/wasm-x2.c
index bbb188d..f8b63a3 100644
--- a/src/f32-hswish/gen/wasm-x2.c
+++ b/src/f32-hswish/gen/wasm-x2.c
@@ -18,7 +18,7 @@
     size_t n,
     const float* x,
     float* y,
-    const union xnn_f32_hswish_params params[restrict static 1])
+    const union xnn_f32_hswish_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-hswish/gen/wasm-x4.c b/src/f32-hswish/gen/wasm-x4.c
index 483688f..a49d3f3 100644
--- a/src/f32-hswish/gen/wasm-x4.c
+++ b/src/f32-hswish/gen/wasm-x4.c
@@ -18,7 +18,7 @@
     size_t n,
     const float* x,
     float* y,
-    const union xnn_f32_hswish_params params[restrict static 1])
+    const union xnn_f32_hswish_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-hswish/neon.c.in b/src/f32-hswish/neon.c.in
index 0388dbc..1cdcc0a 100644
--- a/src/f32-hswish/neon.c.in
+++ b/src/f32-hswish/neon.c.in
@@ -18,7 +18,7 @@
     size_t n,
     const float* x,
     float* y,
-    const union xnn_f32_hswish_params params[restrict static 1])
+    const union xnn_f32_hswish_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-hswish/psimd.c.in b/src/f32-hswish/psimd.c.in
index c20089b..069306b 100644
--- a/src/f32-hswish/psimd.c.in
+++ b/src/f32-hswish/psimd.c.in
@@ -18,7 +18,7 @@
     size_t n,
     const float* x,
     float* y,
-    const union xnn_f32_hswish_params params[restrict static 1])
+    const union xnn_f32_hswish_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-hswish/scalar.c.in b/src/f32-hswish/scalar.c.in
index d029eba..c707f34 100644
--- a/src/f32-hswish/scalar.c.in
+++ b/src/f32-hswish/scalar.c.in
@@ -18,7 +18,7 @@
     size_t n,
     const float* x,
     float* y,
-    const union xnn_f32_hswish_params params[restrict static 1])
+    const union xnn_f32_hswish_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-hswish/sse.c.in b/src/f32-hswish/sse.c.in
index 35b9701..88c057c 100644
--- a/src/f32-hswish/sse.c.in
+++ b/src/f32-hswish/sse.c.in
@@ -18,7 +18,7 @@
     size_t n,
     const float* x,
     float* y,
-    const union xnn_f32_hswish_params params[restrict static 1])
+    const union xnn_f32_hswish_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-igemm/MRx2-neon-ld64.c.in b/src/f32-igemm/MRx2-neon-ld64.c.in
index 9114ff0..58f132f 100644
--- a/src/f32-igemm/MRx2-neon-ld64.c.in
+++ b/src/f32-igemm/MRx2-neon-ld64.c.in
@@ -24,7 +24,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= ${MR});
diff --git a/src/f32-igemm/MRx2c4-psimd.c.in b/src/f32-igemm/MRx2c4-psimd.c.in
index 0c41570..2c3289e 100644
--- a/src/f32-igemm/MRx2c4-psimd.c.in
+++ b/src/f32-igemm/MRx2c4-psimd.c.in
@@ -24,7 +24,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= ${MR});
diff --git a/src/f32-igemm/MRx2c4-sse.c.in b/src/f32-igemm/MRx2c4-sse.c.in
index 6e5955a..f0f9109 100644
--- a/src/f32-igemm/MRx2c4-sse.c.in
+++ b/src/f32-igemm/MRx2c4-sse.c.in
@@ -24,7 +24,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= ${MR});
diff --git a/src/f32-igemm/avx-broadcast.c.in b/src/f32-igemm/avx-broadcast.c.in
index 965149d..a5f6b80 100644
--- a/src/f32-igemm/avx-broadcast.c.in
+++ b/src/f32-igemm/avx-broadcast.c.in
@@ -25,7 +25,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= ${MR});
diff --git a/src/f32-igemm/avx-shuffle4.c.in b/src/f32-igemm/avx-shuffle4.c.in
index aef4b11..2956404 100644
--- a/src/f32-igemm/avx-shuffle4.c.in
+++ b/src/f32-igemm/avx-shuffle4.c.in
@@ -25,7 +25,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= ${MR});
diff --git a/src/f32-igemm/avx512-broadcast.c.in b/src/f32-igemm/avx512-broadcast.c.in
index fec9190..41b60c5 100644
--- a/src/f32-igemm/avx512-broadcast.c.in
+++ b/src/f32-igemm/avx512-broadcast.c.in
@@ -25,7 +25,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= ${MR});
diff --git a/src/f32-igemm/gen/1x16-minmax-avx-broadcast.c b/src/f32-igemm/gen/1x16-minmax-avx-broadcast.c
index e239483..0adb621 100644
--- a/src/f32-igemm/gen/1x16-minmax-avx-broadcast.c
+++ b/src/f32-igemm/gen/1x16-minmax-avx-broadcast.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/f32-igemm/gen/1x16-minmax-avx512f-broadcast.c b/src/f32-igemm/gen/1x16-minmax-avx512f-broadcast.c
index d6aba8f..5dcbf5a 100644
--- a/src/f32-igemm/gen/1x16-minmax-avx512f-broadcast.c
+++ b/src/f32-igemm/gen/1x16-minmax-avx512f-broadcast.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/f32-igemm/gen/1x16-minmax-fma3-broadcast.c b/src/f32-igemm/gen/1x16-minmax-fma3-broadcast.c
index 9490dda..12f8bdc 100644
--- a/src/f32-igemm/gen/1x16-minmax-fma3-broadcast.c
+++ b/src/f32-igemm/gen/1x16-minmax-fma3-broadcast.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/f32-igemm/gen/1x16s4-minmax-fma3-broadcast.c b/src/f32-igemm/gen/1x16s4-minmax-fma3-broadcast.c
index a8604c7..08d5e8f 100644
--- a/src/f32-igemm/gen/1x16s4-minmax-fma3-broadcast.c
+++ b/src/f32-igemm/gen/1x16s4-minmax-fma3-broadcast.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/f32-igemm/gen/1x4-minmax-scalar.c b/src/f32-igemm/gen/1x4-minmax-scalar.c
index d2c75f4..512cb7c 100644
--- a/src/f32-igemm/gen/1x4-minmax-scalar.c
+++ b/src/f32-igemm/gen/1x4-minmax-scalar.c
@@ -25,7 +25,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/f32-igemm/gen/1x4-minmax-wasm.c b/src/f32-igemm/gen/1x4-minmax-wasm.c
index df451c1..218e7ed 100644
--- a/src/f32-igemm/gen/1x4-minmax-wasm.c
+++ b/src/f32-igemm/gen/1x4-minmax-wasm.c
@@ -25,7 +25,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/f32-igemm/gen/1x4-scalar.c b/src/f32-igemm/gen/1x4-scalar.c
index e39f05e..988e797 100644
--- a/src/f32-igemm/gen/1x4-scalar.c
+++ b/src/f32-igemm/gen/1x4-scalar.c
@@ -25,7 +25,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/f32-igemm/gen/1x4-wasm.c b/src/f32-igemm/gen/1x4-wasm.c
index 2214c4e..b5ad872 100644
--- a/src/f32-igemm/gen/1x4-wasm.c
+++ b/src/f32-igemm/gen/1x4-wasm.c
@@ -25,7 +25,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/f32-igemm/gen/1x8-minmax-avx-broadcast.c b/src/f32-igemm/gen/1x8-minmax-avx-broadcast.c
index 4b61e2e..e1c75e6 100644
--- a/src/f32-igemm/gen/1x8-minmax-avx-broadcast.c
+++ b/src/f32-igemm/gen/1x8-minmax-avx-broadcast.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/f32-igemm/gen/1x8-minmax-fma3-broadcast.c b/src/f32-igemm/gen/1x8-minmax-fma3-broadcast.c
index 6fcf8d3..aa7ea83 100644
--- a/src/f32-igemm/gen/1x8-minmax-fma3-broadcast.c
+++ b/src/f32-igemm/gen/1x8-minmax-fma3-broadcast.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/f32-igemm/gen/1x8-minmax-neon-dup-ld64.c b/src/f32-igemm/gen/1x8-minmax-neon-dup-ld64.c
index cb53e12..0124cad 100644
--- a/src/f32-igemm/gen/1x8-minmax-neon-dup-ld64.c
+++ b/src/f32-igemm/gen/1x8-minmax-neon-dup-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/f32-igemm/gen/1x8-minmax-neon-lane-ld64.c b/src/f32-igemm/gen/1x8-minmax-neon-lane-ld64.c
index a39eb17..18cd82b 100644
--- a/src/f32-igemm/gen/1x8-minmax-neon-lane-ld64.c
+++ b/src/f32-igemm/gen/1x8-minmax-neon-lane-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/f32-igemm/gen/1x8-minmax-neonfma-dup-ld64.c b/src/f32-igemm/gen/1x8-minmax-neonfma-dup-ld64.c
index 0edbba5..45554a3 100644
--- a/src/f32-igemm/gen/1x8-minmax-neonfma-dup-ld64.c
+++ b/src/f32-igemm/gen/1x8-minmax-neonfma-dup-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/f32-igemm/gen/1x8-minmax-neonfma-lane-ld64.c b/src/f32-igemm/gen/1x8-minmax-neonfma-lane-ld64.c
index 899dd51..0bbde15 100644
--- a/src/f32-igemm/gen/1x8-minmax-neonfma-lane-ld64.c
+++ b/src/f32-igemm/gen/1x8-minmax-neonfma-lane-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/f32-igemm/gen/1x8-minmax-psimd-loadsplat.c b/src/f32-igemm/gen/1x8-minmax-psimd-loadsplat.c
index 9ee2187..40266a7 100644
--- a/src/f32-igemm/gen/1x8-minmax-psimd-loadsplat.c
+++ b/src/f32-igemm/gen/1x8-minmax-psimd-loadsplat.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/f32-igemm/gen/1x8-minmax-psimd-splat.c b/src/f32-igemm/gen/1x8-minmax-psimd-splat.c
index e96d568..57cf65b 100644
--- a/src/f32-igemm/gen/1x8-minmax-psimd-splat.c
+++ b/src/f32-igemm/gen/1x8-minmax-psimd-splat.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/f32-igemm/gen/1x8-minmax-sse-dup.c b/src/f32-igemm/gen/1x8-minmax-sse-dup.c
index 518d5dd..5854eae 100644
--- a/src/f32-igemm/gen/1x8-minmax-sse-dup.c
+++ b/src/f32-igemm/gen/1x8-minmax-sse-dup.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/f32-igemm/gen/1x8-minmax-sse-load1.c b/src/f32-igemm/gen/1x8-minmax-sse-load1.c
index 2620649..2b80a48 100644
--- a/src/f32-igemm/gen/1x8-minmax-sse-load1.c
+++ b/src/f32-igemm/gen/1x8-minmax-sse-load1.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/f32-igemm/gen/1x8s4-minmax-neon.c b/src/f32-igemm/gen/1x8s4-minmax-neon.c
index 9a27efd..87d8f79 100644
--- a/src/f32-igemm/gen/1x8s4-minmax-neon.c
+++ b/src/f32-igemm/gen/1x8s4-minmax-neon.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/f32-igemm/gen/1x8s4-minmax-neonfma.c b/src/f32-igemm/gen/1x8s4-minmax-neonfma.c
index 64be6b9..540e3f4 100644
--- a/src/f32-igemm/gen/1x8s4-minmax-neonfma.c
+++ b/src/f32-igemm/gen/1x8s4-minmax-neonfma.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/f32-igemm/gen/1x8s4-minmax-psimd.c b/src/f32-igemm/gen/1x8s4-minmax-psimd.c
index 4e3635d..9574e56 100644
--- a/src/f32-igemm/gen/1x8s4-minmax-psimd.c
+++ b/src/f32-igemm/gen/1x8s4-minmax-psimd.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/f32-igemm/gen/1x8s4-minmax-sse.c b/src/f32-igemm/gen/1x8s4-minmax-sse.c
index de836d9..7a48d91 100644
--- a/src/f32-igemm/gen/1x8s4-minmax-sse.c
+++ b/src/f32-igemm/gen/1x8s4-minmax-sse.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/f32-igemm/gen/2x4-minmax-scalar.c b/src/f32-igemm/gen/2x4-minmax-scalar.c
index 9ce4c32..8d1cdc5 100644
--- a/src/f32-igemm/gen/2x4-minmax-scalar.c
+++ b/src/f32-igemm/gen/2x4-minmax-scalar.c
@@ -25,7 +25,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/f32-igemm/gen/2x4-minmax-wasm.c b/src/f32-igemm/gen/2x4-minmax-wasm.c
index e25b0d1..dfb11e3 100644
--- a/src/f32-igemm/gen/2x4-minmax-wasm.c
+++ b/src/f32-igemm/gen/2x4-minmax-wasm.c
@@ -25,7 +25,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/f32-igemm/gen/2x4-scalar.c b/src/f32-igemm/gen/2x4-scalar.c
index 486c3ee..64ae127 100644
--- a/src/f32-igemm/gen/2x4-scalar.c
+++ b/src/f32-igemm/gen/2x4-scalar.c
@@ -25,7 +25,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/f32-igemm/gen/2x4-wasm.c b/src/f32-igemm/gen/2x4-wasm.c
index 1747268..04b5b5e 100644
--- a/src/f32-igemm/gen/2x4-wasm.c
+++ b/src/f32-igemm/gen/2x4-wasm.c
@@ -25,7 +25,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/f32-igemm/gen/3x16-minmax-avx-broadcast.c b/src/f32-igemm/gen/3x16-minmax-avx-broadcast.c
index 33f9a33..e4b134c 100644
--- a/src/f32-igemm/gen/3x16-minmax-avx-broadcast.c
+++ b/src/f32-igemm/gen/3x16-minmax-avx-broadcast.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/f32-igemm/gen/3x16-minmax-fma3-broadcast.c b/src/f32-igemm/gen/3x16-minmax-fma3-broadcast.c
index 1979fff..e7ce427 100644
--- a/src/f32-igemm/gen/3x16-minmax-fma3-broadcast.c
+++ b/src/f32-igemm/gen/3x16-minmax-fma3-broadcast.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/f32-igemm/gen/3x16s4-minmax-fma3-broadcast.c b/src/f32-igemm/gen/3x16s4-minmax-fma3-broadcast.c
index 656e18c..ea3cacc 100644
--- a/src/f32-igemm/gen/3x16s4-minmax-fma3-broadcast.c
+++ b/src/f32-igemm/gen/3x16s4-minmax-fma3-broadcast.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/f32-igemm/gen/4x16-minmax-avx-broadcast.c b/src/f32-igemm/gen/4x16-minmax-avx-broadcast.c
index b403f16..84501f3 100644
--- a/src/f32-igemm/gen/4x16-minmax-avx-broadcast.c
+++ b/src/f32-igemm/gen/4x16-minmax-avx-broadcast.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/f32-igemm/gen/4x16-minmax-avx512f-broadcast.c b/src/f32-igemm/gen/4x16-minmax-avx512f-broadcast.c
index ed41120..4f5467c 100644
--- a/src/f32-igemm/gen/4x16-minmax-avx512f-broadcast.c
+++ b/src/f32-igemm/gen/4x16-minmax-avx512f-broadcast.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/f32-igemm/gen/4x16-minmax-fma3-broadcast.c b/src/f32-igemm/gen/4x16-minmax-fma3-broadcast.c
index 45dcd2a..fdde56b 100644
--- a/src/f32-igemm/gen/4x16-minmax-fma3-broadcast.c
+++ b/src/f32-igemm/gen/4x16-minmax-fma3-broadcast.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/f32-igemm/gen/4x16s4-minmax-fma3-broadcast.c b/src/f32-igemm/gen/4x16s4-minmax-fma3-broadcast.c
index b13b16a..f42a3e8 100644
--- a/src/f32-igemm/gen/4x16s4-minmax-fma3-broadcast.c
+++ b/src/f32-igemm/gen/4x16s4-minmax-fma3-broadcast.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/f32-igemm/gen/4x2-minmax-neon-lane-ld64.c b/src/f32-igemm/gen/4x2-minmax-neon-lane-ld64.c
index c2dbe57..c283642 100644
--- a/src/f32-igemm/gen/4x2-minmax-neon-lane-ld64.c
+++ b/src/f32-igemm/gen/4x2-minmax-neon-lane-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/f32-igemm/gen/4x2-minmax-neonfma-lane-ld64.c b/src/f32-igemm/gen/4x2-minmax-neonfma-lane-ld64.c
index 00898c2..4af58c8 100644
--- a/src/f32-igemm/gen/4x2-minmax-neonfma-lane-ld64.c
+++ b/src/f32-igemm/gen/4x2-minmax-neonfma-lane-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/f32-igemm/gen/4x2-minmax-scalar.c b/src/f32-igemm/gen/4x2-minmax-scalar.c
index b8bac08..70653cc 100644
--- a/src/f32-igemm/gen/4x2-minmax-scalar.c
+++ b/src/f32-igemm/gen/4x2-minmax-scalar.c
@@ -25,7 +25,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/f32-igemm/gen/4x2-minmax-wasm.c b/src/f32-igemm/gen/4x2-minmax-wasm.c
index 7528680..14ea076 100644
--- a/src/f32-igemm/gen/4x2-minmax-wasm.c
+++ b/src/f32-igemm/gen/4x2-minmax-wasm.c
@@ -25,7 +25,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/f32-igemm/gen/4x2-scalar.c b/src/f32-igemm/gen/4x2-scalar.c
index 456f0e5..428674d 100644
--- a/src/f32-igemm/gen/4x2-scalar.c
+++ b/src/f32-igemm/gen/4x2-scalar.c
@@ -25,7 +25,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/f32-igemm/gen/4x2-wasm.c b/src/f32-igemm/gen/4x2-wasm.c
index 4868d88..3e60720 100644
--- a/src/f32-igemm/gen/4x2-wasm.c
+++ b/src/f32-igemm/gen/4x2-wasm.c
@@ -25,7 +25,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/f32-igemm/gen/4x2c4-minmax-psimd.c b/src/f32-igemm/gen/4x2c4-minmax-psimd.c
index d9bcd63..77ce0cd 100644
--- a/src/f32-igemm/gen/4x2c4-minmax-psimd.c
+++ b/src/f32-igemm/gen/4x2c4-minmax-psimd.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/f32-igemm/gen/4x2c4-minmax-sse.c b/src/f32-igemm/gen/4x2c4-minmax-sse.c
index 7310fe2..f72f436 100644
--- a/src/f32-igemm/gen/4x2c4-minmax-sse.c
+++ b/src/f32-igemm/gen/4x2c4-minmax-sse.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/f32-igemm/gen/4x4-minmax-neon-lane-ld64.c b/src/f32-igemm/gen/4x4-minmax-neon-lane-ld64.c
index 5998bc9..b32206f 100644
--- a/src/f32-igemm/gen/4x4-minmax-neon-lane-ld64.c
+++ b/src/f32-igemm/gen/4x4-minmax-neon-lane-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/f32-igemm/gen/4x4-minmax-neonfma-lane-ld64.c b/src/f32-igemm/gen/4x4-minmax-neonfma-lane-ld64.c
index 35ce46c..0a73d51 100644
--- a/src/f32-igemm/gen/4x4-minmax-neonfma-lane-ld64.c
+++ b/src/f32-igemm/gen/4x4-minmax-neonfma-lane-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/f32-igemm/gen/4x4-minmax-scalar.c b/src/f32-igemm/gen/4x4-minmax-scalar.c
index 5c44c63..8a25ba2 100644
--- a/src/f32-igemm/gen/4x4-minmax-scalar.c
+++ b/src/f32-igemm/gen/4x4-minmax-scalar.c
@@ -25,7 +25,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/f32-igemm/gen/4x4-minmax-wasm.c b/src/f32-igemm/gen/4x4-minmax-wasm.c
index 1d9e964..47596bb 100644
--- a/src/f32-igemm/gen/4x4-minmax-wasm.c
+++ b/src/f32-igemm/gen/4x4-minmax-wasm.c
@@ -25,7 +25,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/f32-igemm/gen/4x4-scalar.c b/src/f32-igemm/gen/4x4-scalar.c
index db62edc..983c9f3 100644
--- a/src/f32-igemm/gen/4x4-scalar.c
+++ b/src/f32-igemm/gen/4x4-scalar.c
@@ -25,7 +25,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/f32-igemm/gen/4x4-wasm.c b/src/f32-igemm/gen/4x4-wasm.c
index 0db4d69..1aa07b4 100644
--- a/src/f32-igemm/gen/4x4-wasm.c
+++ b/src/f32-igemm/gen/4x4-wasm.c
@@ -25,7 +25,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/f32-igemm/gen/4x8-minmax-avx-broadcast.c b/src/f32-igemm/gen/4x8-minmax-avx-broadcast.c
index c142d4a..2c14375 100644
--- a/src/f32-igemm/gen/4x8-minmax-avx-broadcast.c
+++ b/src/f32-igemm/gen/4x8-minmax-avx-broadcast.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/f32-igemm/gen/4x8-minmax-fma3-broadcast.c b/src/f32-igemm/gen/4x8-minmax-fma3-broadcast.c
index 372c2b7..ae84a32 100644
--- a/src/f32-igemm/gen/4x8-minmax-fma3-broadcast.c
+++ b/src/f32-igemm/gen/4x8-minmax-fma3-broadcast.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/f32-igemm/gen/4x8-minmax-neon-dup-ld128.c b/src/f32-igemm/gen/4x8-minmax-neon-dup-ld128.c
index 2e8d506..4a3b333 100644
--- a/src/f32-igemm/gen/4x8-minmax-neon-dup-ld128.c
+++ b/src/f32-igemm/gen/4x8-minmax-neon-dup-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/f32-igemm/gen/4x8-minmax-neon-dup-ld64.c b/src/f32-igemm/gen/4x8-minmax-neon-dup-ld64.c
index d8e9d96..d56a7e6 100644
--- a/src/f32-igemm/gen/4x8-minmax-neon-dup-ld64.c
+++ b/src/f32-igemm/gen/4x8-minmax-neon-dup-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/f32-igemm/gen/4x8-minmax-neon-lane-ld128.c b/src/f32-igemm/gen/4x8-minmax-neon-lane-ld128.c
index cbfbfee..3dbdd19 100644
--- a/src/f32-igemm/gen/4x8-minmax-neon-lane-ld128.c
+++ b/src/f32-igemm/gen/4x8-minmax-neon-lane-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/f32-igemm/gen/4x8-minmax-neon-lane-ld64.c b/src/f32-igemm/gen/4x8-minmax-neon-lane-ld64.c
index 9ba8529..c8653c0 100644
--- a/src/f32-igemm/gen/4x8-minmax-neon-lane-ld64.c
+++ b/src/f32-igemm/gen/4x8-minmax-neon-lane-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/f32-igemm/gen/4x8-minmax-neonfma-dup-ld128.c b/src/f32-igemm/gen/4x8-minmax-neonfma-dup-ld128.c
index 40a60ea..17448c6 100644
--- a/src/f32-igemm/gen/4x8-minmax-neonfma-dup-ld128.c
+++ b/src/f32-igemm/gen/4x8-minmax-neonfma-dup-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/f32-igemm/gen/4x8-minmax-neonfma-dup-ld64.c b/src/f32-igemm/gen/4x8-minmax-neonfma-dup-ld64.c
index cb1f7da..389f798 100644
--- a/src/f32-igemm/gen/4x8-minmax-neonfma-dup-ld64.c
+++ b/src/f32-igemm/gen/4x8-minmax-neonfma-dup-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/f32-igemm/gen/4x8-minmax-neonfma-lane-ld128.c b/src/f32-igemm/gen/4x8-minmax-neonfma-lane-ld128.c
index c19ab05..daa8802 100644
--- a/src/f32-igemm/gen/4x8-minmax-neonfma-lane-ld128.c
+++ b/src/f32-igemm/gen/4x8-minmax-neonfma-lane-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/f32-igemm/gen/4x8-minmax-neonfma-lane-ld64.c b/src/f32-igemm/gen/4x8-minmax-neonfma-lane-ld64.c
index b179a34..ab9b176 100644
--- a/src/f32-igemm/gen/4x8-minmax-neonfma-lane-ld64.c
+++ b/src/f32-igemm/gen/4x8-minmax-neonfma-lane-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/f32-igemm/gen/4x8-minmax-psimd-loadsplat.c b/src/f32-igemm/gen/4x8-minmax-psimd-loadsplat.c
index 5225f58..9d24e3f 100644
--- a/src/f32-igemm/gen/4x8-minmax-psimd-loadsplat.c
+++ b/src/f32-igemm/gen/4x8-minmax-psimd-loadsplat.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/f32-igemm/gen/4x8-minmax-psimd-splat.c b/src/f32-igemm/gen/4x8-minmax-psimd-splat.c
index ba70f83..cb119a3 100644
--- a/src/f32-igemm/gen/4x8-minmax-psimd-splat.c
+++ b/src/f32-igemm/gen/4x8-minmax-psimd-splat.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/f32-igemm/gen/4x8-minmax-sse-dup.c b/src/f32-igemm/gen/4x8-minmax-sse-dup.c
index 895e7a5..3a84f6c 100644
--- a/src/f32-igemm/gen/4x8-minmax-sse-dup.c
+++ b/src/f32-igemm/gen/4x8-minmax-sse-dup.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/f32-igemm/gen/4x8-minmax-sse-load1.c b/src/f32-igemm/gen/4x8-minmax-sse-load1.c
index db30627..faaec49 100644
--- a/src/f32-igemm/gen/4x8-minmax-sse-load1.c
+++ b/src/f32-igemm/gen/4x8-minmax-sse-load1.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/f32-igemm/gen/4x8s4-minmax-neon.c b/src/f32-igemm/gen/4x8s4-minmax-neon.c
index a2ddf64..af6c1d4 100644
--- a/src/f32-igemm/gen/4x8s4-minmax-neon.c
+++ b/src/f32-igemm/gen/4x8s4-minmax-neon.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/f32-igemm/gen/4x8s4-minmax-neonfma.c b/src/f32-igemm/gen/4x8s4-minmax-neonfma.c
index ae311e7..2957858 100644
--- a/src/f32-igemm/gen/4x8s4-minmax-neonfma.c
+++ b/src/f32-igemm/gen/4x8s4-minmax-neonfma.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/f32-igemm/gen/4x8s4-minmax-psimd.c b/src/f32-igemm/gen/4x8s4-minmax-psimd.c
index f16a2d2..fe5ad13 100644
--- a/src/f32-igemm/gen/4x8s4-minmax-psimd.c
+++ b/src/f32-igemm/gen/4x8s4-minmax-psimd.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/f32-igemm/gen/4x8s4-minmax-sse.c b/src/f32-igemm/gen/4x8s4-minmax-sse.c
index 3f7c31c..bc092bc 100644
--- a/src/f32-igemm/gen/4x8s4-minmax-sse.c
+++ b/src/f32-igemm/gen/4x8s4-minmax-sse.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/f32-igemm/gen/5x16-minmax-avx-broadcast.c b/src/f32-igemm/gen/5x16-minmax-avx-broadcast.c
index 0ae93b1..ef6288c 100644
--- a/src/f32-igemm/gen/5x16-minmax-avx-broadcast.c
+++ b/src/f32-igemm/gen/5x16-minmax-avx-broadcast.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 5);
diff --git a/src/f32-igemm/gen/5x16-minmax-avx512f-broadcast.c b/src/f32-igemm/gen/5x16-minmax-avx512f-broadcast.c
index 35477c1..72ee677 100644
--- a/src/f32-igemm/gen/5x16-minmax-avx512f-broadcast.c
+++ b/src/f32-igemm/gen/5x16-minmax-avx512f-broadcast.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 5);
diff --git a/src/f32-igemm/gen/5x16-minmax-fma3-broadcast.c b/src/f32-igemm/gen/5x16-minmax-fma3-broadcast.c
index fc260de..cb26be7 100644
--- a/src/f32-igemm/gen/5x16-minmax-fma3-broadcast.c
+++ b/src/f32-igemm/gen/5x16-minmax-fma3-broadcast.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 5);
diff --git a/src/f32-igemm/gen/5x16s4-minmax-fma3-broadcast.c b/src/f32-igemm/gen/5x16s4-minmax-fma3-broadcast.c
index 1e2c88b..116c74e 100644
--- a/src/f32-igemm/gen/5x16s4-minmax-fma3-broadcast.c
+++ b/src/f32-igemm/gen/5x16s4-minmax-fma3-broadcast.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 5);
diff --git a/src/f32-igemm/gen/5x8-minmax-avx-broadcast.c b/src/f32-igemm/gen/5x8-minmax-avx-broadcast.c
index 0c9ed59..1895bb9 100644
--- a/src/f32-igemm/gen/5x8-minmax-avx-broadcast.c
+++ b/src/f32-igemm/gen/5x8-minmax-avx-broadcast.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 5);
diff --git a/src/f32-igemm/gen/5x8-minmax-fma3-broadcast.c b/src/f32-igemm/gen/5x8-minmax-fma3-broadcast.c
index 226b078..4ac10fe 100644
--- a/src/f32-igemm/gen/5x8-minmax-fma3-broadcast.c
+++ b/src/f32-igemm/gen/5x8-minmax-fma3-broadcast.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 5);
diff --git a/src/f32-igemm/gen/6x16-minmax-avx512f-broadcast.c b/src/f32-igemm/gen/6x16-minmax-avx512f-broadcast.c
index 83a910f..d688433 100644
--- a/src/f32-igemm/gen/6x16-minmax-avx512f-broadcast.c
+++ b/src/f32-igemm/gen/6x16-minmax-avx512f-broadcast.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 6);
diff --git a/src/f32-igemm/gen/6x8-minmax-avx-broadcast.c b/src/f32-igemm/gen/6x8-minmax-avx-broadcast.c
index 75fd449..3cd78dd 100644
--- a/src/f32-igemm/gen/6x8-minmax-avx-broadcast.c
+++ b/src/f32-igemm/gen/6x8-minmax-avx-broadcast.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 6);
diff --git a/src/f32-igemm/gen/6x8-minmax-fma3-broadcast.c b/src/f32-igemm/gen/6x8-minmax-fma3-broadcast.c
index fd4362f..15a8650 100644
--- a/src/f32-igemm/gen/6x8-minmax-fma3-broadcast.c
+++ b/src/f32-igemm/gen/6x8-minmax-fma3-broadcast.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 6);
diff --git a/src/f32-igemm/gen/6x8-minmax-neon-dup-ld128.c b/src/f32-igemm/gen/6x8-minmax-neon-dup-ld128.c
index f7dfbb8..be373d7 100644
--- a/src/f32-igemm/gen/6x8-minmax-neon-dup-ld128.c
+++ b/src/f32-igemm/gen/6x8-minmax-neon-dup-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 6);
diff --git a/src/f32-igemm/gen/6x8-minmax-neon-dup-ld64.c b/src/f32-igemm/gen/6x8-minmax-neon-dup-ld64.c
index 4f1d664..7997ca2 100644
--- a/src/f32-igemm/gen/6x8-minmax-neon-dup-ld64.c
+++ b/src/f32-igemm/gen/6x8-minmax-neon-dup-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 6);
diff --git a/src/f32-igemm/gen/6x8-minmax-neon-lane-ld128.c b/src/f32-igemm/gen/6x8-minmax-neon-lane-ld128.c
index eef11f6..2623273 100644
--- a/src/f32-igemm/gen/6x8-minmax-neon-lane-ld128.c
+++ b/src/f32-igemm/gen/6x8-minmax-neon-lane-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 6);
diff --git a/src/f32-igemm/gen/6x8-minmax-neon-lane-ld64.c b/src/f32-igemm/gen/6x8-minmax-neon-lane-ld64.c
index 3fb5638..60ae3a0 100644
--- a/src/f32-igemm/gen/6x8-minmax-neon-lane-ld64.c
+++ b/src/f32-igemm/gen/6x8-minmax-neon-lane-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 6);
diff --git a/src/f32-igemm/gen/6x8-minmax-neonfma-dup-ld128.c b/src/f32-igemm/gen/6x8-minmax-neonfma-dup-ld128.c
index 7af7764..feef84d 100644
--- a/src/f32-igemm/gen/6x8-minmax-neonfma-dup-ld128.c
+++ b/src/f32-igemm/gen/6x8-minmax-neonfma-dup-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 6);
diff --git a/src/f32-igemm/gen/6x8-minmax-neonfma-dup-ld64.c b/src/f32-igemm/gen/6x8-minmax-neonfma-dup-ld64.c
index 17e9c0d..f59ee6c 100644
--- a/src/f32-igemm/gen/6x8-minmax-neonfma-dup-ld64.c
+++ b/src/f32-igemm/gen/6x8-minmax-neonfma-dup-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 6);
diff --git a/src/f32-igemm/gen/6x8-minmax-neonfma-lane-ld128.c b/src/f32-igemm/gen/6x8-minmax-neonfma-lane-ld128.c
index 4c08571..283fc6e 100644
--- a/src/f32-igemm/gen/6x8-minmax-neonfma-lane-ld128.c
+++ b/src/f32-igemm/gen/6x8-minmax-neonfma-lane-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 6);
diff --git a/src/f32-igemm/gen/6x8-minmax-neonfma-lane-ld64.c b/src/f32-igemm/gen/6x8-minmax-neonfma-lane-ld64.c
index c2a8ae3..c9bd0c0 100644
--- a/src/f32-igemm/gen/6x8-minmax-neonfma-lane-ld64.c
+++ b/src/f32-igemm/gen/6x8-minmax-neonfma-lane-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 6);
diff --git a/src/f32-igemm/gen/6x8-minmax-psimd-loadsplat.c b/src/f32-igemm/gen/6x8-minmax-psimd-loadsplat.c
index b2d4447..03a02b3 100644
--- a/src/f32-igemm/gen/6x8-minmax-psimd-loadsplat.c
+++ b/src/f32-igemm/gen/6x8-minmax-psimd-loadsplat.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 6);
diff --git a/src/f32-igemm/gen/6x8-minmax-psimd-splat.c b/src/f32-igemm/gen/6x8-minmax-psimd-splat.c
index 3d6cbc1..116d510 100644
--- a/src/f32-igemm/gen/6x8-minmax-psimd-splat.c
+++ b/src/f32-igemm/gen/6x8-minmax-psimd-splat.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 6);
diff --git a/src/f32-igemm/gen/6x8s4-minmax-neon.c b/src/f32-igemm/gen/6x8s4-minmax-neon.c
index 847346e..0d87517 100644
--- a/src/f32-igemm/gen/6x8s4-minmax-neon.c
+++ b/src/f32-igemm/gen/6x8s4-minmax-neon.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 6);
diff --git a/src/f32-igemm/gen/6x8s4-minmax-neonfma.c b/src/f32-igemm/gen/6x8s4-minmax-neonfma.c
index 3e0d165..3e44e11 100644
--- a/src/f32-igemm/gen/6x8s4-minmax-neonfma.c
+++ b/src/f32-igemm/gen/6x8s4-minmax-neonfma.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 6);
diff --git a/src/f32-igemm/gen/6x8s4-minmax-psimd.c b/src/f32-igemm/gen/6x8s4-minmax-psimd.c
index 430f770..b4bf1cf 100644
--- a/src/f32-igemm/gen/6x8s4-minmax-psimd.c
+++ b/src/f32-igemm/gen/6x8s4-minmax-psimd.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 6);
diff --git a/src/f32-igemm/gen/7x16-minmax-avx512f-broadcast.c b/src/f32-igemm/gen/7x16-minmax-avx512f-broadcast.c
index a6e340d..e5bae25 100644
--- a/src/f32-igemm/gen/7x16-minmax-avx512f-broadcast.c
+++ b/src/f32-igemm/gen/7x16-minmax-avx512f-broadcast.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 7);
diff --git a/src/f32-igemm/gen/7x8-minmax-avx-broadcast.c b/src/f32-igemm/gen/7x8-minmax-avx-broadcast.c
index 66153a5..0e92052 100644
--- a/src/f32-igemm/gen/7x8-minmax-avx-broadcast.c
+++ b/src/f32-igemm/gen/7x8-minmax-avx-broadcast.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 7);
diff --git a/src/f32-igemm/gen/7x8-minmax-fma3-broadcast.c b/src/f32-igemm/gen/7x8-minmax-fma3-broadcast.c
index 5fe7b6a..4979126 100644
--- a/src/f32-igemm/gen/7x8-minmax-fma3-broadcast.c
+++ b/src/f32-igemm/gen/7x8-minmax-fma3-broadcast.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 7);
diff --git a/src/f32-igemm/gen/8x16-minmax-avx512f-broadcast.c b/src/f32-igemm/gen/8x16-minmax-avx512f-broadcast.c
index 922585b..df4a69e 100644
--- a/src/f32-igemm/gen/8x16-minmax-avx512f-broadcast.c
+++ b/src/f32-igemm/gen/8x16-minmax-avx512f-broadcast.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 8);
diff --git a/src/f32-igemm/gen/8x8-minmax-fma3-broadcast.c b/src/f32-igemm/gen/8x8-minmax-fma3-broadcast.c
index cdd4dd8..f7a6525 100644
--- a/src/f32-igemm/gen/8x8-minmax-fma3-broadcast.c
+++ b/src/f32-igemm/gen/8x8-minmax-fma3-broadcast.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 8);
diff --git a/src/f32-igemm/gen/8x8s4-minmax-neon.c b/src/f32-igemm/gen/8x8s4-minmax-neon.c
index b85ef0e..407f457 100644
--- a/src/f32-igemm/gen/8x8s4-minmax-neon.c
+++ b/src/f32-igemm/gen/8x8s4-minmax-neon.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 8);
diff --git a/src/f32-igemm/gen/8x8s4-minmax-neonfma.c b/src/f32-igemm/gen/8x8s4-minmax-neonfma.c
index 1a4d935..b4e6d1d 100644
--- a/src/f32-igemm/gen/8x8s4-minmax-neonfma.c
+++ b/src/f32-igemm/gen/8x8s4-minmax-neonfma.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 8);
diff --git a/src/f32-igemm/neon-ld128.c.in b/src/f32-igemm/neon-ld128.c.in
index a1f7b19..15e4419 100644
--- a/src/f32-igemm/neon-ld128.c.in
+++ b/src/f32-igemm/neon-ld128.c.in
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= ${MR});
diff --git a/src/f32-igemm/neon-ld64.c.in b/src/f32-igemm/neon-ld64.c.in
index 782bee3..8aa3985 100644
--- a/src/f32-igemm/neon-ld64.c.in
+++ b/src/f32-igemm/neon-ld64.c.in
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= ${MR});
diff --git a/src/f32-igemm/neon-shuffle.c.in b/src/f32-igemm/neon-shuffle.c.in
index 7dff7e7..0faafa7 100644
--- a/src/f32-igemm/neon-shuffle.c.in
+++ b/src/f32-igemm/neon-shuffle.c.in
@@ -25,7 +25,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= ${MR});
diff --git a/src/f32-igemm/psimd-loadsplat.c.in b/src/f32-igemm/psimd-loadsplat.c.in
index 0547e39..1dbd6a9 100644
--- a/src/f32-igemm/psimd-loadsplat.c.in
+++ b/src/f32-igemm/psimd-loadsplat.c.in
@@ -24,7 +24,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= ${MR});
diff --git a/src/f32-igemm/psimd-s4.c.in b/src/f32-igemm/psimd-s4.c.in
index 808a3f3..6609dc7 100644
--- a/src/f32-igemm/psimd-s4.c.in
+++ b/src/f32-igemm/psimd-s4.c.in
@@ -24,7 +24,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= ${MR});
diff --git a/src/f32-igemm/psimd-splat.c.in b/src/f32-igemm/psimd-splat.c.in
index 80df0f6..f7e23a3 100644
--- a/src/f32-igemm/psimd-splat.c.in
+++ b/src/f32-igemm/psimd-splat.c.in
@@ -24,7 +24,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= ${MR});
diff --git a/src/f32-igemm/scalar.c.in b/src/f32-igemm/scalar.c.in
index 9d0f884..a17fa71 100644
--- a/src/f32-igemm/scalar.c.in
+++ b/src/f32-igemm/scalar.c.in
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union ${PARAMS} params[restrict static 1])
+    const union ${PARAMS} params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= ${MR});
diff --git a/src/f32-igemm/sse-dup.c.in b/src/f32-igemm/sse-dup.c.in
index c3d14d2..8a0b296 100644
--- a/src/f32-igemm/sse-dup.c.in
+++ b/src/f32-igemm/sse-dup.c.in
@@ -24,7 +24,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= ${MR});
diff --git a/src/f32-igemm/sse-load1.c.in b/src/f32-igemm/sse-load1.c.in
index 862ffd5..4416d45 100644
--- a/src/f32-igemm/sse-load1.c.in
+++ b/src/f32-igemm/sse-load1.c.in
@@ -24,7 +24,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= ${MR});
diff --git a/src/f32-igemm/sse-shuffle.c.in b/src/f32-igemm/sse-shuffle.c.in
index d176d1d..febb9bf 100644
--- a/src/f32-igemm/sse-shuffle.c.in
+++ b/src/f32-igemm/sse-shuffle.c.in
@@ -24,7 +24,7 @@
     size_t cn_stride,
     size_t a_offset,
     const float* zero,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= ${MR});
diff --git a/src/f32-maxpool/9p8x-minmax-neon-c4.c b/src/f32-maxpool/9p8x-minmax-neon-c4.c
index 5512b22..b4e1c1d 100644
--- a/src/f32-maxpool/9p8x-minmax-neon-c4.c
+++ b/src/f32-maxpool/9p8x-minmax-neon-c4.c
@@ -19,7 +19,7 @@
     float* output,
     size_t input_increment,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(output_pixels != 0);
   assert(kernel_elements != 0);
diff --git a/src/f32-maxpool/9p8x-minmax-psimd-c4.c b/src/f32-maxpool/9p8x-minmax-psimd-c4.c
index ce6e323..8422eac 100644
--- a/src/f32-maxpool/9p8x-minmax-psimd-c4.c
+++ b/src/f32-maxpool/9p8x-minmax-psimd-c4.c
@@ -19,7 +19,7 @@
     float* output,
     size_t input_increment,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(output_pixels != 0);
   assert(kernel_elements != 0);
diff --git a/src/f32-maxpool/9p8x-minmax-scalar-c1.c b/src/f32-maxpool/9p8x-minmax-scalar-c1.c
index 20c3f4c..af3ed31 100644
--- a/src/f32-maxpool/9p8x-minmax-scalar-c1.c
+++ b/src/f32-maxpool/9p8x-minmax-scalar-c1.c
@@ -18,7 +18,7 @@
     float* output,
     size_t input_increment,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(output_pixels != 0);
   assert(kernel_elements != 0);
diff --git a/src/f32-maxpool/9p8x-minmax-sse-c4.c b/src/f32-maxpool/9p8x-minmax-sse-c4.c
index caaac79..3606b76 100644
--- a/src/f32-maxpool/9p8x-minmax-sse-c4.c
+++ b/src/f32-maxpool/9p8x-minmax-sse-c4.c
@@ -19,7 +19,7 @@
     float* output,
     size_t input_increment,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(output_pixels != 0);
   assert(kernel_elements != 0);
diff --git a/src/f32-maxpool/9p8x-minmax-wasm-c1.c b/src/f32-maxpool/9p8x-minmax-wasm-c1.c
index 8edde92..77f2b18 100644
--- a/src/f32-maxpool/9p8x-minmax-wasm-c1.c
+++ b/src/f32-maxpool/9p8x-minmax-wasm-c1.c
@@ -18,7 +18,7 @@
     float* output,
     size_t input_increment,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(output_pixels != 0);
   assert(kernel_elements != 0);
diff --git a/src/f32-pavgpool/9p8x-minmax-neon-c4.c b/src/f32-pavgpool/9p8x-minmax-neon-c4.c
index e05853f..f987ecb 100644
--- a/src/f32-pavgpool/9p8x-minmax-neon-c4.c
+++ b/src/f32-pavgpool/9p8x-minmax-neon-c4.c
@@ -22,7 +22,7 @@
     float* output,
     size_t input_increment,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(output_pixels != 0);
   assert(kernel_elements > 9);
diff --git a/src/f32-pavgpool/9p8x-minmax-psimd-c4.c b/src/f32-pavgpool/9p8x-minmax-psimd-c4.c
index dd3c49e..e65cedf 100644
--- a/src/f32-pavgpool/9p8x-minmax-psimd-c4.c
+++ b/src/f32-pavgpool/9p8x-minmax-psimd-c4.c
@@ -22,7 +22,7 @@
     float* output,
     size_t input_increment,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(output_pixels != 0);
   assert(kernel_elements > 9);
diff --git a/src/f32-pavgpool/9p8x-minmax-scalar-c1.c b/src/f32-pavgpool/9p8x-minmax-scalar-c1.c
index 2b6dbb9..88476c3 100644
--- a/src/f32-pavgpool/9p8x-minmax-scalar-c1.c
+++ b/src/f32-pavgpool/9p8x-minmax-scalar-c1.c
@@ -21,7 +21,7 @@
     float* output,
     size_t input_increment,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(output_pixels != 0);
   assert(kernel_elements > 9);
diff --git a/src/f32-pavgpool/9p8x-minmax-sse-c4.c b/src/f32-pavgpool/9p8x-minmax-sse-c4.c
index 9a62fdd..b612d28 100644
--- a/src/f32-pavgpool/9p8x-minmax-sse-c4.c
+++ b/src/f32-pavgpool/9p8x-minmax-sse-c4.c
@@ -22,7 +22,7 @@
     float* output,
     size_t input_increment,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(output_pixels != 0);
   assert(kernel_elements > 9);
diff --git a/src/f32-pavgpool/9p8x-minmax-wasm-c1.c b/src/f32-pavgpool/9p8x-minmax-wasm-c1.c
index c090032..db1009f 100644
--- a/src/f32-pavgpool/9p8x-minmax-wasm-c1.c
+++ b/src/f32-pavgpool/9p8x-minmax-wasm-c1.c
@@ -21,7 +21,7 @@
     float* output,
     size_t input_increment,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(output_pixels != 0);
   assert(kernel_elements > 9);
diff --git a/src/f32-pavgpool/9x-minmax-neon-c4.c b/src/f32-pavgpool/9x-minmax-neon-c4.c
index c289943..ee2ff0e 100644
--- a/src/f32-pavgpool/9x-minmax-neon-c4.c
+++ b/src/f32-pavgpool/9x-minmax-neon-c4.c
@@ -21,7 +21,7 @@
     float* output,
     size_t input_increment,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(output_pixels != 0);
   assert(kernel_elements != 0);
diff --git a/src/f32-pavgpool/9x-minmax-psimd-c4.c b/src/f32-pavgpool/9x-minmax-psimd-c4.c
index 10226b8..ad59820 100644
--- a/src/f32-pavgpool/9x-minmax-psimd-c4.c
+++ b/src/f32-pavgpool/9x-minmax-psimd-c4.c
@@ -21,7 +21,7 @@
     float* output,
     size_t input_increment,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(output_pixels != 0);
   assert(kernel_elements != 0);
diff --git a/src/f32-pavgpool/9x-minmax-scalar-c1.c b/src/f32-pavgpool/9x-minmax-scalar-c1.c
index b85d55b..3f8a60d 100644
--- a/src/f32-pavgpool/9x-minmax-scalar-c1.c
+++ b/src/f32-pavgpool/9x-minmax-scalar-c1.c
@@ -20,7 +20,7 @@
     float* output,
     size_t input_increment,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(output_pixels != 0);
   assert(kernel_elements != 0);
diff --git a/src/f32-pavgpool/9x-minmax-sse-c4.c b/src/f32-pavgpool/9x-minmax-sse-c4.c
index 0b383f6..9fe7fdd 100644
--- a/src/f32-pavgpool/9x-minmax-sse-c4.c
+++ b/src/f32-pavgpool/9x-minmax-sse-c4.c
@@ -21,7 +21,7 @@
     float* output,
     size_t input_increment,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(output_pixels != 0);
   assert(kernel_elements != 0);
diff --git a/src/f32-pavgpool/9x-minmax-wasm-c1.c b/src/f32-pavgpool/9x-minmax-wasm-c1.c
index ea176da..f15395f 100644
--- a/src/f32-pavgpool/9x-minmax-wasm-c1.c
+++ b/src/f32-pavgpool/9x-minmax-wasm-c1.c
@@ -20,7 +20,7 @@
     float* output,
     size_t input_increment,
     size_t output_increment,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(output_pixels != 0);
   assert(kernel_elements != 0);
diff --git a/src/f32-ppmm/gen/2x4-minmax-scalar.c b/src/f32-ppmm/gen/2x4-minmax-scalar.c
index 5f8d63f..92708c0 100644
--- a/src/f32-ppmm/gen/2x4-minmax-scalar.c
+++ b/src/f32-ppmm/gen/2x4-minmax-scalar.c
@@ -22,7 +22,7 @@
   float*restrict c,
   size_t cm_stride,
   size_t cn_stride,
-  const union xnn_f32_minmax_params params[restrict static 1])
+  const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/f32-ppmm/gen/3x3-minmax-scalar.c b/src/f32-ppmm/gen/3x3-minmax-scalar.c
index 3f87736..9ca40f6 100644
--- a/src/f32-ppmm/gen/3x3-minmax-scalar.c
+++ b/src/f32-ppmm/gen/3x3-minmax-scalar.c
@@ -22,7 +22,7 @@
   float*restrict c,
   size_t cm_stride,
   size_t cn_stride,
-  const union xnn_f32_minmax_params params[restrict static 1])
+  const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/f32-ppmm/gen/4x2-minmax-scalar.c b/src/f32-ppmm/gen/4x2-minmax-scalar.c
index 9a3f4da..668aa10 100644
--- a/src/f32-ppmm/gen/4x2-minmax-scalar.c
+++ b/src/f32-ppmm/gen/4x2-minmax-scalar.c
@@ -22,7 +22,7 @@
   float*restrict c,
   size_t cm_stride,
   size_t cn_stride,
-  const union xnn_f32_minmax_params params[restrict static 1])
+  const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/f32-ppmm/gen/4x4-minmax-scalar.c b/src/f32-ppmm/gen/4x4-minmax-scalar.c
index 3ea1eed..fa050c9 100644
--- a/src/f32-ppmm/gen/4x4-minmax-scalar.c
+++ b/src/f32-ppmm/gen/4x4-minmax-scalar.c
@@ -22,7 +22,7 @@
   float*restrict c,
   size_t cm_stride,
   size_t cn_stride,
-  const union xnn_f32_minmax_params params[restrict static 1])
+  const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/f32-ppmm/gen/4x8-minmax-neon.c b/src/f32-ppmm/gen/4x8-minmax-neon.c
index 3b1513b..d4aa5cc 100644
--- a/src/f32-ppmm/gen/4x8-minmax-neon.c
+++ b/src/f32-ppmm/gen/4x8-minmax-neon.c
@@ -24,7 +24,7 @@
   float*restrict c,
   size_t cm_stride,
   size_t cn_stride,
-  const union xnn_f32_minmax_params params[restrict static 1])
+  const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/f32-ppmm/gen/4x8-minmax-neonfma.c b/src/f32-ppmm/gen/4x8-minmax-neonfma.c
index f190536..d339af8 100644
--- a/src/f32-ppmm/gen/4x8-minmax-neonfma.c
+++ b/src/f32-ppmm/gen/4x8-minmax-neonfma.c
@@ -24,7 +24,7 @@
   float*restrict c,
   size_t cm_stride,
   size_t cn_stride,
-  const union xnn_f32_minmax_params params[restrict static 1])
+  const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/f32-ppmm/gen/4x8-minmax-psimd.c b/src/f32-ppmm/gen/4x8-minmax-psimd.c
index 71906bb..e0f9776 100644
--- a/src/f32-ppmm/gen/4x8-minmax-psimd.c
+++ b/src/f32-ppmm/gen/4x8-minmax-psimd.c
@@ -23,7 +23,7 @@
   float*restrict c,
   size_t cm_stride,
   size_t cn_stride,
-  const union xnn_f32_minmax_params params[restrict static 1])
+  const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/f32-ppmm/gen/4x8-minmax-sse.c b/src/f32-ppmm/gen/4x8-minmax-sse.c
index 9683ecf..1533f66 100644
--- a/src/f32-ppmm/gen/4x8-minmax-sse.c
+++ b/src/f32-ppmm/gen/4x8-minmax-sse.c
@@ -23,7 +23,7 @@
   float*restrict c,
   size_t cm_stride,
   size_t cn_stride,
-  const union xnn_f32_minmax_params params[restrict static 1])
+  const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/f32-ppmm/gen/8x8-minmax-neon.c b/src/f32-ppmm/gen/8x8-minmax-neon.c
index e986c9e..78d52ef 100644
--- a/src/f32-ppmm/gen/8x8-minmax-neon.c
+++ b/src/f32-ppmm/gen/8x8-minmax-neon.c
@@ -24,7 +24,7 @@
   float*restrict c,
   size_t cm_stride,
   size_t cn_stride,
-  const union xnn_f32_minmax_params params[restrict static 1])
+  const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 8);
diff --git a/src/f32-ppmm/gen/8x8-minmax-neonfma.c b/src/f32-ppmm/gen/8x8-minmax-neonfma.c
index bd33147..b3540f9 100644
--- a/src/f32-ppmm/gen/8x8-minmax-neonfma.c
+++ b/src/f32-ppmm/gen/8x8-minmax-neonfma.c
@@ -24,7 +24,7 @@
   float*restrict c,
   size_t cm_stride,
   size_t cn_stride,
-  const union xnn_f32_minmax_params params[restrict static 1])
+  const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 8);
diff --git a/src/f32-ppmm/neon.c.in b/src/f32-ppmm/neon.c.in
index 2876655..232d4e8 100644
--- a/src/f32-ppmm/neon.c.in
+++ b/src/f32-ppmm/neon.c.in
@@ -23,7 +23,7 @@
   float*restrict c,
   size_t cm_stride,
   size_t cn_stride,
-  const union xnn_f32_minmax_params params[restrict static 1])
+  const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= ${MR});
diff --git a/src/f32-ppmm/psimd.c.in b/src/f32-ppmm/psimd.c.in
index e809591..ba33cd9 100644
--- a/src/f32-ppmm/psimd.c.in
+++ b/src/f32-ppmm/psimd.c.in
@@ -22,7 +22,7 @@
   float*restrict c,
   size_t cm_stride,
   size_t cn_stride,
-  const union xnn_f32_minmax_params params[restrict static 1])
+  const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= ${MR});
diff --git a/src/f32-ppmm/scalar.c.in b/src/f32-ppmm/scalar.c.in
index 98fd8d8..af94fc3 100644
--- a/src/f32-ppmm/scalar.c.in
+++ b/src/f32-ppmm/scalar.c.in
@@ -18,7 +18,7 @@
   float*restrict c,
   size_t cm_stride,
   size_t cn_stride,
-  const union xnn_f32_minmax_params params[restrict static 1])
+  const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= ${MR});
diff --git a/src/f32-ppmm/sse.c.in b/src/f32-ppmm/sse.c.in
index c489af3..1129f04 100644
--- a/src/f32-ppmm/sse.c.in
+++ b/src/f32-ppmm/sse.c.in
@@ -22,7 +22,7 @@
   float*restrict c,
   size_t cm_stride,
   size_t cn_stride,
-  const union xnn_f32_minmax_params params[restrict static 1])
+  const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= ${MR});
diff --git a/src/f32-spmm/gen/12x1-minmax-neonfma.c b/src/f32-spmm/gen/12x1-minmax-neonfma.c
index be41e02..a00020d 100644
--- a/src/f32-spmm/gen/12x1-minmax-neonfma.c
+++ b/src/f32-spmm/gen/12x1-minmax-neonfma.c
@@ -22,7 +22,7 @@
     const int32_t*restrict widx_dmap,
     const uint32_t*restrict nidx_nnzmap,
     float*restrict c,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(m != 0);
 
diff --git a/src/f32-spmm/gen/12x2-minmax-neonfma.c b/src/f32-spmm/gen/12x2-minmax-neonfma.c
index 48ed809..bd9ef8d 100644
--- a/src/f32-spmm/gen/12x2-minmax-neonfma.c
+++ b/src/f32-spmm/gen/12x2-minmax-neonfma.c
@@ -22,7 +22,7 @@
     const int32_t*restrict widx_dmap,
     const uint32_t*restrict nidx_nnzmap,
     float*restrict c,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(m != 0);
 
diff --git a/src/f32-spmm/gen/12x4-minmax-neonfma.c b/src/f32-spmm/gen/12x4-minmax-neonfma.c
index 0c5b164..421a9ee 100644
--- a/src/f32-spmm/gen/12x4-minmax-neonfma.c
+++ b/src/f32-spmm/gen/12x4-minmax-neonfma.c
@@ -22,7 +22,7 @@
     const int32_t*restrict widx_dmap,
     const uint32_t*restrict nidx_nnzmap,
     float*restrict c,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(m != 0);
 
diff --git a/src/f32-spmm/gen/16x1-minmax-neonfma-pipelined.c b/src/f32-spmm/gen/16x1-minmax-neonfma-pipelined.c
index 06568f1..e155a1d 100644
--- a/src/f32-spmm/gen/16x1-minmax-neonfma-pipelined.c
+++ b/src/f32-spmm/gen/16x1-minmax-neonfma-pipelined.c
@@ -22,7 +22,7 @@
     const int32_t*restrict widx_dmap,
     const uint32_t*restrict nidx_nnzmap,
     float*restrict c,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(m != 0);
 
diff --git a/src/f32-spmm/gen/16x1-minmax-neonfma-unroll2.c b/src/f32-spmm/gen/16x1-minmax-neonfma-unroll2.c
index cd2283f..23a4d64 100644
--- a/src/f32-spmm/gen/16x1-minmax-neonfma-unroll2.c
+++ b/src/f32-spmm/gen/16x1-minmax-neonfma-unroll2.c
@@ -22,7 +22,7 @@
     const int32_t*restrict widx_dmap,
     const uint32_t*restrict nidx_nnzmap,
     float*restrict c,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(m != 0);
 
diff --git a/src/f32-spmm/gen/16x1-minmax-neonfma.c b/src/f32-spmm/gen/16x1-minmax-neonfma.c
index a44ea39..fce13b0 100644
--- a/src/f32-spmm/gen/16x1-minmax-neonfma.c
+++ b/src/f32-spmm/gen/16x1-minmax-neonfma.c
@@ -22,7 +22,7 @@
     const int32_t*restrict widx_dmap,
     const uint32_t*restrict nidx_nnzmap,
     float*restrict c,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(m != 0);
 
diff --git a/src/f32-spmm/gen/16x2-minmax-neonfma.c b/src/f32-spmm/gen/16x2-minmax-neonfma.c
index c8684a9..0143f08 100644
--- a/src/f32-spmm/gen/16x2-minmax-neonfma.c
+++ b/src/f32-spmm/gen/16x2-minmax-neonfma.c
@@ -22,7 +22,7 @@
     const int32_t*restrict widx_dmap,
     const uint32_t*restrict nidx_nnzmap,
     float*restrict c,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(m != 0);
 
diff --git a/src/f32-spmm/gen/16x4-minmax-neonfma.c b/src/f32-spmm/gen/16x4-minmax-neonfma.c
index 79e3ef8..2dd4013 100644
--- a/src/f32-spmm/gen/16x4-minmax-neonfma.c
+++ b/src/f32-spmm/gen/16x4-minmax-neonfma.c
@@ -22,7 +22,7 @@
     const int32_t*restrict widx_dmap,
     const uint32_t*restrict nidx_nnzmap,
     float*restrict c,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(m != 0);
 
diff --git a/src/f32-spmm/gen/1x1-minmax-scalar-pipelined.c b/src/f32-spmm/gen/1x1-minmax-scalar-pipelined.c
index 246689e..bb756b2 100644
--- a/src/f32-spmm/gen/1x1-minmax-scalar-pipelined.c
+++ b/src/f32-spmm/gen/1x1-minmax-scalar-pipelined.c
@@ -21,7 +21,7 @@
     const int32_t*restrict widx_dmap,
     const uint32_t*restrict nidx_nnzmap,
     float*restrict c,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(m != 0);
 
diff --git a/src/f32-spmm/gen/1x1-minmax-scalar.c b/src/f32-spmm/gen/1x1-minmax-scalar.c
index fbcd9bb..6848ede 100644
--- a/src/f32-spmm/gen/1x1-minmax-scalar.c
+++ b/src/f32-spmm/gen/1x1-minmax-scalar.c
@@ -21,7 +21,7 @@
     const int32_t*restrict widx_dmap,
     const uint32_t*restrict nidx_nnzmap,
     float*restrict c,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(m != 0);
 
diff --git a/src/f32-spmm/gen/2x1-minmax-scalar-pipelined.c b/src/f32-spmm/gen/2x1-minmax-scalar-pipelined.c
index 34cb724..b96f841 100644
--- a/src/f32-spmm/gen/2x1-minmax-scalar-pipelined.c
+++ b/src/f32-spmm/gen/2x1-minmax-scalar-pipelined.c
@@ -21,7 +21,7 @@
     const int32_t*restrict widx_dmap,
     const uint32_t*restrict nidx_nnzmap,
     float*restrict c,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(m != 0);
 
diff --git a/src/f32-spmm/gen/2x1-minmax-scalar.c b/src/f32-spmm/gen/2x1-minmax-scalar.c
index 11419e9..6868084 100644
--- a/src/f32-spmm/gen/2x1-minmax-scalar.c
+++ b/src/f32-spmm/gen/2x1-minmax-scalar.c
@@ -21,7 +21,7 @@
     const int32_t*restrict widx_dmap,
     const uint32_t*restrict nidx_nnzmap,
     float*restrict c,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(m != 0);
 
diff --git a/src/f32-spmm/gen/4x1-minmax-neonfma-pipelined.c b/src/f32-spmm/gen/4x1-minmax-neonfma-pipelined.c
index 438f8b6..2360feb 100644
--- a/src/f32-spmm/gen/4x1-minmax-neonfma-pipelined.c
+++ b/src/f32-spmm/gen/4x1-minmax-neonfma-pipelined.c
@@ -22,7 +22,7 @@
     const int32_t*restrict widx_dmap,
     const uint32_t*restrict nidx_nnzmap,
     float*restrict c,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(m != 0);
 
diff --git a/src/f32-spmm/gen/4x1-minmax-neonfma-unroll2.c b/src/f32-spmm/gen/4x1-minmax-neonfma-unroll2.c
index 661bfcc..cd3dba9 100644
--- a/src/f32-spmm/gen/4x1-minmax-neonfma-unroll2.c
+++ b/src/f32-spmm/gen/4x1-minmax-neonfma-unroll2.c
@@ -22,7 +22,7 @@
     const int32_t*restrict widx_dmap,
     const uint32_t*restrict nidx_nnzmap,
     float*restrict c,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(m != 0);
 
diff --git a/src/f32-spmm/gen/4x1-minmax-neonfma.c b/src/f32-spmm/gen/4x1-minmax-neonfma.c
index b763503..9004228 100644
--- a/src/f32-spmm/gen/4x1-minmax-neonfma.c
+++ b/src/f32-spmm/gen/4x1-minmax-neonfma.c
@@ -22,7 +22,7 @@
     const int32_t*restrict widx_dmap,
     const uint32_t*restrict nidx_nnzmap,
     float*restrict c,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(m != 0);
 
diff --git a/src/f32-spmm/gen/4x1-minmax-scalar-pipelined.c b/src/f32-spmm/gen/4x1-minmax-scalar-pipelined.c
index 3c94829..e560727 100644
--- a/src/f32-spmm/gen/4x1-minmax-scalar-pipelined.c
+++ b/src/f32-spmm/gen/4x1-minmax-scalar-pipelined.c
@@ -21,7 +21,7 @@
     const int32_t*restrict widx_dmap,
     const uint32_t*restrict nidx_nnzmap,
     float*restrict c,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(m != 0);
 
diff --git a/src/f32-spmm/gen/4x1-minmax-scalar.c b/src/f32-spmm/gen/4x1-minmax-scalar.c
index 3971562..1158206 100644
--- a/src/f32-spmm/gen/4x1-minmax-scalar.c
+++ b/src/f32-spmm/gen/4x1-minmax-scalar.c
@@ -21,7 +21,7 @@
     const int32_t*restrict widx_dmap,
     const uint32_t*restrict nidx_nnzmap,
     float*restrict c,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(m != 0);
 
diff --git a/src/f32-spmm/gen/4x1-minmax-sse.c b/src/f32-spmm/gen/4x1-minmax-sse.c
index 042a688..ee6a88b 100644
--- a/src/f32-spmm/gen/4x1-minmax-sse.c
+++ b/src/f32-spmm/gen/4x1-minmax-sse.c
@@ -22,7 +22,7 @@
     const int32_t*restrict widx_dmap,
     const uint32_t*restrict nidx_nnzmap,
     float*restrict c,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(m != 0);
 
diff --git a/src/f32-spmm/gen/4x2-minmax-neonfma.c b/src/f32-spmm/gen/4x2-minmax-neonfma.c
index d256cdb..b475aa8 100644
--- a/src/f32-spmm/gen/4x2-minmax-neonfma.c
+++ b/src/f32-spmm/gen/4x2-minmax-neonfma.c
@@ -22,7 +22,7 @@
     const int32_t*restrict widx_dmap,
     const uint32_t*restrict nidx_nnzmap,
     float*restrict c,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(m != 0);
 
diff --git a/src/f32-spmm/gen/4x4-minmax-neonfma.c b/src/f32-spmm/gen/4x4-minmax-neonfma.c
index db51f1f..c1fbbe1 100644
--- a/src/f32-spmm/gen/4x4-minmax-neonfma.c
+++ b/src/f32-spmm/gen/4x4-minmax-neonfma.c
@@ -22,7 +22,7 @@
     const int32_t*restrict widx_dmap,
     const uint32_t*restrict nidx_nnzmap,
     float*restrict c,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(m != 0);
 
diff --git a/src/f32-spmm/gen/8x1-minmax-neonfma-pipelined.c b/src/f32-spmm/gen/8x1-minmax-neonfma-pipelined.c
index c866daa..b866c1f 100644
--- a/src/f32-spmm/gen/8x1-minmax-neonfma-pipelined.c
+++ b/src/f32-spmm/gen/8x1-minmax-neonfma-pipelined.c
@@ -22,7 +22,7 @@
     const int32_t*restrict widx_dmap,
     const uint32_t*restrict nidx_nnzmap,
     float*restrict c,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(m != 0);
 
diff --git a/src/f32-spmm/gen/8x1-minmax-neonfma-unroll2.c b/src/f32-spmm/gen/8x1-minmax-neonfma-unroll2.c
index fb48eb1..004101a 100644
--- a/src/f32-spmm/gen/8x1-minmax-neonfma-unroll2.c
+++ b/src/f32-spmm/gen/8x1-minmax-neonfma-unroll2.c
@@ -22,7 +22,7 @@
     const int32_t*restrict widx_dmap,
     const uint32_t*restrict nidx_nnzmap,
     float*restrict c,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(m != 0);
 
diff --git a/src/f32-spmm/gen/8x1-minmax-neonfma.c b/src/f32-spmm/gen/8x1-minmax-neonfma.c
index c069126..bf0c283 100644
--- a/src/f32-spmm/gen/8x1-minmax-neonfma.c
+++ b/src/f32-spmm/gen/8x1-minmax-neonfma.c
@@ -22,7 +22,7 @@
     const int32_t*restrict widx_dmap,
     const uint32_t*restrict nidx_nnzmap,
     float*restrict c,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(m != 0);
 
diff --git a/src/f32-spmm/gen/8x1-minmax-scalar-pipelined.c b/src/f32-spmm/gen/8x1-minmax-scalar-pipelined.c
index 5413025..813ada2 100644
--- a/src/f32-spmm/gen/8x1-minmax-scalar-pipelined.c
+++ b/src/f32-spmm/gen/8x1-minmax-scalar-pipelined.c
@@ -21,7 +21,7 @@
     const int32_t*restrict widx_dmap,
     const uint32_t*restrict nidx_nnzmap,
     float*restrict c,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(m != 0);
 
diff --git a/src/f32-spmm/gen/8x1-minmax-scalar.c b/src/f32-spmm/gen/8x1-minmax-scalar.c
index 63bc491..456807a 100644
--- a/src/f32-spmm/gen/8x1-minmax-scalar.c
+++ b/src/f32-spmm/gen/8x1-minmax-scalar.c
@@ -21,7 +21,7 @@
     const int32_t*restrict widx_dmap,
     const uint32_t*restrict nidx_nnzmap,
     float*restrict c,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(m != 0);
 
diff --git a/src/f32-spmm/gen/8x1-minmax-sse.c b/src/f32-spmm/gen/8x1-minmax-sse.c
index 8373a31..1972943 100644
--- a/src/f32-spmm/gen/8x1-minmax-sse.c
+++ b/src/f32-spmm/gen/8x1-minmax-sse.c
@@ -22,7 +22,7 @@
     const int32_t*restrict widx_dmap,
     const uint32_t*restrict nidx_nnzmap,
     float*restrict c,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(m != 0);
 
diff --git a/src/f32-spmm/gen/8x2-minmax-neonfma.c b/src/f32-spmm/gen/8x2-minmax-neonfma.c
index 661cc74..3a55808 100644
--- a/src/f32-spmm/gen/8x2-minmax-neonfma.c
+++ b/src/f32-spmm/gen/8x2-minmax-neonfma.c
@@ -22,7 +22,7 @@
     const int32_t*restrict widx_dmap,
     const uint32_t*restrict nidx_nnzmap,
     float*restrict c,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(m != 0);
 
diff --git a/src/f32-spmm/gen/8x2-minmax-scalar.c b/src/f32-spmm/gen/8x2-minmax-scalar.c
index 6a6d3c8..70eb381 100644
--- a/src/f32-spmm/gen/8x2-minmax-scalar.c
+++ b/src/f32-spmm/gen/8x2-minmax-scalar.c
@@ -21,7 +21,7 @@
     const int32_t*restrict widx_dmap,
     const uint32_t*restrict nidx_nnzmap,
     float*restrict c,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(m != 0);
 
diff --git a/src/f32-spmm/gen/8x4-minmax-neonfma.c b/src/f32-spmm/gen/8x4-minmax-neonfma.c
index 516ace1..1b4cc1b 100644
--- a/src/f32-spmm/gen/8x4-minmax-neonfma.c
+++ b/src/f32-spmm/gen/8x4-minmax-neonfma.c
@@ -22,7 +22,7 @@
     const int32_t*restrict widx_dmap,
     const uint32_t*restrict nidx_nnzmap,
     float*restrict c,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(m != 0);
 
diff --git a/src/f32-spmm/gen/8x4-minmax-scalar.c b/src/f32-spmm/gen/8x4-minmax-scalar.c
index 9dbcbd9..8d51d38 100644
--- a/src/f32-spmm/gen/8x4-minmax-scalar.c
+++ b/src/f32-spmm/gen/8x4-minmax-scalar.c
@@ -21,7 +21,7 @@
     const int32_t*restrict widx_dmap,
     const uint32_t*restrict nidx_nnzmap,
     float*restrict c,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(m != 0);
 
diff --git a/src/f32-spmm/neon-blocked.c.in b/src/f32-spmm/neon-blocked.c.in
index c1f39d9..db03837 100644
--- a/src/f32-spmm/neon-blocked.c.in
+++ b/src/f32-spmm/neon-blocked.c.in
@@ -21,7 +21,7 @@
     const int32_t*restrict widx_dmap,
     const uint32_t*restrict nidx_nnzmap,
     float*restrict c,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(m != 0);
 
diff --git a/src/f32-spmm/neon-pipelined.c.in b/src/f32-spmm/neon-pipelined.c.in
index ddd5302..4d7e2e4 100644
--- a/src/f32-spmm/neon-pipelined.c.in
+++ b/src/f32-spmm/neon-pipelined.c.in
@@ -20,7 +20,7 @@
     const int32_t*restrict widx_dmap,
     const uint32_t*restrict nidx_nnzmap,
     float*restrict c,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(m != 0);
 
diff --git a/src/f32-spmm/neon.c.in b/src/f32-spmm/neon.c.in
index 27d2d72..deb8fa3 100644
--- a/src/f32-spmm/neon.c.in
+++ b/src/f32-spmm/neon.c.in
@@ -20,7 +20,7 @@
     const int32_t*restrict widx_dmap,
     const uint32_t*restrict nidx_nnzmap,
     float*restrict c,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(m != 0);
 
diff --git a/src/f32-spmm/scalar-pipelined.c.in b/src/f32-spmm/scalar-pipelined.c.in
index 52149b7..ebbcdf1 100644
--- a/src/f32-spmm/scalar-pipelined.c.in
+++ b/src/f32-spmm/scalar-pipelined.c.in
@@ -18,7 +18,7 @@
     const int32_t*restrict widx_dmap,
     const uint32_t*restrict nidx_nnzmap,
     float*restrict c,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(m != 0);
 
diff --git a/src/f32-spmm/scalar.c.in b/src/f32-spmm/scalar.c.in
index 6188b1c..d4873d7 100644
--- a/src/f32-spmm/scalar.c.in
+++ b/src/f32-spmm/scalar.c.in
@@ -18,7 +18,7 @@
     const int32_t*restrict widx_dmap,
     const uint32_t*restrict nidx_nnzmap,
     float*restrict c,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(m != 0);
 
diff --git a/src/f32-spmm/sse.c.in b/src/f32-spmm/sse.c.in
index 66e1dd3..f606add 100644
--- a/src/f32-spmm/sse.c.in
+++ b/src/f32-spmm/sse.c.in
@@ -20,7 +20,7 @@
     const int32_t*restrict widx_dmap,
     const uint32_t*restrict nidx_nnzmap,
     float*restrict c,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(m != 0);
 
diff --git a/src/f32-vbinary/gen/vadd-minmax-avx-x16.c b/src/f32-vbinary/gen/vadd-minmax-avx-x16.c
index ca894a0..b799115 100644
--- a/src/f32-vbinary/gen/vadd-minmax-avx-x16.c
+++ b/src/f32-vbinary/gen/vadd-minmax-avx-x16.c
@@ -22,7 +22,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vadd-minmax-avx-x8.c b/src/f32-vbinary/gen/vadd-minmax-avx-x8.c
index afb7989..cd3fd03 100644
--- a/src/f32-vbinary/gen/vadd-minmax-avx-x8.c
+++ b/src/f32-vbinary/gen/vadd-minmax-avx-x8.c
@@ -22,7 +22,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vadd-minmax-avx512f-x16.c b/src/f32-vbinary/gen/vadd-minmax-avx512f-x16.c
index 30014fc..27b9960 100644
--- a/src/f32-vbinary/gen/vadd-minmax-avx512f-x16.c
+++ b/src/f32-vbinary/gen/vadd-minmax-avx512f-x16.c
@@ -21,7 +21,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vadd-minmax-avx512f-x32.c b/src/f32-vbinary/gen/vadd-minmax-avx512f-x32.c
index b7908c6..ecb71ab 100644
--- a/src/f32-vbinary/gen/vadd-minmax-avx512f-x32.c
+++ b/src/f32-vbinary/gen/vadd-minmax-avx512f-x32.c
@@ -21,7 +21,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vadd-minmax-neon-x4.c b/src/f32-vbinary/gen/vadd-minmax-neon-x4.c
index 6941dfe..7fb2790 100644
--- a/src/f32-vbinary/gen/vadd-minmax-neon-x4.c
+++ b/src/f32-vbinary/gen/vadd-minmax-neon-x4.c
@@ -20,7 +20,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vadd-minmax-neon-x8.c b/src/f32-vbinary/gen/vadd-minmax-neon-x8.c
index 8faffed..e5a0c46 100644
--- a/src/f32-vbinary/gen/vadd-minmax-neon-x8.c
+++ b/src/f32-vbinary/gen/vadd-minmax-neon-x8.c
@@ -20,7 +20,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vadd-minmax-psimd-x4.c b/src/f32-vbinary/gen/vadd-minmax-psimd-x4.c
index d72d81f..9dac806 100644
--- a/src/f32-vbinary/gen/vadd-minmax-psimd-x4.c
+++ b/src/f32-vbinary/gen/vadd-minmax-psimd-x4.c
@@ -20,7 +20,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vadd-minmax-psimd-x8.c b/src/f32-vbinary/gen/vadd-minmax-psimd-x8.c
index 05acd7f..fa11b2e 100644
--- a/src/f32-vbinary/gen/vadd-minmax-psimd-x8.c
+++ b/src/f32-vbinary/gen/vadd-minmax-psimd-x8.c
@@ -20,7 +20,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vadd-minmax-scalar-x1.c b/src/f32-vbinary/gen/vadd-minmax-scalar-x1.c
index 942b7b7..51623e9 100644
--- a/src/f32-vbinary/gen/vadd-minmax-scalar-x1.c
+++ b/src/f32-vbinary/gen/vadd-minmax-scalar-x1.c
@@ -19,7 +19,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vadd-minmax-scalar-x2.c b/src/f32-vbinary/gen/vadd-minmax-scalar-x2.c
index 142a867..63093fd 100644
--- a/src/f32-vbinary/gen/vadd-minmax-scalar-x2.c
+++ b/src/f32-vbinary/gen/vadd-minmax-scalar-x2.c
@@ -19,7 +19,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vadd-minmax-scalar-x4.c b/src/f32-vbinary/gen/vadd-minmax-scalar-x4.c
index de7bad3..2e182e0 100644
--- a/src/f32-vbinary/gen/vadd-minmax-scalar-x4.c
+++ b/src/f32-vbinary/gen/vadd-minmax-scalar-x4.c
@@ -19,7 +19,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vadd-minmax-sse-x4.c b/src/f32-vbinary/gen/vadd-minmax-sse-x4.c
index 7b0e4e8..0d940c3 100644
--- a/src/f32-vbinary/gen/vadd-minmax-sse-x4.c
+++ b/src/f32-vbinary/gen/vadd-minmax-sse-x4.c
@@ -20,7 +20,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vadd-minmax-sse-x8.c b/src/f32-vbinary/gen/vadd-minmax-sse-x8.c
index 782f4d7..529e6a5 100644
--- a/src/f32-vbinary/gen/vadd-minmax-sse-x8.c
+++ b/src/f32-vbinary/gen/vadd-minmax-sse-x8.c
@@ -20,7 +20,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vadd-minmax-wasm-x1.c b/src/f32-vbinary/gen/vadd-minmax-wasm-x1.c
index 52b1122..481272e 100644
--- a/src/f32-vbinary/gen/vadd-minmax-wasm-x1.c
+++ b/src/f32-vbinary/gen/vadd-minmax-wasm-x1.c
@@ -19,7 +19,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vadd-minmax-wasm-x2.c b/src/f32-vbinary/gen/vadd-minmax-wasm-x2.c
index f1e7eb7..6e0a742 100644
--- a/src/f32-vbinary/gen/vadd-minmax-wasm-x2.c
+++ b/src/f32-vbinary/gen/vadd-minmax-wasm-x2.c
@@ -19,7 +19,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vadd-minmax-wasm-x4.c b/src/f32-vbinary/gen/vadd-minmax-wasm-x4.c
index a9ab718..27219bb 100644
--- a/src/f32-vbinary/gen/vadd-minmax-wasm-x4.c
+++ b/src/f32-vbinary/gen/vadd-minmax-wasm-x4.c
@@ -19,7 +19,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vaddc-minmax-avx-x16.c b/src/f32-vbinary/gen/vaddc-minmax-avx-x16.c
index db6ffb8..cdbf270 100644
--- a/src/f32-vbinary/gen/vaddc-minmax-avx-x16.c
+++ b/src/f32-vbinary/gen/vaddc-minmax-avx-x16.c
@@ -22,7 +22,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vaddc-minmax-avx-x8.c b/src/f32-vbinary/gen/vaddc-minmax-avx-x8.c
index cfb6eac..2d95818 100644
--- a/src/f32-vbinary/gen/vaddc-minmax-avx-x8.c
+++ b/src/f32-vbinary/gen/vaddc-minmax-avx-x8.c
@@ -22,7 +22,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vaddc-minmax-avx512f-x16.c b/src/f32-vbinary/gen/vaddc-minmax-avx512f-x16.c
index a3ab579..7536546 100644
--- a/src/f32-vbinary/gen/vaddc-minmax-avx512f-x16.c
+++ b/src/f32-vbinary/gen/vaddc-minmax-avx512f-x16.c
@@ -21,7 +21,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vaddc-minmax-avx512f-x32.c b/src/f32-vbinary/gen/vaddc-minmax-avx512f-x32.c
index c7cd3e3..4eb57d8 100644
--- a/src/f32-vbinary/gen/vaddc-minmax-avx512f-x32.c
+++ b/src/f32-vbinary/gen/vaddc-minmax-avx512f-x32.c
@@ -21,7 +21,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vaddc-minmax-neon-x4.c b/src/f32-vbinary/gen/vaddc-minmax-neon-x4.c
index 442420d..0aa77e2 100644
--- a/src/f32-vbinary/gen/vaddc-minmax-neon-x4.c
+++ b/src/f32-vbinary/gen/vaddc-minmax-neon-x4.c
@@ -20,7 +20,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vaddc-minmax-neon-x8.c b/src/f32-vbinary/gen/vaddc-minmax-neon-x8.c
index c99a103..a07f7d3 100644
--- a/src/f32-vbinary/gen/vaddc-minmax-neon-x8.c
+++ b/src/f32-vbinary/gen/vaddc-minmax-neon-x8.c
@@ -20,7 +20,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vaddc-minmax-psimd-x4.c b/src/f32-vbinary/gen/vaddc-minmax-psimd-x4.c
index 2266ff3..9e7a0ad 100644
--- a/src/f32-vbinary/gen/vaddc-minmax-psimd-x4.c
+++ b/src/f32-vbinary/gen/vaddc-minmax-psimd-x4.c
@@ -20,7 +20,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vaddc-minmax-psimd-x8.c b/src/f32-vbinary/gen/vaddc-minmax-psimd-x8.c
index 2dd28df..a4aa3fb 100644
--- a/src/f32-vbinary/gen/vaddc-minmax-psimd-x8.c
+++ b/src/f32-vbinary/gen/vaddc-minmax-psimd-x8.c
@@ -20,7 +20,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vaddc-minmax-scalar-x1.c b/src/f32-vbinary/gen/vaddc-minmax-scalar-x1.c
index b424d51..7f7ceb2 100644
--- a/src/f32-vbinary/gen/vaddc-minmax-scalar-x1.c
+++ b/src/f32-vbinary/gen/vaddc-minmax-scalar-x1.c
@@ -19,7 +19,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vaddc-minmax-scalar-x2.c b/src/f32-vbinary/gen/vaddc-minmax-scalar-x2.c
index 2958a84..d9ff3cf 100644
--- a/src/f32-vbinary/gen/vaddc-minmax-scalar-x2.c
+++ b/src/f32-vbinary/gen/vaddc-minmax-scalar-x2.c
@@ -19,7 +19,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vaddc-minmax-scalar-x4.c b/src/f32-vbinary/gen/vaddc-minmax-scalar-x4.c
index 61d297b..7652791 100644
--- a/src/f32-vbinary/gen/vaddc-minmax-scalar-x4.c
+++ b/src/f32-vbinary/gen/vaddc-minmax-scalar-x4.c
@@ -19,7 +19,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vaddc-minmax-sse-x4.c b/src/f32-vbinary/gen/vaddc-minmax-sse-x4.c
index e618ef3..c9d9ae5 100644
--- a/src/f32-vbinary/gen/vaddc-minmax-sse-x4.c
+++ b/src/f32-vbinary/gen/vaddc-minmax-sse-x4.c
@@ -20,7 +20,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vaddc-minmax-sse-x8.c b/src/f32-vbinary/gen/vaddc-minmax-sse-x8.c
index c2b18b5..21853a6 100644
--- a/src/f32-vbinary/gen/vaddc-minmax-sse-x8.c
+++ b/src/f32-vbinary/gen/vaddc-minmax-sse-x8.c
@@ -20,7 +20,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vaddc-minmax-wasm-x1.c b/src/f32-vbinary/gen/vaddc-minmax-wasm-x1.c
index 5a86a29..28f4a31 100644
--- a/src/f32-vbinary/gen/vaddc-minmax-wasm-x1.c
+++ b/src/f32-vbinary/gen/vaddc-minmax-wasm-x1.c
@@ -19,7 +19,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vaddc-minmax-wasm-x2.c b/src/f32-vbinary/gen/vaddc-minmax-wasm-x2.c
index 42af1e4..78dc878 100644
--- a/src/f32-vbinary/gen/vaddc-minmax-wasm-x2.c
+++ b/src/f32-vbinary/gen/vaddc-minmax-wasm-x2.c
@@ -19,7 +19,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vaddc-minmax-wasm-x4.c b/src/f32-vbinary/gen/vaddc-minmax-wasm-x4.c
index 142f7e0..5c958c3 100644
--- a/src/f32-vbinary/gen/vaddc-minmax-wasm-x4.c
+++ b/src/f32-vbinary/gen/vaddc-minmax-wasm-x4.c
@@ -19,7 +19,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vdiv-minmax-avx-x16.c b/src/f32-vbinary/gen/vdiv-minmax-avx-x16.c
index 3150d56..e2e6f6d 100644
--- a/src/f32-vbinary/gen/vdiv-minmax-avx-x16.c
+++ b/src/f32-vbinary/gen/vdiv-minmax-avx-x16.c
@@ -22,7 +22,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vdiv-minmax-avx-x8.c b/src/f32-vbinary/gen/vdiv-minmax-avx-x8.c
index 44e231c..a4e3283 100644
--- a/src/f32-vbinary/gen/vdiv-minmax-avx-x8.c
+++ b/src/f32-vbinary/gen/vdiv-minmax-avx-x8.c
@@ -22,7 +22,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vdiv-minmax-avx512f-x16.c b/src/f32-vbinary/gen/vdiv-minmax-avx512f-x16.c
index ba15e10..bd602b6 100644
--- a/src/f32-vbinary/gen/vdiv-minmax-avx512f-x16.c
+++ b/src/f32-vbinary/gen/vdiv-minmax-avx512f-x16.c
@@ -21,7 +21,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vdiv-minmax-avx512f-x32.c b/src/f32-vbinary/gen/vdiv-minmax-avx512f-x32.c
index afde483..784d575 100644
--- a/src/f32-vbinary/gen/vdiv-minmax-avx512f-x32.c
+++ b/src/f32-vbinary/gen/vdiv-minmax-avx512f-x32.c
@@ -21,7 +21,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vdiv-minmax-neon-x4.c b/src/f32-vbinary/gen/vdiv-minmax-neon-x4.c
index bdabcca..ceac514 100644
--- a/src/f32-vbinary/gen/vdiv-minmax-neon-x4.c
+++ b/src/f32-vbinary/gen/vdiv-minmax-neon-x4.c
@@ -20,7 +20,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vdiv-minmax-neon-x8.c b/src/f32-vbinary/gen/vdiv-minmax-neon-x8.c
index 6e00f72..4c9254c 100644
--- a/src/f32-vbinary/gen/vdiv-minmax-neon-x8.c
+++ b/src/f32-vbinary/gen/vdiv-minmax-neon-x8.c
@@ -20,7 +20,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vdiv-minmax-psimd-x4.c b/src/f32-vbinary/gen/vdiv-minmax-psimd-x4.c
index b27ecf0..8be4e5f 100644
--- a/src/f32-vbinary/gen/vdiv-minmax-psimd-x4.c
+++ b/src/f32-vbinary/gen/vdiv-minmax-psimd-x4.c
@@ -20,7 +20,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vdiv-minmax-psimd-x8.c b/src/f32-vbinary/gen/vdiv-minmax-psimd-x8.c
index d82b3c1..fecd595 100644
--- a/src/f32-vbinary/gen/vdiv-minmax-psimd-x8.c
+++ b/src/f32-vbinary/gen/vdiv-minmax-psimd-x8.c
@@ -20,7 +20,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vdiv-minmax-scalar-x1.c b/src/f32-vbinary/gen/vdiv-minmax-scalar-x1.c
index a3dfd20..53b562c 100644
--- a/src/f32-vbinary/gen/vdiv-minmax-scalar-x1.c
+++ b/src/f32-vbinary/gen/vdiv-minmax-scalar-x1.c
@@ -19,7 +19,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vdiv-minmax-scalar-x2.c b/src/f32-vbinary/gen/vdiv-minmax-scalar-x2.c
index c9c5a4e..b1b9e4a 100644
--- a/src/f32-vbinary/gen/vdiv-minmax-scalar-x2.c
+++ b/src/f32-vbinary/gen/vdiv-minmax-scalar-x2.c
@@ -19,7 +19,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vdiv-minmax-scalar-x4.c b/src/f32-vbinary/gen/vdiv-minmax-scalar-x4.c
index be08854..2effa49 100644
--- a/src/f32-vbinary/gen/vdiv-minmax-scalar-x4.c
+++ b/src/f32-vbinary/gen/vdiv-minmax-scalar-x4.c
@@ -19,7 +19,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vdiv-minmax-sse-x4.c b/src/f32-vbinary/gen/vdiv-minmax-sse-x4.c
index ab481b0..3fda9b4 100644
--- a/src/f32-vbinary/gen/vdiv-minmax-sse-x4.c
+++ b/src/f32-vbinary/gen/vdiv-minmax-sse-x4.c
@@ -20,7 +20,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vdiv-minmax-sse-x8.c b/src/f32-vbinary/gen/vdiv-minmax-sse-x8.c
index 564b48a..3f75e7f 100644
--- a/src/f32-vbinary/gen/vdiv-minmax-sse-x8.c
+++ b/src/f32-vbinary/gen/vdiv-minmax-sse-x8.c
@@ -20,7 +20,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vdiv-minmax-wasm-x1.c b/src/f32-vbinary/gen/vdiv-minmax-wasm-x1.c
index 9ad14c2..aaf2759 100644
--- a/src/f32-vbinary/gen/vdiv-minmax-wasm-x1.c
+++ b/src/f32-vbinary/gen/vdiv-minmax-wasm-x1.c
@@ -19,7 +19,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vdiv-minmax-wasm-x2.c b/src/f32-vbinary/gen/vdiv-minmax-wasm-x2.c
index cc530b3..9f045b1 100644
--- a/src/f32-vbinary/gen/vdiv-minmax-wasm-x2.c
+++ b/src/f32-vbinary/gen/vdiv-minmax-wasm-x2.c
@@ -19,7 +19,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vdiv-minmax-wasm-x4.c b/src/f32-vbinary/gen/vdiv-minmax-wasm-x4.c
index 6f178b4..e472e86 100644
--- a/src/f32-vbinary/gen/vdiv-minmax-wasm-x4.c
+++ b/src/f32-vbinary/gen/vdiv-minmax-wasm-x4.c
@@ -19,7 +19,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vdivc-minmax-avx-x16.c b/src/f32-vbinary/gen/vdivc-minmax-avx-x16.c
index fd72c61..6411097 100644
--- a/src/f32-vbinary/gen/vdivc-minmax-avx-x16.c
+++ b/src/f32-vbinary/gen/vdivc-minmax-avx-x16.c
@@ -22,7 +22,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vdivc-minmax-avx-x8.c b/src/f32-vbinary/gen/vdivc-minmax-avx-x8.c
index f5f88bb..9a51c51 100644
--- a/src/f32-vbinary/gen/vdivc-minmax-avx-x8.c
+++ b/src/f32-vbinary/gen/vdivc-minmax-avx-x8.c
@@ -22,7 +22,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vdivc-minmax-avx512f-x16.c b/src/f32-vbinary/gen/vdivc-minmax-avx512f-x16.c
index 64de6857..9a90ed3 100644
--- a/src/f32-vbinary/gen/vdivc-minmax-avx512f-x16.c
+++ b/src/f32-vbinary/gen/vdivc-minmax-avx512f-x16.c
@@ -21,7 +21,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vdivc-minmax-avx512f-x32.c b/src/f32-vbinary/gen/vdivc-minmax-avx512f-x32.c
index d00f88d..4f535fe 100644
--- a/src/f32-vbinary/gen/vdivc-minmax-avx512f-x32.c
+++ b/src/f32-vbinary/gen/vdivc-minmax-avx512f-x32.c
@@ -21,7 +21,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vdivc-minmax-neon-x4.c b/src/f32-vbinary/gen/vdivc-minmax-neon-x4.c
index 488e4f6..354fe3f 100644
--- a/src/f32-vbinary/gen/vdivc-minmax-neon-x4.c
+++ b/src/f32-vbinary/gen/vdivc-minmax-neon-x4.c
@@ -20,7 +20,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vdivc-minmax-neon-x8.c b/src/f32-vbinary/gen/vdivc-minmax-neon-x8.c
index 7b05df3..11367bb 100644
--- a/src/f32-vbinary/gen/vdivc-minmax-neon-x8.c
+++ b/src/f32-vbinary/gen/vdivc-minmax-neon-x8.c
@@ -20,7 +20,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vdivc-minmax-psimd-x4.c b/src/f32-vbinary/gen/vdivc-minmax-psimd-x4.c
index f09b98c..6315bb2 100644
--- a/src/f32-vbinary/gen/vdivc-minmax-psimd-x4.c
+++ b/src/f32-vbinary/gen/vdivc-minmax-psimd-x4.c
@@ -20,7 +20,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vdivc-minmax-psimd-x8.c b/src/f32-vbinary/gen/vdivc-minmax-psimd-x8.c
index 118b735..7075cf5 100644
--- a/src/f32-vbinary/gen/vdivc-minmax-psimd-x8.c
+++ b/src/f32-vbinary/gen/vdivc-minmax-psimd-x8.c
@@ -20,7 +20,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vdivc-minmax-scalar-x1.c b/src/f32-vbinary/gen/vdivc-minmax-scalar-x1.c
index e780536..3119102 100644
--- a/src/f32-vbinary/gen/vdivc-minmax-scalar-x1.c
+++ b/src/f32-vbinary/gen/vdivc-minmax-scalar-x1.c
@@ -19,7 +19,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vdivc-minmax-scalar-x2.c b/src/f32-vbinary/gen/vdivc-minmax-scalar-x2.c
index 6118d1b..520b555 100644
--- a/src/f32-vbinary/gen/vdivc-minmax-scalar-x2.c
+++ b/src/f32-vbinary/gen/vdivc-minmax-scalar-x2.c
@@ -19,7 +19,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vdivc-minmax-scalar-x4.c b/src/f32-vbinary/gen/vdivc-minmax-scalar-x4.c
index 815fc6b..113cdbf 100644
--- a/src/f32-vbinary/gen/vdivc-minmax-scalar-x4.c
+++ b/src/f32-vbinary/gen/vdivc-minmax-scalar-x4.c
@@ -19,7 +19,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vdivc-minmax-sse-x4.c b/src/f32-vbinary/gen/vdivc-minmax-sse-x4.c
index ad13aa7..2c19a84 100644
--- a/src/f32-vbinary/gen/vdivc-minmax-sse-x4.c
+++ b/src/f32-vbinary/gen/vdivc-minmax-sse-x4.c
@@ -20,7 +20,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vdivc-minmax-sse-x8.c b/src/f32-vbinary/gen/vdivc-minmax-sse-x8.c
index bce65b3..c2b2405 100644
--- a/src/f32-vbinary/gen/vdivc-minmax-sse-x8.c
+++ b/src/f32-vbinary/gen/vdivc-minmax-sse-x8.c
@@ -20,7 +20,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vdivc-minmax-wasm-x1.c b/src/f32-vbinary/gen/vdivc-minmax-wasm-x1.c
index b6d4efe..a6beadf 100644
--- a/src/f32-vbinary/gen/vdivc-minmax-wasm-x1.c
+++ b/src/f32-vbinary/gen/vdivc-minmax-wasm-x1.c
@@ -19,7 +19,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vdivc-minmax-wasm-x2.c b/src/f32-vbinary/gen/vdivc-minmax-wasm-x2.c
index 0899037..41363d6 100644
--- a/src/f32-vbinary/gen/vdivc-minmax-wasm-x2.c
+++ b/src/f32-vbinary/gen/vdivc-minmax-wasm-x2.c
@@ -19,7 +19,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vdivc-minmax-wasm-x4.c b/src/f32-vbinary/gen/vdivc-minmax-wasm-x4.c
index 0fa5050..6e36564 100644
--- a/src/f32-vbinary/gen/vdivc-minmax-wasm-x4.c
+++ b/src/f32-vbinary/gen/vdivc-minmax-wasm-x4.c
@@ -19,7 +19,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vmax-avx-x16.c b/src/f32-vbinary/gen/vmax-avx-x16.c
index ea6fc43..438f0bb 100644
--- a/src/f32-vbinary/gen/vmax-avx-x16.c
+++ b/src/f32-vbinary/gen/vmax-avx-x16.c
@@ -22,7 +22,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vmax-avx-x8.c b/src/f32-vbinary/gen/vmax-avx-x8.c
index 97fa8b8..92de68f 100644
--- a/src/f32-vbinary/gen/vmax-avx-x8.c
+++ b/src/f32-vbinary/gen/vmax-avx-x8.c
@@ -22,7 +22,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vmax-avx512f-x16.c b/src/f32-vbinary/gen/vmax-avx512f-x16.c
index 8ddee80..c5d324d 100644
--- a/src/f32-vbinary/gen/vmax-avx512f-x16.c
+++ b/src/f32-vbinary/gen/vmax-avx512f-x16.c
@@ -21,7 +21,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vmax-avx512f-x32.c b/src/f32-vbinary/gen/vmax-avx512f-x32.c
index aaa85d2..469bf65 100644
--- a/src/f32-vbinary/gen/vmax-avx512f-x32.c
+++ b/src/f32-vbinary/gen/vmax-avx512f-x32.c
@@ -21,7 +21,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vmax-neon-x4.c b/src/f32-vbinary/gen/vmax-neon-x4.c
index 920d281..cf688aa 100644
--- a/src/f32-vbinary/gen/vmax-neon-x4.c
+++ b/src/f32-vbinary/gen/vmax-neon-x4.c
@@ -20,7 +20,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vmax-neon-x8.c b/src/f32-vbinary/gen/vmax-neon-x8.c
index 3403389..dd4e9c0 100644
--- a/src/f32-vbinary/gen/vmax-neon-x8.c
+++ b/src/f32-vbinary/gen/vmax-neon-x8.c
@@ -20,7 +20,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vmax-psimd-x4.c b/src/f32-vbinary/gen/vmax-psimd-x4.c
index 704a279..6e6a16b 100644
--- a/src/f32-vbinary/gen/vmax-psimd-x4.c
+++ b/src/f32-vbinary/gen/vmax-psimd-x4.c
@@ -20,7 +20,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vmax-psimd-x8.c b/src/f32-vbinary/gen/vmax-psimd-x8.c
index 35b439a..3e33a29 100644
--- a/src/f32-vbinary/gen/vmax-psimd-x8.c
+++ b/src/f32-vbinary/gen/vmax-psimd-x8.c
@@ -20,7 +20,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vmax-scalar-x1.c b/src/f32-vbinary/gen/vmax-scalar-x1.c
index 54f7ed3..cadc48f 100644
--- a/src/f32-vbinary/gen/vmax-scalar-x1.c
+++ b/src/f32-vbinary/gen/vmax-scalar-x1.c
@@ -19,7 +19,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vmax-scalar-x2.c b/src/f32-vbinary/gen/vmax-scalar-x2.c
index 7712735..59315bb 100644
--- a/src/f32-vbinary/gen/vmax-scalar-x2.c
+++ b/src/f32-vbinary/gen/vmax-scalar-x2.c
@@ -19,7 +19,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vmax-scalar-x4.c b/src/f32-vbinary/gen/vmax-scalar-x4.c
index 7dd203c..0f3102c 100644
--- a/src/f32-vbinary/gen/vmax-scalar-x4.c
+++ b/src/f32-vbinary/gen/vmax-scalar-x4.c
@@ -19,7 +19,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vmax-sse-x4.c b/src/f32-vbinary/gen/vmax-sse-x4.c
index b676f42..8620139 100644
--- a/src/f32-vbinary/gen/vmax-sse-x4.c
+++ b/src/f32-vbinary/gen/vmax-sse-x4.c
@@ -20,7 +20,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vmax-sse-x8.c b/src/f32-vbinary/gen/vmax-sse-x8.c
index b6a2e23..7a506af 100644
--- a/src/f32-vbinary/gen/vmax-sse-x8.c
+++ b/src/f32-vbinary/gen/vmax-sse-x8.c
@@ -20,7 +20,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vmax-wasm-x1.c b/src/f32-vbinary/gen/vmax-wasm-x1.c
index 5ffa63e..b0f05b8 100644
--- a/src/f32-vbinary/gen/vmax-wasm-x1.c
+++ b/src/f32-vbinary/gen/vmax-wasm-x1.c
@@ -19,7 +19,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vmax-wasm-x2.c b/src/f32-vbinary/gen/vmax-wasm-x2.c
index 38f1df5..70bb55d 100644
--- a/src/f32-vbinary/gen/vmax-wasm-x2.c
+++ b/src/f32-vbinary/gen/vmax-wasm-x2.c
@@ -19,7 +19,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vmax-wasm-x4.c b/src/f32-vbinary/gen/vmax-wasm-x4.c
index 0b4c8ec..f8d36cc 100644
--- a/src/f32-vbinary/gen/vmax-wasm-x4.c
+++ b/src/f32-vbinary/gen/vmax-wasm-x4.c
@@ -19,7 +19,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vmaxc-avx-x16.c b/src/f32-vbinary/gen/vmaxc-avx-x16.c
index f6797e3..c2d7ce7 100644
--- a/src/f32-vbinary/gen/vmaxc-avx-x16.c
+++ b/src/f32-vbinary/gen/vmaxc-avx-x16.c
@@ -22,7 +22,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vmaxc-avx-x8.c b/src/f32-vbinary/gen/vmaxc-avx-x8.c
index 9488d5c..0c3c83f 100644
--- a/src/f32-vbinary/gen/vmaxc-avx-x8.c
+++ b/src/f32-vbinary/gen/vmaxc-avx-x8.c
@@ -22,7 +22,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vmaxc-avx512f-x16.c b/src/f32-vbinary/gen/vmaxc-avx512f-x16.c
index fd6624c..dee5815 100644
--- a/src/f32-vbinary/gen/vmaxc-avx512f-x16.c
+++ b/src/f32-vbinary/gen/vmaxc-avx512f-x16.c
@@ -21,7 +21,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vmaxc-avx512f-x32.c b/src/f32-vbinary/gen/vmaxc-avx512f-x32.c
index c8f5acf..5e4bf2a 100644
--- a/src/f32-vbinary/gen/vmaxc-avx512f-x32.c
+++ b/src/f32-vbinary/gen/vmaxc-avx512f-x32.c
@@ -21,7 +21,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vmaxc-neon-x4.c b/src/f32-vbinary/gen/vmaxc-neon-x4.c
index f0d31a9..2fd6e8b 100644
--- a/src/f32-vbinary/gen/vmaxc-neon-x4.c
+++ b/src/f32-vbinary/gen/vmaxc-neon-x4.c
@@ -20,7 +20,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vmaxc-neon-x8.c b/src/f32-vbinary/gen/vmaxc-neon-x8.c
index 3ae9776..22d95f9 100644
--- a/src/f32-vbinary/gen/vmaxc-neon-x8.c
+++ b/src/f32-vbinary/gen/vmaxc-neon-x8.c
@@ -20,7 +20,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vmaxc-psimd-x4.c b/src/f32-vbinary/gen/vmaxc-psimd-x4.c
index d720c19..3af8fa0 100644
--- a/src/f32-vbinary/gen/vmaxc-psimd-x4.c
+++ b/src/f32-vbinary/gen/vmaxc-psimd-x4.c
@@ -20,7 +20,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vmaxc-psimd-x8.c b/src/f32-vbinary/gen/vmaxc-psimd-x8.c
index aea9e1c..85f5c3d 100644
--- a/src/f32-vbinary/gen/vmaxc-psimd-x8.c
+++ b/src/f32-vbinary/gen/vmaxc-psimd-x8.c
@@ -20,7 +20,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vmaxc-scalar-x1.c b/src/f32-vbinary/gen/vmaxc-scalar-x1.c
index 0ddc681..f0386b2 100644
--- a/src/f32-vbinary/gen/vmaxc-scalar-x1.c
+++ b/src/f32-vbinary/gen/vmaxc-scalar-x1.c
@@ -19,7 +19,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vmaxc-scalar-x2.c b/src/f32-vbinary/gen/vmaxc-scalar-x2.c
index 7cb8550..1c46421 100644
--- a/src/f32-vbinary/gen/vmaxc-scalar-x2.c
+++ b/src/f32-vbinary/gen/vmaxc-scalar-x2.c
@@ -19,7 +19,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vmaxc-scalar-x4.c b/src/f32-vbinary/gen/vmaxc-scalar-x4.c
index fb04b69..f683c56 100644
--- a/src/f32-vbinary/gen/vmaxc-scalar-x4.c
+++ b/src/f32-vbinary/gen/vmaxc-scalar-x4.c
@@ -19,7 +19,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vmaxc-sse-x4.c b/src/f32-vbinary/gen/vmaxc-sse-x4.c
index b9a3c85..2702eff 100644
--- a/src/f32-vbinary/gen/vmaxc-sse-x4.c
+++ b/src/f32-vbinary/gen/vmaxc-sse-x4.c
@@ -20,7 +20,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vmaxc-sse-x8.c b/src/f32-vbinary/gen/vmaxc-sse-x8.c
index ef38289..642bfe6 100644
--- a/src/f32-vbinary/gen/vmaxc-sse-x8.c
+++ b/src/f32-vbinary/gen/vmaxc-sse-x8.c
@@ -20,7 +20,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vmaxc-wasm-x1.c b/src/f32-vbinary/gen/vmaxc-wasm-x1.c
index 3ac5488..974b235 100644
--- a/src/f32-vbinary/gen/vmaxc-wasm-x1.c
+++ b/src/f32-vbinary/gen/vmaxc-wasm-x1.c
@@ -19,7 +19,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vmaxc-wasm-x2.c b/src/f32-vbinary/gen/vmaxc-wasm-x2.c
index 3741206..4d7f50c 100644
--- a/src/f32-vbinary/gen/vmaxc-wasm-x2.c
+++ b/src/f32-vbinary/gen/vmaxc-wasm-x2.c
@@ -19,7 +19,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vmaxc-wasm-x4.c b/src/f32-vbinary/gen/vmaxc-wasm-x4.c
index 5a78b43..43f58fc 100644
--- a/src/f32-vbinary/gen/vmaxc-wasm-x4.c
+++ b/src/f32-vbinary/gen/vmaxc-wasm-x4.c
@@ -19,7 +19,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vmin-avx-x16.c b/src/f32-vbinary/gen/vmin-avx-x16.c
index dc4938c..67d8eb9 100644
--- a/src/f32-vbinary/gen/vmin-avx-x16.c
+++ b/src/f32-vbinary/gen/vmin-avx-x16.c
@@ -22,7 +22,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vmin-avx-x8.c b/src/f32-vbinary/gen/vmin-avx-x8.c
index 7d057f2..728d2b7 100644
--- a/src/f32-vbinary/gen/vmin-avx-x8.c
+++ b/src/f32-vbinary/gen/vmin-avx-x8.c
@@ -22,7 +22,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vmin-avx512f-x16.c b/src/f32-vbinary/gen/vmin-avx512f-x16.c
index e7e3660..1feb387 100644
--- a/src/f32-vbinary/gen/vmin-avx512f-x16.c
+++ b/src/f32-vbinary/gen/vmin-avx512f-x16.c
@@ -21,7 +21,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vmin-avx512f-x32.c b/src/f32-vbinary/gen/vmin-avx512f-x32.c
index f7520f6..c3c2aca 100644
--- a/src/f32-vbinary/gen/vmin-avx512f-x32.c
+++ b/src/f32-vbinary/gen/vmin-avx512f-x32.c
@@ -21,7 +21,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vmin-neon-x4.c b/src/f32-vbinary/gen/vmin-neon-x4.c
index 7243808..492a13b 100644
--- a/src/f32-vbinary/gen/vmin-neon-x4.c
+++ b/src/f32-vbinary/gen/vmin-neon-x4.c
@@ -20,7 +20,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vmin-neon-x8.c b/src/f32-vbinary/gen/vmin-neon-x8.c
index d07d64f..274cc88 100644
--- a/src/f32-vbinary/gen/vmin-neon-x8.c
+++ b/src/f32-vbinary/gen/vmin-neon-x8.c
@@ -20,7 +20,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vmin-psimd-x4.c b/src/f32-vbinary/gen/vmin-psimd-x4.c
index 5821bb8..7ca668e 100644
--- a/src/f32-vbinary/gen/vmin-psimd-x4.c
+++ b/src/f32-vbinary/gen/vmin-psimd-x4.c
@@ -20,7 +20,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vmin-psimd-x8.c b/src/f32-vbinary/gen/vmin-psimd-x8.c
index 4887b8e..0c24b75 100644
--- a/src/f32-vbinary/gen/vmin-psimd-x8.c
+++ b/src/f32-vbinary/gen/vmin-psimd-x8.c
@@ -20,7 +20,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vmin-scalar-x1.c b/src/f32-vbinary/gen/vmin-scalar-x1.c
index 1716792..a29f699 100644
--- a/src/f32-vbinary/gen/vmin-scalar-x1.c
+++ b/src/f32-vbinary/gen/vmin-scalar-x1.c
@@ -19,7 +19,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vmin-scalar-x2.c b/src/f32-vbinary/gen/vmin-scalar-x2.c
index 1246c29..f2fc1a1 100644
--- a/src/f32-vbinary/gen/vmin-scalar-x2.c
+++ b/src/f32-vbinary/gen/vmin-scalar-x2.c
@@ -19,7 +19,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vmin-scalar-x4.c b/src/f32-vbinary/gen/vmin-scalar-x4.c
index 270809e..2d454ea 100644
--- a/src/f32-vbinary/gen/vmin-scalar-x4.c
+++ b/src/f32-vbinary/gen/vmin-scalar-x4.c
@@ -19,7 +19,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vmin-sse-x4.c b/src/f32-vbinary/gen/vmin-sse-x4.c
index 948dafb..c9ca659 100644
--- a/src/f32-vbinary/gen/vmin-sse-x4.c
+++ b/src/f32-vbinary/gen/vmin-sse-x4.c
@@ -20,7 +20,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vmin-sse-x8.c b/src/f32-vbinary/gen/vmin-sse-x8.c
index 0d5c866..92770a6 100644
--- a/src/f32-vbinary/gen/vmin-sse-x8.c
+++ b/src/f32-vbinary/gen/vmin-sse-x8.c
@@ -20,7 +20,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vmin-wasm-x1.c b/src/f32-vbinary/gen/vmin-wasm-x1.c
index 0e5dc8f..cc6386a 100644
--- a/src/f32-vbinary/gen/vmin-wasm-x1.c
+++ b/src/f32-vbinary/gen/vmin-wasm-x1.c
@@ -19,7 +19,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vmin-wasm-x2.c b/src/f32-vbinary/gen/vmin-wasm-x2.c
index fa21510..79cacbd 100644
--- a/src/f32-vbinary/gen/vmin-wasm-x2.c
+++ b/src/f32-vbinary/gen/vmin-wasm-x2.c
@@ -19,7 +19,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vmin-wasm-x4.c b/src/f32-vbinary/gen/vmin-wasm-x4.c
index b44a39e..b63760a 100644
--- a/src/f32-vbinary/gen/vmin-wasm-x4.c
+++ b/src/f32-vbinary/gen/vmin-wasm-x4.c
@@ -19,7 +19,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vminc-avx-x16.c b/src/f32-vbinary/gen/vminc-avx-x16.c
index f69c66a..4523f46 100644
--- a/src/f32-vbinary/gen/vminc-avx-x16.c
+++ b/src/f32-vbinary/gen/vminc-avx-x16.c
@@ -22,7 +22,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vminc-avx-x8.c b/src/f32-vbinary/gen/vminc-avx-x8.c
index 9343a6e..5f09206 100644
--- a/src/f32-vbinary/gen/vminc-avx-x8.c
+++ b/src/f32-vbinary/gen/vminc-avx-x8.c
@@ -22,7 +22,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vminc-avx512f-x16.c b/src/f32-vbinary/gen/vminc-avx512f-x16.c
index 13b0446..29317f7 100644
--- a/src/f32-vbinary/gen/vminc-avx512f-x16.c
+++ b/src/f32-vbinary/gen/vminc-avx512f-x16.c
@@ -21,7 +21,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vminc-avx512f-x32.c b/src/f32-vbinary/gen/vminc-avx512f-x32.c
index a16e624..dd313af 100644
--- a/src/f32-vbinary/gen/vminc-avx512f-x32.c
+++ b/src/f32-vbinary/gen/vminc-avx512f-x32.c
@@ -21,7 +21,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vminc-neon-x4.c b/src/f32-vbinary/gen/vminc-neon-x4.c
index 2927cd3..59561bd 100644
--- a/src/f32-vbinary/gen/vminc-neon-x4.c
+++ b/src/f32-vbinary/gen/vminc-neon-x4.c
@@ -20,7 +20,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vminc-neon-x8.c b/src/f32-vbinary/gen/vminc-neon-x8.c
index c7d153a..2edfd8d 100644
--- a/src/f32-vbinary/gen/vminc-neon-x8.c
+++ b/src/f32-vbinary/gen/vminc-neon-x8.c
@@ -20,7 +20,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vminc-psimd-x4.c b/src/f32-vbinary/gen/vminc-psimd-x4.c
index a11a7e5..644efc6 100644
--- a/src/f32-vbinary/gen/vminc-psimd-x4.c
+++ b/src/f32-vbinary/gen/vminc-psimd-x4.c
@@ -20,7 +20,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vminc-psimd-x8.c b/src/f32-vbinary/gen/vminc-psimd-x8.c
index 4866308..b924e0c 100644
--- a/src/f32-vbinary/gen/vminc-psimd-x8.c
+++ b/src/f32-vbinary/gen/vminc-psimd-x8.c
@@ -20,7 +20,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vminc-scalar-x1.c b/src/f32-vbinary/gen/vminc-scalar-x1.c
index b8aeab8..f1eb3cb 100644
--- a/src/f32-vbinary/gen/vminc-scalar-x1.c
+++ b/src/f32-vbinary/gen/vminc-scalar-x1.c
@@ -19,7 +19,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vminc-scalar-x2.c b/src/f32-vbinary/gen/vminc-scalar-x2.c
index 07c4cc4..9118c94 100644
--- a/src/f32-vbinary/gen/vminc-scalar-x2.c
+++ b/src/f32-vbinary/gen/vminc-scalar-x2.c
@@ -19,7 +19,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vminc-scalar-x4.c b/src/f32-vbinary/gen/vminc-scalar-x4.c
index 9f5a38a..e6fa215 100644
--- a/src/f32-vbinary/gen/vminc-scalar-x4.c
+++ b/src/f32-vbinary/gen/vminc-scalar-x4.c
@@ -19,7 +19,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vminc-sse-x4.c b/src/f32-vbinary/gen/vminc-sse-x4.c
index f0ff610..4fac969 100644
--- a/src/f32-vbinary/gen/vminc-sse-x4.c
+++ b/src/f32-vbinary/gen/vminc-sse-x4.c
@@ -20,7 +20,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vminc-sse-x8.c b/src/f32-vbinary/gen/vminc-sse-x8.c
index 7af7e20..e3c5799 100644
--- a/src/f32-vbinary/gen/vminc-sse-x8.c
+++ b/src/f32-vbinary/gen/vminc-sse-x8.c
@@ -20,7 +20,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vminc-wasm-x1.c b/src/f32-vbinary/gen/vminc-wasm-x1.c
index 13179ed..a557465 100644
--- a/src/f32-vbinary/gen/vminc-wasm-x1.c
+++ b/src/f32-vbinary/gen/vminc-wasm-x1.c
@@ -19,7 +19,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vminc-wasm-x2.c b/src/f32-vbinary/gen/vminc-wasm-x2.c
index f2d6744..35ded66 100644
--- a/src/f32-vbinary/gen/vminc-wasm-x2.c
+++ b/src/f32-vbinary/gen/vminc-wasm-x2.c
@@ -19,7 +19,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vminc-wasm-x4.c b/src/f32-vbinary/gen/vminc-wasm-x4.c
index d6e3266..3a24bb5 100644
--- a/src/f32-vbinary/gen/vminc-wasm-x4.c
+++ b/src/f32-vbinary/gen/vminc-wasm-x4.c
@@ -19,7 +19,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_default_params params[restrict static 1])
+    const union xnn_f32_default_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vmul-minmax-avx-x16.c b/src/f32-vbinary/gen/vmul-minmax-avx-x16.c
index a51e024..01660f8 100644
--- a/src/f32-vbinary/gen/vmul-minmax-avx-x16.c
+++ b/src/f32-vbinary/gen/vmul-minmax-avx-x16.c
@@ -22,7 +22,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vmul-minmax-avx-x8.c b/src/f32-vbinary/gen/vmul-minmax-avx-x8.c
index a7877c3..0c2cc91 100644
--- a/src/f32-vbinary/gen/vmul-minmax-avx-x8.c
+++ b/src/f32-vbinary/gen/vmul-minmax-avx-x8.c
@@ -22,7 +22,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vmul-minmax-avx512f-x16.c b/src/f32-vbinary/gen/vmul-minmax-avx512f-x16.c
index 96514cd..209ebd1 100644
--- a/src/f32-vbinary/gen/vmul-minmax-avx512f-x16.c
+++ b/src/f32-vbinary/gen/vmul-minmax-avx512f-x16.c
@@ -21,7 +21,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vmul-minmax-avx512f-x32.c b/src/f32-vbinary/gen/vmul-minmax-avx512f-x32.c
index ef431de..3a047dc 100644
--- a/src/f32-vbinary/gen/vmul-minmax-avx512f-x32.c
+++ b/src/f32-vbinary/gen/vmul-minmax-avx512f-x32.c
@@ -21,7 +21,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vmul-minmax-neon-x4.c b/src/f32-vbinary/gen/vmul-minmax-neon-x4.c
index f836f03..5662ace 100644
--- a/src/f32-vbinary/gen/vmul-minmax-neon-x4.c
+++ b/src/f32-vbinary/gen/vmul-minmax-neon-x4.c
@@ -20,7 +20,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vmul-minmax-neon-x8.c b/src/f32-vbinary/gen/vmul-minmax-neon-x8.c
index a3d310b..fb2d7b7 100644
--- a/src/f32-vbinary/gen/vmul-minmax-neon-x8.c
+++ b/src/f32-vbinary/gen/vmul-minmax-neon-x8.c
@@ -20,7 +20,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vmul-minmax-psimd-x4.c b/src/f32-vbinary/gen/vmul-minmax-psimd-x4.c
index 89753b4..dba4c4f 100644
--- a/src/f32-vbinary/gen/vmul-minmax-psimd-x4.c
+++ b/src/f32-vbinary/gen/vmul-minmax-psimd-x4.c
@@ -20,7 +20,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vmul-minmax-psimd-x8.c b/src/f32-vbinary/gen/vmul-minmax-psimd-x8.c
index 36fb4cd..6bad747 100644
--- a/src/f32-vbinary/gen/vmul-minmax-psimd-x8.c
+++ b/src/f32-vbinary/gen/vmul-minmax-psimd-x8.c
@@ -20,7 +20,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vmul-minmax-scalar-x1.c b/src/f32-vbinary/gen/vmul-minmax-scalar-x1.c
index f0990f6..01f22c1 100644
--- a/src/f32-vbinary/gen/vmul-minmax-scalar-x1.c
+++ b/src/f32-vbinary/gen/vmul-minmax-scalar-x1.c
@@ -19,7 +19,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vmul-minmax-scalar-x2.c b/src/f32-vbinary/gen/vmul-minmax-scalar-x2.c
index e03a0f8..720ff1a 100644
--- a/src/f32-vbinary/gen/vmul-minmax-scalar-x2.c
+++ b/src/f32-vbinary/gen/vmul-minmax-scalar-x2.c
@@ -19,7 +19,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vmul-minmax-scalar-x4.c b/src/f32-vbinary/gen/vmul-minmax-scalar-x4.c
index dbd2db2..1c48260 100644
--- a/src/f32-vbinary/gen/vmul-minmax-scalar-x4.c
+++ b/src/f32-vbinary/gen/vmul-minmax-scalar-x4.c
@@ -19,7 +19,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vmul-minmax-sse-x4.c b/src/f32-vbinary/gen/vmul-minmax-sse-x4.c
index 42f8f5f..e500941 100644
--- a/src/f32-vbinary/gen/vmul-minmax-sse-x4.c
+++ b/src/f32-vbinary/gen/vmul-minmax-sse-x4.c
@@ -20,7 +20,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vmul-minmax-sse-x8.c b/src/f32-vbinary/gen/vmul-minmax-sse-x8.c
index 9631ef5..7c31867 100644
--- a/src/f32-vbinary/gen/vmul-minmax-sse-x8.c
+++ b/src/f32-vbinary/gen/vmul-minmax-sse-x8.c
@@ -20,7 +20,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vmul-minmax-wasm-x1.c b/src/f32-vbinary/gen/vmul-minmax-wasm-x1.c
index d230195..0a2a848 100644
--- a/src/f32-vbinary/gen/vmul-minmax-wasm-x1.c
+++ b/src/f32-vbinary/gen/vmul-minmax-wasm-x1.c
@@ -19,7 +19,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vmul-minmax-wasm-x2.c b/src/f32-vbinary/gen/vmul-minmax-wasm-x2.c
index 187c9f0..85e1075 100644
--- a/src/f32-vbinary/gen/vmul-minmax-wasm-x2.c
+++ b/src/f32-vbinary/gen/vmul-minmax-wasm-x2.c
@@ -19,7 +19,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vmul-minmax-wasm-x4.c b/src/f32-vbinary/gen/vmul-minmax-wasm-x4.c
index f2d468b..f71344c 100644
--- a/src/f32-vbinary/gen/vmul-minmax-wasm-x4.c
+++ b/src/f32-vbinary/gen/vmul-minmax-wasm-x4.c
@@ -19,7 +19,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vmulc-minmax-avx-x16.c b/src/f32-vbinary/gen/vmulc-minmax-avx-x16.c
index 62ba61c..a054201 100644
--- a/src/f32-vbinary/gen/vmulc-minmax-avx-x16.c
+++ b/src/f32-vbinary/gen/vmulc-minmax-avx-x16.c
@@ -22,7 +22,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vmulc-minmax-avx-x8.c b/src/f32-vbinary/gen/vmulc-minmax-avx-x8.c
index 736495d..07692ff 100644
--- a/src/f32-vbinary/gen/vmulc-minmax-avx-x8.c
+++ b/src/f32-vbinary/gen/vmulc-minmax-avx-x8.c
@@ -22,7 +22,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vmulc-minmax-avx512f-x16.c b/src/f32-vbinary/gen/vmulc-minmax-avx512f-x16.c
index 7eaea27..7c91298 100644
--- a/src/f32-vbinary/gen/vmulc-minmax-avx512f-x16.c
+++ b/src/f32-vbinary/gen/vmulc-minmax-avx512f-x16.c
@@ -21,7 +21,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vmulc-minmax-avx512f-x32.c b/src/f32-vbinary/gen/vmulc-minmax-avx512f-x32.c
index 51fea4d..0f77c38 100644
--- a/src/f32-vbinary/gen/vmulc-minmax-avx512f-x32.c
+++ b/src/f32-vbinary/gen/vmulc-minmax-avx512f-x32.c
@@ -21,7 +21,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vmulc-minmax-neon-x4.c b/src/f32-vbinary/gen/vmulc-minmax-neon-x4.c
index 7782e11..c150516 100644
--- a/src/f32-vbinary/gen/vmulc-minmax-neon-x4.c
+++ b/src/f32-vbinary/gen/vmulc-minmax-neon-x4.c
@@ -20,7 +20,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vmulc-minmax-neon-x8.c b/src/f32-vbinary/gen/vmulc-minmax-neon-x8.c
index f19dd92..f5d2580 100644
--- a/src/f32-vbinary/gen/vmulc-minmax-neon-x8.c
+++ b/src/f32-vbinary/gen/vmulc-minmax-neon-x8.c
@@ -20,7 +20,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vmulc-minmax-psimd-x4.c b/src/f32-vbinary/gen/vmulc-minmax-psimd-x4.c
index 15d5b68..1b2c989 100644
--- a/src/f32-vbinary/gen/vmulc-minmax-psimd-x4.c
+++ b/src/f32-vbinary/gen/vmulc-minmax-psimd-x4.c
@@ -20,7 +20,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vmulc-minmax-psimd-x8.c b/src/f32-vbinary/gen/vmulc-minmax-psimd-x8.c
index 70412ef..4c1c1a0 100644
--- a/src/f32-vbinary/gen/vmulc-minmax-psimd-x8.c
+++ b/src/f32-vbinary/gen/vmulc-minmax-psimd-x8.c
@@ -20,7 +20,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vmulc-minmax-scalar-x1.c b/src/f32-vbinary/gen/vmulc-minmax-scalar-x1.c
index 005b7c28..ffca7a7 100644
--- a/src/f32-vbinary/gen/vmulc-minmax-scalar-x1.c
+++ b/src/f32-vbinary/gen/vmulc-minmax-scalar-x1.c
@@ -19,7 +19,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vmulc-minmax-scalar-x2.c b/src/f32-vbinary/gen/vmulc-minmax-scalar-x2.c
index dd9f1ea..31dc83f 100644
--- a/src/f32-vbinary/gen/vmulc-minmax-scalar-x2.c
+++ b/src/f32-vbinary/gen/vmulc-minmax-scalar-x2.c
@@ -19,7 +19,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vmulc-minmax-scalar-x4.c b/src/f32-vbinary/gen/vmulc-minmax-scalar-x4.c
index c39a7bd..dfef131 100644
--- a/src/f32-vbinary/gen/vmulc-minmax-scalar-x4.c
+++ b/src/f32-vbinary/gen/vmulc-minmax-scalar-x4.c
@@ -19,7 +19,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vmulc-minmax-sse-x4.c b/src/f32-vbinary/gen/vmulc-minmax-sse-x4.c
index 4887488..19c9cb1 100644
--- a/src/f32-vbinary/gen/vmulc-minmax-sse-x4.c
+++ b/src/f32-vbinary/gen/vmulc-minmax-sse-x4.c
@@ -20,7 +20,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vmulc-minmax-sse-x8.c b/src/f32-vbinary/gen/vmulc-minmax-sse-x8.c
index 5be725a..a1fb4a7 100644
--- a/src/f32-vbinary/gen/vmulc-minmax-sse-x8.c
+++ b/src/f32-vbinary/gen/vmulc-minmax-sse-x8.c
@@ -20,7 +20,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vmulc-minmax-wasm-x1.c b/src/f32-vbinary/gen/vmulc-minmax-wasm-x1.c
index 20b61ff..6507dba 100644
--- a/src/f32-vbinary/gen/vmulc-minmax-wasm-x1.c
+++ b/src/f32-vbinary/gen/vmulc-minmax-wasm-x1.c
@@ -19,7 +19,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vmulc-minmax-wasm-x2.c b/src/f32-vbinary/gen/vmulc-minmax-wasm-x2.c
index 533101f..f76e59f 100644
--- a/src/f32-vbinary/gen/vmulc-minmax-wasm-x2.c
+++ b/src/f32-vbinary/gen/vmulc-minmax-wasm-x2.c
@@ -19,7 +19,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vmulc-minmax-wasm-x4.c b/src/f32-vbinary/gen/vmulc-minmax-wasm-x4.c
index bcdbee9..6f8be74 100644
--- a/src/f32-vbinary/gen/vmulc-minmax-wasm-x4.c
+++ b/src/f32-vbinary/gen/vmulc-minmax-wasm-x4.c
@@ -19,7 +19,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vrdivc-minmax-avx-x16.c b/src/f32-vbinary/gen/vrdivc-minmax-avx-x16.c
index 653eb1a..3be3723 100644
--- a/src/f32-vbinary/gen/vrdivc-minmax-avx-x16.c
+++ b/src/f32-vbinary/gen/vrdivc-minmax-avx-x16.c
@@ -22,7 +22,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vrdivc-minmax-avx-x8.c b/src/f32-vbinary/gen/vrdivc-minmax-avx-x8.c
index ed2350a..c7ae348 100644
--- a/src/f32-vbinary/gen/vrdivc-minmax-avx-x8.c
+++ b/src/f32-vbinary/gen/vrdivc-minmax-avx-x8.c
@@ -22,7 +22,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vrdivc-minmax-avx512f-x16.c b/src/f32-vbinary/gen/vrdivc-minmax-avx512f-x16.c
index 04f9506..5216232 100644
--- a/src/f32-vbinary/gen/vrdivc-minmax-avx512f-x16.c
+++ b/src/f32-vbinary/gen/vrdivc-minmax-avx512f-x16.c
@@ -21,7 +21,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vrdivc-minmax-avx512f-x32.c b/src/f32-vbinary/gen/vrdivc-minmax-avx512f-x32.c
index 27a66f0..c5eb881 100644
--- a/src/f32-vbinary/gen/vrdivc-minmax-avx512f-x32.c
+++ b/src/f32-vbinary/gen/vrdivc-minmax-avx512f-x32.c
@@ -21,7 +21,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vrdivc-minmax-neon-x4.c b/src/f32-vbinary/gen/vrdivc-minmax-neon-x4.c
index 089fc74..7414979 100644
--- a/src/f32-vbinary/gen/vrdivc-minmax-neon-x4.c
+++ b/src/f32-vbinary/gen/vrdivc-minmax-neon-x4.c
@@ -20,7 +20,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vrdivc-minmax-neon-x8.c b/src/f32-vbinary/gen/vrdivc-minmax-neon-x8.c
index 341835f..6b9f868 100644
--- a/src/f32-vbinary/gen/vrdivc-minmax-neon-x8.c
+++ b/src/f32-vbinary/gen/vrdivc-minmax-neon-x8.c
@@ -20,7 +20,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vrdivc-minmax-psimd-x4.c b/src/f32-vbinary/gen/vrdivc-minmax-psimd-x4.c
index 0db3288..8a98876 100644
--- a/src/f32-vbinary/gen/vrdivc-minmax-psimd-x4.c
+++ b/src/f32-vbinary/gen/vrdivc-minmax-psimd-x4.c
@@ -20,7 +20,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vrdivc-minmax-psimd-x8.c b/src/f32-vbinary/gen/vrdivc-minmax-psimd-x8.c
index b03c4f5..d408cbc 100644
--- a/src/f32-vbinary/gen/vrdivc-minmax-psimd-x8.c
+++ b/src/f32-vbinary/gen/vrdivc-minmax-psimd-x8.c
@@ -20,7 +20,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vrdivc-minmax-scalar-x1.c b/src/f32-vbinary/gen/vrdivc-minmax-scalar-x1.c
index 7de486e..b49204a 100644
--- a/src/f32-vbinary/gen/vrdivc-minmax-scalar-x1.c
+++ b/src/f32-vbinary/gen/vrdivc-minmax-scalar-x1.c
@@ -19,7 +19,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vrdivc-minmax-scalar-x2.c b/src/f32-vbinary/gen/vrdivc-minmax-scalar-x2.c
index 26856f0..0c53873 100644
--- a/src/f32-vbinary/gen/vrdivc-minmax-scalar-x2.c
+++ b/src/f32-vbinary/gen/vrdivc-minmax-scalar-x2.c
@@ -19,7 +19,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vrdivc-minmax-scalar-x4.c b/src/f32-vbinary/gen/vrdivc-minmax-scalar-x4.c
index 26a8bd9..e27237f 100644
--- a/src/f32-vbinary/gen/vrdivc-minmax-scalar-x4.c
+++ b/src/f32-vbinary/gen/vrdivc-minmax-scalar-x4.c
@@ -19,7 +19,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vrdivc-minmax-sse-x4.c b/src/f32-vbinary/gen/vrdivc-minmax-sse-x4.c
index 36865b9..51f0811 100644
--- a/src/f32-vbinary/gen/vrdivc-minmax-sse-x4.c
+++ b/src/f32-vbinary/gen/vrdivc-minmax-sse-x4.c
@@ -20,7 +20,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vrdivc-minmax-sse-x8.c b/src/f32-vbinary/gen/vrdivc-minmax-sse-x8.c
index 793729d..48eb741 100644
--- a/src/f32-vbinary/gen/vrdivc-minmax-sse-x8.c
+++ b/src/f32-vbinary/gen/vrdivc-minmax-sse-x8.c
@@ -20,7 +20,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vrdivc-minmax-wasm-x1.c b/src/f32-vbinary/gen/vrdivc-minmax-wasm-x1.c
index 2013103..63072ae 100644
--- a/src/f32-vbinary/gen/vrdivc-minmax-wasm-x1.c
+++ b/src/f32-vbinary/gen/vrdivc-minmax-wasm-x1.c
@@ -19,7 +19,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vrdivc-minmax-wasm-x2.c b/src/f32-vbinary/gen/vrdivc-minmax-wasm-x2.c
index 5e47615..6d2dc38 100644
--- a/src/f32-vbinary/gen/vrdivc-minmax-wasm-x2.c
+++ b/src/f32-vbinary/gen/vrdivc-minmax-wasm-x2.c
@@ -19,7 +19,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vrdivc-minmax-wasm-x4.c b/src/f32-vbinary/gen/vrdivc-minmax-wasm-x4.c
index 4e8bd1a..e19c0e8 100644
--- a/src/f32-vbinary/gen/vrdivc-minmax-wasm-x4.c
+++ b/src/f32-vbinary/gen/vrdivc-minmax-wasm-x4.c
@@ -19,7 +19,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vrsubc-minmax-avx-x16.c b/src/f32-vbinary/gen/vrsubc-minmax-avx-x16.c
index 1bf1fe4..5789c9c 100644
--- a/src/f32-vbinary/gen/vrsubc-minmax-avx-x16.c
+++ b/src/f32-vbinary/gen/vrsubc-minmax-avx-x16.c
@@ -22,7 +22,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vrsubc-minmax-avx-x8.c b/src/f32-vbinary/gen/vrsubc-minmax-avx-x8.c
index d1b7bbd..067ea70 100644
--- a/src/f32-vbinary/gen/vrsubc-minmax-avx-x8.c
+++ b/src/f32-vbinary/gen/vrsubc-minmax-avx-x8.c
@@ -22,7 +22,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vrsubc-minmax-avx512f-x16.c b/src/f32-vbinary/gen/vrsubc-minmax-avx512f-x16.c
index c158285..ce4f27b 100644
--- a/src/f32-vbinary/gen/vrsubc-minmax-avx512f-x16.c
+++ b/src/f32-vbinary/gen/vrsubc-minmax-avx512f-x16.c
@@ -21,7 +21,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vrsubc-minmax-avx512f-x32.c b/src/f32-vbinary/gen/vrsubc-minmax-avx512f-x32.c
index 110d4b8..a160607 100644
--- a/src/f32-vbinary/gen/vrsubc-minmax-avx512f-x32.c
+++ b/src/f32-vbinary/gen/vrsubc-minmax-avx512f-x32.c
@@ -21,7 +21,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vrsubc-minmax-neon-x4.c b/src/f32-vbinary/gen/vrsubc-minmax-neon-x4.c
index 517516a..9b69fcb 100644
--- a/src/f32-vbinary/gen/vrsubc-minmax-neon-x4.c
+++ b/src/f32-vbinary/gen/vrsubc-minmax-neon-x4.c
@@ -20,7 +20,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vrsubc-minmax-neon-x8.c b/src/f32-vbinary/gen/vrsubc-minmax-neon-x8.c
index fdd6b25..a17eba8 100644
--- a/src/f32-vbinary/gen/vrsubc-minmax-neon-x8.c
+++ b/src/f32-vbinary/gen/vrsubc-minmax-neon-x8.c
@@ -20,7 +20,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vrsubc-minmax-psimd-x4.c b/src/f32-vbinary/gen/vrsubc-minmax-psimd-x4.c
index 01e3c41..d309c97 100644
--- a/src/f32-vbinary/gen/vrsubc-minmax-psimd-x4.c
+++ b/src/f32-vbinary/gen/vrsubc-minmax-psimd-x4.c
@@ -20,7 +20,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vrsubc-minmax-psimd-x8.c b/src/f32-vbinary/gen/vrsubc-minmax-psimd-x8.c
index 8aa2363..6e8c0f5 100644
--- a/src/f32-vbinary/gen/vrsubc-minmax-psimd-x8.c
+++ b/src/f32-vbinary/gen/vrsubc-minmax-psimd-x8.c
@@ -20,7 +20,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vrsubc-minmax-scalar-x1.c b/src/f32-vbinary/gen/vrsubc-minmax-scalar-x1.c
index 785943b..d7463cb 100644
--- a/src/f32-vbinary/gen/vrsubc-minmax-scalar-x1.c
+++ b/src/f32-vbinary/gen/vrsubc-minmax-scalar-x1.c
@@ -19,7 +19,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vrsubc-minmax-scalar-x2.c b/src/f32-vbinary/gen/vrsubc-minmax-scalar-x2.c
index 5e975f5..e06a755 100644
--- a/src/f32-vbinary/gen/vrsubc-minmax-scalar-x2.c
+++ b/src/f32-vbinary/gen/vrsubc-minmax-scalar-x2.c
@@ -19,7 +19,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vrsubc-minmax-scalar-x4.c b/src/f32-vbinary/gen/vrsubc-minmax-scalar-x4.c
index b029113..6a999c1 100644
--- a/src/f32-vbinary/gen/vrsubc-minmax-scalar-x4.c
+++ b/src/f32-vbinary/gen/vrsubc-minmax-scalar-x4.c
@@ -19,7 +19,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vrsubc-minmax-sse-x4.c b/src/f32-vbinary/gen/vrsubc-minmax-sse-x4.c
index e8e944b..a9c0df1 100644
--- a/src/f32-vbinary/gen/vrsubc-minmax-sse-x4.c
+++ b/src/f32-vbinary/gen/vrsubc-minmax-sse-x4.c
@@ -20,7 +20,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vrsubc-minmax-sse-x8.c b/src/f32-vbinary/gen/vrsubc-minmax-sse-x8.c
index 75f2a44..7be1c46 100644
--- a/src/f32-vbinary/gen/vrsubc-minmax-sse-x8.c
+++ b/src/f32-vbinary/gen/vrsubc-minmax-sse-x8.c
@@ -20,7 +20,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vrsubc-minmax-wasm-x1.c b/src/f32-vbinary/gen/vrsubc-minmax-wasm-x1.c
index d844d6d..3ee3d12 100644
--- a/src/f32-vbinary/gen/vrsubc-minmax-wasm-x1.c
+++ b/src/f32-vbinary/gen/vrsubc-minmax-wasm-x1.c
@@ -19,7 +19,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vrsubc-minmax-wasm-x2.c b/src/f32-vbinary/gen/vrsubc-minmax-wasm-x2.c
index 8931015..e58d2f1 100644
--- a/src/f32-vbinary/gen/vrsubc-minmax-wasm-x2.c
+++ b/src/f32-vbinary/gen/vrsubc-minmax-wasm-x2.c
@@ -19,7 +19,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vrsubc-minmax-wasm-x4.c b/src/f32-vbinary/gen/vrsubc-minmax-wasm-x4.c
index 1735af2..c69c285 100644
--- a/src/f32-vbinary/gen/vrsubc-minmax-wasm-x4.c
+++ b/src/f32-vbinary/gen/vrsubc-minmax-wasm-x4.c
@@ -19,7 +19,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vsub-minmax-avx-x16.c b/src/f32-vbinary/gen/vsub-minmax-avx-x16.c
index 386aca3..ff72f26 100644
--- a/src/f32-vbinary/gen/vsub-minmax-avx-x16.c
+++ b/src/f32-vbinary/gen/vsub-minmax-avx-x16.c
@@ -22,7 +22,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vsub-minmax-avx-x8.c b/src/f32-vbinary/gen/vsub-minmax-avx-x8.c
index cb063fe..7504d94 100644
--- a/src/f32-vbinary/gen/vsub-minmax-avx-x8.c
+++ b/src/f32-vbinary/gen/vsub-minmax-avx-x8.c
@@ -22,7 +22,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vsub-minmax-avx512f-x16.c b/src/f32-vbinary/gen/vsub-minmax-avx512f-x16.c
index eb639dd..2bf7b7f 100644
--- a/src/f32-vbinary/gen/vsub-minmax-avx512f-x16.c
+++ b/src/f32-vbinary/gen/vsub-minmax-avx512f-x16.c
@@ -21,7 +21,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vsub-minmax-avx512f-x32.c b/src/f32-vbinary/gen/vsub-minmax-avx512f-x32.c
index 40515e5..8311cb7 100644
--- a/src/f32-vbinary/gen/vsub-minmax-avx512f-x32.c
+++ b/src/f32-vbinary/gen/vsub-minmax-avx512f-x32.c
@@ -21,7 +21,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vsub-minmax-neon-x4.c b/src/f32-vbinary/gen/vsub-minmax-neon-x4.c
index 8a55ada..158fed2 100644
--- a/src/f32-vbinary/gen/vsub-minmax-neon-x4.c
+++ b/src/f32-vbinary/gen/vsub-minmax-neon-x4.c
@@ -20,7 +20,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vsub-minmax-neon-x8.c b/src/f32-vbinary/gen/vsub-minmax-neon-x8.c
index 04ff548..fd0cdbd 100644
--- a/src/f32-vbinary/gen/vsub-minmax-neon-x8.c
+++ b/src/f32-vbinary/gen/vsub-minmax-neon-x8.c
@@ -20,7 +20,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vsub-minmax-psimd-x4.c b/src/f32-vbinary/gen/vsub-minmax-psimd-x4.c
index 670457b..04443b2 100644
--- a/src/f32-vbinary/gen/vsub-minmax-psimd-x4.c
+++ b/src/f32-vbinary/gen/vsub-minmax-psimd-x4.c
@@ -20,7 +20,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vsub-minmax-psimd-x8.c b/src/f32-vbinary/gen/vsub-minmax-psimd-x8.c
index 505e639..b11fbb2 100644
--- a/src/f32-vbinary/gen/vsub-minmax-psimd-x8.c
+++ b/src/f32-vbinary/gen/vsub-minmax-psimd-x8.c
@@ -20,7 +20,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vsub-minmax-scalar-x1.c b/src/f32-vbinary/gen/vsub-minmax-scalar-x1.c
index d39e066..1f251e2 100644
--- a/src/f32-vbinary/gen/vsub-minmax-scalar-x1.c
+++ b/src/f32-vbinary/gen/vsub-minmax-scalar-x1.c
@@ -19,7 +19,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vsub-minmax-scalar-x2.c b/src/f32-vbinary/gen/vsub-minmax-scalar-x2.c
index 52f9de1..27c3d69 100644
--- a/src/f32-vbinary/gen/vsub-minmax-scalar-x2.c
+++ b/src/f32-vbinary/gen/vsub-minmax-scalar-x2.c
@@ -19,7 +19,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vsub-minmax-scalar-x4.c b/src/f32-vbinary/gen/vsub-minmax-scalar-x4.c
index 385fe9c..33c0b97 100644
--- a/src/f32-vbinary/gen/vsub-minmax-scalar-x4.c
+++ b/src/f32-vbinary/gen/vsub-minmax-scalar-x4.c
@@ -19,7 +19,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vsub-minmax-sse-x4.c b/src/f32-vbinary/gen/vsub-minmax-sse-x4.c
index 29b54c0..37268fc 100644
--- a/src/f32-vbinary/gen/vsub-minmax-sse-x4.c
+++ b/src/f32-vbinary/gen/vsub-minmax-sse-x4.c
@@ -20,7 +20,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vsub-minmax-sse-x8.c b/src/f32-vbinary/gen/vsub-minmax-sse-x8.c
index 24d2acc..ff18665 100644
--- a/src/f32-vbinary/gen/vsub-minmax-sse-x8.c
+++ b/src/f32-vbinary/gen/vsub-minmax-sse-x8.c
@@ -20,7 +20,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vsub-minmax-wasm-x1.c b/src/f32-vbinary/gen/vsub-minmax-wasm-x1.c
index 13b0c7d..32b5b99 100644
--- a/src/f32-vbinary/gen/vsub-minmax-wasm-x1.c
+++ b/src/f32-vbinary/gen/vsub-minmax-wasm-x1.c
@@ -19,7 +19,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vsub-minmax-wasm-x2.c b/src/f32-vbinary/gen/vsub-minmax-wasm-x2.c
index c76fdee..6ac500c 100644
--- a/src/f32-vbinary/gen/vsub-minmax-wasm-x2.c
+++ b/src/f32-vbinary/gen/vsub-minmax-wasm-x2.c
@@ -19,7 +19,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vsub-minmax-wasm-x4.c b/src/f32-vbinary/gen/vsub-minmax-wasm-x4.c
index 616cfc5..ddedd13 100644
--- a/src/f32-vbinary/gen/vsub-minmax-wasm-x4.c
+++ b/src/f32-vbinary/gen/vsub-minmax-wasm-x4.c
@@ -19,7 +19,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vsubc-minmax-avx-x16.c b/src/f32-vbinary/gen/vsubc-minmax-avx-x16.c
index 6483a19..dc876a7 100644
--- a/src/f32-vbinary/gen/vsubc-minmax-avx-x16.c
+++ b/src/f32-vbinary/gen/vsubc-minmax-avx-x16.c
@@ -22,7 +22,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vsubc-minmax-avx-x8.c b/src/f32-vbinary/gen/vsubc-minmax-avx-x8.c
index 192096f..76e973a 100644
--- a/src/f32-vbinary/gen/vsubc-minmax-avx-x8.c
+++ b/src/f32-vbinary/gen/vsubc-minmax-avx-x8.c
@@ -22,7 +22,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vsubc-minmax-avx512f-x16.c b/src/f32-vbinary/gen/vsubc-minmax-avx512f-x16.c
index 71a9fcf..003eef5 100644
--- a/src/f32-vbinary/gen/vsubc-minmax-avx512f-x16.c
+++ b/src/f32-vbinary/gen/vsubc-minmax-avx512f-x16.c
@@ -21,7 +21,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vsubc-minmax-avx512f-x32.c b/src/f32-vbinary/gen/vsubc-minmax-avx512f-x32.c
index bf4354e..d7db19c 100644
--- a/src/f32-vbinary/gen/vsubc-minmax-avx512f-x32.c
+++ b/src/f32-vbinary/gen/vsubc-minmax-avx512f-x32.c
@@ -21,7 +21,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vsubc-minmax-neon-x4.c b/src/f32-vbinary/gen/vsubc-minmax-neon-x4.c
index 0ffcc23..3bb40ca 100644
--- a/src/f32-vbinary/gen/vsubc-minmax-neon-x4.c
+++ b/src/f32-vbinary/gen/vsubc-minmax-neon-x4.c
@@ -20,7 +20,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vsubc-minmax-neon-x8.c b/src/f32-vbinary/gen/vsubc-minmax-neon-x8.c
index 09d9f0f..bace46b 100644
--- a/src/f32-vbinary/gen/vsubc-minmax-neon-x8.c
+++ b/src/f32-vbinary/gen/vsubc-minmax-neon-x8.c
@@ -20,7 +20,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vsubc-minmax-psimd-x4.c b/src/f32-vbinary/gen/vsubc-minmax-psimd-x4.c
index feb9c88..656b7ce 100644
--- a/src/f32-vbinary/gen/vsubc-minmax-psimd-x4.c
+++ b/src/f32-vbinary/gen/vsubc-minmax-psimd-x4.c
@@ -20,7 +20,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vsubc-minmax-psimd-x8.c b/src/f32-vbinary/gen/vsubc-minmax-psimd-x8.c
index 3206be9..135fe47 100644
--- a/src/f32-vbinary/gen/vsubc-minmax-psimd-x8.c
+++ b/src/f32-vbinary/gen/vsubc-minmax-psimd-x8.c
@@ -20,7 +20,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vsubc-minmax-scalar-x1.c b/src/f32-vbinary/gen/vsubc-minmax-scalar-x1.c
index a476df5..ed2bb78 100644
--- a/src/f32-vbinary/gen/vsubc-minmax-scalar-x1.c
+++ b/src/f32-vbinary/gen/vsubc-minmax-scalar-x1.c
@@ -19,7 +19,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vsubc-minmax-scalar-x2.c b/src/f32-vbinary/gen/vsubc-minmax-scalar-x2.c
index 8efb9b1..393eeb1 100644
--- a/src/f32-vbinary/gen/vsubc-minmax-scalar-x2.c
+++ b/src/f32-vbinary/gen/vsubc-minmax-scalar-x2.c
@@ -19,7 +19,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vsubc-minmax-scalar-x4.c b/src/f32-vbinary/gen/vsubc-minmax-scalar-x4.c
index 9a61698..b8bde24 100644
--- a/src/f32-vbinary/gen/vsubc-minmax-scalar-x4.c
+++ b/src/f32-vbinary/gen/vsubc-minmax-scalar-x4.c
@@ -19,7 +19,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vsubc-minmax-sse-x4.c b/src/f32-vbinary/gen/vsubc-minmax-sse-x4.c
index 09c5b3a..b404ad4 100644
--- a/src/f32-vbinary/gen/vsubc-minmax-sse-x4.c
+++ b/src/f32-vbinary/gen/vsubc-minmax-sse-x4.c
@@ -20,7 +20,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vsubc-minmax-sse-x8.c b/src/f32-vbinary/gen/vsubc-minmax-sse-x8.c
index bc8631d..4db9df9 100644
--- a/src/f32-vbinary/gen/vsubc-minmax-sse-x8.c
+++ b/src/f32-vbinary/gen/vsubc-minmax-sse-x8.c
@@ -20,7 +20,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vsubc-minmax-wasm-x1.c b/src/f32-vbinary/gen/vsubc-minmax-wasm-x1.c
index ed667c4..1a47366 100644
--- a/src/f32-vbinary/gen/vsubc-minmax-wasm-x1.c
+++ b/src/f32-vbinary/gen/vsubc-minmax-wasm-x1.c
@@ -19,7 +19,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vsubc-minmax-wasm-x2.c b/src/f32-vbinary/gen/vsubc-minmax-wasm-x2.c
index effabcf..c219eca 100644
--- a/src/f32-vbinary/gen/vsubc-minmax-wasm-x2.c
+++ b/src/f32-vbinary/gen/vsubc-minmax-wasm-x2.c
@@ -19,7 +19,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/gen/vsubc-minmax-wasm-x4.c b/src/f32-vbinary/gen/vsubc-minmax-wasm-x4.c
index 8787a94..21c60b4 100644
--- a/src/f32-vbinary/gen/vsubc-minmax-wasm-x4.c
+++ b/src/f32-vbinary/gen/vsubc-minmax-wasm-x4.c
@@ -19,7 +19,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/vop-avx.c.in b/src/f32-vbinary/vop-avx.c.in
index 0efcdfc..7863bec 100644
--- a/src/f32-vbinary/vop-avx.c.in
+++ b/src/f32-vbinary/vop-avx.c.in
@@ -33,7 +33,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union ${PARAMS} params[restrict static 1])
+    const union ${PARAMS} params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/vop-avx512f.c.in b/src/f32-vbinary/vop-avx512f.c.in
index 83dab2d..f36b303 100644
--- a/src/f32-vbinary/vop-avx512f.c.in
+++ b/src/f32-vbinary/vop-avx512f.c.in
@@ -32,7 +32,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union ${PARAMS} params[restrict static 1])
+    const union ${PARAMS} params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/vop-neon.c.in b/src/f32-vbinary/vop-neon.c.in
index 90d67e7..bd95cb4 100644
--- a/src/f32-vbinary/vop-neon.c.in
+++ b/src/f32-vbinary/vop-neon.c.in
@@ -31,7 +31,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union ${PARAMS} params[restrict static 1])
+    const union ${PARAMS} params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/vop-psimd.c.in b/src/f32-vbinary/vop-psimd.c.in
index 4635d7c..9382661 100644
--- a/src/f32-vbinary/vop-psimd.c.in
+++ b/src/f32-vbinary/vop-psimd.c.in
@@ -31,7 +31,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union ${PARAMS} params[restrict static 1])
+    const union ${PARAMS} params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/vop-scalar.c.in b/src/f32-vbinary/vop-scalar.c.in
index e0f16d4..dabe3a0 100644
--- a/src/f32-vbinary/vop-scalar.c.in
+++ b/src/f32-vbinary/vop-scalar.c.in
@@ -31,7 +31,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union ${PARAMS} params[restrict static 1])
+    const union ${PARAMS} params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/vop-sse.c.in b/src/f32-vbinary/vop-sse.c.in
index 4a9af13..e0425d2 100644
--- a/src/f32-vbinary/vop-sse.c.in
+++ b/src/f32-vbinary/vop-sse.c.in
@@ -31,7 +31,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union ${PARAMS} params[restrict static 1])
+    const union ${PARAMS} params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/vopc-avx.c.in b/src/f32-vbinary/vopc-avx.c.in
index 3076e6c..380b1b8 100644
--- a/src/f32-vbinary/vopc-avx.c.in
+++ b/src/f32-vbinary/vopc-avx.c.in
@@ -35,7 +35,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union ${PARAMS} params[restrict static 1])
+    const union ${PARAMS} params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/vopc-avx512f.c.in b/src/f32-vbinary/vopc-avx512f.c.in
index 25839af..6460ebe 100644
--- a/src/f32-vbinary/vopc-avx512f.c.in
+++ b/src/f32-vbinary/vopc-avx512f.c.in
@@ -34,7 +34,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union ${PARAMS} params[restrict static 1])
+    const union ${PARAMS} params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/vopc-neon.c.in b/src/f32-vbinary/vopc-neon.c.in
index b89c9fe..05f830c 100644
--- a/src/f32-vbinary/vopc-neon.c.in
+++ b/src/f32-vbinary/vopc-neon.c.in
@@ -33,7 +33,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union ${PARAMS} params[restrict static 1])
+    const union ${PARAMS} params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/vopc-psimd.c.in b/src/f32-vbinary/vopc-psimd.c.in
index 8681223..1fad031 100644
--- a/src/f32-vbinary/vopc-psimd.c.in
+++ b/src/f32-vbinary/vopc-psimd.c.in
@@ -33,7 +33,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union ${PARAMS} params[restrict static 1])
+    const union ${PARAMS} params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/vopc-scalar.c.in b/src/f32-vbinary/vopc-scalar.c.in
index 52270f2..cf65499 100644
--- a/src/f32-vbinary/vopc-scalar.c.in
+++ b/src/f32-vbinary/vopc-scalar.c.in
@@ -33,7 +33,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union ${PARAMS} params[restrict static 1])
+    const union ${PARAMS} params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vbinary/vopc-sse.c.in b/src/f32-vbinary/vopc-sse.c.in
index 6270d92..75fb3fe 100644
--- a/src/f32-vbinary/vopc-sse.c.in
+++ b/src/f32-vbinary/vopc-sse.c.in
@@ -33,7 +33,7 @@
     const float* a,
     const float* b,
     float* y,
-    const union ${PARAMS} params[restrict static 1])
+    const union ${PARAMS} params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-vmulcaddc/gen/c1-minmax-scalar-2x.c b/src/f32-vmulcaddc/gen/c1-minmax-scalar-2x.c
index 0a5e550..cbcec04 100644
--- a/src/f32-vmulcaddc/gen/c1-minmax-scalar-2x.c
+++ b/src/f32-vmulcaddc/gen/c1-minmax-scalar-2x.c
@@ -21,7 +21,7 @@
     const float*restrict weights,
     float*restrict output,
     size_t output_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(rows != 0);
   assert(channels != 0);
diff --git a/src/f32-vmulcaddc/gen/c1-minmax-wasm-2x.c b/src/f32-vmulcaddc/gen/c1-minmax-wasm-2x.c
index bd7ecec..a6ef534 100644
--- a/src/f32-vmulcaddc/gen/c1-minmax-wasm-2x.c
+++ b/src/f32-vmulcaddc/gen/c1-minmax-wasm-2x.c
@@ -21,7 +21,7 @@
     const float*restrict weights,
     float*restrict output,
     size_t output_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(rows != 0);
   assert(channels != 0);
diff --git a/src/f32-vmulcaddc/gen/c2-minmax-scalar-2x.c b/src/f32-vmulcaddc/gen/c2-minmax-scalar-2x.c
index 92302d0..371d86d 100644
--- a/src/f32-vmulcaddc/gen/c2-minmax-scalar-2x.c
+++ b/src/f32-vmulcaddc/gen/c2-minmax-scalar-2x.c
@@ -21,7 +21,7 @@
     const float*restrict weights,
     float*restrict output,
     size_t output_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(rows != 0);
   assert(channels != 0);
diff --git a/src/f32-vmulcaddc/gen/c2-minmax-wasm-2x.c b/src/f32-vmulcaddc/gen/c2-minmax-wasm-2x.c
index 8949bd7..293c1b8 100644
--- a/src/f32-vmulcaddc/gen/c2-minmax-wasm-2x.c
+++ b/src/f32-vmulcaddc/gen/c2-minmax-wasm-2x.c
@@ -21,7 +21,7 @@
     const float*restrict weights,
     float*restrict output,
     size_t output_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(rows != 0);
   assert(channels != 0);
diff --git a/src/f32-vmulcaddc/gen/c4-minmax-neon-2x.c b/src/f32-vmulcaddc/gen/c4-minmax-neon-2x.c
index 647de0c..2b4e240 100644
--- a/src/f32-vmulcaddc/gen/c4-minmax-neon-2x.c
+++ b/src/f32-vmulcaddc/gen/c4-minmax-neon-2x.c
@@ -23,7 +23,7 @@
     const float*restrict weights,
     float*restrict output,
     size_t output_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(rows != 0);
   assert(channels != 0);
diff --git a/src/f32-vmulcaddc/gen/c4-minmax-neonfma-2x.c b/src/f32-vmulcaddc/gen/c4-minmax-neonfma-2x.c
index 888e7ad..4f54965 100644
--- a/src/f32-vmulcaddc/gen/c4-minmax-neonfma-2x.c
+++ b/src/f32-vmulcaddc/gen/c4-minmax-neonfma-2x.c
@@ -23,7 +23,7 @@
     const float*restrict weights,
     float*restrict output,
     size_t output_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(rows != 0);
   assert(channels != 0);
diff --git a/src/f32-vmulcaddc/gen/c4-minmax-psimd-2x.c b/src/f32-vmulcaddc/gen/c4-minmax-psimd-2x.c
index aedf7fc..972896e 100644
--- a/src/f32-vmulcaddc/gen/c4-minmax-psimd-2x.c
+++ b/src/f32-vmulcaddc/gen/c4-minmax-psimd-2x.c
@@ -23,7 +23,7 @@
     const float*restrict weights,
     float*restrict output,
     size_t output_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(rows != 0);
   assert(channels != 0);
diff --git a/src/f32-vmulcaddc/gen/c4-minmax-scalar-2x.c b/src/f32-vmulcaddc/gen/c4-minmax-scalar-2x.c
index cba7972..22ded11 100644
--- a/src/f32-vmulcaddc/gen/c4-minmax-scalar-2x.c
+++ b/src/f32-vmulcaddc/gen/c4-minmax-scalar-2x.c
@@ -21,7 +21,7 @@
     const float*restrict weights,
     float*restrict output,
     size_t output_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(rows != 0);
   assert(channels != 0);
diff --git a/src/f32-vmulcaddc/gen/c4-minmax-sse-2x.c b/src/f32-vmulcaddc/gen/c4-minmax-sse-2x.c
index 2a8dfd9..b14086a 100644
--- a/src/f32-vmulcaddc/gen/c4-minmax-sse-2x.c
+++ b/src/f32-vmulcaddc/gen/c4-minmax-sse-2x.c
@@ -23,7 +23,7 @@
     const float*restrict weights,
     float*restrict output,
     size_t output_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(rows != 0);
   assert(channels != 0);
diff --git a/src/f32-vmulcaddc/gen/c4-minmax-wasm-2x.c b/src/f32-vmulcaddc/gen/c4-minmax-wasm-2x.c
index 8af3825..71a2ee3 100644
--- a/src/f32-vmulcaddc/gen/c4-minmax-wasm-2x.c
+++ b/src/f32-vmulcaddc/gen/c4-minmax-wasm-2x.c
@@ -21,7 +21,7 @@
     const float*restrict weights,
     float*restrict output,
     size_t output_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(rows != 0);
   assert(channels != 0);
diff --git a/src/f32-vmulcaddc/gen/c8-minmax-neon-2x.c b/src/f32-vmulcaddc/gen/c8-minmax-neon-2x.c
index 1cae1b4..1ffc51c 100644
--- a/src/f32-vmulcaddc/gen/c8-minmax-neon-2x.c
+++ b/src/f32-vmulcaddc/gen/c8-minmax-neon-2x.c
@@ -23,7 +23,7 @@
     const float*restrict weights,
     float*restrict output,
     size_t output_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(rows != 0);
   assert(channels != 0);
diff --git a/src/f32-vmulcaddc/gen/c8-minmax-neonfma-2x.c b/src/f32-vmulcaddc/gen/c8-minmax-neonfma-2x.c
index d0710dd..5070f7d 100644
--- a/src/f32-vmulcaddc/gen/c8-minmax-neonfma-2x.c
+++ b/src/f32-vmulcaddc/gen/c8-minmax-neonfma-2x.c
@@ -23,7 +23,7 @@
     const float*restrict weights,
     float*restrict output,
     size_t output_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(rows != 0);
   assert(channels != 0);
diff --git a/src/f32-vmulcaddc/gen/c8-minmax-psimd-2x.c b/src/f32-vmulcaddc/gen/c8-minmax-psimd-2x.c
index f23681a..c79f2ff 100644
--- a/src/f32-vmulcaddc/gen/c8-minmax-psimd-2x.c
+++ b/src/f32-vmulcaddc/gen/c8-minmax-psimd-2x.c
@@ -23,7 +23,7 @@
     const float*restrict weights,
     float*restrict output,
     size_t output_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(rows != 0);
   assert(channels != 0);
diff --git a/src/f32-vmulcaddc/gen/c8-minmax-sse-2x.c b/src/f32-vmulcaddc/gen/c8-minmax-sse-2x.c
index 110ae4f..e667f67 100644
--- a/src/f32-vmulcaddc/gen/c8-minmax-sse-2x.c
+++ b/src/f32-vmulcaddc/gen/c8-minmax-sse-2x.c
@@ -23,7 +23,7 @@
     const float*restrict weights,
     float*restrict output,
     size_t output_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(rows != 0);
   assert(channels != 0);
diff --git a/src/f32-vmulcaddc/neon.c.in b/src/f32-vmulcaddc/neon.c.in
index cb07908..8488681 100644
--- a/src/f32-vmulcaddc/neon.c.in
+++ b/src/f32-vmulcaddc/neon.c.in
@@ -23,7 +23,7 @@
     const float*restrict weights,
     float*restrict output,
     size_t output_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(rows != 0);
   assert(channels != 0);
diff --git a/src/f32-vmulcaddc/psimd.c.in b/src/f32-vmulcaddc/psimd.c.in
index 4901d1e..7c80011 100644
--- a/src/f32-vmulcaddc/psimd.c.in
+++ b/src/f32-vmulcaddc/psimd.c.in
@@ -23,7 +23,7 @@
     const float*restrict weights,
     float*restrict output,
     size_t output_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(rows != 0);
   assert(channels != 0);
diff --git a/src/f32-vmulcaddc/scalar.c.in b/src/f32-vmulcaddc/scalar.c.in
index 928b0b3..3585686 100644
--- a/src/f32-vmulcaddc/scalar.c.in
+++ b/src/f32-vmulcaddc/scalar.c.in
@@ -22,7 +22,7 @@
     const float*restrict weights,
     float*restrict output,
     size_t output_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(rows != 0);
   assert(channels != 0);
diff --git a/src/f32-vmulcaddc/sse.c.in b/src/f32-vmulcaddc/sse.c.in
index 3734bdc..fdb559f 100644
--- a/src/f32-vmulcaddc/sse.c.in
+++ b/src/f32-vmulcaddc/sse.c.in
@@ -23,7 +23,7 @@
     const float*restrict weights,
     float*restrict output,
     size_t output_stride,
-    const union xnn_f32_minmax_params params[restrict static 1])
+    const union xnn_f32_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(rows != 0);
   assert(channels != 0);
diff --git a/src/max-pooling-nhwc.c b/src/max-pooling-nhwc.c
index 952824e..02497ac 100644
--- a/src/max-pooling-nhwc.c
+++ b/src/max-pooling-nhwc.c
@@ -345,7 +345,7 @@
   void* output,
   uint32_t log2_input_element_size,
   uint32_t log2_output_element_size,
-  struct maxpool_parameters maxpool[restrict static 1],
+  struct maxpool_parameters maxpool[restrict XNN_MIN_ELEMENTS(1)],
   const void* params,
   size_t num_threads)
 {
diff --git a/src/operator-run.c b/src/operator-run.c
index 8906273..d1a2ca1 100644
--- a/src/operator-run.c
+++ b/src/operator-run.c
@@ -22,7 +22,7 @@
 
 
 void xnn_compute_grouped_gemm(
-    const struct gemm_context context[restrict static 1],
+    const struct gemm_context context[restrict XNN_MIN_ELEMENTS(1)],
     size_t group_index,
     size_t mr_block_start,
     size_t nr_block_start,
@@ -47,7 +47,7 @@
 }
 
 void xnn_compute_gemm(
-    const struct gemm_context context[restrict static 1],
+    const struct gemm_context context[restrict XNN_MIN_ELEMENTS(1)],
     size_t mr_block_start,
     size_t nr_block_start,
     size_t mr_block_size,
@@ -70,7 +70,7 @@
 }
 
 void xnn_compute_spmm(
-    const struct spmm_context context[restrict static 1],
+    const struct spmm_context context[restrict XNN_MIN_ELEMENTS(1)],
     size_t batch_index,
     size_t mr_block_start,
     size_t mr_block_size)
@@ -87,7 +87,7 @@
 }
 
 void xnn_compute_grouped_igemm(
-    const struct igemm_context context[restrict static 1],
+    const struct igemm_context context[restrict XNN_MIN_ELEMENTS(1)],
     size_t batch_index,
     size_t group_index,
     size_t mr_block_start,
@@ -114,7 +114,7 @@
 }
 
 void xnn_compute_igemm(
-    const struct igemm_context context[restrict static 1],
+    const struct igemm_context context[restrict XNN_MIN_ELEMENTS(1)],
     size_t batch_index,
     size_t mr_block_start,
     size_t nr_block_start,
@@ -140,7 +140,7 @@
 }
 
 void xnn_compute_grouped_subgemm2d(
-      const struct subgemm_context context[restrict static 1],
+      const struct subgemm_context context[restrict XNN_MIN_ELEMENTS(1)],
       size_t batch_index,
       size_t group_index,
       size_t subkernel_index,
@@ -178,7 +178,7 @@
 }
 
 void xnn_compute_subgemm2d(
-      const struct subgemm_context context[restrict static 1],
+      const struct subgemm_context context[restrict XNN_MIN_ELEMENTS(1)],
       size_t batch_index,
       size_t subkernel_index,
       size_t slice_y,
@@ -215,7 +215,7 @@
 }
 
 void xnn_compute_grouped_subconv2d(
-      const struct subconv_context context[restrict static 1],
+      const struct subconv_context context[restrict XNN_MIN_ELEMENTS(1)],
       size_t batch_index,
       size_t group_index,
       size_t subkernel_index,
@@ -254,7 +254,7 @@
 }
 
 void xnn_compute_subconv2d(
-      const struct subconv_context context[restrict static 1],
+      const struct subconv_context context[restrict XNN_MIN_ELEMENTS(1)],
       size_t batch_index,
       size_t subkernel_index,
       size_t slice_y,
@@ -292,7 +292,7 @@
 }
 
 void xnn_compute_dconv2d_hwc2spchw(
-      const struct dconv2d_context context[restrict static 1],
+      const struct dconv2d_context context[restrict XNN_MIN_ELEMENTS(1)],
       size_t batch_index,
       size_t output_y_start,
       size_t output_y_slice)
@@ -314,7 +314,7 @@
 }
 
 void xnn_compute_dwconv_unipass(
-    const struct dwconv_context context[restrict static 1],
+    const struct dwconv_context context[restrict XNN_MIN_ELEMENTS(1)],
     size_t output_y)
 {
   context->unipass_ukernel(
@@ -329,7 +329,7 @@
 }
 
 void xnn_compute_dwconv2d_spchw(
-    const struct dwconv2d_context context[restrict static 1],
+    const struct dwconv2d_context context[restrict XNN_MIN_ELEMENTS(1)],
     size_t batch_index,
     size_t channel)
 {
@@ -347,7 +347,7 @@
 }
 
 void xnn_compute_argmax_pooling_unipass(
-    const struct argmax_pooling_context context[restrict static 1],
+    const struct argmax_pooling_context context[restrict XNN_MIN_ELEMENTS(1)],
     size_t batch_index,
     size_t output_y)
 {
@@ -367,7 +367,7 @@
 }
 
 void xnn_compute_argmax_pooling_multipass(
-    const struct argmax_pooling_context context[restrict static 1],
+    const struct argmax_pooling_context context[restrict XNN_MIN_ELEMENTS(1)],
     size_t batch_index,
     size_t output_y)
 {
@@ -390,7 +390,7 @@
 }
 
 void xnn_compute_max_pooling(
-    const struct max_pooling_context context[restrict static 1],
+    const struct max_pooling_context context[restrict XNN_MIN_ELEMENTS(1)],
     size_t batch_index,
     size_t output_y)
 {
@@ -408,7 +408,7 @@
 }
 
 void xnn_compute_unpooling(
-    const struct unpooling_context context[restrict static 1],
+    const struct unpooling_context context[restrict XNN_MIN_ELEMENTS(1)],
     size_t input_y,
     size_t input_x)
 {
@@ -428,7 +428,7 @@
 }
 
 void xnn_compute_average_pooling_unipass(
-    const struct average_pooling_context context[restrict static 1],
+    const struct average_pooling_context context[restrict XNN_MIN_ELEMENTS(1)],
     size_t batch_index,
     size_t output_y)
 {
@@ -446,7 +446,7 @@
 }
 
 void xnn_compute_average_pooling_multipass(
-    const struct average_pooling_context context[restrict static 1],
+    const struct average_pooling_context context[restrict XNN_MIN_ELEMENTS(1)],
     size_t batch_index,
     size_t output_y)
 {
@@ -467,7 +467,7 @@
 }
 
 void xnn_compute_pixelwise_average_pooling_unipass(
-    const struct pixelwise_average_pooling_context context[restrict static 1],
+    const struct pixelwise_average_pooling_context context[restrict XNN_MIN_ELEMENTS(1)],
     size_t batch_index,
     size_t output_y)
 {
@@ -487,7 +487,7 @@
 }
 
 void xnn_compute_pixelwise_average_pooling_multipass(
-    const struct pixelwise_average_pooling_context context[restrict static 1],
+    const struct pixelwise_average_pooling_context context[restrict XNN_MIN_ELEMENTS(1)],
     size_t batch_index,
     size_t output_y)
 {
@@ -509,7 +509,7 @@
 }
 
 void xnn_compute_global_average_pooling_nwc_unipass(
-    const struct global_average_pooling_nwc_context context[restrict static 1],
+    const struct global_average_pooling_nwc_context context[restrict XNN_MIN_ELEMENTS(1)],
     size_t batch_index)
 {
   const void* input =
@@ -528,7 +528,7 @@
 }
 
 void xnn_compute_global_average_pooling_nwc_multipass(
-    const struct global_average_pooling_nwc_context context[restrict static 1],
+    const struct global_average_pooling_nwc_context context[restrict XNN_MIN_ELEMENTS(1)],
     size_t batch_index)
 {
   const void* input =
@@ -551,7 +551,7 @@
 }
 
 void xnn_compute_global_average_pooling_ncw(
-    const struct global_average_pooling_ncw_context context[restrict static 1],
+    const struct global_average_pooling_ncw_context context[restrict XNN_MIN_ELEMENTS(1)],
     size_t batch_index,
     size_t channels_start,
     size_t channels_slice)
@@ -570,7 +570,7 @@
 }
 
 void xnn_compute_resize_bilinear(
-    const struct resize_bilinear_context context[restrict static 1],
+    const struct resize_bilinear_context context[restrict XNN_MIN_ELEMENTS(1)],
     size_t batch_index,
     size_t pixel_start,
     size_t pixel_range)
@@ -589,7 +589,7 @@
 }
 
 void xnn_compute_prelu(
-    const struct prelu_context context[restrict static 1],
+    const struct prelu_context context[restrict XNN_MIN_ELEMENTS(1)],
     size_t batch_start,
     size_t batch_range)
 {
@@ -602,7 +602,7 @@
 }
 
 void xnn_compute_channel_pad(
-    const struct channel_pad_context context[restrict static 1],
+    const struct channel_pad_context context[restrict XNN_MIN_ELEMENTS(1)],
     size_t batch_start,
     size_t batch_range)
 {
@@ -615,7 +615,7 @@
 }
 
 void xnn_compute_add_strided(
-    const struct add_strided_context context[restrict static 1],
+    const struct add_strided_context context[restrict XNN_MIN_ELEMENTS(1)],
     size_t batch_index,
     size_t batch_range /* always 1 */)
 {
@@ -633,7 +633,7 @@
 }
 
 void xnn_compute_add_contiguous(
-    const struct add_contiguous_context context[restrict static 1],
+    const struct add_contiguous_context context[restrict XNN_MIN_ELEMENTS(1)],
     size_t offset,
     size_t size)
 {
@@ -644,7 +644,7 @@
 }
 
 void xnn_compute_elementwise_binary_5d(
-    const struct elementwise_binary_context context[restrict static 1],
+    const struct elementwise_binary_context context[restrict XNN_MIN_ELEMENTS(1)],
     size_t i, size_t j, size_t k, size_t l, size_t m,
     size_t l_range, size_t m_range)
 {
@@ -661,7 +661,7 @@
 }
 
 void xnn_compute_channel_shuffle_fixed(
-    const struct channel_shuffle_context context[restrict static 1],
+    const struct channel_shuffle_context context[restrict XNN_MIN_ELEMENTS(1)],
     size_t index)
 {
   const void* x = (const void*) ((uintptr_t) context->x + index * context->x_stride);
@@ -671,7 +671,7 @@
 }
 
 void xnn_compute_channel_shuffle_variable(
-    const struct channel_shuffle_context context[restrict static 1],
+    const struct channel_shuffle_context context[restrict XNN_MIN_ELEMENTS(1)],
     size_t index)
 {
   const void* x = (const void*) ((uintptr_t) context->x + index * context->x_stride);
@@ -681,7 +681,7 @@
 }
 
 void xnn_compute_lut_strided(
-    const struct lut_strided_context context[restrict static 1],
+    const struct lut_strided_context context[restrict XNN_MIN_ELEMENTS(1)],
     size_t batch_index)
 {
   const void* x = (const void*) ((uintptr_t) context->x + context->x_stride * batch_index);
@@ -691,7 +691,7 @@
 }
 
 void xnn_compute_lut_contiguous(
-    const struct lut_contiguous_context context[restrict static 1],
+    const struct lut_contiguous_context context[restrict XNN_MIN_ELEMENTS(1)],
     size_t offset,
     size_t size)
 {
@@ -702,7 +702,7 @@
 }
 
 void xnn_compute_univector_strided(
-    const struct univector_strided_context context[restrict static 1],
+    const struct univector_strided_context context[restrict XNN_MIN_ELEMENTS(1)],
     size_t batch_index,
     size_t batch_range /* always 1 */)
 {
@@ -714,7 +714,7 @@
 }
 
 void xnn_compute_univector_contiguous(
-    const struct univector_contiguous_context context[restrict static 1],
+    const struct univector_contiguous_context context[restrict XNN_MIN_ELEMENTS(1)],
     size_t offset,
     size_t size)
 {
@@ -724,7 +724,7 @@
 }
 
 void xnn_compute_u8_softmax(
-    const struct u8_softmax_context context[restrict static 1],
+    const struct u8_softmax_context context[restrict XNN_MIN_ELEMENTS(1)],
     size_t batch_index)
 {
   const uint8_t* x = (const uint8_t*) ((uintptr_t) context->x + context->x_stride * batch_index);
@@ -739,7 +739,7 @@
 }
 
 void xnn_compute_f32_three_pass_softmax(
-    const struct f32_three_pass_softmax_context context[restrict static 1],
+    const struct f32_three_pass_softmax_context context[restrict XNN_MIN_ELEMENTS(1)],
     size_t batch_index)
 {
   const float* x = (const float*) ((uintptr_t) context->x + context->x_stride * batch_index);
@@ -760,7 +760,7 @@
 }
 
 void xnn_compute_vmulcaddc(
-    const struct vmulcaddc_context context[restrict static 1],
+    const struct vmulcaddc_context context[restrict XNN_MIN_ELEMENTS(1)],
     size_t batch_start,
     size_t batch_size)
 {
@@ -781,7 +781,7 @@
 
 #if XNN_MAX_UARCH_TYPES > 1
   void xnn_compute_hmp_grouped_gemm(
-      const struct gemm_context context[restrict static 1],
+      const struct gemm_context context[restrict XNN_MIN_ELEMENTS(1)],
       uint32_t uarch_index,
       size_t group_index,
       size_t mr_block_start,
@@ -807,7 +807,7 @@
   }
 
   void xnn_compute_hmp_gemm(
-      const struct gemm_context context[restrict static 1],
+      const struct gemm_context context[restrict XNN_MIN_ELEMENTS(1)],
       uint32_t uarch_index,
       size_t mr_block_start,
       size_t nr_block_start,
@@ -831,7 +831,7 @@
   }
 
   void xnn_compute_hmp_grouped_igemm(
-      const struct igemm_context context[restrict static 1],
+      const struct igemm_context context[restrict XNN_MIN_ELEMENTS(1)],
       uint32_t uarch_index,
       size_t batch_index,
       size_t group_index,
@@ -859,7 +859,7 @@
   }
 
   void xnn_compute_hmp_igemm(
-      const struct igemm_context context[restrict static 1],
+      const struct igemm_context context[restrict XNN_MIN_ELEMENTS(1)],
       uint32_t uarch_index,
       size_t batch_index,
       size_t mr_block_start,
diff --git a/src/q8-avgpool/9p8x-minmax-neon-c8.c b/src/q8-avgpool/9p8x-minmax-neon-c8.c
index 33517a0..7ce138c 100644
--- a/src/q8-avgpool/9p8x-minmax-neon-c8.c
+++ b/src/q8-avgpool/9p8x-minmax-neon-c8.c
@@ -25,7 +25,7 @@
     uint8_t* output,
     size_t input_increment,
     size_t output_increment,
-    const union xnn_q8_avgpool_params params[restrict static 1])
+    const union xnn_q8_avgpool_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(output_pixels != 0);
   assert(kernel_elements > 9);
diff --git a/src/q8-avgpool/9p8x-minmax-scalar-c1.c b/src/q8-avgpool/9p8x-minmax-scalar-c1.c
index 66a7763..2707c3d 100644
--- a/src/q8-avgpool/9p8x-minmax-scalar-c1.c
+++ b/src/q8-avgpool/9p8x-minmax-scalar-c1.c
@@ -23,7 +23,7 @@
     uint8_t* output,
     size_t input_increment,
     size_t output_increment,
-    const union xnn_q8_avgpool_params params[restrict static 1])
+    const union xnn_q8_avgpool_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(output_pixels != 0);
   assert(kernel_elements > 9);
diff --git a/src/q8-avgpool/9p8x-minmax-sse2-c8.c b/src/q8-avgpool/9p8x-minmax-sse2-c8.c
index 8279d9d..2216b0f 100644
--- a/src/q8-avgpool/9p8x-minmax-sse2-c8.c
+++ b/src/q8-avgpool/9p8x-minmax-sse2-c8.c
@@ -24,7 +24,7 @@
     uint8_t* output,
     size_t input_increment,
     size_t output_increment,
-    const union xnn_q8_avgpool_params params[restrict static 1])
+    const union xnn_q8_avgpool_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(output_pixels != 0);
   assert(kernel_elements > 9);
diff --git a/src/q8-avgpool/9x-minmax-neon-c8.c b/src/q8-avgpool/9x-minmax-neon-c8.c
index 0e71060..0c52138 100644
--- a/src/q8-avgpool/9x-minmax-neon-c8.c
+++ b/src/q8-avgpool/9x-minmax-neon-c8.c
@@ -24,7 +24,7 @@
     uint8_t* output,
     size_t input_increment,
     size_t output_increment,
-    const union xnn_q8_avgpool_params params[restrict static 1])
+    const union xnn_q8_avgpool_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(output_pixels != 0);
   assert(kernel_elements != 0);
diff --git a/src/q8-avgpool/9x-minmax-scalar-c1.c b/src/q8-avgpool/9x-minmax-scalar-c1.c
index f954950..10782c6 100644
--- a/src/q8-avgpool/9x-minmax-scalar-c1.c
+++ b/src/q8-avgpool/9x-minmax-scalar-c1.c
@@ -22,7 +22,7 @@
     uint8_t* output,
     size_t input_increment,
     size_t output_increment,
-    const union xnn_q8_avgpool_params params[restrict static 1])
+    const union xnn_q8_avgpool_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(output_pixels != 0);
   assert(kernel_elements != 0);
diff --git a/src/q8-avgpool/9x-minmax-sse2-c8.c b/src/q8-avgpool/9x-minmax-sse2-c8.c
index 4c4fd2f..2bc10ad 100644
--- a/src/q8-avgpool/9x-minmax-sse2-c8.c
+++ b/src/q8-avgpool/9x-minmax-sse2-c8.c
@@ -23,7 +23,7 @@
     uint8_t* output,
     size_t input_increment,
     size_t output_increment,
-    const union xnn_q8_avgpool_params params[restrict static 1])
+    const union xnn_q8_avgpool_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(output_pixels != 0);
   assert(kernel_elements != 0);
diff --git a/src/q8-dwconv/up1x9-minmax-scalar.c b/src/q8-dwconv/up1x9-minmax-scalar.c
index 56daf05..b53115d 100644
--- a/src/q8-dwconv/up1x9-minmax-scalar.c
+++ b/src/q8-dwconv/up1x9-minmax-scalar.c
@@ -15,7 +15,7 @@
     uint8_t* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_q8_gemm_params params[restrict static 1])
+    const union xnn_q8_gemm_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   const int32_t vkernel_zero_point = params->scalar.kernel_zero_point;
   const int32_t vmultiplier = params->scalar.multiplier;
diff --git a/src/q8-dwconv/up8x9-minmax-aarch32-neon.S b/src/q8-dwconv/up8x9-minmax-aarch32-neon.S
index c245fa3..1a63c30 100644
--- a/src/q8-dwconv/up8x9-minmax-aarch32-neon.S
+++ b/src/q8-dwconv/up8x9-minmax-aarch32-neon.S
@@ -18,7 +18,7 @@
 #     uint8_t* output,
 #     size_t input_stride,
 #     size_t output_increment,
-#     const union xnn_q8_gemm_params params[restrict static 1])
+#     const union xnn_q8_gemm_params params[restrict XNN_MIN_ELEMENTS(1)])
 BEGIN_FUNCTION xnn_q8_dwconv_minmax_ukernel_up8x9__aarch32_neon
 	.arm
 #ifndef __APPLE__
diff --git a/src/q8-dwconv/up8x9-minmax-neon.c b/src/q8-dwconv/up8x9-minmax-neon.c
index 83d231b..1b111c7 100644
--- a/src/q8-dwconv/up8x9-minmax-neon.c
+++ b/src/q8-dwconv/up8x9-minmax-neon.c
@@ -20,7 +20,7 @@
     uint8_t* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_q8_gemm_params params[restrict static 1])
+    const union xnn_q8_gemm_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   const uint8x8_t vkernel_zero_point = vld1_dup_u8((const uint8_t*) &params->neon.kernel_zero_point);
   const int32x4_t vmultiplier = vld1q_dup_s32(&params->neon.multiplier);
diff --git a/src/q8-dwconv/up8x9-minmax-sse2.c b/src/q8-dwconv/up8x9-minmax-sse2.c
index 4b05c67..2042a3f 100644
--- a/src/q8-dwconv/up8x9-minmax-sse2.c
+++ b/src/q8-dwconv/up8x9-minmax-sse2.c
@@ -19,7 +19,7 @@
     uint8_t* output,
     size_t input_stride,
     size_t output_increment,
-    const union xnn_q8_gemm_params params[restrict static 1])
+    const union xnn_q8_gemm_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   const __m128i vkernel_zero_point = _mm_load_si128((const __m128i*) params->sse2.kernel_zero_point);
   const __m128i vzero = _mm_setzero_si128();
diff --git a/src/q8-gavgpool/7p7x-minmax-neon-c8.c b/src/q8-gavgpool/7p7x-minmax-neon-c8.c
index 40d5c41..c2bb23f 100644
--- a/src/q8-gavgpool/7p7x-minmax-neon-c8.c
+++ b/src/q8-gavgpool/7p7x-minmax-neon-c8.c
@@ -23,7 +23,7 @@
     const uint8_t* zero,
     int32_t* buffer,
     uint8_t* output,
-    const union xnn_q8_avgpool_params params[restrict static 1])
+    const union xnn_q8_avgpool_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(rows > 7);
   assert(channels != 0);
diff --git a/src/q8-gavgpool/7p7x-minmax-scalar-c1.c b/src/q8-gavgpool/7p7x-minmax-scalar-c1.c
index c16bcc0..7c4379b 100644
--- a/src/q8-gavgpool/7p7x-minmax-scalar-c1.c
+++ b/src/q8-gavgpool/7p7x-minmax-scalar-c1.c
@@ -17,7 +17,7 @@
     const uint8_t* zero,
     int32_t* buffer,
     uint8_t* output,
-    const union xnn_q8_avgpool_params params[restrict static 1])
+    const union xnn_q8_avgpool_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(rows > 7);
   assert(channels != 0);
diff --git a/src/q8-gavgpool/7p7x-minmax-sse2-c8.c b/src/q8-gavgpool/7p7x-minmax-sse2-c8.c
index 493ae3a..0dcd2c7 100644
--- a/src/q8-gavgpool/7p7x-minmax-sse2-c8.c
+++ b/src/q8-gavgpool/7p7x-minmax-sse2-c8.c
@@ -22,7 +22,7 @@
     const uint8_t* zero,
     int32_t* buffer,
     uint8_t* output,
-    const union xnn_q8_avgpool_params params[restrict static 1])
+    const union xnn_q8_avgpool_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(rows > 7);
   assert(channels != 0);
diff --git a/src/q8-gavgpool/7x-minmax-neon-c8.c b/src/q8-gavgpool/7x-minmax-neon-c8.c
index 61cb8f8..6149e2e 100644
--- a/src/q8-gavgpool/7x-minmax-neon-c8.c
+++ b/src/q8-gavgpool/7x-minmax-neon-c8.c
@@ -21,7 +21,7 @@
     size_t input_stride,
     const uint8_t* zero,
     uint8_t* output,
-    const union xnn_q8_avgpool_params params[restrict static 1])
+    const union xnn_q8_avgpool_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(rows != 0);
   assert(rows <= 7);
diff --git a/src/q8-gavgpool/7x-minmax-scalar-c1.c b/src/q8-gavgpool/7x-minmax-scalar-c1.c
index 4048735..f736ce3 100644
--- a/src/q8-gavgpool/7x-minmax-scalar-c1.c
+++ b/src/q8-gavgpool/7x-minmax-scalar-c1.c
@@ -16,7 +16,7 @@
     size_t input_stride,
     const uint8_t* zero,
     uint8_t* output,
-    const union xnn_q8_avgpool_params params[restrict static 1])
+    const union xnn_q8_avgpool_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(rows != 0);
   assert(rows <= 7);
diff --git a/src/q8-gavgpool/7x-minmax-sse2-c8.c b/src/q8-gavgpool/7x-minmax-sse2-c8.c
index 9cc833e..3a25fc4 100644
--- a/src/q8-gavgpool/7x-minmax-sse2-c8.c
+++ b/src/q8-gavgpool/7x-minmax-sse2-c8.c
@@ -20,7 +20,7 @@
     size_t input_stride,
     const uint8_t* zero,
     uint8_t* output,
-    const union xnn_q8_avgpool_params params[restrict static 1])
+    const union xnn_q8_avgpool_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(rows != 0);
   assert(rows <= 7);
diff --git a/src/q8-gemm/2x2-minmax-scalar.c b/src/q8-gemm/2x2-minmax-scalar.c
index 6c621bf..44837a0 100644
--- a/src/q8-gemm/2x2-minmax-scalar.c
+++ b/src/q8-gemm/2x2-minmax-scalar.c
@@ -19,7 +19,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_q8_gemm_params params[restrict static 1])
+    const union xnn_q8_gemm_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/q8-gemm/2x4c8-minmax-sse2.c b/src/q8-gemm/2x4c8-minmax-sse2.c
index 3e525aa..ceb8080 100644
--- a/src/q8-gemm/2x4c8-minmax-sse2.c
+++ b/src/q8-gemm/2x4c8-minmax-sse2.c
@@ -42,7 +42,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_q8_gemm_params params[restrict static 1])
+    const union xnn_q8_gemm_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/q8-gemm/4x4c2-minmax-sse2.c b/src/q8-gemm/4x4c2-minmax-sse2.c
index f438ebc..af39998 100644
--- a/src/q8-gemm/4x4c2-minmax-sse2.c
+++ b/src/q8-gemm/4x4c2-minmax-sse2.c
@@ -23,7 +23,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_q8_gemm_params params[restrict static 1])
+    const union xnn_q8_gemm_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/q8-gemm/4x8-minmax-neon.c b/src/q8-gemm/4x8-minmax-neon.c
index 94b9a8f..57e996e 100644
--- a/src/q8-gemm/4x8-minmax-neon.c
+++ b/src/q8-gemm/4x8-minmax-neon.c
@@ -24,7 +24,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_q8_gemm_params params[restrict static 1])
+    const union xnn_q8_gemm_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/q8-gemm/8x8-minmax-neon.c b/src/q8-gemm/8x8-minmax-neon.c
index c84844c..3506e14 100644
--- a/src/q8-gemm/8x8-minmax-neon.c
+++ b/src/q8-gemm/8x8-minmax-neon.c
@@ -24,7 +24,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_q8_gemm_params params[restrict static 1])
+    const union xnn_q8_gemm_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 8);
diff --git a/src/q8-igemm/2x2-minmax-scalar.c b/src/q8-igemm/2x2-minmax-scalar.c
index 1bf9a36..07c6c58 100644
--- a/src/q8-igemm/2x2-minmax-scalar.c
+++ b/src/q8-igemm/2x2-minmax-scalar.c
@@ -21,7 +21,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_q8_gemm_params params[restrict static 1])
+    const union xnn_q8_gemm_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/q8-igemm/4x4c2-minmax-sse2.c b/src/q8-igemm/4x4c2-minmax-sse2.c
index 6d6d1b9..a1f3a74 100644
--- a/src/q8-igemm/4x4c2-minmax-sse2.c
+++ b/src/q8-igemm/4x4c2-minmax-sse2.c
@@ -25,7 +25,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_q8_gemm_params params[restrict static 1])
+    const union xnn_q8_gemm_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/q8-igemm/4x8-minmax-neon.c b/src/q8-igemm/4x8-minmax-neon.c
index bf177ca..28d27c6 100644
--- a/src/q8-igemm/4x8-minmax-neon.c
+++ b/src/q8-igemm/4x8-minmax-neon.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_q8_gemm_params params[restrict static 1])
+    const union xnn_q8_gemm_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/q8-igemm/8x8-minmax-neon.c b/src/q8-igemm/8x8-minmax-neon.c
index ac0dd20..07d88f2 100644
--- a/src/q8-igemm/8x8-minmax-neon.c
+++ b/src/q8-igemm/8x8-minmax-neon.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_q8_gemm_params params[restrict static 1])
+    const union xnn_q8_gemm_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(mr != 0);
   assert(mr <= 8);
diff --git a/src/q8-vadd/minmax-neon.c b/src/q8-vadd/minmax-neon.c
index 7f5f5f6..3d68663 100644
--- a/src/q8-vadd/minmax-neon.c
+++ b/src/q8-vadd/minmax-neon.c
@@ -17,7 +17,7 @@
     const uint8_t* a,
     const uint8_t* b,
     uint8_t* y,
-    const union xnn_q8_add_params params[restrict static 1])
+    const union xnn_q8_add_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   const uint8x8_t va_zero_point = vld1_dup_u8(&params->neon.a_zero_point);
   const uint8x8_t vb_zero_point = vld1_dup_u8(&params->neon.b_zero_point);
diff --git a/src/q8-vadd/minmax-scalar.c b/src/q8-vadd/minmax-scalar.c
index bd787bc..3244764 100644
--- a/src/q8-vadd/minmax-scalar.c
+++ b/src/q8-vadd/minmax-scalar.c
@@ -15,7 +15,7 @@
     const uint8_t* a,
     const uint8_t* b,
     uint8_t* y,
-    const union xnn_q8_add_params params[restrict static 1])
+    const union xnn_q8_add_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
 
diff --git a/src/q8-vadd/minmax-sse2.c b/src/q8-vadd/minmax-sse2.c
index 6e98045..0be123b 100644
--- a/src/q8-vadd/minmax-sse2.c
+++ b/src/q8-vadd/minmax-sse2.c
@@ -18,7 +18,7 @@
     const uint8_t* a,
     const uint8_t* b,
     uint8_t* y,
-    const union xnn_q8_add_params params[restrict static 1])
+    const union xnn_q8_add_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   const __m128i vzero_point_product = _mm_load_si128((const __m128i*) &params->sse2.zero_point_product);
   const __m128i va_multiplier_lo = _mm_load_si128((const __m128i*) &params->sse2.a_multiplier_lo);
diff --git a/src/runtime.c b/src/runtime.c
index 78b9673..382400e 100644
--- a/src/runtime.c
+++ b/src/runtime.c
@@ -27,7 +27,7 @@
 
 // Product of all shape dimensions, except for the last (channel) one
 static size_t product_non_channel_dims(
-  const struct xnn_shape shape[restrict static 1])
+  const struct xnn_shape shape[restrict XNN_MIN_ELEMENTS(1)])
 {
   size_t batch_size = 1;
   for (size_t i = 0; i + 1 < shape->num_dims; i++) {
diff --git a/src/u8-clamp/neon-x64.c b/src/u8-clamp/neon-x64.c
index 836a57d..df1e7f7 100644
--- a/src/u8-clamp/neon-x64.c
+++ b/src/u8-clamp/neon-x64.c
@@ -17,7 +17,7 @@
     size_t n,
     const uint8_t* x,
     uint8_t* y,
-    const union xnn_u8_minmax_params params[restrict static 1])
+    const union xnn_u8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
 
diff --git a/src/u8-clamp/scalar-x4.c b/src/u8-clamp/scalar-x4.c
index 24877dd..b193a5b 100644
--- a/src/u8-clamp/scalar-x4.c
+++ b/src/u8-clamp/scalar-x4.c
@@ -12,7 +12,7 @@
     size_t n,
     const uint8_t* x,
     uint8_t* y,
-    const union xnn_u8_minmax_params params[restrict static 1])
+    const union xnn_u8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
 
diff --git a/src/u8-clamp/sse2-x64.c b/src/u8-clamp/sse2-x64.c
index 4096bef..e81df88 100644
--- a/src/u8-clamp/sse2-x64.c
+++ b/src/u8-clamp/sse2-x64.c
@@ -17,7 +17,7 @@
     size_t n,
     const uint8_t* x,
     uint8_t* y,
-    const union xnn_u8_minmax_params params[restrict static 1])
+    const union xnn_u8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
 
diff --git a/src/u8-maxpool/9p8x-minmax-neon-c16.c b/src/u8-maxpool/9p8x-minmax-neon-c16.c
index 1be3ed0..08a1eba 100644
--- a/src/u8-maxpool/9p8x-minmax-neon-c16.c
+++ b/src/u8-maxpool/9p8x-minmax-neon-c16.c
@@ -22,7 +22,7 @@
     uint8_t* output,
     size_t input_increment,
     size_t output_increment,
-    const union xnn_u8_minmax_params params[restrict static 1])
+    const union xnn_u8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(output_pixels != 0);
   assert(kernel_elements != 0);
diff --git a/src/u8-maxpool/9p8x-minmax-scalar-c1.c b/src/u8-maxpool/9p8x-minmax-scalar-c1.c
index 080cca1..d398a27 100644
--- a/src/u8-maxpool/9p8x-minmax-scalar-c1.c
+++ b/src/u8-maxpool/9p8x-minmax-scalar-c1.c
@@ -17,7 +17,7 @@
     uint8_t* output,
     size_t input_increment,
     size_t output_increment,
-    const union xnn_u8_minmax_params params[restrict static 1])
+    const union xnn_u8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(output_pixels != 0);
   assert(kernel_elements != 0);
diff --git a/src/u8-maxpool/9p8x-minmax-sse2-c16.c b/src/u8-maxpool/9p8x-minmax-sse2-c16.c
index 338166d..1997fe7 100644
--- a/src/u8-maxpool/9p8x-minmax-sse2-c16.c
+++ b/src/u8-maxpool/9p8x-minmax-sse2-c16.c
@@ -22,7 +22,7 @@
     uint8_t* output,
     size_t input_increment,
     size_t output_increment,
-    const union xnn_u8_minmax_params params[restrict static 1])
+    const union xnn_u8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(output_pixels != 0);
   assert(kernel_elements != 0);
diff --git a/src/x8-lut/scalar.c b/src/x8-lut/scalar.c
index bf3ee9e..1de2983 100644
--- a/src/x8-lut/scalar.c
+++ b/src/x8-lut/scalar.c
@@ -14,7 +14,7 @@
 void xnn_x8_lut_ukernel__scalar(
     size_t n,
     const uint8_t* x,
-    const uint8_t t[restrict static 256],
+    const uint8_t t[restrict XNN_MIN_ELEMENTS(256)],
     uint8_t* y)
 {
   assert(n != 0);
diff --git a/src/xnnpack/common.h b/src/xnnpack/common.h
index 0d70434..86e9b3a 100644
--- a/src/xnnpack/common.h
+++ b/src/xnnpack/common.h
@@ -152,6 +152,12 @@
 
 #define XNN_COUNT_OF(array) (sizeof(array) / sizeof(0[array]))
 
+#if defined(__cplusplus) || XNN_COMPILER_MSVC
+  #define XNN_MIN_ELEMENTS(count) count
+#else
+  #define XNN_MIN_ELEMENTS(count) static count
+#endif
+
 #if defined(__GNUC__)
   #define XNN_LIKELY(condition) (__builtin_expect(!!(condition), 1))
   #define XNN_UNLIKELY(condition) (__builtin_expect(!!(condition), 0))
diff --git a/src/xnnpack/compute.h b/src/xnnpack/compute.h
index 46b8db9..c20bea5 100644
--- a/src/xnnpack/compute.h
+++ b/src/xnnpack/compute.h
@@ -76,7 +76,7 @@
 
 #ifndef __cplusplus
   XNN_PRIVATE void xnn_compute_grouped_gemm(
-      const struct gemm_context context[restrict static 1],
+      const struct gemm_context context[restrict XNN_MIN_ELEMENTS(1)],
       size_t group_index,
       size_t mr_block_start,
       size_t nr_block_start,
@@ -84,7 +84,7 @@
       size_t nr_block_size);
 
   XNN_PRIVATE void xnn_compute_gemm(
-      const struct gemm_context context[restrict static 1],
+      const struct gemm_context context[restrict XNN_MIN_ELEMENTS(1)],
       size_t mr_block_start,
       size_t nr_block_start,
       size_t mr_block_size,
@@ -92,7 +92,7 @@
 
   #if XNN_MAX_UARCH_TYPES > 1
     XNN_PRIVATE void xnn_compute_hmp_grouped_gemm(
-        const struct gemm_context context[restrict static 1],
+        const struct gemm_context context[restrict XNN_MIN_ELEMENTS(1)],
         uint32_t uarch_index,
         size_t group_index,
         size_t mr_block_start,
@@ -101,7 +101,7 @@
         size_t nr_block_size);
 
     XNN_PRIVATE void xnn_compute_hmp_gemm(
-        const struct gemm_context context[restrict static 1],
+        const struct gemm_context context[restrict XNN_MIN_ELEMENTS(1)],
         uint32_t uarch_index,
         size_t mr_block_start,
         size_t nr_block_start,
@@ -141,7 +141,7 @@
 
 #ifndef __cplusplus
   XNN_PRIVATE void xnn_compute_spmm(
-    const struct spmm_context context[restrict static 1],
+    const struct spmm_context context[restrict XNN_MIN_ELEMENTS(1)],
     size_t batch_index,
     size_t mr_block_start,
     size_t mr_block_size);
@@ -174,7 +174,7 @@
 
 #ifndef __cplusplus
   XNN_PRIVATE void xnn_compute_grouped_igemm(
-      const struct igemm_context context[restrict static 1],
+      const struct igemm_context context[restrict XNN_MIN_ELEMENTS(1)],
       size_t batch_index,
       size_t group_index,
       size_t mr_block_start,
@@ -183,7 +183,7 @@
       size_t nr_block_size);
 
   XNN_PRIVATE void xnn_compute_igemm(
-      const struct igemm_context context[restrict static 1],
+      const struct igemm_context context[restrict XNN_MIN_ELEMENTS(1)],
       size_t batch_index,
       size_t mr_block_start,
       size_t nr_block_start,
@@ -192,7 +192,7 @@
 
   #if XNN_MAX_UARCH_TYPES > 1
     XNN_PRIVATE void xnn_compute_hmp_grouped_igemm(
-        const struct igemm_context context[restrict static 1],
+        const struct igemm_context context[restrict XNN_MIN_ELEMENTS(1)],
         uint32_t uarch_index,
         size_t batch_index,
         size_t group_index,
@@ -202,7 +202,7 @@
         size_t nr_block_size);
 
     XNN_PRIVATE void xnn_compute_hmp_igemm(
-        const struct igemm_context context[restrict static 1],
+        const struct igemm_context context[restrict XNN_MIN_ELEMENTS(1)],
         uint32_t uarch_index,
         size_t batch_index,
         size_t mr_block_start,
@@ -236,7 +236,7 @@
 
 #ifndef __cplusplus
   XNN_PRIVATE void xnn_compute_grouped_subgemm2d(
-      const struct subgemm_context context[restrict static 1],
+      const struct subgemm_context context[restrict XNN_MIN_ELEMENTS(1)],
       size_t batch_index,
       size_t group_index,
       size_t subkernel_index,
@@ -247,7 +247,7 @@
       size_t nr_block_size);
 
   XNN_PRIVATE void xnn_compute_subgemm2d(
-      const struct subgemm_context context[restrict static 1],
+      const struct subgemm_context context[restrict XNN_MIN_ELEMENTS(1)],
       size_t batch_index,
       size_t subkernel_index,
       size_t slice_y,
@@ -280,7 +280,7 @@
 
 #ifndef __cplusplus
   XNN_PRIVATE void xnn_compute_grouped_subconv2d(
-      const struct subconv_context context[restrict static 1],
+      const struct subconv_context context[restrict XNN_MIN_ELEMENTS(1)],
       size_t batch_index,
       size_t group_index,
       size_t subkernel_index,
@@ -291,7 +291,7 @@
       size_t nr_block_size);
 
   XNN_PRIVATE void xnn_compute_subconv2d(
-      const struct subconv_context context[restrict static 1],
+      const struct subconv_context context[restrict XNN_MIN_ELEMENTS(1)],
       size_t batch_index,
       size_t subkernel_index,
       size_t slice_y,
@@ -324,7 +324,7 @@
 
 #ifndef __cplusplus
   XNN_PRIVATE void xnn_compute_dconv2d_hwc2spchw(
-      const struct dconv2d_context context[restrict static 1],
+      const struct dconv2d_context context[restrict XNN_MIN_ELEMENTS(1)],
       size_t batch_index,
       size_t output_y_start,
       size_t output_y_slice);
@@ -351,7 +351,7 @@
 
 #ifndef __cplusplus
   XNN_PRIVATE void xnn_compute_dwconv_unipass(
-      const struct dwconv_context context[restrict static 1],
+      const struct dwconv_context context[restrict XNN_MIN_ELEMENTS(1)],
       size_t output_y);
 #endif
 
@@ -380,7 +380,7 @@
 
 #ifndef __cplusplus
   XNN_PRIVATE void xnn_compute_dwconv2d_spchw(
-      const struct dwconv2d_context context[restrict static 1],
+      const struct dwconv2d_context context[restrict XNN_MIN_ELEMENTS(1)],
       size_t batch_index,
       size_t channel);
 #endif
@@ -407,7 +407,7 @@
 
 #ifndef __cplusplus
   XNN_PRIVATE void xnn_compute_max_pooling(
-      const struct max_pooling_context context[restrict static 1],
+      const struct max_pooling_context context[restrict XNN_MIN_ELEMENTS(1)],
       size_t batch_index,
       size_t output_y);
 #endif
@@ -430,7 +430,7 @@
 
 #ifndef __cplusplus
   XNN_PRIVATE void xnn_compute_unpooling(
-      const struct unpooling_context context[restrict static 1],
+      const struct unpooling_context context[restrict XNN_MIN_ELEMENTS(1)],
       size_t input_y,
       size_t input_x);
 #endif
@@ -462,12 +462,12 @@
 
 #ifndef __cplusplus
   XNN_PRIVATE void xnn_compute_argmax_pooling_unipass(
-      const struct argmax_pooling_context context[restrict static 1],
+      const struct argmax_pooling_context context[restrict XNN_MIN_ELEMENTS(1)],
       size_t batch_index,
       size_t output_y);
 
   XNN_PRIVATE void xnn_compute_argmax_pooling_multipass(
-      const struct argmax_pooling_context context[restrict static 1],
+      const struct argmax_pooling_context context[restrict XNN_MIN_ELEMENTS(1)],
       size_t batch_index,
       size_t output_y);
 #endif
@@ -498,12 +498,12 @@
 
 #ifndef __cplusplus
   XNN_PRIVATE void xnn_compute_average_pooling_unipass(
-      const struct average_pooling_context context[restrict static 1],
+      const struct average_pooling_context context[restrict XNN_MIN_ELEMENTS(1)],
       size_t batch_index,
       size_t output_y);
 
   XNN_PRIVATE void xnn_compute_average_pooling_multipass(
-      const struct average_pooling_context context[restrict static 1],
+      const struct average_pooling_context context[restrict XNN_MIN_ELEMENTS(1)],
       size_t batch_index,
       size_t output_y);
 #endif
@@ -536,12 +536,12 @@
 
 #ifndef __cplusplus
   XNN_PRIVATE void xnn_compute_pixelwise_average_pooling_unipass(
-      const struct pixelwise_average_pooling_context context[restrict static 1],
+      const struct pixelwise_average_pooling_context context[restrict XNN_MIN_ELEMENTS(1)],
       size_t batch_index,
       size_t output_y);
 
   XNN_PRIVATE void xnn_compute_pixelwise_average_pooling_multipass(
-      const struct pixelwise_average_pooling_context context[restrict static 1],
+      const struct pixelwise_average_pooling_context context[restrict XNN_MIN_ELEMENTS(1)],
       size_t batch_index,
       size_t output_y);
 #endif
@@ -567,11 +567,11 @@
 
 #ifndef __cplusplus
   XNN_PRIVATE void xnn_compute_global_average_pooling_nwc_unipass(
-      const struct global_average_pooling_nwc_context context[restrict static 1],
+      const struct global_average_pooling_nwc_context context[restrict XNN_MIN_ELEMENTS(1)],
       size_t batch_index);
 
   XNN_PRIVATE void xnn_compute_global_average_pooling_nwc_multipass(
-      const struct global_average_pooling_nwc_context context[restrict static 1],
+      const struct global_average_pooling_nwc_context context[restrict XNN_MIN_ELEMENTS(1)],
       size_t batch_index);
 #endif
 
@@ -591,7 +591,7 @@
 
 #ifndef __cplusplus
   XNN_PRIVATE void xnn_compute_global_average_pooling_ncw(
-      const struct global_average_pooling_ncw_context context[restrict static 1],
+      const struct global_average_pooling_ncw_context context[restrict XNN_MIN_ELEMENTS(1)],
       size_t batch_index,
       size_t channels_start,
       size_t channels_slice);
@@ -622,7 +622,7 @@
 
 #ifndef __cplusplus
   XNN_PRIVATE void xnn_compute_resize_bilinear(
-      const struct resize_bilinear_context context[restrict static 1],
+      const struct resize_bilinear_context context[restrict XNN_MIN_ELEMENTS(1)],
       size_t batch_index,
       size_t pixel_start,
       size_t pixel_range);
@@ -645,7 +645,7 @@
 
 #ifndef __cplusplus
   XNN_PRIVATE void xnn_compute_add_strided(
-      const struct add_strided_context context[restrict static 1],
+      const struct add_strided_context context[restrict XNN_MIN_ELEMENTS(1)],
       size_t batch_index,
       size_t batch_range);
 #endif
@@ -663,7 +663,7 @@
 
 #ifndef __cplusplus
   XNN_PRIVATE void xnn_compute_add_contiguous(
-      const struct add_contiguous_context context[restrict static 1],
+      const struct add_contiguous_context context[restrict XNN_MIN_ELEMENTS(1)],
       size_t offset,
       size_t size);
 #endif
@@ -685,7 +685,7 @@
 
 #ifndef __cplusplus
   XNN_PRIVATE void xnn_compute_elementwise_binary_5d(
-      const struct elementwise_binary_context context[restrict static 1],
+      const struct elementwise_binary_context context[restrict XNN_MIN_ELEMENTS(1)],
       size_t i, size_t j, size_t k, size_t l, size_t m, size_t l_range, size_t m_range);
 #endif
 
@@ -704,11 +704,11 @@
 
 #ifndef __cplusplus
   XNN_PRIVATE void xnn_compute_channel_shuffle_fixed(
-      const struct channel_shuffle_context context[restrict static 1],
+      const struct channel_shuffle_context context[restrict XNN_MIN_ELEMENTS(1)],
       size_t index);
 
   XNN_PRIVATE void xnn_compute_channel_shuffle_variable(
-      const struct channel_shuffle_context context[restrict static 1],
+      const struct channel_shuffle_context context[restrict XNN_MIN_ELEMENTS(1)],
       size_t index);
 #endif
 
@@ -724,7 +724,7 @@
 
 #ifndef __cplusplus
   XNN_PRIVATE void xnn_compute_lut_strided(
-      const struct lut_strided_context context[restrict static 1],
+      const struct lut_strided_context context[restrict XNN_MIN_ELEMENTS(1)],
       size_t batch_index);
 #endif
 
@@ -739,7 +739,7 @@
 
 #ifndef __cplusplus
   XNN_PRIVATE void xnn_compute_lut_contiguous(
-      const struct lut_contiguous_context context[restrict static 1],
+      const struct lut_contiguous_context context[restrict XNN_MIN_ELEMENTS(1)],
       size_t offset,
       size_t size);
 #endif
@@ -760,7 +760,7 @@
 
 #ifndef __cplusplus
   XNN_PRIVATE void xnn_compute_univector_strided(
-      const struct univector_strided_context context[restrict static 1],
+      const struct univector_strided_context context[restrict XNN_MIN_ELEMENTS(1)],
       size_t batch_index,
       size_t batch_range);
 #endif
@@ -780,7 +780,7 @@
 
 #ifndef __cplusplus
   XNN_PRIVATE void xnn_compute_univector_contiguous(
-      const struct univector_contiguous_context context[restrict static 1],
+      const struct univector_contiguous_context context[restrict XNN_MIN_ELEMENTS(1)],
       size_t offset,
       size_t size);
 #endif
@@ -797,7 +797,7 @@
 
 #ifndef __cplusplus
   XNN_PRIVATE void xnn_compute_prelu(
-      const struct prelu_context context[restrict static 1],
+      const struct prelu_context context[restrict XNN_MIN_ELEMENTS(1)],
       size_t batch_start,
       size_t batch_range);
 #endif
@@ -817,7 +817,7 @@
 
 #ifndef __cplusplus
   XNN_PRIVATE void xnn_compute_vmulcaddc(
-      const struct vmulcaddc_context context[restrict static 1],
+      const struct vmulcaddc_context context[restrict XNN_MIN_ELEMENTS(1)],
       size_t batch_start,
       size_t batch_size);
 #endif
@@ -836,7 +836,7 @@
 
 #ifndef __cplusplus
   XNN_PRIVATE void xnn_compute_channel_pad(
-      const struct channel_pad_context context[restrict static 1],
+      const struct channel_pad_context context[restrict XNN_MIN_ELEMENTS(1)],
       size_t batch_start,
       size_t batch_range);
 #endif
@@ -854,7 +854,7 @@
 
 #ifndef __cplusplus
   XNN_PRIVATE void xnn_compute_u8_softmax(
-      const struct u8_softmax_context context[restrict static 1],
+      const struct u8_softmax_context context[restrict XNN_MIN_ELEMENTS(1)],
       size_t batch_index);
 #endif
 
@@ -872,6 +872,6 @@
 
 #ifndef __cplusplus
   XNN_PRIVATE void xnn_compute_f32_three_pass_softmax(
-      const struct f32_three_pass_softmax_context context[restrict static 1],
+      const struct f32_three_pass_softmax_context context[restrict XNN_MIN_ELEMENTS(1)],
       size_t batch_index);
 #endif