Source: minimap2
Version: 2.27+dfsg-1
Severity: normal
Tags: patch
User: debian-loonga...@lists.debian.org
Usertags: loong64

Dear maintainers,

Compiling the minimap2 failed for loong64 in the Debian Package Auto-Building environment.
The error log is as follows,
```
......
In file included from ksw2_ll_sse.c:7:
ksw2_ll_sse.c: In function ‘ksw_ll_i16’:
ksw2_ll_sse.c:114:21: error: type mismatch in conditional expression
  114 |                 h = _mm_slli_si128(h, 2);
      |                     ^~~~~~~~~~~~~~
ksw2_ll_sse.c:131:29: error: type mismatch in conditional expression
  131 |                         f = _mm_slli_si128(f, 2);
      |                             ^~~~~~~~~~~~~~
ksw2_ll_sse.c:93:44: error: type mismatch in conditional expression
   93 |                 (xx) = _mm_max_epi16((xx), _mm_srli_si128((xx), 8)); \
      |                                            ^~~~~~~~~~~~~~
.......
```
The full build log can be found at https://buildd.debian.org/status/fetch.php?pkg=minimap2&arch=loong64&ver=2.27%2Bdfsg-1%2Bb3&stamp=1740598758&raw=0.

Please consider the patch I attached.
For function _mm_slli_si128() and _mm_srli_si128(), I added type conversion in conditional expression. Based on attached patch, I have built minimap2 (2.27+dfsg-1+loong64) successfully on locally.
```
......
   dh_builddeb
dpkg-deb: building package 'minimap2' in '../minimap2_2.27+dfsg-1+loong64_loong64.deb'. dpkg-deb: building package 'minimap2-dbgsym' in '../minimap2-dbgsym_2.27+dfsg-1+loong64_loong64.deb'. dpkg-deb: building package 'libminimap2-dev' in '../libminimap2-dev_2.27+dfsg-1+loong64_loong64.deb'. dpkg-deb: building package 'python3-mappy' in '../python3-mappy_2.27+dfsg-1+loong64_loong64.deb'. dpkg-deb: building package 'python3-mappy-dbgsym' in '../python3-mappy-dbgsym_2.27+dfsg-1+loong64_loong64.deb'.
 dpkg-genbuildinfo -O../minimap2_2.27+dfsg-1+loong64_loong64.buildinfo
 dpkg-genchanges -O../minimap2_2.27+dfsg-1+loong64_loong64.changes
```

Your opinions are welcome.

Best regards,
Dandan Zhang

Description: Fix type mismatch in conditional expression. 
 .
 minimap2 (2.27+dfsg-1+loong64) unstable; urgency=medium
 .
   * Fix type mismatch in conditional expression.
Author: Dandan Zhang <zhangdan...@loongson.cn>

---
Last-Update: 2025-03-04

