Annotate remaining microkernels with Out-of-Bounds reads with XNN_OOB_READS

PiperOrigin-RevId: 416227490
diff --git a/src/f32-prelu/gen/sse-2x4.c b/src/f32-prelu/gen/sse-2x4.c
index 00df613..c1b0ce5 100644
--- a/src/f32-prelu/gen/sse-2x4.c
+++ b/src/f32-prelu/gen/sse-2x4.c
@@ -22,7 +22,7 @@
     size_t input_stride,
     const float*restrict weights,
     float*restrict output,
-    size_t output_stride) XNN_DISABLE_TSAN
+    size_t output_stride) XNN_OOB_READS
 {
   assert(rows != 0);
   assert(channels != 0);
diff --git a/src/f32-prelu/gen/sse-2x8.c b/src/f32-prelu/gen/sse-2x8.c
index d386d57..071b7c9 100644
--- a/src/f32-prelu/gen/sse-2x8.c
+++ b/src/f32-prelu/gen/sse-2x8.c
@@ -22,7 +22,7 @@
     size_t input_stride,
     const float*restrict weights,
     float*restrict output,
-    size_t output_stride) XNN_DISABLE_TSAN
+    size_t output_stride) XNN_OOB_READS
 {
   assert(rows != 0);
   assert(channels != 0);
diff --git a/src/f32-prelu/gen/sse2-2x4.c b/src/f32-prelu/gen/sse2-2x4.c
index b324958..ed6c3eb 100644
--- a/src/f32-prelu/gen/sse2-2x4.c
+++ b/src/f32-prelu/gen/sse2-2x4.c
@@ -22,7 +22,7 @@
     size_t input_stride,
     const float*restrict weights,
     float*restrict output,
-    size_t output_stride) XNN_DISABLE_TSAN
+    size_t output_stride) XNN_OOB_READS
 {
   assert(rows != 0);
   assert(channels != 0);
diff --git a/src/f32-prelu/gen/sse2-2x8.c b/src/f32-prelu/gen/sse2-2x8.c
index 24147b6..b5b265d 100644
--- a/src/f32-prelu/gen/sse2-2x8.c
+++ b/src/f32-prelu/gen/sse2-2x8.c
@@ -22,7 +22,7 @@
     size_t input_stride,
     const float*restrict weights,
     float*restrict output,
-    size_t output_stride) XNN_DISABLE_TSAN
+    size_t output_stride) XNN_OOB_READS
 {
   assert(rows != 0);
   assert(channels != 0);
diff --git a/src/f32-prelu/gen/sse41-2x4.c b/src/f32-prelu/gen/sse41-2x4.c
index b4bf526..34aa722 100644
--- a/src/f32-prelu/gen/sse41-2x4.c
+++ b/src/f32-prelu/gen/sse41-2x4.c
@@ -22,7 +22,7 @@
     size_t input_stride,
     const float*restrict weights,
     float*restrict output,
-    size_t output_stride) XNN_DISABLE_TSAN
+    size_t output_stride) XNN_OOB_READS
 {
   assert(rows != 0);
   assert(channels != 0);
diff --git a/src/f32-prelu/gen/sse41-2x8.c b/src/f32-prelu/gen/sse41-2x8.c
index ca8ae3e..8e04a88 100644
--- a/src/f32-prelu/gen/sse41-2x8.c
+++ b/src/f32-prelu/gen/sse41-2x8.c
@@ -22,7 +22,7 @@
     size_t input_stride,
     const float*restrict weights,
     float*restrict output,
-    size_t output_stride) XNN_DISABLE_TSAN
+    size_t output_stride) XNN_OOB_READS
 {
   assert(rows != 0);
   assert(channels != 0);
diff --git a/src/f32-prelu/gen/wasmsimd-bitselect-1x16.c b/src/f32-prelu/gen/wasmsimd-bitselect-1x16.c
index 1443be1..dbb668a 100644
--- a/src/f32-prelu/gen/wasmsimd-bitselect-1x16.c
+++ b/src/f32-prelu/gen/wasmsimd-bitselect-1x16.c
@@ -22,7 +22,7 @@
     size_t input_stride,
     const float*restrict weights,
     float*restrict output,
-    size_t output_stride) XNN_DISABLE_TSAN
+    size_t output_stride) XNN_OOB_READS
 {
   assert(rows != 0);
   assert(channels != 0);
diff --git a/src/f32-prelu/gen/wasmsimd-bitselect-1x4.c b/src/f32-prelu/gen/wasmsimd-bitselect-1x4.c
index 0709dcc..7cfcc26 100644
--- a/src/f32-prelu/gen/wasmsimd-bitselect-1x4.c
+++ b/src/f32-prelu/gen/wasmsimd-bitselect-1x4.c
@@ -22,7 +22,7 @@
     size_t input_stride,
     const float*restrict weights,
     float*restrict output,
-    size_t output_stride) XNN_DISABLE_TSAN
+    size_t output_stride) XNN_OOB_READS
 {
   assert(rows != 0);
   assert(channels != 0);
diff --git a/src/f32-prelu/gen/wasmsimd-bitselect-1x8.c b/src/f32-prelu/gen/wasmsimd-bitselect-1x8.c
index d6cbf8a..0e1230c 100644
--- a/src/f32-prelu/gen/wasmsimd-bitselect-1x8.c
+++ b/src/f32-prelu/gen/wasmsimd-bitselect-1x8.c
@@ -22,7 +22,7 @@
     size_t input_stride,
     const float*restrict weights,
     float*restrict output,
-    size_t output_stride) XNN_DISABLE_TSAN
+    size_t output_stride) XNN_OOB_READS
 {
   assert(rows != 0);
   assert(channels != 0);
diff --git a/src/f32-prelu/gen/wasmsimd-bitselect-2x16.c b/src/f32-prelu/gen/wasmsimd-bitselect-2x16.c
index 03567a2..962b618 100644
--- a/src/f32-prelu/gen/wasmsimd-bitselect-2x16.c
+++ b/src/f32-prelu/gen/wasmsimd-bitselect-2x16.c
@@ -22,7 +22,7 @@
     size_t input_stride,
     const float*restrict weights,
     float*restrict output,
-    size_t output_stride) XNN_DISABLE_TSAN
+    size_t output_stride) XNN_OOB_READS
 {
   assert(rows != 0);
   assert(channels != 0);
diff --git a/src/f32-prelu/gen/wasmsimd-bitselect-2x4.c b/src/f32-prelu/gen/wasmsimd-bitselect-2x4.c
index f5bebf7..cdfff2a 100644
--- a/src/f32-prelu/gen/wasmsimd-bitselect-2x4.c
+++ b/src/f32-prelu/gen/wasmsimd-bitselect-2x4.c
@@ -22,7 +22,7 @@
     size_t input_stride,
     const float*restrict weights,
     float*restrict output,
-    size_t output_stride) XNN_DISABLE_TSAN
+    size_t output_stride) XNN_OOB_READS
 {
   assert(rows != 0);
   assert(channels != 0);
diff --git a/src/f32-prelu/gen/wasmsimd-bitselect-2x8.c b/src/f32-prelu/gen/wasmsimd-bitselect-2x8.c
index 58d5dba..e33649f 100644
--- a/src/f32-prelu/gen/wasmsimd-bitselect-2x8.c
+++ b/src/f32-prelu/gen/wasmsimd-bitselect-2x8.c
@@ -22,7 +22,7 @@
     size_t input_stride,
     const float*restrict weights,
     float*restrict output,
-    size_t output_stride) XNN_DISABLE_TSAN
+    size_t output_stride) XNN_OOB_READS
 {
   assert(rows != 0);
   assert(channels != 0);
diff --git a/src/f32-prelu/gen/wasmsimd-bitselect-4x16.c b/src/f32-prelu/gen/wasmsimd-bitselect-4x16.c
index dc51f4f..2835ab9 100644
--- a/src/f32-prelu/gen/wasmsimd-bitselect-4x16.c
+++ b/src/f32-prelu/gen/wasmsimd-bitselect-4x16.c
@@ -22,7 +22,7 @@
     size_t input_stride,
     const float*restrict weights,
     float*restrict output,
-    size_t output_stride) XNN_DISABLE_TSAN
+    size_t output_stride) XNN_OOB_READS
 {
   assert(rows != 0);
   assert(channels != 0);
diff --git a/src/f32-prelu/gen/wasmsimd-bitselect-4x4.c b/src/f32-prelu/gen/wasmsimd-bitselect-4x4.c
index 1b2349f..20d79a1 100644
--- a/src/f32-prelu/gen/wasmsimd-bitselect-4x4.c
+++ b/src/f32-prelu/gen/wasmsimd-bitselect-4x4.c
@@ -22,7 +22,7 @@
     size_t input_stride,
     const float*restrict weights,
     float*restrict output,
-    size_t output_stride) XNN_DISABLE_TSAN
+    size_t output_stride) XNN_OOB_READS
 {
   assert(rows != 0);
   assert(channels != 0);
diff --git a/src/f32-prelu/gen/wasmsimd-bitselect-4x8.c b/src/f32-prelu/gen/wasmsimd-bitselect-4x8.c
index afd6f58..71a3b65 100644
--- a/src/f32-prelu/gen/wasmsimd-bitselect-4x8.c
+++ b/src/f32-prelu/gen/wasmsimd-bitselect-4x8.c
@@ -22,7 +22,7 @@
     size_t input_stride,
     const float*restrict weights,
     float*restrict output,
-    size_t output_stride) XNN_DISABLE_TSAN
+    size_t output_stride) XNN_OOB_READS
 {
   assert(rows != 0);
   assert(channels != 0);
diff --git a/src/f32-prelu/gen/wasmsimd-minmax-1x16.c b/src/f32-prelu/gen/wasmsimd-minmax-1x16.c
index bfa9235..8e31154 100644
--- a/src/f32-prelu/gen/wasmsimd-minmax-1x16.c
+++ b/src/f32-prelu/gen/wasmsimd-minmax-1x16.c
@@ -22,7 +22,7 @@
     size_t input_stride,
     const float*restrict weights,
     float*restrict output,
-    size_t output_stride) XNN_DISABLE_TSAN
+    size_t output_stride) XNN_OOB_READS
 {
   assert(rows != 0);
   assert(channels != 0);
diff --git a/src/f32-prelu/gen/wasmsimd-minmax-1x4.c b/src/f32-prelu/gen/wasmsimd-minmax-1x4.c
index 2a65aea..a5b416e 100644
--- a/src/f32-prelu/gen/wasmsimd-minmax-1x4.c
+++ b/src/f32-prelu/gen/wasmsimd-minmax-1x4.c
@@ -22,7 +22,7 @@
     size_t input_stride,
     const float*restrict weights,
     float*restrict output,
-    size_t output_stride) XNN_DISABLE_TSAN
+    size_t output_stride) XNN_OOB_READS
 {
   assert(rows != 0);
   assert(channels != 0);
diff --git a/src/f32-prelu/gen/wasmsimd-minmax-1x8.c b/src/f32-prelu/gen/wasmsimd-minmax-1x8.c
index 3a945d6..4030945 100644
--- a/src/f32-prelu/gen/wasmsimd-minmax-1x8.c
+++ b/src/f32-prelu/gen/wasmsimd-minmax-1x8.c
@@ -22,7 +22,7 @@
     size_t input_stride,
     const float*restrict weights,
     float*restrict output,
-    size_t output_stride) XNN_DISABLE_TSAN
+    size_t output_stride) XNN_OOB_READS
 {
   assert(rows != 0);
   assert(channels != 0);
diff --git a/src/f32-prelu/gen/wasmsimd-minmax-2x16.c b/src/f32-prelu/gen/wasmsimd-minmax-2x16.c
index 00711db..2f88cb8 100644
--- a/src/f32-prelu/gen/wasmsimd-minmax-2x16.c
+++ b/src/f32-prelu/gen/wasmsimd-minmax-2x16.c
@@ -22,7 +22,7 @@
     size_t input_stride,
     const float*restrict weights,
     float*restrict output,
-    size_t output_stride) XNN_DISABLE_TSAN
+    size_t output_stride) XNN_OOB_READS
 {
   assert(rows != 0);
   assert(channels != 0);
diff --git a/src/f32-prelu/gen/wasmsimd-minmax-2x4.c b/src/f32-prelu/gen/wasmsimd-minmax-2x4.c
index a19fa18..81f4446 100644
--- a/src/f32-prelu/gen/wasmsimd-minmax-2x4.c
+++ b/src/f32-prelu/gen/wasmsimd-minmax-2x4.c
@@ -22,7 +22,7 @@
     size_t input_stride,
     const float*restrict weights,
     float*restrict output,
-    size_t output_stride) XNN_DISABLE_TSAN
+    size_t output_stride) XNN_OOB_READS
 {
   assert(rows != 0);
   assert(channels != 0);
diff --git a/src/f32-prelu/gen/wasmsimd-minmax-2x8.c b/src/f32-prelu/gen/wasmsimd-minmax-2x8.c
index 2390fd3..6afd663 100644
--- a/src/f32-prelu/gen/wasmsimd-minmax-2x8.c
+++ b/src/f32-prelu/gen/wasmsimd-minmax-2x8.c
@@ -22,7 +22,7 @@
     size_t input_stride,
     const float*restrict weights,
     float*restrict output,
-    size_t output_stride) XNN_DISABLE_TSAN
+    size_t output_stride) XNN_OOB_READS
 {
   assert(rows != 0);
   assert(channels != 0);
diff --git a/src/f32-prelu/gen/wasmsimd-minmax-4x16.c b/src/f32-prelu/gen/wasmsimd-minmax-4x16.c
index 0620033..86c1f76 100644
--- a/src/f32-prelu/gen/wasmsimd-minmax-4x16.c
+++ b/src/f32-prelu/gen/wasmsimd-minmax-4x16.c
@@ -22,7 +22,7 @@
     size_t input_stride,
     const float*restrict weights,
     float*restrict output,
-    size_t output_stride) XNN_DISABLE_TSAN
+    size_t output_stride) XNN_OOB_READS
 {
   assert(rows != 0);
   assert(channels != 0);
diff --git a/src/f32-prelu/gen/wasmsimd-minmax-4x4.c b/src/f32-prelu/gen/wasmsimd-minmax-4x4.c
index 702e880..7c56195 100644
--- a/src/f32-prelu/gen/wasmsimd-minmax-4x4.c
+++ b/src/f32-prelu/gen/wasmsimd-minmax-4x4.c
@@ -22,7 +22,7 @@
     size_t input_stride,
     const float*restrict weights,
     float*restrict output,
-    size_t output_stride) XNN_DISABLE_TSAN
+    size_t output_stride) XNN_OOB_READS
 {
   assert(rows != 0);
   assert(channels != 0);
diff --git a/src/f32-prelu/gen/wasmsimd-minmax-4x8.c b/src/f32-prelu/gen/wasmsimd-minmax-4x8.c
index af8b1fe..731ff4a 100644
--- a/src/f32-prelu/gen/wasmsimd-minmax-4x8.c
+++ b/src/f32-prelu/gen/wasmsimd-minmax-4x8.c
@@ -22,7 +22,7 @@
     size_t input_stride,
     const float*restrict weights,
     float*restrict output,
-    size_t output_stride) XNN_DISABLE_TSAN
+    size_t output_stride) XNN_OOB_READS
 {
   assert(rows != 0);
   assert(channels != 0);
diff --git a/src/f32-prelu/sse.c.in b/src/f32-prelu/sse.c.in
index b27b7f7..ab084d9 100644
--- a/src/f32-prelu/sse.c.in
+++ b/src/f32-prelu/sse.c.in
@@ -25,7 +25,7 @@
     size_t input_stride,
     const float*restrict weights,
     float*restrict output,
-    size_t output_stride) XNN_DISABLE_TSAN
+    size_t output_stride) XNN_OOB_READS
 {
   assert(rows != 0);
   assert(channels != 0);
diff --git a/src/f32-prelu/wasmsimd-bitselect.c.in b/src/f32-prelu/wasmsimd-bitselect.c.in
index bfed300..944a823 100644
--- a/src/f32-prelu/wasmsimd-bitselect.c.in
+++ b/src/f32-prelu/wasmsimd-bitselect.c.in
@@ -22,7 +22,7 @@
     size_t input_stride,
     const float*restrict weights,
     float*restrict output,
-    size_t output_stride) XNN_DISABLE_TSAN
+    size_t output_stride) XNN_OOB_READS
 {
   assert(rows != 0);
   assert(channels != 0);
diff --git a/src/f32-prelu/wasmsimd-minmax.c.in b/src/f32-prelu/wasmsimd-minmax.c.in
index 3007f47..a30d3d4 100644
--- a/src/f32-prelu/wasmsimd-minmax.c.in
+++ b/src/f32-prelu/wasmsimd-minmax.c.in
@@ -22,7 +22,7 @@
     size_t input_stride,
     const float*restrict weights,
     float*restrict output,
-    size_t output_stride) XNN_DISABLE_TSAN
+    size_t output_stride) XNN_OOB_READS
 {
   assert(rows != 0);
   assert(channels != 0);
diff --git a/src/f32-qs8-vcvt/gen/vcvt-scalar-magic-fminmax-x1.c b/src/f32-qs8-vcvt/gen/vcvt-scalar-magic-fminmax-x1.c
index 80e6ea3..90100cb 100644
--- a/src/f32-qs8-vcvt/gen/vcvt-scalar-magic-fminmax-x1.c
+++ b/src/f32-qs8-vcvt/gen/vcvt-scalar-magic-fminmax-x1.c
@@ -20,7 +20,7 @@
     size_t n,
     const float* x,
     int8_t* y,
-    const union xnn_f32_qs8_cvt_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_f32_qs8_cvt_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-qs8-vcvt/gen/vcvt-scalar-magic-fminmax-x2.c b/src/f32-qs8-vcvt/gen/vcvt-scalar-magic-fminmax-x2.c
index d851ac6..97f6968 100644
--- a/src/f32-qs8-vcvt/gen/vcvt-scalar-magic-fminmax-x2.c
+++ b/src/f32-qs8-vcvt/gen/vcvt-scalar-magic-fminmax-x2.c
@@ -20,7 +20,7 @@
     size_t n,
     const float* x,
     int8_t* y,
-    const union xnn_f32_qs8_cvt_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_f32_qs8_cvt_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-qs8-vcvt/gen/vcvt-scalar-magic-fminmax-x3.c b/src/f32-qs8-vcvt/gen/vcvt-scalar-magic-fminmax-x3.c
index 91a9ab4..b4e8189 100644
--- a/src/f32-qs8-vcvt/gen/vcvt-scalar-magic-fminmax-x3.c
+++ b/src/f32-qs8-vcvt/gen/vcvt-scalar-magic-fminmax-x3.c
@@ -20,7 +20,7 @@
     size_t n,
     const float* x,
     int8_t* y,
-    const union xnn_f32_qs8_cvt_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_f32_qs8_cvt_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-qs8-vcvt/gen/vcvt-scalar-magic-fminmax-x4.c b/src/f32-qs8-vcvt/gen/vcvt-scalar-magic-fminmax-x4.c
index 85998ff..74ebe0c 100644
--- a/src/f32-qs8-vcvt/gen/vcvt-scalar-magic-fminmax-x4.c
+++ b/src/f32-qs8-vcvt/gen/vcvt-scalar-magic-fminmax-x4.c
@@ -20,7 +20,7 @@
     size_t n,
     const float* x,
     int8_t* y,
-    const union xnn_f32_qs8_cvt_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_f32_qs8_cvt_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-qs8-vcvt/gen/vcvt-scalar-magic-iminmax-x1.c b/src/f32-qs8-vcvt/gen/vcvt-scalar-magic-iminmax-x1.c
index 6f28a31..2331f8c 100644
--- a/src/f32-qs8-vcvt/gen/vcvt-scalar-magic-iminmax-x1.c
+++ b/src/f32-qs8-vcvt/gen/vcvt-scalar-magic-iminmax-x1.c
@@ -20,7 +20,7 @@
     size_t n,
     const float* x,
     int8_t* y,
-    const union xnn_f32_qs8_cvt_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_f32_qs8_cvt_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-qs8-vcvt/gen/vcvt-scalar-magic-iminmax-x2.c b/src/f32-qs8-vcvt/gen/vcvt-scalar-magic-iminmax-x2.c
index b7f7ae7..32ac576 100644
--- a/src/f32-qs8-vcvt/gen/vcvt-scalar-magic-iminmax-x2.c
+++ b/src/f32-qs8-vcvt/gen/vcvt-scalar-magic-iminmax-x2.c
@@ -20,7 +20,7 @@
     size_t n,
     const float* x,
     int8_t* y,
-    const union xnn_f32_qs8_cvt_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_f32_qs8_cvt_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-qs8-vcvt/gen/vcvt-scalar-magic-iminmax-x3.c b/src/f32-qs8-vcvt/gen/vcvt-scalar-magic-iminmax-x3.c
index 33510a9..3f9d91a 100644
--- a/src/f32-qs8-vcvt/gen/vcvt-scalar-magic-iminmax-x3.c
+++ b/src/f32-qs8-vcvt/gen/vcvt-scalar-magic-iminmax-x3.c
@@ -20,7 +20,7 @@
     size_t n,
     const float* x,
     int8_t* y,
-    const union xnn_f32_qs8_cvt_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_f32_qs8_cvt_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-qs8-vcvt/gen/vcvt-scalar-magic-iminmax-x4.c b/src/f32-qs8-vcvt/gen/vcvt-scalar-magic-iminmax-x4.c
index afc2ccc..1608ac2 100644
--- a/src/f32-qs8-vcvt/gen/vcvt-scalar-magic-iminmax-x4.c
+++ b/src/f32-qs8-vcvt/gen/vcvt-scalar-magic-iminmax-x4.c
@@ -20,7 +20,7 @@
     size_t n,
     const float* x,
     int8_t* y,
-    const union xnn_f32_qs8_cvt_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_f32_qs8_cvt_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-qs8-vcvt/gen/vcvt-wasm-magic-fminmax-x1.c b/src/f32-qs8-vcvt/gen/vcvt-wasm-magic-fminmax-x1.c
index 0007382..514f14c 100644
--- a/src/f32-qs8-vcvt/gen/vcvt-wasm-magic-fminmax-x1.c
+++ b/src/f32-qs8-vcvt/gen/vcvt-wasm-magic-fminmax-x1.c
@@ -20,7 +20,7 @@
     size_t n,
     const float* x,
     int8_t* y,
-    const union xnn_f32_qs8_cvt_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_f32_qs8_cvt_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-qs8-vcvt/gen/vcvt-wasm-magic-fminmax-x2.c b/src/f32-qs8-vcvt/gen/vcvt-wasm-magic-fminmax-x2.c
index 6e8458b..2daf3c0 100644
--- a/src/f32-qs8-vcvt/gen/vcvt-wasm-magic-fminmax-x2.c
+++ b/src/f32-qs8-vcvt/gen/vcvt-wasm-magic-fminmax-x2.c
@@ -20,7 +20,7 @@
     size_t n,
     const float* x,
     int8_t* y,
-    const union xnn_f32_qs8_cvt_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_f32_qs8_cvt_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-qs8-vcvt/gen/vcvt-wasm-magic-fminmax-x3.c b/src/f32-qs8-vcvt/gen/vcvt-wasm-magic-fminmax-x3.c
index d241906..d4cde4d 100644
--- a/src/f32-qs8-vcvt/gen/vcvt-wasm-magic-fminmax-x3.c
+++ b/src/f32-qs8-vcvt/gen/vcvt-wasm-magic-fminmax-x3.c
@@ -20,7 +20,7 @@
     size_t n,
     const float* x,
     int8_t* y,
-    const union xnn_f32_qs8_cvt_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_f32_qs8_cvt_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-qs8-vcvt/gen/vcvt-wasm-magic-fminmax-x4.c b/src/f32-qs8-vcvt/gen/vcvt-wasm-magic-fminmax-x4.c
index b627301..5d34ac5 100644
--- a/src/f32-qs8-vcvt/gen/vcvt-wasm-magic-fminmax-x4.c
+++ b/src/f32-qs8-vcvt/gen/vcvt-wasm-magic-fminmax-x4.c
@@ -20,7 +20,7 @@
     size_t n,
     const float* x,
     int8_t* y,
-    const union xnn_f32_qs8_cvt_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_f32_qs8_cvt_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-qs8-vcvt/scalar-magic-fminmax.c.in b/src/f32-qs8-vcvt/scalar-magic-fminmax.c.in
index 723e241..df05ca5 100644
--- a/src/f32-qs8-vcvt/scalar-magic-fminmax.c.in
+++ b/src/f32-qs8-vcvt/scalar-magic-fminmax.c.in
@@ -20,7 +20,7 @@
     size_t n,
     const float* x,
     ${XINT8_T}* y,
-    const union xnn_f32_${DATATYPE.lower()}_cvt_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_f32_${DATATYPE.lower()}_cvt_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-qs8-vcvt/scalar-magic-iminmax.c.in b/src/f32-qs8-vcvt/scalar-magic-iminmax.c.in
index 9e103c3..501a2e3 100644
--- a/src/f32-qs8-vcvt/scalar-magic-iminmax.c.in
+++ b/src/f32-qs8-vcvt/scalar-magic-iminmax.c.in
@@ -18,7 +18,7 @@
     size_t n,
     const float* x,
     ${XINT8_T}* y,
-    const union xnn_f32_${DATATYPE.lower()}_cvt_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_f32_${DATATYPE.lower()}_cvt_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-qu8-vcvt/gen/vcvt-scalar-magic-fminmax-x1.c b/src/f32-qu8-vcvt/gen/vcvt-scalar-magic-fminmax-x1.c
index 2012763..7b70255 100644
--- a/src/f32-qu8-vcvt/gen/vcvt-scalar-magic-fminmax-x1.c
+++ b/src/f32-qu8-vcvt/gen/vcvt-scalar-magic-fminmax-x1.c
@@ -20,7 +20,7 @@
     size_t n,
     const float* x,
     uint8_t* y,
-    const union xnn_f32_qu8_cvt_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_f32_qu8_cvt_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-qu8-vcvt/gen/vcvt-scalar-magic-fminmax-x2.c b/src/f32-qu8-vcvt/gen/vcvt-scalar-magic-fminmax-x2.c
index 5852ed1..04f4aaf 100644
--- a/src/f32-qu8-vcvt/gen/vcvt-scalar-magic-fminmax-x2.c
+++ b/src/f32-qu8-vcvt/gen/vcvt-scalar-magic-fminmax-x2.c
@@ -20,7 +20,7 @@
     size_t n,
     const float* x,
     uint8_t* y,
-    const union xnn_f32_qu8_cvt_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_f32_qu8_cvt_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-qu8-vcvt/gen/vcvt-scalar-magic-fminmax-x3.c b/src/f32-qu8-vcvt/gen/vcvt-scalar-magic-fminmax-x3.c
index b83cd18..5eff486 100644
--- a/src/f32-qu8-vcvt/gen/vcvt-scalar-magic-fminmax-x3.c
+++ b/src/f32-qu8-vcvt/gen/vcvt-scalar-magic-fminmax-x3.c
@@ -20,7 +20,7 @@
     size_t n,
     const float* x,
     uint8_t* y,
-    const union xnn_f32_qu8_cvt_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_f32_qu8_cvt_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-qu8-vcvt/gen/vcvt-scalar-magic-fminmax-x4.c b/src/f32-qu8-vcvt/gen/vcvt-scalar-magic-fminmax-x4.c
index 2d26815..998feb2 100644
--- a/src/f32-qu8-vcvt/gen/vcvt-scalar-magic-fminmax-x4.c
+++ b/src/f32-qu8-vcvt/gen/vcvt-scalar-magic-fminmax-x4.c
@@ -20,7 +20,7 @@
     size_t n,
     const float* x,
     uint8_t* y,
-    const union xnn_f32_qu8_cvt_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_f32_qu8_cvt_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-qu8-vcvt/gen/vcvt-scalar-magic-iminmax-x1.c b/src/f32-qu8-vcvt/gen/vcvt-scalar-magic-iminmax-x1.c
index fdee9c5..3be75d7 100644
--- a/src/f32-qu8-vcvt/gen/vcvt-scalar-magic-iminmax-x1.c
+++ b/src/f32-qu8-vcvt/gen/vcvt-scalar-magic-iminmax-x1.c
@@ -20,7 +20,7 @@
     size_t n,
     const float* x,
     uint8_t* y,
-    const union xnn_f32_qu8_cvt_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_f32_qu8_cvt_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-qu8-vcvt/gen/vcvt-scalar-magic-iminmax-x2.c b/src/f32-qu8-vcvt/gen/vcvt-scalar-magic-iminmax-x2.c
index c5818bf..48c696d 100644
--- a/src/f32-qu8-vcvt/gen/vcvt-scalar-magic-iminmax-x2.c
+++ b/src/f32-qu8-vcvt/gen/vcvt-scalar-magic-iminmax-x2.c
@@ -20,7 +20,7 @@
     size_t n,
     const float* x,
     uint8_t* y,
-    const union xnn_f32_qu8_cvt_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_f32_qu8_cvt_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-qu8-vcvt/gen/vcvt-scalar-magic-iminmax-x3.c b/src/f32-qu8-vcvt/gen/vcvt-scalar-magic-iminmax-x3.c
index 12ee8bf..05cb02c 100644
--- a/src/f32-qu8-vcvt/gen/vcvt-scalar-magic-iminmax-x3.c
+++ b/src/f32-qu8-vcvt/gen/vcvt-scalar-magic-iminmax-x3.c
@@ -20,7 +20,7 @@
     size_t n,
     const float* x,
     uint8_t* y,
-    const union xnn_f32_qu8_cvt_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_f32_qu8_cvt_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-qu8-vcvt/gen/vcvt-scalar-magic-iminmax-x4.c b/src/f32-qu8-vcvt/gen/vcvt-scalar-magic-iminmax-x4.c
index cf1f7d2..e5c9add 100644
--- a/src/f32-qu8-vcvt/gen/vcvt-scalar-magic-iminmax-x4.c
+++ b/src/f32-qu8-vcvt/gen/vcvt-scalar-magic-iminmax-x4.c
@@ -20,7 +20,7 @@
     size_t n,
     const float* x,
     uint8_t* y,
-    const union xnn_f32_qu8_cvt_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_f32_qu8_cvt_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-qu8-vcvt/gen/vcvt-wasm-magic-fminmax-x1.c b/src/f32-qu8-vcvt/gen/vcvt-wasm-magic-fminmax-x1.c
index c259cab..6e49627 100644
--- a/src/f32-qu8-vcvt/gen/vcvt-wasm-magic-fminmax-x1.c
+++ b/src/f32-qu8-vcvt/gen/vcvt-wasm-magic-fminmax-x1.c
@@ -20,7 +20,7 @@
     size_t n,
     const float* x,
     uint8_t* y,
-    const union xnn_f32_qu8_cvt_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_f32_qu8_cvt_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-qu8-vcvt/gen/vcvt-wasm-magic-fminmax-x2.c b/src/f32-qu8-vcvt/gen/vcvt-wasm-magic-fminmax-x2.c
index 4be96fe..6316ea4 100644
--- a/src/f32-qu8-vcvt/gen/vcvt-wasm-magic-fminmax-x2.c
+++ b/src/f32-qu8-vcvt/gen/vcvt-wasm-magic-fminmax-x2.c
@@ -20,7 +20,7 @@
     size_t n,
     const float* x,
     uint8_t* y,
-    const union xnn_f32_qu8_cvt_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_f32_qu8_cvt_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-qu8-vcvt/gen/vcvt-wasm-magic-fminmax-x3.c b/src/f32-qu8-vcvt/gen/vcvt-wasm-magic-fminmax-x3.c
index f621d79..5cfec77 100644
--- a/src/f32-qu8-vcvt/gen/vcvt-wasm-magic-fminmax-x3.c
+++ b/src/f32-qu8-vcvt/gen/vcvt-wasm-magic-fminmax-x3.c
@@ -20,7 +20,7 @@
     size_t n,
     const float* x,
     uint8_t* y,
-    const union xnn_f32_qu8_cvt_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_f32_qu8_cvt_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/f32-qu8-vcvt/gen/vcvt-wasm-magic-fminmax-x4.c b/src/f32-qu8-vcvt/gen/vcvt-wasm-magic-fminmax-x4.c
index 81f3bad..fd02658 100644
--- a/src/f32-qu8-vcvt/gen/vcvt-wasm-magic-fminmax-x4.c
+++ b/src/f32-qu8-vcvt/gen/vcvt-wasm-magic-fminmax-x4.c
@@ -20,7 +20,7 @@
     size_t n,
     const float* x,
     uint8_t* y,
-    const union xnn_f32_qu8_cvt_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_f32_qu8_cvt_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(float) == 0);
diff --git a/src/qc8-gemm/gen/1x16-minmax-fp32-neon-mlal-lane.c b/src/qc8-gemm/gen/1x16-minmax-fp32-neon-mlal-lane.c
index 30c8b6a..54908f3 100644
--- a/src/qc8-gemm/gen/1x16-minmax-fp32-neon-mlal-lane.c
+++ b/src/qc8-gemm/gen/1x16-minmax-fp32-neon-mlal-lane.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qc8-gemm/gen/1x16-minmax-fp32-neonv8-mlal-lane.c b/src/qc8-gemm/gen/1x16-minmax-fp32-neonv8-mlal-lane.c
index 5ffe80a..68c778e 100644
--- a/src/qc8-gemm/gen/1x16-minmax-fp32-neonv8-mlal-lane.c
+++ b/src/qc8-gemm/gen/1x16-minmax-fp32-neonv8-mlal-lane.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qc8-gemm/gen/1x16c4-minmax-fp32-neondot.c b/src/qc8-gemm/gen/1x16c4-minmax-fp32-neondot.c
index f576bf1..9b75b80 100644
--- a/src/qc8-gemm/gen/1x16c4-minmax-fp32-neondot.c
+++ b/src/qc8-gemm/gen/1x16c4-minmax-fp32-neondot.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qc8-gemm/gen/1x16c8-minmax-fp32-avx512skx.c b/src/qc8-gemm/gen/1x16c8-minmax-fp32-avx512skx.c
index cbc4e47..1ea54dc 100644
--- a/src/qc8-gemm/gen/1x16c8-minmax-fp32-avx512skx.c
+++ b/src/qc8-gemm/gen/1x16c8-minmax-fp32-avx512skx.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qc8-gemm/gen/1x4c2-minmax-fp32-avx-ld128.c b/src/qc8-gemm/gen/1x4c2-minmax-fp32-avx-ld128.c
index a1a3a1c..c837a24 100644
--- a/src/qc8-gemm/gen/1x4c2-minmax-fp32-avx-ld128.c
+++ b/src/qc8-gemm/gen/1x4c2-minmax-fp32-avx-ld128.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qc8-gemm/gen/1x4c2-minmax-fp32-avx-ld64.c b/src/qc8-gemm/gen/1x4c2-minmax-fp32-avx-ld64.c
index b449371..fab3af9 100644
--- a/src/qc8-gemm/gen/1x4c2-minmax-fp32-avx-ld64.c
+++ b/src/qc8-gemm/gen/1x4c2-minmax-fp32-avx-ld64.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qc8-gemm/gen/1x4c2-minmax-fp32-sse2-ld128.c b/src/qc8-gemm/gen/1x4c2-minmax-fp32-sse2-ld128.c
index 8e5e08b..3893fc0 100644
--- a/src/qc8-gemm/gen/1x4c2-minmax-fp32-sse2-ld128.c
+++ b/src/qc8-gemm/gen/1x4c2-minmax-fp32-sse2-ld128.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qc8-gemm/gen/1x4c2-minmax-fp32-sse2-ld64.c b/src/qc8-gemm/gen/1x4c2-minmax-fp32-sse2-ld64.c
index cf7c164..bc535f5 100644
--- a/src/qc8-gemm/gen/1x4c2-minmax-fp32-sse2-ld64.c
+++ b/src/qc8-gemm/gen/1x4c2-minmax-fp32-sse2-ld64.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qc8-gemm/gen/1x4c2-minmax-fp32-sse41-ld128.c b/src/qc8-gemm/gen/1x4c2-minmax-fp32-sse41-ld128.c
index 7d5fce0..89d6d23 100644
--- a/src/qc8-gemm/gen/1x4c2-minmax-fp32-sse41-ld128.c
+++ b/src/qc8-gemm/gen/1x4c2-minmax-fp32-sse41-ld128.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qc8-gemm/gen/1x4c2-minmax-fp32-sse41-ld64.c b/src/qc8-gemm/gen/1x4c2-minmax-fp32-sse41-ld64.c
index 8a299b3..768bf5b 100644
--- a/src/qc8-gemm/gen/1x4c2-minmax-fp32-sse41-ld64.c
+++ b/src/qc8-gemm/gen/1x4c2-minmax-fp32-sse41-ld64.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qc8-gemm/gen/1x4c2-minmax-fp32-wasmsimd-dot16x2-ld128.c b/src/qc8-gemm/gen/1x4c2-minmax-fp32-wasmsimd-dot16x2-ld128.c
index 09c73a8..65ffbf7 100644
--- a/src/qc8-gemm/gen/1x4c2-minmax-fp32-wasmsimd-dot16x2-ld128.c
+++ b/src/qc8-gemm/gen/1x4c2-minmax-fp32-wasmsimd-dot16x2-ld128.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qc8-gemm/gen/1x4c2-minmax-fp32-wasmsimd-dot16x2-ld64.c b/src/qc8-gemm/gen/1x4c2-minmax-fp32-wasmsimd-dot16x2-ld64.c
index 9b8639e..a7a4293 100644
--- a/src/qc8-gemm/gen/1x4c2-minmax-fp32-wasmsimd-dot16x2-ld64.c
+++ b/src/qc8-gemm/gen/1x4c2-minmax-fp32-wasmsimd-dot16x2-ld64.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qc8-gemm/gen/1x4c2-minmax-fp32-xop-ld128.c b/src/qc8-gemm/gen/1x4c2-minmax-fp32-xop-ld128.c
index 8c4d1ba..47b708a 100644
--- a/src/qc8-gemm/gen/1x4c2-minmax-fp32-xop-ld128.c
+++ b/src/qc8-gemm/gen/1x4c2-minmax-fp32-xop-ld128.c
@@ -31,7 +31,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qc8-gemm/gen/1x4c2-minmax-fp32-xop-ld64.c b/src/qc8-gemm/gen/1x4c2-minmax-fp32-xop-ld64.c
index b623f81..d2207fd 100644
--- a/src/qc8-gemm/gen/1x4c2-minmax-fp32-xop-ld64.c
+++ b/src/qc8-gemm/gen/1x4c2-minmax-fp32-xop-ld64.c
@@ -31,7 +31,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qc8-gemm/gen/1x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld128.c b/src/qc8-gemm/gen/1x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld128.c
index 3ba24c5..83e31b9 100644
--- a/src/qc8-gemm/gen/1x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld128.c
+++ b/src/qc8-gemm/gen/1x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld128.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qc8-gemm/gen/1x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld64.c b/src/qc8-gemm/gen/1x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld64.c
index dbffb6f..7c1a7b0 100644
--- a/src/qc8-gemm/gen/1x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld64.c
+++ b/src/qc8-gemm/gen/1x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld64.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qc8-gemm/gen/1x4c8-minmax-fp32-avx-ld128.c b/src/qc8-gemm/gen/1x4c8-minmax-fp32-avx-ld128.c
index 75ebf57..fd452eb 100644
--- a/src/qc8-gemm/gen/1x4c8-minmax-fp32-avx-ld128.c
+++ b/src/qc8-gemm/gen/1x4c8-minmax-fp32-avx-ld128.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qc8-gemm/gen/1x4c8-minmax-fp32-avx-ld64.c b/src/qc8-gemm/gen/1x4c8-minmax-fp32-avx-ld64.c
index e2c0f0e..e67308a 100644
--- a/src/qc8-gemm/gen/1x4c8-minmax-fp32-avx-ld64.c
+++ b/src/qc8-gemm/gen/1x4c8-minmax-fp32-avx-ld64.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qc8-gemm/gen/1x4c8-minmax-fp32-sse2-ld128.c b/src/qc8-gemm/gen/1x4c8-minmax-fp32-sse2-ld128.c
index a6b6bc6..66fbff0 100644
--- a/src/qc8-gemm/gen/1x4c8-minmax-fp32-sse2-ld128.c
+++ b/src/qc8-gemm/gen/1x4c8-minmax-fp32-sse2-ld128.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qc8-gemm/gen/1x4c8-minmax-fp32-sse2-ld64.c b/src/qc8-gemm/gen/1x4c8-minmax-fp32-sse2-ld64.c
index 956dcd6..2c4a29f 100644
--- a/src/qc8-gemm/gen/1x4c8-minmax-fp32-sse2-ld64.c
+++ b/src/qc8-gemm/gen/1x4c8-minmax-fp32-sse2-ld64.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qc8-gemm/gen/1x4c8-minmax-fp32-sse41-ld128.c b/src/qc8-gemm/gen/1x4c8-minmax-fp32-sse41-ld128.c
index cf8fa99..a83a1a2 100644
--- a/src/qc8-gemm/gen/1x4c8-minmax-fp32-sse41-ld128.c
+++ b/src/qc8-gemm/gen/1x4c8-minmax-fp32-sse41-ld128.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qc8-gemm/gen/1x4c8-minmax-fp32-sse41-ld64.c b/src/qc8-gemm/gen/1x4c8-minmax-fp32-sse41-ld64.c
index 11e6c0d..4944a23 100644
--- a/src/qc8-gemm/gen/1x4c8-minmax-fp32-sse41-ld64.c
+++ b/src/qc8-gemm/gen/1x4c8-minmax-fp32-sse41-ld64.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qc8-gemm/gen/1x4c8-minmax-fp32-wasmsimd-dot16x2-ld128.c b/src/qc8-gemm/gen/1x4c8-minmax-fp32-wasmsimd-dot16x2-ld128.c
index 25f5ada..991fc55 100644
--- a/src/qc8-gemm/gen/1x4c8-minmax-fp32-wasmsimd-dot16x2-ld128.c
+++ b/src/qc8-gemm/gen/1x4c8-minmax-fp32-wasmsimd-dot16x2-ld128.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qc8-gemm/gen/1x4c8-minmax-fp32-wasmsimd-dot16x2-ld64.c b/src/qc8-gemm/gen/1x4c8-minmax-fp32-wasmsimd-dot16x2-ld64.c
index 63bdbf1..5dcb027 100644
--- a/src/qc8-gemm/gen/1x4c8-minmax-fp32-wasmsimd-dot16x2-ld64.c
+++ b/src/qc8-gemm/gen/1x4c8-minmax-fp32-wasmsimd-dot16x2-ld64.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qc8-gemm/gen/1x4c8-minmax-fp32-wasmsimd-mul16-ld128.c b/src/qc8-gemm/gen/1x4c8-minmax-fp32-wasmsimd-mul16-ld128.c
index eb139fd..bdbd92f 100644
--- a/src/qc8-gemm/gen/1x4c8-minmax-fp32-wasmsimd-mul16-ld128.c
+++ b/src/qc8-gemm/gen/1x4c8-minmax-fp32-wasmsimd-mul16-ld128.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qc8-gemm/gen/1x4c8-minmax-fp32-wasmsimd-mul16-ld64.c b/src/qc8-gemm/gen/1x4c8-minmax-fp32-wasmsimd-mul16-ld64.c
index e4d1865..d194dc0 100644
--- a/src/qc8-gemm/gen/1x4c8-minmax-fp32-wasmsimd-mul16-ld64.c
+++ b/src/qc8-gemm/gen/1x4c8-minmax-fp32-wasmsimd-mul16-ld64.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qc8-gemm/gen/1x4c8-minmax-fp32-xop-ld128.c b/src/qc8-gemm/gen/1x4c8-minmax-fp32-xop-ld128.c
index 981f346..9f21430 100644
--- a/src/qc8-gemm/gen/1x4c8-minmax-fp32-xop-ld128.c
+++ b/src/qc8-gemm/gen/1x4c8-minmax-fp32-xop-ld128.c
@@ -30,7 +30,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qc8-gemm/gen/1x4c8-minmax-fp32-xop-ld64.c b/src/qc8-gemm/gen/1x4c8-minmax-fp32-xop-ld64.c
index 5eefcd7..29b05d8 100644
--- a/src/qc8-gemm/gen/1x4c8-minmax-fp32-xop-ld64.c
+++ b/src/qc8-gemm/gen/1x4c8-minmax-fp32-xop-ld64.c
@@ -30,7 +30,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qc8-gemm/gen/1x8c2-minmax-fp32-neon-mlal-dup.c b/src/qc8-gemm/gen/1x8c2-minmax-fp32-neon-mlal-dup.c
index 8e28c1f..8f5a37e 100644
--- a/src/qc8-gemm/gen/1x8c2-minmax-fp32-neon-mlal-dup.c
+++ b/src/qc8-gemm/gen/1x8c2-minmax-fp32-neon-mlal-dup.c
@@ -24,7 +24,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qc8-gemm/gen/1x8c2-minmax-fp32-neon-mlal-ld1r.c b/src/qc8-gemm/gen/1x8c2-minmax-fp32-neon-mlal-ld1r.c
index ea61ab4..da36517 100644
--- a/src/qc8-gemm/gen/1x8c2-minmax-fp32-neon-mlal-ld1r.c
+++ b/src/qc8-gemm/gen/1x8c2-minmax-fp32-neon-mlal-ld1r.c
@@ -24,7 +24,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qc8-gemm/gen/1x8c2-minmax-fp32-neon-mlal-ld2r.c b/src/qc8-gemm/gen/1x8c2-minmax-fp32-neon-mlal-ld2r.c
index 1b60037..699c893 100644
--- a/src/qc8-gemm/gen/1x8c2-minmax-fp32-neon-mlal-ld2r.c
+++ b/src/qc8-gemm/gen/1x8c2-minmax-fp32-neon-mlal-ld2r.c
@@ -24,7 +24,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qc8-gemm/gen/1x8c2-minmax-fp32-neon-mlal-ld4r.c b/src/qc8-gemm/gen/1x8c2-minmax-fp32-neon-mlal-ld4r.c
index 6413271..4491d52 100644
--- a/src/qc8-gemm/gen/1x8c2-minmax-fp32-neon-mlal-ld4r.c
+++ b/src/qc8-gemm/gen/1x8c2-minmax-fp32-neon-mlal-ld4r.c
@@ -24,7 +24,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qc8-gemm/gen/1x8c2-minmax-fp32-neonv8-mlal-dup.c b/src/qc8-gemm/gen/1x8c2-minmax-fp32-neonv8-mlal-dup.c
index c25c775..13cd734 100644
--- a/src/qc8-gemm/gen/1x8c2-minmax-fp32-neonv8-mlal-dup.c
+++ b/src/qc8-gemm/gen/1x8c2-minmax-fp32-neonv8-mlal-dup.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qc8-gemm/gen/1x8c2-minmax-fp32-neonv8-mlal-ld1r.c b/src/qc8-gemm/gen/1x8c2-minmax-fp32-neonv8-mlal-ld1r.c
index 4b64c54..e53d364 100644
--- a/src/qc8-gemm/gen/1x8c2-minmax-fp32-neonv8-mlal-ld1r.c
+++ b/src/qc8-gemm/gen/1x8c2-minmax-fp32-neonv8-mlal-ld1r.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qc8-gemm/gen/1x8c2-minmax-fp32-neonv8-mlal-ld2r.c b/src/qc8-gemm/gen/1x8c2-minmax-fp32-neonv8-mlal-ld2r.c
index ce6a549..74c4205 100644
--- a/src/qc8-gemm/gen/1x8c2-minmax-fp32-neonv8-mlal-ld2r.c
+++ b/src/qc8-gemm/gen/1x8c2-minmax-fp32-neonv8-mlal-ld2r.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qc8-gemm/gen/1x8c2-minmax-fp32-neonv8-mlal-ld4r.c b/src/qc8-gemm/gen/1x8c2-minmax-fp32-neonv8-mlal-ld4r.c
index c906f93..fb007aa 100644
--- a/src/qc8-gemm/gen/1x8c2-minmax-fp32-neonv8-mlal-ld4r.c
+++ b/src/qc8-gemm/gen/1x8c2-minmax-fp32-neonv8-mlal-ld4r.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qc8-gemm/gen/1x8c2s4-minmax-fp32-neon-mlal.c b/src/qc8-gemm/gen/1x8c2s4-minmax-fp32-neon-mlal.c
index c2da542..24acd66 100644
--- a/src/qc8-gemm/gen/1x8c2s4-minmax-fp32-neon-mlal.c
+++ b/src/qc8-gemm/gen/1x8c2s4-minmax-fp32-neon-mlal.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qc8-gemm/gen/1x8c2s4-minmax-fp32-neonv8-mlal.c b/src/qc8-gemm/gen/1x8c2s4-minmax-fp32-neonv8-mlal.c
index f3b5081..eadf616 100644
--- a/src/qc8-gemm/gen/1x8c2s4-minmax-fp32-neonv8-mlal.c
+++ b/src/qc8-gemm/gen/1x8c2s4-minmax-fp32-neonv8-mlal.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qc8-gemm/gen/1x8c4-minmax-fp32-neon-mlal-dup.c b/src/qc8-gemm/gen/1x8c4-minmax-fp32-neon-mlal-dup.c
index 1485695..c1b728d 100644
--- a/src/qc8-gemm/gen/1x8c4-minmax-fp32-neon-mlal-dup.c
+++ b/src/qc8-gemm/gen/1x8c4-minmax-fp32-neon-mlal-dup.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qc8-gemm/gen/1x8c4-minmax-fp32-neon-mlal-ld1r.c b/src/qc8-gemm/gen/1x8c4-minmax-fp32-neon-mlal-ld1r.c
index 22398c9..bb0e943 100644
--- a/src/qc8-gemm/gen/1x8c4-minmax-fp32-neon-mlal-ld1r.c
+++ b/src/qc8-gemm/gen/1x8c4-minmax-fp32-neon-mlal-ld1r.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qc8-gemm/gen/1x8c4-minmax-fp32-neon-mlal-ld2r.c b/src/qc8-gemm/gen/1x8c4-minmax-fp32-neon-mlal-ld2r.c
index bae6cd9..dd74420 100644
--- a/src/qc8-gemm/gen/1x8c4-minmax-fp32-neon-mlal-ld2r.c
+++ b/src/qc8-gemm/gen/1x8c4-minmax-fp32-neon-mlal-ld2r.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qc8-gemm/gen/1x8c4-minmax-fp32-neondot.c b/src/qc8-gemm/gen/1x8c4-minmax-fp32-neondot.c
index 7cff687..617c905 100644
--- a/src/qc8-gemm/gen/1x8c4-minmax-fp32-neondot.c
+++ b/src/qc8-gemm/gen/1x8c4-minmax-fp32-neondot.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qc8-gemm/gen/1x8c4-minmax-fp32-neonv8-mlal-dup.c b/src/qc8-gemm/gen/1x8c4-minmax-fp32-neonv8-mlal-dup.c
index 351dfd4..5117e4a 100644
--- a/src/qc8-gemm/gen/1x8c4-minmax-fp32-neonv8-mlal-dup.c
+++ b/src/qc8-gemm/gen/1x8c4-minmax-fp32-neonv8-mlal-dup.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qc8-gemm/gen/1x8c4-minmax-fp32-neonv8-mlal-ld1r.c b/src/qc8-gemm/gen/1x8c4-minmax-fp32-neonv8-mlal-ld1r.c
index 960ef87..bff2e3a 100644
--- a/src/qc8-gemm/gen/1x8c4-minmax-fp32-neonv8-mlal-ld1r.c
+++ b/src/qc8-gemm/gen/1x8c4-minmax-fp32-neonv8-mlal-ld1r.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qc8-gemm/gen/1x8c4-minmax-fp32-neonv8-mlal-ld2r.c b/src/qc8-gemm/gen/1x8c4-minmax-fp32-neonv8-mlal-ld2r.c
index 46453af..2c09f1e 100644
--- a/src/qc8-gemm/gen/1x8c4-minmax-fp32-neonv8-mlal-ld2r.c
+++ b/src/qc8-gemm/gen/1x8c4-minmax-fp32-neonv8-mlal-ld2r.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qc8-gemm/gen/1x8c4s2-minmax-fp32-neon-mlal.c b/src/qc8-gemm/gen/1x8c4s2-minmax-fp32-neon-mlal.c
index 6b0e2ae..4f357c7 100644
--- a/src/qc8-gemm/gen/1x8c4s2-minmax-fp32-neon-mlal.c
+++ b/src/qc8-gemm/gen/1x8c4s2-minmax-fp32-neon-mlal.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qc8-gemm/gen/1x8c4s2-minmax-fp32-neonv8-mlal.c b/src/qc8-gemm/gen/1x8c4s2-minmax-fp32-neonv8-mlal.c
index ff19625..4d86ed9 100644
--- a/src/qc8-gemm/gen/1x8c4s2-minmax-fp32-neonv8-mlal.c
+++ b/src/qc8-gemm/gen/1x8c4s2-minmax-fp32-neonv8-mlal.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qc8-gemm/gen/1x8c8-minmax-fp32-avx2.c b/src/qc8-gemm/gen/1x8c8-minmax-fp32-avx2.c
index dcedc94..fdfb5ad 100644
--- a/src/qc8-gemm/gen/1x8c8-minmax-fp32-avx2.c
+++ b/src/qc8-gemm/gen/1x8c8-minmax-fp32-avx2.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qc8-gemm/gen/1x8c8-minmax-fp32-neon-mlal.c b/src/qc8-gemm/gen/1x8c8-minmax-fp32-neon-mlal.c
index 2d78b0d..025fec9 100644
--- a/src/qc8-gemm/gen/1x8c8-minmax-fp32-neon-mlal.c
+++ b/src/qc8-gemm/gen/1x8c8-minmax-fp32-neon-mlal.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qc8-gemm/gen/1x8c8-minmax-fp32-neonv8-mlal.c b/src/qc8-gemm/gen/1x8c8-minmax-fp32-neonv8-mlal.c
index d248a9a..5adb54a 100644
--- a/src/qc8-gemm/gen/1x8c8-minmax-fp32-neonv8-mlal.c
+++ b/src/qc8-gemm/gen/1x8c8-minmax-fp32-neonv8-mlal.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qc8-gemm/gen/1x8c8-xw-minmax-fp32-avx2.c b/src/qc8-gemm/gen/1x8c8-xw-minmax-fp32-avx2.c
index 794b00f..3e9cb85 100644
--- a/src/qc8-gemm/gen/1x8c8-xw-minmax-fp32-avx2.c
+++ b/src/qc8-gemm/gen/1x8c8-xw-minmax-fp32-avx2.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qc8-gemm/gen/2x16c8-minmax-fp32-avx512skx.c b/src/qc8-gemm/gen/2x16c8-minmax-fp32-avx512skx.c
index 7f34bec..ee5beb3 100644
--- a/src/qc8-gemm/gen/2x16c8-minmax-fp32-avx512skx.c
+++ b/src/qc8-gemm/gen/2x16c8-minmax-fp32-avx512skx.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qc8-gemm/gen/2x4c2-minmax-fp32-avx-ld128.c b/src/qc8-gemm/gen/2x4c2-minmax-fp32-avx-ld128.c
index 933bbef..8fd539e 100644
--- a/src/qc8-gemm/gen/2x4c2-minmax-fp32-avx-ld128.c
+++ b/src/qc8-gemm/gen/2x4c2-minmax-fp32-avx-ld128.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qc8-gemm/gen/2x4c2-minmax-fp32-avx-ld64.c b/src/qc8-gemm/gen/2x4c2-minmax-fp32-avx-ld64.c
index 114c75e..affad2a 100644
--- a/src/qc8-gemm/gen/2x4c2-minmax-fp32-avx-ld64.c
+++ b/src/qc8-gemm/gen/2x4c2-minmax-fp32-avx-ld64.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qc8-gemm/gen/2x4c2-minmax-fp32-sse2-ld128.c b/src/qc8-gemm/gen/2x4c2-minmax-fp32-sse2-ld128.c
index 8b43720..17ec988 100644
--- a/src/qc8-gemm/gen/2x4c2-minmax-fp32-sse2-ld128.c
+++ b/src/qc8-gemm/gen/2x4c2-minmax-fp32-sse2-ld128.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qc8-gemm/gen/2x4c2-minmax-fp32-sse2-ld64.c b/src/qc8-gemm/gen/2x4c2-minmax-fp32-sse2-ld64.c
index 73537a4..f27839a 100644
--- a/src/qc8-gemm/gen/2x4c2-minmax-fp32-sse2-ld64.c
+++ b/src/qc8-gemm/gen/2x4c2-minmax-fp32-sse2-ld64.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qc8-gemm/gen/2x4c2-minmax-fp32-sse41-ld128.c b/src/qc8-gemm/gen/2x4c2-minmax-fp32-sse41-ld128.c
index a27f453..cf17748 100644
--- a/src/qc8-gemm/gen/2x4c2-minmax-fp32-sse41-ld128.c
+++ b/src/qc8-gemm/gen/2x4c2-minmax-fp32-sse41-ld128.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qc8-gemm/gen/2x4c2-minmax-fp32-sse41-ld64.c b/src/qc8-gemm/gen/2x4c2-minmax-fp32-sse41-ld64.c
index a822871..e4081aa 100644
--- a/src/qc8-gemm/gen/2x4c2-minmax-fp32-sse41-ld64.c
+++ b/src/qc8-gemm/gen/2x4c2-minmax-fp32-sse41-ld64.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qc8-gemm/gen/2x4c2-minmax-fp32-wasmsimd-dot16x2-ld128.c b/src/qc8-gemm/gen/2x4c2-minmax-fp32-wasmsimd-dot16x2-ld128.c
index 1f72985..19686fb 100644
--- a/src/qc8-gemm/gen/2x4c2-minmax-fp32-wasmsimd-dot16x2-ld128.c
+++ b/src/qc8-gemm/gen/2x4c2-minmax-fp32-wasmsimd-dot16x2-ld128.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qc8-gemm/gen/2x4c2-minmax-fp32-wasmsimd-dot16x2-ld64.c b/src/qc8-gemm/gen/2x4c2-minmax-fp32-wasmsimd-dot16x2-ld64.c
index da4a3b0..b195983 100644
--- a/src/qc8-gemm/gen/2x4c2-minmax-fp32-wasmsimd-dot16x2-ld64.c
+++ b/src/qc8-gemm/gen/2x4c2-minmax-fp32-wasmsimd-dot16x2-ld64.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qc8-gemm/gen/2x4c2-minmax-fp32-xop-ld128.c b/src/qc8-gemm/gen/2x4c2-minmax-fp32-xop-ld128.c
index b76a041..ac4f897 100644
--- a/src/qc8-gemm/gen/2x4c2-minmax-fp32-xop-ld128.c
+++ b/src/qc8-gemm/gen/2x4c2-minmax-fp32-xop-ld128.c
@@ -31,7 +31,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qc8-gemm/gen/2x4c2-minmax-fp32-xop-ld64.c b/src/qc8-gemm/gen/2x4c2-minmax-fp32-xop-ld64.c
index 400547e..1a60a51 100644
--- a/src/qc8-gemm/gen/2x4c2-minmax-fp32-xop-ld64.c
+++ b/src/qc8-gemm/gen/2x4c2-minmax-fp32-xop-ld64.c
@@ -31,7 +31,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qc8-gemm/gen/2x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld128.c b/src/qc8-gemm/gen/2x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld128.c
index 8ea0a85..5a115a8 100644
--- a/src/qc8-gemm/gen/2x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld128.c
+++ b/src/qc8-gemm/gen/2x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld128.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qc8-gemm/gen/2x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld64.c b/src/qc8-gemm/gen/2x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld64.c
index cf85ddd..4cde633 100644
--- a/src/qc8-gemm/gen/2x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld64.c
+++ b/src/qc8-gemm/gen/2x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld64.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qc8-gemm/gen/2x4c8-minmax-fp32-avx-ld128.c b/src/qc8-gemm/gen/2x4c8-minmax-fp32-avx-ld128.c
index e8a4d75..f8f3264 100644
--- a/src/qc8-gemm/gen/2x4c8-minmax-fp32-avx-ld128.c
+++ b/src/qc8-gemm/gen/2x4c8-minmax-fp32-avx-ld128.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qc8-gemm/gen/2x4c8-minmax-fp32-avx-ld64.c b/src/qc8-gemm/gen/2x4c8-minmax-fp32-avx-ld64.c
index 6304503..59fbe4d 100644
--- a/src/qc8-gemm/gen/2x4c8-minmax-fp32-avx-ld64.c
+++ b/src/qc8-gemm/gen/2x4c8-minmax-fp32-avx-ld64.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qc8-gemm/gen/2x4c8-minmax-fp32-sse2-ld128.c b/src/qc8-gemm/gen/2x4c8-minmax-fp32-sse2-ld128.c
index c597ea6..6132bc9 100644
--- a/src/qc8-gemm/gen/2x4c8-minmax-fp32-sse2-ld128.c
+++ b/src/qc8-gemm/gen/2x4c8-minmax-fp32-sse2-ld128.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qc8-gemm/gen/2x4c8-minmax-fp32-sse2-ld64.c b/src/qc8-gemm/gen/2x4c8-minmax-fp32-sse2-ld64.c
index e2e8dc8..28d5484 100644
--- a/src/qc8-gemm/gen/2x4c8-minmax-fp32-sse2-ld64.c
+++ b/src/qc8-gemm/gen/2x4c8-minmax-fp32-sse2-ld64.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qc8-gemm/gen/2x4c8-minmax-fp32-sse41-ld128.c b/src/qc8-gemm/gen/2x4c8-minmax-fp32-sse41-ld128.c
index 335c1f3..6d31dff 100644
--- a/src/qc8-gemm/gen/2x4c8-minmax-fp32-sse41-ld128.c
+++ b/src/qc8-gemm/gen/2x4c8-minmax-fp32-sse41-ld128.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qc8-gemm/gen/2x4c8-minmax-fp32-sse41-ld64.c b/src/qc8-gemm/gen/2x4c8-minmax-fp32-sse41-ld64.c
index df79eac..819a855 100644
--- a/src/qc8-gemm/gen/2x4c8-minmax-fp32-sse41-ld64.c
+++ b/src/qc8-gemm/gen/2x4c8-minmax-fp32-sse41-ld64.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qc8-gemm/gen/2x4c8-minmax-fp32-wasmsimd-dot16x2-ld128.c b/src/qc8-gemm/gen/2x4c8-minmax-fp32-wasmsimd-dot16x2-ld128.c
index a1d0731..cbb10e5 100644
--- a/src/qc8-gemm/gen/2x4c8-minmax-fp32-wasmsimd-dot16x2-ld128.c
+++ b/src/qc8-gemm/gen/2x4c8-minmax-fp32-wasmsimd-dot16x2-ld128.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qc8-gemm/gen/2x4c8-minmax-fp32-wasmsimd-dot16x2-ld64.c b/src/qc8-gemm/gen/2x4c8-minmax-fp32-wasmsimd-dot16x2-ld64.c
index e95f115..7f1801a 100644
--- a/src/qc8-gemm/gen/2x4c8-minmax-fp32-wasmsimd-dot16x2-ld64.c
+++ b/src/qc8-gemm/gen/2x4c8-minmax-fp32-wasmsimd-dot16x2-ld64.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qc8-gemm/gen/2x4c8-minmax-fp32-wasmsimd-mul16-ld128.c b/src/qc8-gemm/gen/2x4c8-minmax-fp32-wasmsimd-mul16-ld128.c
index d9b2b90..22dc9e4 100644
--- a/src/qc8-gemm/gen/2x4c8-minmax-fp32-wasmsimd-mul16-ld128.c
+++ b/src/qc8-gemm/gen/2x4c8-minmax-fp32-wasmsimd-mul16-ld128.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qc8-gemm/gen/2x4c8-minmax-fp32-wasmsimd-mul16-ld64.c b/src/qc8-gemm/gen/2x4c8-minmax-fp32-wasmsimd-mul16-ld64.c
index 024a8da..a45718c 100644
--- a/src/qc8-gemm/gen/2x4c8-minmax-fp32-wasmsimd-mul16-ld64.c
+++ b/src/qc8-gemm/gen/2x4c8-minmax-fp32-wasmsimd-mul16-ld64.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qc8-gemm/gen/2x4c8-minmax-fp32-xop-ld128.c b/src/qc8-gemm/gen/2x4c8-minmax-fp32-xop-ld128.c
index f2d7054..5b5bd26 100644
--- a/src/qc8-gemm/gen/2x4c8-minmax-fp32-xop-ld128.c
+++ b/src/qc8-gemm/gen/2x4c8-minmax-fp32-xop-ld128.c
@@ -30,7 +30,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qc8-gemm/gen/2x4c8-minmax-fp32-xop-ld64.c b/src/qc8-gemm/gen/2x4c8-minmax-fp32-xop-ld64.c
index 3460db9..b1c039a 100644
--- a/src/qc8-gemm/gen/2x4c8-minmax-fp32-xop-ld64.c
+++ b/src/qc8-gemm/gen/2x4c8-minmax-fp32-xop-ld64.c
@@ -30,7 +30,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qc8-gemm/gen/2x8c2-minmax-fp32-neon-mlal-dup.c b/src/qc8-gemm/gen/2x8c2-minmax-fp32-neon-mlal-dup.c
index 93e3519..04f6778 100644
--- a/src/qc8-gemm/gen/2x8c2-minmax-fp32-neon-mlal-dup.c
+++ b/src/qc8-gemm/gen/2x8c2-minmax-fp32-neon-mlal-dup.c
@@ -24,7 +24,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qc8-gemm/gen/2x8c2-minmax-fp32-neon-mlal-ld1r.c b/src/qc8-gemm/gen/2x8c2-minmax-fp32-neon-mlal-ld1r.c
index 033bfa6..bc0f065 100644
--- a/src/qc8-gemm/gen/2x8c2-minmax-fp32-neon-mlal-ld1r.c
+++ b/src/qc8-gemm/gen/2x8c2-minmax-fp32-neon-mlal-ld1r.c
@@ -24,7 +24,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qc8-gemm/gen/2x8c2-minmax-fp32-neon-mlal-ld2r.c b/src/qc8-gemm/gen/2x8c2-minmax-fp32-neon-mlal-ld2r.c
index 51f67a5..6e73b88 100644
--- a/src/qc8-gemm/gen/2x8c2-minmax-fp32-neon-mlal-ld2r.c
+++ b/src/qc8-gemm/gen/2x8c2-minmax-fp32-neon-mlal-ld2r.c
@@ -24,7 +24,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qc8-gemm/gen/2x8c2-minmax-fp32-neon-mlal-ld4r.c b/src/qc8-gemm/gen/2x8c2-minmax-fp32-neon-mlal-ld4r.c
index 6717ae5..28c3e9e 100644
--- a/src/qc8-gemm/gen/2x8c2-minmax-fp32-neon-mlal-ld4r.c
+++ b/src/qc8-gemm/gen/2x8c2-minmax-fp32-neon-mlal-ld4r.c
@@ -24,7 +24,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qc8-gemm/gen/2x8c2-minmax-fp32-neonv8-mlal-dup.c b/src/qc8-gemm/gen/2x8c2-minmax-fp32-neonv8-mlal-dup.c
index 998910a..a56ce2f 100644
--- a/src/qc8-gemm/gen/2x8c2-minmax-fp32-neonv8-mlal-dup.c
+++ b/src/qc8-gemm/gen/2x8c2-minmax-fp32-neonv8-mlal-dup.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qc8-gemm/gen/2x8c2-minmax-fp32-neonv8-mlal-ld1r.c b/src/qc8-gemm/gen/2x8c2-minmax-fp32-neonv8-mlal-ld1r.c
index 73918a7..e3d85a3 100644
--- a/src/qc8-gemm/gen/2x8c2-minmax-fp32-neonv8-mlal-ld1r.c
+++ b/src/qc8-gemm/gen/2x8c2-minmax-fp32-neonv8-mlal-ld1r.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qc8-gemm/gen/2x8c2-minmax-fp32-neonv8-mlal-ld2r.c b/src/qc8-gemm/gen/2x8c2-minmax-fp32-neonv8-mlal-ld2r.c
index 7fb1b8b..3a95912 100644
--- a/src/qc8-gemm/gen/2x8c2-minmax-fp32-neonv8-mlal-ld2r.c
+++ b/src/qc8-gemm/gen/2x8c2-minmax-fp32-neonv8-mlal-ld2r.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qc8-gemm/gen/2x8c2-minmax-fp32-neonv8-mlal-ld4r.c b/src/qc8-gemm/gen/2x8c2-minmax-fp32-neonv8-mlal-ld4r.c
index 2632fd6..0d6fd24 100644
--- a/src/qc8-gemm/gen/2x8c2-minmax-fp32-neonv8-mlal-ld4r.c
+++ b/src/qc8-gemm/gen/2x8c2-minmax-fp32-neonv8-mlal-ld4r.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qc8-gemm/gen/2x8c2s4-minmax-fp32-neon-mlal.c b/src/qc8-gemm/gen/2x8c2s4-minmax-fp32-neon-mlal.c
index c5dab25..716c301 100644
--- a/src/qc8-gemm/gen/2x8c2s4-minmax-fp32-neon-mlal.c
+++ b/src/qc8-gemm/gen/2x8c2s4-minmax-fp32-neon-mlal.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qc8-gemm/gen/2x8c2s4-minmax-fp32-neonv8-mlal.c b/src/qc8-gemm/gen/2x8c2s4-minmax-fp32-neonv8-mlal.c
index be2c45d..5985f2a 100644
--- a/src/qc8-gemm/gen/2x8c2s4-minmax-fp32-neonv8-mlal.c
+++ b/src/qc8-gemm/gen/2x8c2s4-minmax-fp32-neonv8-mlal.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qc8-gemm/gen/2x8c4-minmax-fp32-neon-mlal-dup.c b/src/qc8-gemm/gen/2x8c4-minmax-fp32-neon-mlal-dup.c
index e9f52f6..a07161c 100644
--- a/src/qc8-gemm/gen/2x8c4-minmax-fp32-neon-mlal-dup.c
+++ b/src/qc8-gemm/gen/2x8c4-minmax-fp32-neon-mlal-dup.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qc8-gemm/gen/2x8c4-minmax-fp32-neon-mlal-ld1r.c b/src/qc8-gemm/gen/2x8c4-minmax-fp32-neon-mlal-ld1r.c
index cc8a8c5..1247882 100644
--- a/src/qc8-gemm/gen/2x8c4-minmax-fp32-neon-mlal-ld1r.c
+++ b/src/qc8-gemm/gen/2x8c4-minmax-fp32-neon-mlal-ld1r.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qc8-gemm/gen/2x8c4-minmax-fp32-neon-mlal-ld2r.c b/src/qc8-gemm/gen/2x8c4-minmax-fp32-neon-mlal-ld2r.c
index d3a52cc..3155667 100644
--- a/src/qc8-gemm/gen/2x8c4-minmax-fp32-neon-mlal-ld2r.c
+++ b/src/qc8-gemm/gen/2x8c4-minmax-fp32-neon-mlal-ld2r.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qc8-gemm/gen/2x8c4-minmax-fp32-neonv8-mlal-dup.c b/src/qc8-gemm/gen/2x8c4-minmax-fp32-neonv8-mlal-dup.c
index 94d349b..71f73ae 100644
--- a/src/qc8-gemm/gen/2x8c4-minmax-fp32-neonv8-mlal-dup.c
+++ b/src/qc8-gemm/gen/2x8c4-minmax-fp32-neonv8-mlal-dup.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qc8-gemm/gen/2x8c4-minmax-fp32-neonv8-mlal-ld1r.c b/src/qc8-gemm/gen/2x8c4-minmax-fp32-neonv8-mlal-ld1r.c
index 9101efe..97ffacf 100644
--- a/src/qc8-gemm/gen/2x8c4-minmax-fp32-neonv8-mlal-ld1r.c
+++ b/src/qc8-gemm/gen/2x8c4-minmax-fp32-neonv8-mlal-ld1r.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qc8-gemm/gen/2x8c4-minmax-fp32-neonv8-mlal-ld2r.c b/src/qc8-gemm/gen/2x8c4-minmax-fp32-neonv8-mlal-ld2r.c
index f0337ba..3eba002 100644
--- a/src/qc8-gemm/gen/2x8c4-minmax-fp32-neonv8-mlal-ld2r.c
+++ b/src/qc8-gemm/gen/2x8c4-minmax-fp32-neonv8-mlal-ld2r.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qc8-gemm/gen/2x8c4s2-minmax-fp32-neon-mlal.c b/src/qc8-gemm/gen/2x8c4s2-minmax-fp32-neon-mlal.c
index 6c50921..84e415c 100644
--- a/src/qc8-gemm/gen/2x8c4s2-minmax-fp32-neon-mlal.c
+++ b/src/qc8-gemm/gen/2x8c4s2-minmax-fp32-neon-mlal.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qc8-gemm/gen/2x8c4s2-minmax-fp32-neonv8-mlal.c b/src/qc8-gemm/gen/2x8c4s2-minmax-fp32-neonv8-mlal.c
index c72d287..d008bb1 100644
--- a/src/qc8-gemm/gen/2x8c4s2-minmax-fp32-neonv8-mlal.c
+++ b/src/qc8-gemm/gen/2x8c4s2-minmax-fp32-neonv8-mlal.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qc8-gemm/gen/2x8c8-minmax-fp32-avx2.c b/src/qc8-gemm/gen/2x8c8-minmax-fp32-avx2.c
index efb14ba..01ee5e4 100644
--- a/src/qc8-gemm/gen/2x8c8-minmax-fp32-avx2.c
+++ b/src/qc8-gemm/gen/2x8c8-minmax-fp32-avx2.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qc8-gemm/gen/2x8c8-minmax-fp32-neon-mlal.c b/src/qc8-gemm/gen/2x8c8-minmax-fp32-neon-mlal.c
index c172c22..dfb23f0 100644
--- a/src/qc8-gemm/gen/2x8c8-minmax-fp32-neon-mlal.c
+++ b/src/qc8-gemm/gen/2x8c8-minmax-fp32-neon-mlal.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qc8-gemm/gen/2x8c8-minmax-fp32-neonv8-mlal.c b/src/qc8-gemm/gen/2x8c8-minmax-fp32-neonv8-mlal.c
index 3f5ce78..de647a3 100644
--- a/src/qc8-gemm/gen/2x8c8-minmax-fp32-neonv8-mlal.c
+++ b/src/qc8-gemm/gen/2x8c8-minmax-fp32-neonv8-mlal.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qc8-gemm/gen/2x8c8-xw-minmax-fp32-avx2.c b/src/qc8-gemm/gen/2x8c8-xw-minmax-fp32-avx2.c
index 16b6dd8..ccacadd 100644
--- a/src/qc8-gemm/gen/2x8c8-xw-minmax-fp32-avx2.c
+++ b/src/qc8-gemm/gen/2x8c8-xw-minmax-fp32-avx2.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qc8-gemm/gen/3x16c8-minmax-fp32-avx512skx.c b/src/qc8-gemm/gen/3x16c8-minmax-fp32-avx512skx.c
index 7a6d736..8fddfab 100644
--- a/src/qc8-gemm/gen/3x16c8-minmax-fp32-avx512skx.c
+++ b/src/qc8-gemm/gen/3x16c8-minmax-fp32-avx512skx.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qc8-gemm/gen/3x4c2-minmax-fp32-avx-ld128.c b/src/qc8-gemm/gen/3x4c2-minmax-fp32-avx-ld128.c
index d39d300..bc1d95a 100644
--- a/src/qc8-gemm/gen/3x4c2-minmax-fp32-avx-ld128.c
+++ b/src/qc8-gemm/gen/3x4c2-minmax-fp32-avx-ld128.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qc8-gemm/gen/3x4c2-minmax-fp32-avx-ld64.c b/src/qc8-gemm/gen/3x4c2-minmax-fp32-avx-ld64.c
index 65397a0..fc4d14c 100644
--- a/src/qc8-gemm/gen/3x4c2-minmax-fp32-avx-ld64.c
+++ b/src/qc8-gemm/gen/3x4c2-minmax-fp32-avx-ld64.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qc8-gemm/gen/3x4c2-minmax-fp32-sse2-ld128.c b/src/qc8-gemm/gen/3x4c2-minmax-fp32-sse2-ld128.c
index c856bed..d20ef02 100644
--- a/src/qc8-gemm/gen/3x4c2-minmax-fp32-sse2-ld128.c
+++ b/src/qc8-gemm/gen/3x4c2-minmax-fp32-sse2-ld128.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qc8-gemm/gen/3x4c2-minmax-fp32-sse2-ld64.c b/src/qc8-gemm/gen/3x4c2-minmax-fp32-sse2-ld64.c
index b8eea47..7752b07 100644
--- a/src/qc8-gemm/gen/3x4c2-minmax-fp32-sse2-ld64.c
+++ b/src/qc8-gemm/gen/3x4c2-minmax-fp32-sse2-ld64.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qc8-gemm/gen/3x4c2-minmax-fp32-sse41-ld128.c b/src/qc8-gemm/gen/3x4c2-minmax-fp32-sse41-ld128.c
index 38cae77..e03915b 100644
--- a/src/qc8-gemm/gen/3x4c2-minmax-fp32-sse41-ld128.c
+++ b/src/qc8-gemm/gen/3x4c2-minmax-fp32-sse41-ld128.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qc8-gemm/gen/3x4c2-minmax-fp32-sse41-ld64.c b/src/qc8-gemm/gen/3x4c2-minmax-fp32-sse41-ld64.c
index c31ed2f..948f2cc 100644
--- a/src/qc8-gemm/gen/3x4c2-minmax-fp32-sse41-ld64.c
+++ b/src/qc8-gemm/gen/3x4c2-minmax-fp32-sse41-ld64.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qc8-gemm/gen/3x4c2-minmax-fp32-wasmsimd-dot16x2-ld128.c b/src/qc8-gemm/gen/3x4c2-minmax-fp32-wasmsimd-dot16x2-ld128.c
index 6848319..2d179f8 100644
--- a/src/qc8-gemm/gen/3x4c2-minmax-fp32-wasmsimd-dot16x2-ld128.c
+++ b/src/qc8-gemm/gen/3x4c2-minmax-fp32-wasmsimd-dot16x2-ld128.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qc8-gemm/gen/3x4c2-minmax-fp32-wasmsimd-dot16x2-ld64.c b/src/qc8-gemm/gen/3x4c2-minmax-fp32-wasmsimd-dot16x2-ld64.c
index 89a7179..8ce4f82 100644
--- a/src/qc8-gemm/gen/3x4c2-minmax-fp32-wasmsimd-dot16x2-ld64.c
+++ b/src/qc8-gemm/gen/3x4c2-minmax-fp32-wasmsimd-dot16x2-ld64.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qc8-gemm/gen/3x4c2-minmax-fp32-xop-ld128.c b/src/qc8-gemm/gen/3x4c2-minmax-fp32-xop-ld128.c
index 9d252c7..6894163 100644
--- a/src/qc8-gemm/gen/3x4c2-minmax-fp32-xop-ld128.c
+++ b/src/qc8-gemm/gen/3x4c2-minmax-fp32-xop-ld128.c
@@ -31,7 +31,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qc8-gemm/gen/3x4c2-minmax-fp32-xop-ld64.c b/src/qc8-gemm/gen/3x4c2-minmax-fp32-xop-ld64.c
index 377ba1c..9c7548a 100644
--- a/src/qc8-gemm/gen/3x4c2-minmax-fp32-xop-ld64.c
+++ b/src/qc8-gemm/gen/3x4c2-minmax-fp32-xop-ld64.c
@@ -31,7 +31,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qc8-gemm/gen/3x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld128.c b/src/qc8-gemm/gen/3x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld128.c
index 5bf5e43..c98e131 100644
--- a/src/qc8-gemm/gen/3x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld128.c
+++ b/src/qc8-gemm/gen/3x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld128.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qc8-gemm/gen/3x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld64.c b/src/qc8-gemm/gen/3x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld64.c
index 14f46e7..96af161 100644
--- a/src/qc8-gemm/gen/3x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld64.c
+++ b/src/qc8-gemm/gen/3x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld64.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qc8-gemm/gen/3x4c8-minmax-fp32-avx-ld128.c b/src/qc8-gemm/gen/3x4c8-minmax-fp32-avx-ld128.c
index 990b7e9..44988e9 100644
--- a/src/qc8-gemm/gen/3x4c8-minmax-fp32-avx-ld128.c
+++ b/src/qc8-gemm/gen/3x4c8-minmax-fp32-avx-ld128.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qc8-gemm/gen/3x4c8-minmax-fp32-avx-ld64.c b/src/qc8-gemm/gen/3x4c8-minmax-fp32-avx-ld64.c
index 25f27b0..9d0527a 100644
--- a/src/qc8-gemm/gen/3x4c8-minmax-fp32-avx-ld64.c
+++ b/src/qc8-gemm/gen/3x4c8-minmax-fp32-avx-ld64.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qc8-gemm/gen/3x4c8-minmax-fp32-sse2-ld128.c b/src/qc8-gemm/gen/3x4c8-minmax-fp32-sse2-ld128.c
index 2e4d109..9219df8 100644
--- a/src/qc8-gemm/gen/3x4c8-minmax-fp32-sse2-ld128.c
+++ b/src/qc8-gemm/gen/3x4c8-minmax-fp32-sse2-ld128.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qc8-gemm/gen/3x4c8-minmax-fp32-sse2-ld64.c b/src/qc8-gemm/gen/3x4c8-minmax-fp32-sse2-ld64.c
index 526d882..8fb5015 100644
--- a/src/qc8-gemm/gen/3x4c8-minmax-fp32-sse2-ld64.c
+++ b/src/qc8-gemm/gen/3x4c8-minmax-fp32-sse2-ld64.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qc8-gemm/gen/3x4c8-minmax-fp32-sse41-ld128.c b/src/qc8-gemm/gen/3x4c8-minmax-fp32-sse41-ld128.c
index f138284..2f33169 100644
--- a/src/qc8-gemm/gen/3x4c8-minmax-fp32-sse41-ld128.c
+++ b/src/qc8-gemm/gen/3x4c8-minmax-fp32-sse41-ld128.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qc8-gemm/gen/3x4c8-minmax-fp32-sse41-ld64.c b/src/qc8-gemm/gen/3x4c8-minmax-fp32-sse41-ld64.c
index 0eb919e..b584cbb 100644
--- a/src/qc8-gemm/gen/3x4c8-minmax-fp32-sse41-ld64.c
+++ b/src/qc8-gemm/gen/3x4c8-minmax-fp32-sse41-ld64.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qc8-gemm/gen/3x4c8-minmax-fp32-wasmsimd-dot16x2-ld128.c b/src/qc8-gemm/gen/3x4c8-minmax-fp32-wasmsimd-dot16x2-ld128.c
index 300be44..e6d1c51 100644
--- a/src/qc8-gemm/gen/3x4c8-minmax-fp32-wasmsimd-dot16x2-ld128.c
+++ b/src/qc8-gemm/gen/3x4c8-minmax-fp32-wasmsimd-dot16x2-ld128.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qc8-gemm/gen/3x4c8-minmax-fp32-wasmsimd-dot16x2-ld64.c b/src/qc8-gemm/gen/3x4c8-minmax-fp32-wasmsimd-dot16x2-ld64.c
index 182e2f7..4e50471 100644
--- a/src/qc8-gemm/gen/3x4c8-minmax-fp32-wasmsimd-dot16x2-ld64.c
+++ b/src/qc8-gemm/gen/3x4c8-minmax-fp32-wasmsimd-dot16x2-ld64.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qc8-gemm/gen/3x4c8-minmax-fp32-wasmsimd-mul16-ld128.c b/src/qc8-gemm/gen/3x4c8-minmax-fp32-wasmsimd-mul16-ld128.c
index 8019253..9dd1fa8 100644
--- a/src/qc8-gemm/gen/3x4c8-minmax-fp32-wasmsimd-mul16-ld128.c
+++ b/src/qc8-gemm/gen/3x4c8-minmax-fp32-wasmsimd-mul16-ld128.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qc8-gemm/gen/3x4c8-minmax-fp32-wasmsimd-mul16-ld64.c b/src/qc8-gemm/gen/3x4c8-minmax-fp32-wasmsimd-mul16-ld64.c
index c6823f0..ac622b2 100644
--- a/src/qc8-gemm/gen/3x4c8-minmax-fp32-wasmsimd-mul16-ld64.c
+++ b/src/qc8-gemm/gen/3x4c8-minmax-fp32-wasmsimd-mul16-ld64.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qc8-gemm/gen/3x4c8-minmax-fp32-xop-ld128.c b/src/qc8-gemm/gen/3x4c8-minmax-fp32-xop-ld128.c
index c5c4a52..cb10a8a 100644
--- a/src/qc8-gemm/gen/3x4c8-minmax-fp32-xop-ld128.c
+++ b/src/qc8-gemm/gen/3x4c8-minmax-fp32-xop-ld128.c
@@ -30,7 +30,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qc8-gemm/gen/3x4c8-minmax-fp32-xop-ld64.c b/src/qc8-gemm/gen/3x4c8-minmax-fp32-xop-ld64.c
index 81431bb..2918c21 100644
--- a/src/qc8-gemm/gen/3x4c8-minmax-fp32-xop-ld64.c
+++ b/src/qc8-gemm/gen/3x4c8-minmax-fp32-xop-ld64.c
@@ -30,7 +30,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qc8-gemm/gen/3x8c8-minmax-fp32-avx2.c b/src/qc8-gemm/gen/3x8c8-minmax-fp32-avx2.c
index 6a95d6d..8c986ea 100644
--- a/src/qc8-gemm/gen/3x8c8-minmax-fp32-avx2.c
+++ b/src/qc8-gemm/gen/3x8c8-minmax-fp32-avx2.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qc8-gemm/gen/3x8c8-xw-minmax-fp32-avx2.c b/src/qc8-gemm/gen/3x8c8-xw-minmax-fp32-avx2.c
index c25997c..03a5830 100644
--- a/src/qc8-gemm/gen/3x8c8-xw-minmax-fp32-avx2.c
+++ b/src/qc8-gemm/gen/3x8c8-xw-minmax-fp32-avx2.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qc8-gemm/gen/4x16-minmax-fp32-neon-mlal-lane.c b/src/qc8-gemm/gen/4x16-minmax-fp32-neon-mlal-lane.c
index 9e1cb50..317002b 100644
--- a/src/qc8-gemm/gen/4x16-minmax-fp32-neon-mlal-lane.c
+++ b/src/qc8-gemm/gen/4x16-minmax-fp32-neon-mlal-lane.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qc8-gemm/gen/4x16-minmax-fp32-neonv8-mlal-lane.c b/src/qc8-gemm/gen/4x16-minmax-fp32-neonv8-mlal-lane.c
index edb4999..bbcd750 100644
--- a/src/qc8-gemm/gen/4x16-minmax-fp32-neonv8-mlal-lane.c
+++ b/src/qc8-gemm/gen/4x16-minmax-fp32-neonv8-mlal-lane.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qc8-gemm/gen/4x16c4-minmax-fp32-neondot.c b/src/qc8-gemm/gen/4x16c4-minmax-fp32-neondot.c
index 438d936..3565d04 100644
--- a/src/qc8-gemm/gen/4x16c4-minmax-fp32-neondot.c
+++ b/src/qc8-gemm/gen/4x16c4-minmax-fp32-neondot.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qc8-gemm/gen/4x16c8-minmax-fp32-avx512skx.c b/src/qc8-gemm/gen/4x16c8-minmax-fp32-avx512skx.c
index be85c9b..43ce8cd 100644
--- a/src/qc8-gemm/gen/4x16c8-minmax-fp32-avx512skx.c
+++ b/src/qc8-gemm/gen/4x16c8-minmax-fp32-avx512skx.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qc8-gemm/gen/4x4c2-minmax-fp32-avx-ld128.c b/src/qc8-gemm/gen/4x4c2-minmax-fp32-avx-ld128.c
index c7560e4..7d1a3e6 100644
--- a/src/qc8-gemm/gen/4x4c2-minmax-fp32-avx-ld128.c
+++ b/src/qc8-gemm/gen/4x4c2-minmax-fp32-avx-ld128.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qc8-gemm/gen/4x4c2-minmax-fp32-avx-ld64.c b/src/qc8-gemm/gen/4x4c2-minmax-fp32-avx-ld64.c
index 3ee8a12..033c34b 100644
--- a/src/qc8-gemm/gen/4x4c2-minmax-fp32-avx-ld64.c
+++ b/src/qc8-gemm/gen/4x4c2-minmax-fp32-avx-ld64.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qc8-gemm/gen/4x4c2-minmax-fp32-sse2-ld128.c b/src/qc8-gemm/gen/4x4c2-minmax-fp32-sse2-ld128.c
index 713c5a7..e0da65f 100644
--- a/src/qc8-gemm/gen/4x4c2-minmax-fp32-sse2-ld128.c
+++ b/src/qc8-gemm/gen/4x4c2-minmax-fp32-sse2-ld128.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qc8-gemm/gen/4x4c2-minmax-fp32-sse2-ld64.c b/src/qc8-gemm/gen/4x4c2-minmax-fp32-sse2-ld64.c
index b171fc2..2f68547 100644
--- a/src/qc8-gemm/gen/4x4c2-minmax-fp32-sse2-ld64.c
+++ b/src/qc8-gemm/gen/4x4c2-minmax-fp32-sse2-ld64.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qc8-gemm/gen/4x4c2-minmax-fp32-sse41-ld128.c b/src/qc8-gemm/gen/4x4c2-minmax-fp32-sse41-ld128.c
index 7e360ef..c53e3af 100644
--- a/src/qc8-gemm/gen/4x4c2-minmax-fp32-sse41-ld128.c
+++ b/src/qc8-gemm/gen/4x4c2-minmax-fp32-sse41-ld128.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qc8-gemm/gen/4x4c2-minmax-fp32-sse41-ld64.c b/src/qc8-gemm/gen/4x4c2-minmax-fp32-sse41-ld64.c
index 92bd922..fdd4cae 100644
--- a/src/qc8-gemm/gen/4x4c2-minmax-fp32-sse41-ld64.c
+++ b/src/qc8-gemm/gen/4x4c2-minmax-fp32-sse41-ld64.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qc8-gemm/gen/4x4c2-minmax-fp32-wasmsimd-dot16x2-ld128.c b/src/qc8-gemm/gen/4x4c2-minmax-fp32-wasmsimd-dot16x2-ld128.c
index 3a59537..8dd11ef 100644
--- a/src/qc8-gemm/gen/4x4c2-minmax-fp32-wasmsimd-dot16x2-ld128.c
+++ b/src/qc8-gemm/gen/4x4c2-minmax-fp32-wasmsimd-dot16x2-ld128.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qc8-gemm/gen/4x4c2-minmax-fp32-wasmsimd-dot16x2-ld64.c b/src/qc8-gemm/gen/4x4c2-minmax-fp32-wasmsimd-dot16x2-ld64.c
index 1ff47ad..da77b74 100644
--- a/src/qc8-gemm/gen/4x4c2-minmax-fp32-wasmsimd-dot16x2-ld64.c
+++ b/src/qc8-gemm/gen/4x4c2-minmax-fp32-wasmsimd-dot16x2-ld64.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qc8-gemm/gen/4x4c2-minmax-fp32-xop-ld128.c b/src/qc8-gemm/gen/4x4c2-minmax-fp32-xop-ld128.c
index bcb728f..354a198 100644
--- a/src/qc8-gemm/gen/4x4c2-minmax-fp32-xop-ld128.c
+++ b/src/qc8-gemm/gen/4x4c2-minmax-fp32-xop-ld128.c
@@ -31,7 +31,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qc8-gemm/gen/4x4c2-minmax-fp32-xop-ld64.c b/src/qc8-gemm/gen/4x4c2-minmax-fp32-xop-ld64.c
index d249607..a0f3824 100644
--- a/src/qc8-gemm/gen/4x4c2-minmax-fp32-xop-ld64.c
+++ b/src/qc8-gemm/gen/4x4c2-minmax-fp32-xop-ld64.c
@@ -31,7 +31,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qc8-gemm/gen/4x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld128.c b/src/qc8-gemm/gen/4x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld128.c
index f7c3b82..04d189c 100644
--- a/src/qc8-gemm/gen/4x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld128.c
+++ b/src/qc8-gemm/gen/4x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld128.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qc8-gemm/gen/4x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld64.c b/src/qc8-gemm/gen/4x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld64.c
index f76763e..497613d 100644
--- a/src/qc8-gemm/gen/4x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld64.c
+++ b/src/qc8-gemm/gen/4x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld64.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qc8-gemm/gen/4x4c8-minmax-fp32-wasmsimd-dot16x2-ld128.c b/src/qc8-gemm/gen/4x4c8-minmax-fp32-wasmsimd-dot16x2-ld128.c
index cd1a279..b5d2096 100644
--- a/src/qc8-gemm/gen/4x4c8-minmax-fp32-wasmsimd-dot16x2-ld128.c
+++ b/src/qc8-gemm/gen/4x4c8-minmax-fp32-wasmsimd-dot16x2-ld128.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qc8-gemm/gen/4x4c8-minmax-fp32-wasmsimd-dot16x2-ld64.c b/src/qc8-gemm/gen/4x4c8-minmax-fp32-wasmsimd-dot16x2-ld64.c
index 042399c..c720897 100644
--- a/src/qc8-gemm/gen/4x4c8-minmax-fp32-wasmsimd-dot16x2-ld64.c
+++ b/src/qc8-gemm/gen/4x4c8-minmax-fp32-wasmsimd-dot16x2-ld64.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qc8-gemm/gen/4x8c4-minmax-fp32-neondot.c b/src/qc8-gemm/gen/4x8c4-minmax-fp32-neondot.c
index 7a7d27d..40af1a4 100644
--- a/src/qc8-gemm/gen/4x8c4-minmax-fp32-neondot.c
+++ b/src/qc8-gemm/gen/4x8c4-minmax-fp32-neondot.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qc8-gemm/gen/6x16c4-minmax-fp32-neondot.c b/src/qc8-gemm/gen/6x16c4-minmax-fp32-neondot.c
index f7b2ce5..202df03 100644
--- a/src/qc8-gemm/gen/6x16c4-minmax-fp32-neondot.c
+++ b/src/qc8-gemm/gen/6x16c4-minmax-fp32-neondot.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 6);
diff --git a/src/qc8-gemm/gen/6x8c4-minmax-fp32-neondot.c b/src/qc8-gemm/gen/6x8c4-minmax-fp32-neondot.c
index b3b3973..3717ee8 100644
--- a/src/qc8-gemm/gen/6x8c4-minmax-fp32-neondot.c
+++ b/src/qc8-gemm/gen/6x8c4-minmax-fp32-neondot.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 6);
diff --git a/src/qc8-gemm/gen/8x16c4-minmax-fp32-neondot.c b/src/qc8-gemm/gen/8x16c4-minmax-fp32-neondot.c
index 1e24e04..60161ed 100644
--- a/src/qc8-gemm/gen/8x16c4-minmax-fp32-neondot.c
+++ b/src/qc8-gemm/gen/8x16c4-minmax-fp32-neondot.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 8);
diff --git a/src/qc8-gemm/gen/8x8c4-minmax-fp32-neondot.c b/src/qc8-gemm/gen/8x8c4-minmax-fp32-neondot.c
index 5d56e5c..e388436 100644
--- a/src/qc8-gemm/gen/8x8c4-minmax-fp32-neondot.c
+++ b/src/qc8-gemm/gen/8x8c4-minmax-fp32-neondot.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 8);
diff --git a/src/qc8-igemm/gen/1x16-minmax-fp32-neon-mlal-lane.c b/src/qc8-igemm/gen/1x16-minmax-fp32-neon-mlal-lane.c
index 5c49a16..b51ef80 100644
--- a/src/qc8-igemm/gen/1x16-minmax-fp32-neon-mlal-lane.c
+++ b/src/qc8-igemm/gen/1x16-minmax-fp32-neon-mlal-lane.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qc8-igemm/gen/1x16-minmax-fp32-neonv8-mlal-lane.c b/src/qc8-igemm/gen/1x16-minmax-fp32-neonv8-mlal-lane.c
index 378a4f4..305a377 100644
--- a/src/qc8-igemm/gen/1x16-minmax-fp32-neonv8-mlal-lane.c
+++ b/src/qc8-igemm/gen/1x16-minmax-fp32-neonv8-mlal-lane.c
@@ -28,7 +28,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qc8-igemm/gen/1x16c4-minmax-fp32-neondot.c b/src/qc8-igemm/gen/1x16c4-minmax-fp32-neondot.c
index c9599e7..62d2958 100644
--- a/src/qc8-igemm/gen/1x16c4-minmax-fp32-neondot.c
+++ b/src/qc8-igemm/gen/1x16c4-minmax-fp32-neondot.c
@@ -28,7 +28,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qc8-igemm/gen/1x16c8-minmax-fp32-avx512skx.c b/src/qc8-igemm/gen/1x16c8-minmax-fp32-avx512skx.c
index 7a516f4..c0e4997 100644
--- a/src/qc8-igemm/gen/1x16c8-minmax-fp32-avx512skx.c
+++ b/src/qc8-igemm/gen/1x16c8-minmax-fp32-avx512skx.c
@@ -28,7 +28,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qc8-igemm/gen/1x4c2-minmax-fp32-avx-ld128.c b/src/qc8-igemm/gen/1x4c2-minmax-fp32-avx-ld128.c
index 03f7f0a..64efc89 100644
--- a/src/qc8-igemm/gen/1x4c2-minmax-fp32-avx-ld128.c
+++ b/src/qc8-igemm/gen/1x4c2-minmax-fp32-avx-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qc8-igemm/gen/1x4c2-minmax-fp32-avx-ld64.c b/src/qc8-igemm/gen/1x4c2-minmax-fp32-avx-ld64.c
index e81ec19..2191e52 100644
--- a/src/qc8-igemm/gen/1x4c2-minmax-fp32-avx-ld64.c
+++ b/src/qc8-igemm/gen/1x4c2-minmax-fp32-avx-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qc8-igemm/gen/1x4c2-minmax-fp32-sse2-ld128.c b/src/qc8-igemm/gen/1x4c2-minmax-fp32-sse2-ld128.c
index df6e040..0dd3471 100644
--- a/src/qc8-igemm/gen/1x4c2-minmax-fp32-sse2-ld128.c
+++ b/src/qc8-igemm/gen/1x4c2-minmax-fp32-sse2-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qc8-igemm/gen/1x4c2-minmax-fp32-sse2-ld64.c b/src/qc8-igemm/gen/1x4c2-minmax-fp32-sse2-ld64.c
index 76f44bd..341bdfd 100644
--- a/src/qc8-igemm/gen/1x4c2-minmax-fp32-sse2-ld64.c
+++ b/src/qc8-igemm/gen/1x4c2-minmax-fp32-sse2-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qc8-igemm/gen/1x4c2-minmax-fp32-sse41-ld128.c b/src/qc8-igemm/gen/1x4c2-minmax-fp32-sse41-ld128.c
index b3f0479..0bb2913 100644
--- a/src/qc8-igemm/gen/1x4c2-minmax-fp32-sse41-ld128.c
+++ b/src/qc8-igemm/gen/1x4c2-minmax-fp32-sse41-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qc8-igemm/gen/1x4c2-minmax-fp32-sse41-ld64.c b/src/qc8-igemm/gen/1x4c2-minmax-fp32-sse41-ld64.c
index b029748..e12d0b6 100644
--- a/src/qc8-igemm/gen/1x4c2-minmax-fp32-sse41-ld64.c
+++ b/src/qc8-igemm/gen/1x4c2-minmax-fp32-sse41-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qc8-igemm/gen/1x4c2-minmax-fp32-wasmsimd-dot16x2-ld128.c b/src/qc8-igemm/gen/1x4c2-minmax-fp32-wasmsimd-dot16x2-ld128.c
index edd7b7e..822d864 100644
--- a/src/qc8-igemm/gen/1x4c2-minmax-fp32-wasmsimd-dot16x2-ld128.c
+++ b/src/qc8-igemm/gen/1x4c2-minmax-fp32-wasmsimd-dot16x2-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qc8-igemm/gen/1x4c2-minmax-fp32-wasmsimd-dot16x2-ld64.c b/src/qc8-igemm/gen/1x4c2-minmax-fp32-wasmsimd-dot16x2-ld64.c
index e70e833..00044e2 100644
--- a/src/qc8-igemm/gen/1x4c2-minmax-fp32-wasmsimd-dot16x2-ld64.c
+++ b/src/qc8-igemm/gen/1x4c2-minmax-fp32-wasmsimd-dot16x2-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qc8-igemm/gen/1x4c2-minmax-fp32-xop-ld128.c b/src/qc8-igemm/gen/1x4c2-minmax-fp32-xop-ld128.c
index 9a4f5b0..8583b45 100644
--- a/src/qc8-igemm/gen/1x4c2-minmax-fp32-xop-ld128.c
+++ b/src/qc8-igemm/gen/1x4c2-minmax-fp32-xop-ld128.c
@@ -32,7 +32,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qc8-igemm/gen/1x4c2-minmax-fp32-xop-ld64.c b/src/qc8-igemm/gen/1x4c2-minmax-fp32-xop-ld64.c
index 9cc7c8c..9546cd9 100644
--- a/src/qc8-igemm/gen/1x4c2-minmax-fp32-xop-ld64.c
+++ b/src/qc8-igemm/gen/1x4c2-minmax-fp32-xop-ld64.c
@@ -32,7 +32,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qc8-igemm/gen/1x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld128.c b/src/qc8-igemm/gen/1x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld128.c
index 9bd506b..b331ec2 100644
--- a/src/qc8-igemm/gen/1x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld128.c
+++ b/src/qc8-igemm/gen/1x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qc8-igemm/gen/1x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld64.c b/src/qc8-igemm/gen/1x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld64.c
index ff3146a..842c31e 100644
--- a/src/qc8-igemm/gen/1x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld64.c
+++ b/src/qc8-igemm/gen/1x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qc8-igemm/gen/1x4c8-minmax-fp32-avx-ld128.c b/src/qc8-igemm/gen/1x4c8-minmax-fp32-avx-ld128.c
index c27952a..c6d19e7 100644
--- a/src/qc8-igemm/gen/1x4c8-minmax-fp32-avx-ld128.c
+++ b/src/qc8-igemm/gen/1x4c8-minmax-fp32-avx-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qc8-igemm/gen/1x4c8-minmax-fp32-avx-ld64.c b/src/qc8-igemm/gen/1x4c8-minmax-fp32-avx-ld64.c
index 4ccecd8..f6edd92 100644
--- a/src/qc8-igemm/gen/1x4c8-minmax-fp32-avx-ld64.c
+++ b/src/qc8-igemm/gen/1x4c8-minmax-fp32-avx-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qc8-igemm/gen/1x4c8-minmax-fp32-sse2-ld128.c b/src/qc8-igemm/gen/1x4c8-minmax-fp32-sse2-ld128.c
index 927a34e..25201db 100644
--- a/src/qc8-igemm/gen/1x4c8-minmax-fp32-sse2-ld128.c
+++ b/src/qc8-igemm/gen/1x4c8-minmax-fp32-sse2-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qc8-igemm/gen/1x4c8-minmax-fp32-sse2-ld64.c b/src/qc8-igemm/gen/1x4c8-minmax-fp32-sse2-ld64.c
index e6a083d..e41a2d6 100644
--- a/src/qc8-igemm/gen/1x4c8-minmax-fp32-sse2-ld64.c
+++ b/src/qc8-igemm/gen/1x4c8-minmax-fp32-sse2-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qc8-igemm/gen/1x4c8-minmax-fp32-sse41-ld128.c b/src/qc8-igemm/gen/1x4c8-minmax-fp32-sse41-ld128.c
index 7688285..7f44f46 100644
--- a/src/qc8-igemm/gen/1x4c8-minmax-fp32-sse41-ld128.c
+++ b/src/qc8-igemm/gen/1x4c8-minmax-fp32-sse41-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qc8-igemm/gen/1x4c8-minmax-fp32-sse41-ld64.c b/src/qc8-igemm/gen/1x4c8-minmax-fp32-sse41-ld64.c
index 6efa144..24efb01 100644
--- a/src/qc8-igemm/gen/1x4c8-minmax-fp32-sse41-ld64.c
+++ b/src/qc8-igemm/gen/1x4c8-minmax-fp32-sse41-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qc8-igemm/gen/1x4c8-minmax-fp32-wasmsimd-dot16x2-ld128.c b/src/qc8-igemm/gen/1x4c8-minmax-fp32-wasmsimd-dot16x2-ld128.c
index 9c59b7d..f1c783f 100644
--- a/src/qc8-igemm/gen/1x4c8-minmax-fp32-wasmsimd-dot16x2-ld128.c
+++ b/src/qc8-igemm/gen/1x4c8-minmax-fp32-wasmsimd-dot16x2-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qc8-igemm/gen/1x4c8-minmax-fp32-wasmsimd-dot16x2-ld64.c b/src/qc8-igemm/gen/1x4c8-minmax-fp32-wasmsimd-dot16x2-ld64.c
index bf998ea..d9cccbf 100644
--- a/src/qc8-igemm/gen/1x4c8-minmax-fp32-wasmsimd-dot16x2-ld64.c
+++ b/src/qc8-igemm/gen/1x4c8-minmax-fp32-wasmsimd-dot16x2-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qc8-igemm/gen/1x4c8-minmax-fp32-wasmsimd-mul16-ld128.c b/src/qc8-igemm/gen/1x4c8-minmax-fp32-wasmsimd-mul16-ld128.c
index 05976c0..746285d 100644
--- a/src/qc8-igemm/gen/1x4c8-minmax-fp32-wasmsimd-mul16-ld128.c
+++ b/src/qc8-igemm/gen/1x4c8-minmax-fp32-wasmsimd-mul16-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qc8-igemm/gen/1x4c8-minmax-fp32-wasmsimd-mul16-ld64.c b/src/qc8-igemm/gen/1x4c8-minmax-fp32-wasmsimd-mul16-ld64.c
index 3caad01..b79355a 100644
--- a/src/qc8-igemm/gen/1x4c8-minmax-fp32-wasmsimd-mul16-ld64.c
+++ b/src/qc8-igemm/gen/1x4c8-minmax-fp32-wasmsimd-mul16-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qc8-igemm/gen/1x4c8-minmax-fp32-xop-ld128.c b/src/qc8-igemm/gen/1x4c8-minmax-fp32-xop-ld128.c
index 648bd56..f5ee386 100644
--- a/src/qc8-igemm/gen/1x4c8-minmax-fp32-xop-ld128.c
+++ b/src/qc8-igemm/gen/1x4c8-minmax-fp32-xop-ld128.c
@@ -32,7 +32,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qc8-igemm/gen/1x4c8-minmax-fp32-xop-ld64.c b/src/qc8-igemm/gen/1x4c8-minmax-fp32-xop-ld64.c
index 3f320a1..840ae3e 100644
--- a/src/qc8-igemm/gen/1x4c8-minmax-fp32-xop-ld64.c
+++ b/src/qc8-igemm/gen/1x4c8-minmax-fp32-xop-ld64.c
@@ -32,7 +32,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qc8-igemm/gen/1x8c2-minmax-fp32-neon-mlal-dup.c b/src/qc8-igemm/gen/1x8c2-minmax-fp32-neon-mlal-dup.c
index 5ca9c2a..106f806 100644
--- a/src/qc8-igemm/gen/1x8c2-minmax-fp32-neon-mlal-dup.c
+++ b/src/qc8-igemm/gen/1x8c2-minmax-fp32-neon-mlal-dup.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qc8-igemm/gen/1x8c2-minmax-fp32-neon-mlal-ld1r.c b/src/qc8-igemm/gen/1x8c2-minmax-fp32-neon-mlal-ld1r.c
index 93eabd3..9608966 100644
--- a/src/qc8-igemm/gen/1x8c2-minmax-fp32-neon-mlal-ld1r.c
+++ b/src/qc8-igemm/gen/1x8c2-minmax-fp32-neon-mlal-ld1r.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qc8-igemm/gen/1x8c2-minmax-fp32-neon-mlal-ld2r.c b/src/qc8-igemm/gen/1x8c2-minmax-fp32-neon-mlal-ld2r.c
index 339c328..4d968a1 100644
--- a/src/qc8-igemm/gen/1x8c2-minmax-fp32-neon-mlal-ld2r.c
+++ b/src/qc8-igemm/gen/1x8c2-minmax-fp32-neon-mlal-ld2r.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qc8-igemm/gen/1x8c2-minmax-fp32-neon-mlal-ld4r.c b/src/qc8-igemm/gen/1x8c2-minmax-fp32-neon-mlal-ld4r.c
index c9a0625..fc1c12a 100644
--- a/src/qc8-igemm/gen/1x8c2-minmax-fp32-neon-mlal-ld4r.c
+++ b/src/qc8-igemm/gen/1x8c2-minmax-fp32-neon-mlal-ld4r.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qc8-igemm/gen/1x8c2-minmax-fp32-neonv8-mlal-dup.c b/src/qc8-igemm/gen/1x8c2-minmax-fp32-neonv8-mlal-dup.c
index 8e0b482..67165a1 100644
--- a/src/qc8-igemm/gen/1x8c2-minmax-fp32-neonv8-mlal-dup.c
+++ b/src/qc8-igemm/gen/1x8c2-minmax-fp32-neonv8-mlal-dup.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qc8-igemm/gen/1x8c2-minmax-fp32-neonv8-mlal-ld1r.c b/src/qc8-igemm/gen/1x8c2-minmax-fp32-neonv8-mlal-ld1r.c
index 7aed260..b15e033 100644
--- a/src/qc8-igemm/gen/1x8c2-minmax-fp32-neonv8-mlal-ld1r.c
+++ b/src/qc8-igemm/gen/1x8c2-minmax-fp32-neonv8-mlal-ld1r.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qc8-igemm/gen/1x8c2-minmax-fp32-neonv8-mlal-ld2r.c b/src/qc8-igemm/gen/1x8c2-minmax-fp32-neonv8-mlal-ld2r.c
index 69c90a7..713cbce 100644
--- a/src/qc8-igemm/gen/1x8c2-minmax-fp32-neonv8-mlal-ld2r.c
+++ b/src/qc8-igemm/gen/1x8c2-minmax-fp32-neonv8-mlal-ld2r.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qc8-igemm/gen/1x8c2-minmax-fp32-neonv8-mlal-ld4r.c b/src/qc8-igemm/gen/1x8c2-minmax-fp32-neonv8-mlal-ld4r.c
index b46268f..380106e 100644
--- a/src/qc8-igemm/gen/1x8c2-minmax-fp32-neonv8-mlal-ld4r.c
+++ b/src/qc8-igemm/gen/1x8c2-minmax-fp32-neonv8-mlal-ld4r.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qc8-igemm/gen/1x8c2s4-minmax-fp32-neon-mlal.c b/src/qc8-igemm/gen/1x8c2s4-minmax-fp32-neon-mlal.c
index e6a39e0..f66b310 100644
--- a/src/qc8-igemm/gen/1x8c2s4-minmax-fp32-neon-mlal.c
+++ b/src/qc8-igemm/gen/1x8c2s4-minmax-fp32-neon-mlal.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qc8-igemm/gen/1x8c2s4-minmax-fp32-neonv8-mlal.c b/src/qc8-igemm/gen/1x8c2s4-minmax-fp32-neonv8-mlal.c
index 021c62c..89e9a3f 100644
--- a/src/qc8-igemm/gen/1x8c2s4-minmax-fp32-neonv8-mlal.c
+++ b/src/qc8-igemm/gen/1x8c2s4-minmax-fp32-neonv8-mlal.c
@@ -28,7 +28,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qc8-igemm/gen/1x8c4-minmax-fp32-neon-mlal-dup.c b/src/qc8-igemm/gen/1x8c4-minmax-fp32-neon-mlal-dup.c
index d772a13..3ff708b 100644
--- a/src/qc8-igemm/gen/1x8c4-minmax-fp32-neon-mlal-dup.c
+++ b/src/qc8-igemm/gen/1x8c4-minmax-fp32-neon-mlal-dup.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qc8-igemm/gen/1x8c4-minmax-fp32-neon-mlal-ld1r.c b/src/qc8-igemm/gen/1x8c4-minmax-fp32-neon-mlal-ld1r.c
index 4a90a7b..8990639 100644
--- a/src/qc8-igemm/gen/1x8c4-minmax-fp32-neon-mlal-ld1r.c
+++ b/src/qc8-igemm/gen/1x8c4-minmax-fp32-neon-mlal-ld1r.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qc8-igemm/gen/1x8c4-minmax-fp32-neon-mlal-ld2r.c b/src/qc8-igemm/gen/1x8c4-minmax-fp32-neon-mlal-ld2r.c
index 06f68b7..eb3b570 100644
--- a/src/qc8-igemm/gen/1x8c4-minmax-fp32-neon-mlal-ld2r.c
+++ b/src/qc8-igemm/gen/1x8c4-minmax-fp32-neon-mlal-ld2r.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qc8-igemm/gen/1x8c4-minmax-fp32-neondot.c b/src/qc8-igemm/gen/1x8c4-minmax-fp32-neondot.c
index 44aa77a..c0069fe 100644
--- a/src/qc8-igemm/gen/1x8c4-minmax-fp32-neondot.c
+++ b/src/qc8-igemm/gen/1x8c4-minmax-fp32-neondot.c
@@ -28,7 +28,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qc8-igemm/gen/1x8c4-minmax-fp32-neonv8-mlal-dup.c b/src/qc8-igemm/gen/1x8c4-minmax-fp32-neonv8-mlal-dup.c
index 6214557..876903f 100644
--- a/src/qc8-igemm/gen/1x8c4-minmax-fp32-neonv8-mlal-dup.c
+++ b/src/qc8-igemm/gen/1x8c4-minmax-fp32-neonv8-mlal-dup.c
@@ -28,7 +28,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qc8-igemm/gen/1x8c4-minmax-fp32-neonv8-mlal-ld1r.c b/src/qc8-igemm/gen/1x8c4-minmax-fp32-neonv8-mlal-ld1r.c
index 1c2fde2..bdb5e5c 100644
--- a/src/qc8-igemm/gen/1x8c4-minmax-fp32-neonv8-mlal-ld1r.c
+++ b/src/qc8-igemm/gen/1x8c4-minmax-fp32-neonv8-mlal-ld1r.c
@@ -28,7 +28,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qc8-igemm/gen/1x8c4-minmax-fp32-neonv8-mlal-ld2r.c b/src/qc8-igemm/gen/1x8c4-minmax-fp32-neonv8-mlal-ld2r.c
index 6177e6c..d3a3af8 100644
--- a/src/qc8-igemm/gen/1x8c4-minmax-fp32-neonv8-mlal-ld2r.c
+++ b/src/qc8-igemm/gen/1x8c4-minmax-fp32-neonv8-mlal-ld2r.c
@@ -28,7 +28,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qc8-igemm/gen/1x8c4s2-minmax-fp32-neon-mlal.c b/src/qc8-igemm/gen/1x8c4s2-minmax-fp32-neon-mlal.c
index 3999056..b1d1432 100644
--- a/src/qc8-igemm/gen/1x8c4s2-minmax-fp32-neon-mlal.c
+++ b/src/qc8-igemm/gen/1x8c4s2-minmax-fp32-neon-mlal.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qc8-igemm/gen/1x8c4s2-minmax-fp32-neonv8-mlal.c b/src/qc8-igemm/gen/1x8c4s2-minmax-fp32-neonv8-mlal.c
index 97b7902..716902c 100644
--- a/src/qc8-igemm/gen/1x8c4s2-minmax-fp32-neonv8-mlal.c
+++ b/src/qc8-igemm/gen/1x8c4s2-minmax-fp32-neonv8-mlal.c
@@ -28,7 +28,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qc8-igemm/gen/1x8c8-minmax-fp32-avx2.c b/src/qc8-igemm/gen/1x8c8-minmax-fp32-avx2.c
index 1bd1df0..b7e4e02 100644
--- a/src/qc8-igemm/gen/1x8c8-minmax-fp32-avx2.c
+++ b/src/qc8-igemm/gen/1x8c8-minmax-fp32-avx2.c
@@ -28,7 +28,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qc8-igemm/gen/1x8c8-minmax-fp32-neon-mlal.c b/src/qc8-igemm/gen/1x8c8-minmax-fp32-neon-mlal.c
index 0df55a8..c62984f 100644
--- a/src/qc8-igemm/gen/1x8c8-minmax-fp32-neon-mlal.c
+++ b/src/qc8-igemm/gen/1x8c8-minmax-fp32-neon-mlal.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qc8-igemm/gen/1x8c8-minmax-fp32-neonv8-mlal.c b/src/qc8-igemm/gen/1x8c8-minmax-fp32-neonv8-mlal.c
index 7e40eec..99591ce 100644
--- a/src/qc8-igemm/gen/1x8c8-minmax-fp32-neonv8-mlal.c
+++ b/src/qc8-igemm/gen/1x8c8-minmax-fp32-neonv8-mlal.c
@@ -28,7 +28,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qc8-igemm/gen/2x16c8-minmax-fp32-avx512skx.c b/src/qc8-igemm/gen/2x16c8-minmax-fp32-avx512skx.c
index 13ec812..2ebcf93 100644
--- a/src/qc8-igemm/gen/2x16c8-minmax-fp32-avx512skx.c
+++ b/src/qc8-igemm/gen/2x16c8-minmax-fp32-avx512skx.c
@@ -28,7 +28,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qc8-igemm/gen/2x4c2-minmax-fp32-avx-ld128.c b/src/qc8-igemm/gen/2x4c2-minmax-fp32-avx-ld128.c
index ee68f9d..13c8343 100644
--- a/src/qc8-igemm/gen/2x4c2-minmax-fp32-avx-ld128.c
+++ b/src/qc8-igemm/gen/2x4c2-minmax-fp32-avx-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qc8-igemm/gen/2x4c2-minmax-fp32-avx-ld64.c b/src/qc8-igemm/gen/2x4c2-minmax-fp32-avx-ld64.c
index 5840019..025a4cc 100644
--- a/src/qc8-igemm/gen/2x4c2-minmax-fp32-avx-ld64.c
+++ b/src/qc8-igemm/gen/2x4c2-minmax-fp32-avx-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qc8-igemm/gen/2x4c2-minmax-fp32-sse2-ld128.c b/src/qc8-igemm/gen/2x4c2-minmax-fp32-sse2-ld128.c
index b24ca06..e64ba77 100644
--- a/src/qc8-igemm/gen/2x4c2-minmax-fp32-sse2-ld128.c
+++ b/src/qc8-igemm/gen/2x4c2-minmax-fp32-sse2-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qc8-igemm/gen/2x4c2-minmax-fp32-sse2-ld64.c b/src/qc8-igemm/gen/2x4c2-minmax-fp32-sse2-ld64.c
index 574a731..f3a1bdd 100644
--- a/src/qc8-igemm/gen/2x4c2-minmax-fp32-sse2-ld64.c
+++ b/src/qc8-igemm/gen/2x4c2-minmax-fp32-sse2-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qc8-igemm/gen/2x4c2-minmax-fp32-sse41-ld128.c b/src/qc8-igemm/gen/2x4c2-minmax-fp32-sse41-ld128.c
index b896f07..04d58c6 100644
--- a/src/qc8-igemm/gen/2x4c2-minmax-fp32-sse41-ld128.c
+++ b/src/qc8-igemm/gen/2x4c2-minmax-fp32-sse41-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qc8-igemm/gen/2x4c2-minmax-fp32-sse41-ld64.c b/src/qc8-igemm/gen/2x4c2-minmax-fp32-sse41-ld64.c
index da47856..58fea52 100644
--- a/src/qc8-igemm/gen/2x4c2-minmax-fp32-sse41-ld64.c
+++ b/src/qc8-igemm/gen/2x4c2-minmax-fp32-sse41-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qc8-igemm/gen/2x4c2-minmax-fp32-wasmsimd-dot16x2-ld128.c b/src/qc8-igemm/gen/2x4c2-minmax-fp32-wasmsimd-dot16x2-ld128.c
index 0c14f94..fd7371c 100644
--- a/src/qc8-igemm/gen/2x4c2-minmax-fp32-wasmsimd-dot16x2-ld128.c
+++ b/src/qc8-igemm/gen/2x4c2-minmax-fp32-wasmsimd-dot16x2-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qc8-igemm/gen/2x4c2-minmax-fp32-wasmsimd-dot16x2-ld64.c b/src/qc8-igemm/gen/2x4c2-minmax-fp32-wasmsimd-dot16x2-ld64.c
index d162f33..97e764b 100644
--- a/src/qc8-igemm/gen/2x4c2-minmax-fp32-wasmsimd-dot16x2-ld64.c
+++ b/src/qc8-igemm/gen/2x4c2-minmax-fp32-wasmsimd-dot16x2-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qc8-igemm/gen/2x4c2-minmax-fp32-xop-ld128.c b/src/qc8-igemm/gen/2x4c2-minmax-fp32-xop-ld128.c
index 61a58b6..708449e 100644
--- a/src/qc8-igemm/gen/2x4c2-minmax-fp32-xop-ld128.c
+++ b/src/qc8-igemm/gen/2x4c2-minmax-fp32-xop-ld128.c
@@ -32,7 +32,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qc8-igemm/gen/2x4c2-minmax-fp32-xop-ld64.c b/src/qc8-igemm/gen/2x4c2-minmax-fp32-xop-ld64.c
index 8a42576..15792b5 100644
--- a/src/qc8-igemm/gen/2x4c2-minmax-fp32-xop-ld64.c
+++ b/src/qc8-igemm/gen/2x4c2-minmax-fp32-xop-ld64.c
@@ -32,7 +32,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qc8-igemm/gen/2x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld128.c b/src/qc8-igemm/gen/2x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld128.c
index fa62ad0..87d4462 100644
--- a/src/qc8-igemm/gen/2x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld128.c
+++ b/src/qc8-igemm/gen/2x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qc8-igemm/gen/2x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld64.c b/src/qc8-igemm/gen/2x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld64.c
index 430e862..49fd5b4 100644
--- a/src/qc8-igemm/gen/2x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld64.c
+++ b/src/qc8-igemm/gen/2x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qc8-igemm/gen/2x4c8-minmax-fp32-avx-ld128.c b/src/qc8-igemm/gen/2x4c8-minmax-fp32-avx-ld128.c
index f4c9168..927182f 100644
--- a/src/qc8-igemm/gen/2x4c8-minmax-fp32-avx-ld128.c
+++ b/src/qc8-igemm/gen/2x4c8-minmax-fp32-avx-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qc8-igemm/gen/2x4c8-minmax-fp32-avx-ld64.c b/src/qc8-igemm/gen/2x4c8-minmax-fp32-avx-ld64.c
index 467d7a1..5922e57 100644
--- a/src/qc8-igemm/gen/2x4c8-minmax-fp32-avx-ld64.c
+++ b/src/qc8-igemm/gen/2x4c8-minmax-fp32-avx-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qc8-igemm/gen/2x4c8-minmax-fp32-sse2-ld128.c b/src/qc8-igemm/gen/2x4c8-minmax-fp32-sse2-ld128.c
index 0eb5a44..cf212b8 100644
--- a/src/qc8-igemm/gen/2x4c8-minmax-fp32-sse2-ld128.c
+++ b/src/qc8-igemm/gen/2x4c8-minmax-fp32-sse2-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qc8-igemm/gen/2x4c8-minmax-fp32-sse2-ld64.c b/src/qc8-igemm/gen/2x4c8-minmax-fp32-sse2-ld64.c
index 3a23b6b..569295a 100644
--- a/src/qc8-igemm/gen/2x4c8-minmax-fp32-sse2-ld64.c
+++ b/src/qc8-igemm/gen/2x4c8-minmax-fp32-sse2-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qc8-igemm/gen/2x4c8-minmax-fp32-sse41-ld128.c b/src/qc8-igemm/gen/2x4c8-minmax-fp32-sse41-ld128.c
index 07068d1..36db392 100644
--- a/src/qc8-igemm/gen/2x4c8-minmax-fp32-sse41-ld128.c
+++ b/src/qc8-igemm/gen/2x4c8-minmax-fp32-sse41-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qc8-igemm/gen/2x4c8-minmax-fp32-sse41-ld64.c b/src/qc8-igemm/gen/2x4c8-minmax-fp32-sse41-ld64.c
index a044eae..4bea8bd 100644
--- a/src/qc8-igemm/gen/2x4c8-minmax-fp32-sse41-ld64.c
+++ b/src/qc8-igemm/gen/2x4c8-minmax-fp32-sse41-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qc8-igemm/gen/2x4c8-minmax-fp32-wasmsimd-dot16x2-ld128.c b/src/qc8-igemm/gen/2x4c8-minmax-fp32-wasmsimd-dot16x2-ld128.c
index 19717d8..9a784ff 100644
--- a/src/qc8-igemm/gen/2x4c8-minmax-fp32-wasmsimd-dot16x2-ld128.c
+++ b/src/qc8-igemm/gen/2x4c8-minmax-fp32-wasmsimd-dot16x2-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qc8-igemm/gen/2x4c8-minmax-fp32-wasmsimd-dot16x2-ld64.c b/src/qc8-igemm/gen/2x4c8-minmax-fp32-wasmsimd-dot16x2-ld64.c
index d6a5116..793cb8c 100644
--- a/src/qc8-igemm/gen/2x4c8-minmax-fp32-wasmsimd-dot16x2-ld64.c
+++ b/src/qc8-igemm/gen/2x4c8-minmax-fp32-wasmsimd-dot16x2-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qc8-igemm/gen/2x4c8-minmax-fp32-wasmsimd-mul16-ld128.c b/src/qc8-igemm/gen/2x4c8-minmax-fp32-wasmsimd-mul16-ld128.c
index 1475964..5871ab3 100644
--- a/src/qc8-igemm/gen/2x4c8-minmax-fp32-wasmsimd-mul16-ld128.c
+++ b/src/qc8-igemm/gen/2x4c8-minmax-fp32-wasmsimd-mul16-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qc8-igemm/gen/2x4c8-minmax-fp32-wasmsimd-mul16-ld64.c b/src/qc8-igemm/gen/2x4c8-minmax-fp32-wasmsimd-mul16-ld64.c
index 4b41157..8620838 100644
--- a/src/qc8-igemm/gen/2x4c8-minmax-fp32-wasmsimd-mul16-ld64.c
+++ b/src/qc8-igemm/gen/2x4c8-minmax-fp32-wasmsimd-mul16-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qc8-igemm/gen/2x4c8-minmax-fp32-xop-ld128.c b/src/qc8-igemm/gen/2x4c8-minmax-fp32-xop-ld128.c
index 87bec86..582d0b2 100644
--- a/src/qc8-igemm/gen/2x4c8-minmax-fp32-xop-ld128.c
+++ b/src/qc8-igemm/gen/2x4c8-minmax-fp32-xop-ld128.c
@@ -32,7 +32,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qc8-igemm/gen/2x4c8-minmax-fp32-xop-ld64.c b/src/qc8-igemm/gen/2x4c8-minmax-fp32-xop-ld64.c
index 990b0b5..bdd4cd3 100644
--- a/src/qc8-igemm/gen/2x4c8-minmax-fp32-xop-ld64.c
+++ b/src/qc8-igemm/gen/2x4c8-minmax-fp32-xop-ld64.c
@@ -32,7 +32,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qc8-igemm/gen/2x8c2-minmax-fp32-neon-mlal-dup.c b/src/qc8-igemm/gen/2x8c2-minmax-fp32-neon-mlal-dup.c
index 8977add..880c560 100644
--- a/src/qc8-igemm/gen/2x8c2-minmax-fp32-neon-mlal-dup.c
+++ b/src/qc8-igemm/gen/2x8c2-minmax-fp32-neon-mlal-dup.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qc8-igemm/gen/2x8c2-minmax-fp32-neon-mlal-ld1r.c b/src/qc8-igemm/gen/2x8c2-minmax-fp32-neon-mlal-ld1r.c
index ae80e96..f4d8298 100644
--- a/src/qc8-igemm/gen/2x8c2-minmax-fp32-neon-mlal-ld1r.c
+++ b/src/qc8-igemm/gen/2x8c2-minmax-fp32-neon-mlal-ld1r.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qc8-igemm/gen/2x8c2-minmax-fp32-neon-mlal-ld2r.c b/src/qc8-igemm/gen/2x8c2-minmax-fp32-neon-mlal-ld2r.c
index 93d80a5..4bda845 100644
--- a/src/qc8-igemm/gen/2x8c2-minmax-fp32-neon-mlal-ld2r.c
+++ b/src/qc8-igemm/gen/2x8c2-minmax-fp32-neon-mlal-ld2r.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qc8-igemm/gen/2x8c2-minmax-fp32-neon-mlal-ld4r.c b/src/qc8-igemm/gen/2x8c2-minmax-fp32-neon-mlal-ld4r.c
index 2c032fe..07e597d 100644
--- a/src/qc8-igemm/gen/2x8c2-minmax-fp32-neon-mlal-ld4r.c
+++ b/src/qc8-igemm/gen/2x8c2-minmax-fp32-neon-mlal-ld4r.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qc8-igemm/gen/2x8c2-minmax-fp32-neonv8-mlal-dup.c b/src/qc8-igemm/gen/2x8c2-minmax-fp32-neonv8-mlal-dup.c
index 075e995..ebffe27 100644
--- a/src/qc8-igemm/gen/2x8c2-minmax-fp32-neonv8-mlal-dup.c
+++ b/src/qc8-igemm/gen/2x8c2-minmax-fp32-neonv8-mlal-dup.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qc8-igemm/gen/2x8c2-minmax-fp32-neonv8-mlal-ld1r.c b/src/qc8-igemm/gen/2x8c2-minmax-fp32-neonv8-mlal-ld1r.c
index 8bf517e..aee284b 100644
--- a/src/qc8-igemm/gen/2x8c2-minmax-fp32-neonv8-mlal-ld1r.c
+++ b/src/qc8-igemm/gen/2x8c2-minmax-fp32-neonv8-mlal-ld1r.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qc8-igemm/gen/2x8c2-minmax-fp32-neonv8-mlal-ld2r.c b/src/qc8-igemm/gen/2x8c2-minmax-fp32-neonv8-mlal-ld2r.c
index 8b6dd70..d7a9b57 100644
--- a/src/qc8-igemm/gen/2x8c2-minmax-fp32-neonv8-mlal-ld2r.c
+++ b/src/qc8-igemm/gen/2x8c2-minmax-fp32-neonv8-mlal-ld2r.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qc8-igemm/gen/2x8c2-minmax-fp32-neonv8-mlal-ld4r.c b/src/qc8-igemm/gen/2x8c2-minmax-fp32-neonv8-mlal-ld4r.c
index ef4066c..2f13f0f 100644
--- a/src/qc8-igemm/gen/2x8c2-minmax-fp32-neonv8-mlal-ld4r.c
+++ b/src/qc8-igemm/gen/2x8c2-minmax-fp32-neonv8-mlal-ld4r.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qc8-igemm/gen/2x8c2s4-minmax-fp32-neon-mlal.c b/src/qc8-igemm/gen/2x8c2s4-minmax-fp32-neon-mlal.c
index b0721ae..46d3417 100644
--- a/src/qc8-igemm/gen/2x8c2s4-minmax-fp32-neon-mlal.c
+++ b/src/qc8-igemm/gen/2x8c2s4-minmax-fp32-neon-mlal.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qc8-igemm/gen/2x8c2s4-minmax-fp32-neonv8-mlal.c b/src/qc8-igemm/gen/2x8c2s4-minmax-fp32-neonv8-mlal.c
index eb563aa..fc3dc46 100644
--- a/src/qc8-igemm/gen/2x8c2s4-minmax-fp32-neonv8-mlal.c
+++ b/src/qc8-igemm/gen/2x8c2s4-minmax-fp32-neonv8-mlal.c
@@ -28,7 +28,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qc8-igemm/gen/2x8c4-minmax-fp32-neon-mlal-dup.c b/src/qc8-igemm/gen/2x8c4-minmax-fp32-neon-mlal-dup.c
index b3dbf2f..4c6550f 100644
--- a/src/qc8-igemm/gen/2x8c4-minmax-fp32-neon-mlal-dup.c
+++ b/src/qc8-igemm/gen/2x8c4-minmax-fp32-neon-mlal-dup.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qc8-igemm/gen/2x8c4-minmax-fp32-neon-mlal-ld1r.c b/src/qc8-igemm/gen/2x8c4-minmax-fp32-neon-mlal-ld1r.c
index ec714f2..1f3c60d 100644
--- a/src/qc8-igemm/gen/2x8c4-minmax-fp32-neon-mlal-ld1r.c
+++ b/src/qc8-igemm/gen/2x8c4-minmax-fp32-neon-mlal-ld1r.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qc8-igemm/gen/2x8c4-minmax-fp32-neon-mlal-ld2r.c b/src/qc8-igemm/gen/2x8c4-minmax-fp32-neon-mlal-ld2r.c
index 4fb9915..f6586c8 100644
--- a/src/qc8-igemm/gen/2x8c4-minmax-fp32-neon-mlal-ld2r.c
+++ b/src/qc8-igemm/gen/2x8c4-minmax-fp32-neon-mlal-ld2r.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qc8-igemm/gen/2x8c4-minmax-fp32-neonv8-mlal-dup.c b/src/qc8-igemm/gen/2x8c4-minmax-fp32-neonv8-mlal-dup.c
index 09c3471..4cc863a 100644
--- a/src/qc8-igemm/gen/2x8c4-minmax-fp32-neonv8-mlal-dup.c
+++ b/src/qc8-igemm/gen/2x8c4-minmax-fp32-neonv8-mlal-dup.c
@@ -28,7 +28,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qc8-igemm/gen/2x8c4-minmax-fp32-neonv8-mlal-ld1r.c b/src/qc8-igemm/gen/2x8c4-minmax-fp32-neonv8-mlal-ld1r.c
index 24456ef..cc40522 100644
--- a/src/qc8-igemm/gen/2x8c4-minmax-fp32-neonv8-mlal-ld1r.c
+++ b/src/qc8-igemm/gen/2x8c4-minmax-fp32-neonv8-mlal-ld1r.c
@@ -28,7 +28,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qc8-igemm/gen/2x8c4-minmax-fp32-neonv8-mlal-ld2r.c b/src/qc8-igemm/gen/2x8c4-minmax-fp32-neonv8-mlal-ld2r.c
index cb628f0..87ff201 100644
--- a/src/qc8-igemm/gen/2x8c4-minmax-fp32-neonv8-mlal-ld2r.c
+++ b/src/qc8-igemm/gen/2x8c4-minmax-fp32-neonv8-mlal-ld2r.c
@@ -28,7 +28,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qc8-igemm/gen/2x8c4s2-minmax-fp32-neon-mlal.c b/src/qc8-igemm/gen/2x8c4s2-minmax-fp32-neon-mlal.c
index 8acea94..da57e88 100644
--- a/src/qc8-igemm/gen/2x8c4s2-minmax-fp32-neon-mlal.c
+++ b/src/qc8-igemm/gen/2x8c4s2-minmax-fp32-neon-mlal.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qc8-igemm/gen/2x8c4s2-minmax-fp32-neonv8-mlal.c b/src/qc8-igemm/gen/2x8c4s2-minmax-fp32-neonv8-mlal.c
index ea1bcac..555daeb 100644
--- a/src/qc8-igemm/gen/2x8c4s2-minmax-fp32-neonv8-mlal.c
+++ b/src/qc8-igemm/gen/2x8c4s2-minmax-fp32-neonv8-mlal.c
@@ -28,7 +28,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qc8-igemm/gen/2x8c8-minmax-fp32-avx2.c b/src/qc8-igemm/gen/2x8c8-minmax-fp32-avx2.c
index bdc24a0..80fd096 100644
--- a/src/qc8-igemm/gen/2x8c8-minmax-fp32-avx2.c
+++ b/src/qc8-igemm/gen/2x8c8-minmax-fp32-avx2.c
@@ -28,7 +28,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qc8-igemm/gen/2x8c8-minmax-fp32-neon-mlal.c b/src/qc8-igemm/gen/2x8c8-minmax-fp32-neon-mlal.c
index 87249ad..560d1cf 100644
--- a/src/qc8-igemm/gen/2x8c8-minmax-fp32-neon-mlal.c
+++ b/src/qc8-igemm/gen/2x8c8-minmax-fp32-neon-mlal.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qc8-igemm/gen/2x8c8-minmax-fp32-neonv8-mlal.c b/src/qc8-igemm/gen/2x8c8-minmax-fp32-neonv8-mlal.c
index b1dbcf4..a0838ee 100644
--- a/src/qc8-igemm/gen/2x8c8-minmax-fp32-neonv8-mlal.c
+++ b/src/qc8-igemm/gen/2x8c8-minmax-fp32-neonv8-mlal.c
@@ -28,7 +28,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qc8-igemm/gen/3x16c8-minmax-fp32-avx512skx.c b/src/qc8-igemm/gen/3x16c8-minmax-fp32-avx512skx.c
index d285597..f8de80b 100644
--- a/src/qc8-igemm/gen/3x16c8-minmax-fp32-avx512skx.c
+++ b/src/qc8-igemm/gen/3x16c8-minmax-fp32-avx512skx.c
@@ -28,7 +28,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qc8-igemm/gen/3x4c2-minmax-fp32-avx-ld128.c b/src/qc8-igemm/gen/3x4c2-minmax-fp32-avx-ld128.c
index d4444f5..82481e6 100644
--- a/src/qc8-igemm/gen/3x4c2-minmax-fp32-avx-ld128.c
+++ b/src/qc8-igemm/gen/3x4c2-minmax-fp32-avx-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qc8-igemm/gen/3x4c2-minmax-fp32-avx-ld64.c b/src/qc8-igemm/gen/3x4c2-minmax-fp32-avx-ld64.c
index d9ef4be..8958618 100644
--- a/src/qc8-igemm/gen/3x4c2-minmax-fp32-avx-ld64.c
+++ b/src/qc8-igemm/gen/3x4c2-minmax-fp32-avx-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qc8-igemm/gen/3x4c2-minmax-fp32-sse2-ld128.c b/src/qc8-igemm/gen/3x4c2-minmax-fp32-sse2-ld128.c
index ef35055..0773706 100644
--- a/src/qc8-igemm/gen/3x4c2-minmax-fp32-sse2-ld128.c
+++ b/src/qc8-igemm/gen/3x4c2-minmax-fp32-sse2-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qc8-igemm/gen/3x4c2-minmax-fp32-sse2-ld64.c b/src/qc8-igemm/gen/3x4c2-minmax-fp32-sse2-ld64.c
index 0fb5f0a..5e448ee 100644
--- a/src/qc8-igemm/gen/3x4c2-minmax-fp32-sse2-ld64.c
+++ b/src/qc8-igemm/gen/3x4c2-minmax-fp32-sse2-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qc8-igemm/gen/3x4c2-minmax-fp32-sse41-ld128.c b/src/qc8-igemm/gen/3x4c2-minmax-fp32-sse41-ld128.c
index 33b5725..8cff39b 100644
--- a/src/qc8-igemm/gen/3x4c2-minmax-fp32-sse41-ld128.c
+++ b/src/qc8-igemm/gen/3x4c2-minmax-fp32-sse41-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qc8-igemm/gen/3x4c2-minmax-fp32-sse41-ld64.c b/src/qc8-igemm/gen/3x4c2-minmax-fp32-sse41-ld64.c
index a429ea6..c2589c5 100644
--- a/src/qc8-igemm/gen/3x4c2-minmax-fp32-sse41-ld64.c
+++ b/src/qc8-igemm/gen/3x4c2-minmax-fp32-sse41-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qc8-igemm/gen/3x4c2-minmax-fp32-wasmsimd-dot16x2-ld128.c b/src/qc8-igemm/gen/3x4c2-minmax-fp32-wasmsimd-dot16x2-ld128.c
index 44c1613..fb721da 100644
--- a/src/qc8-igemm/gen/3x4c2-minmax-fp32-wasmsimd-dot16x2-ld128.c
+++ b/src/qc8-igemm/gen/3x4c2-minmax-fp32-wasmsimd-dot16x2-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qc8-igemm/gen/3x4c2-minmax-fp32-wasmsimd-dot16x2-ld64.c b/src/qc8-igemm/gen/3x4c2-minmax-fp32-wasmsimd-dot16x2-ld64.c
index 9748a0f..a291502 100644
--- a/src/qc8-igemm/gen/3x4c2-minmax-fp32-wasmsimd-dot16x2-ld64.c
+++ b/src/qc8-igemm/gen/3x4c2-minmax-fp32-wasmsimd-dot16x2-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qc8-igemm/gen/3x4c2-minmax-fp32-xop-ld128.c b/src/qc8-igemm/gen/3x4c2-minmax-fp32-xop-ld128.c
index e158536..35a467d 100644
--- a/src/qc8-igemm/gen/3x4c2-minmax-fp32-xop-ld128.c
+++ b/src/qc8-igemm/gen/3x4c2-minmax-fp32-xop-ld128.c
@@ -32,7 +32,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qc8-igemm/gen/3x4c2-minmax-fp32-xop-ld64.c b/src/qc8-igemm/gen/3x4c2-minmax-fp32-xop-ld64.c
index f3dd99b..65fedfa 100644
--- a/src/qc8-igemm/gen/3x4c2-minmax-fp32-xop-ld64.c
+++ b/src/qc8-igemm/gen/3x4c2-minmax-fp32-xop-ld64.c
@@ -32,7 +32,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qc8-igemm/gen/3x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld128.c b/src/qc8-igemm/gen/3x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld128.c
index 1cb33ea..ece9147 100644
--- a/src/qc8-igemm/gen/3x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld128.c
+++ b/src/qc8-igemm/gen/3x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qc8-igemm/gen/3x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld64.c b/src/qc8-igemm/gen/3x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld64.c
index dd2a4f4..68ce6d6 100644
--- a/src/qc8-igemm/gen/3x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld64.c
+++ b/src/qc8-igemm/gen/3x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qc8-igemm/gen/3x4c8-minmax-fp32-avx-ld128.c b/src/qc8-igemm/gen/3x4c8-minmax-fp32-avx-ld128.c
index 8a2e61e..755468c 100644
--- a/src/qc8-igemm/gen/3x4c8-minmax-fp32-avx-ld128.c
+++ b/src/qc8-igemm/gen/3x4c8-minmax-fp32-avx-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qc8-igemm/gen/3x4c8-minmax-fp32-avx-ld64.c b/src/qc8-igemm/gen/3x4c8-minmax-fp32-avx-ld64.c
index b9b9c78..b5034d5 100644
--- a/src/qc8-igemm/gen/3x4c8-minmax-fp32-avx-ld64.c
+++ b/src/qc8-igemm/gen/3x4c8-minmax-fp32-avx-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qc8-igemm/gen/3x4c8-minmax-fp32-sse2-ld128.c b/src/qc8-igemm/gen/3x4c8-minmax-fp32-sse2-ld128.c
index 14b73c8..2156984 100644
--- a/src/qc8-igemm/gen/3x4c8-minmax-fp32-sse2-ld128.c
+++ b/src/qc8-igemm/gen/3x4c8-minmax-fp32-sse2-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qc8-igemm/gen/3x4c8-minmax-fp32-sse2-ld64.c b/src/qc8-igemm/gen/3x4c8-minmax-fp32-sse2-ld64.c
index a49d3ff..aa1a76e 100644
--- a/src/qc8-igemm/gen/3x4c8-minmax-fp32-sse2-ld64.c
+++ b/src/qc8-igemm/gen/3x4c8-minmax-fp32-sse2-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qc8-igemm/gen/3x4c8-minmax-fp32-sse41-ld128.c b/src/qc8-igemm/gen/3x4c8-minmax-fp32-sse41-ld128.c
index 6674008..2a106dd 100644
--- a/src/qc8-igemm/gen/3x4c8-minmax-fp32-sse41-ld128.c
+++ b/src/qc8-igemm/gen/3x4c8-minmax-fp32-sse41-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qc8-igemm/gen/3x4c8-minmax-fp32-sse41-ld64.c b/src/qc8-igemm/gen/3x4c8-minmax-fp32-sse41-ld64.c
index cbbbae1..5a363db 100644
--- a/src/qc8-igemm/gen/3x4c8-minmax-fp32-sse41-ld64.c
+++ b/src/qc8-igemm/gen/3x4c8-minmax-fp32-sse41-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qc8-igemm/gen/3x4c8-minmax-fp32-wasmsimd-dot16x2-ld128.c b/src/qc8-igemm/gen/3x4c8-minmax-fp32-wasmsimd-dot16x2-ld128.c
index 61b3da2..21f0ff3 100644
--- a/src/qc8-igemm/gen/3x4c8-minmax-fp32-wasmsimd-dot16x2-ld128.c
+++ b/src/qc8-igemm/gen/3x4c8-minmax-fp32-wasmsimd-dot16x2-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qc8-igemm/gen/3x4c8-minmax-fp32-wasmsimd-dot16x2-ld64.c b/src/qc8-igemm/gen/3x4c8-minmax-fp32-wasmsimd-dot16x2-ld64.c
index e3dff39..858a713 100644
--- a/src/qc8-igemm/gen/3x4c8-minmax-fp32-wasmsimd-dot16x2-ld64.c
+++ b/src/qc8-igemm/gen/3x4c8-minmax-fp32-wasmsimd-dot16x2-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qc8-igemm/gen/3x4c8-minmax-fp32-wasmsimd-mul16-ld128.c b/src/qc8-igemm/gen/3x4c8-minmax-fp32-wasmsimd-mul16-ld128.c
index df5bd90..0095a3d 100644
--- a/src/qc8-igemm/gen/3x4c8-minmax-fp32-wasmsimd-mul16-ld128.c
+++ b/src/qc8-igemm/gen/3x4c8-minmax-fp32-wasmsimd-mul16-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qc8-igemm/gen/3x4c8-minmax-fp32-wasmsimd-mul16-ld64.c b/src/qc8-igemm/gen/3x4c8-minmax-fp32-wasmsimd-mul16-ld64.c
index 2da544c..2589fa9 100644
--- a/src/qc8-igemm/gen/3x4c8-minmax-fp32-wasmsimd-mul16-ld64.c
+++ b/src/qc8-igemm/gen/3x4c8-minmax-fp32-wasmsimd-mul16-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qc8-igemm/gen/3x4c8-minmax-fp32-xop-ld128.c b/src/qc8-igemm/gen/3x4c8-minmax-fp32-xop-ld128.c
index 963277b..788ce7f 100644
--- a/src/qc8-igemm/gen/3x4c8-minmax-fp32-xop-ld128.c
+++ b/src/qc8-igemm/gen/3x4c8-minmax-fp32-xop-ld128.c
@@ -32,7 +32,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qc8-igemm/gen/3x4c8-minmax-fp32-xop-ld64.c b/src/qc8-igemm/gen/3x4c8-minmax-fp32-xop-ld64.c
index ccd3b85..0ace73d 100644
--- a/src/qc8-igemm/gen/3x4c8-minmax-fp32-xop-ld64.c
+++ b/src/qc8-igemm/gen/3x4c8-minmax-fp32-xop-ld64.c
@@ -32,7 +32,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qc8-igemm/gen/3x8c8-minmax-fp32-avx2.c b/src/qc8-igemm/gen/3x8c8-minmax-fp32-avx2.c
index f092b2a..d5dbd1c 100644
--- a/src/qc8-igemm/gen/3x8c8-minmax-fp32-avx2.c
+++ b/src/qc8-igemm/gen/3x8c8-minmax-fp32-avx2.c
@@ -28,7 +28,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qc8-igemm/gen/4x16-minmax-fp32-neon-mlal-lane.c b/src/qc8-igemm/gen/4x16-minmax-fp32-neon-mlal-lane.c
index 9798557..a8227b9 100644
--- a/src/qc8-igemm/gen/4x16-minmax-fp32-neon-mlal-lane.c
+++ b/src/qc8-igemm/gen/4x16-minmax-fp32-neon-mlal-lane.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qc8-igemm/gen/4x16-minmax-fp32-neonv8-mlal-lane.c b/src/qc8-igemm/gen/4x16-minmax-fp32-neonv8-mlal-lane.c
index ce7af11..0883388 100644
--- a/src/qc8-igemm/gen/4x16-minmax-fp32-neonv8-mlal-lane.c
+++ b/src/qc8-igemm/gen/4x16-minmax-fp32-neonv8-mlal-lane.c
@@ -28,7 +28,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qc8-igemm/gen/4x16c4-minmax-fp32-neondot.c b/src/qc8-igemm/gen/4x16c4-minmax-fp32-neondot.c
index 7135963..1f725ac 100644
--- a/src/qc8-igemm/gen/4x16c4-minmax-fp32-neondot.c
+++ b/src/qc8-igemm/gen/4x16c4-minmax-fp32-neondot.c
@@ -28,7 +28,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qc8-igemm/gen/4x16c8-minmax-fp32-avx512skx.c b/src/qc8-igemm/gen/4x16c8-minmax-fp32-avx512skx.c
index 945105b..911058f 100644
--- a/src/qc8-igemm/gen/4x16c8-minmax-fp32-avx512skx.c
+++ b/src/qc8-igemm/gen/4x16c8-minmax-fp32-avx512skx.c
@@ -28,7 +28,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qc8-igemm/gen/4x4c2-minmax-fp32-avx-ld128.c b/src/qc8-igemm/gen/4x4c2-minmax-fp32-avx-ld128.c
index cd924d0..b6cefb6 100644
--- a/src/qc8-igemm/gen/4x4c2-minmax-fp32-avx-ld128.c
+++ b/src/qc8-igemm/gen/4x4c2-minmax-fp32-avx-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qc8-igemm/gen/4x4c2-minmax-fp32-avx-ld64.c b/src/qc8-igemm/gen/4x4c2-minmax-fp32-avx-ld64.c
index 7336f53..d32c265 100644
--- a/src/qc8-igemm/gen/4x4c2-minmax-fp32-avx-ld64.c
+++ b/src/qc8-igemm/gen/4x4c2-minmax-fp32-avx-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qc8-igemm/gen/4x4c2-minmax-fp32-sse2-ld128.c b/src/qc8-igemm/gen/4x4c2-minmax-fp32-sse2-ld128.c
index f302bfc..6292992 100644
--- a/src/qc8-igemm/gen/4x4c2-minmax-fp32-sse2-ld128.c
+++ b/src/qc8-igemm/gen/4x4c2-minmax-fp32-sse2-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qc8-igemm/gen/4x4c2-minmax-fp32-sse2-ld64.c b/src/qc8-igemm/gen/4x4c2-minmax-fp32-sse2-ld64.c
index 70c9638..21df8c4 100644
--- a/src/qc8-igemm/gen/4x4c2-minmax-fp32-sse2-ld64.c
+++ b/src/qc8-igemm/gen/4x4c2-minmax-fp32-sse2-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qc8-igemm/gen/4x4c2-minmax-fp32-sse41-ld128.c b/src/qc8-igemm/gen/4x4c2-minmax-fp32-sse41-ld128.c
index 8e12499..2bd5964 100644
--- a/src/qc8-igemm/gen/4x4c2-minmax-fp32-sse41-ld128.c
+++ b/src/qc8-igemm/gen/4x4c2-minmax-fp32-sse41-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qc8-igemm/gen/4x4c2-minmax-fp32-sse41-ld64.c b/src/qc8-igemm/gen/4x4c2-minmax-fp32-sse41-ld64.c
index 7d01c41..4796068 100644
--- a/src/qc8-igemm/gen/4x4c2-minmax-fp32-sse41-ld64.c
+++ b/src/qc8-igemm/gen/4x4c2-minmax-fp32-sse41-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qc8-igemm/gen/4x4c2-minmax-fp32-wasmsimd-dot16x2-ld128.c b/src/qc8-igemm/gen/4x4c2-minmax-fp32-wasmsimd-dot16x2-ld128.c
index 5e85f78..3410fb8 100644
--- a/src/qc8-igemm/gen/4x4c2-minmax-fp32-wasmsimd-dot16x2-ld128.c
+++ b/src/qc8-igemm/gen/4x4c2-minmax-fp32-wasmsimd-dot16x2-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qc8-igemm/gen/4x4c2-minmax-fp32-wasmsimd-dot16x2-ld64.c b/src/qc8-igemm/gen/4x4c2-minmax-fp32-wasmsimd-dot16x2-ld64.c
index cbdf2cd..e98db0c 100644
--- a/src/qc8-igemm/gen/4x4c2-minmax-fp32-wasmsimd-dot16x2-ld64.c
+++ b/src/qc8-igemm/gen/4x4c2-minmax-fp32-wasmsimd-dot16x2-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qc8-igemm/gen/4x4c2-minmax-fp32-xop-ld128.c b/src/qc8-igemm/gen/4x4c2-minmax-fp32-xop-ld128.c
index 44aadf3..b46921f 100644
--- a/src/qc8-igemm/gen/4x4c2-minmax-fp32-xop-ld128.c
+++ b/src/qc8-igemm/gen/4x4c2-minmax-fp32-xop-ld128.c
@@ -32,7 +32,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qc8-igemm/gen/4x4c2-minmax-fp32-xop-ld64.c b/src/qc8-igemm/gen/4x4c2-minmax-fp32-xop-ld64.c
index 329cfa7..5c0d910 100644
--- a/src/qc8-igemm/gen/4x4c2-minmax-fp32-xop-ld64.c
+++ b/src/qc8-igemm/gen/4x4c2-minmax-fp32-xop-ld64.c
@@ -32,7 +32,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qc8-igemm/gen/4x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld128.c b/src/qc8-igemm/gen/4x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld128.c
index 49a1d72..aa76960 100644
--- a/src/qc8-igemm/gen/4x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld128.c
+++ b/src/qc8-igemm/gen/4x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qc8-igemm/gen/4x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld64.c b/src/qc8-igemm/gen/4x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld64.c
index d0f03ad..7138285 100644
--- a/src/qc8-igemm/gen/4x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld64.c
+++ b/src/qc8-igemm/gen/4x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qc8-igemm/gen/4x4c8-minmax-fp32-wasmsimd-dot16x2-ld128.c b/src/qc8-igemm/gen/4x4c8-minmax-fp32-wasmsimd-dot16x2-ld128.c
index 471d931..1ae12cb 100644
--- a/src/qc8-igemm/gen/4x4c8-minmax-fp32-wasmsimd-dot16x2-ld128.c
+++ b/src/qc8-igemm/gen/4x4c8-minmax-fp32-wasmsimd-dot16x2-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qc8-igemm/gen/4x4c8-minmax-fp32-wasmsimd-dot16x2-ld64.c b/src/qc8-igemm/gen/4x4c8-minmax-fp32-wasmsimd-dot16x2-ld64.c
index 8403c87..dea29ae 100644
--- a/src/qc8-igemm/gen/4x4c8-minmax-fp32-wasmsimd-dot16x2-ld64.c
+++ b/src/qc8-igemm/gen/4x4c8-minmax-fp32-wasmsimd-dot16x2-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qc8-igemm/gen/4x8c4-minmax-fp32-neondot.c b/src/qc8-igemm/gen/4x8c4-minmax-fp32-neondot.c
index 6584083..2eb3e82 100644
--- a/src/qc8-igemm/gen/4x8c4-minmax-fp32-neondot.c
+++ b/src/qc8-igemm/gen/4x8c4-minmax-fp32-neondot.c
@@ -28,7 +28,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qc8-igemm/gen/6x16c4-minmax-fp32-neondot.c b/src/qc8-igemm/gen/6x16c4-minmax-fp32-neondot.c
index 57fb30d..2fabe2c 100644
--- a/src/qc8-igemm/gen/6x16c4-minmax-fp32-neondot.c
+++ b/src/qc8-igemm/gen/6x16c4-minmax-fp32-neondot.c
@@ -28,7 +28,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 6);
diff --git a/src/qc8-igemm/gen/6x8c4-minmax-fp32-neondot.c b/src/qc8-igemm/gen/6x8c4-minmax-fp32-neondot.c
index c38b340..3ac8010 100644
--- a/src/qc8-igemm/gen/6x8c4-minmax-fp32-neondot.c
+++ b/src/qc8-igemm/gen/6x8c4-minmax-fp32-neondot.c
@@ -28,7 +28,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 6);
diff --git a/src/qc8-igemm/gen/8x16c4-minmax-fp32-neondot.c b/src/qc8-igemm/gen/8x16c4-minmax-fp32-neondot.c
index 2411865..9535bc8 100644
--- a/src/qc8-igemm/gen/8x16c4-minmax-fp32-neondot.c
+++ b/src/qc8-igemm/gen/8x16c4-minmax-fp32-neondot.c
@@ -28,7 +28,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 8);
diff --git a/src/qc8-igemm/gen/8x8c4-minmax-fp32-neondot.c b/src/qc8-igemm/gen/8x8c4-minmax-fp32-neondot.c
index dfa309d..dab0f7b 100644
--- a/src/qc8-igemm/gen/8x8c4-minmax-fp32-neondot.c
+++ b/src/qc8-igemm/gen/8x8c4-minmax-fp32-neondot.c
@@ -28,7 +28,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 8);
diff --git a/src/qs8-f32-vcvt/gen/vcvt-scalar-x1.c b/src/qs8-f32-vcvt/gen/vcvt-scalar-x1.c
index bcc78d2..38d056b 100644
--- a/src/qs8-f32-vcvt/gen/vcvt-scalar-x1.c
+++ b/src/qs8-f32-vcvt/gen/vcvt-scalar-x1.c
@@ -18,7 +18,7 @@
     size_t n,
     const int8_t* x,
     float* y,
-    const union xnn_qs8_f32_cvt_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_qs8_f32_cvt_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(int8_t) == 0);
diff --git a/src/qs8-f32-vcvt/gen/vcvt-scalar-x2.c b/src/qs8-f32-vcvt/gen/vcvt-scalar-x2.c
index 7e55bc1..82c66be 100644
--- a/src/qs8-f32-vcvt/gen/vcvt-scalar-x2.c
+++ b/src/qs8-f32-vcvt/gen/vcvt-scalar-x2.c
@@ -18,7 +18,7 @@
     size_t n,
     const int8_t* x,
     float* y,
-    const union xnn_qs8_f32_cvt_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_qs8_f32_cvt_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(int8_t) == 0);
diff --git a/src/qs8-f32-vcvt/gen/vcvt-scalar-x3.c b/src/qs8-f32-vcvt/gen/vcvt-scalar-x3.c
index 191530c..ae96a97 100644
--- a/src/qs8-f32-vcvt/gen/vcvt-scalar-x3.c
+++ b/src/qs8-f32-vcvt/gen/vcvt-scalar-x3.c
@@ -18,7 +18,7 @@
     size_t n,
     const int8_t* x,
     float* y,
-    const union xnn_qs8_f32_cvt_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_qs8_f32_cvt_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(int8_t) == 0);
diff --git a/src/qs8-f32-vcvt/gen/vcvt-scalar-x4.c b/src/qs8-f32-vcvt/gen/vcvt-scalar-x4.c
index 99f5b81..64e563e 100644
--- a/src/qs8-f32-vcvt/gen/vcvt-scalar-x4.c
+++ b/src/qs8-f32-vcvt/gen/vcvt-scalar-x4.c
@@ -18,7 +18,7 @@
     size_t n,
     const int8_t* x,
     float* y,
-    const union xnn_qs8_f32_cvt_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_qs8_f32_cvt_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(int8_t) == 0);
diff --git a/src/qs8-f32-vcvt/scalar.c.in b/src/qs8-f32-vcvt/scalar.c.in
index 173ee1f..ebd1631 100644
--- a/src/qs8-f32-vcvt/scalar.c.in
+++ b/src/qs8-f32-vcvt/scalar.c.in
@@ -16,7 +16,7 @@
     size_t n,
     const ${XINT8_T}* x,
     float* y,
-    const union xnn_${DATATYPE.lower()}_f32_cvt_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_${DATATYPE.lower()}_f32_cvt_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(${XINT8_T}) == 0);
diff --git a/src/qs8-gemm/MRx16c8-avx512skx.c.in b/src/qs8-gemm/MRx16c8-avx512skx.c.in
index 2d5a9db..4612d28 100644
--- a/src/qs8-gemm/MRx16c8-avx512skx.c.in
+++ b/src/qs8-gemm/MRx16c8-avx512skx.c.in
@@ -31,7 +31,7 @@
     ${XINT8_T}* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union ${PARAMS_UNION} params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union ${PARAMS_UNION} params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= ${MR});
diff --git a/src/qs8-gemm/MRx4c2-sse.c.in b/src/qs8-gemm/MRx4c2-sse.c.in
index 22ed064..12c47ba 100644
--- a/src/qs8-gemm/MRx4c2-sse.c.in
+++ b/src/qs8-gemm/MRx4c2-sse.c.in
@@ -44,7 +44,7 @@
     ${XINT8_T}* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union ${PARAMS_UNION} params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union ${PARAMS_UNION} params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= ${MR});
diff --git a/src/qs8-gemm/MRx4c2-wasmsimd-dot16x2.c.in b/src/qs8-gemm/MRx4c2-wasmsimd-dot16x2.c.in
index 7aa58b7..0b8d140 100644
--- a/src/qs8-gemm/MRx4c2-wasmsimd-dot16x2.c.in
+++ b/src/qs8-gemm/MRx4c2-wasmsimd-dot16x2.c.in
@@ -34,7 +34,7 @@
     ${XINT8_T}* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union ${PARAMS_UNION} params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union ${PARAMS_UNION} params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= ${MR});
diff --git a/src/qs8-gemm/MRx4c2s4-wasmsimd-dot16x2.c.in b/src/qs8-gemm/MRx4c2s4-wasmsimd-dot16x2.c.in
index be07cf1..242d384 100644
--- a/src/qs8-gemm/MRx4c2s4-wasmsimd-dot16x2.c.in
+++ b/src/qs8-gemm/MRx4c2s4-wasmsimd-dot16x2.c.in
@@ -34,7 +34,7 @@
     ${XINT8_T}* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union ${PARAMS_UNION} params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union ${PARAMS_UNION} params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= ${MR});
diff --git a/src/qs8-gemm/MRx4c8-sse.c.in b/src/qs8-gemm/MRx4c8-sse.c.in
index 7d76bd9..91ff2d7 100644
--- a/src/qs8-gemm/MRx4c8-sse.c.in
+++ b/src/qs8-gemm/MRx4c8-sse.c.in
@@ -43,7 +43,7 @@
     ${XINT8_T}* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union ${PARAMS_UNION} params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union ${PARAMS_UNION} params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= ${MR});
diff --git a/src/qs8-gemm/MRx4c8-wasmsimd-dot16x2.c.in b/src/qs8-gemm/MRx4c8-wasmsimd-dot16x2.c.in
index 5e5c973..30a1832 100644
--- a/src/qs8-gemm/MRx4c8-wasmsimd-dot16x2.c.in
+++ b/src/qs8-gemm/MRx4c8-wasmsimd-dot16x2.c.in
@@ -33,7 +33,7 @@
     ${XINT8_T}* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union ${PARAMS_UNION} params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union ${PARAMS_UNION} params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= ${MR});
diff --git a/src/qs8-gemm/MRx4c8-wasmsimd-mul16.c.in b/src/qs8-gemm/MRx4c8-wasmsimd-mul16.c.in
index 7d62559..ca4538e 100644
--- a/src/qs8-gemm/MRx4c8-wasmsimd-mul16.c.in
+++ b/src/qs8-gemm/MRx4c8-wasmsimd-mul16.c.in
@@ -33,7 +33,7 @@
     ${XINT8_T}* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union ${PARAMS_UNION} params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union ${PARAMS_UNION} params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= ${MR});
diff --git a/src/qs8-gemm/MRx4c8-wasmsimd-mul32.c.in b/src/qs8-gemm/MRx4c8-wasmsimd-mul32.c.in
index 9739c99..1a1fd79 100644
--- a/src/qs8-gemm/MRx4c8-wasmsimd-mul32.c.in
+++ b/src/qs8-gemm/MRx4c8-wasmsimd-mul32.c.in
@@ -33,7 +33,7 @@
     ${XINT8_T}* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union ${PARAMS_UNION} params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union ${PARAMS_UNION} params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= ${MR});
diff --git a/src/qs8-gemm/MRx8c8-avx2.c.in b/src/qs8-gemm/MRx8c8-avx2.c.in
index eb3a0d7..679b490 100644
--- a/src/qs8-gemm/MRx8c8-avx2.c.in
+++ b/src/qs8-gemm/MRx8c8-avx2.c.in
@@ -30,7 +30,7 @@
     ${XINT8_T}* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union ${PARAMS_UNION} params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union ${PARAMS_UNION} params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= ${MR});
diff --git a/src/qs8-gemm/c16-neon-mlal.c.in b/src/qs8-gemm/c16-neon-mlal.c.in
index 5465e21..77b9685 100644
--- a/src/qs8-gemm/c16-neon-mlal.c.in
+++ b/src/qs8-gemm/c16-neon-mlal.c.in
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= ${MR});
diff --git a/src/qs8-gemm/c2-neon-mull-dup.c.in b/src/qs8-gemm/c2-neon-mull-dup.c.in
index 877879e..31cdc51 100644
--- a/src/qs8-gemm/c2-neon-mull-dup.c.in
+++ b/src/qs8-gemm/c2-neon-mull-dup.c.in
@@ -32,7 +32,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union ${PARAMS_UNION} params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union ${PARAMS_UNION} params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= ${MR});
diff --git a/src/qs8-gemm/c2-neon-mull-shuffle.c.in b/src/qs8-gemm/c2-neon-mull-shuffle.c.in
index 6e3424c..fd2165f 100644
--- a/src/qs8-gemm/c2-neon-mull-shuffle.c.in
+++ b/src/qs8-gemm/c2-neon-mull-shuffle.c.in
@@ -32,7 +32,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union ${PARAMS_UNION} params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union ${PARAMS_UNION} params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= ${MR});
diff --git a/src/qs8-gemm/c4-neon-mull-dup.c.in b/src/qs8-gemm/c4-neon-mull-dup.c.in
index 2849c9d..0a0e77c 100644
--- a/src/qs8-gemm/c4-neon-mull-dup.c.in
+++ b/src/qs8-gemm/c4-neon-mull-dup.c.in
@@ -33,7 +33,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union ${PARAMS_UNION} params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union ${PARAMS_UNION} params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= ${MR});
diff --git a/src/qs8-gemm/c4-neon-mull-shuffle.c.in b/src/qs8-gemm/c4-neon-mull-shuffle.c.in
index 9c1ae6f..2fc2bc6 100644
--- a/src/qs8-gemm/c4-neon-mull-shuffle.c.in
+++ b/src/qs8-gemm/c4-neon-mull-shuffle.c.in
@@ -32,7 +32,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union ${PARAMS_UNION} params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union ${PARAMS_UNION} params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= ${MR});
diff --git a/src/qs8-gemm/c4-neondot.c.in b/src/qs8-gemm/c4-neondot.c.in
index 9528aa2..1100030 100644
--- a/src/qs8-gemm/c4-neondot.c.in
+++ b/src/qs8-gemm/c4-neondot.c.in
@@ -31,7 +31,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union ${PARAMS_UNION} params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union ${PARAMS_UNION} params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= ${MR});
diff --git a/src/qs8-gemm/c8-neon-mull.c.in b/src/qs8-gemm/c8-neon-mull.c.in
index 71980dc..2ea5cef 100644
--- a/src/qs8-gemm/c8-neon-mull.c.in
+++ b/src/qs8-gemm/c8-neon-mull.c.in
@@ -32,7 +32,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union ${PARAMS_UNION} params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union ${PARAMS_UNION} params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= ${MR});
diff --git a/src/qs8-gemm/gen/1x16-minmax-fp32-neon-mlal-lane.c b/src/qs8-gemm/gen/1x16-minmax-fp32-neon-mlal-lane.c
index a0e3401..ca7e2f4 100644
--- a/src/qs8-gemm/gen/1x16-minmax-fp32-neon-mlal-lane.c
+++ b/src/qs8-gemm/gen/1x16-minmax-fp32-neon-mlal-lane.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x16-minmax-fp32-neonv8-mlal-lane.c b/src/qs8-gemm/gen/1x16-minmax-fp32-neonv8-mlal-lane.c
index af9aa3c..edc267a 100644
--- a/src/qs8-gemm/gen/1x16-minmax-fp32-neonv8-mlal-lane.c
+++ b/src/qs8-gemm/gen/1x16-minmax-fp32-neonv8-mlal-lane.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x16-minmax-rndnu-neon-mlal-lane-prfm.c b/src/qs8-gemm/gen/1x16-minmax-rndnu-neon-mlal-lane-prfm.c
index 4d28ea5..3944c1c 100644
--- a/src/qs8-gemm/gen/1x16-minmax-rndnu-neon-mlal-lane-prfm.c
+++ b/src/qs8-gemm/gen/1x16-minmax-rndnu-neon-mlal-lane-prfm.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x16-minmax-rndnu-neon-mlal-lane.c b/src/qs8-gemm/gen/1x16-minmax-rndnu-neon-mlal-lane.c
index f3c0926..e878231 100644
--- a/src/qs8-gemm/gen/1x16-minmax-rndnu-neon-mlal-lane.c
+++ b/src/qs8-gemm/gen/1x16-minmax-rndnu-neon-mlal-lane.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x16-minmax-rndnu-neon-mull-addw-dup.c b/src/qs8-gemm/gen/1x16-minmax-rndnu-neon-mull-addw-dup.c
index 6fd5690..8c3e1fc 100644
--- a/src/qs8-gemm/gen/1x16-minmax-rndnu-neon-mull-addw-dup.c
+++ b/src/qs8-gemm/gen/1x16-minmax-rndnu-neon-mull-addw-dup.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x16c16-minmax-rndnu-neon-mlal.c b/src/qs8-gemm/gen/1x16c16-minmax-rndnu-neon-mlal.c
index 9f84a86..c33c549 100644
--- a/src/qs8-gemm/gen/1x16c16-minmax-rndnu-neon-mlal.c
+++ b/src/qs8-gemm/gen/1x16c16-minmax-rndnu-neon-mlal.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x16c2-minmax-rndnu-neon-mlal-dup.c b/src/qs8-gemm/gen/1x16c2-minmax-rndnu-neon-mlal-dup.c
index d9ce924..0e55e82 100644
--- a/src/qs8-gemm/gen/1x16c2-minmax-rndnu-neon-mlal-dup.c
+++ b/src/qs8-gemm/gen/1x16c2-minmax-rndnu-neon-mlal-dup.c
@@ -24,7 +24,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x16c2-minmax-rndnu-neon-mlal-ld1r.c b/src/qs8-gemm/gen/1x16c2-minmax-rndnu-neon-mlal-ld1r.c
index 5985f26..7c6514b 100644
--- a/src/qs8-gemm/gen/1x16c2-minmax-rndnu-neon-mlal-ld1r.c
+++ b/src/qs8-gemm/gen/1x16c2-minmax-rndnu-neon-mlal-ld1r.c
@@ -24,7 +24,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x16c2-minmax-rndnu-neon-mlal-ld2r.c b/src/qs8-gemm/gen/1x16c2-minmax-rndnu-neon-mlal-ld2r.c
index 06718a5..5bc1799 100644
--- a/src/qs8-gemm/gen/1x16c2-minmax-rndnu-neon-mlal-ld2r.c
+++ b/src/qs8-gemm/gen/1x16c2-minmax-rndnu-neon-mlal-ld2r.c
@@ -24,7 +24,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x16c2-minmax-rndnu-neon-mlal-ld4r.c b/src/qs8-gemm/gen/1x16c2-minmax-rndnu-neon-mlal-ld4r.c
index c1821dc..043b990 100644
--- a/src/qs8-gemm/gen/1x16c2-minmax-rndnu-neon-mlal-ld4r.c
+++ b/src/qs8-gemm/gen/1x16c2-minmax-rndnu-neon-mlal-ld4r.c
@@ -24,7 +24,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x16c2-minmax-rndnu-neon-mull-dup.c b/src/qs8-gemm/gen/1x16c2-minmax-rndnu-neon-mull-dup.c
index b5355b4..3446986 100644
--- a/src/qs8-gemm/gen/1x16c2-minmax-rndnu-neon-mull-dup.c
+++ b/src/qs8-gemm/gen/1x16c2-minmax-rndnu-neon-mull-dup.c
@@ -24,7 +24,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x16c2-minmax-rndnu-neon-mull-ld1r.c b/src/qs8-gemm/gen/1x16c2-minmax-rndnu-neon-mull-ld1r.c
index 31f7263..8556866 100644
--- a/src/qs8-gemm/gen/1x16c2-minmax-rndnu-neon-mull-ld1r.c
+++ b/src/qs8-gemm/gen/1x16c2-minmax-rndnu-neon-mull-ld1r.c
@@ -24,7 +24,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x16c2-minmax-rndnu-neon-mull-ld2r.c b/src/qs8-gemm/gen/1x16c2-minmax-rndnu-neon-mull-ld2r.c
index bbcb10b..2b9fbeb 100644
--- a/src/qs8-gemm/gen/1x16c2-minmax-rndnu-neon-mull-ld2r.c
+++ b/src/qs8-gemm/gen/1x16c2-minmax-rndnu-neon-mull-ld2r.c
@@ -24,7 +24,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x16c2-minmax-rndnu-neon-mull-ld4r.c b/src/qs8-gemm/gen/1x16c2-minmax-rndnu-neon-mull-ld4r.c
index 4ae0cdf..c4c76c0 100644
--- a/src/qs8-gemm/gen/1x16c2-minmax-rndnu-neon-mull-ld4r.c
+++ b/src/qs8-gemm/gen/1x16c2-minmax-rndnu-neon-mull-ld4r.c
@@ -24,7 +24,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x16c2s4-minmax-rndnu-neon-mlal.c b/src/qs8-gemm/gen/1x16c2s4-minmax-rndnu-neon-mlal.c
index 04ed547..89e41e2 100644
--- a/src/qs8-gemm/gen/1x16c2s4-minmax-rndnu-neon-mlal.c
+++ b/src/qs8-gemm/gen/1x16c2s4-minmax-rndnu-neon-mlal.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x16c2s4-minmax-rndnu-neon-mull.c b/src/qs8-gemm/gen/1x16c2s4-minmax-rndnu-neon-mull.c
index 1c271cc..706750e 100644
--- a/src/qs8-gemm/gen/1x16c2s4-minmax-rndnu-neon-mull.c
+++ b/src/qs8-gemm/gen/1x16c2s4-minmax-rndnu-neon-mull.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x16c4-minmax-rndnu-neon-mlal-dup.c b/src/qs8-gemm/gen/1x16c4-minmax-rndnu-neon-mlal-dup.c
index 7d48c62..69fc86a 100644
--- a/src/qs8-gemm/gen/1x16c4-minmax-rndnu-neon-mlal-dup.c
+++ b/src/qs8-gemm/gen/1x16c4-minmax-rndnu-neon-mlal-dup.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x16c4-minmax-rndnu-neon-mlal-ld1r.c b/src/qs8-gemm/gen/1x16c4-minmax-rndnu-neon-mlal-ld1r.c
index cc487e4..92fcc62 100644
--- a/src/qs8-gemm/gen/1x16c4-minmax-rndnu-neon-mlal-ld1r.c
+++ b/src/qs8-gemm/gen/1x16c4-minmax-rndnu-neon-mlal-ld1r.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x16c4-minmax-rndnu-neon-mlal-ld2r.c b/src/qs8-gemm/gen/1x16c4-minmax-rndnu-neon-mlal-ld2r.c
index f21708c..ad51539 100644
--- a/src/qs8-gemm/gen/1x16c4-minmax-rndnu-neon-mlal-ld2r.c
+++ b/src/qs8-gemm/gen/1x16c4-minmax-rndnu-neon-mlal-ld2r.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x16c4-minmax-rndnu-neon-mull-dup.c b/src/qs8-gemm/gen/1x16c4-minmax-rndnu-neon-mull-dup.c
index 9f6ce18..2a52a2e 100644
--- a/src/qs8-gemm/gen/1x16c4-minmax-rndnu-neon-mull-dup.c
+++ b/src/qs8-gemm/gen/1x16c4-minmax-rndnu-neon-mull-dup.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x16c4-minmax-rndnu-neon-mull-ld1r.c b/src/qs8-gemm/gen/1x16c4-minmax-rndnu-neon-mull-ld1r.c
index 644fe8c..cde1b13 100644
--- a/src/qs8-gemm/gen/1x16c4-minmax-rndnu-neon-mull-ld1r.c
+++ b/src/qs8-gemm/gen/1x16c4-minmax-rndnu-neon-mull-ld1r.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x16c4-minmax-rndnu-neon-mull-ld2r.c b/src/qs8-gemm/gen/1x16c4-minmax-rndnu-neon-mull-ld2r.c
index c283678..4534834 100644
--- a/src/qs8-gemm/gen/1x16c4-minmax-rndnu-neon-mull-ld2r.c
+++ b/src/qs8-gemm/gen/1x16c4-minmax-rndnu-neon-mull-ld2r.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x16c4-minmax-rndnu-neondot.c b/src/qs8-gemm/gen/1x16c4-minmax-rndnu-neondot.c
index 9f093a6..8c7ca9a 100644
--- a/src/qs8-gemm/gen/1x16c4-minmax-rndnu-neondot.c
+++ b/src/qs8-gemm/gen/1x16c4-minmax-rndnu-neondot.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x16c4s2-minmax-rndnu-neon-mlal.c b/src/qs8-gemm/gen/1x16c4s2-minmax-rndnu-neon-mlal.c
index 16649e7..71b7cad 100644
--- a/src/qs8-gemm/gen/1x16c4s2-minmax-rndnu-neon-mlal.c
+++ b/src/qs8-gemm/gen/1x16c4s2-minmax-rndnu-neon-mlal.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x16c4s2-minmax-rndnu-neon-mull.c b/src/qs8-gemm/gen/1x16c4s2-minmax-rndnu-neon-mull.c
index 26ae662..16e9396 100644
--- a/src/qs8-gemm/gen/1x16c4s2-minmax-rndnu-neon-mull.c
+++ b/src/qs8-gemm/gen/1x16c4s2-minmax-rndnu-neon-mull.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x16c8-minmax-fp32-avx512skx.c b/src/qs8-gemm/gen/1x16c8-minmax-fp32-avx512skx.c
index da92619..031ba8a 100644
--- a/src/qs8-gemm/gen/1x16c8-minmax-fp32-avx512skx.c
+++ b/src/qs8-gemm/gen/1x16c8-minmax-fp32-avx512skx.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x16c8-minmax-rndnu-neon-mlal.c b/src/qs8-gemm/gen/1x16c8-minmax-rndnu-neon-mlal.c
index be9469b..9f03a5b 100644
--- a/src/qs8-gemm/gen/1x16c8-minmax-rndnu-neon-mlal.c
+++ b/src/qs8-gemm/gen/1x16c8-minmax-rndnu-neon-mlal.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x16c8-minmax-rndnu-neon-mull.c b/src/qs8-gemm/gen/1x16c8-minmax-rndnu-neon-mull.c
index 40b5a23..a35ac2d 100644
--- a/src/qs8-gemm/gen/1x16c8-minmax-rndnu-neon-mull.c
+++ b/src/qs8-gemm/gen/1x16c8-minmax-rndnu-neon-mull.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x4c2-minmax-fp32-avx-ld128.c b/src/qs8-gemm/gen/1x4c2-minmax-fp32-avx-ld128.c
index 258ac2c..ab7a897 100644
--- a/src/qs8-gemm/gen/1x4c2-minmax-fp32-avx-ld128.c
+++ b/src/qs8-gemm/gen/1x4c2-minmax-fp32-avx-ld128.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x4c2-minmax-fp32-avx-ld64.c b/src/qs8-gemm/gen/1x4c2-minmax-fp32-avx-ld64.c
index fedb5e7..7c2d79e 100644
--- a/src/qs8-gemm/gen/1x4c2-minmax-fp32-avx-ld64.c
+++ b/src/qs8-gemm/gen/1x4c2-minmax-fp32-avx-ld64.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x4c2-minmax-fp32-sse2-ld128.c b/src/qs8-gemm/gen/1x4c2-minmax-fp32-sse2-ld128.c
index 57db377..212164b 100644
--- a/src/qs8-gemm/gen/1x4c2-minmax-fp32-sse2-ld128.c
+++ b/src/qs8-gemm/gen/1x4c2-minmax-fp32-sse2-ld128.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x4c2-minmax-fp32-sse2-ld64.c b/src/qs8-gemm/gen/1x4c2-minmax-fp32-sse2-ld64.c
index 9d45a71..65466d4 100644
--- a/src/qs8-gemm/gen/1x4c2-minmax-fp32-sse2-ld64.c
+++ b/src/qs8-gemm/gen/1x4c2-minmax-fp32-sse2-ld64.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x4c2-minmax-fp32-sse41-ld128.c b/src/qs8-gemm/gen/1x4c2-minmax-fp32-sse41-ld128.c
index f4e42a5..5abc28e 100644
--- a/src/qs8-gemm/gen/1x4c2-minmax-fp32-sse41-ld128.c
+++ b/src/qs8-gemm/gen/1x4c2-minmax-fp32-sse41-ld128.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x4c2-minmax-fp32-sse41-ld64.c b/src/qs8-gemm/gen/1x4c2-minmax-fp32-sse41-ld64.c
index 8fca379..fef6012 100644
--- a/src/qs8-gemm/gen/1x4c2-minmax-fp32-sse41-ld64.c
+++ b/src/qs8-gemm/gen/1x4c2-minmax-fp32-sse41-ld64.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x4c2-minmax-fp32-wasmsimd-dot16x2-ld128.c b/src/qs8-gemm/gen/1x4c2-minmax-fp32-wasmsimd-dot16x2-ld128.c
index 25fe2cb..45fd83f 100644
--- a/src/qs8-gemm/gen/1x4c2-minmax-fp32-wasmsimd-dot16x2-ld128.c
+++ b/src/qs8-gemm/gen/1x4c2-minmax-fp32-wasmsimd-dot16x2-ld128.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x4c2-minmax-fp32-wasmsimd-dot16x2-ld64.c b/src/qs8-gemm/gen/1x4c2-minmax-fp32-wasmsimd-dot16x2-ld64.c
index 2dac3a6..75a9695 100644
--- a/src/qs8-gemm/gen/1x4c2-minmax-fp32-wasmsimd-dot16x2-ld64.c
+++ b/src/qs8-gemm/gen/1x4c2-minmax-fp32-wasmsimd-dot16x2-ld64.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x4c2-minmax-fp32-xop-ld128.c b/src/qs8-gemm/gen/1x4c2-minmax-fp32-xop-ld128.c
index 2005195..4c76acc 100644
--- a/src/qs8-gemm/gen/1x4c2-minmax-fp32-xop-ld128.c
+++ b/src/qs8-gemm/gen/1x4c2-minmax-fp32-xop-ld128.c
@@ -31,7 +31,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x4c2-minmax-fp32-xop-ld64.c b/src/qs8-gemm/gen/1x4c2-minmax-fp32-xop-ld64.c
index f6c6b1b..c07a126 100644
--- a/src/qs8-gemm/gen/1x4c2-minmax-fp32-xop-ld64.c
+++ b/src/qs8-gemm/gen/1x4c2-minmax-fp32-xop-ld64.c
@@ -31,7 +31,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x4c2-xw-minmax-fp32-avx.c b/src/qs8-gemm/gen/1x4c2-xw-minmax-fp32-avx.c
index b3ef107..5725c0e 100644
--- a/src/qs8-gemm/gen/1x4c2-xw-minmax-fp32-avx.c
+++ b/src/qs8-gemm/gen/1x4c2-xw-minmax-fp32-avx.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x4c2-xw-minmax-fp32-sse2.c b/src/qs8-gemm/gen/1x4c2-xw-minmax-fp32-sse2.c
index d453dcf..5836d2e 100644
--- a/src/qs8-gemm/gen/1x4c2-xw-minmax-fp32-sse2.c
+++ b/src/qs8-gemm/gen/1x4c2-xw-minmax-fp32-sse2.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x4c2-xw-minmax-fp32-sse41.c b/src/qs8-gemm/gen/1x4c2-xw-minmax-fp32-sse41.c
index b47ab46..fa1ee54 100644
--- a/src/qs8-gemm/gen/1x4c2-xw-minmax-fp32-sse41.c
+++ b/src/qs8-gemm/gen/1x4c2-xw-minmax-fp32-sse41.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x4c2-xw-minmax-fp32-wasmsimd-dot16x2.c b/src/qs8-gemm/gen/1x4c2-xw-minmax-fp32-wasmsimd-dot16x2.c
index 3c910e9..413bc85 100644
--- a/src/qs8-gemm/gen/1x4c2-xw-minmax-fp32-wasmsimd-dot16x2.c
+++ b/src/qs8-gemm/gen/1x4c2-xw-minmax-fp32-wasmsimd-dot16x2.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x4c2-xw-minmax-fp32-xop.c b/src/qs8-gemm/gen/1x4c2-xw-minmax-fp32-xop.c
index 34bde5b..75c255a 100644
--- a/src/qs8-gemm/gen/1x4c2-xw-minmax-fp32-xop.c
+++ b/src/qs8-gemm/gen/1x4c2-xw-minmax-fp32-xop.c
@@ -31,7 +31,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld128.c b/src/qs8-gemm/gen/1x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld128.c
index f4072e7..61d22f5 100644
--- a/src/qs8-gemm/gen/1x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld128.c
+++ b/src/qs8-gemm/gen/1x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld128.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld64.c b/src/qs8-gemm/gen/1x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld64.c
index ee4071a..24f1de9 100644
--- a/src/qs8-gemm/gen/1x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld64.c
+++ b/src/qs8-gemm/gen/1x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld64.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x4c8-minmax-fp32-avx-ld128.c b/src/qs8-gemm/gen/1x4c8-minmax-fp32-avx-ld128.c
index b9c8c06..27139e7 100644
--- a/src/qs8-gemm/gen/1x4c8-minmax-fp32-avx-ld128.c
+++ b/src/qs8-gemm/gen/1x4c8-minmax-fp32-avx-ld128.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x4c8-minmax-fp32-avx-ld64.c b/src/qs8-gemm/gen/1x4c8-minmax-fp32-avx-ld64.c
index 9bc0538..5b62801 100644
--- a/src/qs8-gemm/gen/1x4c8-minmax-fp32-avx-ld64.c
+++ b/src/qs8-gemm/gen/1x4c8-minmax-fp32-avx-ld64.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x4c8-minmax-fp32-sse2-ld128.c b/src/qs8-gemm/gen/1x4c8-minmax-fp32-sse2-ld128.c
index fcaecea..6d2b750 100644
--- a/src/qs8-gemm/gen/1x4c8-minmax-fp32-sse2-ld128.c
+++ b/src/qs8-gemm/gen/1x4c8-minmax-fp32-sse2-ld128.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x4c8-minmax-fp32-sse2-ld64.c b/src/qs8-gemm/gen/1x4c8-minmax-fp32-sse2-ld64.c
index 27e1f4c..ef520ce 100644
--- a/src/qs8-gemm/gen/1x4c8-minmax-fp32-sse2-ld64.c
+++ b/src/qs8-gemm/gen/1x4c8-minmax-fp32-sse2-ld64.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x4c8-minmax-fp32-sse41-ld128.c b/src/qs8-gemm/gen/1x4c8-minmax-fp32-sse41-ld128.c
index 9b79b0f..13c776e 100644
--- a/src/qs8-gemm/gen/1x4c8-minmax-fp32-sse41-ld128.c
+++ b/src/qs8-gemm/gen/1x4c8-minmax-fp32-sse41-ld128.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x4c8-minmax-fp32-sse41-ld64.c b/src/qs8-gemm/gen/1x4c8-minmax-fp32-sse41-ld64.c
index 42792ba..29532d5 100644
--- a/src/qs8-gemm/gen/1x4c8-minmax-fp32-sse41-ld64.c
+++ b/src/qs8-gemm/gen/1x4c8-minmax-fp32-sse41-ld64.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x4c8-minmax-fp32-ssse3-ld128.c b/src/qs8-gemm/gen/1x4c8-minmax-fp32-ssse3-ld128.c
index 36d523f..c54f8b9 100644
--- a/src/qs8-gemm/gen/1x4c8-minmax-fp32-ssse3-ld128.c
+++ b/src/qs8-gemm/gen/1x4c8-minmax-fp32-ssse3-ld128.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x4c8-minmax-fp32-ssse3-ld64.c b/src/qs8-gemm/gen/1x4c8-minmax-fp32-ssse3-ld64.c
index 6946481..3600b5b 100644
--- a/src/qs8-gemm/gen/1x4c8-minmax-fp32-ssse3-ld64.c
+++ b/src/qs8-gemm/gen/1x4c8-minmax-fp32-ssse3-ld64.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x4c8-minmax-fp32-wasmsimd-dot16x2-ld128.c b/src/qs8-gemm/gen/1x4c8-minmax-fp32-wasmsimd-dot16x2-ld128.c
index 15f7c96..b395276 100644
--- a/src/qs8-gemm/gen/1x4c8-minmax-fp32-wasmsimd-dot16x2-ld128.c
+++ b/src/qs8-gemm/gen/1x4c8-minmax-fp32-wasmsimd-dot16x2-ld128.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x4c8-minmax-fp32-wasmsimd-dot16x2-ld64.c b/src/qs8-gemm/gen/1x4c8-minmax-fp32-wasmsimd-dot16x2-ld64.c
index ccf9d17..33109d0 100644
--- a/src/qs8-gemm/gen/1x4c8-minmax-fp32-wasmsimd-dot16x2-ld64.c
+++ b/src/qs8-gemm/gen/1x4c8-minmax-fp32-wasmsimd-dot16x2-ld64.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x4c8-minmax-fp32-wasmsimd-mul16-ld128.c b/src/qs8-gemm/gen/1x4c8-minmax-fp32-wasmsimd-mul16-ld128.c
index fe5af86..67098a8 100644
--- a/src/qs8-gemm/gen/1x4c8-minmax-fp32-wasmsimd-mul16-ld128.c
+++ b/src/qs8-gemm/gen/1x4c8-minmax-fp32-wasmsimd-mul16-ld128.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x4c8-minmax-fp32-wasmsimd-mul16-ld64.c b/src/qs8-gemm/gen/1x4c8-minmax-fp32-wasmsimd-mul16-ld64.c
index b97a8cd..d8f4d4a 100644
--- a/src/qs8-gemm/gen/1x4c8-minmax-fp32-wasmsimd-mul16-ld64.c
+++ b/src/qs8-gemm/gen/1x4c8-minmax-fp32-wasmsimd-mul16-ld64.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x4c8-minmax-fp32-xop-ld128.c b/src/qs8-gemm/gen/1x4c8-minmax-fp32-xop-ld128.c
index 47bdc69..5e8add0 100644
--- a/src/qs8-gemm/gen/1x4c8-minmax-fp32-xop-ld128.c
+++ b/src/qs8-gemm/gen/1x4c8-minmax-fp32-xop-ld128.c
@@ -30,7 +30,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x4c8-minmax-fp32-xop-ld64.c b/src/qs8-gemm/gen/1x4c8-minmax-fp32-xop-ld64.c
index 0efc8dd..d4a1a75 100644
--- a/src/qs8-gemm/gen/1x4c8-minmax-fp32-xop-ld64.c
+++ b/src/qs8-gemm/gen/1x4c8-minmax-fp32-xop-ld64.c
@@ -30,7 +30,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x4c8-xw-minmax-fp32-avx.c b/src/qs8-gemm/gen/1x4c8-xw-minmax-fp32-avx.c
index 4d560d2..5bf0c31 100644
--- a/src/qs8-gemm/gen/1x4c8-xw-minmax-fp32-avx.c
+++ b/src/qs8-gemm/gen/1x4c8-xw-minmax-fp32-avx.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x4c8-xw-minmax-fp32-sse2.c b/src/qs8-gemm/gen/1x4c8-xw-minmax-fp32-sse2.c
index ef1d1a9..e74167c 100644
--- a/src/qs8-gemm/gen/1x4c8-xw-minmax-fp32-sse2.c
+++ b/src/qs8-gemm/gen/1x4c8-xw-minmax-fp32-sse2.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x4c8-xw-minmax-fp32-sse41.c b/src/qs8-gemm/gen/1x4c8-xw-minmax-fp32-sse41.c
index 010e914..2acb819 100644
--- a/src/qs8-gemm/gen/1x4c8-xw-minmax-fp32-sse41.c
+++ b/src/qs8-gemm/gen/1x4c8-xw-minmax-fp32-sse41.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x4c8-xw-minmax-fp32-ssse3.c b/src/qs8-gemm/gen/1x4c8-xw-minmax-fp32-ssse3.c
index 8bc2161..b2ffbda 100644
--- a/src/qs8-gemm/gen/1x4c8-xw-minmax-fp32-ssse3.c
+++ b/src/qs8-gemm/gen/1x4c8-xw-minmax-fp32-ssse3.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x4c8-xw-minmax-fp32-wasmsimd-dot16x2.c b/src/qs8-gemm/gen/1x4c8-xw-minmax-fp32-wasmsimd-dot16x2.c
index ea27ecc..a18d305 100644
--- a/src/qs8-gemm/gen/1x4c8-xw-minmax-fp32-wasmsimd-dot16x2.c
+++ b/src/qs8-gemm/gen/1x4c8-xw-minmax-fp32-wasmsimd-dot16x2.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x4c8-xw-minmax-fp32-wasmsimd-mul16.c b/src/qs8-gemm/gen/1x4c8-xw-minmax-fp32-wasmsimd-mul16.c
index f963204..96e7fcf 100644
--- a/src/qs8-gemm/gen/1x4c8-xw-minmax-fp32-wasmsimd-mul16.c
+++ b/src/qs8-gemm/gen/1x4c8-xw-minmax-fp32-wasmsimd-mul16.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x4c8-xw-minmax-fp32-xop.c b/src/qs8-gemm/gen/1x4c8-xw-minmax-fp32-xop.c
index 4ce3e39..170cbc8 100644
--- a/src/qs8-gemm/gen/1x4c8-xw-minmax-fp32-xop.c
+++ b/src/qs8-gemm/gen/1x4c8-xw-minmax-fp32-xop.c
@@ -30,7 +30,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x8-minmax-rndnu-neon-mlal-lane-prfm.c b/src/qs8-gemm/gen/1x8-minmax-rndnu-neon-mlal-lane-prfm.c
index 3eb0761..767c7ad 100644
--- a/src/qs8-gemm/gen/1x8-minmax-rndnu-neon-mlal-lane-prfm.c
+++ b/src/qs8-gemm/gen/1x8-minmax-rndnu-neon-mlal-lane-prfm.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x8-minmax-rndnu-neon-mlal-lane.c b/src/qs8-gemm/gen/1x8-minmax-rndnu-neon-mlal-lane.c
index 8c847d8..9592bfc 100644
--- a/src/qs8-gemm/gen/1x8-minmax-rndnu-neon-mlal-lane.c
+++ b/src/qs8-gemm/gen/1x8-minmax-rndnu-neon-mlal-lane.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x8-minmax-rndnu-neon-mull-addw-dup.c b/src/qs8-gemm/gen/1x8-minmax-rndnu-neon-mull-addw-dup.c
index a402036..6e045c0 100644
--- a/src/qs8-gemm/gen/1x8-minmax-rndnu-neon-mull-addw-dup.c
+++ b/src/qs8-gemm/gen/1x8-minmax-rndnu-neon-mull-addw-dup.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x8c16-minmax-rndnu-neon-mlal.c b/src/qs8-gemm/gen/1x8c16-minmax-rndnu-neon-mlal.c
index 9e329bb..a455c9c 100644
--- a/src/qs8-gemm/gen/1x8c16-minmax-rndnu-neon-mlal.c
+++ b/src/qs8-gemm/gen/1x8c16-minmax-rndnu-neon-mlal.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x8c2-minmax-fp32-neon-mlal-dup.c b/src/qs8-gemm/gen/1x8c2-minmax-fp32-neon-mlal-dup.c
index 2bc8b1f..b31648f 100644
--- a/src/qs8-gemm/gen/1x8c2-minmax-fp32-neon-mlal-dup.c
+++ b/src/qs8-gemm/gen/1x8c2-minmax-fp32-neon-mlal-dup.c
@@ -24,7 +24,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x8c2-minmax-fp32-neon-mlal-ld1r.c b/src/qs8-gemm/gen/1x8c2-minmax-fp32-neon-mlal-ld1r.c
index 33bba0e..d0547ec 100644
--- a/src/qs8-gemm/gen/1x8c2-minmax-fp32-neon-mlal-ld1r.c
+++ b/src/qs8-gemm/gen/1x8c2-minmax-fp32-neon-mlal-ld1r.c
@@ -24,7 +24,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x8c2-minmax-fp32-neon-mlal-ld2r.c b/src/qs8-gemm/gen/1x8c2-minmax-fp32-neon-mlal-ld2r.c
index 1285ba4..a900317 100644
--- a/src/qs8-gemm/gen/1x8c2-minmax-fp32-neon-mlal-ld2r.c
+++ b/src/qs8-gemm/gen/1x8c2-minmax-fp32-neon-mlal-ld2r.c
@@ -24,7 +24,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x8c2-minmax-fp32-neon-mlal-ld4r.c b/src/qs8-gemm/gen/1x8c2-minmax-fp32-neon-mlal-ld4r.c
index 0b09a8e..de915bf 100644
--- a/src/qs8-gemm/gen/1x8c2-minmax-fp32-neon-mlal-ld4r.c
+++ b/src/qs8-gemm/gen/1x8c2-minmax-fp32-neon-mlal-ld4r.c
@@ -24,7 +24,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x8c2-minmax-fp32-neonv8-mlal-dup.c b/src/qs8-gemm/gen/1x8c2-minmax-fp32-neonv8-mlal-dup.c
index ae8a448..4b2c6f6 100644
--- a/src/qs8-gemm/gen/1x8c2-minmax-fp32-neonv8-mlal-dup.c
+++ b/src/qs8-gemm/gen/1x8c2-minmax-fp32-neonv8-mlal-dup.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x8c2-minmax-fp32-neonv8-mlal-ld1r.c b/src/qs8-gemm/gen/1x8c2-minmax-fp32-neonv8-mlal-ld1r.c
index 6574b29..442afb2 100644
--- a/src/qs8-gemm/gen/1x8c2-minmax-fp32-neonv8-mlal-ld1r.c
+++ b/src/qs8-gemm/gen/1x8c2-minmax-fp32-neonv8-mlal-ld1r.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x8c2-minmax-fp32-neonv8-mlal-ld2r.c b/src/qs8-gemm/gen/1x8c2-minmax-fp32-neonv8-mlal-ld2r.c
index 6504875..ed05ac4 100644
--- a/src/qs8-gemm/gen/1x8c2-minmax-fp32-neonv8-mlal-ld2r.c
+++ b/src/qs8-gemm/gen/1x8c2-minmax-fp32-neonv8-mlal-ld2r.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x8c2-minmax-fp32-neonv8-mlal-ld4r.c b/src/qs8-gemm/gen/1x8c2-minmax-fp32-neonv8-mlal-ld4r.c
index 57a9c71..d935837 100644
--- a/src/qs8-gemm/gen/1x8c2-minmax-fp32-neonv8-mlal-ld4r.c
+++ b/src/qs8-gemm/gen/1x8c2-minmax-fp32-neonv8-mlal-ld4r.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x8c2-minmax-rndnu-neon-mlal-dup.c b/src/qs8-gemm/gen/1x8c2-minmax-rndnu-neon-mlal-dup.c
index f63a313..84559d8 100644
--- a/src/qs8-gemm/gen/1x8c2-minmax-rndnu-neon-mlal-dup.c
+++ b/src/qs8-gemm/gen/1x8c2-minmax-rndnu-neon-mlal-dup.c
@@ -24,7 +24,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x8c2-minmax-rndnu-neon-mlal-ld1r.c b/src/qs8-gemm/gen/1x8c2-minmax-rndnu-neon-mlal-ld1r.c
index 700a9ae..532f1b7 100644
--- a/src/qs8-gemm/gen/1x8c2-minmax-rndnu-neon-mlal-ld1r.c
+++ b/src/qs8-gemm/gen/1x8c2-minmax-rndnu-neon-mlal-ld1r.c
@@ -24,7 +24,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x8c2-minmax-rndnu-neon-mlal-ld2r.c b/src/qs8-gemm/gen/1x8c2-minmax-rndnu-neon-mlal-ld2r.c
index b5ec13b..95adb13 100644
--- a/src/qs8-gemm/gen/1x8c2-minmax-rndnu-neon-mlal-ld2r.c
+++ b/src/qs8-gemm/gen/1x8c2-minmax-rndnu-neon-mlal-ld2r.c
@@ -24,7 +24,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x8c2-minmax-rndnu-neon-mlal-ld4r.c b/src/qs8-gemm/gen/1x8c2-minmax-rndnu-neon-mlal-ld4r.c
index 4393700..241ea8a 100644
--- a/src/qs8-gemm/gen/1x8c2-minmax-rndnu-neon-mlal-ld4r.c
+++ b/src/qs8-gemm/gen/1x8c2-minmax-rndnu-neon-mlal-ld4r.c
@@ -24,7 +24,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x8c2-minmax-rndnu-neon-mull-dup.c b/src/qs8-gemm/gen/1x8c2-minmax-rndnu-neon-mull-dup.c
index 801ac95..ccbc2d8 100644
--- a/src/qs8-gemm/gen/1x8c2-minmax-rndnu-neon-mull-dup.c
+++ b/src/qs8-gemm/gen/1x8c2-minmax-rndnu-neon-mull-dup.c
@@ -24,7 +24,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x8c2-minmax-rndnu-neon-mull-ld1r.c b/src/qs8-gemm/gen/1x8c2-minmax-rndnu-neon-mull-ld1r.c
index d089f28..2ee5aac 100644
--- a/src/qs8-gemm/gen/1x8c2-minmax-rndnu-neon-mull-ld1r.c
+++ b/src/qs8-gemm/gen/1x8c2-minmax-rndnu-neon-mull-ld1r.c
@@ -24,7 +24,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x8c2-minmax-rndnu-neon-mull-ld2r.c b/src/qs8-gemm/gen/1x8c2-minmax-rndnu-neon-mull-ld2r.c
index 2fdcbfb..f5604ff 100644
--- a/src/qs8-gemm/gen/1x8c2-minmax-rndnu-neon-mull-ld2r.c
+++ b/src/qs8-gemm/gen/1x8c2-minmax-rndnu-neon-mull-ld2r.c
@@ -24,7 +24,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x8c2-minmax-rndnu-neon-mull-ld4r.c b/src/qs8-gemm/gen/1x8c2-minmax-rndnu-neon-mull-ld4r.c
index d4bed68..b0f073d 100644
--- a/src/qs8-gemm/gen/1x8c2-minmax-rndnu-neon-mull-ld4r.c
+++ b/src/qs8-gemm/gen/1x8c2-minmax-rndnu-neon-mull-ld4r.c
@@ -24,7 +24,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x8c2s4-minmax-fp32-neon-mlal.c b/src/qs8-gemm/gen/1x8c2s4-minmax-fp32-neon-mlal.c
index 99e550d..39338fe 100644
--- a/src/qs8-gemm/gen/1x8c2s4-minmax-fp32-neon-mlal.c
+++ b/src/qs8-gemm/gen/1x8c2s4-minmax-fp32-neon-mlal.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x8c2s4-minmax-fp32-neonv8-mlal.c b/src/qs8-gemm/gen/1x8c2s4-minmax-fp32-neonv8-mlal.c
index b8448e3..a62aff4 100644
--- a/src/qs8-gemm/gen/1x8c2s4-minmax-fp32-neonv8-mlal.c
+++ b/src/qs8-gemm/gen/1x8c2s4-minmax-fp32-neonv8-mlal.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x8c2s4-minmax-rndnu-neon-mlal.c b/src/qs8-gemm/gen/1x8c2s4-minmax-rndnu-neon-mlal.c
index 6a30ed2..8380bb0 100644
--- a/src/qs8-gemm/gen/1x8c2s4-minmax-rndnu-neon-mlal.c
+++ b/src/qs8-gemm/gen/1x8c2s4-minmax-rndnu-neon-mlal.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x8c2s4-minmax-rndnu-neon-mull.c b/src/qs8-gemm/gen/1x8c2s4-minmax-rndnu-neon-mull.c
index 724a086..07bcbe4 100644
--- a/src/qs8-gemm/gen/1x8c2s4-minmax-rndnu-neon-mull.c
+++ b/src/qs8-gemm/gen/1x8c2s4-minmax-rndnu-neon-mull.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x8c4-minmax-fp32-neon-mlal-dup.c b/src/qs8-gemm/gen/1x8c4-minmax-fp32-neon-mlal-dup.c
index ce42536..ad1fa96 100644
--- a/src/qs8-gemm/gen/1x8c4-minmax-fp32-neon-mlal-dup.c
+++ b/src/qs8-gemm/gen/1x8c4-minmax-fp32-neon-mlal-dup.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x8c4-minmax-fp32-neon-mlal-ld1r.c b/src/qs8-gemm/gen/1x8c4-minmax-fp32-neon-mlal-ld1r.c
index c356ce7..b992384 100644
--- a/src/qs8-gemm/gen/1x8c4-minmax-fp32-neon-mlal-ld1r.c
+++ b/src/qs8-gemm/gen/1x8c4-minmax-fp32-neon-mlal-ld1r.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x8c4-minmax-fp32-neon-mlal-ld2r.c b/src/qs8-gemm/gen/1x8c4-minmax-fp32-neon-mlal-ld2r.c
index a7b0578..184fc02 100644
--- a/src/qs8-gemm/gen/1x8c4-minmax-fp32-neon-mlal-ld2r.c
+++ b/src/qs8-gemm/gen/1x8c4-minmax-fp32-neon-mlal-ld2r.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x8c4-minmax-fp32-neondot.c b/src/qs8-gemm/gen/1x8c4-minmax-fp32-neondot.c
index 245e4ea..1ebad6c 100644
--- a/src/qs8-gemm/gen/1x8c4-minmax-fp32-neondot.c
+++ b/src/qs8-gemm/gen/1x8c4-minmax-fp32-neondot.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x8c4-minmax-fp32-neonv8-mlal-dup.c b/src/qs8-gemm/gen/1x8c4-minmax-fp32-neonv8-mlal-dup.c
index 8f3fb95..0005c8c 100644
--- a/src/qs8-gemm/gen/1x8c4-minmax-fp32-neonv8-mlal-dup.c
+++ b/src/qs8-gemm/gen/1x8c4-minmax-fp32-neonv8-mlal-dup.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x8c4-minmax-fp32-neonv8-mlal-ld1r.c b/src/qs8-gemm/gen/1x8c4-minmax-fp32-neonv8-mlal-ld1r.c
index 24c5685..8096463 100644
--- a/src/qs8-gemm/gen/1x8c4-minmax-fp32-neonv8-mlal-ld1r.c
+++ b/src/qs8-gemm/gen/1x8c4-minmax-fp32-neonv8-mlal-ld1r.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x8c4-minmax-fp32-neonv8-mlal-ld2r.c b/src/qs8-gemm/gen/1x8c4-minmax-fp32-neonv8-mlal-ld2r.c
index ff4a22f..2b71d83 100644
--- a/src/qs8-gemm/gen/1x8c4-minmax-fp32-neonv8-mlal-ld2r.c
+++ b/src/qs8-gemm/gen/1x8c4-minmax-fp32-neonv8-mlal-ld2r.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x8c4-minmax-rndnu-neon-mlal-dup.c b/src/qs8-gemm/gen/1x8c4-minmax-rndnu-neon-mlal-dup.c
index ece8697..33f9ac3 100644
--- a/src/qs8-gemm/gen/1x8c4-minmax-rndnu-neon-mlal-dup.c
+++ b/src/qs8-gemm/gen/1x8c4-minmax-rndnu-neon-mlal-dup.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x8c4-minmax-rndnu-neon-mlal-ld1r.c b/src/qs8-gemm/gen/1x8c4-minmax-rndnu-neon-mlal-ld1r.c
index 310263b..1eaefc6 100644
--- a/src/qs8-gemm/gen/1x8c4-minmax-rndnu-neon-mlal-ld1r.c
+++ b/src/qs8-gemm/gen/1x8c4-minmax-rndnu-neon-mlal-ld1r.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x8c4-minmax-rndnu-neon-mlal-ld2r.c b/src/qs8-gemm/gen/1x8c4-minmax-rndnu-neon-mlal-ld2r.c
index 05cef65..7f9f15c 100644
--- a/src/qs8-gemm/gen/1x8c4-minmax-rndnu-neon-mlal-ld2r.c
+++ b/src/qs8-gemm/gen/1x8c4-minmax-rndnu-neon-mlal-ld2r.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x8c4-minmax-rndnu-neon-mull-dup.c b/src/qs8-gemm/gen/1x8c4-minmax-rndnu-neon-mull-dup.c
index 60c3e8d..0d7617a 100644
--- a/src/qs8-gemm/gen/1x8c4-minmax-rndnu-neon-mull-dup.c
+++ b/src/qs8-gemm/gen/1x8c4-minmax-rndnu-neon-mull-dup.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x8c4-minmax-rndnu-neon-mull-ld1r.c b/src/qs8-gemm/gen/1x8c4-minmax-rndnu-neon-mull-ld1r.c
index c5c9e62..679973f 100644
--- a/src/qs8-gemm/gen/1x8c4-minmax-rndnu-neon-mull-ld1r.c
+++ b/src/qs8-gemm/gen/1x8c4-minmax-rndnu-neon-mull-ld1r.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x8c4-minmax-rndnu-neon-mull-ld2r.c b/src/qs8-gemm/gen/1x8c4-minmax-rndnu-neon-mull-ld2r.c
index 202a47f..0ff83fc 100644
--- a/src/qs8-gemm/gen/1x8c4-minmax-rndnu-neon-mull-ld2r.c
+++ b/src/qs8-gemm/gen/1x8c4-minmax-rndnu-neon-mull-ld2r.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x8c4-minmax-rndnu-neondot.c b/src/qs8-gemm/gen/1x8c4-minmax-rndnu-neondot.c
index 428317c..6a1706d 100644
--- a/src/qs8-gemm/gen/1x8c4-minmax-rndnu-neondot.c
+++ b/src/qs8-gemm/gen/1x8c4-minmax-rndnu-neondot.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x8c4s2-minmax-fp32-neon-mlal.c b/src/qs8-gemm/gen/1x8c4s2-minmax-fp32-neon-mlal.c
index 2fe589c..56eac2d 100644
--- a/src/qs8-gemm/gen/1x8c4s2-minmax-fp32-neon-mlal.c
+++ b/src/qs8-gemm/gen/1x8c4s2-minmax-fp32-neon-mlal.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x8c4s2-minmax-fp32-neonv8-mlal.c b/src/qs8-gemm/gen/1x8c4s2-minmax-fp32-neonv8-mlal.c
index 987f6eb..9c75520 100644
--- a/src/qs8-gemm/gen/1x8c4s2-minmax-fp32-neonv8-mlal.c
+++ b/src/qs8-gemm/gen/1x8c4s2-minmax-fp32-neonv8-mlal.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x8c4s2-minmax-rndnu-neon-mlal.c b/src/qs8-gemm/gen/1x8c4s2-minmax-rndnu-neon-mlal.c
index 8c1a25e..f59f511 100644
--- a/src/qs8-gemm/gen/1x8c4s2-minmax-rndnu-neon-mlal.c
+++ b/src/qs8-gemm/gen/1x8c4s2-minmax-rndnu-neon-mlal.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x8c4s2-minmax-rndnu-neon-mull.c b/src/qs8-gemm/gen/1x8c4s2-minmax-rndnu-neon-mull.c
index 382bcdf..1c98a55 100644
--- a/src/qs8-gemm/gen/1x8c4s2-minmax-rndnu-neon-mull.c
+++ b/src/qs8-gemm/gen/1x8c4s2-minmax-rndnu-neon-mull.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x8c8-minmax-fp32-avx2.c b/src/qs8-gemm/gen/1x8c8-minmax-fp32-avx2.c
index 0936214..ce1350e 100644
--- a/src/qs8-gemm/gen/1x8c8-minmax-fp32-avx2.c
+++ b/src/qs8-gemm/gen/1x8c8-minmax-fp32-avx2.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x8c8-minmax-fp32-neon-mlal.c b/src/qs8-gemm/gen/1x8c8-minmax-fp32-neon-mlal.c
index 7fb4aa1..edf5a42 100644
--- a/src/qs8-gemm/gen/1x8c8-minmax-fp32-neon-mlal.c
+++ b/src/qs8-gemm/gen/1x8c8-minmax-fp32-neon-mlal.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x8c8-minmax-fp32-neonv8-mlal.c b/src/qs8-gemm/gen/1x8c8-minmax-fp32-neonv8-mlal.c
index 82ce353..675796e 100644
--- a/src/qs8-gemm/gen/1x8c8-minmax-fp32-neonv8-mlal.c
+++ b/src/qs8-gemm/gen/1x8c8-minmax-fp32-neonv8-mlal.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x8c8-minmax-rndnu-neon-mlal.c b/src/qs8-gemm/gen/1x8c8-minmax-rndnu-neon-mlal.c
index 5e6ac7b..a4c8f0b 100644
--- a/src/qs8-gemm/gen/1x8c8-minmax-rndnu-neon-mlal.c
+++ b/src/qs8-gemm/gen/1x8c8-minmax-rndnu-neon-mlal.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x8c8-minmax-rndnu-neon-mull.c b/src/qs8-gemm/gen/1x8c8-minmax-rndnu-neon-mull.c
index 32b184a..9cd6eac 100644
--- a/src/qs8-gemm/gen/1x8c8-minmax-rndnu-neon-mull.c
+++ b/src/qs8-gemm/gen/1x8c8-minmax-rndnu-neon-mull.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/1x8c8-xw-minmax-fp32-avx2.c b/src/qs8-gemm/gen/1x8c8-xw-minmax-fp32-avx2.c
index 586b393..11a7348 100644
--- a/src/qs8-gemm/gen/1x8c8-xw-minmax-fp32-avx2.c
+++ b/src/qs8-gemm/gen/1x8c8-xw-minmax-fp32-avx2.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-gemm/gen/2x16-minmax-rndnu-neon-mlal-lane-prfm.c b/src/qs8-gemm/gen/2x16-minmax-rndnu-neon-mlal-lane-prfm.c
index f245817..873d93d 100644
--- a/src/qs8-gemm/gen/2x16-minmax-rndnu-neon-mlal-lane-prfm.c
+++ b/src/qs8-gemm/gen/2x16-minmax-rndnu-neon-mlal-lane-prfm.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x16-minmax-rndnu-neon-mlal-lane.c b/src/qs8-gemm/gen/2x16-minmax-rndnu-neon-mlal-lane.c
index 120c10b..d92059a 100644
--- a/src/qs8-gemm/gen/2x16-minmax-rndnu-neon-mlal-lane.c
+++ b/src/qs8-gemm/gen/2x16-minmax-rndnu-neon-mlal-lane.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x16-minmax-rndnu-neon-mull-addw-dup.c b/src/qs8-gemm/gen/2x16-minmax-rndnu-neon-mull-addw-dup.c
index b0325b2..1808026 100644
--- a/src/qs8-gemm/gen/2x16-minmax-rndnu-neon-mull-addw-dup.c
+++ b/src/qs8-gemm/gen/2x16-minmax-rndnu-neon-mull-addw-dup.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x16c16-minmax-rndnu-neon-mlal.c b/src/qs8-gemm/gen/2x16c16-minmax-rndnu-neon-mlal.c
index 5c3a14f..39a045f 100644
--- a/src/qs8-gemm/gen/2x16c16-minmax-rndnu-neon-mlal.c
+++ b/src/qs8-gemm/gen/2x16c16-minmax-rndnu-neon-mlal.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x16c2-minmax-rndnu-neon-mlal-dup.c b/src/qs8-gemm/gen/2x16c2-minmax-rndnu-neon-mlal-dup.c
index ee21899..6ea47de 100644
--- a/src/qs8-gemm/gen/2x16c2-minmax-rndnu-neon-mlal-dup.c
+++ b/src/qs8-gemm/gen/2x16c2-minmax-rndnu-neon-mlal-dup.c
@@ -24,7 +24,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x16c2-minmax-rndnu-neon-mlal-ld1r.c b/src/qs8-gemm/gen/2x16c2-minmax-rndnu-neon-mlal-ld1r.c
index 90e4f41..bcb364b 100644
--- a/src/qs8-gemm/gen/2x16c2-minmax-rndnu-neon-mlal-ld1r.c
+++ b/src/qs8-gemm/gen/2x16c2-minmax-rndnu-neon-mlal-ld1r.c
@@ -24,7 +24,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x16c2-minmax-rndnu-neon-mlal-ld2r.c b/src/qs8-gemm/gen/2x16c2-minmax-rndnu-neon-mlal-ld2r.c
index cc7c6ee..46ecd70 100644
--- a/src/qs8-gemm/gen/2x16c2-minmax-rndnu-neon-mlal-ld2r.c
+++ b/src/qs8-gemm/gen/2x16c2-minmax-rndnu-neon-mlal-ld2r.c
@@ -24,7 +24,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x16c2-minmax-rndnu-neon-mlal-ld4r.c b/src/qs8-gemm/gen/2x16c2-minmax-rndnu-neon-mlal-ld4r.c
index 6cc73ca..815476a 100644
--- a/src/qs8-gemm/gen/2x16c2-minmax-rndnu-neon-mlal-ld4r.c
+++ b/src/qs8-gemm/gen/2x16c2-minmax-rndnu-neon-mlal-ld4r.c
@@ -24,7 +24,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x16c2-minmax-rndnu-neon-mull-dup.c b/src/qs8-gemm/gen/2x16c2-minmax-rndnu-neon-mull-dup.c
index 39c99e5..18d499b 100644
--- a/src/qs8-gemm/gen/2x16c2-minmax-rndnu-neon-mull-dup.c
+++ b/src/qs8-gemm/gen/2x16c2-minmax-rndnu-neon-mull-dup.c
@@ -24,7 +24,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x16c2-minmax-rndnu-neon-mull-ld1r.c b/src/qs8-gemm/gen/2x16c2-minmax-rndnu-neon-mull-ld1r.c
index 5806b37..f824a0f 100644
--- a/src/qs8-gemm/gen/2x16c2-minmax-rndnu-neon-mull-ld1r.c
+++ b/src/qs8-gemm/gen/2x16c2-minmax-rndnu-neon-mull-ld1r.c
@@ -24,7 +24,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x16c2-minmax-rndnu-neon-mull-ld2r.c b/src/qs8-gemm/gen/2x16c2-minmax-rndnu-neon-mull-ld2r.c
index bdee9c8..e572b44 100644
--- a/src/qs8-gemm/gen/2x16c2-minmax-rndnu-neon-mull-ld2r.c
+++ b/src/qs8-gemm/gen/2x16c2-minmax-rndnu-neon-mull-ld2r.c
@@ -24,7 +24,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x16c2-minmax-rndnu-neon-mull-ld4r.c b/src/qs8-gemm/gen/2x16c2-minmax-rndnu-neon-mull-ld4r.c
index 5a05e8b..d9317c9 100644
--- a/src/qs8-gemm/gen/2x16c2-minmax-rndnu-neon-mull-ld4r.c
+++ b/src/qs8-gemm/gen/2x16c2-minmax-rndnu-neon-mull-ld4r.c
@@ -24,7 +24,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x16c2s4-minmax-rndnu-neon-mlal.c b/src/qs8-gemm/gen/2x16c2s4-minmax-rndnu-neon-mlal.c
index 7c71f56..d6fcce5 100644
--- a/src/qs8-gemm/gen/2x16c2s4-minmax-rndnu-neon-mlal.c
+++ b/src/qs8-gemm/gen/2x16c2s4-minmax-rndnu-neon-mlal.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x16c2s4-minmax-rndnu-neon-mull.c b/src/qs8-gemm/gen/2x16c2s4-minmax-rndnu-neon-mull.c
index 73e3120..5b841c3 100644
--- a/src/qs8-gemm/gen/2x16c2s4-minmax-rndnu-neon-mull.c
+++ b/src/qs8-gemm/gen/2x16c2s4-minmax-rndnu-neon-mull.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x16c4-minmax-rndnu-neon-mlal-dup.c b/src/qs8-gemm/gen/2x16c4-minmax-rndnu-neon-mlal-dup.c
index f844dec..29e9d80 100644
--- a/src/qs8-gemm/gen/2x16c4-minmax-rndnu-neon-mlal-dup.c
+++ b/src/qs8-gemm/gen/2x16c4-minmax-rndnu-neon-mlal-dup.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x16c4-minmax-rndnu-neon-mlal-ld1r.c b/src/qs8-gemm/gen/2x16c4-minmax-rndnu-neon-mlal-ld1r.c
index 9bacc67..5410db2 100644
--- a/src/qs8-gemm/gen/2x16c4-minmax-rndnu-neon-mlal-ld1r.c
+++ b/src/qs8-gemm/gen/2x16c4-minmax-rndnu-neon-mlal-ld1r.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x16c4-minmax-rndnu-neon-mlal-ld2r.c b/src/qs8-gemm/gen/2x16c4-minmax-rndnu-neon-mlal-ld2r.c
index 7ee068c..a8e4a37 100644
--- a/src/qs8-gemm/gen/2x16c4-minmax-rndnu-neon-mlal-ld2r.c
+++ b/src/qs8-gemm/gen/2x16c4-minmax-rndnu-neon-mlal-ld2r.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x16c4-minmax-rndnu-neon-mull-dup.c b/src/qs8-gemm/gen/2x16c4-minmax-rndnu-neon-mull-dup.c
index 87ec83b..cbdbfea 100644
--- a/src/qs8-gemm/gen/2x16c4-minmax-rndnu-neon-mull-dup.c
+++ b/src/qs8-gemm/gen/2x16c4-minmax-rndnu-neon-mull-dup.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x16c4-minmax-rndnu-neon-mull-ld1r.c b/src/qs8-gemm/gen/2x16c4-minmax-rndnu-neon-mull-ld1r.c
index a279b24..494885e 100644
--- a/src/qs8-gemm/gen/2x16c4-minmax-rndnu-neon-mull-ld1r.c
+++ b/src/qs8-gemm/gen/2x16c4-minmax-rndnu-neon-mull-ld1r.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x16c4-minmax-rndnu-neon-mull-ld2r.c b/src/qs8-gemm/gen/2x16c4-minmax-rndnu-neon-mull-ld2r.c
index ba1d3f9..6d14b1b 100644
--- a/src/qs8-gemm/gen/2x16c4-minmax-rndnu-neon-mull-ld2r.c
+++ b/src/qs8-gemm/gen/2x16c4-minmax-rndnu-neon-mull-ld2r.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x16c4s2-minmax-rndnu-neon-mlal.c b/src/qs8-gemm/gen/2x16c4s2-minmax-rndnu-neon-mlal.c
index f8435e6..4fa8182 100644
--- a/src/qs8-gemm/gen/2x16c4s2-minmax-rndnu-neon-mlal.c
+++ b/src/qs8-gemm/gen/2x16c4s2-minmax-rndnu-neon-mlal.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x16c4s2-minmax-rndnu-neon-mull.c b/src/qs8-gemm/gen/2x16c4s2-minmax-rndnu-neon-mull.c
index ebe6749..1c29818 100644
--- a/src/qs8-gemm/gen/2x16c4s2-minmax-rndnu-neon-mull.c
+++ b/src/qs8-gemm/gen/2x16c4s2-minmax-rndnu-neon-mull.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x16c8-minmax-fp32-avx512skx.c b/src/qs8-gemm/gen/2x16c8-minmax-fp32-avx512skx.c
index 9d1e6b5..7cbb35c 100644
--- a/src/qs8-gemm/gen/2x16c8-minmax-fp32-avx512skx.c
+++ b/src/qs8-gemm/gen/2x16c8-minmax-fp32-avx512skx.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x16c8-minmax-rndnu-neon-mlal.c b/src/qs8-gemm/gen/2x16c8-minmax-rndnu-neon-mlal.c
index 91c5c7a..9039652 100644
--- a/src/qs8-gemm/gen/2x16c8-minmax-rndnu-neon-mlal.c
+++ b/src/qs8-gemm/gen/2x16c8-minmax-rndnu-neon-mlal.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x16c8-minmax-rndnu-neon-mull.c b/src/qs8-gemm/gen/2x16c8-minmax-rndnu-neon-mull.c
index 2346bbc..1c07482 100644
--- a/src/qs8-gemm/gen/2x16c8-minmax-rndnu-neon-mull.c
+++ b/src/qs8-gemm/gen/2x16c8-minmax-rndnu-neon-mull.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x4c2-minmax-fp32-avx-ld128.c b/src/qs8-gemm/gen/2x4c2-minmax-fp32-avx-ld128.c
index 150fcd8..312726e 100644
--- a/src/qs8-gemm/gen/2x4c2-minmax-fp32-avx-ld128.c
+++ b/src/qs8-gemm/gen/2x4c2-minmax-fp32-avx-ld128.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x4c2-minmax-fp32-avx-ld64.c b/src/qs8-gemm/gen/2x4c2-minmax-fp32-avx-ld64.c
index de7b637..0388d4d 100644
--- a/src/qs8-gemm/gen/2x4c2-minmax-fp32-avx-ld64.c
+++ b/src/qs8-gemm/gen/2x4c2-minmax-fp32-avx-ld64.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x4c2-minmax-fp32-sse2-ld128.c b/src/qs8-gemm/gen/2x4c2-minmax-fp32-sse2-ld128.c
index b0811c0..4426fb2 100644
--- a/src/qs8-gemm/gen/2x4c2-minmax-fp32-sse2-ld128.c
+++ b/src/qs8-gemm/gen/2x4c2-minmax-fp32-sse2-ld128.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x4c2-minmax-fp32-sse2-ld64.c b/src/qs8-gemm/gen/2x4c2-minmax-fp32-sse2-ld64.c
index 156121e..1147f7f 100644
--- a/src/qs8-gemm/gen/2x4c2-minmax-fp32-sse2-ld64.c
+++ b/src/qs8-gemm/gen/2x4c2-minmax-fp32-sse2-ld64.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x4c2-minmax-fp32-sse41-ld128.c b/src/qs8-gemm/gen/2x4c2-minmax-fp32-sse41-ld128.c
index a9c658b..64732c7 100644
--- a/src/qs8-gemm/gen/2x4c2-minmax-fp32-sse41-ld128.c
+++ b/src/qs8-gemm/gen/2x4c2-minmax-fp32-sse41-ld128.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x4c2-minmax-fp32-sse41-ld64.c b/src/qs8-gemm/gen/2x4c2-minmax-fp32-sse41-ld64.c
index 46bab3a..38eb097 100644
--- a/src/qs8-gemm/gen/2x4c2-minmax-fp32-sse41-ld64.c
+++ b/src/qs8-gemm/gen/2x4c2-minmax-fp32-sse41-ld64.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x4c2-minmax-fp32-wasmsimd-dot16x2-ld128.c b/src/qs8-gemm/gen/2x4c2-minmax-fp32-wasmsimd-dot16x2-ld128.c
index 9924dbf..b843859 100644
--- a/src/qs8-gemm/gen/2x4c2-minmax-fp32-wasmsimd-dot16x2-ld128.c
+++ b/src/qs8-gemm/gen/2x4c2-minmax-fp32-wasmsimd-dot16x2-ld128.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x4c2-minmax-fp32-wasmsimd-dot16x2-ld64.c b/src/qs8-gemm/gen/2x4c2-minmax-fp32-wasmsimd-dot16x2-ld64.c
index b579033..2d0d46f 100644
--- a/src/qs8-gemm/gen/2x4c2-minmax-fp32-wasmsimd-dot16x2-ld64.c
+++ b/src/qs8-gemm/gen/2x4c2-minmax-fp32-wasmsimd-dot16x2-ld64.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x4c2-minmax-fp32-xop-ld128.c b/src/qs8-gemm/gen/2x4c2-minmax-fp32-xop-ld128.c
index e96e7ed..e010889 100644
--- a/src/qs8-gemm/gen/2x4c2-minmax-fp32-xop-ld128.c
+++ b/src/qs8-gemm/gen/2x4c2-minmax-fp32-xop-ld128.c
@@ -31,7 +31,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x4c2-minmax-fp32-xop-ld64.c b/src/qs8-gemm/gen/2x4c2-minmax-fp32-xop-ld64.c
index 01e41fc..2b8adbf 100644
--- a/src/qs8-gemm/gen/2x4c2-minmax-fp32-xop-ld64.c
+++ b/src/qs8-gemm/gen/2x4c2-minmax-fp32-xop-ld64.c
@@ -31,7 +31,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x4c2-xw-minmax-fp32-avx.c b/src/qs8-gemm/gen/2x4c2-xw-minmax-fp32-avx.c
index 8e82393..c636fec 100644
--- a/src/qs8-gemm/gen/2x4c2-xw-minmax-fp32-avx.c
+++ b/src/qs8-gemm/gen/2x4c2-xw-minmax-fp32-avx.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x4c2-xw-minmax-fp32-sse2.c b/src/qs8-gemm/gen/2x4c2-xw-minmax-fp32-sse2.c
index b0028ae..363ed9d 100644
--- a/src/qs8-gemm/gen/2x4c2-xw-minmax-fp32-sse2.c
+++ b/src/qs8-gemm/gen/2x4c2-xw-minmax-fp32-sse2.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x4c2-xw-minmax-fp32-sse41.c b/src/qs8-gemm/gen/2x4c2-xw-minmax-fp32-sse41.c
index 9ac13a9..6807bf2 100644
--- a/src/qs8-gemm/gen/2x4c2-xw-minmax-fp32-sse41.c
+++ b/src/qs8-gemm/gen/2x4c2-xw-minmax-fp32-sse41.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x4c2-xw-minmax-fp32-wasmsimd-dot16x2.c b/src/qs8-gemm/gen/2x4c2-xw-minmax-fp32-wasmsimd-dot16x2.c
index 53aeea7..98c1ce1 100644
--- a/src/qs8-gemm/gen/2x4c2-xw-minmax-fp32-wasmsimd-dot16x2.c
+++ b/src/qs8-gemm/gen/2x4c2-xw-minmax-fp32-wasmsimd-dot16x2.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x4c2-xw-minmax-fp32-xop.c b/src/qs8-gemm/gen/2x4c2-xw-minmax-fp32-xop.c
index 8125e5b..a1583a6 100644
--- a/src/qs8-gemm/gen/2x4c2-xw-minmax-fp32-xop.c
+++ b/src/qs8-gemm/gen/2x4c2-xw-minmax-fp32-xop.c
@@ -31,7 +31,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld128.c b/src/qs8-gemm/gen/2x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld128.c
index 9ccc1e4..3ffddb3 100644
--- a/src/qs8-gemm/gen/2x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld128.c
+++ b/src/qs8-gemm/gen/2x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld128.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld64.c b/src/qs8-gemm/gen/2x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld64.c
index adc7791..d8847ba 100644
--- a/src/qs8-gemm/gen/2x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld64.c
+++ b/src/qs8-gemm/gen/2x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld64.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x4c8-minmax-fp32-avx-ld128.c b/src/qs8-gemm/gen/2x4c8-minmax-fp32-avx-ld128.c
index dc30df6..b51363b 100644
--- a/src/qs8-gemm/gen/2x4c8-minmax-fp32-avx-ld128.c
+++ b/src/qs8-gemm/gen/2x4c8-minmax-fp32-avx-ld128.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x4c8-minmax-fp32-avx-ld64.c b/src/qs8-gemm/gen/2x4c8-minmax-fp32-avx-ld64.c
index afd1ab0..ad766a4 100644
--- a/src/qs8-gemm/gen/2x4c8-minmax-fp32-avx-ld64.c
+++ b/src/qs8-gemm/gen/2x4c8-minmax-fp32-avx-ld64.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x4c8-minmax-fp32-sse2-ld128.c b/src/qs8-gemm/gen/2x4c8-minmax-fp32-sse2-ld128.c
index 489b590..6b7aa27 100644
--- a/src/qs8-gemm/gen/2x4c8-minmax-fp32-sse2-ld128.c
+++ b/src/qs8-gemm/gen/2x4c8-minmax-fp32-sse2-ld128.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x4c8-minmax-fp32-sse2-ld64.c b/src/qs8-gemm/gen/2x4c8-minmax-fp32-sse2-ld64.c
index e815e99..fcbcf9c 100644
--- a/src/qs8-gemm/gen/2x4c8-minmax-fp32-sse2-ld64.c
+++ b/src/qs8-gemm/gen/2x4c8-minmax-fp32-sse2-ld64.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x4c8-minmax-fp32-sse41-ld128.c b/src/qs8-gemm/gen/2x4c8-minmax-fp32-sse41-ld128.c
index a827bc0..4114117 100644
--- a/src/qs8-gemm/gen/2x4c8-minmax-fp32-sse41-ld128.c
+++ b/src/qs8-gemm/gen/2x4c8-minmax-fp32-sse41-ld128.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x4c8-minmax-fp32-sse41-ld64.c b/src/qs8-gemm/gen/2x4c8-minmax-fp32-sse41-ld64.c
index f3000f3..a3750d1 100644
--- a/src/qs8-gemm/gen/2x4c8-minmax-fp32-sse41-ld64.c
+++ b/src/qs8-gemm/gen/2x4c8-minmax-fp32-sse41-ld64.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x4c8-minmax-fp32-ssse3-ld128.c b/src/qs8-gemm/gen/2x4c8-minmax-fp32-ssse3-ld128.c
index ad63f72..01d68ba 100644
--- a/src/qs8-gemm/gen/2x4c8-minmax-fp32-ssse3-ld128.c
+++ b/src/qs8-gemm/gen/2x4c8-minmax-fp32-ssse3-ld128.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x4c8-minmax-fp32-ssse3-ld64.c b/src/qs8-gemm/gen/2x4c8-minmax-fp32-ssse3-ld64.c
index ec591bf..a370729 100644
--- a/src/qs8-gemm/gen/2x4c8-minmax-fp32-ssse3-ld64.c
+++ b/src/qs8-gemm/gen/2x4c8-minmax-fp32-ssse3-ld64.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x4c8-minmax-fp32-wasmsimd-dot16x2-ld128.c b/src/qs8-gemm/gen/2x4c8-minmax-fp32-wasmsimd-dot16x2-ld128.c
index 0b9a2c2..9009de7 100644
--- a/src/qs8-gemm/gen/2x4c8-minmax-fp32-wasmsimd-dot16x2-ld128.c
+++ b/src/qs8-gemm/gen/2x4c8-minmax-fp32-wasmsimd-dot16x2-ld128.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x4c8-minmax-fp32-wasmsimd-dot16x2-ld64.c b/src/qs8-gemm/gen/2x4c8-minmax-fp32-wasmsimd-dot16x2-ld64.c
index 980cdbc..081036b 100644
--- a/src/qs8-gemm/gen/2x4c8-minmax-fp32-wasmsimd-dot16x2-ld64.c
+++ b/src/qs8-gemm/gen/2x4c8-minmax-fp32-wasmsimd-dot16x2-ld64.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x4c8-minmax-fp32-wasmsimd-mul16-ld128.c b/src/qs8-gemm/gen/2x4c8-minmax-fp32-wasmsimd-mul16-ld128.c
index 337037c..6016719 100644
--- a/src/qs8-gemm/gen/2x4c8-minmax-fp32-wasmsimd-mul16-ld128.c
+++ b/src/qs8-gemm/gen/2x4c8-minmax-fp32-wasmsimd-mul16-ld128.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x4c8-minmax-fp32-wasmsimd-mul16-ld64.c b/src/qs8-gemm/gen/2x4c8-minmax-fp32-wasmsimd-mul16-ld64.c
index 0c18a08..3f87231 100644
--- a/src/qs8-gemm/gen/2x4c8-minmax-fp32-wasmsimd-mul16-ld64.c
+++ b/src/qs8-gemm/gen/2x4c8-minmax-fp32-wasmsimd-mul16-ld64.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x4c8-minmax-fp32-xop-ld128.c b/src/qs8-gemm/gen/2x4c8-minmax-fp32-xop-ld128.c
index 07ac350..b3a1ff1 100644
--- a/src/qs8-gemm/gen/2x4c8-minmax-fp32-xop-ld128.c
+++ b/src/qs8-gemm/gen/2x4c8-minmax-fp32-xop-ld128.c
@@ -30,7 +30,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x4c8-minmax-fp32-xop-ld64.c b/src/qs8-gemm/gen/2x4c8-minmax-fp32-xop-ld64.c
index 5916fdb..2e0c873 100644
--- a/src/qs8-gemm/gen/2x4c8-minmax-fp32-xop-ld64.c
+++ b/src/qs8-gemm/gen/2x4c8-minmax-fp32-xop-ld64.c
@@ -30,7 +30,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x4c8-xw-minmax-fp32-avx.c b/src/qs8-gemm/gen/2x4c8-xw-minmax-fp32-avx.c
index 982ba52..230a69f 100644
--- a/src/qs8-gemm/gen/2x4c8-xw-minmax-fp32-avx.c
+++ b/src/qs8-gemm/gen/2x4c8-xw-minmax-fp32-avx.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x4c8-xw-minmax-fp32-sse2.c b/src/qs8-gemm/gen/2x4c8-xw-minmax-fp32-sse2.c
index 9f81fdd..542ca45 100644
--- a/src/qs8-gemm/gen/2x4c8-xw-minmax-fp32-sse2.c
+++ b/src/qs8-gemm/gen/2x4c8-xw-minmax-fp32-sse2.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x4c8-xw-minmax-fp32-sse41.c b/src/qs8-gemm/gen/2x4c8-xw-minmax-fp32-sse41.c
index 64dbb76..4e320a6 100644
--- a/src/qs8-gemm/gen/2x4c8-xw-minmax-fp32-sse41.c
+++ b/src/qs8-gemm/gen/2x4c8-xw-minmax-fp32-sse41.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x4c8-xw-minmax-fp32-ssse3.c b/src/qs8-gemm/gen/2x4c8-xw-minmax-fp32-ssse3.c
index cd60989..b453938 100644
--- a/src/qs8-gemm/gen/2x4c8-xw-minmax-fp32-ssse3.c
+++ b/src/qs8-gemm/gen/2x4c8-xw-minmax-fp32-ssse3.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x4c8-xw-minmax-fp32-wasmsimd-dot16x2.c b/src/qs8-gemm/gen/2x4c8-xw-minmax-fp32-wasmsimd-dot16x2.c
index ac67218..db1036c 100644
--- a/src/qs8-gemm/gen/2x4c8-xw-minmax-fp32-wasmsimd-dot16x2.c
+++ b/src/qs8-gemm/gen/2x4c8-xw-minmax-fp32-wasmsimd-dot16x2.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x4c8-xw-minmax-fp32-wasmsimd-mul16.c b/src/qs8-gemm/gen/2x4c8-xw-minmax-fp32-wasmsimd-mul16.c
index 2671344..9e6dba0 100644
--- a/src/qs8-gemm/gen/2x4c8-xw-minmax-fp32-wasmsimd-mul16.c
+++ b/src/qs8-gemm/gen/2x4c8-xw-minmax-fp32-wasmsimd-mul16.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x4c8-xw-minmax-fp32-xop.c b/src/qs8-gemm/gen/2x4c8-xw-minmax-fp32-xop.c
index c6dae53..3445471 100644
--- a/src/qs8-gemm/gen/2x4c8-xw-minmax-fp32-xop.c
+++ b/src/qs8-gemm/gen/2x4c8-xw-minmax-fp32-xop.c
@@ -30,7 +30,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x8-minmax-rndnu-neon-mlal-lane-prfm.c b/src/qs8-gemm/gen/2x8-minmax-rndnu-neon-mlal-lane-prfm.c
index 77835a1..40da29f 100644
--- a/src/qs8-gemm/gen/2x8-minmax-rndnu-neon-mlal-lane-prfm.c
+++ b/src/qs8-gemm/gen/2x8-minmax-rndnu-neon-mlal-lane-prfm.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x8-minmax-rndnu-neon-mlal-lane.c b/src/qs8-gemm/gen/2x8-minmax-rndnu-neon-mlal-lane.c
index 51bb8ac..150a9fe 100644
--- a/src/qs8-gemm/gen/2x8-minmax-rndnu-neon-mlal-lane.c
+++ b/src/qs8-gemm/gen/2x8-minmax-rndnu-neon-mlal-lane.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x8-minmax-rndnu-neon-mull-addw-dup.c b/src/qs8-gemm/gen/2x8-minmax-rndnu-neon-mull-addw-dup.c
index be7a4a6..ce54a55 100644
--- a/src/qs8-gemm/gen/2x8-minmax-rndnu-neon-mull-addw-dup.c
+++ b/src/qs8-gemm/gen/2x8-minmax-rndnu-neon-mull-addw-dup.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x8c16-minmax-rndnu-neon-mlal.c b/src/qs8-gemm/gen/2x8c16-minmax-rndnu-neon-mlal.c
index 352ed9b..9135121 100644
--- a/src/qs8-gemm/gen/2x8c16-minmax-rndnu-neon-mlal.c
+++ b/src/qs8-gemm/gen/2x8c16-minmax-rndnu-neon-mlal.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x8c2-minmax-fp32-neon-mlal-dup.c b/src/qs8-gemm/gen/2x8c2-minmax-fp32-neon-mlal-dup.c
index 386d510..f700504 100644
--- a/src/qs8-gemm/gen/2x8c2-minmax-fp32-neon-mlal-dup.c
+++ b/src/qs8-gemm/gen/2x8c2-minmax-fp32-neon-mlal-dup.c
@@ -24,7 +24,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x8c2-minmax-fp32-neon-mlal-ld1r.c b/src/qs8-gemm/gen/2x8c2-minmax-fp32-neon-mlal-ld1r.c
index f30a79d..abe1c20 100644
--- a/src/qs8-gemm/gen/2x8c2-minmax-fp32-neon-mlal-ld1r.c
+++ b/src/qs8-gemm/gen/2x8c2-minmax-fp32-neon-mlal-ld1r.c
@@ -24,7 +24,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x8c2-minmax-fp32-neon-mlal-ld2r.c b/src/qs8-gemm/gen/2x8c2-minmax-fp32-neon-mlal-ld2r.c
index 369b643..a9d1f4b 100644
--- a/src/qs8-gemm/gen/2x8c2-minmax-fp32-neon-mlal-ld2r.c
+++ b/src/qs8-gemm/gen/2x8c2-minmax-fp32-neon-mlal-ld2r.c
@@ -24,7 +24,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x8c2-minmax-fp32-neon-mlal-ld4r.c b/src/qs8-gemm/gen/2x8c2-minmax-fp32-neon-mlal-ld4r.c
index ea1ef96..8db46c8 100644
--- a/src/qs8-gemm/gen/2x8c2-minmax-fp32-neon-mlal-ld4r.c
+++ b/src/qs8-gemm/gen/2x8c2-minmax-fp32-neon-mlal-ld4r.c
@@ -24,7 +24,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x8c2-minmax-fp32-neonv8-mlal-dup.c b/src/qs8-gemm/gen/2x8c2-minmax-fp32-neonv8-mlal-dup.c
index d654de8..58317b4 100644
--- a/src/qs8-gemm/gen/2x8c2-minmax-fp32-neonv8-mlal-dup.c
+++ b/src/qs8-gemm/gen/2x8c2-minmax-fp32-neonv8-mlal-dup.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x8c2-minmax-fp32-neonv8-mlal-ld1r.c b/src/qs8-gemm/gen/2x8c2-minmax-fp32-neonv8-mlal-ld1r.c
index 8383daa..bb51281 100644
--- a/src/qs8-gemm/gen/2x8c2-minmax-fp32-neonv8-mlal-ld1r.c
+++ b/src/qs8-gemm/gen/2x8c2-minmax-fp32-neonv8-mlal-ld1r.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x8c2-minmax-fp32-neonv8-mlal-ld2r.c b/src/qs8-gemm/gen/2x8c2-minmax-fp32-neonv8-mlal-ld2r.c
index 702d794..2f0811a 100644
--- a/src/qs8-gemm/gen/2x8c2-minmax-fp32-neonv8-mlal-ld2r.c
+++ b/src/qs8-gemm/gen/2x8c2-minmax-fp32-neonv8-mlal-ld2r.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x8c2-minmax-fp32-neonv8-mlal-ld4r.c b/src/qs8-gemm/gen/2x8c2-minmax-fp32-neonv8-mlal-ld4r.c
index ae26e6b..995cc6d 100644
--- a/src/qs8-gemm/gen/2x8c2-minmax-fp32-neonv8-mlal-ld4r.c
+++ b/src/qs8-gemm/gen/2x8c2-minmax-fp32-neonv8-mlal-ld4r.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x8c2-minmax-rndnu-neon-mlal-dup.c b/src/qs8-gemm/gen/2x8c2-minmax-rndnu-neon-mlal-dup.c
index ebe877a..796b020 100644
--- a/src/qs8-gemm/gen/2x8c2-minmax-rndnu-neon-mlal-dup.c
+++ b/src/qs8-gemm/gen/2x8c2-minmax-rndnu-neon-mlal-dup.c
@@ -24,7 +24,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x8c2-minmax-rndnu-neon-mlal-ld1r.c b/src/qs8-gemm/gen/2x8c2-minmax-rndnu-neon-mlal-ld1r.c
index 4b81bd4..3c58f8d 100644
--- a/src/qs8-gemm/gen/2x8c2-minmax-rndnu-neon-mlal-ld1r.c
+++ b/src/qs8-gemm/gen/2x8c2-minmax-rndnu-neon-mlal-ld1r.c
@@ -24,7 +24,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x8c2-minmax-rndnu-neon-mlal-ld2r.c b/src/qs8-gemm/gen/2x8c2-minmax-rndnu-neon-mlal-ld2r.c
index 47e967a..7561860 100644
--- a/src/qs8-gemm/gen/2x8c2-minmax-rndnu-neon-mlal-ld2r.c
+++ b/src/qs8-gemm/gen/2x8c2-minmax-rndnu-neon-mlal-ld2r.c
@@ -24,7 +24,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x8c2-minmax-rndnu-neon-mlal-ld4r.c b/src/qs8-gemm/gen/2x8c2-minmax-rndnu-neon-mlal-ld4r.c
index 085515a..21d020b 100644
--- a/src/qs8-gemm/gen/2x8c2-minmax-rndnu-neon-mlal-ld4r.c
+++ b/src/qs8-gemm/gen/2x8c2-minmax-rndnu-neon-mlal-ld4r.c
@@ -24,7 +24,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x8c2-minmax-rndnu-neon-mull-dup.c b/src/qs8-gemm/gen/2x8c2-minmax-rndnu-neon-mull-dup.c
index 3cd79f0..bea299e 100644
--- a/src/qs8-gemm/gen/2x8c2-minmax-rndnu-neon-mull-dup.c
+++ b/src/qs8-gemm/gen/2x8c2-minmax-rndnu-neon-mull-dup.c
@@ -24,7 +24,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x8c2-minmax-rndnu-neon-mull-ld1r.c b/src/qs8-gemm/gen/2x8c2-minmax-rndnu-neon-mull-ld1r.c
index 67c172b..2bd8e2f 100644
--- a/src/qs8-gemm/gen/2x8c2-minmax-rndnu-neon-mull-ld1r.c
+++ b/src/qs8-gemm/gen/2x8c2-minmax-rndnu-neon-mull-ld1r.c
@@ -24,7 +24,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x8c2-minmax-rndnu-neon-mull-ld2r.c b/src/qs8-gemm/gen/2x8c2-minmax-rndnu-neon-mull-ld2r.c
index a245842..1f38259 100644
--- a/src/qs8-gemm/gen/2x8c2-minmax-rndnu-neon-mull-ld2r.c
+++ b/src/qs8-gemm/gen/2x8c2-minmax-rndnu-neon-mull-ld2r.c
@@ -24,7 +24,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x8c2-minmax-rndnu-neon-mull-ld4r.c b/src/qs8-gemm/gen/2x8c2-minmax-rndnu-neon-mull-ld4r.c
index 6c09a35..8ceab41 100644
--- a/src/qs8-gemm/gen/2x8c2-minmax-rndnu-neon-mull-ld4r.c
+++ b/src/qs8-gemm/gen/2x8c2-minmax-rndnu-neon-mull-ld4r.c
@@ -24,7 +24,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x8c2s4-minmax-fp32-neon-mlal.c b/src/qs8-gemm/gen/2x8c2s4-minmax-fp32-neon-mlal.c
index 0b2b83f..fd6c0db 100644
--- a/src/qs8-gemm/gen/2x8c2s4-minmax-fp32-neon-mlal.c
+++ b/src/qs8-gemm/gen/2x8c2s4-minmax-fp32-neon-mlal.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x8c2s4-minmax-fp32-neonv8-mlal.c b/src/qs8-gemm/gen/2x8c2s4-minmax-fp32-neonv8-mlal.c
index 1177bda..8ae14fe 100644
--- a/src/qs8-gemm/gen/2x8c2s4-minmax-fp32-neonv8-mlal.c
+++ b/src/qs8-gemm/gen/2x8c2s4-minmax-fp32-neonv8-mlal.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x8c2s4-minmax-rndnu-neon-mlal.c b/src/qs8-gemm/gen/2x8c2s4-minmax-rndnu-neon-mlal.c
index a4fe4d01..5f4684f 100644
--- a/src/qs8-gemm/gen/2x8c2s4-minmax-rndnu-neon-mlal.c
+++ b/src/qs8-gemm/gen/2x8c2s4-minmax-rndnu-neon-mlal.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x8c2s4-minmax-rndnu-neon-mull.c b/src/qs8-gemm/gen/2x8c2s4-minmax-rndnu-neon-mull.c
index 15a2ace..677df80 100644
--- a/src/qs8-gemm/gen/2x8c2s4-minmax-rndnu-neon-mull.c
+++ b/src/qs8-gemm/gen/2x8c2s4-minmax-rndnu-neon-mull.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x8c4-minmax-fp32-neon-mlal-dup.c b/src/qs8-gemm/gen/2x8c4-minmax-fp32-neon-mlal-dup.c
index 4babf65..9928bbb 100644
--- a/src/qs8-gemm/gen/2x8c4-minmax-fp32-neon-mlal-dup.c
+++ b/src/qs8-gemm/gen/2x8c4-minmax-fp32-neon-mlal-dup.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x8c4-minmax-fp32-neon-mlal-ld1r.c b/src/qs8-gemm/gen/2x8c4-minmax-fp32-neon-mlal-ld1r.c
index 4ebf094..4c0086b 100644
--- a/src/qs8-gemm/gen/2x8c4-minmax-fp32-neon-mlal-ld1r.c
+++ b/src/qs8-gemm/gen/2x8c4-minmax-fp32-neon-mlal-ld1r.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x8c4-minmax-fp32-neon-mlal-ld2r.c b/src/qs8-gemm/gen/2x8c4-minmax-fp32-neon-mlal-ld2r.c
index 6bcfdcf..7fe2531 100644
--- a/src/qs8-gemm/gen/2x8c4-minmax-fp32-neon-mlal-ld2r.c
+++ b/src/qs8-gemm/gen/2x8c4-minmax-fp32-neon-mlal-ld2r.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x8c4-minmax-fp32-neonv8-mlal-dup.c b/src/qs8-gemm/gen/2x8c4-minmax-fp32-neonv8-mlal-dup.c
index 5c79c12..5f45523 100644
--- a/src/qs8-gemm/gen/2x8c4-minmax-fp32-neonv8-mlal-dup.c
+++ b/src/qs8-gemm/gen/2x8c4-minmax-fp32-neonv8-mlal-dup.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x8c4-minmax-fp32-neonv8-mlal-ld1r.c b/src/qs8-gemm/gen/2x8c4-minmax-fp32-neonv8-mlal-ld1r.c
index 7e8665c..e187d00 100644
--- a/src/qs8-gemm/gen/2x8c4-minmax-fp32-neonv8-mlal-ld1r.c
+++ b/src/qs8-gemm/gen/2x8c4-minmax-fp32-neonv8-mlal-ld1r.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x8c4-minmax-fp32-neonv8-mlal-ld2r.c b/src/qs8-gemm/gen/2x8c4-minmax-fp32-neonv8-mlal-ld2r.c
index 763c516..fc915b0 100644
--- a/src/qs8-gemm/gen/2x8c4-minmax-fp32-neonv8-mlal-ld2r.c
+++ b/src/qs8-gemm/gen/2x8c4-minmax-fp32-neonv8-mlal-ld2r.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x8c4-minmax-rndnu-neon-mlal-dup.c b/src/qs8-gemm/gen/2x8c4-minmax-rndnu-neon-mlal-dup.c
index 830319f..dcc53ce 100644
--- a/src/qs8-gemm/gen/2x8c4-minmax-rndnu-neon-mlal-dup.c
+++ b/src/qs8-gemm/gen/2x8c4-minmax-rndnu-neon-mlal-dup.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x8c4-minmax-rndnu-neon-mlal-ld1r.c b/src/qs8-gemm/gen/2x8c4-minmax-rndnu-neon-mlal-ld1r.c
index 72b78f4..d8138c1 100644
--- a/src/qs8-gemm/gen/2x8c4-minmax-rndnu-neon-mlal-ld1r.c
+++ b/src/qs8-gemm/gen/2x8c4-minmax-rndnu-neon-mlal-ld1r.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x8c4-minmax-rndnu-neon-mlal-ld2r.c b/src/qs8-gemm/gen/2x8c4-minmax-rndnu-neon-mlal-ld2r.c
index f9c2d0b..ced5145 100644
--- a/src/qs8-gemm/gen/2x8c4-minmax-rndnu-neon-mlal-ld2r.c
+++ b/src/qs8-gemm/gen/2x8c4-minmax-rndnu-neon-mlal-ld2r.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x8c4-minmax-rndnu-neon-mull-dup.c b/src/qs8-gemm/gen/2x8c4-minmax-rndnu-neon-mull-dup.c
index 593eae7..359c8fb 100644
--- a/src/qs8-gemm/gen/2x8c4-minmax-rndnu-neon-mull-dup.c
+++ b/src/qs8-gemm/gen/2x8c4-minmax-rndnu-neon-mull-dup.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x8c4-minmax-rndnu-neon-mull-ld1r.c b/src/qs8-gemm/gen/2x8c4-minmax-rndnu-neon-mull-ld1r.c
index c878b6a..35215b7 100644
--- a/src/qs8-gemm/gen/2x8c4-minmax-rndnu-neon-mull-ld1r.c
+++ b/src/qs8-gemm/gen/2x8c4-minmax-rndnu-neon-mull-ld1r.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x8c4-minmax-rndnu-neon-mull-ld2r.c b/src/qs8-gemm/gen/2x8c4-minmax-rndnu-neon-mull-ld2r.c
index d38ed6b..5440417 100644
--- a/src/qs8-gemm/gen/2x8c4-minmax-rndnu-neon-mull-ld2r.c
+++ b/src/qs8-gemm/gen/2x8c4-minmax-rndnu-neon-mull-ld2r.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x8c4s2-minmax-fp32-neon-mlal.c b/src/qs8-gemm/gen/2x8c4s2-minmax-fp32-neon-mlal.c
index 6dc4712..a7a0a04 100644
--- a/src/qs8-gemm/gen/2x8c4s2-minmax-fp32-neon-mlal.c
+++ b/src/qs8-gemm/gen/2x8c4s2-minmax-fp32-neon-mlal.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x8c4s2-minmax-fp32-neonv8-mlal.c b/src/qs8-gemm/gen/2x8c4s2-minmax-fp32-neonv8-mlal.c
index 15a7084..b7da090 100644
--- a/src/qs8-gemm/gen/2x8c4s2-minmax-fp32-neonv8-mlal.c
+++ b/src/qs8-gemm/gen/2x8c4s2-minmax-fp32-neonv8-mlal.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x8c4s2-minmax-rndnu-neon-mlal.c b/src/qs8-gemm/gen/2x8c4s2-minmax-rndnu-neon-mlal.c
index 00cdf95..103c779 100644
--- a/src/qs8-gemm/gen/2x8c4s2-minmax-rndnu-neon-mlal.c
+++ b/src/qs8-gemm/gen/2x8c4s2-minmax-rndnu-neon-mlal.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x8c4s2-minmax-rndnu-neon-mull.c b/src/qs8-gemm/gen/2x8c4s2-minmax-rndnu-neon-mull.c
index 6c23339..a127c6f 100644
--- a/src/qs8-gemm/gen/2x8c4s2-minmax-rndnu-neon-mull.c
+++ b/src/qs8-gemm/gen/2x8c4s2-minmax-rndnu-neon-mull.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x8c8-minmax-fp32-avx2.c b/src/qs8-gemm/gen/2x8c8-minmax-fp32-avx2.c
index 7ab09d3..a900b97 100644
--- a/src/qs8-gemm/gen/2x8c8-minmax-fp32-avx2.c
+++ b/src/qs8-gemm/gen/2x8c8-minmax-fp32-avx2.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x8c8-minmax-fp32-neon-mlal.c b/src/qs8-gemm/gen/2x8c8-minmax-fp32-neon-mlal.c
index c00cf91..9db8ed0 100644
--- a/src/qs8-gemm/gen/2x8c8-minmax-fp32-neon-mlal.c
+++ b/src/qs8-gemm/gen/2x8c8-minmax-fp32-neon-mlal.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x8c8-minmax-fp32-neonv8-mlal.c b/src/qs8-gemm/gen/2x8c8-minmax-fp32-neonv8-mlal.c
index 22cec73..d889c58 100644
--- a/src/qs8-gemm/gen/2x8c8-minmax-fp32-neonv8-mlal.c
+++ b/src/qs8-gemm/gen/2x8c8-minmax-fp32-neonv8-mlal.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x8c8-minmax-rndnu-neon-mlal.c b/src/qs8-gemm/gen/2x8c8-minmax-rndnu-neon-mlal.c
index d96abb6..7c67e13 100644
--- a/src/qs8-gemm/gen/2x8c8-minmax-rndnu-neon-mlal.c
+++ b/src/qs8-gemm/gen/2x8c8-minmax-rndnu-neon-mlal.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x8c8-minmax-rndnu-neon-mull.c b/src/qs8-gemm/gen/2x8c8-minmax-rndnu-neon-mull.c
index a66339c..565dc92 100644
--- a/src/qs8-gemm/gen/2x8c8-minmax-rndnu-neon-mull.c
+++ b/src/qs8-gemm/gen/2x8c8-minmax-rndnu-neon-mull.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/2x8c8-xw-minmax-fp32-avx2.c b/src/qs8-gemm/gen/2x8c8-xw-minmax-fp32-avx2.c
index 71789a7..6130e70 100644
--- a/src/qs8-gemm/gen/2x8c8-xw-minmax-fp32-avx2.c
+++ b/src/qs8-gemm/gen/2x8c8-xw-minmax-fp32-avx2.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-gemm/gen/3x16-minmax-rndnu-neon-mlal-lane-prfm.c b/src/qs8-gemm/gen/3x16-minmax-rndnu-neon-mlal-lane-prfm.c
index 9769f9d..3b0ef4c 100644
--- a/src/qs8-gemm/gen/3x16-minmax-rndnu-neon-mlal-lane-prfm.c
+++ b/src/qs8-gemm/gen/3x16-minmax-rndnu-neon-mlal-lane-prfm.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-gemm/gen/3x16-minmax-rndnu-neon-mlal-lane.c b/src/qs8-gemm/gen/3x16-minmax-rndnu-neon-mlal-lane.c
index 86c5bb7..8a3be4f 100644
--- a/src/qs8-gemm/gen/3x16-minmax-rndnu-neon-mlal-lane.c
+++ b/src/qs8-gemm/gen/3x16-minmax-rndnu-neon-mlal-lane.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-gemm/gen/3x16-minmax-rndnu-neon-mull-addw-dup.c b/src/qs8-gemm/gen/3x16-minmax-rndnu-neon-mull-addw-dup.c
index 73bfcc7..0d89b69 100644
--- a/src/qs8-gemm/gen/3x16-minmax-rndnu-neon-mull-addw-dup.c
+++ b/src/qs8-gemm/gen/3x16-minmax-rndnu-neon-mull-addw-dup.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-gemm/gen/3x16c16-minmax-rndnu-neon-mlal.c b/src/qs8-gemm/gen/3x16c16-minmax-rndnu-neon-mlal.c
index d8a9863..f181775 100644
--- a/src/qs8-gemm/gen/3x16c16-minmax-rndnu-neon-mlal.c
+++ b/src/qs8-gemm/gen/3x16c16-minmax-rndnu-neon-mlal.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-gemm/gen/3x16c2-minmax-rndnu-neon-mlal-dup.c b/src/qs8-gemm/gen/3x16c2-minmax-rndnu-neon-mlal-dup.c
index c81c7ff..11a269e 100644
--- a/src/qs8-gemm/gen/3x16c2-minmax-rndnu-neon-mlal-dup.c
+++ b/src/qs8-gemm/gen/3x16c2-minmax-rndnu-neon-mlal-dup.c
@@ -24,7 +24,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-gemm/gen/3x16c2-minmax-rndnu-neon-mlal-ld1r.c b/src/qs8-gemm/gen/3x16c2-minmax-rndnu-neon-mlal-ld1r.c
index 42710f9..3f1a25f 100644
--- a/src/qs8-gemm/gen/3x16c2-minmax-rndnu-neon-mlal-ld1r.c
+++ b/src/qs8-gemm/gen/3x16c2-minmax-rndnu-neon-mlal-ld1r.c
@@ -24,7 +24,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-gemm/gen/3x16c2-minmax-rndnu-neon-mlal-ld2r.c b/src/qs8-gemm/gen/3x16c2-minmax-rndnu-neon-mlal-ld2r.c
index fded977..11d8eb7 100644
--- a/src/qs8-gemm/gen/3x16c2-minmax-rndnu-neon-mlal-ld2r.c
+++ b/src/qs8-gemm/gen/3x16c2-minmax-rndnu-neon-mlal-ld2r.c
@@ -24,7 +24,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-gemm/gen/3x16c2-minmax-rndnu-neon-mlal-ld4r.c b/src/qs8-gemm/gen/3x16c2-minmax-rndnu-neon-mlal-ld4r.c
index ebc767c..0a74360 100644
--- a/src/qs8-gemm/gen/3x16c2-minmax-rndnu-neon-mlal-ld4r.c
+++ b/src/qs8-gemm/gen/3x16c2-minmax-rndnu-neon-mlal-ld4r.c
@@ -24,7 +24,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-gemm/gen/3x16c2-minmax-rndnu-neon-mull-dup.c b/src/qs8-gemm/gen/3x16c2-minmax-rndnu-neon-mull-dup.c
index c1048ce..f82499b 100644
--- a/src/qs8-gemm/gen/3x16c2-minmax-rndnu-neon-mull-dup.c
+++ b/src/qs8-gemm/gen/3x16c2-minmax-rndnu-neon-mull-dup.c
@@ -24,7 +24,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-gemm/gen/3x16c2-minmax-rndnu-neon-mull-ld1r.c b/src/qs8-gemm/gen/3x16c2-minmax-rndnu-neon-mull-ld1r.c
index 74d954b..9fcca9e 100644
--- a/src/qs8-gemm/gen/3x16c2-minmax-rndnu-neon-mull-ld1r.c
+++ b/src/qs8-gemm/gen/3x16c2-minmax-rndnu-neon-mull-ld1r.c
@@ -24,7 +24,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-gemm/gen/3x16c2-minmax-rndnu-neon-mull-ld2r.c b/src/qs8-gemm/gen/3x16c2-minmax-rndnu-neon-mull-ld2r.c
index 3a64302..ecc82a5 100644
--- a/src/qs8-gemm/gen/3x16c2-minmax-rndnu-neon-mull-ld2r.c
+++ b/src/qs8-gemm/gen/3x16c2-minmax-rndnu-neon-mull-ld2r.c
@@ -24,7 +24,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-gemm/gen/3x16c2-minmax-rndnu-neon-mull-ld4r.c b/src/qs8-gemm/gen/3x16c2-minmax-rndnu-neon-mull-ld4r.c
index e19213a..f8c17c0 100644
--- a/src/qs8-gemm/gen/3x16c2-minmax-rndnu-neon-mull-ld4r.c
+++ b/src/qs8-gemm/gen/3x16c2-minmax-rndnu-neon-mull-ld4r.c
@@ -24,7 +24,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-gemm/gen/3x16c2s4-minmax-rndnu-neon-mlal.c b/src/qs8-gemm/gen/3x16c2s4-minmax-rndnu-neon-mlal.c
index 3d773c2..2ccde1b 100644
--- a/src/qs8-gemm/gen/3x16c2s4-minmax-rndnu-neon-mlal.c
+++ b/src/qs8-gemm/gen/3x16c2s4-minmax-rndnu-neon-mlal.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-gemm/gen/3x16c2s4-minmax-rndnu-neon-mull.c b/src/qs8-gemm/gen/3x16c2s4-minmax-rndnu-neon-mull.c
index 8cc7e1b..00c7b35 100644
--- a/src/qs8-gemm/gen/3x16c2s4-minmax-rndnu-neon-mull.c
+++ b/src/qs8-gemm/gen/3x16c2s4-minmax-rndnu-neon-mull.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-gemm/gen/3x16c4-minmax-rndnu-neon-mlal-dup.c b/src/qs8-gemm/gen/3x16c4-minmax-rndnu-neon-mlal-dup.c
index 45ff068..e449d85 100644
--- a/src/qs8-gemm/gen/3x16c4-minmax-rndnu-neon-mlal-dup.c
+++ b/src/qs8-gemm/gen/3x16c4-minmax-rndnu-neon-mlal-dup.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-gemm/gen/3x16c4-minmax-rndnu-neon-mlal-ld1r.c b/src/qs8-gemm/gen/3x16c4-minmax-rndnu-neon-mlal-ld1r.c
index fcb0d46..1b3be50 100644
--- a/src/qs8-gemm/gen/3x16c4-minmax-rndnu-neon-mlal-ld1r.c
+++ b/src/qs8-gemm/gen/3x16c4-minmax-rndnu-neon-mlal-ld1r.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-gemm/gen/3x16c4-minmax-rndnu-neon-mlal-ld2r.c b/src/qs8-gemm/gen/3x16c4-minmax-rndnu-neon-mlal-ld2r.c
index 5148894..e80a181 100644
--- a/src/qs8-gemm/gen/3x16c4-minmax-rndnu-neon-mlal-ld2r.c
+++ b/src/qs8-gemm/gen/3x16c4-minmax-rndnu-neon-mlal-ld2r.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-gemm/gen/3x16c4-minmax-rndnu-neon-mull-dup.c b/src/qs8-gemm/gen/3x16c4-minmax-rndnu-neon-mull-dup.c
index cba9967..0095ee3 100644
--- a/src/qs8-gemm/gen/3x16c4-minmax-rndnu-neon-mull-dup.c
+++ b/src/qs8-gemm/gen/3x16c4-minmax-rndnu-neon-mull-dup.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-gemm/gen/3x16c4-minmax-rndnu-neon-mull-ld1r.c b/src/qs8-gemm/gen/3x16c4-minmax-rndnu-neon-mull-ld1r.c
index e65c90e..57a95b4 100644
--- a/src/qs8-gemm/gen/3x16c4-minmax-rndnu-neon-mull-ld1r.c
+++ b/src/qs8-gemm/gen/3x16c4-minmax-rndnu-neon-mull-ld1r.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-gemm/gen/3x16c4-minmax-rndnu-neon-mull-ld2r.c b/src/qs8-gemm/gen/3x16c4-minmax-rndnu-neon-mull-ld2r.c
index 234b86a..d5c1c9f 100644
--- a/src/qs8-gemm/gen/3x16c4-minmax-rndnu-neon-mull-ld2r.c
+++ b/src/qs8-gemm/gen/3x16c4-minmax-rndnu-neon-mull-ld2r.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-gemm/gen/3x16c4s2-minmax-rndnu-neon-mlal.c b/src/qs8-gemm/gen/3x16c4s2-minmax-rndnu-neon-mlal.c
index bdf4770..f9a5b62 100644
--- a/src/qs8-gemm/gen/3x16c4s2-minmax-rndnu-neon-mlal.c
+++ b/src/qs8-gemm/gen/3x16c4s2-minmax-rndnu-neon-mlal.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-gemm/gen/3x16c4s2-minmax-rndnu-neon-mull.c b/src/qs8-gemm/gen/3x16c4s2-minmax-rndnu-neon-mull.c
index d43bfac..c16794c 100644
--- a/src/qs8-gemm/gen/3x16c4s2-minmax-rndnu-neon-mull.c
+++ b/src/qs8-gemm/gen/3x16c4s2-minmax-rndnu-neon-mull.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-gemm/gen/3x16c8-minmax-fp32-avx512skx.c b/src/qs8-gemm/gen/3x16c8-minmax-fp32-avx512skx.c
index 6040eb4..d2c5c9a 100644
--- a/src/qs8-gemm/gen/3x16c8-minmax-fp32-avx512skx.c
+++ b/src/qs8-gemm/gen/3x16c8-minmax-fp32-avx512skx.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-gemm/gen/3x16c8-minmax-rndnu-neon-mlal.c b/src/qs8-gemm/gen/3x16c8-minmax-rndnu-neon-mlal.c
index dd0059a..7613039 100644
--- a/src/qs8-gemm/gen/3x16c8-minmax-rndnu-neon-mlal.c
+++ b/src/qs8-gemm/gen/3x16c8-minmax-rndnu-neon-mlal.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-gemm/gen/3x16c8-minmax-rndnu-neon-mull.c b/src/qs8-gemm/gen/3x16c8-minmax-rndnu-neon-mull.c
index e976e02..4104c0e 100644
--- a/src/qs8-gemm/gen/3x16c8-minmax-rndnu-neon-mull.c
+++ b/src/qs8-gemm/gen/3x16c8-minmax-rndnu-neon-mull.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-gemm/gen/3x4c2-minmax-fp32-avx-ld128.c b/src/qs8-gemm/gen/3x4c2-minmax-fp32-avx-ld128.c
index 7cb3713..986de5f 100644
--- a/src/qs8-gemm/gen/3x4c2-minmax-fp32-avx-ld128.c
+++ b/src/qs8-gemm/gen/3x4c2-minmax-fp32-avx-ld128.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-gemm/gen/3x4c2-minmax-fp32-avx-ld64.c b/src/qs8-gemm/gen/3x4c2-minmax-fp32-avx-ld64.c
index f24a257..7f4509d 100644
--- a/src/qs8-gemm/gen/3x4c2-minmax-fp32-avx-ld64.c
+++ b/src/qs8-gemm/gen/3x4c2-minmax-fp32-avx-ld64.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-gemm/gen/3x4c2-minmax-fp32-sse2-ld128.c b/src/qs8-gemm/gen/3x4c2-minmax-fp32-sse2-ld128.c
index e41fc3a..bccc9e7 100644
--- a/src/qs8-gemm/gen/3x4c2-minmax-fp32-sse2-ld128.c
+++ b/src/qs8-gemm/gen/3x4c2-minmax-fp32-sse2-ld128.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-gemm/gen/3x4c2-minmax-fp32-sse2-ld64.c b/src/qs8-gemm/gen/3x4c2-minmax-fp32-sse2-ld64.c
index df38064..7e880ad 100644
--- a/src/qs8-gemm/gen/3x4c2-minmax-fp32-sse2-ld64.c
+++ b/src/qs8-gemm/gen/3x4c2-minmax-fp32-sse2-ld64.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-gemm/gen/3x4c2-minmax-fp32-sse41-ld128.c b/src/qs8-gemm/gen/3x4c2-minmax-fp32-sse41-ld128.c
index f01bdea..565a648 100644
--- a/src/qs8-gemm/gen/3x4c2-minmax-fp32-sse41-ld128.c
+++ b/src/qs8-gemm/gen/3x4c2-minmax-fp32-sse41-ld128.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-gemm/gen/3x4c2-minmax-fp32-sse41-ld64.c b/src/qs8-gemm/gen/3x4c2-minmax-fp32-sse41-ld64.c
index 4de19ea..02e97b3 100644
--- a/src/qs8-gemm/gen/3x4c2-minmax-fp32-sse41-ld64.c
+++ b/src/qs8-gemm/gen/3x4c2-minmax-fp32-sse41-ld64.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-gemm/gen/3x4c2-minmax-fp32-wasmsimd-dot16x2-ld128.c b/src/qs8-gemm/gen/3x4c2-minmax-fp32-wasmsimd-dot16x2-ld128.c
index d3a33c1..a9bebed 100644
--- a/src/qs8-gemm/gen/3x4c2-minmax-fp32-wasmsimd-dot16x2-ld128.c
+++ b/src/qs8-gemm/gen/3x4c2-minmax-fp32-wasmsimd-dot16x2-ld128.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-gemm/gen/3x4c2-minmax-fp32-wasmsimd-dot16x2-ld64.c b/src/qs8-gemm/gen/3x4c2-minmax-fp32-wasmsimd-dot16x2-ld64.c
index 90eec30..88cd59b 100644
--- a/src/qs8-gemm/gen/3x4c2-minmax-fp32-wasmsimd-dot16x2-ld64.c
+++ b/src/qs8-gemm/gen/3x4c2-minmax-fp32-wasmsimd-dot16x2-ld64.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-gemm/gen/3x4c2-minmax-fp32-xop-ld128.c b/src/qs8-gemm/gen/3x4c2-minmax-fp32-xop-ld128.c
index 4bf627a..f772bb4 100644
--- a/src/qs8-gemm/gen/3x4c2-minmax-fp32-xop-ld128.c
+++ b/src/qs8-gemm/gen/3x4c2-minmax-fp32-xop-ld128.c
@@ -31,7 +31,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-gemm/gen/3x4c2-minmax-fp32-xop-ld64.c b/src/qs8-gemm/gen/3x4c2-minmax-fp32-xop-ld64.c
index c7460a2..19219eb 100644
--- a/src/qs8-gemm/gen/3x4c2-minmax-fp32-xop-ld64.c
+++ b/src/qs8-gemm/gen/3x4c2-minmax-fp32-xop-ld64.c
@@ -31,7 +31,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-gemm/gen/3x4c2-xw-minmax-fp32-avx.c b/src/qs8-gemm/gen/3x4c2-xw-minmax-fp32-avx.c
index a0f4c0a..64e77ef 100644
--- a/src/qs8-gemm/gen/3x4c2-xw-minmax-fp32-avx.c
+++ b/src/qs8-gemm/gen/3x4c2-xw-minmax-fp32-avx.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-gemm/gen/3x4c2-xw-minmax-fp32-sse2.c b/src/qs8-gemm/gen/3x4c2-xw-minmax-fp32-sse2.c
index edc4f42..1689e01 100644
--- a/src/qs8-gemm/gen/3x4c2-xw-minmax-fp32-sse2.c
+++ b/src/qs8-gemm/gen/3x4c2-xw-minmax-fp32-sse2.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-gemm/gen/3x4c2-xw-minmax-fp32-sse41.c b/src/qs8-gemm/gen/3x4c2-xw-minmax-fp32-sse41.c
index e6108cb..86bd4a3 100644
--- a/src/qs8-gemm/gen/3x4c2-xw-minmax-fp32-sse41.c
+++ b/src/qs8-gemm/gen/3x4c2-xw-minmax-fp32-sse41.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-gemm/gen/3x4c2-xw-minmax-fp32-wasmsimd-dot16x2.c b/src/qs8-gemm/gen/3x4c2-xw-minmax-fp32-wasmsimd-dot16x2.c
index 8b5122e..88d3c48 100644
--- a/src/qs8-gemm/gen/3x4c2-xw-minmax-fp32-wasmsimd-dot16x2.c
+++ b/src/qs8-gemm/gen/3x4c2-xw-minmax-fp32-wasmsimd-dot16x2.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-gemm/gen/3x4c2-xw-minmax-fp32-xop.c b/src/qs8-gemm/gen/3x4c2-xw-minmax-fp32-xop.c
index 6a5a88b..4ed3637 100644
--- a/src/qs8-gemm/gen/3x4c2-xw-minmax-fp32-xop.c
+++ b/src/qs8-gemm/gen/3x4c2-xw-minmax-fp32-xop.c
@@ -31,7 +31,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-gemm/gen/3x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld128.c b/src/qs8-gemm/gen/3x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld128.c
index 3a8adc0..63c3de8 100644
--- a/src/qs8-gemm/gen/3x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld128.c
+++ b/src/qs8-gemm/gen/3x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld128.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-gemm/gen/3x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld64.c b/src/qs8-gemm/gen/3x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld64.c
index 0cc5272..dd8244b 100644
--- a/src/qs8-gemm/gen/3x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld64.c
+++ b/src/qs8-gemm/gen/3x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld64.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-gemm/gen/3x4c8-minmax-fp32-avx-ld128.c b/src/qs8-gemm/gen/3x4c8-minmax-fp32-avx-ld128.c
index 719853b..456efb2 100644
--- a/src/qs8-gemm/gen/3x4c8-minmax-fp32-avx-ld128.c
+++ b/src/qs8-gemm/gen/3x4c8-minmax-fp32-avx-ld128.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-gemm/gen/3x4c8-minmax-fp32-avx-ld64.c b/src/qs8-gemm/gen/3x4c8-minmax-fp32-avx-ld64.c
index 02a3927..8d38b3d 100644
--- a/src/qs8-gemm/gen/3x4c8-minmax-fp32-avx-ld64.c
+++ b/src/qs8-gemm/gen/3x4c8-minmax-fp32-avx-ld64.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-gemm/gen/3x4c8-minmax-fp32-sse2-ld128.c b/src/qs8-gemm/gen/3x4c8-minmax-fp32-sse2-ld128.c
index bf1e54a..749ac1e 100644
--- a/src/qs8-gemm/gen/3x4c8-minmax-fp32-sse2-ld128.c
+++ b/src/qs8-gemm/gen/3x4c8-minmax-fp32-sse2-ld128.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-gemm/gen/3x4c8-minmax-fp32-sse2-ld64.c b/src/qs8-gemm/gen/3x4c8-minmax-fp32-sse2-ld64.c
index a48c05e..793c1f3 100644
--- a/src/qs8-gemm/gen/3x4c8-minmax-fp32-sse2-ld64.c
+++ b/src/qs8-gemm/gen/3x4c8-minmax-fp32-sse2-ld64.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-gemm/gen/3x4c8-minmax-fp32-sse41-ld128.c b/src/qs8-gemm/gen/3x4c8-minmax-fp32-sse41-ld128.c
index 9a604e2..5f36603 100644
--- a/src/qs8-gemm/gen/3x4c8-minmax-fp32-sse41-ld128.c
+++ b/src/qs8-gemm/gen/3x4c8-minmax-fp32-sse41-ld128.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-gemm/gen/3x4c8-minmax-fp32-sse41-ld64.c b/src/qs8-gemm/gen/3x4c8-minmax-fp32-sse41-ld64.c
index 4a8cff2..8629a3d 100644
--- a/src/qs8-gemm/gen/3x4c8-minmax-fp32-sse41-ld64.c
+++ b/src/qs8-gemm/gen/3x4c8-minmax-fp32-sse41-ld64.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-gemm/gen/3x4c8-minmax-fp32-ssse3-ld128.c b/src/qs8-gemm/gen/3x4c8-minmax-fp32-ssse3-ld128.c
index 9ecc91e..cf5abed 100644
--- a/src/qs8-gemm/gen/3x4c8-minmax-fp32-ssse3-ld128.c
+++ b/src/qs8-gemm/gen/3x4c8-minmax-fp32-ssse3-ld128.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-gemm/gen/3x4c8-minmax-fp32-ssse3-ld64.c b/src/qs8-gemm/gen/3x4c8-minmax-fp32-ssse3-ld64.c
index a869a14..6438a34 100644
--- a/src/qs8-gemm/gen/3x4c8-minmax-fp32-ssse3-ld64.c
+++ b/src/qs8-gemm/gen/3x4c8-minmax-fp32-ssse3-ld64.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-gemm/gen/3x4c8-minmax-fp32-wasmsimd-dot16x2-ld128.c b/src/qs8-gemm/gen/3x4c8-minmax-fp32-wasmsimd-dot16x2-ld128.c
index a4f5292..34f9f2d 100644
--- a/src/qs8-gemm/gen/3x4c8-minmax-fp32-wasmsimd-dot16x2-ld128.c
+++ b/src/qs8-gemm/gen/3x4c8-minmax-fp32-wasmsimd-dot16x2-ld128.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-gemm/gen/3x4c8-minmax-fp32-wasmsimd-dot16x2-ld64.c b/src/qs8-gemm/gen/3x4c8-minmax-fp32-wasmsimd-dot16x2-ld64.c
index a4de050..ce00f8f 100644
--- a/src/qs8-gemm/gen/3x4c8-minmax-fp32-wasmsimd-dot16x2-ld64.c
+++ b/src/qs8-gemm/gen/3x4c8-minmax-fp32-wasmsimd-dot16x2-ld64.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-gemm/gen/3x4c8-minmax-fp32-wasmsimd-mul16-ld128.c b/src/qs8-gemm/gen/3x4c8-minmax-fp32-wasmsimd-mul16-ld128.c
index 898f646..47839c3 100644
--- a/src/qs8-gemm/gen/3x4c8-minmax-fp32-wasmsimd-mul16-ld128.c
+++ b/src/qs8-gemm/gen/3x4c8-minmax-fp32-wasmsimd-mul16-ld128.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-gemm/gen/3x4c8-minmax-fp32-wasmsimd-mul16-ld64.c b/src/qs8-gemm/gen/3x4c8-minmax-fp32-wasmsimd-mul16-ld64.c
index de4eae1..cccfd06 100644
--- a/src/qs8-gemm/gen/3x4c8-minmax-fp32-wasmsimd-mul16-ld64.c
+++ b/src/qs8-gemm/gen/3x4c8-minmax-fp32-wasmsimd-mul16-ld64.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-gemm/gen/3x4c8-minmax-fp32-xop-ld128.c b/src/qs8-gemm/gen/3x4c8-minmax-fp32-xop-ld128.c
index ff0ddbe..9aa34ae 100644
--- a/src/qs8-gemm/gen/3x4c8-minmax-fp32-xop-ld128.c
+++ b/src/qs8-gemm/gen/3x4c8-minmax-fp32-xop-ld128.c
@@ -30,7 +30,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-gemm/gen/3x4c8-minmax-fp32-xop-ld64.c b/src/qs8-gemm/gen/3x4c8-minmax-fp32-xop-ld64.c
index 82b4e87..99de4c6 100644
--- a/src/qs8-gemm/gen/3x4c8-minmax-fp32-xop-ld64.c
+++ b/src/qs8-gemm/gen/3x4c8-minmax-fp32-xop-ld64.c
@@ -30,7 +30,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-gemm/gen/3x4c8-xw-minmax-fp32-avx.c b/src/qs8-gemm/gen/3x4c8-xw-minmax-fp32-avx.c
index edac530..ab04a61 100644
--- a/src/qs8-gemm/gen/3x4c8-xw-minmax-fp32-avx.c
+++ b/src/qs8-gemm/gen/3x4c8-xw-minmax-fp32-avx.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-gemm/gen/3x4c8-xw-minmax-fp32-sse2.c b/src/qs8-gemm/gen/3x4c8-xw-minmax-fp32-sse2.c
index 8144e7e..fec226a 100644
--- a/src/qs8-gemm/gen/3x4c8-xw-minmax-fp32-sse2.c
+++ b/src/qs8-gemm/gen/3x4c8-xw-minmax-fp32-sse2.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-gemm/gen/3x4c8-xw-minmax-fp32-sse41.c b/src/qs8-gemm/gen/3x4c8-xw-minmax-fp32-sse41.c
index 564c4fa..ffd20f2 100644
--- a/src/qs8-gemm/gen/3x4c8-xw-minmax-fp32-sse41.c
+++ b/src/qs8-gemm/gen/3x4c8-xw-minmax-fp32-sse41.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-gemm/gen/3x4c8-xw-minmax-fp32-ssse3.c b/src/qs8-gemm/gen/3x4c8-xw-minmax-fp32-ssse3.c
index a18f627..d4464f4 100644
--- a/src/qs8-gemm/gen/3x4c8-xw-minmax-fp32-ssse3.c
+++ b/src/qs8-gemm/gen/3x4c8-xw-minmax-fp32-ssse3.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-gemm/gen/3x4c8-xw-minmax-fp32-wasmsimd-dot16x2.c b/src/qs8-gemm/gen/3x4c8-xw-minmax-fp32-wasmsimd-dot16x2.c
index 00b3d4b..64d2c32 100644
--- a/src/qs8-gemm/gen/3x4c8-xw-minmax-fp32-wasmsimd-dot16x2.c
+++ b/src/qs8-gemm/gen/3x4c8-xw-minmax-fp32-wasmsimd-dot16x2.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-gemm/gen/3x4c8-xw-minmax-fp32-wasmsimd-mul16.c b/src/qs8-gemm/gen/3x4c8-xw-minmax-fp32-wasmsimd-mul16.c
index 33018f1..306615f 100644
--- a/src/qs8-gemm/gen/3x4c8-xw-minmax-fp32-wasmsimd-mul16.c
+++ b/src/qs8-gemm/gen/3x4c8-xw-minmax-fp32-wasmsimd-mul16.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-gemm/gen/3x4c8-xw-minmax-fp32-xop.c b/src/qs8-gemm/gen/3x4c8-xw-minmax-fp32-xop.c
index b0feea6..19173fb 100644
--- a/src/qs8-gemm/gen/3x4c8-xw-minmax-fp32-xop.c
+++ b/src/qs8-gemm/gen/3x4c8-xw-minmax-fp32-xop.c
@@ -30,7 +30,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-gemm/gen/3x8-minmax-rndnu-neon-mlal-lane-prfm.c b/src/qs8-gemm/gen/3x8-minmax-rndnu-neon-mlal-lane-prfm.c
index a2fffe0..5bc6274 100644
--- a/src/qs8-gemm/gen/3x8-minmax-rndnu-neon-mlal-lane-prfm.c
+++ b/src/qs8-gemm/gen/3x8-minmax-rndnu-neon-mlal-lane-prfm.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-gemm/gen/3x8-minmax-rndnu-neon-mlal-lane.c b/src/qs8-gemm/gen/3x8-minmax-rndnu-neon-mlal-lane.c
index d49f03c..f365260 100644
--- a/src/qs8-gemm/gen/3x8-minmax-rndnu-neon-mlal-lane.c
+++ b/src/qs8-gemm/gen/3x8-minmax-rndnu-neon-mlal-lane.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-gemm/gen/3x8-minmax-rndnu-neon-mull-addw-dup.c b/src/qs8-gemm/gen/3x8-minmax-rndnu-neon-mull-addw-dup.c
index 9d2fb05..7bfb799 100644
--- a/src/qs8-gemm/gen/3x8-minmax-rndnu-neon-mull-addw-dup.c
+++ b/src/qs8-gemm/gen/3x8-minmax-rndnu-neon-mull-addw-dup.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-gemm/gen/3x8c16-minmax-rndnu-neon-mlal.c b/src/qs8-gemm/gen/3x8c16-minmax-rndnu-neon-mlal.c
index ff00724..85c33c4 100644
--- a/src/qs8-gemm/gen/3x8c16-minmax-rndnu-neon-mlal.c
+++ b/src/qs8-gemm/gen/3x8c16-minmax-rndnu-neon-mlal.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-gemm/gen/3x8c2-minmax-rndnu-neon-mlal-dup.c b/src/qs8-gemm/gen/3x8c2-minmax-rndnu-neon-mlal-dup.c
index a00d676..e83e504 100644
--- a/src/qs8-gemm/gen/3x8c2-minmax-rndnu-neon-mlal-dup.c
+++ b/src/qs8-gemm/gen/3x8c2-minmax-rndnu-neon-mlal-dup.c
@@ -24,7 +24,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-gemm/gen/3x8c2-minmax-rndnu-neon-mlal-ld1r.c b/src/qs8-gemm/gen/3x8c2-minmax-rndnu-neon-mlal-ld1r.c
index a374679..db9ed38 100644
--- a/src/qs8-gemm/gen/3x8c2-minmax-rndnu-neon-mlal-ld1r.c
+++ b/src/qs8-gemm/gen/3x8c2-minmax-rndnu-neon-mlal-ld1r.c
@@ -24,7 +24,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-gemm/gen/3x8c2-minmax-rndnu-neon-mlal-ld2r.c b/src/qs8-gemm/gen/3x8c2-minmax-rndnu-neon-mlal-ld2r.c
index 3f75c04..aa2ab27 100644
--- a/src/qs8-gemm/gen/3x8c2-minmax-rndnu-neon-mlal-ld2r.c
+++ b/src/qs8-gemm/gen/3x8c2-minmax-rndnu-neon-mlal-ld2r.c
@@ -24,7 +24,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-gemm/gen/3x8c2-minmax-rndnu-neon-mlal-ld4r.c b/src/qs8-gemm/gen/3x8c2-minmax-rndnu-neon-mlal-ld4r.c
index 7236a31..251d9db 100644
--- a/src/qs8-gemm/gen/3x8c2-minmax-rndnu-neon-mlal-ld4r.c
+++ b/src/qs8-gemm/gen/3x8c2-minmax-rndnu-neon-mlal-ld4r.c
@@ -24,7 +24,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-gemm/gen/3x8c2-minmax-rndnu-neon-mull-dup.c b/src/qs8-gemm/gen/3x8c2-minmax-rndnu-neon-mull-dup.c
index 9ce1b24..88ec808 100644
--- a/src/qs8-gemm/gen/3x8c2-minmax-rndnu-neon-mull-dup.c
+++ b/src/qs8-gemm/gen/3x8c2-minmax-rndnu-neon-mull-dup.c
@@ -24,7 +24,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-gemm/gen/3x8c2-minmax-rndnu-neon-mull-ld1r.c b/src/qs8-gemm/gen/3x8c2-minmax-rndnu-neon-mull-ld1r.c
index 11e471b..247f44e 100644
--- a/src/qs8-gemm/gen/3x8c2-minmax-rndnu-neon-mull-ld1r.c
+++ b/src/qs8-gemm/gen/3x8c2-minmax-rndnu-neon-mull-ld1r.c
@@ -24,7 +24,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-gemm/gen/3x8c2-minmax-rndnu-neon-mull-ld2r.c b/src/qs8-gemm/gen/3x8c2-minmax-rndnu-neon-mull-ld2r.c
index fb81da4..c500e7a 100644
--- a/src/qs8-gemm/gen/3x8c2-minmax-rndnu-neon-mull-ld2r.c
+++ b/src/qs8-gemm/gen/3x8c2-minmax-rndnu-neon-mull-ld2r.c
@@ -24,7 +24,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-gemm/gen/3x8c2-minmax-rndnu-neon-mull-ld4r.c b/src/qs8-gemm/gen/3x8c2-minmax-rndnu-neon-mull-ld4r.c
index 9171df8..33d444d 100644
--- a/src/qs8-gemm/gen/3x8c2-minmax-rndnu-neon-mull-ld4r.c
+++ b/src/qs8-gemm/gen/3x8c2-minmax-rndnu-neon-mull-ld4r.c
@@ -24,7 +24,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-gemm/gen/3x8c2s4-minmax-rndnu-neon-mlal.c b/src/qs8-gemm/gen/3x8c2s4-minmax-rndnu-neon-mlal.c
index fec8dfa..ea68c77 100644
--- a/src/qs8-gemm/gen/3x8c2s4-minmax-rndnu-neon-mlal.c
+++ b/src/qs8-gemm/gen/3x8c2s4-minmax-rndnu-neon-mlal.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-gemm/gen/3x8c2s4-minmax-rndnu-neon-mull.c b/src/qs8-gemm/gen/3x8c2s4-minmax-rndnu-neon-mull.c
index 8509b10..cceb109 100644
--- a/src/qs8-gemm/gen/3x8c2s4-minmax-rndnu-neon-mull.c
+++ b/src/qs8-gemm/gen/3x8c2s4-minmax-rndnu-neon-mull.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-gemm/gen/3x8c4-minmax-rndnu-neon-mlal-dup.c b/src/qs8-gemm/gen/3x8c4-minmax-rndnu-neon-mlal-dup.c
index 3422cc1..9203975 100644
--- a/src/qs8-gemm/gen/3x8c4-minmax-rndnu-neon-mlal-dup.c
+++ b/src/qs8-gemm/gen/3x8c4-minmax-rndnu-neon-mlal-dup.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-gemm/gen/3x8c4-minmax-rndnu-neon-mlal-ld1r.c b/src/qs8-gemm/gen/3x8c4-minmax-rndnu-neon-mlal-ld1r.c
index cc102bf..9ef8562 100644
--- a/src/qs8-gemm/gen/3x8c4-minmax-rndnu-neon-mlal-ld1r.c
+++ b/src/qs8-gemm/gen/3x8c4-minmax-rndnu-neon-mlal-ld1r.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-gemm/gen/3x8c4-minmax-rndnu-neon-mlal-ld2r.c b/src/qs8-gemm/gen/3x8c4-minmax-rndnu-neon-mlal-ld2r.c
index 99a0352..2ef6c97 100644
--- a/src/qs8-gemm/gen/3x8c4-minmax-rndnu-neon-mlal-ld2r.c
+++ b/src/qs8-gemm/gen/3x8c4-minmax-rndnu-neon-mlal-ld2r.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-gemm/gen/3x8c4-minmax-rndnu-neon-mull-dup.c b/src/qs8-gemm/gen/3x8c4-minmax-rndnu-neon-mull-dup.c
index 157219a..10b0197 100644
--- a/src/qs8-gemm/gen/3x8c4-minmax-rndnu-neon-mull-dup.c
+++ b/src/qs8-gemm/gen/3x8c4-minmax-rndnu-neon-mull-dup.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-gemm/gen/3x8c4-minmax-rndnu-neon-mull-ld1r.c b/src/qs8-gemm/gen/3x8c4-minmax-rndnu-neon-mull-ld1r.c
index e135551..c0a04e1 100644
--- a/src/qs8-gemm/gen/3x8c4-minmax-rndnu-neon-mull-ld1r.c
+++ b/src/qs8-gemm/gen/3x8c4-minmax-rndnu-neon-mull-ld1r.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-gemm/gen/3x8c4-minmax-rndnu-neon-mull-ld2r.c b/src/qs8-gemm/gen/3x8c4-minmax-rndnu-neon-mull-ld2r.c
index 44dd2b7..02ac4d9 100644
--- a/src/qs8-gemm/gen/3x8c4-minmax-rndnu-neon-mull-ld2r.c
+++ b/src/qs8-gemm/gen/3x8c4-minmax-rndnu-neon-mull-ld2r.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-gemm/gen/3x8c4s2-minmax-rndnu-neon-mlal.c b/src/qs8-gemm/gen/3x8c4s2-minmax-rndnu-neon-mlal.c
index 3189acc..b42f7c8 100644
--- a/src/qs8-gemm/gen/3x8c4s2-minmax-rndnu-neon-mlal.c
+++ b/src/qs8-gemm/gen/3x8c4s2-minmax-rndnu-neon-mlal.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-gemm/gen/3x8c4s2-minmax-rndnu-neon-mull.c b/src/qs8-gemm/gen/3x8c4s2-minmax-rndnu-neon-mull.c
index b421784..443d40b 100644
--- a/src/qs8-gemm/gen/3x8c4s2-minmax-rndnu-neon-mull.c
+++ b/src/qs8-gemm/gen/3x8c4s2-minmax-rndnu-neon-mull.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-gemm/gen/3x8c8-minmax-fp32-avx2.c b/src/qs8-gemm/gen/3x8c8-minmax-fp32-avx2.c
index bb18c06..d0a0e0e 100644
--- a/src/qs8-gemm/gen/3x8c8-minmax-fp32-avx2.c
+++ b/src/qs8-gemm/gen/3x8c8-minmax-fp32-avx2.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-gemm/gen/3x8c8-minmax-rndnu-neon-mlal.c b/src/qs8-gemm/gen/3x8c8-minmax-rndnu-neon-mlal.c
index 7d018b1..8c5ada4 100644
--- a/src/qs8-gemm/gen/3x8c8-minmax-rndnu-neon-mlal.c
+++ b/src/qs8-gemm/gen/3x8c8-minmax-rndnu-neon-mlal.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-gemm/gen/3x8c8-minmax-rndnu-neon-mull.c b/src/qs8-gemm/gen/3x8c8-minmax-rndnu-neon-mull.c
index cbfc03b..a47b71e 100644
--- a/src/qs8-gemm/gen/3x8c8-minmax-rndnu-neon-mull.c
+++ b/src/qs8-gemm/gen/3x8c8-minmax-rndnu-neon-mull.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-gemm/gen/3x8c8-xw-minmax-fp32-avx2.c b/src/qs8-gemm/gen/3x8c8-xw-minmax-fp32-avx2.c
index 8210a86..7e61a2d 100644
--- a/src/qs8-gemm/gen/3x8c8-xw-minmax-fp32-avx2.c
+++ b/src/qs8-gemm/gen/3x8c8-xw-minmax-fp32-avx2.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-gemm/gen/4x16-minmax-fp32-neon-mlal-lane.c b/src/qs8-gemm/gen/4x16-minmax-fp32-neon-mlal-lane.c
index 922c013..641b799 100644
--- a/src/qs8-gemm/gen/4x16-minmax-fp32-neon-mlal-lane.c
+++ b/src/qs8-gemm/gen/4x16-minmax-fp32-neon-mlal-lane.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-gemm/gen/4x16-minmax-fp32-neonv8-mlal-lane.c b/src/qs8-gemm/gen/4x16-minmax-fp32-neonv8-mlal-lane.c
index 5992936..78272eb 100644
--- a/src/qs8-gemm/gen/4x16-minmax-fp32-neonv8-mlal-lane.c
+++ b/src/qs8-gemm/gen/4x16-minmax-fp32-neonv8-mlal-lane.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-gemm/gen/4x16-minmax-rndnu-neon-mlal-lane-prfm.c b/src/qs8-gemm/gen/4x16-minmax-rndnu-neon-mlal-lane-prfm.c
index cbee359..05c2917 100644
--- a/src/qs8-gemm/gen/4x16-minmax-rndnu-neon-mlal-lane-prfm.c
+++ b/src/qs8-gemm/gen/4x16-minmax-rndnu-neon-mlal-lane-prfm.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-gemm/gen/4x16-minmax-rndnu-neon-mlal-lane.c b/src/qs8-gemm/gen/4x16-minmax-rndnu-neon-mlal-lane.c
index 398fd00..3fbcbb9 100644
--- a/src/qs8-gemm/gen/4x16-minmax-rndnu-neon-mlal-lane.c
+++ b/src/qs8-gemm/gen/4x16-minmax-rndnu-neon-mlal-lane.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-gemm/gen/4x16-minmax-rndnu-neon-mull-addw-dup.c b/src/qs8-gemm/gen/4x16-minmax-rndnu-neon-mull-addw-dup.c
index b72e598..1942fc0 100644
--- a/src/qs8-gemm/gen/4x16-minmax-rndnu-neon-mull-addw-dup.c
+++ b/src/qs8-gemm/gen/4x16-minmax-rndnu-neon-mull-addw-dup.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-gemm/gen/4x16c16-minmax-rndnu-neon-mlal.c b/src/qs8-gemm/gen/4x16c16-minmax-rndnu-neon-mlal.c
index 5b0ff5c..c8074b8 100644
--- a/src/qs8-gemm/gen/4x16c16-minmax-rndnu-neon-mlal.c
+++ b/src/qs8-gemm/gen/4x16c16-minmax-rndnu-neon-mlal.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-gemm/gen/4x16c2-minmax-rndnu-neon-mlal-dup.c b/src/qs8-gemm/gen/4x16c2-minmax-rndnu-neon-mlal-dup.c
index 224e37c..d45e482 100644
--- a/src/qs8-gemm/gen/4x16c2-minmax-rndnu-neon-mlal-dup.c
+++ b/src/qs8-gemm/gen/4x16c2-minmax-rndnu-neon-mlal-dup.c
@@ -24,7 +24,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-gemm/gen/4x16c2-minmax-rndnu-neon-mlal-ld1r.c b/src/qs8-gemm/gen/4x16c2-minmax-rndnu-neon-mlal-ld1r.c
index 4e82e8b..9a1265b 100644
--- a/src/qs8-gemm/gen/4x16c2-minmax-rndnu-neon-mlal-ld1r.c
+++ b/src/qs8-gemm/gen/4x16c2-minmax-rndnu-neon-mlal-ld1r.c
@@ -24,7 +24,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-gemm/gen/4x16c2-minmax-rndnu-neon-mlal-ld2r.c b/src/qs8-gemm/gen/4x16c2-minmax-rndnu-neon-mlal-ld2r.c
index ad2f847..57f7efd 100644
--- a/src/qs8-gemm/gen/4x16c2-minmax-rndnu-neon-mlal-ld2r.c
+++ b/src/qs8-gemm/gen/4x16c2-minmax-rndnu-neon-mlal-ld2r.c
@@ -24,7 +24,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-gemm/gen/4x16c2-minmax-rndnu-neon-mlal-ld4r.c b/src/qs8-gemm/gen/4x16c2-minmax-rndnu-neon-mlal-ld4r.c
index 4efe26a..3e8d014 100644
--- a/src/qs8-gemm/gen/4x16c2-minmax-rndnu-neon-mlal-ld4r.c
+++ b/src/qs8-gemm/gen/4x16c2-minmax-rndnu-neon-mlal-ld4r.c
@@ -24,7 +24,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-gemm/gen/4x16c2-minmax-rndnu-neon-mull-dup.c b/src/qs8-gemm/gen/4x16c2-minmax-rndnu-neon-mull-dup.c
index 7e854c4..5879489 100644
--- a/src/qs8-gemm/gen/4x16c2-minmax-rndnu-neon-mull-dup.c
+++ b/src/qs8-gemm/gen/4x16c2-minmax-rndnu-neon-mull-dup.c
@@ -24,7 +24,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-gemm/gen/4x16c2-minmax-rndnu-neon-mull-ld1r.c b/src/qs8-gemm/gen/4x16c2-minmax-rndnu-neon-mull-ld1r.c
index 97d907f..fefaab8 100644
--- a/src/qs8-gemm/gen/4x16c2-minmax-rndnu-neon-mull-ld1r.c
+++ b/src/qs8-gemm/gen/4x16c2-minmax-rndnu-neon-mull-ld1r.c
@@ -24,7 +24,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-gemm/gen/4x16c2-minmax-rndnu-neon-mull-ld2r.c b/src/qs8-gemm/gen/4x16c2-minmax-rndnu-neon-mull-ld2r.c
index d036253..c2e1e7a 100644
--- a/src/qs8-gemm/gen/4x16c2-minmax-rndnu-neon-mull-ld2r.c
+++ b/src/qs8-gemm/gen/4x16c2-minmax-rndnu-neon-mull-ld2r.c
@@ -24,7 +24,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-gemm/gen/4x16c2-minmax-rndnu-neon-mull-ld4r.c b/src/qs8-gemm/gen/4x16c2-minmax-rndnu-neon-mull-ld4r.c
index 16ce371..cb7cee2 100644
--- a/src/qs8-gemm/gen/4x16c2-minmax-rndnu-neon-mull-ld4r.c
+++ b/src/qs8-gemm/gen/4x16c2-minmax-rndnu-neon-mull-ld4r.c
@@ -24,7 +24,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-gemm/gen/4x16c2s4-minmax-rndnu-neon-mlal.c b/src/qs8-gemm/gen/4x16c2s4-minmax-rndnu-neon-mlal.c
index 6e510ca..a98e18e 100644
--- a/src/qs8-gemm/gen/4x16c2s4-minmax-rndnu-neon-mlal.c
+++ b/src/qs8-gemm/gen/4x16c2s4-minmax-rndnu-neon-mlal.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-gemm/gen/4x16c2s4-minmax-rndnu-neon-mull.c b/src/qs8-gemm/gen/4x16c2s4-minmax-rndnu-neon-mull.c
index af20a25..899a83e 100644
--- a/src/qs8-gemm/gen/4x16c2s4-minmax-rndnu-neon-mull.c
+++ b/src/qs8-gemm/gen/4x16c2s4-minmax-rndnu-neon-mull.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-gemm/gen/4x16c4-minmax-rndnu-neon-mlal-dup.c b/src/qs8-gemm/gen/4x16c4-minmax-rndnu-neon-mlal-dup.c
index 6d0bbc0..f8beaf3 100644
--- a/src/qs8-gemm/gen/4x16c4-minmax-rndnu-neon-mlal-dup.c
+++ b/src/qs8-gemm/gen/4x16c4-minmax-rndnu-neon-mlal-dup.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-gemm/gen/4x16c4-minmax-rndnu-neon-mlal-ld1r.c b/src/qs8-gemm/gen/4x16c4-minmax-rndnu-neon-mlal-ld1r.c
index eb1fa96..41e2f21 100644
--- a/src/qs8-gemm/gen/4x16c4-minmax-rndnu-neon-mlal-ld1r.c
+++ b/src/qs8-gemm/gen/4x16c4-minmax-rndnu-neon-mlal-ld1r.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-gemm/gen/4x16c4-minmax-rndnu-neon-mlal-ld2r.c b/src/qs8-gemm/gen/4x16c4-minmax-rndnu-neon-mlal-ld2r.c
index d30c47a..9297091 100644
--- a/src/qs8-gemm/gen/4x16c4-minmax-rndnu-neon-mlal-ld2r.c
+++ b/src/qs8-gemm/gen/4x16c4-minmax-rndnu-neon-mlal-ld2r.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-gemm/gen/4x16c4-minmax-rndnu-neon-mull-dup.c b/src/qs8-gemm/gen/4x16c4-minmax-rndnu-neon-mull-dup.c
index 37922fe..171f7cf 100644
--- a/src/qs8-gemm/gen/4x16c4-minmax-rndnu-neon-mull-dup.c
+++ b/src/qs8-gemm/gen/4x16c4-minmax-rndnu-neon-mull-dup.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-gemm/gen/4x16c4-minmax-rndnu-neon-mull-ld1r.c b/src/qs8-gemm/gen/4x16c4-minmax-rndnu-neon-mull-ld1r.c
index 5fd5190..f257fed 100644
--- a/src/qs8-gemm/gen/4x16c4-minmax-rndnu-neon-mull-ld1r.c
+++ b/src/qs8-gemm/gen/4x16c4-minmax-rndnu-neon-mull-ld1r.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-gemm/gen/4x16c4-minmax-rndnu-neon-mull-ld2r.c b/src/qs8-gemm/gen/4x16c4-minmax-rndnu-neon-mull-ld2r.c
index 6963ec3..8f8d209 100644
--- a/src/qs8-gemm/gen/4x16c4-minmax-rndnu-neon-mull-ld2r.c
+++ b/src/qs8-gemm/gen/4x16c4-minmax-rndnu-neon-mull-ld2r.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-gemm/gen/4x16c4-minmax-rndnu-neondot.c b/src/qs8-gemm/gen/4x16c4-minmax-rndnu-neondot.c
index 9c3039b..6cbe566 100644
--- a/src/qs8-gemm/gen/4x16c4-minmax-rndnu-neondot.c
+++ b/src/qs8-gemm/gen/4x16c4-minmax-rndnu-neondot.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-gemm/gen/4x16c4s2-minmax-rndnu-neon-mlal.c b/src/qs8-gemm/gen/4x16c4s2-minmax-rndnu-neon-mlal.c
index a069402..4b97dc2 100644
--- a/src/qs8-gemm/gen/4x16c4s2-minmax-rndnu-neon-mlal.c
+++ b/src/qs8-gemm/gen/4x16c4s2-minmax-rndnu-neon-mlal.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-gemm/gen/4x16c4s2-minmax-rndnu-neon-mull.c b/src/qs8-gemm/gen/4x16c4s2-minmax-rndnu-neon-mull.c
index 82bf8de..1255627 100644
--- a/src/qs8-gemm/gen/4x16c4s2-minmax-rndnu-neon-mull.c
+++ b/src/qs8-gemm/gen/4x16c4s2-minmax-rndnu-neon-mull.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-gemm/gen/4x16c8-minmax-fp32-avx512skx.c b/src/qs8-gemm/gen/4x16c8-minmax-fp32-avx512skx.c
index 6c3e269..2451b5f 100644
--- a/src/qs8-gemm/gen/4x16c8-minmax-fp32-avx512skx.c
+++ b/src/qs8-gemm/gen/4x16c8-minmax-fp32-avx512skx.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-gemm/gen/4x16c8-minmax-rndnu-neon-mlal.c b/src/qs8-gemm/gen/4x16c8-minmax-rndnu-neon-mlal.c
index f83f995..ede8f30 100644
--- a/src/qs8-gemm/gen/4x16c8-minmax-rndnu-neon-mlal.c
+++ b/src/qs8-gemm/gen/4x16c8-minmax-rndnu-neon-mlal.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-gemm/gen/4x16c8-minmax-rndnu-neon-mull.c b/src/qs8-gemm/gen/4x16c8-minmax-rndnu-neon-mull.c
index 0ed7614..c8d01b7 100644
--- a/src/qs8-gemm/gen/4x16c8-minmax-rndnu-neon-mull.c
+++ b/src/qs8-gemm/gen/4x16c8-minmax-rndnu-neon-mull.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-gemm/gen/4x4c2-minmax-fp32-avx-ld128.c b/src/qs8-gemm/gen/4x4c2-minmax-fp32-avx-ld128.c
index 3720a71..350ddf9 100644
--- a/src/qs8-gemm/gen/4x4c2-minmax-fp32-avx-ld128.c
+++ b/src/qs8-gemm/gen/4x4c2-minmax-fp32-avx-ld128.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-gemm/gen/4x4c2-minmax-fp32-avx-ld64.c b/src/qs8-gemm/gen/4x4c2-minmax-fp32-avx-ld64.c
index 3c809b3..c55312e 100644
--- a/src/qs8-gemm/gen/4x4c2-minmax-fp32-avx-ld64.c
+++ b/src/qs8-gemm/gen/4x4c2-minmax-fp32-avx-ld64.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-gemm/gen/4x4c2-minmax-fp32-sse2-ld128.c b/src/qs8-gemm/gen/4x4c2-minmax-fp32-sse2-ld128.c
index 4999d42..e543c99 100644
--- a/src/qs8-gemm/gen/4x4c2-minmax-fp32-sse2-ld128.c
+++ b/src/qs8-gemm/gen/4x4c2-minmax-fp32-sse2-ld128.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-gemm/gen/4x4c2-minmax-fp32-sse2-ld64.c b/src/qs8-gemm/gen/4x4c2-minmax-fp32-sse2-ld64.c
index ad2eebe..1ff7e1d 100644
--- a/src/qs8-gemm/gen/4x4c2-minmax-fp32-sse2-ld64.c
+++ b/src/qs8-gemm/gen/4x4c2-minmax-fp32-sse2-ld64.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-gemm/gen/4x4c2-minmax-fp32-sse41-ld128.c b/src/qs8-gemm/gen/4x4c2-minmax-fp32-sse41-ld128.c
index 973a2b1..2bce39e 100644
--- a/src/qs8-gemm/gen/4x4c2-minmax-fp32-sse41-ld128.c
+++ b/src/qs8-gemm/gen/4x4c2-minmax-fp32-sse41-ld128.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-gemm/gen/4x4c2-minmax-fp32-sse41-ld64.c b/src/qs8-gemm/gen/4x4c2-minmax-fp32-sse41-ld64.c
index d6470d1..cf75c94 100644
--- a/src/qs8-gemm/gen/4x4c2-minmax-fp32-sse41-ld64.c
+++ b/src/qs8-gemm/gen/4x4c2-minmax-fp32-sse41-ld64.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-gemm/gen/4x4c2-minmax-fp32-wasmsimd-dot16x2-ld128.c b/src/qs8-gemm/gen/4x4c2-minmax-fp32-wasmsimd-dot16x2-ld128.c
index e9f35ad..4964645 100644
--- a/src/qs8-gemm/gen/4x4c2-minmax-fp32-wasmsimd-dot16x2-ld128.c
+++ b/src/qs8-gemm/gen/4x4c2-minmax-fp32-wasmsimd-dot16x2-ld128.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-gemm/gen/4x4c2-minmax-fp32-wasmsimd-dot16x2-ld64.c b/src/qs8-gemm/gen/4x4c2-minmax-fp32-wasmsimd-dot16x2-ld64.c
index 5c63007..088b426 100644
--- a/src/qs8-gemm/gen/4x4c2-minmax-fp32-wasmsimd-dot16x2-ld64.c
+++ b/src/qs8-gemm/gen/4x4c2-minmax-fp32-wasmsimd-dot16x2-ld64.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-gemm/gen/4x4c2-minmax-fp32-xop-ld128.c b/src/qs8-gemm/gen/4x4c2-minmax-fp32-xop-ld128.c
index 394176b..77ff4c0 100644
--- a/src/qs8-gemm/gen/4x4c2-minmax-fp32-xop-ld128.c
+++ b/src/qs8-gemm/gen/4x4c2-minmax-fp32-xop-ld128.c
@@ -31,7 +31,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-gemm/gen/4x4c2-minmax-fp32-xop-ld64.c b/src/qs8-gemm/gen/4x4c2-minmax-fp32-xop-ld64.c
index 3caedb2..039eea3 100644
--- a/src/qs8-gemm/gen/4x4c2-minmax-fp32-xop-ld64.c
+++ b/src/qs8-gemm/gen/4x4c2-minmax-fp32-xop-ld64.c
@@ -31,7 +31,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-gemm/gen/4x4c2-xw-minmax-fp32-avx.c b/src/qs8-gemm/gen/4x4c2-xw-minmax-fp32-avx.c
index 5b91504..813296a 100644
--- a/src/qs8-gemm/gen/4x4c2-xw-minmax-fp32-avx.c
+++ b/src/qs8-gemm/gen/4x4c2-xw-minmax-fp32-avx.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-gemm/gen/4x4c2-xw-minmax-fp32-sse2.c b/src/qs8-gemm/gen/4x4c2-xw-minmax-fp32-sse2.c
index a989b88..4e857cd 100644
--- a/src/qs8-gemm/gen/4x4c2-xw-minmax-fp32-sse2.c
+++ b/src/qs8-gemm/gen/4x4c2-xw-minmax-fp32-sse2.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-gemm/gen/4x4c2-xw-minmax-fp32-sse41.c b/src/qs8-gemm/gen/4x4c2-xw-minmax-fp32-sse41.c
index 0d2ca85..5d7434c 100644
--- a/src/qs8-gemm/gen/4x4c2-xw-minmax-fp32-sse41.c
+++ b/src/qs8-gemm/gen/4x4c2-xw-minmax-fp32-sse41.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-gemm/gen/4x4c2-xw-minmax-fp32-wasmsimd-dot16x2.c b/src/qs8-gemm/gen/4x4c2-xw-minmax-fp32-wasmsimd-dot16x2.c
index e2854a5..0c36010 100644
--- a/src/qs8-gemm/gen/4x4c2-xw-minmax-fp32-wasmsimd-dot16x2.c
+++ b/src/qs8-gemm/gen/4x4c2-xw-minmax-fp32-wasmsimd-dot16x2.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-gemm/gen/4x4c2-xw-minmax-fp32-xop.c b/src/qs8-gemm/gen/4x4c2-xw-minmax-fp32-xop.c
index dca51a3..e967bab 100644
--- a/src/qs8-gemm/gen/4x4c2-xw-minmax-fp32-xop.c
+++ b/src/qs8-gemm/gen/4x4c2-xw-minmax-fp32-xop.c
@@ -31,7 +31,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-gemm/gen/4x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld128.c b/src/qs8-gemm/gen/4x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld128.c
index ae895b2..4ac7651 100644
--- a/src/qs8-gemm/gen/4x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld128.c
+++ b/src/qs8-gemm/gen/4x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld128.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-gemm/gen/4x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld64.c b/src/qs8-gemm/gen/4x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld64.c
index 6083f81..e889424 100644
--- a/src/qs8-gemm/gen/4x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld64.c
+++ b/src/qs8-gemm/gen/4x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld64.c
@@ -26,7 +26,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-gemm/gen/4x4c8-minmax-fp32-wasmsimd-dot16x2-ld128.c b/src/qs8-gemm/gen/4x4c8-minmax-fp32-wasmsimd-dot16x2-ld128.c
index 79484b2..4e13121 100644
--- a/src/qs8-gemm/gen/4x4c8-minmax-fp32-wasmsimd-dot16x2-ld128.c
+++ b/src/qs8-gemm/gen/4x4c8-minmax-fp32-wasmsimd-dot16x2-ld128.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-gemm/gen/4x4c8-minmax-fp32-wasmsimd-dot16x2-ld64.c b/src/qs8-gemm/gen/4x4c8-minmax-fp32-wasmsimd-dot16x2-ld64.c
index c348a81..dcba0c9 100644
--- a/src/qs8-gemm/gen/4x4c8-minmax-fp32-wasmsimd-dot16x2-ld64.c
+++ b/src/qs8-gemm/gen/4x4c8-minmax-fp32-wasmsimd-dot16x2-ld64.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-gemm/gen/4x4c8-xw-minmax-fp32-wasmsimd-dot16x2.c b/src/qs8-gemm/gen/4x4c8-xw-minmax-fp32-wasmsimd-dot16x2.c
index d9ee9ee..29314e4 100644
--- a/src/qs8-gemm/gen/4x4c8-xw-minmax-fp32-wasmsimd-dot16x2.c
+++ b/src/qs8-gemm/gen/4x4c8-xw-minmax-fp32-wasmsimd-dot16x2.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-gemm/gen/4x8-minmax-rndnu-neon-mlal-lane-prfm.c b/src/qs8-gemm/gen/4x8-minmax-rndnu-neon-mlal-lane-prfm.c
index 7406176..de0719e 100644
--- a/src/qs8-gemm/gen/4x8-minmax-rndnu-neon-mlal-lane-prfm.c
+++ b/src/qs8-gemm/gen/4x8-minmax-rndnu-neon-mlal-lane-prfm.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-gemm/gen/4x8-minmax-rndnu-neon-mlal-lane.c b/src/qs8-gemm/gen/4x8-minmax-rndnu-neon-mlal-lane.c
index cc39ac1..768512a 100644
--- a/src/qs8-gemm/gen/4x8-minmax-rndnu-neon-mlal-lane.c
+++ b/src/qs8-gemm/gen/4x8-minmax-rndnu-neon-mlal-lane.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-gemm/gen/4x8-minmax-rndnu-neon-mull-addw-dup.c b/src/qs8-gemm/gen/4x8-minmax-rndnu-neon-mull-addw-dup.c
index 4398774..e98cef7 100644
--- a/src/qs8-gemm/gen/4x8-minmax-rndnu-neon-mull-addw-dup.c
+++ b/src/qs8-gemm/gen/4x8-minmax-rndnu-neon-mull-addw-dup.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-gemm/gen/4x8c16-minmax-rndnu-neon-mlal.c b/src/qs8-gemm/gen/4x8c16-minmax-rndnu-neon-mlal.c
index 9caa96a..0ab91a2 100644
--- a/src/qs8-gemm/gen/4x8c16-minmax-rndnu-neon-mlal.c
+++ b/src/qs8-gemm/gen/4x8c16-minmax-rndnu-neon-mlal.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-gemm/gen/4x8c2-minmax-rndnu-neon-mlal-dup.c b/src/qs8-gemm/gen/4x8c2-minmax-rndnu-neon-mlal-dup.c
index 2a50b78..3fb90ca 100644
--- a/src/qs8-gemm/gen/4x8c2-minmax-rndnu-neon-mlal-dup.c
+++ b/src/qs8-gemm/gen/4x8c2-minmax-rndnu-neon-mlal-dup.c
@@ -24,7 +24,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-gemm/gen/4x8c2-minmax-rndnu-neon-mlal-ld1r.c b/src/qs8-gemm/gen/4x8c2-minmax-rndnu-neon-mlal-ld1r.c
index cbfb60e..61b69ec 100644
--- a/src/qs8-gemm/gen/4x8c2-minmax-rndnu-neon-mlal-ld1r.c
+++ b/src/qs8-gemm/gen/4x8c2-minmax-rndnu-neon-mlal-ld1r.c
@@ -24,7 +24,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-gemm/gen/4x8c2-minmax-rndnu-neon-mlal-ld2r.c b/src/qs8-gemm/gen/4x8c2-minmax-rndnu-neon-mlal-ld2r.c
index 497ad94..797f950 100644
--- a/src/qs8-gemm/gen/4x8c2-minmax-rndnu-neon-mlal-ld2r.c
+++ b/src/qs8-gemm/gen/4x8c2-minmax-rndnu-neon-mlal-ld2r.c
@@ -24,7 +24,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-gemm/gen/4x8c2-minmax-rndnu-neon-mlal-ld4r.c b/src/qs8-gemm/gen/4x8c2-minmax-rndnu-neon-mlal-ld4r.c
index 42defef..df8159f 100644
--- a/src/qs8-gemm/gen/4x8c2-minmax-rndnu-neon-mlal-ld4r.c
+++ b/src/qs8-gemm/gen/4x8c2-minmax-rndnu-neon-mlal-ld4r.c
@@ -24,7 +24,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-gemm/gen/4x8c2-minmax-rndnu-neon-mull-dup.c b/src/qs8-gemm/gen/4x8c2-minmax-rndnu-neon-mull-dup.c
index 5aadbbb..08bed3a 100644
--- a/src/qs8-gemm/gen/4x8c2-minmax-rndnu-neon-mull-dup.c
+++ b/src/qs8-gemm/gen/4x8c2-minmax-rndnu-neon-mull-dup.c
@@ -24,7 +24,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-gemm/gen/4x8c2-minmax-rndnu-neon-mull-ld1r.c b/src/qs8-gemm/gen/4x8c2-minmax-rndnu-neon-mull-ld1r.c
index fde8685..24077de 100644
--- a/src/qs8-gemm/gen/4x8c2-minmax-rndnu-neon-mull-ld1r.c
+++ b/src/qs8-gemm/gen/4x8c2-minmax-rndnu-neon-mull-ld1r.c
@@ -24,7 +24,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-gemm/gen/4x8c2-minmax-rndnu-neon-mull-ld2r.c b/src/qs8-gemm/gen/4x8c2-minmax-rndnu-neon-mull-ld2r.c
index bcc12db..0255c3c 100644
--- a/src/qs8-gemm/gen/4x8c2-minmax-rndnu-neon-mull-ld2r.c
+++ b/src/qs8-gemm/gen/4x8c2-minmax-rndnu-neon-mull-ld2r.c
@@ -24,7 +24,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-gemm/gen/4x8c2-minmax-rndnu-neon-mull-ld4r.c b/src/qs8-gemm/gen/4x8c2-minmax-rndnu-neon-mull-ld4r.c
index 2328e21..9b618ce 100644
--- a/src/qs8-gemm/gen/4x8c2-minmax-rndnu-neon-mull-ld4r.c
+++ b/src/qs8-gemm/gen/4x8c2-minmax-rndnu-neon-mull-ld4r.c
@@ -24,7 +24,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-gemm/gen/4x8c2s4-minmax-rndnu-neon-mlal.c b/src/qs8-gemm/gen/4x8c2s4-minmax-rndnu-neon-mlal.c
index 1a08c6d..1bc5a09 100644
--- a/src/qs8-gemm/gen/4x8c2s4-minmax-rndnu-neon-mlal.c
+++ b/src/qs8-gemm/gen/4x8c2s4-minmax-rndnu-neon-mlal.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-gemm/gen/4x8c2s4-minmax-rndnu-neon-mull.c b/src/qs8-gemm/gen/4x8c2s4-minmax-rndnu-neon-mull.c
index 3d7f7d4..d82add5 100644
--- a/src/qs8-gemm/gen/4x8c2s4-minmax-rndnu-neon-mull.c
+++ b/src/qs8-gemm/gen/4x8c2s4-minmax-rndnu-neon-mull.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-gemm/gen/4x8c4-minmax-rndnu-neon-mlal-dup.c b/src/qs8-gemm/gen/4x8c4-minmax-rndnu-neon-mlal-dup.c
index 9c6433e..ac85a24 100644
--- a/src/qs8-gemm/gen/4x8c4-minmax-rndnu-neon-mlal-dup.c
+++ b/src/qs8-gemm/gen/4x8c4-minmax-rndnu-neon-mlal-dup.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-gemm/gen/4x8c4-minmax-rndnu-neon-mlal-ld1r.c b/src/qs8-gemm/gen/4x8c4-minmax-rndnu-neon-mlal-ld1r.c
index e918da9..f12525b 100644
--- a/src/qs8-gemm/gen/4x8c4-minmax-rndnu-neon-mlal-ld1r.c
+++ b/src/qs8-gemm/gen/4x8c4-minmax-rndnu-neon-mlal-ld1r.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-gemm/gen/4x8c4-minmax-rndnu-neon-mlal-ld2r.c b/src/qs8-gemm/gen/4x8c4-minmax-rndnu-neon-mlal-ld2r.c
index 6c5f670..0469fe7 100644
--- a/src/qs8-gemm/gen/4x8c4-minmax-rndnu-neon-mlal-ld2r.c
+++ b/src/qs8-gemm/gen/4x8c4-minmax-rndnu-neon-mlal-ld2r.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-gemm/gen/4x8c4-minmax-rndnu-neon-mull-dup.c b/src/qs8-gemm/gen/4x8c4-minmax-rndnu-neon-mull-dup.c
index d7ab538..bd2e9d0 100644
--- a/src/qs8-gemm/gen/4x8c4-minmax-rndnu-neon-mull-dup.c
+++ b/src/qs8-gemm/gen/4x8c4-minmax-rndnu-neon-mull-dup.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-gemm/gen/4x8c4-minmax-rndnu-neon-mull-ld1r.c b/src/qs8-gemm/gen/4x8c4-minmax-rndnu-neon-mull-ld1r.c
index 4c6478f..7d552d0 100644
--- a/src/qs8-gemm/gen/4x8c4-minmax-rndnu-neon-mull-ld1r.c
+++ b/src/qs8-gemm/gen/4x8c4-minmax-rndnu-neon-mull-ld1r.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-gemm/gen/4x8c4-minmax-rndnu-neon-mull-ld2r.c b/src/qs8-gemm/gen/4x8c4-minmax-rndnu-neon-mull-ld2r.c
index f6934a1..db17f0f 100644
--- a/src/qs8-gemm/gen/4x8c4-minmax-rndnu-neon-mull-ld2r.c
+++ b/src/qs8-gemm/gen/4x8c4-minmax-rndnu-neon-mull-ld2r.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-gemm/gen/4x8c4-minmax-rndnu-neondot.c b/src/qs8-gemm/gen/4x8c4-minmax-rndnu-neondot.c
index 7150f73..4b0b082 100644
--- a/src/qs8-gemm/gen/4x8c4-minmax-rndnu-neondot.c
+++ b/src/qs8-gemm/gen/4x8c4-minmax-rndnu-neondot.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-gemm/gen/4x8c4s2-minmax-rndnu-neon-mlal.c b/src/qs8-gemm/gen/4x8c4s2-minmax-rndnu-neon-mlal.c
index 8f2c71c..dc7c356 100644
--- a/src/qs8-gemm/gen/4x8c4s2-minmax-rndnu-neon-mlal.c
+++ b/src/qs8-gemm/gen/4x8c4s2-minmax-rndnu-neon-mlal.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-gemm/gen/4x8c4s2-minmax-rndnu-neon-mull.c b/src/qs8-gemm/gen/4x8c4s2-minmax-rndnu-neon-mull.c
index 375a6f1..27b664d 100644
--- a/src/qs8-gemm/gen/4x8c4s2-minmax-rndnu-neon-mull.c
+++ b/src/qs8-gemm/gen/4x8c4s2-minmax-rndnu-neon-mull.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-gemm/gen/4x8c8-minmax-rndnu-neon-mlal.c b/src/qs8-gemm/gen/4x8c8-minmax-rndnu-neon-mlal.c
index c0d0525..20096bb 100644
--- a/src/qs8-gemm/gen/4x8c8-minmax-rndnu-neon-mlal.c
+++ b/src/qs8-gemm/gen/4x8c8-minmax-rndnu-neon-mlal.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-gemm/gen/4x8c8-minmax-rndnu-neon-mull.c b/src/qs8-gemm/gen/4x8c8-minmax-rndnu-neon-mull.c
index 1186540..e81fb64 100644
--- a/src/qs8-gemm/gen/4x8c8-minmax-rndnu-neon-mull.c
+++ b/src/qs8-gemm/gen/4x8c8-minmax-rndnu-neon-mull.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-gemm/gen/6x16-minmax-rndnu-neon-mlal-lane-prfm.c b/src/qs8-gemm/gen/6x16-minmax-rndnu-neon-mlal-lane-prfm.c
index c396336..b248a97 100644
--- a/src/qs8-gemm/gen/6x16-minmax-rndnu-neon-mlal-lane-prfm.c
+++ b/src/qs8-gemm/gen/6x16-minmax-rndnu-neon-mlal-lane-prfm.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 6);
diff --git a/src/qs8-gemm/gen/6x16-minmax-rndnu-neon-mlal-lane.c b/src/qs8-gemm/gen/6x16-minmax-rndnu-neon-mlal-lane.c
index 502d95b..4b17a0d 100644
--- a/src/qs8-gemm/gen/6x16-minmax-rndnu-neon-mlal-lane.c
+++ b/src/qs8-gemm/gen/6x16-minmax-rndnu-neon-mlal-lane.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 6);
diff --git a/src/qs8-gemm/gen/6x16c4-minmax-rndnu-neondot.c b/src/qs8-gemm/gen/6x16c4-minmax-rndnu-neondot.c
index 9c893d6..cd1a277 100644
--- a/src/qs8-gemm/gen/6x16c4-minmax-rndnu-neondot.c
+++ b/src/qs8-gemm/gen/6x16c4-minmax-rndnu-neondot.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 6);
diff --git a/src/qs8-gemm/gen/6x8-minmax-rndnu-neon-mlal-lane-prfm.c b/src/qs8-gemm/gen/6x8-minmax-rndnu-neon-mlal-lane-prfm.c
index c1acfd6..ad971be 100644
--- a/src/qs8-gemm/gen/6x8-minmax-rndnu-neon-mlal-lane-prfm.c
+++ b/src/qs8-gemm/gen/6x8-minmax-rndnu-neon-mlal-lane-prfm.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 6);
diff --git a/src/qs8-gemm/gen/6x8-minmax-rndnu-neon-mlal-lane.c b/src/qs8-gemm/gen/6x8-minmax-rndnu-neon-mlal-lane.c
index 22570d1..2fc6e96 100644
--- a/src/qs8-gemm/gen/6x8-minmax-rndnu-neon-mlal-lane.c
+++ b/src/qs8-gemm/gen/6x8-minmax-rndnu-neon-mlal-lane.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 6);
diff --git a/src/qs8-gemm/gen/6x8c4-minmax-rndnu-neondot.c b/src/qs8-gemm/gen/6x8c4-minmax-rndnu-neondot.c
index 7f2c081..7458c8f 100644
--- a/src/qs8-gemm/gen/6x8c4-minmax-rndnu-neondot.c
+++ b/src/qs8-gemm/gen/6x8c4-minmax-rndnu-neondot.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 6);
diff --git a/src/qs8-gemm/gen/8x16c4-minmax-rndnu-neondot.c b/src/qs8-gemm/gen/8x16c4-minmax-rndnu-neondot.c
index d824df1..950ead2 100644
--- a/src/qs8-gemm/gen/8x16c4-minmax-rndnu-neondot.c
+++ b/src/qs8-gemm/gen/8x16c4-minmax-rndnu-neondot.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 8);
diff --git a/src/qs8-gemm/gen/8x8c4-minmax-rndnu-neondot.c b/src/qs8-gemm/gen/8x8c4-minmax-rndnu-neondot.c
index 7f7454b..6c7629a 100644
--- a/src/qs8-gemm/gen/8x8c4-minmax-rndnu-neondot.c
+++ b/src/qs8-gemm/gen/8x8c4-minmax-rndnu-neondot.c
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 8);
diff --git a/src/qs8-gemm/neon-mlal-lane.c.in b/src/qs8-gemm/neon-mlal-lane.c.in
index 8b65fa0..c1dc82d 100644
--- a/src/qs8-gemm/neon-mlal-lane.c.in
+++ b/src/qs8-gemm/neon-mlal-lane.c.in
@@ -57,7 +57,7 @@
     ${XINT8_T}* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union ${PARAMS_UNION} params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union ${PARAMS_UNION} params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= ${MR});
diff --git a/src/qs8-gemm/neon-mull-addw-dup.c.in b/src/qs8-gemm/neon-mull-addw-dup.c.in
index 47d32f2..b7122c5 100644
--- a/src/qs8-gemm/neon-mull-addw-dup.c.in
+++ b/src/qs8-gemm/neon-mull-addw-dup.c.in
@@ -25,7 +25,7 @@
     int8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= ${MR});
diff --git a/src/qs8-igemm/MRx16c8-avx512skx.c.in b/src/qs8-igemm/MRx16c8-avx512skx.c.in
index cfebf2e..f1f9476 100644
--- a/src/qs8-igemm/MRx16c8-avx512skx.c.in
+++ b/src/qs8-igemm/MRx16c8-avx512skx.c.in
@@ -33,7 +33,7 @@
     size_t cn_stride,
     size_t a_offset,
     const ${XINT8_T}* zero,
-    const union ${PARAMS_UNION} params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union ${PARAMS_UNION} params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= ${MR});
diff --git a/src/qs8-igemm/MRx4c2-sse.c.in b/src/qs8-igemm/MRx4c2-sse.c.in
index ca3efc0..3a0d373 100644
--- a/src/qs8-igemm/MRx4c2-sse.c.in
+++ b/src/qs8-igemm/MRx4c2-sse.c.in
@@ -43,7 +43,7 @@
     size_t cn_stride,
     size_t a_offset,
     const ${XINT8_T}* zero,
-    const union ${PARAMS_UNION} params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union ${PARAMS_UNION} params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= ${MR});
diff --git a/src/qs8-igemm/MRx4c2-wasmsimd-dot16x2.c.in b/src/qs8-igemm/MRx4c2-wasmsimd-dot16x2.c.in
index e3f1aa3..76a8a8a 100644
--- a/src/qs8-igemm/MRx4c2-wasmsimd-dot16x2.c.in
+++ b/src/qs8-igemm/MRx4c2-wasmsimd-dot16x2.c.in
@@ -33,7 +33,7 @@
     size_t cn_stride,
     size_t a_offset,
     const ${XINT8_T}* zero,
-    const union ${PARAMS_UNION} params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union ${PARAMS_UNION} params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= ${MR});
diff --git a/src/qs8-igemm/MRx4c2s4-wasmsimd-dot16x2.c.in b/src/qs8-igemm/MRx4c2s4-wasmsimd-dot16x2.c.in
index 38f9c9c..c16a06b 100644
--- a/src/qs8-igemm/MRx4c2s4-wasmsimd-dot16x2.c.in
+++ b/src/qs8-igemm/MRx4c2s4-wasmsimd-dot16x2.c.in
@@ -33,7 +33,7 @@
     size_t cn_stride,
     size_t a_offset,
     const ${XINT8_T}* zero,
-    const union ${PARAMS_UNION} params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union ${PARAMS_UNION} params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= ${MR});
diff --git a/src/qs8-igemm/MRx4c8-sse.c.in b/src/qs8-igemm/MRx4c8-sse.c.in
index 25d748f..21680b8 100644
--- a/src/qs8-igemm/MRx4c8-sse.c.in
+++ b/src/qs8-igemm/MRx4c8-sse.c.in
@@ -43,7 +43,7 @@
     size_t cn_stride,
     size_t a_offset,
     const ${XINT8_T}* zero,
-    const union ${PARAMS_UNION} params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union ${PARAMS_UNION} params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= ${MR});
diff --git a/src/qs8-igemm/MRx4c8-wasmsimd-dot16x2.c.in b/src/qs8-igemm/MRx4c8-wasmsimd-dot16x2.c.in
index c51bafe..dafdff7 100644
--- a/src/qs8-igemm/MRx4c8-wasmsimd-dot16x2.c.in
+++ b/src/qs8-igemm/MRx4c8-wasmsimd-dot16x2.c.in
@@ -35,7 +35,7 @@
     size_t cn_stride,
     size_t a_offset,
     const ${XINT8_T}* zero,
-    const union ${PARAMS_UNION} params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union ${PARAMS_UNION} params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= ${MR});
diff --git a/src/qs8-igemm/MRx4c8-wasmsimd-mul16.c.in b/src/qs8-igemm/MRx4c8-wasmsimd-mul16.c.in
index a725998..6d1c089 100644
--- a/src/qs8-igemm/MRx4c8-wasmsimd-mul16.c.in
+++ b/src/qs8-igemm/MRx4c8-wasmsimd-mul16.c.in
@@ -35,7 +35,7 @@
     size_t cn_stride,
     size_t a_offset,
     const ${XINT8_T}* zero,
-    const union ${PARAMS_UNION} params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union ${PARAMS_UNION} params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= ${MR});
diff --git a/src/qs8-igemm/MRx4c8-wasmsimd-mul32.c.in b/src/qs8-igemm/MRx4c8-wasmsimd-mul32.c.in
index 3841ce2..49f2beb 100644
--- a/src/qs8-igemm/MRx4c8-wasmsimd-mul32.c.in
+++ b/src/qs8-igemm/MRx4c8-wasmsimd-mul32.c.in
@@ -35,7 +35,7 @@
     size_t cn_stride,
     size_t a_offset,
     const ${XINT8_T}* zero,
-    const union ${PARAMS_UNION} params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union ${PARAMS_UNION} params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= ${MR});
diff --git a/src/qs8-igemm/MRx8c8-avx2.c.in b/src/qs8-igemm/MRx8c8-avx2.c.in
index 7cd1d70..449fe83 100644
--- a/src/qs8-igemm/MRx8c8-avx2.c.in
+++ b/src/qs8-igemm/MRx8c8-avx2.c.in
@@ -30,7 +30,7 @@
     size_t cn_stride,
     size_t a_offset,
     const ${XINT8_T}* zero,
-    const union ${PARAMS_UNION} params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union ${PARAMS_UNION} params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= ${MR});
diff --git a/src/qs8-igemm/c16-neon-mlal.c.in b/src/qs8-igemm/c16-neon-mlal.c.in
index acc1fa8..7071b07 100644
--- a/src/qs8-igemm/c16-neon-mlal.c.in
+++ b/src/qs8-igemm/c16-neon-mlal.c.in
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= ${MR});
diff --git a/src/qs8-igemm/c2-neon-mull-dup.c.in b/src/qs8-igemm/c2-neon-mull-dup.c.in
index d293adc..7905305 100644
--- a/src/qs8-igemm/c2-neon-mull-dup.c.in
+++ b/src/qs8-igemm/c2-neon-mull-dup.c.in
@@ -34,7 +34,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union ${PARAMS_UNION} params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union ${PARAMS_UNION} params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= ${MR});
diff --git a/src/qs8-igemm/c2-neon-mull-shuffle.c.in b/src/qs8-igemm/c2-neon-mull-shuffle.c.in
index 3b50575..a85bf1a 100644
--- a/src/qs8-igemm/c2-neon-mull-shuffle.c.in
+++ b/src/qs8-igemm/c2-neon-mull-shuffle.c.in
@@ -34,7 +34,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union ${PARAMS_UNION} params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union ${PARAMS_UNION} params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= ${MR});
diff --git a/src/qs8-igemm/c4-neon-mull-dup.c.in b/src/qs8-igemm/c4-neon-mull-dup.c.in
index d50be02..54ab227 100644
--- a/src/qs8-igemm/c4-neon-mull-dup.c.in
+++ b/src/qs8-igemm/c4-neon-mull-dup.c.in
@@ -35,7 +35,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union ${PARAMS_UNION} params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union ${PARAMS_UNION} params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= ${MR});
diff --git a/src/qs8-igemm/c4-neon-mull-shuffle.c.in b/src/qs8-igemm/c4-neon-mull-shuffle.c.in
index 533e884..ee058da 100644
--- a/src/qs8-igemm/c4-neon-mull-shuffle.c.in
+++ b/src/qs8-igemm/c4-neon-mull-shuffle.c.in
@@ -34,7 +34,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union ${PARAMS_UNION} params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union ${PARAMS_UNION} params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= ${MR});
diff --git a/src/qs8-igemm/c4-neondot.c.in b/src/qs8-igemm/c4-neondot.c.in
index e505834..b08a94d 100644
--- a/src/qs8-igemm/c4-neondot.c.in
+++ b/src/qs8-igemm/c4-neondot.c.in
@@ -33,7 +33,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union ${PARAMS_UNION} params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union ${PARAMS_UNION} params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= ${MR});
diff --git a/src/qs8-igemm/c8-neon-mull.c.in b/src/qs8-igemm/c8-neon-mull.c.in
index 5dcdd19..bbadb91 100644
--- a/src/qs8-igemm/c8-neon-mull.c.in
+++ b/src/qs8-igemm/c8-neon-mull.c.in
@@ -34,7 +34,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union ${PARAMS_UNION} params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union ${PARAMS_UNION} params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= ${MR});
diff --git a/src/qs8-igemm/gen/1x16-minmax-fp32-neon-mlal-lane.c b/src/qs8-igemm/gen/1x16-minmax-fp32-neon-mlal-lane.c
index 0a2910a..59d7747 100644
--- a/src/qs8-igemm/gen/1x16-minmax-fp32-neon-mlal-lane.c
+++ b/src/qs8-igemm/gen/1x16-minmax-fp32-neon-mlal-lane.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-igemm/gen/1x16-minmax-fp32-neonv8-mlal-lane.c b/src/qs8-igemm/gen/1x16-minmax-fp32-neonv8-mlal-lane.c
index 4f2027c..8ca42f1 100644
--- a/src/qs8-igemm/gen/1x16-minmax-fp32-neonv8-mlal-lane.c
+++ b/src/qs8-igemm/gen/1x16-minmax-fp32-neonv8-mlal-lane.c
@@ -28,7 +28,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-igemm/gen/1x16-minmax-rndnu-neon-mlal-lane-prfm.c b/src/qs8-igemm/gen/1x16-minmax-rndnu-neon-mlal-lane-prfm.c
index c443789..04d069f 100644
--- a/src/qs8-igemm/gen/1x16-minmax-rndnu-neon-mlal-lane-prfm.c
+++ b/src/qs8-igemm/gen/1x16-minmax-rndnu-neon-mlal-lane-prfm.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-igemm/gen/1x16-minmax-rndnu-neon-mlal-lane.c b/src/qs8-igemm/gen/1x16-minmax-rndnu-neon-mlal-lane.c
index 44eedd9..8f9d53f 100644
--- a/src/qs8-igemm/gen/1x16-minmax-rndnu-neon-mlal-lane.c
+++ b/src/qs8-igemm/gen/1x16-minmax-rndnu-neon-mlal-lane.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-igemm/gen/1x16-minmax-rndnu-neon-mull-addw-dup.c b/src/qs8-igemm/gen/1x16-minmax-rndnu-neon-mull-addw-dup.c
index c988b2f..9ded7fd 100644
--- a/src/qs8-igemm/gen/1x16-minmax-rndnu-neon-mull-addw-dup.c
+++ b/src/qs8-igemm/gen/1x16-minmax-rndnu-neon-mull-addw-dup.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-igemm/gen/1x16c16-minmax-rndnu-neon-mlal.c b/src/qs8-igemm/gen/1x16c16-minmax-rndnu-neon-mlal.c
index 28042c7..49b9014 100644
--- a/src/qs8-igemm/gen/1x16c16-minmax-rndnu-neon-mlal.c
+++ b/src/qs8-igemm/gen/1x16c16-minmax-rndnu-neon-mlal.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-igemm/gen/1x16c2-minmax-rndnu-neon-mlal-dup.c b/src/qs8-igemm/gen/1x16c2-minmax-rndnu-neon-mlal-dup.c
index e0bfbf0..85dfeac 100644
--- a/src/qs8-igemm/gen/1x16c2-minmax-rndnu-neon-mlal-dup.c
+++ b/src/qs8-igemm/gen/1x16c2-minmax-rndnu-neon-mlal-dup.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-igemm/gen/1x16c2-minmax-rndnu-neon-mlal-ld1r.c b/src/qs8-igemm/gen/1x16c2-minmax-rndnu-neon-mlal-ld1r.c
index c5260b6..966a137 100644
--- a/src/qs8-igemm/gen/1x16c2-minmax-rndnu-neon-mlal-ld1r.c
+++ b/src/qs8-igemm/gen/1x16c2-minmax-rndnu-neon-mlal-ld1r.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-igemm/gen/1x16c2-minmax-rndnu-neon-mlal-ld2r.c b/src/qs8-igemm/gen/1x16c2-minmax-rndnu-neon-mlal-ld2r.c
index 35b3ac4..c69eb71 100644
--- a/src/qs8-igemm/gen/1x16c2-minmax-rndnu-neon-mlal-ld2r.c
+++ b/src/qs8-igemm/gen/1x16c2-minmax-rndnu-neon-mlal-ld2r.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-igemm/gen/1x16c2-minmax-rndnu-neon-mlal-ld4r.c b/src/qs8-igemm/gen/1x16c2-minmax-rndnu-neon-mlal-ld4r.c
index 3e16f05..d6ad0c5 100644
--- a/src/qs8-igemm/gen/1x16c2-minmax-rndnu-neon-mlal-ld4r.c
+++ b/src/qs8-igemm/gen/1x16c2-minmax-rndnu-neon-mlal-ld4r.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-igemm/gen/1x16c2-minmax-rndnu-neon-mull-dup.c b/src/qs8-igemm/gen/1x16c2-minmax-rndnu-neon-mull-dup.c
index 05c83a8..d3d3313 100644
--- a/src/qs8-igemm/gen/1x16c2-minmax-rndnu-neon-mull-dup.c
+++ b/src/qs8-igemm/gen/1x16c2-minmax-rndnu-neon-mull-dup.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-igemm/gen/1x16c2-minmax-rndnu-neon-mull-ld1r.c b/src/qs8-igemm/gen/1x16c2-minmax-rndnu-neon-mull-ld1r.c
index 6210240..ea6c5d1 100644
--- a/src/qs8-igemm/gen/1x16c2-minmax-rndnu-neon-mull-ld1r.c
+++ b/src/qs8-igemm/gen/1x16c2-minmax-rndnu-neon-mull-ld1r.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-igemm/gen/1x16c2-minmax-rndnu-neon-mull-ld2r.c b/src/qs8-igemm/gen/1x16c2-minmax-rndnu-neon-mull-ld2r.c
index 90140cd..1384591 100644
--- a/src/qs8-igemm/gen/1x16c2-minmax-rndnu-neon-mull-ld2r.c
+++ b/src/qs8-igemm/gen/1x16c2-minmax-rndnu-neon-mull-ld2r.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-igemm/gen/1x16c2-minmax-rndnu-neon-mull-ld4r.c b/src/qs8-igemm/gen/1x16c2-minmax-rndnu-neon-mull-ld4r.c
index 8f131ff..1e4cd5a 100644
--- a/src/qs8-igemm/gen/1x16c2-minmax-rndnu-neon-mull-ld4r.c
+++ b/src/qs8-igemm/gen/1x16c2-minmax-rndnu-neon-mull-ld4r.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-igemm/gen/1x16c2s4-minmax-rndnu-neon-mlal.c b/src/qs8-igemm/gen/1x16c2s4-minmax-rndnu-neon-mlal.c
index e76cf77..eb79fe8 100644
--- a/src/qs8-igemm/gen/1x16c2s4-minmax-rndnu-neon-mlal.c
+++ b/src/qs8-igemm/gen/1x16c2s4-minmax-rndnu-neon-mlal.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-igemm/gen/1x16c2s4-minmax-rndnu-neon-mull.c b/src/qs8-igemm/gen/1x16c2s4-minmax-rndnu-neon-mull.c
index 5ad8270..27622a7 100644
--- a/src/qs8-igemm/gen/1x16c2s4-minmax-rndnu-neon-mull.c
+++ b/src/qs8-igemm/gen/1x16c2s4-minmax-rndnu-neon-mull.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-igemm/gen/1x16c4-minmax-rndnu-neon-mlal-dup.c b/src/qs8-igemm/gen/1x16c4-minmax-rndnu-neon-mlal-dup.c
index 31f6c4e..632abf2 100644
--- a/src/qs8-igemm/gen/1x16c4-minmax-rndnu-neon-mlal-dup.c
+++ b/src/qs8-igemm/gen/1x16c4-minmax-rndnu-neon-mlal-dup.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-igemm/gen/1x16c4-minmax-rndnu-neon-mlal-ld1r.c b/src/qs8-igemm/gen/1x16c4-minmax-rndnu-neon-mlal-ld1r.c
index 04200f1..b929b1c 100644
--- a/src/qs8-igemm/gen/1x16c4-minmax-rndnu-neon-mlal-ld1r.c
+++ b/src/qs8-igemm/gen/1x16c4-minmax-rndnu-neon-mlal-ld1r.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-igemm/gen/1x16c4-minmax-rndnu-neon-mlal-ld2r.c b/src/qs8-igemm/gen/1x16c4-minmax-rndnu-neon-mlal-ld2r.c
index 41119ac..064920f 100644
--- a/src/qs8-igemm/gen/1x16c4-minmax-rndnu-neon-mlal-ld2r.c
+++ b/src/qs8-igemm/gen/1x16c4-minmax-rndnu-neon-mlal-ld2r.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-igemm/gen/1x16c4-minmax-rndnu-neon-mull-dup.c b/src/qs8-igemm/gen/1x16c4-minmax-rndnu-neon-mull-dup.c
index f919caa..be0637a 100644
--- a/src/qs8-igemm/gen/1x16c4-minmax-rndnu-neon-mull-dup.c
+++ b/src/qs8-igemm/gen/1x16c4-minmax-rndnu-neon-mull-dup.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-igemm/gen/1x16c4-minmax-rndnu-neon-mull-ld1r.c b/src/qs8-igemm/gen/1x16c4-minmax-rndnu-neon-mull-ld1r.c
index 4adb472..ba07808 100644
--- a/src/qs8-igemm/gen/1x16c4-minmax-rndnu-neon-mull-ld1r.c
+++ b/src/qs8-igemm/gen/1x16c4-minmax-rndnu-neon-mull-ld1r.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-igemm/gen/1x16c4-minmax-rndnu-neon-mull-ld2r.c b/src/qs8-igemm/gen/1x16c4-minmax-rndnu-neon-mull-ld2r.c
index eea34d8..1b96f7f 100644
--- a/src/qs8-igemm/gen/1x16c4-minmax-rndnu-neon-mull-ld2r.c
+++ b/src/qs8-igemm/gen/1x16c4-minmax-rndnu-neon-mull-ld2r.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-igemm/gen/1x16c4-minmax-rndnu-neondot.c b/src/qs8-igemm/gen/1x16c4-minmax-rndnu-neondot.c
index ac7533d..504e54d 100644
--- a/src/qs8-igemm/gen/1x16c4-minmax-rndnu-neondot.c
+++ b/src/qs8-igemm/gen/1x16c4-minmax-rndnu-neondot.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-igemm/gen/1x16c4s2-minmax-rndnu-neon-mlal.c b/src/qs8-igemm/gen/1x16c4s2-minmax-rndnu-neon-mlal.c
index 8ddbe3c..3808403 100644
--- a/src/qs8-igemm/gen/1x16c4s2-minmax-rndnu-neon-mlal.c
+++ b/src/qs8-igemm/gen/1x16c4s2-minmax-rndnu-neon-mlal.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-igemm/gen/1x16c4s2-minmax-rndnu-neon-mull.c b/src/qs8-igemm/gen/1x16c4s2-minmax-rndnu-neon-mull.c
index f3c4577..4f7e340 100644
--- a/src/qs8-igemm/gen/1x16c4s2-minmax-rndnu-neon-mull.c
+++ b/src/qs8-igemm/gen/1x16c4s2-minmax-rndnu-neon-mull.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-igemm/gen/1x16c8-minmax-fp32-avx512skx.c b/src/qs8-igemm/gen/1x16c8-minmax-fp32-avx512skx.c
index 5bd74d7..3f61fe3 100644
--- a/src/qs8-igemm/gen/1x16c8-minmax-fp32-avx512skx.c
+++ b/src/qs8-igemm/gen/1x16c8-minmax-fp32-avx512skx.c
@@ -28,7 +28,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-igemm/gen/1x16c8-minmax-rndnu-neon-mlal.c b/src/qs8-igemm/gen/1x16c8-minmax-rndnu-neon-mlal.c
index c736ebc..e78ab20 100644
--- a/src/qs8-igemm/gen/1x16c8-minmax-rndnu-neon-mlal.c
+++ b/src/qs8-igemm/gen/1x16c8-minmax-rndnu-neon-mlal.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-igemm/gen/1x16c8-minmax-rndnu-neon-mull.c b/src/qs8-igemm/gen/1x16c8-minmax-rndnu-neon-mull.c
index e2d1e94..8d39634 100644
--- a/src/qs8-igemm/gen/1x16c8-minmax-rndnu-neon-mull.c
+++ b/src/qs8-igemm/gen/1x16c8-minmax-rndnu-neon-mull.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-igemm/gen/1x4c2-minmax-fp32-avx-ld128.c b/src/qs8-igemm/gen/1x4c2-minmax-fp32-avx-ld128.c
index 5ac202d..4edf09b 100644
--- a/src/qs8-igemm/gen/1x4c2-minmax-fp32-avx-ld128.c
+++ b/src/qs8-igemm/gen/1x4c2-minmax-fp32-avx-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-igemm/gen/1x4c2-minmax-fp32-avx-ld64.c b/src/qs8-igemm/gen/1x4c2-minmax-fp32-avx-ld64.c
index c23c98b..053ee6c 100644
--- a/src/qs8-igemm/gen/1x4c2-minmax-fp32-avx-ld64.c
+++ b/src/qs8-igemm/gen/1x4c2-minmax-fp32-avx-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-igemm/gen/1x4c2-minmax-fp32-sse2-ld128.c b/src/qs8-igemm/gen/1x4c2-minmax-fp32-sse2-ld128.c
index 2936429..b078d7c 100644
--- a/src/qs8-igemm/gen/1x4c2-minmax-fp32-sse2-ld128.c
+++ b/src/qs8-igemm/gen/1x4c2-minmax-fp32-sse2-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-igemm/gen/1x4c2-minmax-fp32-sse2-ld64.c b/src/qs8-igemm/gen/1x4c2-minmax-fp32-sse2-ld64.c
index 3fb69ee..56994f5 100644
--- a/src/qs8-igemm/gen/1x4c2-minmax-fp32-sse2-ld64.c
+++ b/src/qs8-igemm/gen/1x4c2-minmax-fp32-sse2-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-igemm/gen/1x4c2-minmax-fp32-sse41-ld128.c b/src/qs8-igemm/gen/1x4c2-minmax-fp32-sse41-ld128.c
index 77c5c4d..aa92707 100644
--- a/src/qs8-igemm/gen/1x4c2-minmax-fp32-sse41-ld128.c
+++ b/src/qs8-igemm/gen/1x4c2-minmax-fp32-sse41-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-igemm/gen/1x4c2-minmax-fp32-sse41-ld64.c b/src/qs8-igemm/gen/1x4c2-minmax-fp32-sse41-ld64.c
index a93b469..19c1d1b 100644
--- a/src/qs8-igemm/gen/1x4c2-minmax-fp32-sse41-ld64.c
+++ b/src/qs8-igemm/gen/1x4c2-minmax-fp32-sse41-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-igemm/gen/1x4c2-minmax-fp32-wasmsimd-dot16x2-ld128.c b/src/qs8-igemm/gen/1x4c2-minmax-fp32-wasmsimd-dot16x2-ld128.c
index 5aecba1..8139204 100644
--- a/src/qs8-igemm/gen/1x4c2-minmax-fp32-wasmsimd-dot16x2-ld128.c
+++ b/src/qs8-igemm/gen/1x4c2-minmax-fp32-wasmsimd-dot16x2-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-igemm/gen/1x4c2-minmax-fp32-wasmsimd-dot16x2-ld64.c b/src/qs8-igemm/gen/1x4c2-minmax-fp32-wasmsimd-dot16x2-ld64.c
index a4ee9f0..a5ec705 100644
--- a/src/qs8-igemm/gen/1x4c2-minmax-fp32-wasmsimd-dot16x2-ld64.c
+++ b/src/qs8-igemm/gen/1x4c2-minmax-fp32-wasmsimd-dot16x2-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-igemm/gen/1x4c2-minmax-fp32-xop-ld128.c b/src/qs8-igemm/gen/1x4c2-minmax-fp32-xop-ld128.c
index be9c4ca..4d22d86 100644
--- a/src/qs8-igemm/gen/1x4c2-minmax-fp32-xop-ld128.c
+++ b/src/qs8-igemm/gen/1x4c2-minmax-fp32-xop-ld128.c
@@ -32,7 +32,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-igemm/gen/1x4c2-minmax-fp32-xop-ld64.c b/src/qs8-igemm/gen/1x4c2-minmax-fp32-xop-ld64.c
index 6aa6266..da9d541 100644
--- a/src/qs8-igemm/gen/1x4c2-minmax-fp32-xop-ld64.c
+++ b/src/qs8-igemm/gen/1x4c2-minmax-fp32-xop-ld64.c
@@ -32,7 +32,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-igemm/gen/1x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld128.c b/src/qs8-igemm/gen/1x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld128.c
index 3e030d2..108c560 100644
--- a/src/qs8-igemm/gen/1x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld128.c
+++ b/src/qs8-igemm/gen/1x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-igemm/gen/1x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld64.c b/src/qs8-igemm/gen/1x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld64.c
index d59b412..4ee73d0 100644
--- a/src/qs8-igemm/gen/1x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld64.c
+++ b/src/qs8-igemm/gen/1x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-igemm/gen/1x4c8-minmax-fp32-avx-ld128.c b/src/qs8-igemm/gen/1x4c8-minmax-fp32-avx-ld128.c
index 8256ce3..70385c8 100644
--- a/src/qs8-igemm/gen/1x4c8-minmax-fp32-avx-ld128.c
+++ b/src/qs8-igemm/gen/1x4c8-minmax-fp32-avx-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-igemm/gen/1x4c8-minmax-fp32-avx-ld64.c b/src/qs8-igemm/gen/1x4c8-minmax-fp32-avx-ld64.c
index a05259b..59631f3 100644
--- a/src/qs8-igemm/gen/1x4c8-minmax-fp32-avx-ld64.c
+++ b/src/qs8-igemm/gen/1x4c8-minmax-fp32-avx-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-igemm/gen/1x4c8-minmax-fp32-sse2-ld128.c b/src/qs8-igemm/gen/1x4c8-minmax-fp32-sse2-ld128.c
index 04ad1b9..773d51a 100644
--- a/src/qs8-igemm/gen/1x4c8-minmax-fp32-sse2-ld128.c
+++ b/src/qs8-igemm/gen/1x4c8-minmax-fp32-sse2-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-igemm/gen/1x4c8-minmax-fp32-sse2-ld64.c b/src/qs8-igemm/gen/1x4c8-minmax-fp32-sse2-ld64.c
index 29aef93..fe688e9 100644
--- a/src/qs8-igemm/gen/1x4c8-minmax-fp32-sse2-ld64.c
+++ b/src/qs8-igemm/gen/1x4c8-minmax-fp32-sse2-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-igemm/gen/1x4c8-minmax-fp32-sse41-ld128.c b/src/qs8-igemm/gen/1x4c8-minmax-fp32-sse41-ld128.c
index 953cb5a..57c0429 100644
--- a/src/qs8-igemm/gen/1x4c8-minmax-fp32-sse41-ld128.c
+++ b/src/qs8-igemm/gen/1x4c8-minmax-fp32-sse41-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-igemm/gen/1x4c8-minmax-fp32-sse41-ld64.c b/src/qs8-igemm/gen/1x4c8-minmax-fp32-sse41-ld64.c
index ff87400..44d07b9 100644
--- a/src/qs8-igemm/gen/1x4c8-minmax-fp32-sse41-ld64.c
+++ b/src/qs8-igemm/gen/1x4c8-minmax-fp32-sse41-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-igemm/gen/1x4c8-minmax-fp32-ssse3-ld128.c b/src/qs8-igemm/gen/1x4c8-minmax-fp32-ssse3-ld128.c
index 8d57f3c..338b3df 100644
--- a/src/qs8-igemm/gen/1x4c8-minmax-fp32-ssse3-ld128.c
+++ b/src/qs8-igemm/gen/1x4c8-minmax-fp32-ssse3-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-igemm/gen/1x4c8-minmax-fp32-ssse3-ld64.c b/src/qs8-igemm/gen/1x4c8-minmax-fp32-ssse3-ld64.c
index cd7455f..add3721 100644
--- a/src/qs8-igemm/gen/1x4c8-minmax-fp32-ssse3-ld64.c
+++ b/src/qs8-igemm/gen/1x4c8-minmax-fp32-ssse3-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-igemm/gen/1x4c8-minmax-fp32-wasmsimd-dot16x2-ld128.c b/src/qs8-igemm/gen/1x4c8-minmax-fp32-wasmsimd-dot16x2-ld128.c
index 7791484..aaabe59 100644
--- a/src/qs8-igemm/gen/1x4c8-minmax-fp32-wasmsimd-dot16x2-ld128.c
+++ b/src/qs8-igemm/gen/1x4c8-minmax-fp32-wasmsimd-dot16x2-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-igemm/gen/1x4c8-minmax-fp32-wasmsimd-dot16x2-ld64.c b/src/qs8-igemm/gen/1x4c8-minmax-fp32-wasmsimd-dot16x2-ld64.c
index 42b106f..52537ee 100644
--- a/src/qs8-igemm/gen/1x4c8-minmax-fp32-wasmsimd-dot16x2-ld64.c
+++ b/src/qs8-igemm/gen/1x4c8-minmax-fp32-wasmsimd-dot16x2-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-igemm/gen/1x4c8-minmax-fp32-wasmsimd-mul16-ld128.c b/src/qs8-igemm/gen/1x4c8-minmax-fp32-wasmsimd-mul16-ld128.c
index 3797019..4d93afa 100644
--- a/src/qs8-igemm/gen/1x4c8-minmax-fp32-wasmsimd-mul16-ld128.c
+++ b/src/qs8-igemm/gen/1x4c8-minmax-fp32-wasmsimd-mul16-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-igemm/gen/1x4c8-minmax-fp32-wasmsimd-mul16-ld64.c b/src/qs8-igemm/gen/1x4c8-minmax-fp32-wasmsimd-mul16-ld64.c
index 5cf23b4..d817e38 100644
--- a/src/qs8-igemm/gen/1x4c8-minmax-fp32-wasmsimd-mul16-ld64.c
+++ b/src/qs8-igemm/gen/1x4c8-minmax-fp32-wasmsimd-mul16-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-igemm/gen/1x4c8-minmax-fp32-xop-ld128.c b/src/qs8-igemm/gen/1x4c8-minmax-fp32-xop-ld128.c
index 0a89973..7ba275f 100644
--- a/src/qs8-igemm/gen/1x4c8-minmax-fp32-xop-ld128.c
+++ b/src/qs8-igemm/gen/1x4c8-minmax-fp32-xop-ld128.c
@@ -32,7 +32,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-igemm/gen/1x4c8-minmax-fp32-xop-ld64.c b/src/qs8-igemm/gen/1x4c8-minmax-fp32-xop-ld64.c
index 56858d7..63f282b 100644
--- a/src/qs8-igemm/gen/1x4c8-minmax-fp32-xop-ld64.c
+++ b/src/qs8-igemm/gen/1x4c8-minmax-fp32-xop-ld64.c
@@ -32,7 +32,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-igemm/gen/1x8-minmax-rndnu-neon-mlal-lane-prfm.c b/src/qs8-igemm/gen/1x8-minmax-rndnu-neon-mlal-lane-prfm.c
index 7fa6e34..ada3361 100644
--- a/src/qs8-igemm/gen/1x8-minmax-rndnu-neon-mlal-lane-prfm.c
+++ b/src/qs8-igemm/gen/1x8-minmax-rndnu-neon-mlal-lane-prfm.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-igemm/gen/1x8-minmax-rndnu-neon-mlal-lane.c b/src/qs8-igemm/gen/1x8-minmax-rndnu-neon-mlal-lane.c
index ff59aed..ee52b95 100644
--- a/src/qs8-igemm/gen/1x8-minmax-rndnu-neon-mlal-lane.c
+++ b/src/qs8-igemm/gen/1x8-minmax-rndnu-neon-mlal-lane.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-igemm/gen/1x8-minmax-rndnu-neon-mull-addw-dup.c b/src/qs8-igemm/gen/1x8-minmax-rndnu-neon-mull-addw-dup.c
index 5655f6e..e14c56e 100644
--- a/src/qs8-igemm/gen/1x8-minmax-rndnu-neon-mull-addw-dup.c
+++ b/src/qs8-igemm/gen/1x8-minmax-rndnu-neon-mull-addw-dup.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-igemm/gen/1x8c16-minmax-rndnu-neon-mlal.c b/src/qs8-igemm/gen/1x8c16-minmax-rndnu-neon-mlal.c
index eb8e5ce..550d035 100644
--- a/src/qs8-igemm/gen/1x8c16-minmax-rndnu-neon-mlal.c
+++ b/src/qs8-igemm/gen/1x8c16-minmax-rndnu-neon-mlal.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-igemm/gen/1x8c2-minmax-fp32-neon-mlal-dup.c b/src/qs8-igemm/gen/1x8c2-minmax-fp32-neon-mlal-dup.c
index 2346838..f17f355 100644
--- a/src/qs8-igemm/gen/1x8c2-minmax-fp32-neon-mlal-dup.c
+++ b/src/qs8-igemm/gen/1x8c2-minmax-fp32-neon-mlal-dup.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-igemm/gen/1x8c2-minmax-fp32-neon-mlal-ld1r.c b/src/qs8-igemm/gen/1x8c2-minmax-fp32-neon-mlal-ld1r.c
index 7932a25..dbe2f8c 100644
--- a/src/qs8-igemm/gen/1x8c2-minmax-fp32-neon-mlal-ld1r.c
+++ b/src/qs8-igemm/gen/1x8c2-minmax-fp32-neon-mlal-ld1r.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-igemm/gen/1x8c2-minmax-fp32-neon-mlal-ld2r.c b/src/qs8-igemm/gen/1x8c2-minmax-fp32-neon-mlal-ld2r.c
index 39dc343..6bd7631 100644
--- a/src/qs8-igemm/gen/1x8c2-minmax-fp32-neon-mlal-ld2r.c
+++ b/src/qs8-igemm/gen/1x8c2-minmax-fp32-neon-mlal-ld2r.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-igemm/gen/1x8c2-minmax-fp32-neon-mlal-ld4r.c b/src/qs8-igemm/gen/1x8c2-minmax-fp32-neon-mlal-ld4r.c
index 4be0beb..5cf5619 100644
--- a/src/qs8-igemm/gen/1x8c2-minmax-fp32-neon-mlal-ld4r.c
+++ b/src/qs8-igemm/gen/1x8c2-minmax-fp32-neon-mlal-ld4r.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-igemm/gen/1x8c2-minmax-fp32-neonv8-mlal-dup.c b/src/qs8-igemm/gen/1x8c2-minmax-fp32-neonv8-mlal-dup.c
index 35f8d4e..15e588c 100644
--- a/src/qs8-igemm/gen/1x8c2-minmax-fp32-neonv8-mlal-dup.c
+++ b/src/qs8-igemm/gen/1x8c2-minmax-fp32-neonv8-mlal-dup.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-igemm/gen/1x8c2-minmax-fp32-neonv8-mlal-ld1r.c b/src/qs8-igemm/gen/1x8c2-minmax-fp32-neonv8-mlal-ld1r.c
index fd4c67d..e705445 100644
--- a/src/qs8-igemm/gen/1x8c2-minmax-fp32-neonv8-mlal-ld1r.c
+++ b/src/qs8-igemm/gen/1x8c2-minmax-fp32-neonv8-mlal-ld1r.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-igemm/gen/1x8c2-minmax-fp32-neonv8-mlal-ld2r.c b/src/qs8-igemm/gen/1x8c2-minmax-fp32-neonv8-mlal-ld2r.c
index 746cf24..72c0b9f 100644
--- a/src/qs8-igemm/gen/1x8c2-minmax-fp32-neonv8-mlal-ld2r.c
+++ b/src/qs8-igemm/gen/1x8c2-minmax-fp32-neonv8-mlal-ld2r.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-igemm/gen/1x8c2-minmax-fp32-neonv8-mlal-ld4r.c b/src/qs8-igemm/gen/1x8c2-minmax-fp32-neonv8-mlal-ld4r.c
index 16416a6..3838615 100644
--- a/src/qs8-igemm/gen/1x8c2-minmax-fp32-neonv8-mlal-ld4r.c
+++ b/src/qs8-igemm/gen/1x8c2-minmax-fp32-neonv8-mlal-ld4r.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-igemm/gen/1x8c2-minmax-rndnu-neon-mlal-dup.c b/src/qs8-igemm/gen/1x8c2-minmax-rndnu-neon-mlal-dup.c
index 0294158..aa9e936 100644
--- a/src/qs8-igemm/gen/1x8c2-minmax-rndnu-neon-mlal-dup.c
+++ b/src/qs8-igemm/gen/1x8c2-minmax-rndnu-neon-mlal-dup.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-igemm/gen/1x8c2-minmax-rndnu-neon-mlal-ld1r.c b/src/qs8-igemm/gen/1x8c2-minmax-rndnu-neon-mlal-ld1r.c
index be68071..79eb6e4 100644
--- a/src/qs8-igemm/gen/1x8c2-minmax-rndnu-neon-mlal-ld1r.c
+++ b/src/qs8-igemm/gen/1x8c2-minmax-rndnu-neon-mlal-ld1r.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-igemm/gen/1x8c2-minmax-rndnu-neon-mlal-ld2r.c b/src/qs8-igemm/gen/1x8c2-minmax-rndnu-neon-mlal-ld2r.c
index 841c27a..cfaa3bf 100644
--- a/src/qs8-igemm/gen/1x8c2-minmax-rndnu-neon-mlal-ld2r.c
+++ b/src/qs8-igemm/gen/1x8c2-minmax-rndnu-neon-mlal-ld2r.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-igemm/gen/1x8c2-minmax-rndnu-neon-mlal-ld4r.c b/src/qs8-igemm/gen/1x8c2-minmax-rndnu-neon-mlal-ld4r.c
index 90be463..1f53562 100644
--- a/src/qs8-igemm/gen/1x8c2-minmax-rndnu-neon-mlal-ld4r.c
+++ b/src/qs8-igemm/gen/1x8c2-minmax-rndnu-neon-mlal-ld4r.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-igemm/gen/1x8c2-minmax-rndnu-neon-mull-dup.c b/src/qs8-igemm/gen/1x8c2-minmax-rndnu-neon-mull-dup.c
index 17ec0ef..723a140 100644
--- a/src/qs8-igemm/gen/1x8c2-minmax-rndnu-neon-mull-dup.c
+++ b/src/qs8-igemm/gen/1x8c2-minmax-rndnu-neon-mull-dup.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-igemm/gen/1x8c2-minmax-rndnu-neon-mull-ld1r.c b/src/qs8-igemm/gen/1x8c2-minmax-rndnu-neon-mull-ld1r.c
index 5e2f733..401c62a 100644
--- a/src/qs8-igemm/gen/1x8c2-minmax-rndnu-neon-mull-ld1r.c
+++ b/src/qs8-igemm/gen/1x8c2-minmax-rndnu-neon-mull-ld1r.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-igemm/gen/1x8c2-minmax-rndnu-neon-mull-ld2r.c b/src/qs8-igemm/gen/1x8c2-minmax-rndnu-neon-mull-ld2r.c
index 740d115..6b65612 100644
--- a/src/qs8-igemm/gen/1x8c2-minmax-rndnu-neon-mull-ld2r.c
+++ b/src/qs8-igemm/gen/1x8c2-minmax-rndnu-neon-mull-ld2r.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-igemm/gen/1x8c2-minmax-rndnu-neon-mull-ld4r.c b/src/qs8-igemm/gen/1x8c2-minmax-rndnu-neon-mull-ld4r.c
index 2d6c8b0..abe7479 100644
--- a/src/qs8-igemm/gen/1x8c2-minmax-rndnu-neon-mull-ld4r.c
+++ b/src/qs8-igemm/gen/1x8c2-minmax-rndnu-neon-mull-ld4r.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-igemm/gen/1x8c2s4-minmax-fp32-neon-mlal.c b/src/qs8-igemm/gen/1x8c2s4-minmax-fp32-neon-mlal.c
index 57297f2..79ad4cb 100644
--- a/src/qs8-igemm/gen/1x8c2s4-minmax-fp32-neon-mlal.c
+++ b/src/qs8-igemm/gen/1x8c2s4-minmax-fp32-neon-mlal.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-igemm/gen/1x8c2s4-minmax-fp32-neonv8-mlal.c b/src/qs8-igemm/gen/1x8c2s4-minmax-fp32-neonv8-mlal.c
index 425cbc2..9bcf1c1 100644
--- a/src/qs8-igemm/gen/1x8c2s4-minmax-fp32-neonv8-mlal.c
+++ b/src/qs8-igemm/gen/1x8c2s4-minmax-fp32-neonv8-mlal.c
@@ -28,7 +28,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-igemm/gen/1x8c2s4-minmax-rndnu-neon-mlal.c b/src/qs8-igemm/gen/1x8c2s4-minmax-rndnu-neon-mlal.c
index 91c1f00..aae557b 100644
--- a/src/qs8-igemm/gen/1x8c2s4-minmax-rndnu-neon-mlal.c
+++ b/src/qs8-igemm/gen/1x8c2s4-minmax-rndnu-neon-mlal.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-igemm/gen/1x8c2s4-minmax-rndnu-neon-mull.c b/src/qs8-igemm/gen/1x8c2s4-minmax-rndnu-neon-mull.c
index c3be4e0..a0851f0 100644
--- a/src/qs8-igemm/gen/1x8c2s4-minmax-rndnu-neon-mull.c
+++ b/src/qs8-igemm/gen/1x8c2s4-minmax-rndnu-neon-mull.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-igemm/gen/1x8c4-minmax-fp32-neon-mlal-dup.c b/src/qs8-igemm/gen/1x8c4-minmax-fp32-neon-mlal-dup.c
index af80007..df491eb 100644
--- a/src/qs8-igemm/gen/1x8c4-minmax-fp32-neon-mlal-dup.c
+++ b/src/qs8-igemm/gen/1x8c4-minmax-fp32-neon-mlal-dup.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-igemm/gen/1x8c4-minmax-fp32-neon-mlal-ld1r.c b/src/qs8-igemm/gen/1x8c4-minmax-fp32-neon-mlal-ld1r.c
index e2fe698..c1ca6f2 100644
--- a/src/qs8-igemm/gen/1x8c4-minmax-fp32-neon-mlal-ld1r.c
+++ b/src/qs8-igemm/gen/1x8c4-minmax-fp32-neon-mlal-ld1r.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-igemm/gen/1x8c4-minmax-fp32-neon-mlal-ld2r.c b/src/qs8-igemm/gen/1x8c4-minmax-fp32-neon-mlal-ld2r.c
index 01333a3..ce68a33 100644
--- a/src/qs8-igemm/gen/1x8c4-minmax-fp32-neon-mlal-ld2r.c
+++ b/src/qs8-igemm/gen/1x8c4-minmax-fp32-neon-mlal-ld2r.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-igemm/gen/1x8c4-minmax-fp32-neondot.c b/src/qs8-igemm/gen/1x8c4-minmax-fp32-neondot.c
index b25f8ea..d60bb54 100644
--- a/src/qs8-igemm/gen/1x8c4-minmax-fp32-neondot.c
+++ b/src/qs8-igemm/gen/1x8c4-minmax-fp32-neondot.c
@@ -28,7 +28,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-igemm/gen/1x8c4-minmax-fp32-neonv8-mlal-dup.c b/src/qs8-igemm/gen/1x8c4-minmax-fp32-neonv8-mlal-dup.c
index be5d424..251856b 100644
--- a/src/qs8-igemm/gen/1x8c4-minmax-fp32-neonv8-mlal-dup.c
+++ b/src/qs8-igemm/gen/1x8c4-minmax-fp32-neonv8-mlal-dup.c
@@ -28,7 +28,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-igemm/gen/1x8c4-minmax-fp32-neonv8-mlal-ld1r.c b/src/qs8-igemm/gen/1x8c4-minmax-fp32-neonv8-mlal-ld1r.c
index 30ff06c..e92ac99 100644
--- a/src/qs8-igemm/gen/1x8c4-minmax-fp32-neonv8-mlal-ld1r.c
+++ b/src/qs8-igemm/gen/1x8c4-minmax-fp32-neonv8-mlal-ld1r.c
@@ -28,7 +28,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-igemm/gen/1x8c4-minmax-fp32-neonv8-mlal-ld2r.c b/src/qs8-igemm/gen/1x8c4-minmax-fp32-neonv8-mlal-ld2r.c
index 52d60d3..a48ff28 100644
--- a/src/qs8-igemm/gen/1x8c4-minmax-fp32-neonv8-mlal-ld2r.c
+++ b/src/qs8-igemm/gen/1x8c4-minmax-fp32-neonv8-mlal-ld2r.c
@@ -28,7 +28,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-igemm/gen/1x8c4-minmax-rndnu-neon-mlal-dup.c b/src/qs8-igemm/gen/1x8c4-minmax-rndnu-neon-mlal-dup.c
index 19e33b0..922acda 100644
--- a/src/qs8-igemm/gen/1x8c4-minmax-rndnu-neon-mlal-dup.c
+++ b/src/qs8-igemm/gen/1x8c4-minmax-rndnu-neon-mlal-dup.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-igemm/gen/1x8c4-minmax-rndnu-neon-mlal-ld1r.c b/src/qs8-igemm/gen/1x8c4-minmax-rndnu-neon-mlal-ld1r.c
index d717093..8be89f3 100644
--- a/src/qs8-igemm/gen/1x8c4-minmax-rndnu-neon-mlal-ld1r.c
+++ b/src/qs8-igemm/gen/1x8c4-minmax-rndnu-neon-mlal-ld1r.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-igemm/gen/1x8c4-minmax-rndnu-neon-mlal-ld2r.c b/src/qs8-igemm/gen/1x8c4-minmax-rndnu-neon-mlal-ld2r.c
index e978089..02ae30e 100644
--- a/src/qs8-igemm/gen/1x8c4-minmax-rndnu-neon-mlal-ld2r.c
+++ b/src/qs8-igemm/gen/1x8c4-minmax-rndnu-neon-mlal-ld2r.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-igemm/gen/1x8c4-minmax-rndnu-neon-mull-dup.c b/src/qs8-igemm/gen/1x8c4-minmax-rndnu-neon-mull-dup.c
index 1d270e4..52f0414 100644
--- a/src/qs8-igemm/gen/1x8c4-minmax-rndnu-neon-mull-dup.c
+++ b/src/qs8-igemm/gen/1x8c4-minmax-rndnu-neon-mull-dup.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-igemm/gen/1x8c4-minmax-rndnu-neon-mull-ld1r.c b/src/qs8-igemm/gen/1x8c4-minmax-rndnu-neon-mull-ld1r.c
index 9287279..78fdf21 100644
--- a/src/qs8-igemm/gen/1x8c4-minmax-rndnu-neon-mull-ld1r.c
+++ b/src/qs8-igemm/gen/1x8c4-minmax-rndnu-neon-mull-ld1r.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-igemm/gen/1x8c4-minmax-rndnu-neon-mull-ld2r.c b/src/qs8-igemm/gen/1x8c4-minmax-rndnu-neon-mull-ld2r.c
index a85b63f..c062468 100644
--- a/src/qs8-igemm/gen/1x8c4-minmax-rndnu-neon-mull-ld2r.c
+++ b/src/qs8-igemm/gen/1x8c4-minmax-rndnu-neon-mull-ld2r.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-igemm/gen/1x8c4-minmax-rndnu-neondot.c b/src/qs8-igemm/gen/1x8c4-minmax-rndnu-neondot.c
index 1282a45..eb2fdc6 100644
--- a/src/qs8-igemm/gen/1x8c4-minmax-rndnu-neondot.c
+++ b/src/qs8-igemm/gen/1x8c4-minmax-rndnu-neondot.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-igemm/gen/1x8c4s2-minmax-fp32-neon-mlal.c b/src/qs8-igemm/gen/1x8c4s2-minmax-fp32-neon-mlal.c
index 83636d3..a21822b 100644
--- a/src/qs8-igemm/gen/1x8c4s2-minmax-fp32-neon-mlal.c
+++ b/src/qs8-igemm/gen/1x8c4s2-minmax-fp32-neon-mlal.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-igemm/gen/1x8c4s2-minmax-fp32-neonv8-mlal.c b/src/qs8-igemm/gen/1x8c4s2-minmax-fp32-neonv8-mlal.c
index 2fd6ece..71c5e2f 100644
--- a/src/qs8-igemm/gen/1x8c4s2-minmax-fp32-neonv8-mlal.c
+++ b/src/qs8-igemm/gen/1x8c4s2-minmax-fp32-neonv8-mlal.c
@@ -28,7 +28,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-igemm/gen/1x8c4s2-minmax-rndnu-neon-mlal.c b/src/qs8-igemm/gen/1x8c4s2-minmax-rndnu-neon-mlal.c
index 563ee8c..b03182f 100644
--- a/src/qs8-igemm/gen/1x8c4s2-minmax-rndnu-neon-mlal.c
+++ b/src/qs8-igemm/gen/1x8c4s2-minmax-rndnu-neon-mlal.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-igemm/gen/1x8c4s2-minmax-rndnu-neon-mull.c b/src/qs8-igemm/gen/1x8c4s2-minmax-rndnu-neon-mull.c
index fe46961..5cd1d2b 100644
--- a/src/qs8-igemm/gen/1x8c4s2-minmax-rndnu-neon-mull.c
+++ b/src/qs8-igemm/gen/1x8c4s2-minmax-rndnu-neon-mull.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-igemm/gen/1x8c8-minmax-fp32-avx2.c b/src/qs8-igemm/gen/1x8c8-minmax-fp32-avx2.c
index 8b823b5..9ebdbab 100644
--- a/src/qs8-igemm/gen/1x8c8-minmax-fp32-avx2.c
+++ b/src/qs8-igemm/gen/1x8c8-minmax-fp32-avx2.c
@@ -28,7 +28,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-igemm/gen/1x8c8-minmax-fp32-neon-mlal.c b/src/qs8-igemm/gen/1x8c8-minmax-fp32-neon-mlal.c
index 860f3dd..d3fa8ea 100644
--- a/src/qs8-igemm/gen/1x8c8-minmax-fp32-neon-mlal.c
+++ b/src/qs8-igemm/gen/1x8c8-minmax-fp32-neon-mlal.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-igemm/gen/1x8c8-minmax-fp32-neonv8-mlal.c b/src/qs8-igemm/gen/1x8c8-minmax-fp32-neonv8-mlal.c
index 0e478cb..92908ba 100644
--- a/src/qs8-igemm/gen/1x8c8-minmax-fp32-neonv8-mlal.c
+++ b/src/qs8-igemm/gen/1x8c8-minmax-fp32-neonv8-mlal.c
@@ -28,7 +28,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-igemm/gen/1x8c8-minmax-rndnu-neon-mlal.c b/src/qs8-igemm/gen/1x8c8-minmax-rndnu-neon-mlal.c
index 09c33ee..51d9e37 100644
--- a/src/qs8-igemm/gen/1x8c8-minmax-rndnu-neon-mlal.c
+++ b/src/qs8-igemm/gen/1x8c8-minmax-rndnu-neon-mlal.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-igemm/gen/1x8c8-minmax-rndnu-neon-mull.c b/src/qs8-igemm/gen/1x8c8-minmax-rndnu-neon-mull.c
index a85355c..399e44c 100644
--- a/src/qs8-igemm/gen/1x8c8-minmax-rndnu-neon-mull.c
+++ b/src/qs8-igemm/gen/1x8c8-minmax-rndnu-neon-mull.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qs8-igemm/gen/2x16-minmax-rndnu-neon-mlal-lane-prfm.c b/src/qs8-igemm/gen/2x16-minmax-rndnu-neon-mlal-lane-prfm.c
index 09d12ea..8478201 100644
--- a/src/qs8-igemm/gen/2x16-minmax-rndnu-neon-mlal-lane-prfm.c
+++ b/src/qs8-igemm/gen/2x16-minmax-rndnu-neon-mlal-lane-prfm.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-igemm/gen/2x16-minmax-rndnu-neon-mlal-lane.c b/src/qs8-igemm/gen/2x16-minmax-rndnu-neon-mlal-lane.c
index a37b4ed..8bb7e5b 100644
--- a/src/qs8-igemm/gen/2x16-minmax-rndnu-neon-mlal-lane.c
+++ b/src/qs8-igemm/gen/2x16-minmax-rndnu-neon-mlal-lane.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-igemm/gen/2x16-minmax-rndnu-neon-mull-addw-dup.c b/src/qs8-igemm/gen/2x16-minmax-rndnu-neon-mull-addw-dup.c
index 56ad04d..7c1d5d2 100644
--- a/src/qs8-igemm/gen/2x16-minmax-rndnu-neon-mull-addw-dup.c
+++ b/src/qs8-igemm/gen/2x16-minmax-rndnu-neon-mull-addw-dup.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-igemm/gen/2x16c16-minmax-rndnu-neon-mlal.c b/src/qs8-igemm/gen/2x16c16-minmax-rndnu-neon-mlal.c
index 1e7925a..2fbbf67 100644
--- a/src/qs8-igemm/gen/2x16c16-minmax-rndnu-neon-mlal.c
+++ b/src/qs8-igemm/gen/2x16c16-minmax-rndnu-neon-mlal.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-igemm/gen/2x16c2-minmax-rndnu-neon-mlal-dup.c b/src/qs8-igemm/gen/2x16c2-minmax-rndnu-neon-mlal-dup.c
index c9a7f7f..bc084bd 100644
--- a/src/qs8-igemm/gen/2x16c2-minmax-rndnu-neon-mlal-dup.c
+++ b/src/qs8-igemm/gen/2x16c2-minmax-rndnu-neon-mlal-dup.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-igemm/gen/2x16c2-minmax-rndnu-neon-mlal-ld1r.c b/src/qs8-igemm/gen/2x16c2-minmax-rndnu-neon-mlal-ld1r.c
index cab2789..7a2ae60 100644
--- a/src/qs8-igemm/gen/2x16c2-minmax-rndnu-neon-mlal-ld1r.c
+++ b/src/qs8-igemm/gen/2x16c2-minmax-rndnu-neon-mlal-ld1r.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-igemm/gen/2x16c2-minmax-rndnu-neon-mlal-ld2r.c b/src/qs8-igemm/gen/2x16c2-minmax-rndnu-neon-mlal-ld2r.c
index 84d582c..7e3dcce 100644
--- a/src/qs8-igemm/gen/2x16c2-minmax-rndnu-neon-mlal-ld2r.c
+++ b/src/qs8-igemm/gen/2x16c2-minmax-rndnu-neon-mlal-ld2r.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-igemm/gen/2x16c2-minmax-rndnu-neon-mlal-ld4r.c b/src/qs8-igemm/gen/2x16c2-minmax-rndnu-neon-mlal-ld4r.c
index 5e85cf6..e880073 100644
--- a/src/qs8-igemm/gen/2x16c2-minmax-rndnu-neon-mlal-ld4r.c
+++ b/src/qs8-igemm/gen/2x16c2-minmax-rndnu-neon-mlal-ld4r.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-igemm/gen/2x16c2-minmax-rndnu-neon-mull-dup.c b/src/qs8-igemm/gen/2x16c2-minmax-rndnu-neon-mull-dup.c
index dd2880e..ee939d6 100644
--- a/src/qs8-igemm/gen/2x16c2-minmax-rndnu-neon-mull-dup.c
+++ b/src/qs8-igemm/gen/2x16c2-minmax-rndnu-neon-mull-dup.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-igemm/gen/2x16c2-minmax-rndnu-neon-mull-ld1r.c b/src/qs8-igemm/gen/2x16c2-minmax-rndnu-neon-mull-ld1r.c
index fa04399..f0b76cc 100644
--- a/src/qs8-igemm/gen/2x16c2-minmax-rndnu-neon-mull-ld1r.c
+++ b/src/qs8-igemm/gen/2x16c2-minmax-rndnu-neon-mull-ld1r.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-igemm/gen/2x16c2-minmax-rndnu-neon-mull-ld2r.c b/src/qs8-igemm/gen/2x16c2-minmax-rndnu-neon-mull-ld2r.c
index d97145b..39b62f4 100644
--- a/src/qs8-igemm/gen/2x16c2-minmax-rndnu-neon-mull-ld2r.c
+++ b/src/qs8-igemm/gen/2x16c2-minmax-rndnu-neon-mull-ld2r.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-igemm/gen/2x16c2-minmax-rndnu-neon-mull-ld4r.c b/src/qs8-igemm/gen/2x16c2-minmax-rndnu-neon-mull-ld4r.c
index a2719d2..b419766 100644
--- a/src/qs8-igemm/gen/2x16c2-minmax-rndnu-neon-mull-ld4r.c
+++ b/src/qs8-igemm/gen/2x16c2-minmax-rndnu-neon-mull-ld4r.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-igemm/gen/2x16c2s4-minmax-rndnu-neon-mlal.c b/src/qs8-igemm/gen/2x16c2s4-minmax-rndnu-neon-mlal.c
index 4202268..802c859 100644
--- a/src/qs8-igemm/gen/2x16c2s4-minmax-rndnu-neon-mlal.c
+++ b/src/qs8-igemm/gen/2x16c2s4-minmax-rndnu-neon-mlal.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-igemm/gen/2x16c2s4-minmax-rndnu-neon-mull.c b/src/qs8-igemm/gen/2x16c2s4-minmax-rndnu-neon-mull.c
index ca1ac2d..2e0f451 100644
--- a/src/qs8-igemm/gen/2x16c2s4-minmax-rndnu-neon-mull.c
+++ b/src/qs8-igemm/gen/2x16c2s4-minmax-rndnu-neon-mull.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-igemm/gen/2x16c4-minmax-rndnu-neon-mlal-dup.c b/src/qs8-igemm/gen/2x16c4-minmax-rndnu-neon-mlal-dup.c
index 2312608..9295202 100644
--- a/src/qs8-igemm/gen/2x16c4-minmax-rndnu-neon-mlal-dup.c
+++ b/src/qs8-igemm/gen/2x16c4-minmax-rndnu-neon-mlal-dup.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-igemm/gen/2x16c4-minmax-rndnu-neon-mlal-ld1r.c b/src/qs8-igemm/gen/2x16c4-minmax-rndnu-neon-mlal-ld1r.c
index 4a43cd3..8f62977 100644
--- a/src/qs8-igemm/gen/2x16c4-minmax-rndnu-neon-mlal-ld1r.c
+++ b/src/qs8-igemm/gen/2x16c4-minmax-rndnu-neon-mlal-ld1r.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-igemm/gen/2x16c4-minmax-rndnu-neon-mlal-ld2r.c b/src/qs8-igemm/gen/2x16c4-minmax-rndnu-neon-mlal-ld2r.c
index 6d9af65..81e879c 100644
--- a/src/qs8-igemm/gen/2x16c4-minmax-rndnu-neon-mlal-ld2r.c
+++ b/src/qs8-igemm/gen/2x16c4-minmax-rndnu-neon-mlal-ld2r.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-igemm/gen/2x16c4-minmax-rndnu-neon-mull-dup.c b/src/qs8-igemm/gen/2x16c4-minmax-rndnu-neon-mull-dup.c
index 1edf82a..2f0b9ef 100644
--- a/src/qs8-igemm/gen/2x16c4-minmax-rndnu-neon-mull-dup.c
+++ b/src/qs8-igemm/gen/2x16c4-minmax-rndnu-neon-mull-dup.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-igemm/gen/2x16c4-minmax-rndnu-neon-mull-ld1r.c b/src/qs8-igemm/gen/2x16c4-minmax-rndnu-neon-mull-ld1r.c
index 96c899c..f73d7f0 100644
--- a/src/qs8-igemm/gen/2x16c4-minmax-rndnu-neon-mull-ld1r.c
+++ b/src/qs8-igemm/gen/2x16c4-minmax-rndnu-neon-mull-ld1r.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-igemm/gen/2x16c4-minmax-rndnu-neon-mull-ld2r.c b/src/qs8-igemm/gen/2x16c4-minmax-rndnu-neon-mull-ld2r.c
index 14addce..ad8b335 100644
--- a/src/qs8-igemm/gen/2x16c4-minmax-rndnu-neon-mull-ld2r.c
+++ b/src/qs8-igemm/gen/2x16c4-minmax-rndnu-neon-mull-ld2r.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-igemm/gen/2x16c4s2-minmax-rndnu-neon-mlal.c b/src/qs8-igemm/gen/2x16c4s2-minmax-rndnu-neon-mlal.c
index 8474e4a..6a646ec 100644
--- a/src/qs8-igemm/gen/2x16c4s2-minmax-rndnu-neon-mlal.c
+++ b/src/qs8-igemm/gen/2x16c4s2-minmax-rndnu-neon-mlal.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-igemm/gen/2x16c4s2-minmax-rndnu-neon-mull.c b/src/qs8-igemm/gen/2x16c4s2-minmax-rndnu-neon-mull.c
index 41afeb8..0313a55 100644
--- a/src/qs8-igemm/gen/2x16c4s2-minmax-rndnu-neon-mull.c
+++ b/src/qs8-igemm/gen/2x16c4s2-minmax-rndnu-neon-mull.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-igemm/gen/2x16c8-minmax-fp32-avx512skx.c b/src/qs8-igemm/gen/2x16c8-minmax-fp32-avx512skx.c
index 6d3b275..1e5cb2c 100644
--- a/src/qs8-igemm/gen/2x16c8-minmax-fp32-avx512skx.c
+++ b/src/qs8-igemm/gen/2x16c8-minmax-fp32-avx512skx.c
@@ -28,7 +28,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-igemm/gen/2x16c8-minmax-rndnu-neon-mlal.c b/src/qs8-igemm/gen/2x16c8-minmax-rndnu-neon-mlal.c
index dfd3c26..9a597ee 100644
--- a/src/qs8-igemm/gen/2x16c8-minmax-rndnu-neon-mlal.c
+++ b/src/qs8-igemm/gen/2x16c8-minmax-rndnu-neon-mlal.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-igemm/gen/2x16c8-minmax-rndnu-neon-mull.c b/src/qs8-igemm/gen/2x16c8-minmax-rndnu-neon-mull.c
index 32696c4..709dfc7 100644
--- a/src/qs8-igemm/gen/2x16c8-minmax-rndnu-neon-mull.c
+++ b/src/qs8-igemm/gen/2x16c8-minmax-rndnu-neon-mull.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-igemm/gen/2x4c2-minmax-fp32-avx-ld128.c b/src/qs8-igemm/gen/2x4c2-minmax-fp32-avx-ld128.c
index 3a83564..7397ddd 100644
--- a/src/qs8-igemm/gen/2x4c2-minmax-fp32-avx-ld128.c
+++ b/src/qs8-igemm/gen/2x4c2-minmax-fp32-avx-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-igemm/gen/2x4c2-minmax-fp32-avx-ld64.c b/src/qs8-igemm/gen/2x4c2-minmax-fp32-avx-ld64.c
index 58cc3e2..6a54cef 100644
--- a/src/qs8-igemm/gen/2x4c2-minmax-fp32-avx-ld64.c
+++ b/src/qs8-igemm/gen/2x4c2-minmax-fp32-avx-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-igemm/gen/2x4c2-minmax-fp32-sse2-ld128.c b/src/qs8-igemm/gen/2x4c2-minmax-fp32-sse2-ld128.c
index 722ed44..dcc41ae 100644
--- a/src/qs8-igemm/gen/2x4c2-minmax-fp32-sse2-ld128.c
+++ b/src/qs8-igemm/gen/2x4c2-minmax-fp32-sse2-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-igemm/gen/2x4c2-minmax-fp32-sse2-ld64.c b/src/qs8-igemm/gen/2x4c2-minmax-fp32-sse2-ld64.c
index 1e4c4ea..d2f2486 100644
--- a/src/qs8-igemm/gen/2x4c2-minmax-fp32-sse2-ld64.c
+++ b/src/qs8-igemm/gen/2x4c2-minmax-fp32-sse2-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-igemm/gen/2x4c2-minmax-fp32-sse41-ld128.c b/src/qs8-igemm/gen/2x4c2-minmax-fp32-sse41-ld128.c
index 4fc3208..2cc0226 100644
--- a/src/qs8-igemm/gen/2x4c2-minmax-fp32-sse41-ld128.c
+++ b/src/qs8-igemm/gen/2x4c2-minmax-fp32-sse41-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-igemm/gen/2x4c2-minmax-fp32-sse41-ld64.c b/src/qs8-igemm/gen/2x4c2-minmax-fp32-sse41-ld64.c
index b9ee8f9..ba62829 100644
--- a/src/qs8-igemm/gen/2x4c2-minmax-fp32-sse41-ld64.c
+++ b/src/qs8-igemm/gen/2x4c2-minmax-fp32-sse41-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-igemm/gen/2x4c2-minmax-fp32-wasmsimd-dot16x2-ld128.c b/src/qs8-igemm/gen/2x4c2-minmax-fp32-wasmsimd-dot16x2-ld128.c
index 972c48f..29df232 100644
--- a/src/qs8-igemm/gen/2x4c2-minmax-fp32-wasmsimd-dot16x2-ld128.c
+++ b/src/qs8-igemm/gen/2x4c2-minmax-fp32-wasmsimd-dot16x2-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-igemm/gen/2x4c2-minmax-fp32-wasmsimd-dot16x2-ld64.c b/src/qs8-igemm/gen/2x4c2-minmax-fp32-wasmsimd-dot16x2-ld64.c
index 6deb58e..0cf8bd4 100644
--- a/src/qs8-igemm/gen/2x4c2-minmax-fp32-wasmsimd-dot16x2-ld64.c
+++ b/src/qs8-igemm/gen/2x4c2-minmax-fp32-wasmsimd-dot16x2-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-igemm/gen/2x4c2-minmax-fp32-xop-ld128.c b/src/qs8-igemm/gen/2x4c2-minmax-fp32-xop-ld128.c
index fcc856d..c37343a 100644
--- a/src/qs8-igemm/gen/2x4c2-minmax-fp32-xop-ld128.c
+++ b/src/qs8-igemm/gen/2x4c2-minmax-fp32-xop-ld128.c
@@ -32,7 +32,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-igemm/gen/2x4c2-minmax-fp32-xop-ld64.c b/src/qs8-igemm/gen/2x4c2-minmax-fp32-xop-ld64.c
index d098b05..d1cb7fa 100644
--- a/src/qs8-igemm/gen/2x4c2-minmax-fp32-xop-ld64.c
+++ b/src/qs8-igemm/gen/2x4c2-minmax-fp32-xop-ld64.c
@@ -32,7 +32,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-igemm/gen/2x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld128.c b/src/qs8-igemm/gen/2x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld128.c
index 5d4356c..1e197ee 100644
--- a/src/qs8-igemm/gen/2x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld128.c
+++ b/src/qs8-igemm/gen/2x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-igemm/gen/2x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld64.c b/src/qs8-igemm/gen/2x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld64.c
index b88af2c..6d0423e 100644
--- a/src/qs8-igemm/gen/2x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld64.c
+++ b/src/qs8-igemm/gen/2x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-igemm/gen/2x4c8-minmax-fp32-avx-ld128.c b/src/qs8-igemm/gen/2x4c8-minmax-fp32-avx-ld128.c
index c8f57ba..646beed 100644
--- a/src/qs8-igemm/gen/2x4c8-minmax-fp32-avx-ld128.c
+++ b/src/qs8-igemm/gen/2x4c8-minmax-fp32-avx-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-igemm/gen/2x4c8-minmax-fp32-avx-ld64.c b/src/qs8-igemm/gen/2x4c8-minmax-fp32-avx-ld64.c
index 31ce18b..e754935 100644
--- a/src/qs8-igemm/gen/2x4c8-minmax-fp32-avx-ld64.c
+++ b/src/qs8-igemm/gen/2x4c8-minmax-fp32-avx-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-igemm/gen/2x4c8-minmax-fp32-sse2-ld128.c b/src/qs8-igemm/gen/2x4c8-minmax-fp32-sse2-ld128.c
index a4ce9be..3f0b4bc 100644
--- a/src/qs8-igemm/gen/2x4c8-minmax-fp32-sse2-ld128.c
+++ b/src/qs8-igemm/gen/2x4c8-minmax-fp32-sse2-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-igemm/gen/2x4c8-minmax-fp32-sse2-ld64.c b/src/qs8-igemm/gen/2x4c8-minmax-fp32-sse2-ld64.c
index 066f322..504cf2b 100644
--- a/src/qs8-igemm/gen/2x4c8-minmax-fp32-sse2-ld64.c
+++ b/src/qs8-igemm/gen/2x4c8-minmax-fp32-sse2-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-igemm/gen/2x4c8-minmax-fp32-sse41-ld128.c b/src/qs8-igemm/gen/2x4c8-minmax-fp32-sse41-ld128.c
index 913e827..db25435 100644
--- a/src/qs8-igemm/gen/2x4c8-minmax-fp32-sse41-ld128.c
+++ b/src/qs8-igemm/gen/2x4c8-minmax-fp32-sse41-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-igemm/gen/2x4c8-minmax-fp32-sse41-ld64.c b/src/qs8-igemm/gen/2x4c8-minmax-fp32-sse41-ld64.c
index 7243ed5..1f26d2b 100644
--- a/src/qs8-igemm/gen/2x4c8-minmax-fp32-sse41-ld64.c
+++ b/src/qs8-igemm/gen/2x4c8-minmax-fp32-sse41-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-igemm/gen/2x4c8-minmax-fp32-ssse3-ld128.c b/src/qs8-igemm/gen/2x4c8-minmax-fp32-ssse3-ld128.c
index 7ffc953..346eabe 100644
--- a/src/qs8-igemm/gen/2x4c8-minmax-fp32-ssse3-ld128.c
+++ b/src/qs8-igemm/gen/2x4c8-minmax-fp32-ssse3-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-igemm/gen/2x4c8-minmax-fp32-ssse3-ld64.c b/src/qs8-igemm/gen/2x4c8-minmax-fp32-ssse3-ld64.c
index 2e86dd3..0854508 100644
--- a/src/qs8-igemm/gen/2x4c8-minmax-fp32-ssse3-ld64.c
+++ b/src/qs8-igemm/gen/2x4c8-minmax-fp32-ssse3-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-igemm/gen/2x4c8-minmax-fp32-wasmsimd-dot16x2-ld128.c b/src/qs8-igemm/gen/2x4c8-minmax-fp32-wasmsimd-dot16x2-ld128.c
index aeebfd3..24d6059 100644
--- a/src/qs8-igemm/gen/2x4c8-minmax-fp32-wasmsimd-dot16x2-ld128.c
+++ b/src/qs8-igemm/gen/2x4c8-minmax-fp32-wasmsimd-dot16x2-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-igemm/gen/2x4c8-minmax-fp32-wasmsimd-dot16x2-ld64.c b/src/qs8-igemm/gen/2x4c8-minmax-fp32-wasmsimd-dot16x2-ld64.c
index 037cbde..db21261 100644
--- a/src/qs8-igemm/gen/2x4c8-minmax-fp32-wasmsimd-dot16x2-ld64.c
+++ b/src/qs8-igemm/gen/2x4c8-minmax-fp32-wasmsimd-dot16x2-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-igemm/gen/2x4c8-minmax-fp32-wasmsimd-mul16-ld128.c b/src/qs8-igemm/gen/2x4c8-minmax-fp32-wasmsimd-mul16-ld128.c
index 98f8c40..25f14d8 100644
--- a/src/qs8-igemm/gen/2x4c8-minmax-fp32-wasmsimd-mul16-ld128.c
+++ b/src/qs8-igemm/gen/2x4c8-minmax-fp32-wasmsimd-mul16-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-igemm/gen/2x4c8-minmax-fp32-wasmsimd-mul16-ld64.c b/src/qs8-igemm/gen/2x4c8-minmax-fp32-wasmsimd-mul16-ld64.c
index b92fcec..6054ba0 100644
--- a/src/qs8-igemm/gen/2x4c8-minmax-fp32-wasmsimd-mul16-ld64.c
+++ b/src/qs8-igemm/gen/2x4c8-minmax-fp32-wasmsimd-mul16-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-igemm/gen/2x4c8-minmax-fp32-xop-ld128.c b/src/qs8-igemm/gen/2x4c8-minmax-fp32-xop-ld128.c
index 0114f9c..1776455 100644
--- a/src/qs8-igemm/gen/2x4c8-minmax-fp32-xop-ld128.c
+++ b/src/qs8-igemm/gen/2x4c8-minmax-fp32-xop-ld128.c
@@ -32,7 +32,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-igemm/gen/2x4c8-minmax-fp32-xop-ld64.c b/src/qs8-igemm/gen/2x4c8-minmax-fp32-xop-ld64.c
index b76f376..25472e1 100644
--- a/src/qs8-igemm/gen/2x4c8-minmax-fp32-xop-ld64.c
+++ b/src/qs8-igemm/gen/2x4c8-minmax-fp32-xop-ld64.c
@@ -32,7 +32,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-igemm/gen/2x8-minmax-rndnu-neon-mlal-lane-prfm.c b/src/qs8-igemm/gen/2x8-minmax-rndnu-neon-mlal-lane-prfm.c
index 3e08ff1..0c03710 100644
--- a/src/qs8-igemm/gen/2x8-minmax-rndnu-neon-mlal-lane-prfm.c
+++ b/src/qs8-igemm/gen/2x8-minmax-rndnu-neon-mlal-lane-prfm.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-igemm/gen/2x8-minmax-rndnu-neon-mlal-lane.c b/src/qs8-igemm/gen/2x8-minmax-rndnu-neon-mlal-lane.c
index 03a788b..7482cb1 100644
--- a/src/qs8-igemm/gen/2x8-minmax-rndnu-neon-mlal-lane.c
+++ b/src/qs8-igemm/gen/2x8-minmax-rndnu-neon-mlal-lane.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-igemm/gen/2x8-minmax-rndnu-neon-mull-addw-dup.c b/src/qs8-igemm/gen/2x8-minmax-rndnu-neon-mull-addw-dup.c
index 1602ef3..05badc3 100644
--- a/src/qs8-igemm/gen/2x8-minmax-rndnu-neon-mull-addw-dup.c
+++ b/src/qs8-igemm/gen/2x8-minmax-rndnu-neon-mull-addw-dup.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-igemm/gen/2x8c16-minmax-rndnu-neon-mlal.c b/src/qs8-igemm/gen/2x8c16-minmax-rndnu-neon-mlal.c
index 87a44e3..9202376 100644
--- a/src/qs8-igemm/gen/2x8c16-minmax-rndnu-neon-mlal.c
+++ b/src/qs8-igemm/gen/2x8c16-minmax-rndnu-neon-mlal.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-igemm/gen/2x8c2-minmax-fp32-neon-mlal-dup.c b/src/qs8-igemm/gen/2x8c2-minmax-fp32-neon-mlal-dup.c
index 687378b..5b7d98d 100644
--- a/src/qs8-igemm/gen/2x8c2-minmax-fp32-neon-mlal-dup.c
+++ b/src/qs8-igemm/gen/2x8c2-minmax-fp32-neon-mlal-dup.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-igemm/gen/2x8c2-minmax-fp32-neon-mlal-ld1r.c b/src/qs8-igemm/gen/2x8c2-minmax-fp32-neon-mlal-ld1r.c
index 5919c23..236cebe 100644
--- a/src/qs8-igemm/gen/2x8c2-minmax-fp32-neon-mlal-ld1r.c
+++ b/src/qs8-igemm/gen/2x8c2-minmax-fp32-neon-mlal-ld1r.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-igemm/gen/2x8c2-minmax-fp32-neon-mlal-ld2r.c b/src/qs8-igemm/gen/2x8c2-minmax-fp32-neon-mlal-ld2r.c
index 308e60a..db62fba 100644
--- a/src/qs8-igemm/gen/2x8c2-minmax-fp32-neon-mlal-ld2r.c
+++ b/src/qs8-igemm/gen/2x8c2-minmax-fp32-neon-mlal-ld2r.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-igemm/gen/2x8c2-minmax-fp32-neon-mlal-ld4r.c b/src/qs8-igemm/gen/2x8c2-minmax-fp32-neon-mlal-ld4r.c
index 14f17bb..884ff4d 100644
--- a/src/qs8-igemm/gen/2x8c2-minmax-fp32-neon-mlal-ld4r.c
+++ b/src/qs8-igemm/gen/2x8c2-minmax-fp32-neon-mlal-ld4r.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-igemm/gen/2x8c2-minmax-fp32-neonv8-mlal-dup.c b/src/qs8-igemm/gen/2x8c2-minmax-fp32-neonv8-mlal-dup.c
index 3c3f731..ce17ebe 100644
--- a/src/qs8-igemm/gen/2x8c2-minmax-fp32-neonv8-mlal-dup.c
+++ b/src/qs8-igemm/gen/2x8c2-minmax-fp32-neonv8-mlal-dup.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-igemm/gen/2x8c2-minmax-fp32-neonv8-mlal-ld1r.c b/src/qs8-igemm/gen/2x8c2-minmax-fp32-neonv8-mlal-ld1r.c
index 18914ac..3db2733 100644
--- a/src/qs8-igemm/gen/2x8c2-minmax-fp32-neonv8-mlal-ld1r.c
+++ b/src/qs8-igemm/gen/2x8c2-minmax-fp32-neonv8-mlal-ld1r.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-igemm/gen/2x8c2-minmax-fp32-neonv8-mlal-ld2r.c b/src/qs8-igemm/gen/2x8c2-minmax-fp32-neonv8-mlal-ld2r.c
index e9e0ea9..412fae1 100644
--- a/src/qs8-igemm/gen/2x8c2-minmax-fp32-neonv8-mlal-ld2r.c
+++ b/src/qs8-igemm/gen/2x8c2-minmax-fp32-neonv8-mlal-ld2r.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-igemm/gen/2x8c2-minmax-fp32-neonv8-mlal-ld4r.c b/src/qs8-igemm/gen/2x8c2-minmax-fp32-neonv8-mlal-ld4r.c
index 932c510..11e65aa 100644
--- a/src/qs8-igemm/gen/2x8c2-minmax-fp32-neonv8-mlal-ld4r.c
+++ b/src/qs8-igemm/gen/2x8c2-minmax-fp32-neonv8-mlal-ld4r.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-igemm/gen/2x8c2-minmax-rndnu-neon-mlal-dup.c b/src/qs8-igemm/gen/2x8c2-minmax-rndnu-neon-mlal-dup.c
index 0674574..071d3ae 100644
--- a/src/qs8-igemm/gen/2x8c2-minmax-rndnu-neon-mlal-dup.c
+++ b/src/qs8-igemm/gen/2x8c2-minmax-rndnu-neon-mlal-dup.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-igemm/gen/2x8c2-minmax-rndnu-neon-mlal-ld1r.c b/src/qs8-igemm/gen/2x8c2-minmax-rndnu-neon-mlal-ld1r.c
index ea51192..0176fc7 100644
--- a/src/qs8-igemm/gen/2x8c2-minmax-rndnu-neon-mlal-ld1r.c
+++ b/src/qs8-igemm/gen/2x8c2-minmax-rndnu-neon-mlal-ld1r.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-igemm/gen/2x8c2-minmax-rndnu-neon-mlal-ld2r.c b/src/qs8-igemm/gen/2x8c2-minmax-rndnu-neon-mlal-ld2r.c
index d5ed3de..6bb0532 100644
--- a/src/qs8-igemm/gen/2x8c2-minmax-rndnu-neon-mlal-ld2r.c
+++ b/src/qs8-igemm/gen/2x8c2-minmax-rndnu-neon-mlal-ld2r.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-igemm/gen/2x8c2-minmax-rndnu-neon-mlal-ld4r.c b/src/qs8-igemm/gen/2x8c2-minmax-rndnu-neon-mlal-ld4r.c
index 3899f92..f15f051 100644
--- a/src/qs8-igemm/gen/2x8c2-minmax-rndnu-neon-mlal-ld4r.c
+++ b/src/qs8-igemm/gen/2x8c2-minmax-rndnu-neon-mlal-ld4r.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-igemm/gen/2x8c2-minmax-rndnu-neon-mull-dup.c b/src/qs8-igemm/gen/2x8c2-minmax-rndnu-neon-mull-dup.c
index 5ffe54d..2575ecc 100644
--- a/src/qs8-igemm/gen/2x8c2-minmax-rndnu-neon-mull-dup.c
+++ b/src/qs8-igemm/gen/2x8c2-minmax-rndnu-neon-mull-dup.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-igemm/gen/2x8c2-minmax-rndnu-neon-mull-ld1r.c b/src/qs8-igemm/gen/2x8c2-minmax-rndnu-neon-mull-ld1r.c
index 309decf..7959bd6 100644
--- a/src/qs8-igemm/gen/2x8c2-minmax-rndnu-neon-mull-ld1r.c
+++ b/src/qs8-igemm/gen/2x8c2-minmax-rndnu-neon-mull-ld1r.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-igemm/gen/2x8c2-minmax-rndnu-neon-mull-ld2r.c b/src/qs8-igemm/gen/2x8c2-minmax-rndnu-neon-mull-ld2r.c
index 710a7e1..b4bfe1b 100644
--- a/src/qs8-igemm/gen/2x8c2-minmax-rndnu-neon-mull-ld2r.c
+++ b/src/qs8-igemm/gen/2x8c2-minmax-rndnu-neon-mull-ld2r.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-igemm/gen/2x8c2-minmax-rndnu-neon-mull-ld4r.c b/src/qs8-igemm/gen/2x8c2-minmax-rndnu-neon-mull-ld4r.c
index 37e5b73..bce524f 100644
--- a/src/qs8-igemm/gen/2x8c2-minmax-rndnu-neon-mull-ld4r.c
+++ b/src/qs8-igemm/gen/2x8c2-minmax-rndnu-neon-mull-ld4r.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-igemm/gen/2x8c2s4-minmax-fp32-neon-mlal.c b/src/qs8-igemm/gen/2x8c2s4-minmax-fp32-neon-mlal.c
index 53a8712..7e896c4 100644
--- a/src/qs8-igemm/gen/2x8c2s4-minmax-fp32-neon-mlal.c
+++ b/src/qs8-igemm/gen/2x8c2s4-minmax-fp32-neon-mlal.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-igemm/gen/2x8c2s4-minmax-fp32-neonv8-mlal.c b/src/qs8-igemm/gen/2x8c2s4-minmax-fp32-neonv8-mlal.c
index 26945d8..50429c7 100644
--- a/src/qs8-igemm/gen/2x8c2s4-minmax-fp32-neonv8-mlal.c
+++ b/src/qs8-igemm/gen/2x8c2s4-minmax-fp32-neonv8-mlal.c
@@ -28,7 +28,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-igemm/gen/2x8c2s4-minmax-rndnu-neon-mlal.c b/src/qs8-igemm/gen/2x8c2s4-minmax-rndnu-neon-mlal.c
index b514f6d..c036e7f 100644
--- a/src/qs8-igemm/gen/2x8c2s4-minmax-rndnu-neon-mlal.c
+++ b/src/qs8-igemm/gen/2x8c2s4-minmax-rndnu-neon-mlal.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-igemm/gen/2x8c2s4-minmax-rndnu-neon-mull.c b/src/qs8-igemm/gen/2x8c2s4-minmax-rndnu-neon-mull.c
index eb48bc0..baf7814 100644
--- a/src/qs8-igemm/gen/2x8c2s4-minmax-rndnu-neon-mull.c
+++ b/src/qs8-igemm/gen/2x8c2s4-minmax-rndnu-neon-mull.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-igemm/gen/2x8c4-minmax-fp32-neon-mlal-dup.c b/src/qs8-igemm/gen/2x8c4-minmax-fp32-neon-mlal-dup.c
index ab18461..f79075c 100644
--- a/src/qs8-igemm/gen/2x8c4-minmax-fp32-neon-mlal-dup.c
+++ b/src/qs8-igemm/gen/2x8c4-minmax-fp32-neon-mlal-dup.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-igemm/gen/2x8c4-minmax-fp32-neon-mlal-ld1r.c b/src/qs8-igemm/gen/2x8c4-minmax-fp32-neon-mlal-ld1r.c
index 19c96a7..0d26915 100644
--- a/src/qs8-igemm/gen/2x8c4-minmax-fp32-neon-mlal-ld1r.c
+++ b/src/qs8-igemm/gen/2x8c4-minmax-fp32-neon-mlal-ld1r.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-igemm/gen/2x8c4-minmax-fp32-neon-mlal-ld2r.c b/src/qs8-igemm/gen/2x8c4-minmax-fp32-neon-mlal-ld2r.c
index f84b7d9..e3d8a44 100644
--- a/src/qs8-igemm/gen/2x8c4-minmax-fp32-neon-mlal-ld2r.c
+++ b/src/qs8-igemm/gen/2x8c4-minmax-fp32-neon-mlal-ld2r.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-igemm/gen/2x8c4-minmax-fp32-neonv8-mlal-dup.c b/src/qs8-igemm/gen/2x8c4-minmax-fp32-neonv8-mlal-dup.c
index 2b11d96..1148d93 100644
--- a/src/qs8-igemm/gen/2x8c4-minmax-fp32-neonv8-mlal-dup.c
+++ b/src/qs8-igemm/gen/2x8c4-minmax-fp32-neonv8-mlal-dup.c
@@ -28,7 +28,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-igemm/gen/2x8c4-minmax-fp32-neonv8-mlal-ld1r.c b/src/qs8-igemm/gen/2x8c4-minmax-fp32-neonv8-mlal-ld1r.c
index 9786db9..ff6e11d 100644
--- a/src/qs8-igemm/gen/2x8c4-minmax-fp32-neonv8-mlal-ld1r.c
+++ b/src/qs8-igemm/gen/2x8c4-minmax-fp32-neonv8-mlal-ld1r.c
@@ -28,7 +28,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-igemm/gen/2x8c4-minmax-fp32-neonv8-mlal-ld2r.c b/src/qs8-igemm/gen/2x8c4-minmax-fp32-neonv8-mlal-ld2r.c
index e17281e..b4fce53 100644
--- a/src/qs8-igemm/gen/2x8c4-minmax-fp32-neonv8-mlal-ld2r.c
+++ b/src/qs8-igemm/gen/2x8c4-minmax-fp32-neonv8-mlal-ld2r.c
@@ -28,7 +28,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-igemm/gen/2x8c4-minmax-rndnu-neon-mlal-dup.c b/src/qs8-igemm/gen/2x8c4-minmax-rndnu-neon-mlal-dup.c
index f15df8b..97f9dbb 100644
--- a/src/qs8-igemm/gen/2x8c4-minmax-rndnu-neon-mlal-dup.c
+++ b/src/qs8-igemm/gen/2x8c4-minmax-rndnu-neon-mlal-dup.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-igemm/gen/2x8c4-minmax-rndnu-neon-mlal-ld1r.c b/src/qs8-igemm/gen/2x8c4-minmax-rndnu-neon-mlal-ld1r.c
index 9ac5f99..f600412 100644
--- a/src/qs8-igemm/gen/2x8c4-minmax-rndnu-neon-mlal-ld1r.c
+++ b/src/qs8-igemm/gen/2x8c4-minmax-rndnu-neon-mlal-ld1r.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-igemm/gen/2x8c4-minmax-rndnu-neon-mlal-ld2r.c b/src/qs8-igemm/gen/2x8c4-minmax-rndnu-neon-mlal-ld2r.c
index 3d79e75..66e4338 100644
--- a/src/qs8-igemm/gen/2x8c4-minmax-rndnu-neon-mlal-ld2r.c
+++ b/src/qs8-igemm/gen/2x8c4-minmax-rndnu-neon-mlal-ld2r.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-igemm/gen/2x8c4-minmax-rndnu-neon-mull-dup.c b/src/qs8-igemm/gen/2x8c4-minmax-rndnu-neon-mull-dup.c
index 39de4ed..ed80c26 100644
--- a/src/qs8-igemm/gen/2x8c4-minmax-rndnu-neon-mull-dup.c
+++ b/src/qs8-igemm/gen/2x8c4-minmax-rndnu-neon-mull-dup.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-igemm/gen/2x8c4-minmax-rndnu-neon-mull-ld1r.c b/src/qs8-igemm/gen/2x8c4-minmax-rndnu-neon-mull-ld1r.c
index 13ff1f2..28db090 100644
--- a/src/qs8-igemm/gen/2x8c4-minmax-rndnu-neon-mull-ld1r.c
+++ b/src/qs8-igemm/gen/2x8c4-minmax-rndnu-neon-mull-ld1r.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-igemm/gen/2x8c4-minmax-rndnu-neon-mull-ld2r.c b/src/qs8-igemm/gen/2x8c4-minmax-rndnu-neon-mull-ld2r.c
index e4e9b0f..e3d3ac9 100644
--- a/src/qs8-igemm/gen/2x8c4-minmax-rndnu-neon-mull-ld2r.c
+++ b/src/qs8-igemm/gen/2x8c4-minmax-rndnu-neon-mull-ld2r.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-igemm/gen/2x8c4s2-minmax-fp32-neon-mlal.c b/src/qs8-igemm/gen/2x8c4s2-minmax-fp32-neon-mlal.c
index c45225f..fc3890e 100644
--- a/src/qs8-igemm/gen/2x8c4s2-minmax-fp32-neon-mlal.c
+++ b/src/qs8-igemm/gen/2x8c4s2-minmax-fp32-neon-mlal.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-igemm/gen/2x8c4s2-minmax-fp32-neonv8-mlal.c b/src/qs8-igemm/gen/2x8c4s2-minmax-fp32-neonv8-mlal.c
index 4f16ee8..e262fd8 100644
--- a/src/qs8-igemm/gen/2x8c4s2-minmax-fp32-neonv8-mlal.c
+++ b/src/qs8-igemm/gen/2x8c4s2-minmax-fp32-neonv8-mlal.c
@@ -28,7 +28,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-igemm/gen/2x8c4s2-minmax-rndnu-neon-mlal.c b/src/qs8-igemm/gen/2x8c4s2-minmax-rndnu-neon-mlal.c
index 122d4cd..4bd5701 100644
--- a/src/qs8-igemm/gen/2x8c4s2-minmax-rndnu-neon-mlal.c
+++ b/src/qs8-igemm/gen/2x8c4s2-minmax-rndnu-neon-mlal.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-igemm/gen/2x8c4s2-minmax-rndnu-neon-mull.c b/src/qs8-igemm/gen/2x8c4s2-minmax-rndnu-neon-mull.c
index e586e1d..faf70bb 100644
--- a/src/qs8-igemm/gen/2x8c4s2-minmax-rndnu-neon-mull.c
+++ b/src/qs8-igemm/gen/2x8c4s2-minmax-rndnu-neon-mull.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-igemm/gen/2x8c8-minmax-fp32-avx2.c b/src/qs8-igemm/gen/2x8c8-minmax-fp32-avx2.c
index 26d1dea..a1bf956 100644
--- a/src/qs8-igemm/gen/2x8c8-minmax-fp32-avx2.c
+++ b/src/qs8-igemm/gen/2x8c8-minmax-fp32-avx2.c
@@ -28,7 +28,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-igemm/gen/2x8c8-minmax-fp32-neon-mlal.c b/src/qs8-igemm/gen/2x8c8-minmax-fp32-neon-mlal.c
index 8006c0e..f61b2f2 100644
--- a/src/qs8-igemm/gen/2x8c8-minmax-fp32-neon-mlal.c
+++ b/src/qs8-igemm/gen/2x8c8-minmax-fp32-neon-mlal.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-igemm/gen/2x8c8-minmax-fp32-neonv8-mlal.c b/src/qs8-igemm/gen/2x8c8-minmax-fp32-neonv8-mlal.c
index 1c3250e..57b2bea 100644
--- a/src/qs8-igemm/gen/2x8c8-minmax-fp32-neonv8-mlal.c
+++ b/src/qs8-igemm/gen/2x8c8-minmax-fp32-neonv8-mlal.c
@@ -28,7 +28,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-igemm/gen/2x8c8-minmax-rndnu-neon-mlal.c b/src/qs8-igemm/gen/2x8c8-minmax-rndnu-neon-mlal.c
index dc40315..abca65f 100644
--- a/src/qs8-igemm/gen/2x8c8-minmax-rndnu-neon-mlal.c
+++ b/src/qs8-igemm/gen/2x8c8-minmax-rndnu-neon-mlal.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-igemm/gen/2x8c8-minmax-rndnu-neon-mull.c b/src/qs8-igemm/gen/2x8c8-minmax-rndnu-neon-mull.c
index b87e2a6..36ff4d8 100644
--- a/src/qs8-igemm/gen/2x8c8-minmax-rndnu-neon-mull.c
+++ b/src/qs8-igemm/gen/2x8c8-minmax-rndnu-neon-mull.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qs8-igemm/gen/3x16-minmax-rndnu-neon-mlal-lane-prfm.c b/src/qs8-igemm/gen/3x16-minmax-rndnu-neon-mlal-lane-prfm.c
index bcf6c3a..55540c7 100644
--- a/src/qs8-igemm/gen/3x16-minmax-rndnu-neon-mlal-lane-prfm.c
+++ b/src/qs8-igemm/gen/3x16-minmax-rndnu-neon-mlal-lane-prfm.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-igemm/gen/3x16-minmax-rndnu-neon-mlal-lane.c b/src/qs8-igemm/gen/3x16-minmax-rndnu-neon-mlal-lane.c
index 7de01a6..9b66f34 100644
--- a/src/qs8-igemm/gen/3x16-minmax-rndnu-neon-mlal-lane.c
+++ b/src/qs8-igemm/gen/3x16-minmax-rndnu-neon-mlal-lane.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-igemm/gen/3x16-minmax-rndnu-neon-mull-addw-dup.c b/src/qs8-igemm/gen/3x16-minmax-rndnu-neon-mull-addw-dup.c
index 6f7b2d6..50055ee 100644
--- a/src/qs8-igemm/gen/3x16-minmax-rndnu-neon-mull-addw-dup.c
+++ b/src/qs8-igemm/gen/3x16-minmax-rndnu-neon-mull-addw-dup.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-igemm/gen/3x16c16-minmax-rndnu-neon-mlal.c b/src/qs8-igemm/gen/3x16c16-minmax-rndnu-neon-mlal.c
index 4a205e1..42676bc 100644
--- a/src/qs8-igemm/gen/3x16c16-minmax-rndnu-neon-mlal.c
+++ b/src/qs8-igemm/gen/3x16c16-minmax-rndnu-neon-mlal.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-igemm/gen/3x16c2-minmax-rndnu-neon-mlal-dup.c b/src/qs8-igemm/gen/3x16c2-minmax-rndnu-neon-mlal-dup.c
index 6d844e3..55201ce 100644
--- a/src/qs8-igemm/gen/3x16c2-minmax-rndnu-neon-mlal-dup.c
+++ b/src/qs8-igemm/gen/3x16c2-minmax-rndnu-neon-mlal-dup.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-igemm/gen/3x16c2-minmax-rndnu-neon-mlal-ld1r.c b/src/qs8-igemm/gen/3x16c2-minmax-rndnu-neon-mlal-ld1r.c
index 66d1010..c3d06f1 100644
--- a/src/qs8-igemm/gen/3x16c2-minmax-rndnu-neon-mlal-ld1r.c
+++ b/src/qs8-igemm/gen/3x16c2-minmax-rndnu-neon-mlal-ld1r.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-igemm/gen/3x16c2-minmax-rndnu-neon-mlal-ld2r.c b/src/qs8-igemm/gen/3x16c2-minmax-rndnu-neon-mlal-ld2r.c
index ff328e9..53dab76 100644
--- a/src/qs8-igemm/gen/3x16c2-minmax-rndnu-neon-mlal-ld2r.c
+++ b/src/qs8-igemm/gen/3x16c2-minmax-rndnu-neon-mlal-ld2r.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-igemm/gen/3x16c2-minmax-rndnu-neon-mlal-ld4r.c b/src/qs8-igemm/gen/3x16c2-minmax-rndnu-neon-mlal-ld4r.c
index 3de9af3..8c5ff08 100644
--- a/src/qs8-igemm/gen/3x16c2-minmax-rndnu-neon-mlal-ld4r.c
+++ b/src/qs8-igemm/gen/3x16c2-minmax-rndnu-neon-mlal-ld4r.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-igemm/gen/3x16c2-minmax-rndnu-neon-mull-dup.c b/src/qs8-igemm/gen/3x16c2-minmax-rndnu-neon-mull-dup.c
index f0f7af1..6b60098 100644
--- a/src/qs8-igemm/gen/3x16c2-minmax-rndnu-neon-mull-dup.c
+++ b/src/qs8-igemm/gen/3x16c2-minmax-rndnu-neon-mull-dup.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-igemm/gen/3x16c2-minmax-rndnu-neon-mull-ld1r.c b/src/qs8-igemm/gen/3x16c2-minmax-rndnu-neon-mull-ld1r.c
index daf0468..ef0bc38 100644
--- a/src/qs8-igemm/gen/3x16c2-minmax-rndnu-neon-mull-ld1r.c
+++ b/src/qs8-igemm/gen/3x16c2-minmax-rndnu-neon-mull-ld1r.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-igemm/gen/3x16c2-minmax-rndnu-neon-mull-ld2r.c b/src/qs8-igemm/gen/3x16c2-minmax-rndnu-neon-mull-ld2r.c
index ac99ea8..9024354 100644
--- a/src/qs8-igemm/gen/3x16c2-minmax-rndnu-neon-mull-ld2r.c
+++ b/src/qs8-igemm/gen/3x16c2-minmax-rndnu-neon-mull-ld2r.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-igemm/gen/3x16c2-minmax-rndnu-neon-mull-ld4r.c b/src/qs8-igemm/gen/3x16c2-minmax-rndnu-neon-mull-ld4r.c
index f64e549..3a30f0e 100644
--- a/src/qs8-igemm/gen/3x16c2-minmax-rndnu-neon-mull-ld4r.c
+++ b/src/qs8-igemm/gen/3x16c2-minmax-rndnu-neon-mull-ld4r.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-igemm/gen/3x16c2s4-minmax-rndnu-neon-mlal.c b/src/qs8-igemm/gen/3x16c2s4-minmax-rndnu-neon-mlal.c
index cf52b74..0248ba2 100644
--- a/src/qs8-igemm/gen/3x16c2s4-minmax-rndnu-neon-mlal.c
+++ b/src/qs8-igemm/gen/3x16c2s4-minmax-rndnu-neon-mlal.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-igemm/gen/3x16c2s4-minmax-rndnu-neon-mull.c b/src/qs8-igemm/gen/3x16c2s4-minmax-rndnu-neon-mull.c
index ce6b4e8..bd44337 100644
--- a/src/qs8-igemm/gen/3x16c2s4-minmax-rndnu-neon-mull.c
+++ b/src/qs8-igemm/gen/3x16c2s4-minmax-rndnu-neon-mull.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-igemm/gen/3x16c4-minmax-rndnu-neon-mlal-dup.c b/src/qs8-igemm/gen/3x16c4-minmax-rndnu-neon-mlal-dup.c
index 33b34d3..b783bae 100644
--- a/src/qs8-igemm/gen/3x16c4-minmax-rndnu-neon-mlal-dup.c
+++ b/src/qs8-igemm/gen/3x16c4-minmax-rndnu-neon-mlal-dup.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-igemm/gen/3x16c4-minmax-rndnu-neon-mlal-ld1r.c b/src/qs8-igemm/gen/3x16c4-minmax-rndnu-neon-mlal-ld1r.c
index 1cd40e0..729b85e 100644
--- a/src/qs8-igemm/gen/3x16c4-minmax-rndnu-neon-mlal-ld1r.c
+++ b/src/qs8-igemm/gen/3x16c4-minmax-rndnu-neon-mlal-ld1r.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-igemm/gen/3x16c4-minmax-rndnu-neon-mlal-ld2r.c b/src/qs8-igemm/gen/3x16c4-minmax-rndnu-neon-mlal-ld2r.c
index 258a8f8..6fbe7da 100644
--- a/src/qs8-igemm/gen/3x16c4-minmax-rndnu-neon-mlal-ld2r.c
+++ b/src/qs8-igemm/gen/3x16c4-minmax-rndnu-neon-mlal-ld2r.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-igemm/gen/3x16c4-minmax-rndnu-neon-mull-dup.c b/src/qs8-igemm/gen/3x16c4-minmax-rndnu-neon-mull-dup.c
index eecaf3c..91b6427 100644
--- a/src/qs8-igemm/gen/3x16c4-minmax-rndnu-neon-mull-dup.c
+++ b/src/qs8-igemm/gen/3x16c4-minmax-rndnu-neon-mull-dup.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-igemm/gen/3x16c4-minmax-rndnu-neon-mull-ld1r.c b/src/qs8-igemm/gen/3x16c4-minmax-rndnu-neon-mull-ld1r.c
index 8df45e7..14ed5e9 100644
--- a/src/qs8-igemm/gen/3x16c4-minmax-rndnu-neon-mull-ld1r.c
+++ b/src/qs8-igemm/gen/3x16c4-minmax-rndnu-neon-mull-ld1r.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-igemm/gen/3x16c4-minmax-rndnu-neon-mull-ld2r.c b/src/qs8-igemm/gen/3x16c4-minmax-rndnu-neon-mull-ld2r.c
index 833364e..28cb468 100644
--- a/src/qs8-igemm/gen/3x16c4-minmax-rndnu-neon-mull-ld2r.c
+++ b/src/qs8-igemm/gen/3x16c4-minmax-rndnu-neon-mull-ld2r.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-igemm/gen/3x16c4s2-minmax-rndnu-neon-mlal.c b/src/qs8-igemm/gen/3x16c4s2-minmax-rndnu-neon-mlal.c
index 74a8fe9..8cf171f 100644
--- a/src/qs8-igemm/gen/3x16c4s2-minmax-rndnu-neon-mlal.c
+++ b/src/qs8-igemm/gen/3x16c4s2-minmax-rndnu-neon-mlal.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-igemm/gen/3x16c4s2-minmax-rndnu-neon-mull.c b/src/qs8-igemm/gen/3x16c4s2-minmax-rndnu-neon-mull.c
index 34f92f3..8a75ae1 100644
--- a/src/qs8-igemm/gen/3x16c4s2-minmax-rndnu-neon-mull.c
+++ b/src/qs8-igemm/gen/3x16c4s2-minmax-rndnu-neon-mull.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-igemm/gen/3x16c8-minmax-fp32-avx512skx.c b/src/qs8-igemm/gen/3x16c8-minmax-fp32-avx512skx.c
index 55add2c..1638f5d 100644
--- a/src/qs8-igemm/gen/3x16c8-minmax-fp32-avx512skx.c
+++ b/src/qs8-igemm/gen/3x16c8-minmax-fp32-avx512skx.c
@@ -28,7 +28,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-igemm/gen/3x16c8-minmax-rndnu-neon-mlal.c b/src/qs8-igemm/gen/3x16c8-minmax-rndnu-neon-mlal.c
index 803c73e..3124ff8 100644
--- a/src/qs8-igemm/gen/3x16c8-minmax-rndnu-neon-mlal.c
+++ b/src/qs8-igemm/gen/3x16c8-minmax-rndnu-neon-mlal.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-igemm/gen/3x16c8-minmax-rndnu-neon-mull.c b/src/qs8-igemm/gen/3x16c8-minmax-rndnu-neon-mull.c
index 86eddeb..5adabaa 100644
--- a/src/qs8-igemm/gen/3x16c8-minmax-rndnu-neon-mull.c
+++ b/src/qs8-igemm/gen/3x16c8-minmax-rndnu-neon-mull.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-igemm/gen/3x4c2-minmax-fp32-avx-ld128.c b/src/qs8-igemm/gen/3x4c2-minmax-fp32-avx-ld128.c
index bade720..c9afafb 100644
--- a/src/qs8-igemm/gen/3x4c2-minmax-fp32-avx-ld128.c
+++ b/src/qs8-igemm/gen/3x4c2-minmax-fp32-avx-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-igemm/gen/3x4c2-minmax-fp32-avx-ld64.c b/src/qs8-igemm/gen/3x4c2-minmax-fp32-avx-ld64.c
index 7b285e3..d2e6577 100644
--- a/src/qs8-igemm/gen/3x4c2-minmax-fp32-avx-ld64.c
+++ b/src/qs8-igemm/gen/3x4c2-minmax-fp32-avx-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-igemm/gen/3x4c2-minmax-fp32-sse2-ld128.c b/src/qs8-igemm/gen/3x4c2-minmax-fp32-sse2-ld128.c
index 4b927b7..98b10f6 100644
--- a/src/qs8-igemm/gen/3x4c2-minmax-fp32-sse2-ld128.c
+++ b/src/qs8-igemm/gen/3x4c2-minmax-fp32-sse2-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-igemm/gen/3x4c2-minmax-fp32-sse2-ld64.c b/src/qs8-igemm/gen/3x4c2-minmax-fp32-sse2-ld64.c
index 45bc347..43f4187 100644
--- a/src/qs8-igemm/gen/3x4c2-minmax-fp32-sse2-ld64.c
+++ b/src/qs8-igemm/gen/3x4c2-minmax-fp32-sse2-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-igemm/gen/3x4c2-minmax-fp32-sse41-ld128.c b/src/qs8-igemm/gen/3x4c2-minmax-fp32-sse41-ld128.c
index 07b15c3..b6a0c5e 100644
--- a/src/qs8-igemm/gen/3x4c2-minmax-fp32-sse41-ld128.c
+++ b/src/qs8-igemm/gen/3x4c2-minmax-fp32-sse41-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-igemm/gen/3x4c2-minmax-fp32-sse41-ld64.c b/src/qs8-igemm/gen/3x4c2-minmax-fp32-sse41-ld64.c
index 872fbf4..2d0eeab 100644
--- a/src/qs8-igemm/gen/3x4c2-minmax-fp32-sse41-ld64.c
+++ b/src/qs8-igemm/gen/3x4c2-minmax-fp32-sse41-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-igemm/gen/3x4c2-minmax-fp32-wasmsimd-dot16x2-ld128.c b/src/qs8-igemm/gen/3x4c2-minmax-fp32-wasmsimd-dot16x2-ld128.c
index a7d65ac..1159105 100644
--- a/src/qs8-igemm/gen/3x4c2-minmax-fp32-wasmsimd-dot16x2-ld128.c
+++ b/src/qs8-igemm/gen/3x4c2-minmax-fp32-wasmsimd-dot16x2-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-igemm/gen/3x4c2-minmax-fp32-wasmsimd-dot16x2-ld64.c b/src/qs8-igemm/gen/3x4c2-minmax-fp32-wasmsimd-dot16x2-ld64.c
index 86c85e0..053eacf 100644
--- a/src/qs8-igemm/gen/3x4c2-minmax-fp32-wasmsimd-dot16x2-ld64.c
+++ b/src/qs8-igemm/gen/3x4c2-minmax-fp32-wasmsimd-dot16x2-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-igemm/gen/3x4c2-minmax-fp32-xop-ld128.c b/src/qs8-igemm/gen/3x4c2-minmax-fp32-xop-ld128.c
index 26f7e54..a99c9cc 100644
--- a/src/qs8-igemm/gen/3x4c2-minmax-fp32-xop-ld128.c
+++ b/src/qs8-igemm/gen/3x4c2-minmax-fp32-xop-ld128.c
@@ -32,7 +32,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-igemm/gen/3x4c2-minmax-fp32-xop-ld64.c b/src/qs8-igemm/gen/3x4c2-minmax-fp32-xop-ld64.c
index 5b9c620..1fbed6f 100644
--- a/src/qs8-igemm/gen/3x4c2-minmax-fp32-xop-ld64.c
+++ b/src/qs8-igemm/gen/3x4c2-minmax-fp32-xop-ld64.c
@@ -32,7 +32,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-igemm/gen/3x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld128.c b/src/qs8-igemm/gen/3x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld128.c
index 4b9cea6..e0d84d2 100644
--- a/src/qs8-igemm/gen/3x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld128.c
+++ b/src/qs8-igemm/gen/3x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-igemm/gen/3x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld64.c b/src/qs8-igemm/gen/3x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld64.c
index c735c9c..bd4eedf 100644
--- a/src/qs8-igemm/gen/3x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld64.c
+++ b/src/qs8-igemm/gen/3x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-igemm/gen/3x4c8-minmax-fp32-avx-ld128.c b/src/qs8-igemm/gen/3x4c8-minmax-fp32-avx-ld128.c
index 1277261..1e33b84 100644
--- a/src/qs8-igemm/gen/3x4c8-minmax-fp32-avx-ld128.c
+++ b/src/qs8-igemm/gen/3x4c8-minmax-fp32-avx-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-igemm/gen/3x4c8-minmax-fp32-avx-ld64.c b/src/qs8-igemm/gen/3x4c8-minmax-fp32-avx-ld64.c
index bd3cdaf..65bf997 100644
--- a/src/qs8-igemm/gen/3x4c8-minmax-fp32-avx-ld64.c
+++ b/src/qs8-igemm/gen/3x4c8-minmax-fp32-avx-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-igemm/gen/3x4c8-minmax-fp32-sse2-ld128.c b/src/qs8-igemm/gen/3x4c8-minmax-fp32-sse2-ld128.c
index 6e638f4..62d8ace 100644
--- a/src/qs8-igemm/gen/3x4c8-minmax-fp32-sse2-ld128.c
+++ b/src/qs8-igemm/gen/3x4c8-minmax-fp32-sse2-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-igemm/gen/3x4c8-minmax-fp32-sse2-ld64.c b/src/qs8-igemm/gen/3x4c8-minmax-fp32-sse2-ld64.c
index f0ba9b5..5c0fa37 100644
--- a/src/qs8-igemm/gen/3x4c8-minmax-fp32-sse2-ld64.c
+++ b/src/qs8-igemm/gen/3x4c8-minmax-fp32-sse2-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-igemm/gen/3x4c8-minmax-fp32-sse41-ld128.c b/src/qs8-igemm/gen/3x4c8-minmax-fp32-sse41-ld128.c
index 9bce7a7..c67b3bd 100644
--- a/src/qs8-igemm/gen/3x4c8-minmax-fp32-sse41-ld128.c
+++ b/src/qs8-igemm/gen/3x4c8-minmax-fp32-sse41-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-igemm/gen/3x4c8-minmax-fp32-sse41-ld64.c b/src/qs8-igemm/gen/3x4c8-minmax-fp32-sse41-ld64.c
index bede79c..0c6068e 100644
--- a/src/qs8-igemm/gen/3x4c8-minmax-fp32-sse41-ld64.c
+++ b/src/qs8-igemm/gen/3x4c8-minmax-fp32-sse41-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-igemm/gen/3x4c8-minmax-fp32-ssse3-ld128.c b/src/qs8-igemm/gen/3x4c8-minmax-fp32-ssse3-ld128.c
index 7685060..107525a 100644
--- a/src/qs8-igemm/gen/3x4c8-minmax-fp32-ssse3-ld128.c
+++ b/src/qs8-igemm/gen/3x4c8-minmax-fp32-ssse3-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-igemm/gen/3x4c8-minmax-fp32-ssse3-ld64.c b/src/qs8-igemm/gen/3x4c8-minmax-fp32-ssse3-ld64.c
index 4809e09..19899f4 100644
--- a/src/qs8-igemm/gen/3x4c8-minmax-fp32-ssse3-ld64.c
+++ b/src/qs8-igemm/gen/3x4c8-minmax-fp32-ssse3-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-igemm/gen/3x4c8-minmax-fp32-wasmsimd-dot16x2-ld128.c b/src/qs8-igemm/gen/3x4c8-minmax-fp32-wasmsimd-dot16x2-ld128.c
index 24eda4f..b6853a7 100644
--- a/src/qs8-igemm/gen/3x4c8-minmax-fp32-wasmsimd-dot16x2-ld128.c
+++ b/src/qs8-igemm/gen/3x4c8-minmax-fp32-wasmsimd-dot16x2-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-igemm/gen/3x4c8-minmax-fp32-wasmsimd-dot16x2-ld64.c b/src/qs8-igemm/gen/3x4c8-minmax-fp32-wasmsimd-dot16x2-ld64.c
index 112d76d..2997453 100644
--- a/src/qs8-igemm/gen/3x4c8-minmax-fp32-wasmsimd-dot16x2-ld64.c
+++ b/src/qs8-igemm/gen/3x4c8-minmax-fp32-wasmsimd-dot16x2-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-igemm/gen/3x4c8-minmax-fp32-wasmsimd-mul16-ld128.c b/src/qs8-igemm/gen/3x4c8-minmax-fp32-wasmsimd-mul16-ld128.c
index da2311f..a1c65fc 100644
--- a/src/qs8-igemm/gen/3x4c8-minmax-fp32-wasmsimd-mul16-ld128.c
+++ b/src/qs8-igemm/gen/3x4c8-minmax-fp32-wasmsimd-mul16-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-igemm/gen/3x4c8-minmax-fp32-wasmsimd-mul16-ld64.c b/src/qs8-igemm/gen/3x4c8-minmax-fp32-wasmsimd-mul16-ld64.c
index d2f0cdb..210d84a 100644
--- a/src/qs8-igemm/gen/3x4c8-minmax-fp32-wasmsimd-mul16-ld64.c
+++ b/src/qs8-igemm/gen/3x4c8-minmax-fp32-wasmsimd-mul16-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-igemm/gen/3x4c8-minmax-fp32-xop-ld128.c b/src/qs8-igemm/gen/3x4c8-minmax-fp32-xop-ld128.c
index 0138379..e037ad9 100644
--- a/src/qs8-igemm/gen/3x4c8-minmax-fp32-xop-ld128.c
+++ b/src/qs8-igemm/gen/3x4c8-minmax-fp32-xop-ld128.c
@@ -32,7 +32,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-igemm/gen/3x4c8-minmax-fp32-xop-ld64.c b/src/qs8-igemm/gen/3x4c8-minmax-fp32-xop-ld64.c
index e992d35..4c2e594 100644
--- a/src/qs8-igemm/gen/3x4c8-minmax-fp32-xop-ld64.c
+++ b/src/qs8-igemm/gen/3x4c8-minmax-fp32-xop-ld64.c
@@ -32,7 +32,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-igemm/gen/3x8-minmax-rndnu-neon-mlal-lane-prfm.c b/src/qs8-igemm/gen/3x8-minmax-rndnu-neon-mlal-lane-prfm.c
index a137ef7..69b5a3f 100644
--- a/src/qs8-igemm/gen/3x8-minmax-rndnu-neon-mlal-lane-prfm.c
+++ b/src/qs8-igemm/gen/3x8-minmax-rndnu-neon-mlal-lane-prfm.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-igemm/gen/3x8-minmax-rndnu-neon-mlal-lane.c b/src/qs8-igemm/gen/3x8-minmax-rndnu-neon-mlal-lane.c
index ba39892..8e648f2 100644
--- a/src/qs8-igemm/gen/3x8-minmax-rndnu-neon-mlal-lane.c
+++ b/src/qs8-igemm/gen/3x8-minmax-rndnu-neon-mlal-lane.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-igemm/gen/3x8-minmax-rndnu-neon-mull-addw-dup.c b/src/qs8-igemm/gen/3x8-minmax-rndnu-neon-mull-addw-dup.c
index 28c50e5..9e4291f 100644
--- a/src/qs8-igemm/gen/3x8-minmax-rndnu-neon-mull-addw-dup.c
+++ b/src/qs8-igemm/gen/3x8-minmax-rndnu-neon-mull-addw-dup.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-igemm/gen/3x8c16-minmax-rndnu-neon-mlal.c b/src/qs8-igemm/gen/3x8c16-minmax-rndnu-neon-mlal.c
index 17f7f2f..8618f94 100644
--- a/src/qs8-igemm/gen/3x8c16-minmax-rndnu-neon-mlal.c
+++ b/src/qs8-igemm/gen/3x8c16-minmax-rndnu-neon-mlal.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-igemm/gen/3x8c2-minmax-rndnu-neon-mlal-dup.c b/src/qs8-igemm/gen/3x8c2-minmax-rndnu-neon-mlal-dup.c
index b227df9..7da56e2 100644
--- a/src/qs8-igemm/gen/3x8c2-minmax-rndnu-neon-mlal-dup.c
+++ b/src/qs8-igemm/gen/3x8c2-minmax-rndnu-neon-mlal-dup.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-igemm/gen/3x8c2-minmax-rndnu-neon-mlal-ld1r.c b/src/qs8-igemm/gen/3x8c2-minmax-rndnu-neon-mlal-ld1r.c
index da137bf..e1cd416 100644
--- a/src/qs8-igemm/gen/3x8c2-minmax-rndnu-neon-mlal-ld1r.c
+++ b/src/qs8-igemm/gen/3x8c2-minmax-rndnu-neon-mlal-ld1r.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-igemm/gen/3x8c2-minmax-rndnu-neon-mlal-ld2r.c b/src/qs8-igemm/gen/3x8c2-minmax-rndnu-neon-mlal-ld2r.c
index 7f9ee4f..a4b015e 100644
--- a/src/qs8-igemm/gen/3x8c2-minmax-rndnu-neon-mlal-ld2r.c
+++ b/src/qs8-igemm/gen/3x8c2-minmax-rndnu-neon-mlal-ld2r.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-igemm/gen/3x8c2-minmax-rndnu-neon-mlal-ld4r.c b/src/qs8-igemm/gen/3x8c2-minmax-rndnu-neon-mlal-ld4r.c
index ecc0cad..8643d3e 100644
--- a/src/qs8-igemm/gen/3x8c2-minmax-rndnu-neon-mlal-ld4r.c
+++ b/src/qs8-igemm/gen/3x8c2-minmax-rndnu-neon-mlal-ld4r.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-igemm/gen/3x8c2-minmax-rndnu-neon-mull-dup.c b/src/qs8-igemm/gen/3x8c2-minmax-rndnu-neon-mull-dup.c
index b593f6b..db2f649 100644
--- a/src/qs8-igemm/gen/3x8c2-minmax-rndnu-neon-mull-dup.c
+++ b/src/qs8-igemm/gen/3x8c2-minmax-rndnu-neon-mull-dup.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-igemm/gen/3x8c2-minmax-rndnu-neon-mull-ld1r.c b/src/qs8-igemm/gen/3x8c2-minmax-rndnu-neon-mull-ld1r.c
index 90ca6c4..fbcafca 100644
--- a/src/qs8-igemm/gen/3x8c2-minmax-rndnu-neon-mull-ld1r.c
+++ b/src/qs8-igemm/gen/3x8c2-minmax-rndnu-neon-mull-ld1r.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-igemm/gen/3x8c2-minmax-rndnu-neon-mull-ld2r.c b/src/qs8-igemm/gen/3x8c2-minmax-rndnu-neon-mull-ld2r.c
index be45078..bce4fc9 100644
--- a/src/qs8-igemm/gen/3x8c2-minmax-rndnu-neon-mull-ld2r.c
+++ b/src/qs8-igemm/gen/3x8c2-minmax-rndnu-neon-mull-ld2r.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-igemm/gen/3x8c2-minmax-rndnu-neon-mull-ld4r.c b/src/qs8-igemm/gen/3x8c2-minmax-rndnu-neon-mull-ld4r.c
index 3098a47..035aabf 100644
--- a/src/qs8-igemm/gen/3x8c2-minmax-rndnu-neon-mull-ld4r.c
+++ b/src/qs8-igemm/gen/3x8c2-minmax-rndnu-neon-mull-ld4r.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-igemm/gen/3x8c2s4-minmax-rndnu-neon-mlal.c b/src/qs8-igemm/gen/3x8c2s4-minmax-rndnu-neon-mlal.c
index c2e3428..bed0210 100644
--- a/src/qs8-igemm/gen/3x8c2s4-minmax-rndnu-neon-mlal.c
+++ b/src/qs8-igemm/gen/3x8c2s4-minmax-rndnu-neon-mlal.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-igemm/gen/3x8c2s4-minmax-rndnu-neon-mull.c b/src/qs8-igemm/gen/3x8c2s4-minmax-rndnu-neon-mull.c
index 9d58c5e..a2e8be1 100644
--- a/src/qs8-igemm/gen/3x8c2s4-minmax-rndnu-neon-mull.c
+++ b/src/qs8-igemm/gen/3x8c2s4-minmax-rndnu-neon-mull.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-igemm/gen/3x8c4-minmax-rndnu-neon-mlal-dup.c b/src/qs8-igemm/gen/3x8c4-minmax-rndnu-neon-mlal-dup.c
index a9039d7..59e1dc5 100644
--- a/src/qs8-igemm/gen/3x8c4-minmax-rndnu-neon-mlal-dup.c
+++ b/src/qs8-igemm/gen/3x8c4-minmax-rndnu-neon-mlal-dup.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-igemm/gen/3x8c4-minmax-rndnu-neon-mlal-ld1r.c b/src/qs8-igemm/gen/3x8c4-minmax-rndnu-neon-mlal-ld1r.c
index f57f835..ecb850c 100644
--- a/src/qs8-igemm/gen/3x8c4-minmax-rndnu-neon-mlal-ld1r.c
+++ b/src/qs8-igemm/gen/3x8c4-minmax-rndnu-neon-mlal-ld1r.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-igemm/gen/3x8c4-minmax-rndnu-neon-mlal-ld2r.c b/src/qs8-igemm/gen/3x8c4-minmax-rndnu-neon-mlal-ld2r.c
index 9ceeeea..16a8426 100644
--- a/src/qs8-igemm/gen/3x8c4-minmax-rndnu-neon-mlal-ld2r.c
+++ b/src/qs8-igemm/gen/3x8c4-minmax-rndnu-neon-mlal-ld2r.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-igemm/gen/3x8c4-minmax-rndnu-neon-mull-dup.c b/src/qs8-igemm/gen/3x8c4-minmax-rndnu-neon-mull-dup.c
index b8704fb..f63f16f 100644
--- a/src/qs8-igemm/gen/3x8c4-minmax-rndnu-neon-mull-dup.c
+++ b/src/qs8-igemm/gen/3x8c4-minmax-rndnu-neon-mull-dup.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-igemm/gen/3x8c4-minmax-rndnu-neon-mull-ld1r.c b/src/qs8-igemm/gen/3x8c4-minmax-rndnu-neon-mull-ld1r.c
index ebc1487..4de4de5 100644
--- a/src/qs8-igemm/gen/3x8c4-minmax-rndnu-neon-mull-ld1r.c
+++ b/src/qs8-igemm/gen/3x8c4-minmax-rndnu-neon-mull-ld1r.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-igemm/gen/3x8c4-minmax-rndnu-neon-mull-ld2r.c b/src/qs8-igemm/gen/3x8c4-minmax-rndnu-neon-mull-ld2r.c
index 849a3e2..c1e1154 100644
--- a/src/qs8-igemm/gen/3x8c4-minmax-rndnu-neon-mull-ld2r.c
+++ b/src/qs8-igemm/gen/3x8c4-minmax-rndnu-neon-mull-ld2r.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-igemm/gen/3x8c4s2-minmax-rndnu-neon-mlal.c b/src/qs8-igemm/gen/3x8c4s2-minmax-rndnu-neon-mlal.c
index 862d2a8..b23ba78 100644
--- a/src/qs8-igemm/gen/3x8c4s2-minmax-rndnu-neon-mlal.c
+++ b/src/qs8-igemm/gen/3x8c4s2-minmax-rndnu-neon-mlal.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-igemm/gen/3x8c4s2-minmax-rndnu-neon-mull.c b/src/qs8-igemm/gen/3x8c4s2-minmax-rndnu-neon-mull.c
index 6ddf234..b809c0a 100644
--- a/src/qs8-igemm/gen/3x8c4s2-minmax-rndnu-neon-mull.c
+++ b/src/qs8-igemm/gen/3x8c4s2-minmax-rndnu-neon-mull.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-igemm/gen/3x8c8-minmax-fp32-avx2.c b/src/qs8-igemm/gen/3x8c8-minmax-fp32-avx2.c
index 3dd4374..c3e2e00 100644
--- a/src/qs8-igemm/gen/3x8c8-minmax-fp32-avx2.c
+++ b/src/qs8-igemm/gen/3x8c8-minmax-fp32-avx2.c
@@ -28,7 +28,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-igemm/gen/3x8c8-minmax-rndnu-neon-mlal.c b/src/qs8-igemm/gen/3x8c8-minmax-rndnu-neon-mlal.c
index 037ea80..10f777e 100644
--- a/src/qs8-igemm/gen/3x8c8-minmax-rndnu-neon-mlal.c
+++ b/src/qs8-igemm/gen/3x8c8-minmax-rndnu-neon-mlal.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-igemm/gen/3x8c8-minmax-rndnu-neon-mull.c b/src/qs8-igemm/gen/3x8c8-minmax-rndnu-neon-mull.c
index 3ba7a61..ea194eb 100644
--- a/src/qs8-igemm/gen/3x8c8-minmax-rndnu-neon-mull.c
+++ b/src/qs8-igemm/gen/3x8c8-minmax-rndnu-neon-mull.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qs8-igemm/gen/4x16-minmax-fp32-neon-mlal-lane.c b/src/qs8-igemm/gen/4x16-minmax-fp32-neon-mlal-lane.c
index 7500f77..6d8d22a 100644
--- a/src/qs8-igemm/gen/4x16-minmax-fp32-neon-mlal-lane.c
+++ b/src/qs8-igemm/gen/4x16-minmax-fp32-neon-mlal-lane.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-igemm/gen/4x16-minmax-fp32-neonv8-mlal-lane.c b/src/qs8-igemm/gen/4x16-minmax-fp32-neonv8-mlal-lane.c
index 4dcb840..2563720 100644
--- a/src/qs8-igemm/gen/4x16-minmax-fp32-neonv8-mlal-lane.c
+++ b/src/qs8-igemm/gen/4x16-minmax-fp32-neonv8-mlal-lane.c
@@ -28,7 +28,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-igemm/gen/4x16-minmax-rndnu-neon-mlal-lane-prfm.c b/src/qs8-igemm/gen/4x16-minmax-rndnu-neon-mlal-lane-prfm.c
index 2ec7135..3ed491a 100644
--- a/src/qs8-igemm/gen/4x16-minmax-rndnu-neon-mlal-lane-prfm.c
+++ b/src/qs8-igemm/gen/4x16-minmax-rndnu-neon-mlal-lane-prfm.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-igemm/gen/4x16-minmax-rndnu-neon-mlal-lane.c b/src/qs8-igemm/gen/4x16-minmax-rndnu-neon-mlal-lane.c
index 382527a..cd71c52 100644
--- a/src/qs8-igemm/gen/4x16-minmax-rndnu-neon-mlal-lane.c
+++ b/src/qs8-igemm/gen/4x16-minmax-rndnu-neon-mlal-lane.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-igemm/gen/4x16-minmax-rndnu-neon-mull-addw-dup.c b/src/qs8-igemm/gen/4x16-minmax-rndnu-neon-mull-addw-dup.c
index b53bd55..e322ba8 100644
--- a/src/qs8-igemm/gen/4x16-minmax-rndnu-neon-mull-addw-dup.c
+++ b/src/qs8-igemm/gen/4x16-minmax-rndnu-neon-mull-addw-dup.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-igemm/gen/4x16c16-minmax-rndnu-neon-mlal.c b/src/qs8-igemm/gen/4x16c16-minmax-rndnu-neon-mlal.c
index 016f0b7..32f41de 100644
--- a/src/qs8-igemm/gen/4x16c16-minmax-rndnu-neon-mlal.c
+++ b/src/qs8-igemm/gen/4x16c16-minmax-rndnu-neon-mlal.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-igemm/gen/4x16c2-minmax-rndnu-neon-mlal-dup.c b/src/qs8-igemm/gen/4x16c2-minmax-rndnu-neon-mlal-dup.c
index 90d571a..fdbe032 100644
--- a/src/qs8-igemm/gen/4x16c2-minmax-rndnu-neon-mlal-dup.c
+++ b/src/qs8-igemm/gen/4x16c2-minmax-rndnu-neon-mlal-dup.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-igemm/gen/4x16c2-minmax-rndnu-neon-mlal-ld1r.c b/src/qs8-igemm/gen/4x16c2-minmax-rndnu-neon-mlal-ld1r.c
index 0a7dd62..35f20dd 100644
--- a/src/qs8-igemm/gen/4x16c2-minmax-rndnu-neon-mlal-ld1r.c
+++ b/src/qs8-igemm/gen/4x16c2-minmax-rndnu-neon-mlal-ld1r.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-igemm/gen/4x16c2-minmax-rndnu-neon-mlal-ld2r.c b/src/qs8-igemm/gen/4x16c2-minmax-rndnu-neon-mlal-ld2r.c
index 7d14545..8c59dd0 100644
--- a/src/qs8-igemm/gen/4x16c2-minmax-rndnu-neon-mlal-ld2r.c
+++ b/src/qs8-igemm/gen/4x16c2-minmax-rndnu-neon-mlal-ld2r.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-igemm/gen/4x16c2-minmax-rndnu-neon-mlal-ld4r.c b/src/qs8-igemm/gen/4x16c2-minmax-rndnu-neon-mlal-ld4r.c
index 0393a66..448aa8f 100644
--- a/src/qs8-igemm/gen/4x16c2-minmax-rndnu-neon-mlal-ld4r.c
+++ b/src/qs8-igemm/gen/4x16c2-minmax-rndnu-neon-mlal-ld4r.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-igemm/gen/4x16c2-minmax-rndnu-neon-mull-dup.c b/src/qs8-igemm/gen/4x16c2-minmax-rndnu-neon-mull-dup.c
index f715a0d..1d86eed 100644
--- a/src/qs8-igemm/gen/4x16c2-minmax-rndnu-neon-mull-dup.c
+++ b/src/qs8-igemm/gen/4x16c2-minmax-rndnu-neon-mull-dup.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-igemm/gen/4x16c2-minmax-rndnu-neon-mull-ld1r.c b/src/qs8-igemm/gen/4x16c2-minmax-rndnu-neon-mull-ld1r.c
index 417dfd6..90bc13c 100644
--- a/src/qs8-igemm/gen/4x16c2-minmax-rndnu-neon-mull-ld1r.c
+++ b/src/qs8-igemm/gen/4x16c2-minmax-rndnu-neon-mull-ld1r.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-igemm/gen/4x16c2-minmax-rndnu-neon-mull-ld2r.c b/src/qs8-igemm/gen/4x16c2-minmax-rndnu-neon-mull-ld2r.c
index ae34a45..435c45d 100644
--- a/src/qs8-igemm/gen/4x16c2-minmax-rndnu-neon-mull-ld2r.c
+++ b/src/qs8-igemm/gen/4x16c2-minmax-rndnu-neon-mull-ld2r.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-igemm/gen/4x16c2-minmax-rndnu-neon-mull-ld4r.c b/src/qs8-igemm/gen/4x16c2-minmax-rndnu-neon-mull-ld4r.c
index 56d0788..9b6fe8c 100644
--- a/src/qs8-igemm/gen/4x16c2-minmax-rndnu-neon-mull-ld4r.c
+++ b/src/qs8-igemm/gen/4x16c2-minmax-rndnu-neon-mull-ld4r.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-igemm/gen/4x16c2s4-minmax-rndnu-neon-mlal.c b/src/qs8-igemm/gen/4x16c2s4-minmax-rndnu-neon-mlal.c
index 29c118a..85f77de 100644
--- a/src/qs8-igemm/gen/4x16c2s4-minmax-rndnu-neon-mlal.c
+++ b/src/qs8-igemm/gen/4x16c2s4-minmax-rndnu-neon-mlal.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-igemm/gen/4x16c2s4-minmax-rndnu-neon-mull.c b/src/qs8-igemm/gen/4x16c2s4-minmax-rndnu-neon-mull.c
index a246efa..8501826 100644
--- a/src/qs8-igemm/gen/4x16c2s4-minmax-rndnu-neon-mull.c
+++ b/src/qs8-igemm/gen/4x16c2s4-minmax-rndnu-neon-mull.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-igemm/gen/4x16c4-minmax-rndnu-neon-mlal-dup.c b/src/qs8-igemm/gen/4x16c4-minmax-rndnu-neon-mlal-dup.c
index ca92a83..0167061 100644
--- a/src/qs8-igemm/gen/4x16c4-minmax-rndnu-neon-mlal-dup.c
+++ b/src/qs8-igemm/gen/4x16c4-minmax-rndnu-neon-mlal-dup.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-igemm/gen/4x16c4-minmax-rndnu-neon-mlal-ld1r.c b/src/qs8-igemm/gen/4x16c4-minmax-rndnu-neon-mlal-ld1r.c
index db0de1b..d7ed9f8 100644
--- a/src/qs8-igemm/gen/4x16c4-minmax-rndnu-neon-mlal-ld1r.c
+++ b/src/qs8-igemm/gen/4x16c4-minmax-rndnu-neon-mlal-ld1r.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-igemm/gen/4x16c4-minmax-rndnu-neon-mlal-ld2r.c b/src/qs8-igemm/gen/4x16c4-minmax-rndnu-neon-mlal-ld2r.c
index 22a2064..385e433 100644
--- a/src/qs8-igemm/gen/4x16c4-minmax-rndnu-neon-mlal-ld2r.c
+++ b/src/qs8-igemm/gen/4x16c4-minmax-rndnu-neon-mlal-ld2r.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-igemm/gen/4x16c4-minmax-rndnu-neon-mull-dup.c b/src/qs8-igemm/gen/4x16c4-minmax-rndnu-neon-mull-dup.c
index 3fa142a..6cbdfa2 100644
--- a/src/qs8-igemm/gen/4x16c4-minmax-rndnu-neon-mull-dup.c
+++ b/src/qs8-igemm/gen/4x16c4-minmax-rndnu-neon-mull-dup.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-igemm/gen/4x16c4-minmax-rndnu-neon-mull-ld1r.c b/src/qs8-igemm/gen/4x16c4-minmax-rndnu-neon-mull-ld1r.c
index 8c316fc..5139a26 100644
--- a/src/qs8-igemm/gen/4x16c4-minmax-rndnu-neon-mull-ld1r.c
+++ b/src/qs8-igemm/gen/4x16c4-minmax-rndnu-neon-mull-ld1r.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-igemm/gen/4x16c4-minmax-rndnu-neon-mull-ld2r.c b/src/qs8-igemm/gen/4x16c4-minmax-rndnu-neon-mull-ld2r.c
index 30164be..3bf269f 100644
--- a/src/qs8-igemm/gen/4x16c4-minmax-rndnu-neon-mull-ld2r.c
+++ b/src/qs8-igemm/gen/4x16c4-minmax-rndnu-neon-mull-ld2r.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-igemm/gen/4x16c4-minmax-rndnu-neondot.c b/src/qs8-igemm/gen/4x16c4-minmax-rndnu-neondot.c
index bf03403..4b60ae9 100644
--- a/src/qs8-igemm/gen/4x16c4-minmax-rndnu-neondot.c
+++ b/src/qs8-igemm/gen/4x16c4-minmax-rndnu-neondot.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-igemm/gen/4x16c4s2-minmax-rndnu-neon-mlal.c b/src/qs8-igemm/gen/4x16c4s2-minmax-rndnu-neon-mlal.c
index c0fa402..3f7462e 100644
--- a/src/qs8-igemm/gen/4x16c4s2-minmax-rndnu-neon-mlal.c
+++ b/src/qs8-igemm/gen/4x16c4s2-minmax-rndnu-neon-mlal.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-igemm/gen/4x16c4s2-minmax-rndnu-neon-mull.c b/src/qs8-igemm/gen/4x16c4s2-minmax-rndnu-neon-mull.c
index c0f8fae..9b4fc8d 100644
--- a/src/qs8-igemm/gen/4x16c4s2-minmax-rndnu-neon-mull.c
+++ b/src/qs8-igemm/gen/4x16c4s2-minmax-rndnu-neon-mull.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-igemm/gen/4x16c8-minmax-fp32-avx512skx.c b/src/qs8-igemm/gen/4x16c8-minmax-fp32-avx512skx.c
index c9f7214..394d3b7 100644
--- a/src/qs8-igemm/gen/4x16c8-minmax-fp32-avx512skx.c
+++ b/src/qs8-igemm/gen/4x16c8-minmax-fp32-avx512skx.c
@@ -28,7 +28,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-igemm/gen/4x16c8-minmax-rndnu-neon-mlal.c b/src/qs8-igemm/gen/4x16c8-minmax-rndnu-neon-mlal.c
index 41e7432..b04f0b2 100644
--- a/src/qs8-igemm/gen/4x16c8-minmax-rndnu-neon-mlal.c
+++ b/src/qs8-igemm/gen/4x16c8-minmax-rndnu-neon-mlal.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-igemm/gen/4x16c8-minmax-rndnu-neon-mull.c b/src/qs8-igemm/gen/4x16c8-minmax-rndnu-neon-mull.c
index 84fca62..299d732 100644
--- a/src/qs8-igemm/gen/4x16c8-minmax-rndnu-neon-mull.c
+++ b/src/qs8-igemm/gen/4x16c8-minmax-rndnu-neon-mull.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-igemm/gen/4x4c2-minmax-fp32-avx-ld128.c b/src/qs8-igemm/gen/4x4c2-minmax-fp32-avx-ld128.c
index 8fa15c8..d481992 100644
--- a/src/qs8-igemm/gen/4x4c2-minmax-fp32-avx-ld128.c
+++ b/src/qs8-igemm/gen/4x4c2-minmax-fp32-avx-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-igemm/gen/4x4c2-minmax-fp32-avx-ld64.c b/src/qs8-igemm/gen/4x4c2-minmax-fp32-avx-ld64.c
index 56c4caf..242457d 100644
--- a/src/qs8-igemm/gen/4x4c2-minmax-fp32-avx-ld64.c
+++ b/src/qs8-igemm/gen/4x4c2-minmax-fp32-avx-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-igemm/gen/4x4c2-minmax-fp32-sse2-ld128.c b/src/qs8-igemm/gen/4x4c2-minmax-fp32-sse2-ld128.c
index 1ad8cfe..2c92252 100644
--- a/src/qs8-igemm/gen/4x4c2-minmax-fp32-sse2-ld128.c
+++ b/src/qs8-igemm/gen/4x4c2-minmax-fp32-sse2-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-igemm/gen/4x4c2-minmax-fp32-sse2-ld64.c b/src/qs8-igemm/gen/4x4c2-minmax-fp32-sse2-ld64.c
index 7f4d708..b403d3f 100644
--- a/src/qs8-igemm/gen/4x4c2-minmax-fp32-sse2-ld64.c
+++ b/src/qs8-igemm/gen/4x4c2-minmax-fp32-sse2-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-igemm/gen/4x4c2-minmax-fp32-sse41-ld128.c b/src/qs8-igemm/gen/4x4c2-minmax-fp32-sse41-ld128.c
index 2c080e2..396db55 100644
--- a/src/qs8-igemm/gen/4x4c2-minmax-fp32-sse41-ld128.c
+++ b/src/qs8-igemm/gen/4x4c2-minmax-fp32-sse41-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-igemm/gen/4x4c2-minmax-fp32-sse41-ld64.c b/src/qs8-igemm/gen/4x4c2-minmax-fp32-sse41-ld64.c
index c1417d2..71b20f9 100644
--- a/src/qs8-igemm/gen/4x4c2-minmax-fp32-sse41-ld64.c
+++ b/src/qs8-igemm/gen/4x4c2-minmax-fp32-sse41-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-igemm/gen/4x4c2-minmax-fp32-wasmsimd-dot16x2-ld128.c b/src/qs8-igemm/gen/4x4c2-minmax-fp32-wasmsimd-dot16x2-ld128.c
index be8da9e..59a9369 100644
--- a/src/qs8-igemm/gen/4x4c2-minmax-fp32-wasmsimd-dot16x2-ld128.c
+++ b/src/qs8-igemm/gen/4x4c2-minmax-fp32-wasmsimd-dot16x2-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-igemm/gen/4x4c2-minmax-fp32-wasmsimd-dot16x2-ld64.c b/src/qs8-igemm/gen/4x4c2-minmax-fp32-wasmsimd-dot16x2-ld64.c
index 772fd8f..dab2508 100644
--- a/src/qs8-igemm/gen/4x4c2-minmax-fp32-wasmsimd-dot16x2-ld64.c
+++ b/src/qs8-igemm/gen/4x4c2-minmax-fp32-wasmsimd-dot16x2-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-igemm/gen/4x4c2-minmax-fp32-xop-ld128.c b/src/qs8-igemm/gen/4x4c2-minmax-fp32-xop-ld128.c
index 25d62e7..0fddd73 100644
--- a/src/qs8-igemm/gen/4x4c2-minmax-fp32-xop-ld128.c
+++ b/src/qs8-igemm/gen/4x4c2-minmax-fp32-xop-ld128.c
@@ -32,7 +32,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-igemm/gen/4x4c2-minmax-fp32-xop-ld64.c b/src/qs8-igemm/gen/4x4c2-minmax-fp32-xop-ld64.c
index 8c5ffc7..602aa9a 100644
--- a/src/qs8-igemm/gen/4x4c2-minmax-fp32-xop-ld64.c
+++ b/src/qs8-igemm/gen/4x4c2-minmax-fp32-xop-ld64.c
@@ -32,7 +32,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-igemm/gen/4x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld128.c b/src/qs8-igemm/gen/4x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld128.c
index 56734f6..fd09dd6 100644
--- a/src/qs8-igemm/gen/4x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld128.c
+++ b/src/qs8-igemm/gen/4x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-igemm/gen/4x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld64.c b/src/qs8-igemm/gen/4x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld64.c
index e46402f..68a3917 100644
--- a/src/qs8-igemm/gen/4x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld64.c
+++ b/src/qs8-igemm/gen/4x4c2s4-minmax-fp32-wasmsimd-dot16x2-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-igemm/gen/4x4c8-minmax-fp32-wasmsimd-dot16x2-ld128.c b/src/qs8-igemm/gen/4x4c8-minmax-fp32-wasmsimd-dot16x2-ld128.c
index 4a1e7dc..8760d08 100644
--- a/src/qs8-igemm/gen/4x4c8-minmax-fp32-wasmsimd-dot16x2-ld128.c
+++ b/src/qs8-igemm/gen/4x4c8-minmax-fp32-wasmsimd-dot16x2-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-igemm/gen/4x4c8-minmax-fp32-wasmsimd-dot16x2-ld64.c b/src/qs8-igemm/gen/4x4c8-minmax-fp32-wasmsimd-dot16x2-ld64.c
index bf87e00..846df23 100644
--- a/src/qs8-igemm/gen/4x4c8-minmax-fp32-wasmsimd-dot16x2-ld64.c
+++ b/src/qs8-igemm/gen/4x4c8-minmax-fp32-wasmsimd-dot16x2-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-igemm/gen/4x8-minmax-rndnu-neon-mlal-lane-prfm.c b/src/qs8-igemm/gen/4x8-minmax-rndnu-neon-mlal-lane-prfm.c
index f8759e6..b2a9f13 100644
--- a/src/qs8-igemm/gen/4x8-minmax-rndnu-neon-mlal-lane-prfm.c
+++ b/src/qs8-igemm/gen/4x8-minmax-rndnu-neon-mlal-lane-prfm.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-igemm/gen/4x8-minmax-rndnu-neon-mlal-lane.c b/src/qs8-igemm/gen/4x8-minmax-rndnu-neon-mlal-lane.c
index 8bfc06b..85e614a 100644
--- a/src/qs8-igemm/gen/4x8-minmax-rndnu-neon-mlal-lane.c
+++ b/src/qs8-igemm/gen/4x8-minmax-rndnu-neon-mlal-lane.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-igemm/gen/4x8-minmax-rndnu-neon-mull-addw-dup.c b/src/qs8-igemm/gen/4x8-minmax-rndnu-neon-mull-addw-dup.c
index d4f5d2a..2918d8d 100644
--- a/src/qs8-igemm/gen/4x8-minmax-rndnu-neon-mull-addw-dup.c
+++ b/src/qs8-igemm/gen/4x8-minmax-rndnu-neon-mull-addw-dup.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-igemm/gen/4x8c16-minmax-rndnu-neon-mlal.c b/src/qs8-igemm/gen/4x8c16-minmax-rndnu-neon-mlal.c
index 2f48b0b..e589904 100644
--- a/src/qs8-igemm/gen/4x8c16-minmax-rndnu-neon-mlal.c
+++ b/src/qs8-igemm/gen/4x8c16-minmax-rndnu-neon-mlal.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-igemm/gen/4x8c2-minmax-rndnu-neon-mlal-dup.c b/src/qs8-igemm/gen/4x8c2-minmax-rndnu-neon-mlal-dup.c
index 4076dd9..1e8e168 100644
--- a/src/qs8-igemm/gen/4x8c2-minmax-rndnu-neon-mlal-dup.c
+++ b/src/qs8-igemm/gen/4x8c2-minmax-rndnu-neon-mlal-dup.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-igemm/gen/4x8c2-minmax-rndnu-neon-mlal-ld1r.c b/src/qs8-igemm/gen/4x8c2-minmax-rndnu-neon-mlal-ld1r.c
index 911d933..909e992 100644
--- a/src/qs8-igemm/gen/4x8c2-minmax-rndnu-neon-mlal-ld1r.c
+++ b/src/qs8-igemm/gen/4x8c2-minmax-rndnu-neon-mlal-ld1r.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-igemm/gen/4x8c2-minmax-rndnu-neon-mlal-ld2r.c b/src/qs8-igemm/gen/4x8c2-minmax-rndnu-neon-mlal-ld2r.c
index 1d9dd48..d2bdeb3 100644
--- a/src/qs8-igemm/gen/4x8c2-minmax-rndnu-neon-mlal-ld2r.c
+++ b/src/qs8-igemm/gen/4x8c2-minmax-rndnu-neon-mlal-ld2r.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-igemm/gen/4x8c2-minmax-rndnu-neon-mlal-ld4r.c b/src/qs8-igemm/gen/4x8c2-minmax-rndnu-neon-mlal-ld4r.c
index 3b438c2..d6cf612 100644
--- a/src/qs8-igemm/gen/4x8c2-minmax-rndnu-neon-mlal-ld4r.c
+++ b/src/qs8-igemm/gen/4x8c2-minmax-rndnu-neon-mlal-ld4r.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-igemm/gen/4x8c2-minmax-rndnu-neon-mull-dup.c b/src/qs8-igemm/gen/4x8c2-minmax-rndnu-neon-mull-dup.c
index 7e0ba37..5b73439 100644
--- a/src/qs8-igemm/gen/4x8c2-minmax-rndnu-neon-mull-dup.c
+++ b/src/qs8-igemm/gen/4x8c2-minmax-rndnu-neon-mull-dup.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-igemm/gen/4x8c2-minmax-rndnu-neon-mull-ld1r.c b/src/qs8-igemm/gen/4x8c2-minmax-rndnu-neon-mull-ld1r.c
index a2bd65a..f0f2969 100644
--- a/src/qs8-igemm/gen/4x8c2-minmax-rndnu-neon-mull-ld1r.c
+++ b/src/qs8-igemm/gen/4x8c2-minmax-rndnu-neon-mull-ld1r.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-igemm/gen/4x8c2-minmax-rndnu-neon-mull-ld2r.c b/src/qs8-igemm/gen/4x8c2-minmax-rndnu-neon-mull-ld2r.c
index 04a77ea..c81ed9f 100644
--- a/src/qs8-igemm/gen/4x8c2-minmax-rndnu-neon-mull-ld2r.c
+++ b/src/qs8-igemm/gen/4x8c2-minmax-rndnu-neon-mull-ld2r.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-igemm/gen/4x8c2-minmax-rndnu-neon-mull-ld4r.c b/src/qs8-igemm/gen/4x8c2-minmax-rndnu-neon-mull-ld4r.c
index 488522b..54f1d44 100644
--- a/src/qs8-igemm/gen/4x8c2-minmax-rndnu-neon-mull-ld4r.c
+++ b/src/qs8-igemm/gen/4x8c2-minmax-rndnu-neon-mull-ld4r.c
@@ -26,7 +26,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-igemm/gen/4x8c2s4-minmax-rndnu-neon-mlal.c b/src/qs8-igemm/gen/4x8c2s4-minmax-rndnu-neon-mlal.c
index 1a894a4..bc07d74 100644
--- a/src/qs8-igemm/gen/4x8c2s4-minmax-rndnu-neon-mlal.c
+++ b/src/qs8-igemm/gen/4x8c2s4-minmax-rndnu-neon-mlal.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-igemm/gen/4x8c2s4-minmax-rndnu-neon-mull.c b/src/qs8-igemm/gen/4x8c2s4-minmax-rndnu-neon-mull.c
index 9df3ca9..5d2f6ed 100644
--- a/src/qs8-igemm/gen/4x8c2s4-minmax-rndnu-neon-mull.c
+++ b/src/qs8-igemm/gen/4x8c2s4-minmax-rndnu-neon-mull.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-igemm/gen/4x8c4-minmax-rndnu-neon-mlal-dup.c b/src/qs8-igemm/gen/4x8c4-minmax-rndnu-neon-mlal-dup.c
index 00c0cf8..beb2ad6 100644
--- a/src/qs8-igemm/gen/4x8c4-minmax-rndnu-neon-mlal-dup.c
+++ b/src/qs8-igemm/gen/4x8c4-minmax-rndnu-neon-mlal-dup.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-igemm/gen/4x8c4-minmax-rndnu-neon-mlal-ld1r.c b/src/qs8-igemm/gen/4x8c4-minmax-rndnu-neon-mlal-ld1r.c
index 126b6d8..76864e2 100644
--- a/src/qs8-igemm/gen/4x8c4-minmax-rndnu-neon-mlal-ld1r.c
+++ b/src/qs8-igemm/gen/4x8c4-minmax-rndnu-neon-mlal-ld1r.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-igemm/gen/4x8c4-minmax-rndnu-neon-mlal-ld2r.c b/src/qs8-igemm/gen/4x8c4-minmax-rndnu-neon-mlal-ld2r.c
index e4d1d1b..eb171db 100644
--- a/src/qs8-igemm/gen/4x8c4-minmax-rndnu-neon-mlal-ld2r.c
+++ b/src/qs8-igemm/gen/4x8c4-minmax-rndnu-neon-mlal-ld2r.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-igemm/gen/4x8c4-minmax-rndnu-neon-mull-dup.c b/src/qs8-igemm/gen/4x8c4-minmax-rndnu-neon-mull-dup.c
index dac64af..574a962 100644
--- a/src/qs8-igemm/gen/4x8c4-minmax-rndnu-neon-mull-dup.c
+++ b/src/qs8-igemm/gen/4x8c4-minmax-rndnu-neon-mull-dup.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-igemm/gen/4x8c4-minmax-rndnu-neon-mull-ld1r.c b/src/qs8-igemm/gen/4x8c4-minmax-rndnu-neon-mull-ld1r.c
index 01cd922..3085dd2 100644
--- a/src/qs8-igemm/gen/4x8c4-minmax-rndnu-neon-mull-ld1r.c
+++ b/src/qs8-igemm/gen/4x8c4-minmax-rndnu-neon-mull-ld1r.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-igemm/gen/4x8c4-minmax-rndnu-neon-mull-ld2r.c b/src/qs8-igemm/gen/4x8c4-minmax-rndnu-neon-mull-ld2r.c
index aa8800e..fe12cf2 100644
--- a/src/qs8-igemm/gen/4x8c4-minmax-rndnu-neon-mull-ld2r.c
+++ b/src/qs8-igemm/gen/4x8c4-minmax-rndnu-neon-mull-ld2r.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-igemm/gen/4x8c4-minmax-rndnu-neondot.c b/src/qs8-igemm/gen/4x8c4-minmax-rndnu-neondot.c
index 9f8512c..33be07d 100644
--- a/src/qs8-igemm/gen/4x8c4-minmax-rndnu-neondot.c
+++ b/src/qs8-igemm/gen/4x8c4-minmax-rndnu-neondot.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-igemm/gen/4x8c4s2-minmax-rndnu-neon-mlal.c b/src/qs8-igemm/gen/4x8c4s2-minmax-rndnu-neon-mlal.c
index 94c0b8d..fbb3f9a 100644
--- a/src/qs8-igemm/gen/4x8c4s2-minmax-rndnu-neon-mlal.c
+++ b/src/qs8-igemm/gen/4x8c4s2-minmax-rndnu-neon-mlal.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-igemm/gen/4x8c4s2-minmax-rndnu-neon-mull.c b/src/qs8-igemm/gen/4x8c4s2-minmax-rndnu-neon-mull.c
index b2e82fb..50a17b8 100644
--- a/src/qs8-igemm/gen/4x8c4s2-minmax-rndnu-neon-mull.c
+++ b/src/qs8-igemm/gen/4x8c4s2-minmax-rndnu-neon-mull.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-igemm/gen/4x8c8-minmax-rndnu-neon-mlal.c b/src/qs8-igemm/gen/4x8c8-minmax-rndnu-neon-mlal.c
index cf6f090..8cbab3e 100644
--- a/src/qs8-igemm/gen/4x8c8-minmax-rndnu-neon-mlal.c
+++ b/src/qs8-igemm/gen/4x8c8-minmax-rndnu-neon-mlal.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-igemm/gen/4x8c8-minmax-rndnu-neon-mull.c b/src/qs8-igemm/gen/4x8c8-minmax-rndnu-neon-mull.c
index 3c84348..0489f4b 100644
--- a/src/qs8-igemm/gen/4x8c8-minmax-rndnu-neon-mull.c
+++ b/src/qs8-igemm/gen/4x8c8-minmax-rndnu-neon-mull.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qs8-igemm/gen/6x16-minmax-rndnu-neon-mlal-lane-prfm.c b/src/qs8-igemm/gen/6x16-minmax-rndnu-neon-mlal-lane-prfm.c
index 7447096..122d9f7 100644
--- a/src/qs8-igemm/gen/6x16-minmax-rndnu-neon-mlal-lane-prfm.c
+++ b/src/qs8-igemm/gen/6x16-minmax-rndnu-neon-mlal-lane-prfm.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 6);
diff --git a/src/qs8-igemm/gen/6x16-minmax-rndnu-neon-mlal-lane.c b/src/qs8-igemm/gen/6x16-minmax-rndnu-neon-mlal-lane.c
index f7914cc..90e3d7a 100644
--- a/src/qs8-igemm/gen/6x16-minmax-rndnu-neon-mlal-lane.c
+++ b/src/qs8-igemm/gen/6x16-minmax-rndnu-neon-mlal-lane.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 6);
diff --git a/src/qs8-igemm/gen/6x16c4-minmax-rndnu-neondot.c b/src/qs8-igemm/gen/6x16c4-minmax-rndnu-neondot.c
index 8fce8c7..255ad10 100644
--- a/src/qs8-igemm/gen/6x16c4-minmax-rndnu-neondot.c
+++ b/src/qs8-igemm/gen/6x16c4-minmax-rndnu-neondot.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 6);
diff --git a/src/qs8-igemm/gen/6x8-minmax-rndnu-neon-mlal-lane-prfm.c b/src/qs8-igemm/gen/6x8-minmax-rndnu-neon-mlal-lane-prfm.c
index cf90640..930f738 100644
--- a/src/qs8-igemm/gen/6x8-minmax-rndnu-neon-mlal-lane-prfm.c
+++ b/src/qs8-igemm/gen/6x8-minmax-rndnu-neon-mlal-lane-prfm.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 6);
diff --git a/src/qs8-igemm/gen/6x8-minmax-rndnu-neon-mlal-lane.c b/src/qs8-igemm/gen/6x8-minmax-rndnu-neon-mlal-lane.c
index 8611183..3ff3e49 100644
--- a/src/qs8-igemm/gen/6x8-minmax-rndnu-neon-mlal-lane.c
+++ b/src/qs8-igemm/gen/6x8-minmax-rndnu-neon-mlal-lane.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 6);
diff --git a/src/qs8-igemm/gen/6x8c4-minmax-rndnu-neondot.c b/src/qs8-igemm/gen/6x8c4-minmax-rndnu-neondot.c
index abc7e64..bc3eb94 100644
--- a/src/qs8-igemm/gen/6x8c4-minmax-rndnu-neondot.c
+++ b/src/qs8-igemm/gen/6x8c4-minmax-rndnu-neondot.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 6);
diff --git a/src/qs8-igemm/gen/8x16c4-minmax-rndnu-neondot.c b/src/qs8-igemm/gen/8x16c4-minmax-rndnu-neondot.c
index 71d0bf4..9412e84 100644
--- a/src/qs8-igemm/gen/8x16c4-minmax-rndnu-neondot.c
+++ b/src/qs8-igemm/gen/8x16c4-minmax-rndnu-neondot.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 8);
diff --git a/src/qs8-igemm/gen/8x8c4-minmax-rndnu-neondot.c b/src/qs8-igemm/gen/8x8c4-minmax-rndnu-neondot.c
index c88e948..2bb1c2d 100644
--- a/src/qs8-igemm/gen/8x8c4-minmax-rndnu-neondot.c
+++ b/src/qs8-igemm/gen/8x8c4-minmax-rndnu-neondot.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 8);
diff --git a/src/qs8-igemm/neon-mlal-lane.c.in b/src/qs8-igemm/neon-mlal-lane.c.in
index ece91b4..6551c2f 100644
--- a/src/qs8-igemm/neon-mlal-lane.c.in
+++ b/src/qs8-igemm/neon-mlal-lane.c.in
@@ -59,7 +59,7 @@
     size_t cn_stride,
     size_t a_offset,
     const ${XINT8_T}* zero,
-    const union ${PARAMS_UNION} params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union ${PARAMS_UNION} params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= ${MR});
diff --git a/src/qs8-igemm/neon-mull-addw-dup.c.in b/src/qs8-igemm/neon-mull-addw-dup.c.in
index 6248031..8c52075 100644
--- a/src/qs8-igemm/neon-mull-addw-dup.c.in
+++ b/src/qs8-igemm/neon-mull-addw-dup.c.in
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const int8_t* zero,
-    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qs8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= ${MR});
diff --git a/src/qu8-f32-vcvt/gen/vcvt-scalar-x1.c b/src/qu8-f32-vcvt/gen/vcvt-scalar-x1.c
index 9923dfd..30c04fa 100644
--- a/src/qu8-f32-vcvt/gen/vcvt-scalar-x1.c
+++ b/src/qu8-f32-vcvt/gen/vcvt-scalar-x1.c
@@ -18,7 +18,7 @@
     size_t n,
     const uint8_t* x,
     float* y,
-    const union xnn_qu8_f32_cvt_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_qu8_f32_cvt_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(uint8_t) == 0);
diff --git a/src/qu8-f32-vcvt/gen/vcvt-scalar-x2.c b/src/qu8-f32-vcvt/gen/vcvt-scalar-x2.c
index e7d269e..7bc2ea3 100644
--- a/src/qu8-f32-vcvt/gen/vcvt-scalar-x2.c
+++ b/src/qu8-f32-vcvt/gen/vcvt-scalar-x2.c
@@ -18,7 +18,7 @@
     size_t n,
     const uint8_t* x,
     float* y,
-    const union xnn_qu8_f32_cvt_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_qu8_f32_cvt_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(uint8_t) == 0);
diff --git a/src/qu8-f32-vcvt/gen/vcvt-scalar-x3.c b/src/qu8-f32-vcvt/gen/vcvt-scalar-x3.c
index 2cf908b..89cd40e 100644
--- a/src/qu8-f32-vcvt/gen/vcvt-scalar-x3.c
+++ b/src/qu8-f32-vcvt/gen/vcvt-scalar-x3.c
@@ -18,7 +18,7 @@
     size_t n,
     const uint8_t* x,
     float* y,
-    const union xnn_qu8_f32_cvt_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_qu8_f32_cvt_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(uint8_t) == 0);
diff --git a/src/qu8-f32-vcvt/gen/vcvt-scalar-x4.c b/src/qu8-f32-vcvt/gen/vcvt-scalar-x4.c
index c665670..10383ac 100644
--- a/src/qu8-f32-vcvt/gen/vcvt-scalar-x4.c
+++ b/src/qu8-f32-vcvt/gen/vcvt-scalar-x4.c
@@ -18,7 +18,7 @@
     size_t n,
     const uint8_t* x,
     float* y,
-    const union xnn_qu8_f32_cvt_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_qu8_f32_cvt_params params[restrict XNN_MIN_ELEMENTS(1)])
 {
   assert(n != 0);
   assert(n % sizeof(uint8_t) == 0);
diff --git a/src/qu8-gemm/c4-neondot.c.in b/src/qu8-gemm/c4-neondot.c.in
index 31535de..52db4d7 100644
--- a/src/qu8-gemm/c4-neondot.c.in
+++ b/src/qu8-gemm/c4-neondot.c.in
@@ -28,7 +28,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= ${MR});
diff --git a/src/qu8-gemm/gen/1x16-minmax-fp32-neon-mlal-lane.c b/src/qu8-gemm/gen/1x16-minmax-fp32-neon-mlal-lane.c
index 6a2345e..b7f7f49 100644
--- a/src/qu8-gemm/gen/1x16-minmax-fp32-neon-mlal-lane.c
+++ b/src/qu8-gemm/gen/1x16-minmax-fp32-neon-mlal-lane.c
@@ -25,7 +25,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qu8-gemm/gen/1x16-minmax-fp32-neonv8-mlal-lane.c b/src/qu8-gemm/gen/1x16-minmax-fp32-neonv8-mlal-lane.c
index 542dad4..8608a32 100644
--- a/src/qu8-gemm/gen/1x16-minmax-fp32-neonv8-mlal-lane.c
+++ b/src/qu8-gemm/gen/1x16-minmax-fp32-neonv8-mlal-lane.c
@@ -26,7 +26,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qu8-gemm/gen/1x16-minmax-rndnu-neon-mlal-lane.c b/src/qu8-gemm/gen/1x16-minmax-rndnu-neon-mlal-lane.c
index f2338e1..278b2c3 100644
--- a/src/qu8-gemm/gen/1x16-minmax-rndnu-neon-mlal-lane.c
+++ b/src/qu8-gemm/gen/1x16-minmax-rndnu-neon-mlal-lane.c
@@ -25,7 +25,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qu8-gemm/gen/1x16c4-minmax-fp32-neondot.c b/src/qu8-gemm/gen/1x16c4-minmax-fp32-neondot.c
index 2f6a26e..496d714 100644
--- a/src/qu8-gemm/gen/1x16c4-minmax-fp32-neondot.c
+++ b/src/qu8-gemm/gen/1x16c4-minmax-fp32-neondot.c
@@ -26,7 +26,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qu8-gemm/gen/1x16c4-minmax-rndnu-neondot.c b/src/qu8-gemm/gen/1x16c4-minmax-rndnu-neondot.c
index 4e0ba9c..a33edfa 100644
--- a/src/qu8-gemm/gen/1x16c4-minmax-rndnu-neondot.c
+++ b/src/qu8-gemm/gen/1x16c4-minmax-rndnu-neondot.c
@@ -25,7 +25,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qu8-gemm/gen/1x16c8-minmax-fp32-avx512skx.c b/src/qu8-gemm/gen/1x16c8-minmax-fp32-avx512skx.c
index 72de915..a7ef7fe 100644
--- a/src/qu8-gemm/gen/1x16c8-minmax-fp32-avx512skx.c
+++ b/src/qu8-gemm/gen/1x16c8-minmax-fp32-avx512skx.c
@@ -26,7 +26,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qu8-gemm/gen/1x32c4-minmax-rndnu-neondot.c b/src/qu8-gemm/gen/1x32c4-minmax-rndnu-neondot.c
index 92806b2..3a83fbf 100644
--- a/src/qu8-gemm/gen/1x32c4-minmax-rndnu-neondot.c
+++ b/src/qu8-gemm/gen/1x32c4-minmax-rndnu-neondot.c
@@ -25,7 +25,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qu8-gemm/gen/1x4c2-minmax-fp32-avx-ld128.c b/src/qu8-gemm/gen/1x4c2-minmax-fp32-avx-ld128.c
index ce18141..4ce958c 100644
--- a/src/qu8-gemm/gen/1x4c2-minmax-fp32-avx-ld128.c
+++ b/src/qu8-gemm/gen/1x4c2-minmax-fp32-avx-ld128.c
@@ -26,7 +26,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qu8-gemm/gen/1x4c2-minmax-fp32-avx-ld64.c b/src/qu8-gemm/gen/1x4c2-minmax-fp32-avx-ld64.c
index e69f783..d8b4e32 100644
--- a/src/qu8-gemm/gen/1x4c2-minmax-fp32-avx-ld64.c
+++ b/src/qu8-gemm/gen/1x4c2-minmax-fp32-avx-ld64.c
@@ -26,7 +26,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qu8-gemm/gen/1x4c2-minmax-fp32-sse2-ld128.c b/src/qu8-gemm/gen/1x4c2-minmax-fp32-sse2-ld128.c
index bc05faa..b0689c5 100644
--- a/src/qu8-gemm/gen/1x4c2-minmax-fp32-sse2-ld128.c
+++ b/src/qu8-gemm/gen/1x4c2-minmax-fp32-sse2-ld128.c
@@ -26,7 +26,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qu8-gemm/gen/1x4c2-minmax-fp32-sse2-ld64.c b/src/qu8-gemm/gen/1x4c2-minmax-fp32-sse2-ld64.c
index 8c4ceda..57ef0e9 100644
--- a/src/qu8-gemm/gen/1x4c2-minmax-fp32-sse2-ld64.c
+++ b/src/qu8-gemm/gen/1x4c2-minmax-fp32-sse2-ld64.c
@@ -26,7 +26,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qu8-gemm/gen/1x4c2-minmax-fp32-sse41-ld128.c b/src/qu8-gemm/gen/1x4c2-minmax-fp32-sse41-ld128.c
index 1ce3387..066a6fc 100644
--- a/src/qu8-gemm/gen/1x4c2-minmax-fp32-sse41-ld128.c
+++ b/src/qu8-gemm/gen/1x4c2-minmax-fp32-sse41-ld128.c
@@ -26,7 +26,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qu8-gemm/gen/1x4c2-minmax-fp32-sse41-ld64.c b/src/qu8-gemm/gen/1x4c2-minmax-fp32-sse41-ld64.c
index 1403a78..0242dc3 100644
--- a/src/qu8-gemm/gen/1x4c2-minmax-fp32-sse41-ld64.c
+++ b/src/qu8-gemm/gen/1x4c2-minmax-fp32-sse41-ld64.c
@@ -26,7 +26,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qu8-gemm/gen/1x4c2-minmax-fp32-wasmsimd-dot16x2-ld128.c b/src/qu8-gemm/gen/1x4c2-minmax-fp32-wasmsimd-dot16x2-ld128.c
index 906da57..35532a0 100644
--- a/src/qu8-gemm/gen/1x4c2-minmax-fp32-wasmsimd-dot16x2-ld128.c
+++ b/src/qu8-gemm/gen/1x4c2-minmax-fp32-wasmsimd-dot16x2-ld128.c
@@ -26,7 +26,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qu8-gemm/gen/1x4c2-minmax-fp32-wasmsimd-dot16x2-ld64.c b/src/qu8-gemm/gen/1x4c2-minmax-fp32-wasmsimd-dot16x2-ld64.c
index 8e35a3b..bbc295f 100644
--- a/src/qu8-gemm/gen/1x4c2-minmax-fp32-wasmsimd-dot16x2-ld64.c
+++ b/src/qu8-gemm/gen/1x4c2-minmax-fp32-wasmsimd-dot16x2-ld64.c
@@ -26,7 +26,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qu8-gemm/gen/1x4c2-minmax-fp32-xop-ld128.c b/src/qu8-gemm/gen/1x4c2-minmax-fp32-xop-ld128.c
index fe76722..6a2a723 100644
--- a/src/qu8-gemm/gen/1x4c2-minmax-fp32-xop-ld128.c
+++ b/src/qu8-gemm/gen/1x4c2-minmax-fp32-xop-ld128.c
@@ -31,7 +31,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qu8-gemm/gen/1x4c2-minmax-fp32-xop-ld64.c b/src/qu8-gemm/gen/1x4c2-minmax-fp32-xop-ld64.c
index 784b1ef..b17a6b9 100644
--- a/src/qu8-gemm/gen/1x4c2-minmax-fp32-xop-ld64.c
+++ b/src/qu8-gemm/gen/1x4c2-minmax-fp32-xop-ld64.c
@@ -31,7 +31,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qu8-gemm/gen/1x4c8-minmax-fp32-avx-ld128.c b/src/qu8-gemm/gen/1x4c8-minmax-fp32-avx-ld128.c
index 52845ac..2a60043 100644
--- a/src/qu8-gemm/gen/1x4c8-minmax-fp32-avx-ld128.c
+++ b/src/qu8-gemm/gen/1x4c8-minmax-fp32-avx-ld128.c
@@ -25,7 +25,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qu8-gemm/gen/1x4c8-minmax-fp32-avx-ld64.c b/src/qu8-gemm/gen/1x4c8-minmax-fp32-avx-ld64.c
index 249f7ec..91fc4d1 100644
--- a/src/qu8-gemm/gen/1x4c8-minmax-fp32-avx-ld64.c
+++ b/src/qu8-gemm/gen/1x4c8-minmax-fp32-avx-ld64.c
@@ -25,7 +25,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qu8-gemm/gen/1x4c8-minmax-fp32-sse2-ld128.c b/src/qu8-gemm/gen/1x4c8-minmax-fp32-sse2-ld128.c
index 021bde7..b071205 100644
--- a/src/qu8-gemm/gen/1x4c8-minmax-fp32-sse2-ld128.c
+++ b/src/qu8-gemm/gen/1x4c8-minmax-fp32-sse2-ld128.c
@@ -25,7 +25,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qu8-gemm/gen/1x4c8-minmax-fp32-sse2-ld64.c b/src/qu8-gemm/gen/1x4c8-minmax-fp32-sse2-ld64.c
index c34ee82..dc22efe 100644
--- a/src/qu8-gemm/gen/1x4c8-minmax-fp32-sse2-ld64.c
+++ b/src/qu8-gemm/gen/1x4c8-minmax-fp32-sse2-ld64.c
@@ -25,7 +25,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qu8-gemm/gen/1x4c8-minmax-fp32-sse41-ld128.c b/src/qu8-gemm/gen/1x4c8-minmax-fp32-sse41-ld128.c
index 5b59020..49ce281 100644
--- a/src/qu8-gemm/gen/1x4c8-minmax-fp32-sse41-ld128.c
+++ b/src/qu8-gemm/gen/1x4c8-minmax-fp32-sse41-ld128.c
@@ -25,7 +25,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qu8-gemm/gen/1x4c8-minmax-fp32-sse41-ld64.c b/src/qu8-gemm/gen/1x4c8-minmax-fp32-sse41-ld64.c
index 123393a..4ccc198 100644
--- a/src/qu8-gemm/gen/1x4c8-minmax-fp32-sse41-ld64.c
+++ b/src/qu8-gemm/gen/1x4c8-minmax-fp32-sse41-ld64.c
@@ -25,7 +25,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qu8-gemm/gen/1x4c8-minmax-fp32-wasmsimd-dot16x2-ld128.c b/src/qu8-gemm/gen/1x4c8-minmax-fp32-wasmsimd-dot16x2-ld128.c
index 67593c4..2071136 100644
--- a/src/qu8-gemm/gen/1x4c8-minmax-fp32-wasmsimd-dot16x2-ld128.c
+++ b/src/qu8-gemm/gen/1x4c8-minmax-fp32-wasmsimd-dot16x2-ld128.c
@@ -25,7 +25,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qu8-gemm/gen/1x4c8-minmax-fp32-wasmsimd-dot16x2-ld64.c b/src/qu8-gemm/gen/1x4c8-minmax-fp32-wasmsimd-dot16x2-ld64.c
index a7d8881..156a746 100644
--- a/src/qu8-gemm/gen/1x4c8-minmax-fp32-wasmsimd-dot16x2-ld64.c
+++ b/src/qu8-gemm/gen/1x4c8-minmax-fp32-wasmsimd-dot16x2-ld64.c
@@ -25,7 +25,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qu8-gemm/gen/1x4c8-minmax-fp32-wasmsimd-mul32-ld128.c b/src/qu8-gemm/gen/1x4c8-minmax-fp32-wasmsimd-mul32-ld128.c
index e210673..f11af28 100644
--- a/src/qu8-gemm/gen/1x4c8-minmax-fp32-wasmsimd-mul32-ld128.c
+++ b/src/qu8-gemm/gen/1x4c8-minmax-fp32-wasmsimd-mul32-ld128.c
@@ -25,7 +25,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qu8-gemm/gen/1x4c8-minmax-fp32-wasmsimd-mul32-ld64.c b/src/qu8-gemm/gen/1x4c8-minmax-fp32-wasmsimd-mul32-ld64.c
index 48cdd00..443c6a9 100644
--- a/src/qu8-gemm/gen/1x4c8-minmax-fp32-wasmsimd-mul32-ld64.c
+++ b/src/qu8-gemm/gen/1x4c8-minmax-fp32-wasmsimd-mul32-ld64.c
@@ -25,7 +25,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qu8-gemm/gen/1x4c8-minmax-fp32-xop-ld128.c b/src/qu8-gemm/gen/1x4c8-minmax-fp32-xop-ld128.c
index df97fef..e35b614 100644
--- a/src/qu8-gemm/gen/1x4c8-minmax-fp32-xop-ld128.c
+++ b/src/qu8-gemm/gen/1x4c8-minmax-fp32-xop-ld128.c
@@ -30,7 +30,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qu8-gemm/gen/1x4c8-minmax-fp32-xop-ld64.c b/src/qu8-gemm/gen/1x4c8-minmax-fp32-xop-ld64.c
index 9d3e727..b63253a 100644
--- a/src/qu8-gemm/gen/1x4c8-minmax-fp32-xop-ld64.c
+++ b/src/qu8-gemm/gen/1x4c8-minmax-fp32-xop-ld64.c
@@ -30,7 +30,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qu8-gemm/gen/1x8-minmax-fp32-neon-mlal-lane.c b/src/qu8-gemm/gen/1x8-minmax-fp32-neon-mlal-lane.c
index 5f71724..7403b2e 100644
--- a/src/qu8-gemm/gen/1x8-minmax-fp32-neon-mlal-lane.c
+++ b/src/qu8-gemm/gen/1x8-minmax-fp32-neon-mlal-lane.c
@@ -25,7 +25,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qu8-gemm/gen/1x8-minmax-rndnu-neon-mlal-lane.c b/src/qu8-gemm/gen/1x8-minmax-rndnu-neon-mlal-lane.c
index 4413131..98c20e7 100644
--- a/src/qu8-gemm/gen/1x8-minmax-rndnu-neon-mlal-lane.c
+++ b/src/qu8-gemm/gen/1x8-minmax-rndnu-neon-mlal-lane.c
@@ -25,7 +25,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qu8-gemm/gen/1x8c4-minmax-rndnu-neondot.c b/src/qu8-gemm/gen/1x8c4-minmax-rndnu-neondot.c
index dc9563a..6c7b4e0 100644
--- a/src/qu8-gemm/gen/1x8c4-minmax-rndnu-neondot.c
+++ b/src/qu8-gemm/gen/1x8c4-minmax-rndnu-neondot.c
@@ -25,7 +25,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qu8-gemm/gen/1x8c8-minmax-fp32-avx2.c b/src/qu8-gemm/gen/1x8c8-minmax-fp32-avx2.c
index 6add123..e2e622d 100644
--- a/src/qu8-gemm/gen/1x8c8-minmax-fp32-avx2.c
+++ b/src/qu8-gemm/gen/1x8c8-minmax-fp32-avx2.c
@@ -26,7 +26,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qu8-gemm/gen/2x16c4-minmax-fp32-neondot.c b/src/qu8-gemm/gen/2x16c4-minmax-fp32-neondot.c
index dd4e3a2..39d6a14 100644
--- a/src/qu8-gemm/gen/2x16c4-minmax-fp32-neondot.c
+++ b/src/qu8-gemm/gen/2x16c4-minmax-fp32-neondot.c
@@ -26,7 +26,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qu8-gemm/gen/2x16c4-minmax-rndnu-neondot.c b/src/qu8-gemm/gen/2x16c4-minmax-rndnu-neondot.c
index e47bfe1..ca3a978 100644
--- a/src/qu8-gemm/gen/2x16c4-minmax-rndnu-neondot.c
+++ b/src/qu8-gemm/gen/2x16c4-minmax-rndnu-neondot.c
@@ -25,7 +25,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qu8-gemm/gen/2x16c8-minmax-fp32-avx512skx.c b/src/qu8-gemm/gen/2x16c8-minmax-fp32-avx512skx.c
index e3517f9..7cf4402 100644
--- a/src/qu8-gemm/gen/2x16c8-minmax-fp32-avx512skx.c
+++ b/src/qu8-gemm/gen/2x16c8-minmax-fp32-avx512skx.c
@@ -26,7 +26,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qu8-gemm/gen/2x32c4-minmax-rndnu-neondot.c b/src/qu8-gemm/gen/2x32c4-minmax-rndnu-neondot.c
index 169bb74..78e0fc9 100644
--- a/src/qu8-gemm/gen/2x32c4-minmax-rndnu-neondot.c
+++ b/src/qu8-gemm/gen/2x32c4-minmax-rndnu-neondot.c
@@ -25,7 +25,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qu8-gemm/gen/2x4c2-minmax-fp32-avx-ld128.c b/src/qu8-gemm/gen/2x4c2-minmax-fp32-avx-ld128.c
index c7a5a25..186cfb2 100644
--- a/src/qu8-gemm/gen/2x4c2-minmax-fp32-avx-ld128.c
+++ b/src/qu8-gemm/gen/2x4c2-minmax-fp32-avx-ld128.c
@@ -26,7 +26,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qu8-gemm/gen/2x4c2-minmax-fp32-avx-ld64.c b/src/qu8-gemm/gen/2x4c2-minmax-fp32-avx-ld64.c
index 6f8a026..079dc82 100644
--- a/src/qu8-gemm/gen/2x4c2-minmax-fp32-avx-ld64.c
+++ b/src/qu8-gemm/gen/2x4c2-minmax-fp32-avx-ld64.c
@@ -26,7 +26,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qu8-gemm/gen/2x4c2-minmax-fp32-sse2-ld128.c b/src/qu8-gemm/gen/2x4c2-minmax-fp32-sse2-ld128.c
index 8eb31ba..3d3ec42 100644
--- a/src/qu8-gemm/gen/2x4c2-minmax-fp32-sse2-ld128.c
+++ b/src/qu8-gemm/gen/2x4c2-minmax-fp32-sse2-ld128.c
@@ -26,7 +26,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qu8-gemm/gen/2x4c2-minmax-fp32-sse2-ld64.c b/src/qu8-gemm/gen/2x4c2-minmax-fp32-sse2-ld64.c
index b372181..1a6a55a 100644
--- a/src/qu8-gemm/gen/2x4c2-minmax-fp32-sse2-ld64.c
+++ b/src/qu8-gemm/gen/2x4c2-minmax-fp32-sse2-ld64.c
@@ -26,7 +26,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qu8-gemm/gen/2x4c2-minmax-fp32-sse41-ld128.c b/src/qu8-gemm/gen/2x4c2-minmax-fp32-sse41-ld128.c
index 3e5a789..0871135 100644
--- a/src/qu8-gemm/gen/2x4c2-minmax-fp32-sse41-ld128.c
+++ b/src/qu8-gemm/gen/2x4c2-minmax-fp32-sse41-ld128.c
@@ -26,7 +26,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qu8-gemm/gen/2x4c2-minmax-fp32-sse41-ld64.c b/src/qu8-gemm/gen/2x4c2-minmax-fp32-sse41-ld64.c
index 28eedac..960f973 100644
--- a/src/qu8-gemm/gen/2x4c2-minmax-fp32-sse41-ld64.c
+++ b/src/qu8-gemm/gen/2x4c2-minmax-fp32-sse41-ld64.c
@@ -26,7 +26,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qu8-gemm/gen/2x4c2-minmax-fp32-wasmsimd-dot16x2-ld128.c b/src/qu8-gemm/gen/2x4c2-minmax-fp32-wasmsimd-dot16x2-ld128.c
index b25fb7d..84b989a 100644
--- a/src/qu8-gemm/gen/2x4c2-minmax-fp32-wasmsimd-dot16x2-ld128.c
+++ b/src/qu8-gemm/gen/2x4c2-minmax-fp32-wasmsimd-dot16x2-ld128.c
@@ -26,7 +26,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qu8-gemm/gen/2x4c2-minmax-fp32-wasmsimd-dot16x2-ld64.c b/src/qu8-gemm/gen/2x4c2-minmax-fp32-wasmsimd-dot16x2-ld64.c
index 1554965..5874998 100644
--- a/src/qu8-gemm/gen/2x4c2-minmax-fp32-wasmsimd-dot16x2-ld64.c
+++ b/src/qu8-gemm/gen/2x4c2-minmax-fp32-wasmsimd-dot16x2-ld64.c
@@ -26,7 +26,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qu8-gemm/gen/2x4c2-minmax-fp32-xop-ld128.c b/src/qu8-gemm/gen/2x4c2-minmax-fp32-xop-ld128.c
index 0ebbb82..ff9a0eb 100644
--- a/src/qu8-gemm/gen/2x4c2-minmax-fp32-xop-ld128.c
+++ b/src/qu8-gemm/gen/2x4c2-minmax-fp32-xop-ld128.c
@@ -31,7 +31,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qu8-gemm/gen/2x4c2-minmax-fp32-xop-ld64.c b/src/qu8-gemm/gen/2x4c2-minmax-fp32-xop-ld64.c
index f08b168..520c963 100644
--- a/src/qu8-gemm/gen/2x4c2-minmax-fp32-xop-ld64.c
+++ b/src/qu8-gemm/gen/2x4c2-minmax-fp32-xop-ld64.c
@@ -31,7 +31,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qu8-gemm/gen/2x4c8-minmax-fp32-avx-ld128.c b/src/qu8-gemm/gen/2x4c8-minmax-fp32-avx-ld128.c
index aa2b1b8..294a31e 100644
--- a/src/qu8-gemm/gen/2x4c8-minmax-fp32-avx-ld128.c
+++ b/src/qu8-gemm/gen/2x4c8-minmax-fp32-avx-ld128.c
@@ -25,7 +25,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qu8-gemm/gen/2x4c8-minmax-fp32-avx-ld64.c b/src/qu8-gemm/gen/2x4c8-minmax-fp32-avx-ld64.c
index da67ca8..de07c52 100644
--- a/src/qu8-gemm/gen/2x4c8-minmax-fp32-avx-ld64.c
+++ b/src/qu8-gemm/gen/2x4c8-minmax-fp32-avx-ld64.c
@@ -25,7 +25,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qu8-gemm/gen/2x4c8-minmax-fp32-sse2-ld128.c b/src/qu8-gemm/gen/2x4c8-minmax-fp32-sse2-ld128.c
index 26e24bf..63eb564 100644
--- a/src/qu8-gemm/gen/2x4c8-minmax-fp32-sse2-ld128.c
+++ b/src/qu8-gemm/gen/2x4c8-minmax-fp32-sse2-ld128.c
@@ -25,7 +25,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qu8-gemm/gen/2x4c8-minmax-fp32-sse2-ld64.c b/src/qu8-gemm/gen/2x4c8-minmax-fp32-sse2-ld64.c
index 5b2696e..125d876 100644
--- a/src/qu8-gemm/gen/2x4c8-minmax-fp32-sse2-ld64.c
+++ b/src/qu8-gemm/gen/2x4c8-minmax-fp32-sse2-ld64.c
@@ -25,7 +25,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qu8-gemm/gen/2x4c8-minmax-fp32-sse41-ld128.c b/src/qu8-gemm/gen/2x4c8-minmax-fp32-sse41-ld128.c
index 8db2583..119dfcf 100644
--- a/src/qu8-gemm/gen/2x4c8-minmax-fp32-sse41-ld128.c
+++ b/src/qu8-gemm/gen/2x4c8-minmax-fp32-sse41-ld128.c
@@ -25,7 +25,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qu8-gemm/gen/2x4c8-minmax-fp32-sse41-ld64.c b/src/qu8-gemm/gen/2x4c8-minmax-fp32-sse41-ld64.c
index 214cdbd..9f487f1 100644
--- a/src/qu8-gemm/gen/2x4c8-minmax-fp32-sse41-ld64.c
+++ b/src/qu8-gemm/gen/2x4c8-minmax-fp32-sse41-ld64.c
@@ -25,7 +25,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qu8-gemm/gen/2x4c8-minmax-fp32-wasmsimd-dot16x2-ld128.c b/src/qu8-gemm/gen/2x4c8-minmax-fp32-wasmsimd-dot16x2-ld128.c
index d64d634..781040b 100644
--- a/src/qu8-gemm/gen/2x4c8-minmax-fp32-wasmsimd-dot16x2-ld128.c
+++ b/src/qu8-gemm/gen/2x4c8-minmax-fp32-wasmsimd-dot16x2-ld128.c
@@ -25,7 +25,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qu8-gemm/gen/2x4c8-minmax-fp32-wasmsimd-dot16x2-ld64.c b/src/qu8-gemm/gen/2x4c8-minmax-fp32-wasmsimd-dot16x2-ld64.c
index ce92af5..1103abb 100644
--- a/src/qu8-gemm/gen/2x4c8-minmax-fp32-wasmsimd-dot16x2-ld64.c
+++ b/src/qu8-gemm/gen/2x4c8-minmax-fp32-wasmsimd-dot16x2-ld64.c
@@ -25,7 +25,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qu8-gemm/gen/2x4c8-minmax-fp32-wasmsimd-mul32-ld128.c b/src/qu8-gemm/gen/2x4c8-minmax-fp32-wasmsimd-mul32-ld128.c
index d74997b..171e5e1 100644
--- a/src/qu8-gemm/gen/2x4c8-minmax-fp32-wasmsimd-mul32-ld128.c
+++ b/src/qu8-gemm/gen/2x4c8-minmax-fp32-wasmsimd-mul32-ld128.c
@@ -25,7 +25,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qu8-gemm/gen/2x4c8-minmax-fp32-wasmsimd-mul32-ld64.c b/src/qu8-gemm/gen/2x4c8-minmax-fp32-wasmsimd-mul32-ld64.c
index c0324e3..fa29487 100644
--- a/src/qu8-gemm/gen/2x4c8-minmax-fp32-wasmsimd-mul32-ld64.c
+++ b/src/qu8-gemm/gen/2x4c8-minmax-fp32-wasmsimd-mul32-ld64.c
@@ -25,7 +25,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qu8-gemm/gen/2x4c8-minmax-fp32-xop-ld128.c b/src/qu8-gemm/gen/2x4c8-minmax-fp32-xop-ld128.c
index 3026986..65db3e4 100644
--- a/src/qu8-gemm/gen/2x4c8-minmax-fp32-xop-ld128.c
+++ b/src/qu8-gemm/gen/2x4c8-minmax-fp32-xop-ld128.c
@@ -30,7 +30,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qu8-gemm/gen/2x4c8-minmax-fp32-xop-ld64.c b/src/qu8-gemm/gen/2x4c8-minmax-fp32-xop-ld64.c
index 4cedc5e..96008e3 100644
--- a/src/qu8-gemm/gen/2x4c8-minmax-fp32-xop-ld64.c
+++ b/src/qu8-gemm/gen/2x4c8-minmax-fp32-xop-ld64.c
@@ -30,7 +30,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qu8-gemm/gen/2x8c4-minmax-rndnu-neondot.c b/src/qu8-gemm/gen/2x8c4-minmax-rndnu-neondot.c
index 6acf58b..2c5686c 100644
--- a/src/qu8-gemm/gen/2x8c4-minmax-rndnu-neondot.c
+++ b/src/qu8-gemm/gen/2x8c4-minmax-rndnu-neondot.c
@@ -25,7 +25,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qu8-gemm/gen/2x8c8-minmax-fp32-avx2.c b/src/qu8-gemm/gen/2x8c8-minmax-fp32-avx2.c
index 1f141c3..3dca33e 100644
--- a/src/qu8-gemm/gen/2x8c8-minmax-fp32-avx2.c
+++ b/src/qu8-gemm/gen/2x8c8-minmax-fp32-avx2.c
@@ -26,7 +26,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qu8-gemm/gen/3x16c4-minmax-rndnu-neondot.c b/src/qu8-gemm/gen/3x16c4-minmax-rndnu-neondot.c
index b8c9f59..a4e7dff 100644
--- a/src/qu8-gemm/gen/3x16c4-minmax-rndnu-neondot.c
+++ b/src/qu8-gemm/gen/3x16c4-minmax-rndnu-neondot.c
@@ -25,7 +25,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qu8-gemm/gen/3x16c8-minmax-fp32-avx512skx.c b/src/qu8-gemm/gen/3x16c8-minmax-fp32-avx512skx.c
index 2fd6b7a..f6b31d9 100644
--- a/src/qu8-gemm/gen/3x16c8-minmax-fp32-avx512skx.c
+++ b/src/qu8-gemm/gen/3x16c8-minmax-fp32-avx512skx.c
@@ -26,7 +26,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qu8-gemm/gen/3x32c4-minmax-rndnu-neondot.c b/src/qu8-gemm/gen/3x32c4-minmax-rndnu-neondot.c
index 459cf51..c6024bf 100644
--- a/src/qu8-gemm/gen/3x32c4-minmax-rndnu-neondot.c
+++ b/src/qu8-gemm/gen/3x32c4-minmax-rndnu-neondot.c
@@ -25,7 +25,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qu8-gemm/gen/3x4c2-minmax-fp32-avx-ld128.c b/src/qu8-gemm/gen/3x4c2-minmax-fp32-avx-ld128.c
index 0ae2665..0f3be9c 100644
--- a/src/qu8-gemm/gen/3x4c2-minmax-fp32-avx-ld128.c
+++ b/src/qu8-gemm/gen/3x4c2-minmax-fp32-avx-ld128.c
@@ -26,7 +26,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qu8-gemm/gen/3x4c2-minmax-fp32-avx-ld64.c b/src/qu8-gemm/gen/3x4c2-minmax-fp32-avx-ld64.c
index 20566fb..d1e0ee1 100644
--- a/src/qu8-gemm/gen/3x4c2-minmax-fp32-avx-ld64.c
+++ b/src/qu8-gemm/gen/3x4c2-minmax-fp32-avx-ld64.c
@@ -26,7 +26,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qu8-gemm/gen/3x4c2-minmax-fp32-sse2-ld128.c b/src/qu8-gemm/gen/3x4c2-minmax-fp32-sse2-ld128.c
index f9d4801..8e91ed4 100644
--- a/src/qu8-gemm/gen/3x4c2-minmax-fp32-sse2-ld128.c
+++ b/src/qu8-gemm/gen/3x4c2-minmax-fp32-sse2-ld128.c
@@ -26,7 +26,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qu8-gemm/gen/3x4c2-minmax-fp32-sse2-ld64.c b/src/qu8-gemm/gen/3x4c2-minmax-fp32-sse2-ld64.c
index f8c3469..67e025d 100644
--- a/src/qu8-gemm/gen/3x4c2-minmax-fp32-sse2-ld64.c
+++ b/src/qu8-gemm/gen/3x4c2-minmax-fp32-sse2-ld64.c
@@ -26,7 +26,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qu8-gemm/gen/3x4c2-minmax-fp32-sse41-ld128.c b/src/qu8-gemm/gen/3x4c2-minmax-fp32-sse41-ld128.c
index c45897f..cd9f4fa 100644
--- a/src/qu8-gemm/gen/3x4c2-minmax-fp32-sse41-ld128.c
+++ b/src/qu8-gemm/gen/3x4c2-minmax-fp32-sse41-ld128.c
@@ -26,7 +26,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qu8-gemm/gen/3x4c2-minmax-fp32-sse41-ld64.c b/src/qu8-gemm/gen/3x4c2-minmax-fp32-sse41-ld64.c
index 793a1dd..5cada8b 100644
--- a/src/qu8-gemm/gen/3x4c2-minmax-fp32-sse41-ld64.c
+++ b/src/qu8-gemm/gen/3x4c2-minmax-fp32-sse41-ld64.c
@@ -26,7 +26,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qu8-gemm/gen/3x4c2-minmax-fp32-wasmsimd-dot16x2-ld128.c b/src/qu8-gemm/gen/3x4c2-minmax-fp32-wasmsimd-dot16x2-ld128.c
index 691504e..5bc8554 100644
--- a/src/qu8-gemm/gen/3x4c2-minmax-fp32-wasmsimd-dot16x2-ld128.c
+++ b/src/qu8-gemm/gen/3x4c2-minmax-fp32-wasmsimd-dot16x2-ld128.c
@@ -26,7 +26,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qu8-gemm/gen/3x4c2-minmax-fp32-wasmsimd-dot16x2-ld64.c b/src/qu8-gemm/gen/3x4c2-minmax-fp32-wasmsimd-dot16x2-ld64.c
index 99e6bb8..5bbf8d9 100644
--- a/src/qu8-gemm/gen/3x4c2-minmax-fp32-wasmsimd-dot16x2-ld64.c
+++ b/src/qu8-gemm/gen/3x4c2-minmax-fp32-wasmsimd-dot16x2-ld64.c
@@ -26,7 +26,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qu8-gemm/gen/3x4c2-minmax-fp32-xop-ld128.c b/src/qu8-gemm/gen/3x4c2-minmax-fp32-xop-ld128.c
index 44d8b06..bbe609b 100644
--- a/src/qu8-gemm/gen/3x4c2-minmax-fp32-xop-ld128.c
+++ b/src/qu8-gemm/gen/3x4c2-minmax-fp32-xop-ld128.c
@@ -31,7 +31,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qu8-gemm/gen/3x4c2-minmax-fp32-xop-ld64.c b/src/qu8-gemm/gen/3x4c2-minmax-fp32-xop-ld64.c
index d14b197..48888ea 100644
--- a/src/qu8-gemm/gen/3x4c2-minmax-fp32-xop-ld64.c
+++ b/src/qu8-gemm/gen/3x4c2-minmax-fp32-xop-ld64.c
@@ -31,7 +31,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qu8-gemm/gen/3x4c8-minmax-fp32-avx-ld128.c b/src/qu8-gemm/gen/3x4c8-minmax-fp32-avx-ld128.c
index b38f623..e368b0d 100644
--- a/src/qu8-gemm/gen/3x4c8-minmax-fp32-avx-ld128.c
+++ b/src/qu8-gemm/gen/3x4c8-minmax-fp32-avx-ld128.c
@@ -25,7 +25,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qu8-gemm/gen/3x4c8-minmax-fp32-avx-ld64.c b/src/qu8-gemm/gen/3x4c8-minmax-fp32-avx-ld64.c
index 49e5914..ac1d8b6 100644
--- a/src/qu8-gemm/gen/3x4c8-minmax-fp32-avx-ld64.c
+++ b/src/qu8-gemm/gen/3x4c8-minmax-fp32-avx-ld64.c
@@ -25,7 +25,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qu8-gemm/gen/3x4c8-minmax-fp32-sse2-ld128.c b/src/qu8-gemm/gen/3x4c8-minmax-fp32-sse2-ld128.c
index 722c4f1..9030676 100644
--- a/src/qu8-gemm/gen/3x4c8-minmax-fp32-sse2-ld128.c
+++ b/src/qu8-gemm/gen/3x4c8-minmax-fp32-sse2-ld128.c
@@ -25,7 +25,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qu8-gemm/gen/3x4c8-minmax-fp32-sse2-ld64.c b/src/qu8-gemm/gen/3x4c8-minmax-fp32-sse2-ld64.c
index b21a589..6d0aa2d 100644
--- a/src/qu8-gemm/gen/3x4c8-minmax-fp32-sse2-ld64.c
+++ b/src/qu8-gemm/gen/3x4c8-minmax-fp32-sse2-ld64.c
@@ -25,7 +25,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qu8-gemm/gen/3x4c8-minmax-fp32-sse41-ld128.c b/src/qu8-gemm/gen/3x4c8-minmax-fp32-sse41-ld128.c
index b459c57..340116d 100644
--- a/src/qu8-gemm/gen/3x4c8-minmax-fp32-sse41-ld128.c
+++ b/src/qu8-gemm/gen/3x4c8-minmax-fp32-sse41-ld128.c
@@ -25,7 +25,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qu8-gemm/gen/3x4c8-minmax-fp32-sse41-ld64.c b/src/qu8-gemm/gen/3x4c8-minmax-fp32-sse41-ld64.c
index 9ea3895..778f058 100644
--- a/src/qu8-gemm/gen/3x4c8-minmax-fp32-sse41-ld64.c
+++ b/src/qu8-gemm/gen/3x4c8-minmax-fp32-sse41-ld64.c
@@ -25,7 +25,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qu8-gemm/gen/3x4c8-minmax-fp32-wasmsimd-dot16x2-ld128.c b/src/qu8-gemm/gen/3x4c8-minmax-fp32-wasmsimd-dot16x2-ld128.c
index 5b8c284..c40c8da 100644
--- a/src/qu8-gemm/gen/3x4c8-minmax-fp32-wasmsimd-dot16x2-ld128.c
+++ b/src/qu8-gemm/gen/3x4c8-minmax-fp32-wasmsimd-dot16x2-ld128.c
@@ -25,7 +25,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qu8-gemm/gen/3x4c8-minmax-fp32-wasmsimd-dot16x2-ld64.c b/src/qu8-gemm/gen/3x4c8-minmax-fp32-wasmsimd-dot16x2-ld64.c
index f11b1d0..8b9a8ff 100644
--- a/src/qu8-gemm/gen/3x4c8-minmax-fp32-wasmsimd-dot16x2-ld64.c
+++ b/src/qu8-gemm/gen/3x4c8-minmax-fp32-wasmsimd-dot16x2-ld64.c
@@ -25,7 +25,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qu8-gemm/gen/3x4c8-minmax-fp32-wasmsimd-mul32-ld128.c b/src/qu8-gemm/gen/3x4c8-minmax-fp32-wasmsimd-mul32-ld128.c
index 7c4290b..d5ddba5 100644
--- a/src/qu8-gemm/gen/3x4c8-minmax-fp32-wasmsimd-mul32-ld128.c
+++ b/src/qu8-gemm/gen/3x4c8-minmax-fp32-wasmsimd-mul32-ld128.c
@@ -25,7 +25,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qu8-gemm/gen/3x4c8-minmax-fp32-wasmsimd-mul32-ld64.c b/src/qu8-gemm/gen/3x4c8-minmax-fp32-wasmsimd-mul32-ld64.c
index 83bb225..fc96594 100644
--- a/src/qu8-gemm/gen/3x4c8-minmax-fp32-wasmsimd-mul32-ld64.c
+++ b/src/qu8-gemm/gen/3x4c8-minmax-fp32-wasmsimd-mul32-ld64.c
@@ -25,7 +25,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qu8-gemm/gen/3x4c8-minmax-fp32-xop-ld128.c b/src/qu8-gemm/gen/3x4c8-minmax-fp32-xop-ld128.c
index 3765afd..fc9e82c 100644
--- a/src/qu8-gemm/gen/3x4c8-minmax-fp32-xop-ld128.c
+++ b/src/qu8-gemm/gen/3x4c8-minmax-fp32-xop-ld128.c
@@ -30,7 +30,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qu8-gemm/gen/3x4c8-minmax-fp32-xop-ld64.c b/src/qu8-gemm/gen/3x4c8-minmax-fp32-xop-ld64.c
index 127862f..09601ab 100644
--- a/src/qu8-gemm/gen/3x4c8-minmax-fp32-xop-ld64.c
+++ b/src/qu8-gemm/gen/3x4c8-minmax-fp32-xop-ld64.c
@@ -30,7 +30,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qu8-gemm/gen/3x8c4-minmax-rndnu-neondot.c b/src/qu8-gemm/gen/3x8c4-minmax-rndnu-neondot.c
index e20bd88..801a64c 100644
--- a/src/qu8-gemm/gen/3x8c4-minmax-rndnu-neondot.c
+++ b/src/qu8-gemm/gen/3x8c4-minmax-rndnu-neondot.c
@@ -25,7 +25,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qu8-gemm/gen/3x8c8-minmax-fp32-avx2.c b/src/qu8-gemm/gen/3x8c8-minmax-fp32-avx2.c
index 2b0ffbe..e278e74 100644
--- a/src/qu8-gemm/gen/3x8c8-minmax-fp32-avx2.c
+++ b/src/qu8-gemm/gen/3x8c8-minmax-fp32-avx2.c
@@ -26,7 +26,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qu8-gemm/gen/4x16-minmax-fp32-neon-mlal-lane.c b/src/qu8-gemm/gen/4x16-minmax-fp32-neon-mlal-lane.c
index 56f490e..249880c 100644
--- a/src/qu8-gemm/gen/4x16-minmax-fp32-neon-mlal-lane.c
+++ b/src/qu8-gemm/gen/4x16-minmax-fp32-neon-mlal-lane.c
@@ -25,7 +25,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qu8-gemm/gen/4x16-minmax-fp32-neonv8-mlal-lane.c b/src/qu8-gemm/gen/4x16-minmax-fp32-neonv8-mlal-lane.c
index 18524d3..2cfd940 100644
--- a/src/qu8-gemm/gen/4x16-minmax-fp32-neonv8-mlal-lane.c
+++ b/src/qu8-gemm/gen/4x16-minmax-fp32-neonv8-mlal-lane.c
@@ -26,7 +26,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qu8-gemm/gen/4x16-minmax-rndnu-neon-mlal-lane.c b/src/qu8-gemm/gen/4x16-minmax-rndnu-neon-mlal-lane.c
index 3771f31..ab09af1 100644
--- a/src/qu8-gemm/gen/4x16-minmax-rndnu-neon-mlal-lane.c
+++ b/src/qu8-gemm/gen/4x16-minmax-rndnu-neon-mlal-lane.c
@@ -25,7 +25,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qu8-gemm/gen/4x16c4-minmax-fp32-neondot.c b/src/qu8-gemm/gen/4x16c4-minmax-fp32-neondot.c
index 8751d3b..0c5a782 100644
--- a/src/qu8-gemm/gen/4x16c4-minmax-fp32-neondot.c
+++ b/src/qu8-gemm/gen/4x16c4-minmax-fp32-neondot.c
@@ -26,7 +26,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qu8-gemm/gen/4x16c4-minmax-rndnu-neondot.c b/src/qu8-gemm/gen/4x16c4-minmax-rndnu-neondot.c
index 8a625c5..56796d2 100644
--- a/src/qu8-gemm/gen/4x16c4-minmax-rndnu-neondot.c
+++ b/src/qu8-gemm/gen/4x16c4-minmax-rndnu-neondot.c
@@ -25,7 +25,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qu8-gemm/gen/4x16c8-minmax-fp32-avx512skx.c b/src/qu8-gemm/gen/4x16c8-minmax-fp32-avx512skx.c
index a7f351d..91d4de6 100644
--- a/src/qu8-gemm/gen/4x16c8-minmax-fp32-avx512skx.c
+++ b/src/qu8-gemm/gen/4x16c8-minmax-fp32-avx512skx.c
@@ -26,7 +26,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qu8-gemm/gen/4x4c2-minmax-fp32-avx-ld128.c b/src/qu8-gemm/gen/4x4c2-minmax-fp32-avx-ld128.c
index 9bf26e2..aa5a2d5 100644
--- a/src/qu8-gemm/gen/4x4c2-minmax-fp32-avx-ld128.c
+++ b/src/qu8-gemm/gen/4x4c2-minmax-fp32-avx-ld128.c
@@ -26,7 +26,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qu8-gemm/gen/4x4c2-minmax-fp32-avx-ld64.c b/src/qu8-gemm/gen/4x4c2-minmax-fp32-avx-ld64.c
index 405dc0e..a43bfeb 100644
--- a/src/qu8-gemm/gen/4x4c2-minmax-fp32-avx-ld64.c
+++ b/src/qu8-gemm/gen/4x4c2-minmax-fp32-avx-ld64.c
@@ -26,7 +26,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qu8-gemm/gen/4x4c2-minmax-fp32-sse2-ld128.c b/src/qu8-gemm/gen/4x4c2-minmax-fp32-sse2-ld128.c
index 6e3e558..bb5ddfa 100644
--- a/src/qu8-gemm/gen/4x4c2-minmax-fp32-sse2-ld128.c
+++ b/src/qu8-gemm/gen/4x4c2-minmax-fp32-sse2-ld128.c
@@ -26,7 +26,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qu8-gemm/gen/4x4c2-minmax-fp32-sse2-ld64.c b/src/qu8-gemm/gen/4x4c2-minmax-fp32-sse2-ld64.c
index 340a2e9..de8c85e 100644
--- a/src/qu8-gemm/gen/4x4c2-minmax-fp32-sse2-ld64.c
+++ b/src/qu8-gemm/gen/4x4c2-minmax-fp32-sse2-ld64.c
@@ -26,7 +26,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qu8-gemm/gen/4x4c2-minmax-fp32-sse41-ld128.c b/src/qu8-gemm/gen/4x4c2-minmax-fp32-sse41-ld128.c
index b2a24ad..6e39b2f 100644
--- a/src/qu8-gemm/gen/4x4c2-minmax-fp32-sse41-ld128.c
+++ b/src/qu8-gemm/gen/4x4c2-minmax-fp32-sse41-ld128.c
@@ -26,7 +26,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qu8-gemm/gen/4x4c2-minmax-fp32-sse41-ld64.c b/src/qu8-gemm/gen/4x4c2-minmax-fp32-sse41-ld64.c
index ab5f9fe..842c059 100644
--- a/src/qu8-gemm/gen/4x4c2-minmax-fp32-sse41-ld64.c
+++ b/src/qu8-gemm/gen/4x4c2-minmax-fp32-sse41-ld64.c
@@ -26,7 +26,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qu8-gemm/gen/4x4c2-minmax-fp32-wasmsimd-dot16x2-ld128.c b/src/qu8-gemm/gen/4x4c2-minmax-fp32-wasmsimd-dot16x2-ld128.c
index 0270f12..d02d59e 100644
--- a/src/qu8-gemm/gen/4x4c2-minmax-fp32-wasmsimd-dot16x2-ld128.c
+++ b/src/qu8-gemm/gen/4x4c2-minmax-fp32-wasmsimd-dot16x2-ld128.c
@@ -26,7 +26,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qu8-gemm/gen/4x4c2-minmax-fp32-wasmsimd-dot16x2-ld64.c b/src/qu8-gemm/gen/4x4c2-minmax-fp32-wasmsimd-dot16x2-ld64.c
index f4d09c4..ba639a0 100644
--- a/src/qu8-gemm/gen/4x4c2-minmax-fp32-wasmsimd-dot16x2-ld64.c
+++ b/src/qu8-gemm/gen/4x4c2-minmax-fp32-wasmsimd-dot16x2-ld64.c
@@ -26,7 +26,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qu8-gemm/gen/4x4c2-minmax-fp32-xop-ld128.c b/src/qu8-gemm/gen/4x4c2-minmax-fp32-xop-ld128.c
index 2940e83..92c9775 100644
--- a/src/qu8-gemm/gen/4x4c2-minmax-fp32-xop-ld128.c
+++ b/src/qu8-gemm/gen/4x4c2-minmax-fp32-xop-ld128.c
@@ -31,7 +31,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qu8-gemm/gen/4x4c2-minmax-fp32-xop-ld64.c b/src/qu8-gemm/gen/4x4c2-minmax-fp32-xop-ld64.c
index 02aa848..6b444c3 100644
--- a/src/qu8-gemm/gen/4x4c2-minmax-fp32-xop-ld64.c
+++ b/src/qu8-gemm/gen/4x4c2-minmax-fp32-xop-ld64.c
@@ -31,7 +31,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qu8-gemm/gen/4x4c8-minmax-fp32-wasmsimd-dot16x2-ld128.c b/src/qu8-gemm/gen/4x4c8-minmax-fp32-wasmsimd-dot16x2-ld128.c
index 1515534..9ab091c 100644
--- a/src/qu8-gemm/gen/4x4c8-minmax-fp32-wasmsimd-dot16x2-ld128.c
+++ b/src/qu8-gemm/gen/4x4c8-minmax-fp32-wasmsimd-dot16x2-ld128.c
@@ -25,7 +25,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qu8-gemm/gen/4x4c8-minmax-fp32-wasmsimd-dot16x2-ld64.c b/src/qu8-gemm/gen/4x4c8-minmax-fp32-wasmsimd-dot16x2-ld64.c
index b44dfe8..93accfa 100644
--- a/src/qu8-gemm/gen/4x4c8-minmax-fp32-wasmsimd-dot16x2-ld64.c
+++ b/src/qu8-gemm/gen/4x4c8-minmax-fp32-wasmsimd-dot16x2-ld64.c
@@ -25,7 +25,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qu8-gemm/gen/4x8-minmax-fp32-neon-mlal-lane.c b/src/qu8-gemm/gen/4x8-minmax-fp32-neon-mlal-lane.c
index fede3ee..0445415 100644
--- a/src/qu8-gemm/gen/4x8-minmax-fp32-neon-mlal-lane.c
+++ b/src/qu8-gemm/gen/4x8-minmax-fp32-neon-mlal-lane.c
@@ -25,7 +25,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qu8-gemm/gen/4x8-minmax-rndnu-neon-mlal-lane.c b/src/qu8-gemm/gen/4x8-minmax-rndnu-neon-mlal-lane.c
index 2291a66..3bd0d16 100644
--- a/src/qu8-gemm/gen/4x8-minmax-rndnu-neon-mlal-lane.c
+++ b/src/qu8-gemm/gen/4x8-minmax-rndnu-neon-mlal-lane.c
@@ -25,7 +25,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qu8-gemm/gen/4x8c4-minmax-rndnu-neondot.c b/src/qu8-gemm/gen/4x8c4-minmax-rndnu-neondot.c
index 1adca56..3ebfd80 100644
--- a/src/qu8-gemm/gen/4x8c4-minmax-rndnu-neondot.c
+++ b/src/qu8-gemm/gen/4x8c4-minmax-rndnu-neondot.c
@@ -25,7 +25,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qu8-gemm/gen/5x16c4-minmax-rndnu-neondot.c b/src/qu8-gemm/gen/5x16c4-minmax-rndnu-neondot.c
index f7904bc..f32c72f 100644
--- a/src/qu8-gemm/gen/5x16c4-minmax-rndnu-neondot.c
+++ b/src/qu8-gemm/gen/5x16c4-minmax-rndnu-neondot.c
@@ -25,7 +25,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 5);
diff --git a/src/qu8-gemm/gen/5x8c4-minmax-rndnu-neondot.c b/src/qu8-gemm/gen/5x8c4-minmax-rndnu-neondot.c
index 04291bb..10c5024 100644
--- a/src/qu8-gemm/gen/5x8c4-minmax-rndnu-neondot.c
+++ b/src/qu8-gemm/gen/5x8c4-minmax-rndnu-neondot.c
@@ -25,7 +25,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 5);
diff --git a/src/qu8-gemm/gen/6x16c4-minmax-rndnu-neondot.c b/src/qu8-gemm/gen/6x16c4-minmax-rndnu-neondot.c
index 1e2ba3d..463d149 100644
--- a/src/qu8-gemm/gen/6x16c4-minmax-rndnu-neondot.c
+++ b/src/qu8-gemm/gen/6x16c4-minmax-rndnu-neondot.c
@@ -25,7 +25,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 6);
diff --git a/src/qu8-gemm/gen/6x8c4-minmax-rndnu-neondot.c b/src/qu8-gemm/gen/6x8c4-minmax-rndnu-neondot.c
index edd8273..9a169cc 100644
--- a/src/qu8-gemm/gen/6x8c4-minmax-rndnu-neondot.c
+++ b/src/qu8-gemm/gen/6x8c4-minmax-rndnu-neondot.c
@@ -25,7 +25,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 6);
diff --git a/src/qu8-gemm/gen/8x16c4-minmax-rndnu-neondot.c b/src/qu8-gemm/gen/8x16c4-minmax-rndnu-neondot.c
index d371f7d..c88dbdd 100644
--- a/src/qu8-gemm/gen/8x16c4-minmax-rndnu-neondot.c
+++ b/src/qu8-gemm/gen/8x16c4-minmax-rndnu-neondot.c
@@ -25,7 +25,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 8);
diff --git a/src/qu8-gemm/gen/8x8c4-minmax-rndnu-neondot.c b/src/qu8-gemm/gen/8x8c4-minmax-rndnu-neondot.c
index 1a3397d..b6ecfea 100644
--- a/src/qu8-gemm/gen/8x8c4-minmax-rndnu-neondot.c
+++ b/src/qu8-gemm/gen/8x8c4-minmax-rndnu-neondot.c
@@ -25,7 +25,7 @@
     uint8_t* restrict c,
     size_t cm_stride,
     size_t cn_stride,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 8);
diff --git a/src/qu8-igemm/c4-neondot.c.in b/src/qu8-igemm/c4-neondot.c.in
index af3f8d8..25fce7d 100644
--- a/src/qu8-igemm/c4-neondot.c.in
+++ b/src/qu8-igemm/c4-neondot.c.in
@@ -30,7 +30,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= ${MR});
diff --git a/src/qu8-igemm/gen/1x16-minmax-fp32-neon-mlal-lane.c b/src/qu8-igemm/gen/1x16-minmax-fp32-neon-mlal-lane.c
index fa67d68..0a24aff 100644
--- a/src/qu8-igemm/gen/1x16-minmax-fp32-neon-mlal-lane.c
+++ b/src/qu8-igemm/gen/1x16-minmax-fp32-neon-mlal-lane.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qu8-igemm/gen/1x16-minmax-fp32-neonv8-mlal-lane.c b/src/qu8-igemm/gen/1x16-minmax-fp32-neonv8-mlal-lane.c
index 8a71a5f..302f957 100644
--- a/src/qu8-igemm/gen/1x16-minmax-fp32-neonv8-mlal-lane.c
+++ b/src/qu8-igemm/gen/1x16-minmax-fp32-neonv8-mlal-lane.c
@@ -28,7 +28,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qu8-igemm/gen/1x16-minmax-rndnu-neon-mlal-lane.c b/src/qu8-igemm/gen/1x16-minmax-rndnu-neon-mlal-lane.c
index 1a96d3f..4c33a88 100644
--- a/src/qu8-igemm/gen/1x16-minmax-rndnu-neon-mlal-lane.c
+++ b/src/qu8-igemm/gen/1x16-minmax-rndnu-neon-mlal-lane.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qu8-igemm/gen/1x16c4-minmax-fp32-neondot.c b/src/qu8-igemm/gen/1x16c4-minmax-fp32-neondot.c
index ff97e9e..14fac26 100644
--- a/src/qu8-igemm/gen/1x16c4-minmax-fp32-neondot.c
+++ b/src/qu8-igemm/gen/1x16c4-minmax-fp32-neondot.c
@@ -28,7 +28,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qu8-igemm/gen/1x16c4-minmax-rndnu-neondot.c b/src/qu8-igemm/gen/1x16c4-minmax-rndnu-neondot.c
index 998bb1a..9f36b12 100644
--- a/src/qu8-igemm/gen/1x16c4-minmax-rndnu-neondot.c
+++ b/src/qu8-igemm/gen/1x16c4-minmax-rndnu-neondot.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qu8-igemm/gen/1x16c8-minmax-fp32-avx512skx.c b/src/qu8-igemm/gen/1x16c8-minmax-fp32-avx512skx.c
index 78b872d..512653b 100644
--- a/src/qu8-igemm/gen/1x16c8-minmax-fp32-avx512skx.c
+++ b/src/qu8-igemm/gen/1x16c8-minmax-fp32-avx512skx.c
@@ -28,7 +28,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qu8-igemm/gen/1x32c4-minmax-rndnu-neondot.c b/src/qu8-igemm/gen/1x32c4-minmax-rndnu-neondot.c
index c7e7b8c..a9e3a54 100644
--- a/src/qu8-igemm/gen/1x32c4-minmax-rndnu-neondot.c
+++ b/src/qu8-igemm/gen/1x32c4-minmax-rndnu-neondot.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qu8-igemm/gen/1x4c2-minmax-fp32-avx-ld128.c b/src/qu8-igemm/gen/1x4c2-minmax-fp32-avx-ld128.c
index 2a4b947..5e8e175 100644
--- a/src/qu8-igemm/gen/1x4c2-minmax-fp32-avx-ld128.c
+++ b/src/qu8-igemm/gen/1x4c2-minmax-fp32-avx-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qu8-igemm/gen/1x4c2-minmax-fp32-avx-ld64.c b/src/qu8-igemm/gen/1x4c2-minmax-fp32-avx-ld64.c
index 9f54b6d..81c538e 100644
--- a/src/qu8-igemm/gen/1x4c2-minmax-fp32-avx-ld64.c
+++ b/src/qu8-igemm/gen/1x4c2-minmax-fp32-avx-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qu8-igemm/gen/1x4c2-minmax-fp32-sse2-ld128.c b/src/qu8-igemm/gen/1x4c2-minmax-fp32-sse2-ld128.c
index 11b81d2..4d92e88 100644
--- a/src/qu8-igemm/gen/1x4c2-minmax-fp32-sse2-ld128.c
+++ b/src/qu8-igemm/gen/1x4c2-minmax-fp32-sse2-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qu8-igemm/gen/1x4c2-minmax-fp32-sse2-ld64.c b/src/qu8-igemm/gen/1x4c2-minmax-fp32-sse2-ld64.c
index fad6dae..63ec75d 100644
--- a/src/qu8-igemm/gen/1x4c2-minmax-fp32-sse2-ld64.c
+++ b/src/qu8-igemm/gen/1x4c2-minmax-fp32-sse2-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qu8-igemm/gen/1x4c2-minmax-fp32-sse41-ld128.c b/src/qu8-igemm/gen/1x4c2-minmax-fp32-sse41-ld128.c
index b03124c..2a28126 100644
--- a/src/qu8-igemm/gen/1x4c2-minmax-fp32-sse41-ld128.c
+++ b/src/qu8-igemm/gen/1x4c2-minmax-fp32-sse41-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qu8-igemm/gen/1x4c2-minmax-fp32-sse41-ld64.c b/src/qu8-igemm/gen/1x4c2-minmax-fp32-sse41-ld64.c
index d3d7339..e7d3861 100644
--- a/src/qu8-igemm/gen/1x4c2-minmax-fp32-sse41-ld64.c
+++ b/src/qu8-igemm/gen/1x4c2-minmax-fp32-sse41-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qu8-igemm/gen/1x4c2-minmax-fp32-wasmsimd-dot16x2-ld128.c b/src/qu8-igemm/gen/1x4c2-minmax-fp32-wasmsimd-dot16x2-ld128.c
index c161858..e778790 100644
--- a/src/qu8-igemm/gen/1x4c2-minmax-fp32-wasmsimd-dot16x2-ld128.c
+++ b/src/qu8-igemm/gen/1x4c2-minmax-fp32-wasmsimd-dot16x2-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qu8-igemm/gen/1x4c2-minmax-fp32-wasmsimd-dot16x2-ld64.c b/src/qu8-igemm/gen/1x4c2-minmax-fp32-wasmsimd-dot16x2-ld64.c
index 978a087..327cdfe 100644
--- a/src/qu8-igemm/gen/1x4c2-minmax-fp32-wasmsimd-dot16x2-ld64.c
+++ b/src/qu8-igemm/gen/1x4c2-minmax-fp32-wasmsimd-dot16x2-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qu8-igemm/gen/1x4c2-minmax-fp32-xop-ld128.c b/src/qu8-igemm/gen/1x4c2-minmax-fp32-xop-ld128.c
index 9cc02c9..610f615 100644
--- a/src/qu8-igemm/gen/1x4c2-minmax-fp32-xop-ld128.c
+++ b/src/qu8-igemm/gen/1x4c2-minmax-fp32-xop-ld128.c
@@ -32,7 +32,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qu8-igemm/gen/1x4c2-minmax-fp32-xop-ld64.c b/src/qu8-igemm/gen/1x4c2-minmax-fp32-xop-ld64.c
index 710a004..d355caf 100644
--- a/src/qu8-igemm/gen/1x4c2-minmax-fp32-xop-ld64.c
+++ b/src/qu8-igemm/gen/1x4c2-minmax-fp32-xop-ld64.c
@@ -32,7 +32,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qu8-igemm/gen/1x4c8-minmax-fp32-avx-ld128.c b/src/qu8-igemm/gen/1x4c8-minmax-fp32-avx-ld128.c
index 57ba9bb..9be9702 100644
--- a/src/qu8-igemm/gen/1x4c8-minmax-fp32-avx-ld128.c
+++ b/src/qu8-igemm/gen/1x4c8-minmax-fp32-avx-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qu8-igemm/gen/1x4c8-minmax-fp32-avx-ld64.c b/src/qu8-igemm/gen/1x4c8-minmax-fp32-avx-ld64.c
index bf9795e..4156566 100644
--- a/src/qu8-igemm/gen/1x4c8-minmax-fp32-avx-ld64.c
+++ b/src/qu8-igemm/gen/1x4c8-minmax-fp32-avx-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qu8-igemm/gen/1x4c8-minmax-fp32-sse2-ld128.c b/src/qu8-igemm/gen/1x4c8-minmax-fp32-sse2-ld128.c
index 0f2bf88..3e4cc37 100644
--- a/src/qu8-igemm/gen/1x4c8-minmax-fp32-sse2-ld128.c
+++ b/src/qu8-igemm/gen/1x4c8-minmax-fp32-sse2-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qu8-igemm/gen/1x4c8-minmax-fp32-sse2-ld64.c b/src/qu8-igemm/gen/1x4c8-minmax-fp32-sse2-ld64.c
index c48d236..ddc7224 100644
--- a/src/qu8-igemm/gen/1x4c8-minmax-fp32-sse2-ld64.c
+++ b/src/qu8-igemm/gen/1x4c8-minmax-fp32-sse2-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qu8-igemm/gen/1x4c8-minmax-fp32-sse41-ld128.c b/src/qu8-igemm/gen/1x4c8-minmax-fp32-sse41-ld128.c
index c694f4a..a6d239d 100644
--- a/src/qu8-igemm/gen/1x4c8-minmax-fp32-sse41-ld128.c
+++ b/src/qu8-igemm/gen/1x4c8-minmax-fp32-sse41-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qu8-igemm/gen/1x4c8-minmax-fp32-sse41-ld64.c b/src/qu8-igemm/gen/1x4c8-minmax-fp32-sse41-ld64.c
index 5072be1..40f80ee 100644
--- a/src/qu8-igemm/gen/1x4c8-minmax-fp32-sse41-ld64.c
+++ b/src/qu8-igemm/gen/1x4c8-minmax-fp32-sse41-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qu8-igemm/gen/1x4c8-minmax-fp32-wasmsimd-dot16x2-ld128.c b/src/qu8-igemm/gen/1x4c8-minmax-fp32-wasmsimd-dot16x2-ld128.c
index 499d9fb..99574ea 100644
--- a/src/qu8-igemm/gen/1x4c8-minmax-fp32-wasmsimd-dot16x2-ld128.c
+++ b/src/qu8-igemm/gen/1x4c8-minmax-fp32-wasmsimd-dot16x2-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qu8-igemm/gen/1x4c8-minmax-fp32-wasmsimd-dot16x2-ld64.c b/src/qu8-igemm/gen/1x4c8-minmax-fp32-wasmsimd-dot16x2-ld64.c
index 6bf7993..1c9df4e 100644
--- a/src/qu8-igemm/gen/1x4c8-minmax-fp32-wasmsimd-dot16x2-ld64.c
+++ b/src/qu8-igemm/gen/1x4c8-minmax-fp32-wasmsimd-dot16x2-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qu8-igemm/gen/1x4c8-minmax-fp32-wasmsimd-mul32-ld128.c b/src/qu8-igemm/gen/1x4c8-minmax-fp32-wasmsimd-mul32-ld128.c
index 128d5e7..fd684d3 100644
--- a/src/qu8-igemm/gen/1x4c8-minmax-fp32-wasmsimd-mul32-ld128.c
+++ b/src/qu8-igemm/gen/1x4c8-minmax-fp32-wasmsimd-mul32-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qu8-igemm/gen/1x4c8-minmax-fp32-wasmsimd-mul32-ld64.c b/src/qu8-igemm/gen/1x4c8-minmax-fp32-wasmsimd-mul32-ld64.c
index 05ec522..562029d 100644
--- a/src/qu8-igemm/gen/1x4c8-minmax-fp32-wasmsimd-mul32-ld64.c
+++ b/src/qu8-igemm/gen/1x4c8-minmax-fp32-wasmsimd-mul32-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qu8-igemm/gen/1x4c8-minmax-fp32-xop-ld128.c b/src/qu8-igemm/gen/1x4c8-minmax-fp32-xop-ld128.c
index 9b6bf6e..2c5b377 100644
--- a/src/qu8-igemm/gen/1x4c8-minmax-fp32-xop-ld128.c
+++ b/src/qu8-igemm/gen/1x4c8-minmax-fp32-xop-ld128.c
@@ -32,7 +32,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qu8-igemm/gen/1x4c8-minmax-fp32-xop-ld64.c b/src/qu8-igemm/gen/1x4c8-minmax-fp32-xop-ld64.c
index 5a5e6fd..0b77e42 100644
--- a/src/qu8-igemm/gen/1x4c8-minmax-fp32-xop-ld64.c
+++ b/src/qu8-igemm/gen/1x4c8-minmax-fp32-xop-ld64.c
@@ -32,7 +32,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qu8-igemm/gen/1x8-minmax-fp32-neon-mlal-lane.c b/src/qu8-igemm/gen/1x8-minmax-fp32-neon-mlal-lane.c
index d3aeb32..e9293f1 100644
--- a/src/qu8-igemm/gen/1x8-minmax-fp32-neon-mlal-lane.c
+++ b/src/qu8-igemm/gen/1x8-minmax-fp32-neon-mlal-lane.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qu8-igemm/gen/1x8-minmax-rndnu-neon-mlal-lane.c b/src/qu8-igemm/gen/1x8-minmax-rndnu-neon-mlal-lane.c
index 3082097..3ae7607 100644
--- a/src/qu8-igemm/gen/1x8-minmax-rndnu-neon-mlal-lane.c
+++ b/src/qu8-igemm/gen/1x8-minmax-rndnu-neon-mlal-lane.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qu8-igemm/gen/1x8c4-minmax-rndnu-neondot.c b/src/qu8-igemm/gen/1x8c4-minmax-rndnu-neondot.c
index 4701d25..a7a717e 100644
--- a/src/qu8-igemm/gen/1x8c4-minmax-rndnu-neondot.c
+++ b/src/qu8-igemm/gen/1x8c4-minmax-rndnu-neondot.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qu8-igemm/gen/1x8c8-minmax-fp32-avx2.c b/src/qu8-igemm/gen/1x8c8-minmax-fp32-avx2.c
index 91042bc..34b11cd 100644
--- a/src/qu8-igemm/gen/1x8c8-minmax-fp32-avx2.c
+++ b/src/qu8-igemm/gen/1x8c8-minmax-fp32-avx2.c
@@ -28,7 +28,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 1);
diff --git a/src/qu8-igemm/gen/2x16c4-minmax-fp32-neondot.c b/src/qu8-igemm/gen/2x16c4-minmax-fp32-neondot.c
index e63118b..f76ede3 100644
--- a/src/qu8-igemm/gen/2x16c4-minmax-fp32-neondot.c
+++ b/src/qu8-igemm/gen/2x16c4-minmax-fp32-neondot.c
@@ -28,7 +28,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qu8-igemm/gen/2x16c4-minmax-rndnu-neondot.c b/src/qu8-igemm/gen/2x16c4-minmax-rndnu-neondot.c
index d750f9d..aca64ad 100644
--- a/src/qu8-igemm/gen/2x16c4-minmax-rndnu-neondot.c
+++ b/src/qu8-igemm/gen/2x16c4-minmax-rndnu-neondot.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qu8-igemm/gen/2x16c8-minmax-fp32-avx512skx.c b/src/qu8-igemm/gen/2x16c8-minmax-fp32-avx512skx.c
index d6f5118..0cc9e98 100644
--- a/src/qu8-igemm/gen/2x16c8-minmax-fp32-avx512skx.c
+++ b/src/qu8-igemm/gen/2x16c8-minmax-fp32-avx512skx.c
@@ -28,7 +28,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qu8-igemm/gen/2x32c4-minmax-rndnu-neondot.c b/src/qu8-igemm/gen/2x32c4-minmax-rndnu-neondot.c
index 6fe7f80..7c125fe 100644
--- a/src/qu8-igemm/gen/2x32c4-minmax-rndnu-neondot.c
+++ b/src/qu8-igemm/gen/2x32c4-minmax-rndnu-neondot.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qu8-igemm/gen/2x4c2-minmax-fp32-avx-ld128.c b/src/qu8-igemm/gen/2x4c2-minmax-fp32-avx-ld128.c
index a7e8352..ba1a98b 100644
--- a/src/qu8-igemm/gen/2x4c2-minmax-fp32-avx-ld128.c
+++ b/src/qu8-igemm/gen/2x4c2-minmax-fp32-avx-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qu8-igemm/gen/2x4c2-minmax-fp32-avx-ld64.c b/src/qu8-igemm/gen/2x4c2-minmax-fp32-avx-ld64.c
index f2de948..214a6ad 100644
--- a/src/qu8-igemm/gen/2x4c2-minmax-fp32-avx-ld64.c
+++ b/src/qu8-igemm/gen/2x4c2-minmax-fp32-avx-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qu8-igemm/gen/2x4c2-minmax-fp32-sse2-ld128.c b/src/qu8-igemm/gen/2x4c2-minmax-fp32-sse2-ld128.c
index c7108e7..a795c1d 100644
--- a/src/qu8-igemm/gen/2x4c2-minmax-fp32-sse2-ld128.c
+++ b/src/qu8-igemm/gen/2x4c2-minmax-fp32-sse2-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qu8-igemm/gen/2x4c2-minmax-fp32-sse2-ld64.c b/src/qu8-igemm/gen/2x4c2-minmax-fp32-sse2-ld64.c
index a1bd2ed..aeb4cd0 100644
--- a/src/qu8-igemm/gen/2x4c2-minmax-fp32-sse2-ld64.c
+++ b/src/qu8-igemm/gen/2x4c2-minmax-fp32-sse2-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qu8-igemm/gen/2x4c2-minmax-fp32-sse41-ld128.c b/src/qu8-igemm/gen/2x4c2-minmax-fp32-sse41-ld128.c
index 404547b..93365dc 100644
--- a/src/qu8-igemm/gen/2x4c2-minmax-fp32-sse41-ld128.c
+++ b/src/qu8-igemm/gen/2x4c2-minmax-fp32-sse41-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qu8-igemm/gen/2x4c2-minmax-fp32-sse41-ld64.c b/src/qu8-igemm/gen/2x4c2-minmax-fp32-sse41-ld64.c
index 4d793ff..27f38e5 100644
--- a/src/qu8-igemm/gen/2x4c2-minmax-fp32-sse41-ld64.c
+++ b/src/qu8-igemm/gen/2x4c2-minmax-fp32-sse41-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qu8-igemm/gen/2x4c2-minmax-fp32-wasmsimd-dot16x2-ld128.c b/src/qu8-igemm/gen/2x4c2-minmax-fp32-wasmsimd-dot16x2-ld128.c
index aec097f..a191179 100644
--- a/src/qu8-igemm/gen/2x4c2-minmax-fp32-wasmsimd-dot16x2-ld128.c
+++ b/src/qu8-igemm/gen/2x4c2-minmax-fp32-wasmsimd-dot16x2-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qu8-igemm/gen/2x4c2-minmax-fp32-wasmsimd-dot16x2-ld64.c b/src/qu8-igemm/gen/2x4c2-minmax-fp32-wasmsimd-dot16x2-ld64.c
index 2128670..1c05aa4 100644
--- a/src/qu8-igemm/gen/2x4c2-minmax-fp32-wasmsimd-dot16x2-ld64.c
+++ b/src/qu8-igemm/gen/2x4c2-minmax-fp32-wasmsimd-dot16x2-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qu8-igemm/gen/2x4c2-minmax-fp32-xop-ld128.c b/src/qu8-igemm/gen/2x4c2-minmax-fp32-xop-ld128.c
index 4d9b224..e7aa935 100644
--- a/src/qu8-igemm/gen/2x4c2-minmax-fp32-xop-ld128.c
+++ b/src/qu8-igemm/gen/2x4c2-minmax-fp32-xop-ld128.c
@@ -32,7 +32,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qu8-igemm/gen/2x4c2-minmax-fp32-xop-ld64.c b/src/qu8-igemm/gen/2x4c2-minmax-fp32-xop-ld64.c
index 0873469..c861a2e 100644
--- a/src/qu8-igemm/gen/2x4c2-minmax-fp32-xop-ld64.c
+++ b/src/qu8-igemm/gen/2x4c2-minmax-fp32-xop-ld64.c
@@ -32,7 +32,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qu8-igemm/gen/2x4c8-minmax-fp32-avx-ld128.c b/src/qu8-igemm/gen/2x4c8-minmax-fp32-avx-ld128.c
index 6a27e63..b02bc20 100644
--- a/src/qu8-igemm/gen/2x4c8-minmax-fp32-avx-ld128.c
+++ b/src/qu8-igemm/gen/2x4c8-minmax-fp32-avx-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qu8-igemm/gen/2x4c8-minmax-fp32-avx-ld64.c b/src/qu8-igemm/gen/2x4c8-minmax-fp32-avx-ld64.c
index f0b21b9..ccdff2e 100644
--- a/src/qu8-igemm/gen/2x4c8-minmax-fp32-avx-ld64.c
+++ b/src/qu8-igemm/gen/2x4c8-minmax-fp32-avx-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qu8-igemm/gen/2x4c8-minmax-fp32-sse2-ld128.c b/src/qu8-igemm/gen/2x4c8-minmax-fp32-sse2-ld128.c
index cacee77..9f34325 100644
--- a/src/qu8-igemm/gen/2x4c8-minmax-fp32-sse2-ld128.c
+++ b/src/qu8-igemm/gen/2x4c8-minmax-fp32-sse2-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qu8-igemm/gen/2x4c8-minmax-fp32-sse2-ld64.c b/src/qu8-igemm/gen/2x4c8-minmax-fp32-sse2-ld64.c
index 664010b..f7c0d06 100644
--- a/src/qu8-igemm/gen/2x4c8-minmax-fp32-sse2-ld64.c
+++ b/src/qu8-igemm/gen/2x4c8-minmax-fp32-sse2-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qu8-igemm/gen/2x4c8-minmax-fp32-sse41-ld128.c b/src/qu8-igemm/gen/2x4c8-minmax-fp32-sse41-ld128.c
index b102b01..c83e995 100644
--- a/src/qu8-igemm/gen/2x4c8-minmax-fp32-sse41-ld128.c
+++ b/src/qu8-igemm/gen/2x4c8-minmax-fp32-sse41-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qu8-igemm/gen/2x4c8-minmax-fp32-sse41-ld64.c b/src/qu8-igemm/gen/2x4c8-minmax-fp32-sse41-ld64.c
index bfdae33..de99c2c 100644
--- a/src/qu8-igemm/gen/2x4c8-minmax-fp32-sse41-ld64.c
+++ b/src/qu8-igemm/gen/2x4c8-minmax-fp32-sse41-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qu8-igemm/gen/2x4c8-minmax-fp32-wasmsimd-dot16x2-ld128.c b/src/qu8-igemm/gen/2x4c8-minmax-fp32-wasmsimd-dot16x2-ld128.c
index de15a1f..3c16e86 100644
--- a/src/qu8-igemm/gen/2x4c8-minmax-fp32-wasmsimd-dot16x2-ld128.c
+++ b/src/qu8-igemm/gen/2x4c8-minmax-fp32-wasmsimd-dot16x2-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qu8-igemm/gen/2x4c8-minmax-fp32-wasmsimd-dot16x2-ld64.c b/src/qu8-igemm/gen/2x4c8-minmax-fp32-wasmsimd-dot16x2-ld64.c
index 6e8d4b6..4ae695e 100644
--- a/src/qu8-igemm/gen/2x4c8-minmax-fp32-wasmsimd-dot16x2-ld64.c
+++ b/src/qu8-igemm/gen/2x4c8-minmax-fp32-wasmsimd-dot16x2-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qu8-igemm/gen/2x4c8-minmax-fp32-wasmsimd-mul32-ld128.c b/src/qu8-igemm/gen/2x4c8-minmax-fp32-wasmsimd-mul32-ld128.c
index 7ddca6a..317bd74 100644
--- a/src/qu8-igemm/gen/2x4c8-minmax-fp32-wasmsimd-mul32-ld128.c
+++ b/src/qu8-igemm/gen/2x4c8-minmax-fp32-wasmsimd-mul32-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qu8-igemm/gen/2x4c8-minmax-fp32-wasmsimd-mul32-ld64.c b/src/qu8-igemm/gen/2x4c8-minmax-fp32-wasmsimd-mul32-ld64.c
index 9d7f974..26dfcb0 100644
--- a/src/qu8-igemm/gen/2x4c8-minmax-fp32-wasmsimd-mul32-ld64.c
+++ b/src/qu8-igemm/gen/2x4c8-minmax-fp32-wasmsimd-mul32-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qu8-igemm/gen/2x4c8-minmax-fp32-xop-ld128.c b/src/qu8-igemm/gen/2x4c8-minmax-fp32-xop-ld128.c
index 12918fa..0420f28 100644
--- a/src/qu8-igemm/gen/2x4c8-minmax-fp32-xop-ld128.c
+++ b/src/qu8-igemm/gen/2x4c8-minmax-fp32-xop-ld128.c
@@ -32,7 +32,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qu8-igemm/gen/2x4c8-minmax-fp32-xop-ld64.c b/src/qu8-igemm/gen/2x4c8-minmax-fp32-xop-ld64.c
index 0941725..34e241b 100644
--- a/src/qu8-igemm/gen/2x4c8-minmax-fp32-xop-ld64.c
+++ b/src/qu8-igemm/gen/2x4c8-minmax-fp32-xop-ld64.c
@@ -32,7 +32,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qu8-igemm/gen/2x8c4-minmax-rndnu-neondot.c b/src/qu8-igemm/gen/2x8c4-minmax-rndnu-neondot.c
index 4d16cf1..c94c217 100644
--- a/src/qu8-igemm/gen/2x8c4-minmax-rndnu-neondot.c
+++ b/src/qu8-igemm/gen/2x8c4-minmax-rndnu-neondot.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qu8-igemm/gen/2x8c8-minmax-fp32-avx2.c b/src/qu8-igemm/gen/2x8c8-minmax-fp32-avx2.c
index 88a944e..03785d1 100644
--- a/src/qu8-igemm/gen/2x8c8-minmax-fp32-avx2.c
+++ b/src/qu8-igemm/gen/2x8c8-minmax-fp32-avx2.c
@@ -28,7 +28,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 2);
diff --git a/src/qu8-igemm/gen/3x16c4-minmax-rndnu-neondot.c b/src/qu8-igemm/gen/3x16c4-minmax-rndnu-neondot.c
index 6086b98..723d3a3 100644
--- a/src/qu8-igemm/gen/3x16c4-minmax-rndnu-neondot.c
+++ b/src/qu8-igemm/gen/3x16c4-minmax-rndnu-neondot.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qu8-igemm/gen/3x16c8-minmax-fp32-avx512skx.c b/src/qu8-igemm/gen/3x16c8-minmax-fp32-avx512skx.c
index 214d559..fb51589 100644
--- a/src/qu8-igemm/gen/3x16c8-minmax-fp32-avx512skx.c
+++ b/src/qu8-igemm/gen/3x16c8-minmax-fp32-avx512skx.c
@@ -28,7 +28,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qu8-igemm/gen/3x32c4-minmax-rndnu-neondot.c b/src/qu8-igemm/gen/3x32c4-minmax-rndnu-neondot.c
index dd4e3d0..900464f 100644
--- a/src/qu8-igemm/gen/3x32c4-minmax-rndnu-neondot.c
+++ b/src/qu8-igemm/gen/3x32c4-minmax-rndnu-neondot.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qu8-igemm/gen/3x4c2-minmax-fp32-avx-ld128.c b/src/qu8-igemm/gen/3x4c2-minmax-fp32-avx-ld128.c
index a3157ba..ce29cd3 100644
--- a/src/qu8-igemm/gen/3x4c2-minmax-fp32-avx-ld128.c
+++ b/src/qu8-igemm/gen/3x4c2-minmax-fp32-avx-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qu8-igemm/gen/3x4c2-minmax-fp32-avx-ld64.c b/src/qu8-igemm/gen/3x4c2-minmax-fp32-avx-ld64.c
index 50b64e0..e020c96 100644
--- a/src/qu8-igemm/gen/3x4c2-minmax-fp32-avx-ld64.c
+++ b/src/qu8-igemm/gen/3x4c2-minmax-fp32-avx-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qu8-igemm/gen/3x4c2-minmax-fp32-sse2-ld128.c b/src/qu8-igemm/gen/3x4c2-minmax-fp32-sse2-ld128.c
index 43ab210..d38ca1a 100644
--- a/src/qu8-igemm/gen/3x4c2-minmax-fp32-sse2-ld128.c
+++ b/src/qu8-igemm/gen/3x4c2-minmax-fp32-sse2-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qu8-igemm/gen/3x4c2-minmax-fp32-sse2-ld64.c b/src/qu8-igemm/gen/3x4c2-minmax-fp32-sse2-ld64.c
index 2024001..6d37eb9 100644
--- a/src/qu8-igemm/gen/3x4c2-minmax-fp32-sse2-ld64.c
+++ b/src/qu8-igemm/gen/3x4c2-minmax-fp32-sse2-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qu8-igemm/gen/3x4c2-minmax-fp32-sse41-ld128.c b/src/qu8-igemm/gen/3x4c2-minmax-fp32-sse41-ld128.c
index f05ea26..7c98e34 100644
--- a/src/qu8-igemm/gen/3x4c2-minmax-fp32-sse41-ld128.c
+++ b/src/qu8-igemm/gen/3x4c2-minmax-fp32-sse41-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qu8-igemm/gen/3x4c2-minmax-fp32-sse41-ld64.c b/src/qu8-igemm/gen/3x4c2-minmax-fp32-sse41-ld64.c
index 5380bb4..2142785 100644
--- a/src/qu8-igemm/gen/3x4c2-minmax-fp32-sse41-ld64.c
+++ b/src/qu8-igemm/gen/3x4c2-minmax-fp32-sse41-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qu8-igemm/gen/3x4c2-minmax-fp32-wasmsimd-dot16x2-ld128.c b/src/qu8-igemm/gen/3x4c2-minmax-fp32-wasmsimd-dot16x2-ld128.c
index 0e3b58f..a9d03f7 100644
--- a/src/qu8-igemm/gen/3x4c2-minmax-fp32-wasmsimd-dot16x2-ld128.c
+++ b/src/qu8-igemm/gen/3x4c2-minmax-fp32-wasmsimd-dot16x2-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qu8-igemm/gen/3x4c2-minmax-fp32-wasmsimd-dot16x2-ld64.c b/src/qu8-igemm/gen/3x4c2-minmax-fp32-wasmsimd-dot16x2-ld64.c
index 8a9a4a5..006c050 100644
--- a/src/qu8-igemm/gen/3x4c2-minmax-fp32-wasmsimd-dot16x2-ld64.c
+++ b/src/qu8-igemm/gen/3x4c2-minmax-fp32-wasmsimd-dot16x2-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qu8-igemm/gen/3x4c2-minmax-fp32-xop-ld128.c b/src/qu8-igemm/gen/3x4c2-minmax-fp32-xop-ld128.c
index 0ceaba2..546ddd0 100644
--- a/src/qu8-igemm/gen/3x4c2-minmax-fp32-xop-ld128.c
+++ b/src/qu8-igemm/gen/3x4c2-minmax-fp32-xop-ld128.c
@@ -32,7 +32,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qu8-igemm/gen/3x4c2-minmax-fp32-xop-ld64.c b/src/qu8-igemm/gen/3x4c2-minmax-fp32-xop-ld64.c
index bfd95aa..8e9c13c 100644
--- a/src/qu8-igemm/gen/3x4c2-minmax-fp32-xop-ld64.c
+++ b/src/qu8-igemm/gen/3x4c2-minmax-fp32-xop-ld64.c
@@ -32,7 +32,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qu8-igemm/gen/3x4c8-minmax-fp32-avx-ld128.c b/src/qu8-igemm/gen/3x4c8-minmax-fp32-avx-ld128.c
index 03461e0..cbed3c6 100644
--- a/src/qu8-igemm/gen/3x4c8-minmax-fp32-avx-ld128.c
+++ b/src/qu8-igemm/gen/3x4c8-minmax-fp32-avx-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qu8-igemm/gen/3x4c8-minmax-fp32-avx-ld64.c b/src/qu8-igemm/gen/3x4c8-minmax-fp32-avx-ld64.c
index 7f7ae8c..9d268a9 100644
--- a/src/qu8-igemm/gen/3x4c8-minmax-fp32-avx-ld64.c
+++ b/src/qu8-igemm/gen/3x4c8-minmax-fp32-avx-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qu8-igemm/gen/3x4c8-minmax-fp32-sse2-ld128.c b/src/qu8-igemm/gen/3x4c8-minmax-fp32-sse2-ld128.c
index 9eb5558..fad014a 100644
--- a/src/qu8-igemm/gen/3x4c8-minmax-fp32-sse2-ld128.c
+++ b/src/qu8-igemm/gen/3x4c8-minmax-fp32-sse2-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qu8-igemm/gen/3x4c8-minmax-fp32-sse2-ld64.c b/src/qu8-igemm/gen/3x4c8-minmax-fp32-sse2-ld64.c
index 99a50ba..4cba0e5 100644
--- a/src/qu8-igemm/gen/3x4c8-minmax-fp32-sse2-ld64.c
+++ b/src/qu8-igemm/gen/3x4c8-minmax-fp32-sse2-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qu8-igemm/gen/3x4c8-minmax-fp32-sse41-ld128.c b/src/qu8-igemm/gen/3x4c8-minmax-fp32-sse41-ld128.c
index 860838f..d5a42e1 100644
--- a/src/qu8-igemm/gen/3x4c8-minmax-fp32-sse41-ld128.c
+++ b/src/qu8-igemm/gen/3x4c8-minmax-fp32-sse41-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qu8-igemm/gen/3x4c8-minmax-fp32-sse41-ld64.c b/src/qu8-igemm/gen/3x4c8-minmax-fp32-sse41-ld64.c
index a44d96f..e0c6132 100644
--- a/src/qu8-igemm/gen/3x4c8-minmax-fp32-sse41-ld64.c
+++ b/src/qu8-igemm/gen/3x4c8-minmax-fp32-sse41-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qu8-igemm/gen/3x4c8-minmax-fp32-wasmsimd-dot16x2-ld128.c b/src/qu8-igemm/gen/3x4c8-minmax-fp32-wasmsimd-dot16x2-ld128.c
index 8b4402e..98cfa97 100644
--- a/src/qu8-igemm/gen/3x4c8-minmax-fp32-wasmsimd-dot16x2-ld128.c
+++ b/src/qu8-igemm/gen/3x4c8-minmax-fp32-wasmsimd-dot16x2-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qu8-igemm/gen/3x4c8-minmax-fp32-wasmsimd-dot16x2-ld64.c b/src/qu8-igemm/gen/3x4c8-minmax-fp32-wasmsimd-dot16x2-ld64.c
index 58885dc..f026bfe 100644
--- a/src/qu8-igemm/gen/3x4c8-minmax-fp32-wasmsimd-dot16x2-ld64.c
+++ b/src/qu8-igemm/gen/3x4c8-minmax-fp32-wasmsimd-dot16x2-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qu8-igemm/gen/3x4c8-minmax-fp32-wasmsimd-mul32-ld128.c b/src/qu8-igemm/gen/3x4c8-minmax-fp32-wasmsimd-mul32-ld128.c
index 3f869a1..8c5e9bc 100644
--- a/src/qu8-igemm/gen/3x4c8-minmax-fp32-wasmsimd-mul32-ld128.c
+++ b/src/qu8-igemm/gen/3x4c8-minmax-fp32-wasmsimd-mul32-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qu8-igemm/gen/3x4c8-minmax-fp32-wasmsimd-mul32-ld64.c b/src/qu8-igemm/gen/3x4c8-minmax-fp32-wasmsimd-mul32-ld64.c
index 3167f09..ecdac7d 100644
--- a/src/qu8-igemm/gen/3x4c8-minmax-fp32-wasmsimd-mul32-ld64.c
+++ b/src/qu8-igemm/gen/3x4c8-minmax-fp32-wasmsimd-mul32-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qu8-igemm/gen/3x4c8-minmax-fp32-xop-ld128.c b/src/qu8-igemm/gen/3x4c8-minmax-fp32-xop-ld128.c
index 6378cfb..f005792 100644
--- a/src/qu8-igemm/gen/3x4c8-minmax-fp32-xop-ld128.c
+++ b/src/qu8-igemm/gen/3x4c8-minmax-fp32-xop-ld128.c
@@ -32,7 +32,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qu8-igemm/gen/3x4c8-minmax-fp32-xop-ld64.c b/src/qu8-igemm/gen/3x4c8-minmax-fp32-xop-ld64.c
index 9799094..0f6c3a2 100644
--- a/src/qu8-igemm/gen/3x4c8-minmax-fp32-xop-ld64.c
+++ b/src/qu8-igemm/gen/3x4c8-minmax-fp32-xop-ld64.c
@@ -32,7 +32,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qu8-igemm/gen/3x8c4-minmax-rndnu-neondot.c b/src/qu8-igemm/gen/3x8c4-minmax-rndnu-neondot.c
index 6e87a89..1a2b4cb 100644
--- a/src/qu8-igemm/gen/3x8c4-minmax-rndnu-neondot.c
+++ b/src/qu8-igemm/gen/3x8c4-minmax-rndnu-neondot.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qu8-igemm/gen/3x8c8-minmax-fp32-avx2.c b/src/qu8-igemm/gen/3x8c8-minmax-fp32-avx2.c
index 62f1eee..cb17f27 100644
--- a/src/qu8-igemm/gen/3x8c8-minmax-fp32-avx2.c
+++ b/src/qu8-igemm/gen/3x8c8-minmax-fp32-avx2.c
@@ -28,7 +28,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 3);
diff --git a/src/qu8-igemm/gen/4x16-minmax-fp32-neon-mlal-lane.c b/src/qu8-igemm/gen/4x16-minmax-fp32-neon-mlal-lane.c
index d279a34..8929a5a 100644
--- a/src/qu8-igemm/gen/4x16-minmax-fp32-neon-mlal-lane.c
+++ b/src/qu8-igemm/gen/4x16-minmax-fp32-neon-mlal-lane.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qu8-igemm/gen/4x16-minmax-fp32-neonv8-mlal-lane.c b/src/qu8-igemm/gen/4x16-minmax-fp32-neonv8-mlal-lane.c
index 23b6f55..8106aae 100644
--- a/src/qu8-igemm/gen/4x16-minmax-fp32-neonv8-mlal-lane.c
+++ b/src/qu8-igemm/gen/4x16-minmax-fp32-neonv8-mlal-lane.c
@@ -28,7 +28,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qu8-igemm/gen/4x16-minmax-rndnu-neon-mlal-lane.c b/src/qu8-igemm/gen/4x16-minmax-rndnu-neon-mlal-lane.c
index 59c52c7..fd3972d 100644
--- a/src/qu8-igemm/gen/4x16-minmax-rndnu-neon-mlal-lane.c
+++ b/src/qu8-igemm/gen/4x16-minmax-rndnu-neon-mlal-lane.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qu8-igemm/gen/4x16c4-minmax-fp32-neondot.c b/src/qu8-igemm/gen/4x16c4-minmax-fp32-neondot.c
index 1d095a6..6eac207 100644
--- a/src/qu8-igemm/gen/4x16c4-minmax-fp32-neondot.c
+++ b/src/qu8-igemm/gen/4x16c4-minmax-fp32-neondot.c
@@ -28,7 +28,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qu8-igemm/gen/4x16c4-minmax-rndnu-neondot.c b/src/qu8-igemm/gen/4x16c4-minmax-rndnu-neondot.c
index cbd91d6..4bc831c 100644
--- a/src/qu8-igemm/gen/4x16c4-minmax-rndnu-neondot.c
+++ b/src/qu8-igemm/gen/4x16c4-minmax-rndnu-neondot.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qu8-igemm/gen/4x16c8-minmax-fp32-avx512skx.c b/src/qu8-igemm/gen/4x16c8-minmax-fp32-avx512skx.c
index c628044..47fb784 100644
--- a/src/qu8-igemm/gen/4x16c8-minmax-fp32-avx512skx.c
+++ b/src/qu8-igemm/gen/4x16c8-minmax-fp32-avx512skx.c
@@ -28,7 +28,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qu8-igemm/gen/4x4c2-minmax-fp32-avx-ld128.c b/src/qu8-igemm/gen/4x4c2-minmax-fp32-avx-ld128.c
index 111a58d..c6a2575 100644
--- a/src/qu8-igemm/gen/4x4c2-minmax-fp32-avx-ld128.c
+++ b/src/qu8-igemm/gen/4x4c2-minmax-fp32-avx-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qu8-igemm/gen/4x4c2-minmax-fp32-avx-ld64.c b/src/qu8-igemm/gen/4x4c2-minmax-fp32-avx-ld64.c
index ed12e0e..9f3e370 100644
--- a/src/qu8-igemm/gen/4x4c2-minmax-fp32-avx-ld64.c
+++ b/src/qu8-igemm/gen/4x4c2-minmax-fp32-avx-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qu8-igemm/gen/4x4c2-minmax-fp32-sse2-ld128.c b/src/qu8-igemm/gen/4x4c2-minmax-fp32-sse2-ld128.c
index 8da057e..b246de1 100644
--- a/src/qu8-igemm/gen/4x4c2-minmax-fp32-sse2-ld128.c
+++ b/src/qu8-igemm/gen/4x4c2-minmax-fp32-sse2-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qu8-igemm/gen/4x4c2-minmax-fp32-sse2-ld64.c b/src/qu8-igemm/gen/4x4c2-minmax-fp32-sse2-ld64.c
index c707531..1855de5 100644
--- a/src/qu8-igemm/gen/4x4c2-minmax-fp32-sse2-ld64.c
+++ b/src/qu8-igemm/gen/4x4c2-minmax-fp32-sse2-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qu8-igemm/gen/4x4c2-minmax-fp32-sse41-ld128.c b/src/qu8-igemm/gen/4x4c2-minmax-fp32-sse41-ld128.c
index 4628994..7be3371 100644
--- a/src/qu8-igemm/gen/4x4c2-minmax-fp32-sse41-ld128.c
+++ b/src/qu8-igemm/gen/4x4c2-minmax-fp32-sse41-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qu8-igemm/gen/4x4c2-minmax-fp32-sse41-ld64.c b/src/qu8-igemm/gen/4x4c2-minmax-fp32-sse41-ld64.c
index 6a857fe..d2a9ad5 100644
--- a/src/qu8-igemm/gen/4x4c2-minmax-fp32-sse41-ld64.c
+++ b/src/qu8-igemm/gen/4x4c2-minmax-fp32-sse41-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qu8-igemm/gen/4x4c2-minmax-fp32-wasmsimd-dot16x2-ld128.c b/src/qu8-igemm/gen/4x4c2-minmax-fp32-wasmsimd-dot16x2-ld128.c
index ac5d8d5..e1e4695 100644
--- a/src/qu8-igemm/gen/4x4c2-minmax-fp32-wasmsimd-dot16x2-ld128.c
+++ b/src/qu8-igemm/gen/4x4c2-minmax-fp32-wasmsimd-dot16x2-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qu8-igemm/gen/4x4c2-minmax-fp32-wasmsimd-dot16x2-ld64.c b/src/qu8-igemm/gen/4x4c2-minmax-fp32-wasmsimd-dot16x2-ld64.c
index 2759754..810a445 100644
--- a/src/qu8-igemm/gen/4x4c2-minmax-fp32-wasmsimd-dot16x2-ld64.c
+++ b/src/qu8-igemm/gen/4x4c2-minmax-fp32-wasmsimd-dot16x2-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qu8-igemm/gen/4x4c2-minmax-fp32-xop-ld128.c b/src/qu8-igemm/gen/4x4c2-minmax-fp32-xop-ld128.c
index 61da00d..282976d 100644
--- a/src/qu8-igemm/gen/4x4c2-minmax-fp32-xop-ld128.c
+++ b/src/qu8-igemm/gen/4x4c2-minmax-fp32-xop-ld128.c
@@ -32,7 +32,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qu8-igemm/gen/4x4c2-minmax-fp32-xop-ld64.c b/src/qu8-igemm/gen/4x4c2-minmax-fp32-xop-ld64.c
index 307a6f9..c552bc4 100644
--- a/src/qu8-igemm/gen/4x4c2-minmax-fp32-xop-ld64.c
+++ b/src/qu8-igemm/gen/4x4c2-minmax-fp32-xop-ld64.c
@@ -32,7 +32,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qu8-igemm/gen/4x4c8-minmax-fp32-wasmsimd-dot16x2-ld128.c b/src/qu8-igemm/gen/4x4c8-minmax-fp32-wasmsimd-dot16x2-ld128.c
index 4852181..7436444 100644
--- a/src/qu8-igemm/gen/4x4c8-minmax-fp32-wasmsimd-dot16x2-ld128.c
+++ b/src/qu8-igemm/gen/4x4c8-minmax-fp32-wasmsimd-dot16x2-ld128.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qu8-igemm/gen/4x4c8-minmax-fp32-wasmsimd-dot16x2-ld64.c b/src/qu8-igemm/gen/4x4c8-minmax-fp32-wasmsimd-dot16x2-ld64.c
index 77b627d..d4d9cb4 100644
--- a/src/qu8-igemm/gen/4x4c8-minmax-fp32-wasmsimd-dot16x2-ld64.c
+++ b/src/qu8-igemm/gen/4x4c8-minmax-fp32-wasmsimd-dot16x2-ld64.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qu8-igemm/gen/4x8-minmax-fp32-neon-mlal-lane.c b/src/qu8-igemm/gen/4x8-minmax-fp32-neon-mlal-lane.c
index 5599828..8cc0a67 100644
--- a/src/qu8-igemm/gen/4x8-minmax-fp32-neon-mlal-lane.c
+++ b/src/qu8-igemm/gen/4x8-minmax-fp32-neon-mlal-lane.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qu8-igemm/gen/4x8-minmax-rndnu-neon-mlal-lane.c b/src/qu8-igemm/gen/4x8-minmax-rndnu-neon-mlal-lane.c
index 0fabdb8..35b3a24 100644
--- a/src/qu8-igemm/gen/4x8-minmax-rndnu-neon-mlal-lane.c
+++ b/src/qu8-igemm/gen/4x8-minmax-rndnu-neon-mlal-lane.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qu8-igemm/gen/4x8c4-minmax-rndnu-neondot.c b/src/qu8-igemm/gen/4x8c4-minmax-rndnu-neondot.c
index 39c8875..42ecbb8 100644
--- a/src/qu8-igemm/gen/4x8c4-minmax-rndnu-neondot.c
+++ b/src/qu8-igemm/gen/4x8c4-minmax-rndnu-neondot.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 4);
diff --git a/src/qu8-igemm/gen/5x16c4-minmax-rndnu-neondot.c b/src/qu8-igemm/gen/5x16c4-minmax-rndnu-neondot.c
index 505b9f1..65e6138 100644
--- a/src/qu8-igemm/gen/5x16c4-minmax-rndnu-neondot.c
+++ b/src/qu8-igemm/gen/5x16c4-minmax-rndnu-neondot.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 5);
diff --git a/src/qu8-igemm/gen/5x8c4-minmax-rndnu-neondot.c b/src/qu8-igemm/gen/5x8c4-minmax-rndnu-neondot.c
index 416c3f6..cee3785 100644
--- a/src/qu8-igemm/gen/5x8c4-minmax-rndnu-neondot.c
+++ b/src/qu8-igemm/gen/5x8c4-minmax-rndnu-neondot.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 5);
diff --git a/src/qu8-igemm/gen/6x16c4-minmax-rndnu-neondot.c b/src/qu8-igemm/gen/6x16c4-minmax-rndnu-neondot.c
index 365d8f6..b58eefa 100644
--- a/src/qu8-igemm/gen/6x16c4-minmax-rndnu-neondot.c
+++ b/src/qu8-igemm/gen/6x16c4-minmax-rndnu-neondot.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 6);
diff --git a/src/qu8-igemm/gen/6x8c4-minmax-rndnu-neondot.c b/src/qu8-igemm/gen/6x8c4-minmax-rndnu-neondot.c
index d61cf63..4d26bb8 100644
--- a/src/qu8-igemm/gen/6x8c4-minmax-rndnu-neondot.c
+++ b/src/qu8-igemm/gen/6x8c4-minmax-rndnu-neondot.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 6);
diff --git a/src/qu8-igemm/gen/8x16c4-minmax-rndnu-neondot.c b/src/qu8-igemm/gen/8x16c4-minmax-rndnu-neondot.c
index a64cb2a..06f57cd 100644
--- a/src/qu8-igemm/gen/8x16c4-minmax-rndnu-neondot.c
+++ b/src/qu8-igemm/gen/8x16c4-minmax-rndnu-neondot.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 8);
diff --git a/src/qu8-igemm/gen/8x8c4-minmax-rndnu-neondot.c b/src/qu8-igemm/gen/8x8c4-minmax-rndnu-neondot.c
index 5bb6017..f15cced 100644
--- a/src/qu8-igemm/gen/8x8c4-minmax-rndnu-neondot.c
+++ b/src/qu8-igemm/gen/8x8c4-minmax-rndnu-neondot.c
@@ -27,7 +27,7 @@
     size_t cn_stride,
     size_t a_offset,
     const uint8_t* zero,
-    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_DISABLE_TSAN XNN_DISABLE_MSAN
+    const union xnn_qu8_conv_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
 {
   assert(mr != 0);
   assert(mr <= 8);
diff --git a/src/s8-maxpool/9p8x-minmax-neon-c16.c b/src/s8-maxpool/9p8x-minmax-neon-c16.c
index 2e52e11..95322bc 100644
--- a/src/s8-maxpool/9p8x-minmax-neon-c16.c
+++ b/src/s8-maxpool/9p8x-minmax-neon-c16.c
@@ -10,7 +10,7 @@
 #include <xnnpack/maxpool.h>
 
 
-XNN_DISABLE_TSAN void xnn_s8_maxpool_minmax_ukernel_9p8x__neon_c16(
+void xnn_s8_maxpool_minmax_ukernel_9p8x__neon_c16(
     size_t output_pixels,
     size_t kernel_elements,
     size_t channels,
diff --git a/src/u8-maxpool/9p8x-minmax-neon-c16.c b/src/u8-maxpool/9p8x-minmax-neon-c16.c
index b781f3f..a1b5a52 100644
--- a/src/u8-maxpool/9p8x-minmax-neon-c16.c
+++ b/src/u8-maxpool/9p8x-minmax-neon-c16.c
@@ -13,7 +13,7 @@
 #include <xnnpack/maxpool.h>
 
 
-XNN_DISABLE_TSAN void xnn_u8_maxpool_minmax_ukernel_9p8x__neon_c16(
+void xnn_u8_maxpool_minmax_ukernel_9p8x__neon_c16(
     size_t output_pixels,
     size_t kernel_elements,
     size_t channels,