diff --git a/src/singeli/src/accumulator.singeli b/src/singeli/src/accumulator.singeli index b05953c0..a3fc9b40 100644 --- a/src/singeli/src/accumulator.singeli +++ b/src/singeli/src/accumulator.singeli @@ -182,4 +182,14 @@ def sum_accumulator{DE==i64, unr, VT=[k]SE==i32 if hasarch{'X86_64'}} = { # TODO extend finish{me} } +def assoc_accumulator{F if is{F,min} or is{F,max}, unr if knum{unr}, VT=([16]i8), ident if hasarch{'X86_64'} and not hasarch{'SSE4.1'}} = { + def adda{M, a, c:([16]i8)} = { + mask_ident{F,ident}{M, a, ty_u{c} ^ [16]u8**128} + } + def {acc, ..._} = acc_impl{adda, F, unr, [16]u8, u8, (ident%256) ^ 128} + def me{...} = acc + def me{'scal_result'} = i8~~(acc{'scal_result'} ^ 128) + extend finish{me} +} + def sum_accumulator{E, unr, VT=[_]E} = assoc_accumulator{__add, unr, VT, 0}