--- minimap2-2.27+dfsg.orig/ksw2_extd2_sse.c
+++ minimap2-2.27+dfsg/ksw2_extd2_sse.c
@@ -20,19 +20,19 @@ void ksw_extd2_sse(void *km, int qlen, c
 #define __dp_code_block1 \
 	z = _mm_load_si128(&s[t]); \
 	xt1 = _mm_load_si128(&x[t]);                     /* xt1 <- x[r-1][t..t+15] */ \
-	tmp = _mm_srli_si128(xt1, 15);                   /* tmp <- x[r-1][t+15] */ \
-	xt1 = _mm_or_si128(_mm_slli_si128(xt1, 1), x1_); /* xt1 <- x[r-1][t-1..t+14] */ \
+	tmp = _mm_srli_si128((simde__m128i)xt1, 15);                   /* tmp <- x[r-1][t+15] */ \
+	xt1 = _mm_or_si128(_mm_slli_si128((simde__m128i)xt1, 1), x1_); /* xt1 <- x[r-1][t-1..t+14] */ \
 	x1_ = tmp; \
 	vt1 = _mm_load_si128(&v[t]);                     /* vt1 <- v[r-1][t..t+15] */ \
-	tmp = _mm_srli_si128(vt1, 15);                   /* tmp <- v[r-1][t+15] */ \
-	vt1 = _mm_or_si128(_mm_slli_si128(vt1, 1), v1_); /* vt1 <- v[r-1][t-1..t+14] */ \
+	tmp = _mm_srli_si128((simde__m128i)vt1, 15);                   /* tmp <- v[r-1][t+15] */ \
+	vt1 = _mm_or_si128(_mm_slli_si128((simde__m128i)vt1, 1), v1_); /* vt1 <- v[r-1][t-1..t+14] */ \
 	v1_ = tmp; \
 	a = _mm_add_epi8(xt1, vt1);                      /* a <- x[r-1][t-1..t+14] + v[r-1][t-1..t+14] */ \
 	ut = _mm_load_si128(&u[t]);                      /* ut <- u[t..t+15] */ \
 	b = _mm_add_epi8(_mm_load_si128(&y[t]), ut);     /* b <- y[r-1][t..t+15] + u[r-1][t..t+15] */ \
 	x2t1= _mm_load_si128(&x2[t]); \
-	tmp = _mm_srli_si128(x2t1, 15); \
-	x2t1= _mm_or_si128(_mm_slli_si128(x2t1, 1), x21_); \
+	tmp = _mm_srli_si128((simde__m128i)x2t1, 15); \
+	x2t1= _mm_or_si128(_mm_slli_si128((simde__m128i)x2t1, 1), x21_); \
 	x21_= tmp; \
 	a2= _mm_add_epi8(x2t1, vt1); \
 	b2= _mm_add_epi8(_mm_load_si128(&y2[t]), ut);
--- minimap2-2.27+dfsg.orig/ksw2_exts2_sse.c
+++ minimap2-2.27+dfsg/ksw2_exts2_sse.c
@@ -20,19 +20,19 @@ void ksw_exts2_sse(void *km, int qlen, c
 #define __dp_code_block1 \
 	z = _mm_load_si128(&s[t]); \
 	xt1 = _mm_load_si128(&x[t]);                     /* xt1 <- x[r-1][t..t+15] */ \
-	tmp = _mm_srli_si128(xt1, 15);                   /* tmp <- x[r-1][t+15] */ \
-	xt1 = _mm_or_si128(_mm_slli_si128(xt1, 1), x1_); /* xt1 <- x[r-1][t-1..t+14] */ \
+	tmp = _mm_srli_si128((simde__m128i)xt1, 15);                   /* tmp <- x[r-1][t+15] */ \
+	xt1 = _mm_or_si128(_mm_slli_si128((simde__m128i)xt1, 1), x1_); /* xt1 <- x[r-1][t-1..t+14] */ \
 	x1_ = tmp; \
 	vt1 = _mm_load_si128(&v[t]);                     /* vt1 <- v[r-1][t..t+15] */ \
-	tmp = _mm_srli_si128(vt1, 15);                   /* tmp <- v[r-1][t+15] */ \
-	vt1 = _mm_or_si128(_mm_slli_si128(vt1, 1), v1_); /* vt1 <- v[r-1][t-1..t+14] */ \
+	tmp = _mm_srli_si128((simde__m128i)vt1, 15);                   /* tmp <- v[r-1][t+15] */ \
+	vt1 = _mm_or_si128(_mm_slli_si128((simde__m128i)vt1, 1), v1_); /* vt1 <- v[r-1][t-1..t+14] */ \
 	v1_ = tmp; \
 	a = _mm_add_epi8(xt1, vt1);                      /* a <- x[r-1][t-1..t+14] + v[r-1][t-1..t+14] */ \
 	ut = _mm_load_si128(&u[t]);                      /* ut <- u[t..t+15] */ \
 	b = _mm_add_epi8(_mm_load_si128(&y[t]), ut);     /* b <- y[r-1][t..t+15] + u[r-1][t..t+15] */ \
 	x2t1= _mm_load_si128(&x2[t]); \
-	tmp = _mm_srli_si128(x2t1, 15); \
-	x2t1= _mm_or_si128(_mm_slli_si128(x2t1, 1), x21_); \
+	tmp = _mm_srli_si128((simde__m128i)x2t1, 15); \
+	x2t1= _mm_or_si128(_mm_slli_si128((simde__m128i)x2t1, 1), x21_); \
 	x21_= tmp; \
 	a2  = _mm_add_epi8(x2t1, vt1); \
 	a2a = _mm_add_epi8(a2, _mm_load_si128(&acceptor[t]));
--- minimap2-2.27+dfsg.orig/ksw2_extz2_sse.c
+++ minimap2-2.27+dfsg/ksw2_extz2_sse.c
@@ -16,12 +16,12 @@ void ksw_extz2_sse(void *km, int qlen, c
 #define __dp_code_block1 \
 	z = _mm_add_epi8(_mm_load_si128(&s[t]), qe2_); \
 	xt1 = _mm_load_si128(&x[t]);                     /* xt1 <- x[r-1][t..t+15] */ \
-	tmp = _mm_srli_si128(xt1, 15);                   /* tmp <- x[r-1][t+15] */ \
-	xt1 = _mm_or_si128(_mm_slli_si128(xt1, 1), x1_); /* xt1 <- x[r-1][t-1..t+14] */ \
+	tmp = _mm_srli_si128((simde__m128i)xt1, 15);                   /* tmp <- x[r-1][t+15] */ \
+	xt1 = _mm_or_si128(_mm_slli_si128((simde__m128i)xt1, 1), x1_); /* xt1 <- x[r-1][t-1..t+14] */ \
 	x1_ = tmp; \
 	vt1 = _mm_load_si128(&v[t]);                     /* vt1 <- v[r-1][t..t+15] */ \
-	tmp = _mm_srli_si128(vt1, 15);                   /* tmp <- v[r-1][t+15] */ \
-	vt1 = _mm_or_si128(_mm_slli_si128(vt1, 1), v1_); /* vt1 <- v[r-1][t-1..t+14] */ \
+	tmp = _mm_srli_si128((simde__m128i)vt1, 15);                   /* tmp <- v[r-1][t+15] */ \
+	vt1 = _mm_or_si128(_mm_slli_si128((simde__m128i)vt1, 1), v1_); /* vt1 <- v[r-1][t-1..t+14] */ \
 	v1_ = tmp; \
 	a = _mm_add_epi8(xt1, vt1);                      /* a <- x[r-1][t-1..t+14] + v[r-1][t-1..t+14] */ \
 	ut = _mm_load_si128(&u[t]);                      /* ut <- u[t..t+15] */ \
--- minimap2-2.27+dfsg.orig/ksw2_ll_sse.c
+++ minimap2-2.27+dfsg/ksw2_ll_sse.c
@@ -90,9 +90,9 @@ int ksw_ll_i16(void *q_, int tlen, const
 	uint16_t *H8;
 
 #define __max_8(ret, xx) do { \
-		(xx) = _mm_max_epi16((xx), _mm_srli_si128((xx), 8)); \
-		(xx) = _mm_max_epi16((xx), _mm_srli_si128((xx), 4)); \
-		(xx) = _mm_max_epi16((xx), _mm_srli_si128((xx), 2)); \
+		(xx) = _mm_max_epi16((xx), _mm_srli_si128(((simde__m128i)xx), 8)); \
+		(xx) = _mm_max_epi16((xx), _mm_srli_si128(((simde__m128i)xx), 4)); \
+		(xx) = _mm_max_epi16((xx), _mm_srli_si128(((simde__m128i)xx), 2)); \
 		(ret) = _mm_extract_epi16((xx), 0); \
 	} while (0)
 
@@ -111,7 +111,7 @@ int ksw_ll_i16(void *q_, int tlen, const
 		int j, k, imax;
 		__m128i e, h, f = zero, max = zero, *S = q->qp + target[i] * slen; // s is the 1st score vector
 		h = _mm_load_si128(H0 + slen - 1); // h={2,5,8,11,14,17,-1,-1} in the above example
-		h = _mm_slli_si128(h, 2);
+		h = _mm_slli_si128((simde__m128i)h, 2);
 		for (j = 0; LIKELY(j < slen); ++j) {
 			h = _mm_adds_epi16(h, *S++);
 			e = _mm_load_si128(E + j);
@@ -128,7 +128,7 @@ int ksw_ll_i16(void *q_, int tlen, const
 			h = _mm_load_si128(H0 + j);
 		}
 		for (k = 0; LIKELY(k < 8); ++k) {
-			f = _mm_slli_si128(f, 2);
+			f = _mm_slli_si128((simde__m128i)f, 2);
 			for (j = 0; LIKELY(j < slen); ++j) {
 				h = _mm_load_si128(H1 + j);
 				h = _mm_max_epi16(h, f);

Reply via email to