...
1!sum
2# Average (unsigned byte, unsigned word)
3# Instructions: VPAVGB, VPAVGW
4- go: Average
5 asm: "VPAVG[BW]" # Matches VPAVGB (byte) and VPAVGW (word)
6 in:
7 - &uint_t # $t will be Uint8xN for VPAVGB, Uint16xN for VPAVGW
8 go: $t
9 base: uint
10 - *uint_t
11 out:
12 - *uint_t
13
14# Absolute Value (signed byte, word, dword, qword)
15# Instructions: VPABSB, VPABSW, VPABSD, VPABSQ
16- go: Abs
17 asm: "VPABS[BWDQ]" # Matches VPABSB, VPABSW, VPABSD, VPABSQ
18 in:
19 - &int_t # $t will be Int8xN, Int16xN, Int32xN, Int64xN
20 go: $t
21 base: int
22 out:
23 - *int_t # Output is magnitude, fits in the same signed type
24
25# Sign Operation (signed byte, word, dword)
26# Instructions: VPSIGNB, VPSIGNW, VPSIGND
27- go: MulSign
28 asm: "VPSIGN[BWD]" # Matches VPSIGNB, VPSIGNW, VPSIGND
29 in:
30 - *int_t # value to multiply by sign
31 - *int_t # value from which to take the sign
32 out:
33 - *int_t
34
35# Population Count (count set bits in each element)
36# Instructions: VPOPCNTB, VPOPCNTW (AVX512_BITALG)
37# VPOPCNTD, VPOPCNTQ (AVX512_VPOPCNTDQ)
38- go: OnesCount
39 asm: "VPOPCNT[BWDQ]"
40 in:
41 - &any
42 go: $t
43 out:
44 - *any
View as plain text