From 5c05903b82536f40627ac09d1b50d7d5e98c5e51 Mon Sep 17 00:00:00 2001 From: James Bonfield Date: Thu, 9 Oct 2025 16:23:23 +0100 Subject: [PATCH 1/2] Replace literal assignment with memcpy to avoid undefined behaviour. Fixes #141 --- htscodecs/rANS_static32x16pr_neon.c | 199 +++++++++++++++------------- 1 file changed, 104 insertions(+), 95 deletions(-) diff --git a/htscodecs/rANS_static32x16pr_neon.c b/htscodecs/rANS_static32x16pr_neon.c index bb6b268..52e7d2f 100644 --- a/htscodecs/rANS_static32x16pr_neon.c +++ b/htscodecs/rANS_static32x16pr_neon.c @@ -1238,7 +1238,7 @@ static inline void transpose_and_copy(uint8_t *out, int iN[32], // } for (z = 0; z < NX; z+=4) { - *(uint64_t *)&out[iN[z]] = + uint64_t t0[4] = { ((uint64_t)(t[0][z])<< 0) + ((uint64_t)(t[1][z])<< 8) + ((uint64_t)(t[2][z])<<16) + @@ -1246,36 +1246,8 @@ static inline void transpose_and_copy(uint8_t *out, int iN[32], ((uint64_t)(t[4][z])<<32) + ((uint64_t)(t[5][z])<<40) + ((uint64_t)(t[6][z])<<48) + - ((uint64_t)(t[7][z])<<56); - *(uint64_t *)&out[iN[z+1]] = - ((uint64_t)(t[0][z+1])<< 0) + - ((uint64_t)(t[1][z+1])<< 8) + - ((uint64_t)(t[2][z+1])<<16) + - ((uint64_t)(t[3][z+1])<<24) + - ((uint64_t)(t[4][z+1])<<32) + - ((uint64_t)(t[5][z+1])<<40) + - ((uint64_t)(t[6][z+1])<<48) + - ((uint64_t)(t[7][z+1])<<56); - *(uint64_t *)&out[iN[z+2]] = - ((uint64_t)(t[0][z+2])<< 0) + - ((uint64_t)(t[1][z+2])<< 8) + - ((uint64_t)(t[2][z+2])<<16) + - ((uint64_t)(t[3][z+2])<<24) + - ((uint64_t)(t[4][z+2])<<32) + - ((uint64_t)(t[5][z+2])<<40) + - ((uint64_t)(t[6][z+2])<<48) + - ((uint64_t)(t[7][z+2])<<56); - *(uint64_t *)&out[iN[z+3]] = - ((uint64_t)(t[0][z+3])<< 0) + - ((uint64_t)(t[1][z+3])<< 8) + - ((uint64_t)(t[2][z+3])<<16) + - ((uint64_t)(t[3][z+3])<<24) + - ((uint64_t)(t[4][z+3])<<32) + - ((uint64_t)(t[5][z+3])<<40) + - ((uint64_t)(t[6][z+3])<<48) + - ((uint64_t)(t[7][z+3])<<56); + ((uint64_t)(t[7][z])<<56), - *(uint64_t *)&out[iN[z]+8] = ((uint64_t)(t[8+0][z])<< 0) + ((uint64_t)(t[8+1][z])<< 8) + ((uint64_t)(t[8+2][z])<<16) + @@ -1283,36 +1255,8 @@ static inline void transpose_and_copy(uint8_t *out, int iN[32], ((uint64_t)(t[8+4][z])<<32) + ((uint64_t)(t[8+5][z])<<40) + ((uint64_t)(t[8+6][z])<<48) + - ((uint64_t)(t[8+7][z])<<56); - *(uint64_t *)&out[iN[z+1]+8] = - ((uint64_t)(t[8+0][z+1])<< 0) + - ((uint64_t)(t[8+1][z+1])<< 8) + - ((uint64_t)(t[8+2][z+1])<<16) + - ((uint64_t)(t[8+3][z+1])<<24) + - ((uint64_t)(t[8+4][z+1])<<32) + - ((uint64_t)(t[8+5][z+1])<<40) + - ((uint64_t)(t[8+6][z+1])<<48) + - ((uint64_t)(t[8+7][z+1])<<56); - *(uint64_t *)&out[iN[z+2]+8] = - ((uint64_t)(t[8+0][z+2])<< 0) + - ((uint64_t)(t[8+1][z+2])<< 8) + - ((uint64_t)(t[8+2][z+2])<<16) + - ((uint64_t)(t[8+3][z+2])<<24) + - ((uint64_t)(t[8+4][z+2])<<32) + - ((uint64_t)(t[8+5][z+2])<<40) + - ((uint64_t)(t[8+6][z+2])<<48) + - ((uint64_t)(t[8+7][z+2])<<56); - *(uint64_t *)&out[iN[z+3]+8] = - ((uint64_t)(t[8+0][z+3])<< 0) + - ((uint64_t)(t[8+1][z+3])<< 8) + - ((uint64_t)(t[8+2][z+3])<<16) + - ((uint64_t)(t[8+3][z+3])<<24) + - ((uint64_t)(t[8+4][z+3])<<32) + - ((uint64_t)(t[8+5][z+3])<<40) + - ((uint64_t)(t[8+6][z+3])<<48) + - ((uint64_t)(t[8+7][z+3])<<56); + ((uint64_t)(t[8+7][z])<<56), - *(uint64_t *)&out[iN[z]+16] = ((uint64_t)(t[16+0][z])<< 0) + ((uint64_t)(t[16+1][z])<< 8) + ((uint64_t)(t[16+2][z])<<16) + @@ -1320,36 +1264,8 @@ static inline void transpose_and_copy(uint8_t *out, int iN[32], ((uint64_t)(t[16+4][z])<<32) + ((uint64_t)(t[16+5][z])<<40) + ((uint64_t)(t[16+6][z])<<48) + - ((uint64_t)(t[16+7][z])<<56); - *(uint64_t *)&out[iN[z+1]+16] = - ((uint64_t)(t[16+0][z+1])<< 0) + - ((uint64_t)(t[16+1][z+1])<< 8) + - ((uint64_t)(t[16+2][z+1])<<16) + - ((uint64_t)(t[16+3][z+1])<<24) + - ((uint64_t)(t[16+4][z+1])<<32) + - ((uint64_t)(t[16+5][z+1])<<40) + - ((uint64_t)(t[16+6][z+1])<<48) + - ((uint64_t)(t[16+7][z+1])<<56); - *(uint64_t *)&out[iN[z+2]+16] = - ((uint64_t)(t[16+0][z+2])<< 0) + - ((uint64_t)(t[16+1][z+2])<< 8) + - ((uint64_t)(t[16+2][z+2])<<16) + - ((uint64_t)(t[16+3][z+2])<<24) + - ((uint64_t)(t[16+4][z+2])<<32) + - ((uint64_t)(t[16+5][z+2])<<40) + - ((uint64_t)(t[16+6][z+2])<<48) + - ((uint64_t)(t[16+7][z+2])<<56); - *(uint64_t *)&out[iN[z+3]+16] = - ((uint64_t)(t[16+0][z+3])<< 0) + - ((uint64_t)(t[16+1][z+3])<< 8) + - ((uint64_t)(t[16+2][z+3])<<16) + - ((uint64_t)(t[16+3][z+3])<<24) + - ((uint64_t)(t[16+4][z+3])<<32) + - ((uint64_t)(t[16+5][z+3])<<40) + - ((uint64_t)(t[16+6][z+3])<<48) + - ((uint64_t)(t[16+7][z+3])<<56); + ((uint64_t)(t[16+7][z])<<56), - *(uint64_t *)&out[iN[z]+24] = ((uint64_t)(t[24+0][z])<< 0) + ((uint64_t)(t[24+1][z])<< 8) + ((uint64_t)(t[24+2][z])<<16) + @@ -1357,8 +1273,38 @@ static inline void transpose_and_copy(uint8_t *out, int iN[32], ((uint64_t)(t[24+4][z])<<32) + ((uint64_t)(t[24+5][z])<<40) + ((uint64_t)(t[24+6][z])<<48) + - ((uint64_t)(t[24+7][z])<<56); - *(uint64_t *)&out[iN[z+1]+24] = + ((uint64_t)(t[24+7][z])<<56) + }; + memcpy(&out[iN[z]], &t0, 32); + + uint64_t t1[4] = { + ((uint64_t)(t[0][z+1])<< 0) + + ((uint64_t)(t[1][z+1])<< 8) + + ((uint64_t)(t[2][z+1])<<16) + + ((uint64_t)(t[3][z+1])<<24) + + ((uint64_t)(t[4][z+1])<<32) + + ((uint64_t)(t[5][z+1])<<40) + + ((uint64_t)(t[6][z+1])<<48) + + ((uint64_t)(t[7][z+1])<<56), + + ((uint64_t)(t[8+0][z+1])<< 0) + + ((uint64_t)(t[8+1][z+1])<< 8) + + ((uint64_t)(t[8+2][z+1])<<16) + + ((uint64_t)(t[8+3][z+1])<<24) + + ((uint64_t)(t[8+4][z+1])<<32) + + ((uint64_t)(t[8+5][z+1])<<40) + + ((uint64_t)(t[8+6][z+1])<<48) + + ((uint64_t)(t[8+7][z+1])<<56), + + ((uint64_t)(t[16+0][z+1])<< 0) + + ((uint64_t)(t[16+1][z+1])<< 8) + + ((uint64_t)(t[16+2][z+1])<<16) + + ((uint64_t)(t[16+3][z+1])<<24) + + ((uint64_t)(t[16+4][z+1])<<32) + + ((uint64_t)(t[16+5][z+1])<<40) + + ((uint64_t)(t[16+6][z+1])<<48) + + ((uint64_t)(t[16+7][z+1])<<56), + ((uint64_t)(t[24+0][z+1])<< 0) + ((uint64_t)(t[24+1][z+1])<< 8) + ((uint64_t)(t[24+2][z+1])<<16) + @@ -1366,8 +1312,38 @@ static inline void transpose_and_copy(uint8_t *out, int iN[32], ((uint64_t)(t[24+4][z+1])<<32) + ((uint64_t)(t[24+5][z+1])<<40) + ((uint64_t)(t[24+6][z+1])<<48) + - ((uint64_t)(t[24+7][z+1])<<56); - *(uint64_t *)&out[iN[z+2]+24] = + ((uint64_t)(t[24+7][z+1])<<56) + }; + memcpy(&out[iN[z+1]], &t1, 32); + + uint64_t t2[4] = { + ((uint64_t)(t[0][z+2])<< 0) + + ((uint64_t)(t[1][z+2])<< 8) + + ((uint64_t)(t[2][z+2])<<16) + + ((uint64_t)(t[3][z+2])<<24) + + ((uint64_t)(t[4][z+2])<<32) + + ((uint64_t)(t[5][z+2])<<40) + + ((uint64_t)(t[6][z+2])<<48) + + ((uint64_t)(t[7][z+2])<<56), + + ((uint64_t)(t[8+0][z+2])<< 0) + + ((uint64_t)(t[8+1][z+2])<< 8) + + ((uint64_t)(t[8+2][z+2])<<16) + + ((uint64_t)(t[8+3][z+2])<<24) + + ((uint64_t)(t[8+4][z+2])<<32) + + ((uint64_t)(t[8+5][z+2])<<40) + + ((uint64_t)(t[8+6][z+2])<<48) + + ((uint64_t)(t[8+7][z+2])<<56), + + ((uint64_t)(t[16+0][z+2])<< 0) + + ((uint64_t)(t[16+1][z+2])<< 8) + + ((uint64_t)(t[16+2][z+2])<<16) + + ((uint64_t)(t[16+3][z+2])<<24) + + ((uint64_t)(t[16+4][z+2])<<32) + + ((uint64_t)(t[16+5][z+2])<<40) + + ((uint64_t)(t[16+6][z+2])<<48) + + ((uint64_t)(t[16+7][z+2])<<56), + ((uint64_t)(t[24+0][z+2])<< 0) + ((uint64_t)(t[24+1][z+2])<< 8) + ((uint64_t)(t[24+2][z+2])<<16) + @@ -1375,8 +1351,39 @@ static inline void transpose_and_copy(uint8_t *out, int iN[32], ((uint64_t)(t[24+4][z+2])<<32) + ((uint64_t)(t[24+5][z+2])<<40) + ((uint64_t)(t[24+6][z+2])<<48) + - ((uint64_t)(t[24+7][z+2])<<56); - *(uint64_t *)&out[iN[z+3]+24] = + ((uint64_t)(t[24+7][z+2])<<56), + + }; + memcpy(&out[iN[z+2]], &t2, 32); + + uint64_t t3[4] = { + ((uint64_t)(t[0][z+3])<< 0) + + ((uint64_t)(t[1][z+3])<< 8) + + ((uint64_t)(t[2][z+3])<<16) + + ((uint64_t)(t[3][z+3])<<24) + + ((uint64_t)(t[4][z+3])<<32) + + ((uint64_t)(t[5][z+3])<<40) + + ((uint64_t)(t[6][z+3])<<48) + + ((uint64_t)(t[7][z+3])<<56), + + ((uint64_t)(t[8+0][z+3])<< 0) + + ((uint64_t)(t[8+1][z+3])<< 8) + + ((uint64_t)(t[8+2][z+3])<<16) + + ((uint64_t)(t[8+3][z+3])<<24) + + ((uint64_t)(t[8+4][z+3])<<32) + + ((uint64_t)(t[8+5][z+3])<<40) + + ((uint64_t)(t[8+6][z+3])<<48) + + ((uint64_t)(t[8+7][z+3])<<56), + + ((uint64_t)(t[16+0][z+3])<< 0) + + ((uint64_t)(t[16+1][z+3])<< 8) + + ((uint64_t)(t[16+2][z+3])<<16) + + ((uint64_t)(t[16+3][z+3])<<24) + + ((uint64_t)(t[16+4][z+3])<<32) + + ((uint64_t)(t[16+5][z+3])<<40) + + ((uint64_t)(t[16+6][z+3])<<48) + + ((uint64_t)(t[16+7][z+3])<<56), + ((uint64_t)(t[24+0][z+3])<< 0) + ((uint64_t)(t[24+1][z+3])<< 8) + ((uint64_t)(t[24+2][z+3])<<16) + @@ -1384,7 +1391,9 @@ static inline void transpose_and_copy(uint8_t *out, int iN[32], ((uint64_t)(t[24+4][z+3])<<32) + ((uint64_t)(t[24+5][z+3])<<40) + ((uint64_t)(t[24+6][z+3])<<48) + - ((uint64_t)(t[24+7][z+3])<<56); + ((uint64_t)(t[24+7][z+3])<<56) + }; + memcpy(&out[iN[z+3]], &t3, 32); iN[z+0] += 32; iN[z+1] += 32; From 877e6051937f85c6e5f97b70d9b6c8ab887ce81e Mon Sep 17 00:00:00 2001 From: James Bonfield Date: Mon, 13 Oct 2025 14:06:05 +0100 Subject: [PATCH 2/2] Upgrade FreeBSD to 15_0_SNAP Also ignore the OS version error in "pkg update" --- .cirrus.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.cirrus.yml b/.cirrus.yml index 49f19bc..bd8901c 100644 --- a/.cirrus.yml +++ b/.cirrus.yml @@ -77,10 +77,10 @@ rocky_task: task: name: freebsd freebsd_instance: - image_family: freebsd-14-2 + image_family: freebsd-15-0-snap pkginstall_script: - - pkg update -f + - IGNORE_OSVERSION=yes pkg update -f - pkg install -y gcc autoconf automake libdeflate libtool compile_script: