1 # RUN: llvm-mc -arch=hexagon -mcpu=hexagonv62 -filetype=obj -mhvx %s | llvm-objdump -arch=hexagon -mcpu=hexagonv62 -mhvx -d - | FileCheck %s
6 # CHECK: 19c0c040 { v0.b = vsplat(r0) }
11 # CHECK: 19c0c020 { v0.h = vsplat(r0) }
16 # CHECK: 19a0c04c { q0 = vsetq2(r0) }
19 // Qd4.
b=vshuffe
(Qs4.h
,Qt4.h
)
20 Q0.
b=vshuffe
(Q0.h
,Q0.h
)
21 # CHECK: 1e03c018 { q0.b = vshuffe(q0.h,q0.h) }
24 // Qd4.h
=vshuffe
(Qs4.w
,Qt4.w
)
25 Q0.h
=vshuffe
(Q0.w
,Q0.w
)
26 # CHECK: 1e03c01c { q0.h = vshuffe(q0.w,q0.w) }
29 // Vd32.
b=vadd
(Vu32.
b,Vv32.
b):sat
30 V0.
b=vadd
(V0.
b,V0.
b):sat
31 # CHECK: 1f00c000 { v0.b = vadd(v0.b,v0.b):sat }
34 // Vdd32.
b=vadd
(Vuu32.
b,Vvv32.
b):sat
35 V1
:0.b=vadd(V1:0.b,V1:0.b):sat
36 # CHECK: 1ea0c000 { v1:0.b = vadd(v1:0.b,v1:0.b):sat }
39 // Vd32.w
=vadd
(Vu32.w
,Vv32.w
,Qx4
):carry
40 V0.w
=vadd
(V0.w
,V0.w
,Q0
):carry
41 # CHECK: 1ca0e000 { v0.w = vadd(v0.w,v0.w,q0):carry }
44 // $Vd.h
=vadd
(vclb
($Vu.h
),$Vv.h
)
45 V0.h
=vadd
(vclb
(V0.h
),V0.h
)
46 # CHECK: 1f00e000 { v0.h = vadd(vclb(v0.h),v0.h) }
49 // $Vd.w
=vadd
(vclb
($Vu.w
),$Vv.w
)
50 V0.w
=vadd
(vclb
(V0.w
),V0.w
)
51 # CHECK: 1f00e020 { v0.w = vadd(vclb(v0.w),v0.w) }
54 // Vxx32.w+
=vadd
(Vu32.h
,Vv32.h
)
55 V1
:0.w+=vadd(V0.h,V0.h)
56 # CHECK: 1c20e040 { v1:0.w += vadd(v0.h,v0.h) }
59 // Vxx32.h+
=vadd
(Vu32.ub
,Vv32.ub
)
60 V1
:0.h+=vadd(V0.ub,V0.ub)
61 # CHECK: 1c40e0a0 { v1:0.h += vadd(v0.ub,v0.ub) }
64 // Vd32.ub
=vadd
(Vu32.ub
,Vv32.
b):sat
65 V0.ub
=vadd
(V0.ub
,V0.
b):sat
66 # CHECK: 1ea0c080 { v0.ub = vadd(v0.ub,v0.b):sat }
69 // Vxx32.w+
=vadd
(Vu32.uh
,Vv32.uh
)
70 V1
:0.w+=vadd(V0.uh,V0.uh)
71 # CHECK: 1c40e080 { v1:0.w += vadd(v0.uh,v0.uh) }
74 // Vd32.uw
=vadd
(Vu32.uw
,Vv32.uw
):sat
75 V0.uw
=vadd
(V0.uw
,V0.uw
):sat
76 # CHECK: 1f60c020 { v0.uw = vadd(v0.uw,v0.uw):sat }
79 // Vdd32.uw
=vadd
(Vuu32.uw
,Vvv32.uw
):sat
80 V1
:0.uw=vadd(V1:0.uw,V1:0.uw):sat
81 # CHECK: 1ea0c040 { v1:0.uw = vadd(v1:0.uw,v1:0.uw):sat }
84 // Vd32
=vand(!Qu4
,Rt32
)
86 # CHECK: 19a0c4a0 { v0 = vand(!q0,r0) }
89 // Vx32|
=vand(!Qu4
,Rt32
)
91 # CHECK: 1960e460 { v0 |= vand(!q0,r0) }
94 // Vd32
=vand(!Qv4
,Vu32
)
96 # CHECK: 1e03e020 { v0 = vand(!q0,v0) }
99 // Vd32
=vand(Qv4
,Vu32
)
101 # CHECK: 1e03e000 { v0 = vand(q0,v0) }
104 // Vd32.
b=vasr
(Vu32.h
,Vv32.h
,Rt8
):sat
105 V0.
b=vasr
(V0.h
,V0.h
,R0):sat
106 # CHECK: 1800c000 { v0.b = vasr(v0.h,v0.h,r0):sat }
109 // Vd32.uh
=vasr
(Vu32.uw
,Vv32.uw
,Rt8
):rnd
:sat
110 V0.uh
=vasr
(V0.uw
,V0.uw
,R0):rnd
:sat
111 # CHECK: 1800c020 { v0.uh = vasr(v0.uw,v0.uw,r0):rnd:sat }
114 // Vd32.uh
=vasr
(Vu32.w
,Vv32.w
,Rt8
):rnd
:sat
115 V0.uh
=vasr
(V0.w
,V0.w
,R0):rnd
:sat
116 # CHECK: 1800c040 { v0.uh = vasr(v0.w,v0.w,r0):rnd:sat }
118 // V6_vL32b_cur_npred_ai
119 // if
(!Pv4
) Vd32.cur
=vmem
(Rt32+
#s4)
122 if
(!P0
) V0.cur
=vmem
(R0+
#04)
124 # CHECK: 1e0360e1 { v1 = v0
125 # CHECK: 2880c4a0 if (!p0) v0.cur = vmem(r0+#4) }
127 // V6_vL32b_cur_npred_pi
128 // if
(!Pv4
) Vd32.cur
=vmem
(Rx32+
+#s3)
131 if
(!P0
) V0.cur
=vmem
(R0+
+#03)
133 # CHECK: 1e0360e1 { v1 = v0
134 # CHECK: 2980c3a0 if (!p0) v0.cur = vmem(r0++#3) }
136 // V6_vL32b_cur_npred_ppu
137 // if
(!Pv4
) Vd32.cur
=vmem
(Rx32+
+Mu2
)
140 if
(!P0
) V0.cur
=vmem
(R0+
+M0
)
142 # CHECK: 1e0360e1 { v1 = v0
143 # CHECK: 2b80c0a0 if (!p0) v0.cur = vmem(r0++m0) }
145 // V6_vL32b_cur_pred_ai
146 // if
(Pv4
) Vd32.cur
=vmem
(Rt32+
#s4)
149 if
(P0
) V0.cur
=vmem
(R0+
#04)
151 # CHECK: 1e0360e1 { v1 = v0
152 # CHECK: 2880c480 if (p0) v0.cur = vmem(r0+#4) }
154 // V6_vL32b_cur_pred_pi
155 // if
(Pv4
) Vd32.cur
=vmem
(Rx32+
+#s3)
158 if
(P0
) V0.cur
=vmem
(R0+
+#03)
160 # CHECK: 1e0360e1 { v1 = v0
161 # CHECK: 2980c380 if (p0) v0.cur = vmem(r0++#3) }
163 // V6_vL32b_cur_pred_ppu
164 // if
(Pv4
) Vd32.cur
=vmem
(Rx32+
+Mu2
)
167 if
(P0
) V0.cur
=vmem
(R0+
+M0
)
169 # CHECK: 1e0360e1 { v1 = v0
170 # CHECK: 2b80c080 if (p0) v0.cur = vmem(r0++m0) }
173 // if
(!Pv4
) Vd32
=vmem
(Rt32+
#s4)
174 if
(!P0
) V0
=vmem
(R0+
#04)
175 # CHECK: 2880c460 { if (!p0) v0 = vmem(r0+#4) }
178 // if
(!Pv4
) Vd32
=vmem
(Rx32+
+#s3)
179 if
(!P0
) V0
=vmem
(R0+
+#03)
180 # CHECK: 2980c360 { if (!p0) v0 = vmem(r0++#3) }
182 // V6_vL32b_npred_ppu
183 // if
(!Pv4
) Vd32
=vmem
(Rx32+
+Mu2
)
184 if
(!P0
) V0
=vmem
(R0+
+M0
)
185 # CHECK: 2b80c060 { if (!p0) v0 = vmem(r0++m0) }
187 // V6_vL32b_nt_cur_npred_ai
188 // if
(!Pv4
) Vd32.cur
=vmem
(Rt32+
#s4):nt
191 if
(!P0
) V0.cur
=vmem
(R0+
#04):nt
193 # CHECK: 1e0360e1 { v1 = v0
194 # CHECK: 28c0c4a0 if (!p0) v0.cur = vmem(r0+#4):nt }
196 // V6_vL32b_nt_cur_npred_pi
197 // if
(!Pv4
) Vd32.cur
=vmem
(Rx32+
+#s3):nt
200 if
(!P0
) V0.cur
=vmem
(R0+
+#03):nt
202 # CHECK: 1e0360e1 { v1 = v0
203 # CHECK: 29c0c3a0 if (!p0) v0.cur = vmem(r0++#3):nt }
205 // V6_vL32b_nt_cur_npred_ppu
206 // if
(!Pv4
) Vd32.cur
=vmem
(Rx32+
+Mu2
):nt
209 if
(!P0
) V0.cur
=vmem
(R0+
+M0
):nt
211 # CHECK: 1e0360e1 { v1 = v0
212 # CHECK: 2bc0c0a0 if (!p0) v0.cur = vmem(r0++m0):nt }
214 // V6_vL32b_nt_cur_pred_ai
215 // if
(Pv4
) Vd32.cur
=vmem
(Rt32+
#s4):nt
218 if
(P0
) V0.cur
=vmem
(R0+
#04):nt
220 # CHECK: 1e0360e1 { v1 = v0
221 # CHECK: 28c0c480 if (p0) v0.cur = vmem(r0+#4):nt }
223 // V6_vL32b_nt_cur_pred_pi
224 // if
(Pv4
) Vd32.cur
=vmem
(Rx32+
+#s3):nt
227 if
(P0
) V0.cur
=vmem
(R0+
+#03):nt
229 # CHECK: 1e0360e1 { v1 = v0
230 # CHECK: 29c0c380 if (p0) v0.cur = vmem(r0++#3):nt }
232 // V6_vL32b_nt_cur_pred_ppu
233 // if
(Pv4
) Vd32.cur
=vmem
(Rx32+
+Mu2
):nt
236 if
(P0
) V0.cur
=vmem
(R0+
+M0
):nt
238 # CHECK: 1e0360e1 { v1 = v0
239 # CHECK: 2bc0c080 if (p0) v0.cur = vmem(r0++m0):nt }
241 // V6_vL32b_nt_npred_ai
242 // if
(!Pv4
) Vd32
=vmem
(Rt32+
#s4):nt
243 if
(!P0
) V0
=vmem
(R0+
#04):nt
244 # CHECK: 28c0c460 { if (!p0) v0 = vmem(r0+#4):nt }
246 // V6_vL32b_nt_npred_pi
247 // if
(!Pv4
) Vd32
=vmem
(Rx32+
+#s3):nt
248 if
(!P0
) V0
=vmem
(R0+
+#03):nt
249 # CHECK: 29c0c360 { if (!p0) v0 = vmem(r0++#3):nt }
251 // V6_vL32b_nt_npred_ppu
252 // if
(!Pv4
) Vd32
=vmem
(Rx32+
+Mu2
):nt
253 if
(!P0
) V0
=vmem
(R0+
+M0
):nt
254 # CHECK: 2bc0c060 { if (!p0) v0 = vmem(r0++m0):nt }
256 // V6_vL32b_nt_pred_ai
257 // if
(Pv4
) Vd32
=vmem
(Rt32+
#s4):nt
258 if
(P0
) V0
=vmem
(R0+
#04):nt
259 # CHECK: 28c0c440 { if (p0) v0 = vmem(r0+#4):nt }
261 // V6_vL32b_nt_pred_pi
262 // if
(Pv4
) Vd32
=vmem
(Rx32+
+#s3):nt
263 if
(P0
) V0
=vmem
(R0+
+#03):nt
264 # CHECK: 29c0c340 { if (p0) v0 = vmem(r0++#3):nt }
266 // V6_vL32b_nt_pred_ppu
267 // if
(Pv4
) Vd32
=vmem
(Rx32+
+Mu2
):nt
268 if
(P0
) V0
=vmem
(R0+
+M0
):nt
269 # CHECK: 2bc0c040 { if (p0) v0 = vmem(r0++m0):nt }
271 // V6_vL32b_nt_tmp_npred_ai
272 // if
(!Pv4
) Vd32.tmp
=vmem
(Rt32+
#s4):nt
275 if
(!P0
) V0.tmp
=vmem
(R0+
#04):nt
277 # CHECK: 1e0360e1 { v1 = v0
278 # CHECK: 28c0c4e0 if (!p0) v0.tmp = vmem(r0+#4):nt }
280 // V6_vL32b_nt_tmp_npred_pi
281 // if
(!Pv4
) Vd32.tmp
=vmem
(Rx32+
+#s3):nt
284 if
(!P0
) V0.tmp
=vmem
(R0+
+#03):nt
286 # CHECK: 1e0360e1 { v1 = v0
287 # CHECK: 29c0c3e0 if (!p0) v0.tmp = vmem(r0++#3):nt }
289 // V6_vL32b_nt_tmp_npred_ppu
290 // if
(!Pv4
) Vd32.tmp
=vmem
(Rx32+
+Mu2
):nt
293 if
(!P0
) V0.tmp
=vmem
(R0+
+M0
):nt
295 # CHECK: 1e0360e1 { v1 = v0
296 # CHECK: 2bc0c0e0 if (!p0) v0.tmp = vmem(r0++m0):nt }
298 // V6_vL32b_nt_tmp_pred_ai
299 // if
(Pv4
) Vd32.tmp
=vmem
(Rt32+
#s4):nt
302 if
(P0
) V0.tmp
=vmem
(R0+
#04):nt
304 # CHECK: 1e0360e1 { v1 = v0
305 # CHECK: 28c0c4c0 if (p0) v0.tmp = vmem(r0+#4):nt }
307 // V6_vL32b_nt_tmp_pred_pi
308 // if
(Pv4
) Vd32.tmp
=vmem
(Rx32+
+#s3):nt
311 if
(P0
) V0.tmp
=vmem
(R0+
+#03):nt
313 # CHECK: 1e0360e1 { v1 = v0
314 # CHECK: 29c0c3c0 if (p0) v0.tmp = vmem(r0++#3):nt }
316 // V6_vL32b_nt_tmp_pred_ppu
317 // if
(Pv4
) Vd32.tmp
=vmem
(Rx32+
+Mu2
):nt
320 if
(P0
) V0.tmp
=vmem
(R0+
+M0
):nt
322 # CHECK: 1e0360e1 { v1 = v0
323 # CHECK: 2bc0c0c0 if (p0) v0.tmp = vmem(r0++m0):nt }
326 // if
(Pv4
) Vd32
=vmem
(Rt32+
#s4)
327 if
(P0
) V0
=vmem
(R0+
#04)
328 # CHECK: 2880c440 { if (p0) v0 = vmem(r0+#4) }
331 // if
(Pv4
) Vd32
=vmem
(Rx32+
+#s3)
332 if
(P0
) V0
=vmem
(R0+
+#03)
333 # CHECK: 2980c340 { if (p0) v0 = vmem(r0++#3) }
336 // if
(Pv4
) Vd32
=vmem
(Rx32+
+Mu2
)
337 if
(P0
) V0
=vmem
(R0+
+M0
)
338 # CHECK: 2b80c040 { if (p0) v0 = vmem(r0++m0) }
340 // V6_vL32b_tmp_npred_ai
341 // if
(!Pv4
) Vd32.tmp
=vmem
(Rt32+
#s4)
344 if
(!P0
) V0.tmp
=vmem
(R0+
#04)
346 # CHECK: 1e0360e1 { v1 = v0
347 # CHECK: 2880c4e0 if (!p0) v0.tmp = vmem(r0+#4) }
349 // V6_vL32b_tmp_npred_pi
350 // if
(!Pv4
) Vd32.tmp
=vmem
(Rx32+
+#s3)
353 if
(!P0
) V0.tmp
=vmem
(R0+
+#03)
355 # CHECK: 1e0360e1 { v1 = v0
356 # CHECK: 2980c3e0 if (!p0) v0.tmp = vmem(r0++#3) }
358 // V6_vL32b_tmp_npred_ppu
359 // if
(!Pv4
) Vd32.tmp
=vmem
(Rx32+
+Mu2
)
362 if
(!P0
) V0.tmp
=vmem
(R0+
+M0
)
364 # CHECK: 1e0360e1 { v1 = v0
365 # CHECK: 2b80c0e0 if (!p0) v0.tmp = vmem(r0++m0) }
367 // V6_vL32b_tmp_pred_ai
368 // if
(Pv4
) Vd32.tmp
=vmem
(Rt32+
#s4)
371 if
(P0
) V0.tmp
=vmem
(R0+
#04)
373 # CHECK: 1e0360e1 { v1 = v0
374 # CHECK: 2880c4c0 if (p0) v0.tmp = vmem(r0+#4) }
376 // V6_vL32b_tmp_pred_pi
377 // if
(Pv4
) Vd32.tmp
=vmem
(Rx32+
+#s3)
380 if
(P0
) V0.tmp
=vmem
(R0+
+#03)
382 # CHECK: 1e0360e1 { v1 = v0
383 # CHECK: 2980c3c0 if (p0) v0.tmp = vmem(r0++#3) }
385 // V6_vL32b_tmp_pred_ppu
386 // if
(Pv4
) Vd32.tmp
=vmem
(Rx32+
+Mu2
)
389 if
(P0
) V0.tmp
=vmem
(R0+
+M0
)
391 # CHECK: 1e0360e1 { v1 = v0
392 # CHECK: 2b80c0c0 if (p0) v0.tmp = vmem(r0++m0) }
395 // Vd32.ub
=vlsr
(Vu32.ub
,Rt32
)
397 # CHECK: 1980c060 { v0.ub = vlsr(v0.ub,r0) }
400 // Vd32.
b=vlut32
(Vu32.
b,Vv32.
b,#u3)
401 V0.
b=vlut32
(V0.
b,V0.
b,#03)
402 # CHECK: 1e20c060 { v0.b = vlut32(v0.b,v0.b,#3) }
405 // Vd32.
b=vlut32
(Vu32.
b,Vv32.
b,Rt8
):nomatch
406 V0.
b=vlut32
(V0.
b,V0.
b,R0):nomatch
407 # CHECK: 1800c060 { v0.b = vlut32(v0.b,v0.b,r0):nomatch }
410 // Vx32.
b|
=vlut32
(Vu32.
b,Vv32.
b,#u3)
411 V0.
b|
=vlut32
(V0.
b,V0.
b,#03)
412 # CHECK: 1cc0e060 { v0.b |= vlut32(v0.b,v0.b,#3) }
415 // Vdd32.h
=vlut16
(Vu32.
b,Vv32.h
,#u3)
416 V1
:0.h=vlut16(V0.b,V0.h,#03)
417 # CHECK: 1e60c060 { v1:0.h = vlut16(v0.b,v0.h,#3) }
420 // Vdd32.h
=vlut16
(Vu32.
b,Vv32.h
,Rt8
):nomatch
421 V1
:0.h=vlut16(V0.b,V0.h,R0):nomatch
422 # CHECK: 1800c080 { v1:0.h = vlut16(v0.b,v0.h,r0):nomatch }
425 // Vxx32.h|
=vlut16
(Vu32.
b,Vv32.h
,#u3)
426 V1
:0.h|=vlut16(V0.b,V0.h,#03)
427 # CHECK: 1ce0e060 { v1:0.h |= vlut16(v0.b,v0.h,#3) }
430 // Vd32.
b=vmax
(Vu32.
b,Vv32.
b)
432 # CHECK: 1f20c0a0 { v0.b = vmax(v0.b,v0.b) }
435 // Vd32.
b=vmin
(Vu32.
b,Vv32.
b)
437 # CHECK: 1f20c080 { v0.b = vmin(v0.b,v0.b) }
440 // Vdd32.w
=vmpa
(Vuu32.uh
,Rt32.
b)
441 V1
:0.w=vmpa(V1:0.uh,R0.b)
442 # CHECK: 1980c0a0 { v1:0.w = vmpa(v1:0.uh,r0.b) }
445 // Vxx32.w+
=vmpa
(Vuu32.uh
,Rt32.
b)
446 V1
:0.w+=vmpa(V1:0.uh,R0.b)
447 # CHECK: 1980e040 { v1:0.w += vmpa(v1:0.uh,r0.b) }
450 // Vdd32
=vmpye
(Vu32.w
,Vv32.uh
)
451 V1
:0=vmpye
(V0.w
,V0.uh
)
452 # CHECK: 1ea0c0c0 { v1:0 = vmpye(v0.w,v0.uh) }
455 // Vd32.w
=vmpyi
(Vu32.w
,Rt32.ub
)
456 V0.w
=vmpyi
(V0.w
,R0.ub
)
457 # CHECK: 1980c0c0 { v0.w = vmpyi(v0.w,r0.ub) }
460 // Vx32.w+
=vmpyi
(Vu32.w
,Rt32.ub
)
461 V0.w+
=vmpyi
(V0.w
,R0.ub
)
462 # CHECK: 1980e020 { v0.w += vmpyi(v0.w,r0.ub) }
465 // Vxx32+
=vmpyo
(Vu32.w
,Vv32.h
)
466 V1
:0+=vmpyo
(V0.w
,V0.h
)
467 # CHECK: 1c20e060 { v1:0 += vmpyo(v0.w,v0.h) }
470 // Vd32.ub
=vround
(Vu32.uh
,Vv32.uh
):sat
471 V0.ub
=vround
(V0.uh
,V0.uh
):sat
472 # CHECK: 1fe0c060 { v0.ub = vround(v0.uh,v0.uh):sat }
475 // Vd32.uh
=vround
(Vu32.uw
,Vv32.uw
):sat
476 V0.uh
=vround
(V0.uw
,V0.uw
):sat
477 # CHECK: 1fe0c080 { v0.uh = vround(v0.uw,v0.uw):sat }
480 // Vd32.uh
=vsat
(Vu32.uw
,Vv32.uw
)
481 V0.uh
=vsat
(V0.uw
,V0.uw
)
482 # CHECK: 1f20c0c0 { v0.uh = vsat(v0.uw,v0.uw) }
485 // Vd32.
b=vsub
(Vu32.
b,Vv32.
b):sat
486 V0.
b=vsub
(V0.
b,V0.
b):sat
487 # CHECK: 1f20c040 { v0.b = vsub(v0.b,v0.b):sat }
490 // Vdd32.
b=vsub
(Vuu32.
b,Vvv32.
b):sat
491 V1
:0.b=vsub(V1:0.b,V1:0.b):sat
492 # CHECK: 1ea0c020 { v1:0.b = vsub(v1:0.b,v1:0.b):sat }
495 // Vd32.w
=vsub
(Vu32.w
,Vv32.w
,Qx4
):carry
496 V0.w
=vsub
(V0.w
,V0.w
,Q0
):carry
497 # CHECK: 1ca0e080 { v0.w = vsub(v0.w,v0.w,q0):carry }
500 // Vd32.ub
=vsub
(Vu32.ub
,Vv32.
b):sat
501 V0.ub
=vsub
(V0.ub
,V0.
b):sat
502 # CHECK: 1ea0c0a0 { v0.ub = vsub(v0.ub,v0.b):sat }
505 // Vd32.uw
=vsub
(Vu32.uw
,Vv32.uw
):sat
506 V0.uw
=vsub
(V0.uw
,V0.uw
):sat
507 # CHECK: 1fc0c080 { v0.uw = vsub(v0.uw,v0.uw):sat }
510 // Vdd32.uw
=vsub
(Vuu32.uw
,Vvv32.uw
):sat
511 V1
:0.uw=vsub(V1:0.uw,V1:0.uw):sat
512 # CHECK: 1ea0c060 { v1:0.uw = vsub(v1:0.uw,v1:0.uw):sat }
517 # CHECK: 1e00e480 { vwhist128 }
522 # CHECK: 1e00e780 { vwhist128(#1) }
527 # CHECK: 1e02e480 { vwhist128(q0) }
530 // vwhist128
(Qv4
,#u1)
532 # CHECK: 1e02e780 { vwhist128(q0,#1) }
537 # CHECK: 1e00e280 { vwhist256 }
542 # CHECK: 1e02e280 { vwhist256(q0) }
545 // vwhist256
(Qv4
):sat
547 # CHECK: 1e02e380 { vwhist256(q0):sat }
552 # CHECK: 1e00e380 { vwhist256:sat }