1 !sum
2
3 - go: Shift
4 commutative: false
5 documentation: !string |-
6 // NAME shifts each element in x by the signed value of the least significant byte
7 // of y's corresponding element: positive values shift left, negative values shift right.
8 - go: ShiftSaturated
9 signed: true
10 commutative: false
11 documentation: !string |-
12 // NAME shifts each element in x by the signed value of the least significant byte
13 // of y's corresponding element (positive shifts left, negative shifts right).
14 // Results are saturated to the signed range on overflow.
15 - go: ShiftSaturated
16 signed: false
17 commutative: false
18 documentation: !string |-
19 // NAME shifts each element in x by the signed value of the least significant byte
20 // of y's corresponding element (positive shifts left, negative shifts right).
21 // Results are saturated to the unsigned range on overflow.
22 - go: shiftLeftSaturatedConst
23 noGenericOps: "true"
24 signed: true
25 commutative: false
26 documentation: !string |-
27 // NAME performs a saturating left shift on each element in x by the constant number of bits specified by y.
28 // Results are saturated to the signed range on overflow.
29 - go: shiftLeftSaturatedConst
30 noGenericOps: "true"
31 signed: false
32 commutative: false
33 documentation: !string |-
34 // NAME performs a saturating left shift on each element in x by the constant number of bits specified by y.
35 // Results are saturated to the unsigned range on overflow.
36
37 - go: shiftRightNarrowConst
38 noGenericOps: "true"
39 commutative: false
40 documentation: !string |-
41 // NAME performs a right shift on each element in x by the constant number of bits
42 // and narrows the result to half the element width.
43 - go: shiftLeftWidenLoConst
44 noGenericOps: "true"
45 signed: false
46 commutative: false
47 documentation: !string |-
48 // NAME performs a left shift on each unsigned low-indexed element in x by the constant number of bits
49 // and widens the result to double the element width.
50 - go: shiftLeftWidenLoConst
51 noGenericOps: "true"
52 signed: true
53 commutative: false
54 documentation: !string |-
55 // NAME performs a left shift on each signed low-indexed element in x by the constant number of bits
56 // and widens the result to double the element width.
57
58 # Shared ops (AMD64 + ARM64)
59 - go: ShiftAllLeft
60 commutative: false
61 documentation: !string |-
62 // NAME shifts each element of x left by y bits.
63 // If y is greater than the element width, the result is 0.
64 - go: ShiftAllRight
65 signed: false
66 commutative: false
67 documentation: !string |-
68 // NAME logically shifts each element of x right by y bits.
69 // If y is greater than the element width, the result is 0.
70 - go: ShiftAllRight
71 signed: true
72 commutative: false
73 documentation: !string |-
74 // NAME arithmetically shifts each element of x right by y bits.
75 // If y is greater than the element width, the result is 0 or -1.
76 - go: shiftAllLeftConst # no APIs, only ssa ops.
77 noTypes: "true"
78 noGenericOps: "true"
79 commutative: false
80 - go: shiftAllRightConst # no APIs, only ssa ops.
81 noTypes: "true"
82 noGenericOps: "true"
83 signed: false
84 commutative: false
85 - go: shiftAllRightConst # no APIs, only ssa ops.
86 noTypes: "true"
87 noGenericOps: "true"
88 signed: true
89 commutative: false
90
91 - go: ShiftLeft
92 commutative: false
93 documentation: !string |-
94 // NAME shifts x[i] left by y[i] bits.
95 // If y[i] is greater than the element width, the result is 0.
96 - go: ShiftRight
97 signed: false
98 commutative: false
99 documentation: !string |-
100 // NAME logically shifts x[i] right by y[i] bits.
101 // If y[i] is greater than the element width, the result is 0.
102 - go: ShiftRight
103 signed: true
104 commutative: false
105 documentation: !string |-
106 // NAME arithmetically shifts x[i] right by y[i] bits.
107 // If y[i] is greater than the element width, the result is 0 or -1.
108 - go: RotateAllLeft
109 commutative: false
110 documentation: !string |-
111 // NAME rotates each element to the left by the number of bits specified by shift.
112 - go: rotateAllLeft
113 noGenericOps: "true"
114 commutative: false
115 documentation: !string |-
116 // NAME rotates each element to the left by the number of bits specified by shift.
117 - go: RotateLeft
118 commutative: false
119 documentation: !string |-
120 // NAME rotates each element in x to the left by the number of bits specified by y's corresponding elements.
121 - go: RotateAllRight
122 commutative: false
123 documentation: !string |-
124 // NAME rotates each element to the right by the number of bits specified by shift.
125 - go: rotateAllRight
126 noGenericOps: "true"
127 commutative: false
128 documentation: !string |-
129 // NAME rotates each element to the right by the number of bits specified by shift.
130 - go: RotateRight
131 commutative: false
132 documentation: !string |-
133 // NAME rotates each element in x to the right by the number of bits specified by y's corresponding elements.
134 # Bizzare shifts
135 - go: ShiftAllLeftConcatMod16
136 commutative: false
137 documentation: !string |-
138 // NAME shifts x[i] left by shift%16, filing any empted lower bits
139 // with the high bits of y[i].
140 //
141 // z[i] = concat(x[i], y[i]) << (shift%16)
142 - go: ShiftAllRightConcatMod16
143 commutative: false
144 documentation: !string |-
145 // NAME shifts x[i] right by shift%16, filling any emptied upper bits
146 // with the low bits of y[i].
147 //
148 // z[i] = concat(y[i], x[i]) >> (shift%16)
149 - go: ShiftLeftConcatMod16
150 commutative: false
151 documentation: !string |-
152 // NAME shifts x[i] left by shift[i]%16, filing any empted lower bits
153 // with the high bits of y[i].
154 //
155 // z[i] = concat(x[i], y[i]) << (shift[i]%16)
156 - go: ShiftRightConcatMod16
157 commutative: false
158 documentation: !string |-
159 // NAME shifts x[i] right by shift[i]%16, filling any emptied upper bits
160 // with the low bits of y[i].
161 //
162 // z[i] = concat(y[i], x[i]) >> (shift[i]%16)
163 - go: ShiftAllLeftConcatMod32
164 commutative: false
165 documentation: !string |-
166 // NAME shifts x[i] left by shift%32, filing any empted lower bits
167 // with the high bits of y[i].
168 //
169 // z[i] = concat(x[i], y[i]) << (shift%32)
170 - go: ShiftAllRightConcatMod32
171 commutative: false
172 documentation: !string |-
173 // NAME shifts x[i] right by shift%32, filling any emptied upper bits
174 // with the low bits of y[i].
175 //
176 // z[i] = concat(y[i], x[i]) >> (shift%32)
177 - go: ShiftLeftConcatMod32
178 commutative: false
179 documentation: !string |-
180 // NAME shifts x[i] left by shift[i]%32, filing any empted lower bits
181 // with the high bits of y[i].
182 //
183 // z[i] = concat(x[i], y[i]) << (shift[i]%32)
184 - go: ShiftRightConcatMod32
185 commutative: false
186 documentation: !string |-
187 // NAME shifts x[i] right by shift[i]%32, filling any emptied upper bits
188 // with the low bits of y[i].
189 //
190 // z[i] = concat(y[i], x[i]) >> (shift[i]%32)
191 - go: ShiftAllLeftConcatMod64
192 commutative: false
193 documentation: !string |-
194 // NAME shifts x[i] left by shift%64, filing any empted lower bits
195 // with the high bits of y[i].
196 //
197 // z[i] = concat(x[i], y[i]) << (shift%64)
198 - go: ShiftAllRightConcatMod64
199 commutative: false
200 documentation: !string |-
201 // NAME shifts x[i] right by shift%64, filling any emptied upper bits
202 // with the low bits of y[i].
203 //
204 // z[i] = concat(y[i], x[i]) >> (shift%64)
205 - go: ShiftLeftConcatMod64
206 commutative: false
207 documentation: !string |-
208 // NAME shifts x[i] left by shift[i]%64, filing any empted lower bits
209 // with the high bits of y[i].
210 //
211 // z[i] = concat(x[i], y[i]) << (shift[i]%64)
212 - go: ShiftRightConcatMod64
213 commutative: false
214 documentation: !string |-
215 // NAME shifts x[i] right by shift[i]%64, filling any emptied upper bits
216 // with the low bits of y[i].
217 //
218 // z[i] = concat(y[i], x[i]) >> (shift[i]%64)
View as plain text