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);