special-cased x86 SSE2 i8 min/max accumulator

This commit is contained in:
dzaima 2025-03-20 21:32:15 +02:00
parent f503880cc3
commit 97260e0051

View File

@ -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}