From 120df2681421016280eba89296757a6d2a5fdcac Mon Sep 17 00:00:00 2001 From: Marshall Lochbaum Date: Mon, 7 Aug 2023 11:22:40 -0400 Subject: [PATCH] mullo works for both signed and unsigned --- src/singeli/src/avx2.singeli | 12 ++++++------ src/singeli/src/sse2.singeli | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/singeli/src/avx2.singeli b/src/singeli/src/avx2.singeli index 65a52263..d1f1f30a 100644 --- a/src/singeli/src/avx2.singeli +++ b/src/singeli/src/avx2.singeli @@ -69,12 +69,12 @@ def packQQ{{a, b}} = packQQ{a, b} # arith -def __mul{a:T,b:T & [16]i16==T} = emit{T, '_mm256_mullo_epi16', a, b} -def mulHi{a:T,b:T & [16]i16==T} = emit{T, '_mm256_mulhi_epi16', a, b} -def mulHi{a:T,b:T & [16]u16==T} = emit{T, '_mm256_mulhi_epu16', a, b} -def __mul{a:T,b:T & [ 8]i32==T} = emit{T, '_mm256_mullo_epi32', a, b} -def mul32{a:T,b:T & [ 4]i64==T} = emit{T, '_mm256_mul_epi32', a, b} # reads only low 32 bits of arguments -def mul32{a:T,b:T & [ 4]u64==T} = emit{T, '_mm256_mul_epu32', a, b} # reads only low 32 bits of arguments +def __mul{a:T,b:T & w256i{T, 16}} = emit{T, '_mm256_mullo_epi16', a, b} +def mulHi{a:T,b:T & [16]i16==T } = emit{T, '_mm256_mulhi_epi16', a, b} +def mulHi{a:T,b:T & [16]u16==T } = emit{T, '_mm256_mulhi_epu16', a, b} +def __mul{a:T,b:T & w256i{T, 32}} = emit{T, '_mm256_mullo_epi32', a, b} +def mul32{a:T,b:T & [ 4]i64==T } = emit{T, '_mm256_mul_epi32', a, b} # reads only low 32 bits of arguments +def mul32{a:T,b:T & [ 4]u64==T } = emit{T, '_mm256_mul_epu32', a, b} # reads only low 32 bits of arguments def abs{a:T & w256i{T,8 }} = emit{T, '_mm256_abs_epi8', a} def abs{a:T & w256i{T,16}} = emit{T, '_mm256_abs_epi16', a} diff --git a/src/singeli/src/sse2.singeli b/src/singeli/src/sse2.singeli index 31c665cd..b7193df7 100644 --- a/src/singeli/src/sse2.singeli +++ b/src/singeli/src/sse2.singeli @@ -119,7 +119,7 @@ def __sub{a:T,b:T & w128i{T, 16}} = emit{T, '_mm_sub_epi16', a, b} def __sub{a:T,b:T & w128i{T, 32}} = emit{T, '_mm_sub_epi32', a, b} def __sub{a:T,b:T & w128i{T, 64}} = emit{T, '_mm_sub_epi64', a, b} -def __mul{a:T,b:T & [8]i16==T} = emit{T, '_mm_mullo_epi16', a, b} +def __mul{a:T,b:T & w128i{T, 16}} = emit{T, '_mm_mullo_epi16', a, b} def mulHi{a:T,b:T & [8]i16==T} = emit{T, '_mm_mulhi_epi16', a, b} def mulHi{a:T,b:T & [8]u16==T} = emit{T, '_mm_mulhi_epu16', a, b} def mul32{a:T,b:T & [2]u64==T} = emit{T, '_mm_mul_epu32', a, b} # reads only low 32 bits of arguments