feat(asm): encode the riscv64 vector arithmetic families
Assisted-by: GLM 5.3 Flash
This commit is contained in:
1 parent
5de9e985f8
commit
778c297214
3 files changed
+1812
-102
No files matched your search
@@ -0,0 +1,812 @@
|
||||
// Copyright (c) 2026 Petr Balvín <opensource@petrbalvin.org> (https://petrbalvin.org)
|
||||
// SPDX-License-Identifier: BSD-3-Clause
|
||||
|
||||
package asm
|
||||
|
||||
import (
|
||||
"os"
|
||||
"path/filepath"
|
||||
"testing"
|
||||
)
|
||||
|
||||
// TestRISCVVecArith_Differential proves the vector arithmetic families
|
||||
// against the toolchain: sections 31.11 through 31.16 of the "V"
|
||||
// specification's arithmetic, reductions, mask, slide, gather, compress and
|
||||
// whole-register-move material plus the Zvbb bit-manipulation and Zvbc
|
||||
// carryless-multiplication extensions, in the toolchain's own testdata
|
||||
// wording with every masked and unmasked form, assembled by gasm and by
|
||||
// go tool asm must agree word for word.
|
||||
func TestRISCVVecArith_Differential(t *testing.T) {
|
||||
src := `#include "textflag.h"
|
||||
|
||||
TEXT ·vecarith(SB), NOSPLIT, $0
|
||||
// 31.11.1: Vector Single-Width Integer Add and Subtract
|
||||
VADDVV V1, V2, V3 // d7812002
|
||||
VADDVV V1, V2, V0, V3 // d7812000
|
||||
VADDVX X10, V2, V3 // d7412502
|
||||
VADDVX X10, V2, V0, V3 // d7412500
|
||||
VADDVI $15, V2, V3 // d7b12702
|
||||
VADDVI $15, V2, V0, V3 // d7b12700
|
||||
VADDVI $-16, V2, V3 // d7312802
|
||||
VADDVI $-16, V2, V0, V3 // d7312800
|
||||
VSUBVV V1, V2, V3 // d781200a
|
||||
VSUBVV V1, V2, V0, V3 // d7812008
|
||||
VSUBVX X10, V2, V3 // d741250a
|
||||
VSUBVX X10, V2, V0, V3 // d7412508
|
||||
VRSUBVX X10, V2, V3 // d741250e
|
||||
VRSUBVX X10, V2, V0, V3 // d741250c
|
||||
VRSUBVI $15, V2, V0, V3 // d7b1270c
|
||||
VRSUBVI $-16, V2, V0, V3 // d731280c
|
||||
VNEGV V2, V3 // d741200e
|
||||
VNEGV V2, V0, V3 // d741200c
|
||||
|
||||
// 31.11.2: Vector Widening Integer Add/Subtract
|
||||
VWADDUVV V1, V2, V3 // d7a120c2
|
||||
VWADDUVV V1, V2, V0, V3 // d7a120c0
|
||||
VWADDUVX X10, V2, V3 // d76125c2
|
||||
VWADDUVX X10, V2, V0, V3 // d76125c0
|
||||
VWSUBUVV V1, V2, V3 // d7a120ca
|
||||
VWSUBUVV V1, V2, V0, V3 // d7a120c8
|
||||
VWSUBUVX X10, V2, V3 // d76125ca
|
||||
VWSUBUVX X10, V2, V0, V3 // d76125c8
|
||||
VWADDVV V1, V2, V3 // d7a120c6
|
||||
VWADDVV V1, V2, V0, V3 // d7a120c4
|
||||
VWADDVX X10, V2, V3 // d76125c6
|
||||
VWADDVX X10, V2, V0, V3 // d76125c4
|
||||
VWSUBVV V1, V2, V3 // d7a120ce
|
||||
VWSUBVV V1, V2, V0, V3 // d7a120cc
|
||||
VWSUBVX X10, V2, V3 // d76125ce
|
||||
VWSUBVX X10, V2, V0, V3 // d76125cc
|
||||
VWADDUWV V1, V2, V3 // d7a120d2
|
||||
VWADDUWV V1, V2, V0, V3 // d7a120d0
|
||||
VWADDUWX X10, V2, V3 // d76125d2
|
||||
VWADDUWX X10, V2, V0, V3 // d76125d0
|
||||
VWSUBUWV V1, V2, V3 // d7a120da
|
||||
VWSUBUWV V1, V2, V0, V3 // d7a120d8
|
||||
VWSUBUWX X10, V2, V3 // d76125da
|
||||
VWSUBUWX X10, V2, V0, V3 // d76125d8
|
||||
VWADDWV V1, V2, V3 // d7a120d6
|
||||
VWADDWV V1, V2, V0, V3 // d7a120d4
|
||||
VWADDWX X10, V2, V3 // d76125d6
|
||||
VWADDWX X10, V2, V0, V3 // d76125d4
|
||||
VWSUBWV V1, V2, V3 // d7a120de
|
||||
VWSUBWV V1, V2, V0, V3 // d7a120dc
|
||||
VWSUBWX X10, V2, V3 // d76125de
|
||||
VWSUBWX X10, V2, V0, V3 // d76125dc
|
||||
VWCVTXXV V2, V3 // d76120c6
|
||||
VWCVTXXV V2, V0, V3 // d76120c4
|
||||
VWCVTUXXV V2, V3 // d76120c2
|
||||
VWCVTUXXV V2, V0, V3 // d76120c0
|
||||
|
||||
// 31.11.3: Vector Integer Extension
|
||||
VZEXTVF2 V2, V3 // d721234a
|
||||
VZEXTVF2 V2, V0, V3 // d7212348
|
||||
VSEXTVF2 V2, V3 // d7a1234a
|
||||
VSEXTVF2 V2, V0, V3 // d7a12348
|
||||
VZEXTVF4 V2, V3 // d721224a
|
||||
VZEXTVF4 V2, V0, V3 // d7212248
|
||||
VSEXTVF4 V2, V3 // d7a1224a
|
||||
VSEXTVF4 V2, V0, V3 // d7a12248
|
||||
VZEXTVF8 V2, V3 // d721214a
|
||||
VZEXTVF8 V2, V0, V3 // d7212148
|
||||
VSEXTVF8 V2, V3 // d7a1214a
|
||||
VSEXTVF8 V2, V0, V3 // d7a12148
|
||||
|
||||
// 31.11.4: Vector Integer Add-with-Carry / Subtract-with-Borrow Instructions
|
||||
VADCVVM V1, V2, V0, V3 // d7812040
|
||||
VADCVXM X11, V2, V0, V3 // d7c12540
|
||||
VADCVIM $15, V2, V0, V3 // d7b12740
|
||||
VMADCVVM V1, V2, V0, V3 // d7812044
|
||||
VMADCVVM V1, V2, V0, V0 // 57802044
|
||||
VMADCVXM X11, V2, V0, V3 // d7c12544
|
||||
VMADCVXM X11, V2, V0, V0 // 57c02544
|
||||
VMADCVIM $15, V2, V0, V3 // d7b12744
|
||||
VMADCVIM $15, V2, V0, V0 // 57b02744
|
||||
VMADCVV V1, V2, V3 // d7812046
|
||||
VMADCVV V1, V2, V0 // 57802046
|
||||
VMADCVX X11, V2, V3 // d7c12546
|
||||
VMADCVX X11, V2, V0 // 57c02546
|
||||
VMADCVI $15, V2, V3 // d7b12746
|
||||
VMADCVI $15, V2, V0 // 57b02746
|
||||
VSBCVVM V1, V2, V0, V3 // d7812048
|
||||
VSBCVXM X11, V2, V0, V3 // d7c12548
|
||||
VMSBCVVM V1, V2, V0, V3 // d781204c
|
||||
VMSBCVVM V1, V2, V0, V0 // 5780204c
|
||||
VMSBCVXM X11, V2, V0, V3 // d7c1254c
|
||||
VMSBCVXM X11, V2, V0, V0 // 57c0254c
|
||||
VMSBCVV V1, V2, V3 // d781204e
|
||||
VMSBCVV V1, V2, V0 // 5780204e
|
||||
VMSBCVX X11, V2, V3 // d7c1254e
|
||||
VMSBCVX X11, V2, V0 // 57c0254e
|
||||
|
||||
// 31.11.5: Vector Bitwise Logical Instructions
|
||||
VANDVV V1, V2, V3 // d7812026
|
||||
VANDVV V1, V2, V0, V3 // d7812024
|
||||
VANDVX X11, V2, V3 // d7c12526
|
||||
VANDVX X11, V2, V0, V3 // d7c12524
|
||||
VANDVI $15, V2, V3 // d7b12726
|
||||
VANDVI $15, V2, V0, V3 // d7b12724
|
||||
VORVV V1, V2, V3 // d781202a
|
||||
VORVV V1, V2, V0, V3 // d7812028
|
||||
VORVX X11, V2, V3 // d7c1252a
|
||||
VORVX X11, V2, V0, V3 // d7c12528
|
||||
VORVI $15, V2, V3 // d7b1272a
|
||||
VORVI $15, V2, V0, V3 // d7b12728
|
||||
VXORVV V1, V2, V3 // d781202e
|
||||
VXORVV V1, V2, V0, V3 // d781202c
|
||||
VXORVX X11, V2, V3 // d7c1252e
|
||||
VXORVX X11, V2, V0, V3 // d7c1252c
|
||||
VXORVI $15, V2, V3 // d7b1272e
|
||||
VXORVI $15, V2, V0, V3 // d7b1272c
|
||||
VNOTV V2, V3 // d7b12f2e
|
||||
VNOTV V2, V0, V3 // d7b12f2c
|
||||
|
||||
// 31.11.6: Vector Single-Width Shift Instructions
|
||||
VSLLVV V1, V2, V3 // d7812096
|
||||
VSLLVV V1, V2, V0, V3 // d7812094
|
||||
VSLLVX X11, V2, V3 // d7c12596
|
||||
VSLLVX X11, V2, V0, V3 // d7c12594
|
||||
VSLLVI $15, V2, V3 // d7b12796
|
||||
VSLLVI $15, V2, V0, V3 // d7b12794
|
||||
VSRLVV V1, V2, V3 // d78120a2
|
||||
VSRLVV V1, V2, V0, V3 // d78120a0
|
||||
VSRLVX X11, V2, V3 // d7c125a2
|
||||
VSRLVX X11, V2, V0, V3 // d7c125a0
|
||||
VSRLVI $15, V2, V3 // d7b127a2
|
||||
VSRLVI $15, V2, V0, V3 // d7b127a0
|
||||
VSRAVV V1, V2, V3 // d78120a6
|
||||
VSRAVV V1, V2, V0, V3 // d78120a4
|
||||
VSRAVX X11, V2, V3 // d7c125a6
|
||||
VSRAVX X11, V2, V0, V3 // d7c125a4
|
||||
VSRAVI $15, V2, V3 // d7b127a6
|
||||
VSRAVI $15, V2, V0, V3 // d7b127a4
|
||||
|
||||
// 31.11.7: Vector Narrowing Integer Right Shift Instructions
|
||||
VNSRLWV V1, V2, V3 // d78120b2
|
||||
VNSRLWV V1, V2, V0, V3 // d78120b0
|
||||
VNSRLWX X10, V2, V3 // d74125b2
|
||||
VNSRLWX X10, V2, V0, V3 // d74125b0
|
||||
VNSRLWI $31, V2, V3 // d7b12fb2
|
||||
VNSRLWI $31, V2, V0, V3 // d7b12fb0
|
||||
VNSRAWV V1, V2, V3 // d78120b6
|
||||
VNSRAWV V1, V2, V0, V3 // d78120b4
|
||||
VNSRAWX X10, V2, V3 // d74125b6
|
||||
VNSRAWX X10, V2, V0, V3 // d74125b4
|
||||
VNSRAWI $31, V2, V3 // d7b12fb6
|
||||
VNSRAWI $31, V2, V0, V3 // d7b12fb4
|
||||
VNCVTXXW V2, V3 // d74120b2
|
||||
VNCVTXXW V2, V0, V3 // d74120b0
|
||||
|
||||
// 31.11.8: Vector Integer Compare Instructions
|
||||
VMSEQVV V1, V2, V3 // d7812062
|
||||
VMSEQVV V1, V2, V0, V3 // d7812060
|
||||
VMSEQVX X10, V2, V3 // d7412562
|
||||
VMSEQVX X10, V2, V0, V3 // d7412560
|
||||
VMSEQVI $15, V2, V3 // d7b12762
|
||||
VMSEQVI $15, V2, V0, V3 // d7b12760
|
||||
VMSNEVV V1, V2, V3 // d7812066
|
||||
VMSNEVV V1, V2, V0, V3 // d7812064
|
||||
VMSNEVX X10, V2, V3 // d7412566
|
||||
VMSNEVX X10, V2, V0, V3 // d7412564
|
||||
VMSNEVI $15, V2, V3 // d7b12766
|
||||
VMSNEVI $15, V2, V0, V3 // d7b12764
|
||||
VMSLTUVV V1, V2, V3 // d781206a
|
||||
VMSLTUVV V1, V2, V0, V3 // d7812068
|
||||
VMSLTUVX X10, V2, V3 // d741256a
|
||||
VMSLTUVX X10, V2, V0, V3 // d7412568
|
||||
VMSLTVV V1, V2, V3 // d781206e
|
||||
VMSLTVV V1, V2, V0, V3 // d781206c
|
||||
VMSLTVX X10, V2, V3 // d741256e
|
||||
VMSLTVX X10, V2, V0, V3 // d741256c
|
||||
VMSLEUVV V1, V2, V3 // d7812072
|
||||
VMSLEUVV V1, V2, V0, V3 // d7812070
|
||||
VMSLEUVX X10, V2, V3 // d7412572
|
||||
VMSLEUVX X10, V2, V0, V3 // d7412570
|
||||
VMSLEUVI $15, V2, V3 // d7b12772
|
||||
VMSLEUVI $15, V2, V0, V3 // d7b12770
|
||||
VMSLEVV V1, V2, V3 // d7812076
|
||||
VMSLEVV V1, V2, V0, V3 // d7812074
|
||||
VMSLEVX X10, V2, V3 // d7412576
|
||||
VMSLEVX X10, V2, V0, V3 // d7412574
|
||||
VMSLEVI $15, V2, V3 // d7b12776
|
||||
VMSLEVI $15, V2, V0, V3 // d7b12774
|
||||
VMSGTUVX X10, V2, V3 // d741257a
|
||||
VMSGTUVX X10, V2, V0, V3 // d7412578
|
||||
VMSGTUVI $15, V2, V3 // d7b1277a
|
||||
VMSGTUVI $15, V2, V0, V3 // d7b12778
|
||||
VMSGTVX X10, V2, V3 // d741257e
|
||||
VMSGTVX X10, V2, V0, V3 // d741257c
|
||||
VMSGTVI $15, V2, V3 // d7b1277e
|
||||
VMSGTVI $15, V2, V0, V3 // d7b1277c
|
||||
VMSGTVV V1, V2, V3 // d701116e
|
||||
VMSGTVV V1, V2, V0, V3 // d701116c
|
||||
VMSGTUVV V1, V2, V3 // d701116a
|
||||
VMSGTUVV V1, V2, V0, V3 // d7011168
|
||||
VMSGEVV V1, V2, V3 // d7011176
|
||||
VMSGEVV V1, V2, V0, V3 // d7011174
|
||||
VMSGEUVV V1, V2, V3 // d7011172
|
||||
VMSGEUVV V1, V2, V0, V3 // d7011170
|
||||
VMSLTVI $15, V2, V3 // d7312776
|
||||
VMSLTVI $15, V2, V0, V3 // d7312774
|
||||
VMSLTUVI $15, V2, V3 // d7312772
|
||||
VMSLTUVI $15, V2, V0, V3 // d7312770
|
||||
VMSGEVI $15, V2, V3 // d731277e
|
||||
VMSGEVI $15, V2, V0, V3 // d731277c
|
||||
VMSGEUVI $15, V2, V3 // d731277a
|
||||
VMSGEUVI $15, V2, V0, V3 // d7312778
|
||||
|
||||
// 31.11.9: Vector Integer Min/Max Instructions
|
||||
VMINUVV V1, V2, V3 // d7812012
|
||||
VMINUVV V1, V2, V0, V3 // d7812010
|
||||
VMINUVX X10, V2, V3 // d7412512
|
||||
VMINUVX X10, V2, V0, V3 // d7412510
|
||||
VMINVV V1, V2, V3 // d7812016
|
||||
VMINVV V1, V2, V0, V3 // d7812014
|
||||
VMINVX X10, V2, V3 // d7412516
|
||||
VMINVX X10, V2, V0, V3 // d7412514
|
||||
VMAXUVV V1, V2, V3 // d781201a
|
||||
VMAXUVV V1, V2, V0, V3 // d7812018
|
||||
VMAXUVX X10, V2, V3 // d741251a
|
||||
VMAXUVX X10, V2, V0, V3 // d7412518
|
||||
VMAXVV V1, V2, V3 // d781201e
|
||||
VMAXVV V1, V2, V0, V3 // d781201c
|
||||
VMAXVX X10, V2, V3 // d741251e
|
||||
VMAXVX X10, V2, V0, V3 // d741251c
|
||||
|
||||
// 31.11.10: Vector Single-Width Integer Multiply Instructions
|
||||
VMULVV V1, V2, V3 // d7a12096
|
||||
VMULVV V1, V2, V0, V3 // d7a12094
|
||||
VMULVX X10, V2, V3 // d7612596
|
||||
VMULVX X10, V2, V0, V3 // d7612594
|
||||
VMULHVV V1, V2, V3 // d7a1209e
|
||||
VMULHVV V1, V2, V0, V3 // d7a1209c
|
||||
VMULHVX X10, V2, V3 // d761259e
|
||||
VMULHVX X10, V2, V0, V3 // d761259c
|
||||
VMULHUVV V1, V2, V3 // d7a12092
|
||||
VMULHUVV V1, V2, V0, V3 // d7a12090
|
||||
VMULHUVX X10, V2, V3 // d7612592
|
||||
VMULHUVX X10, V2, V0, V3 // d7612590
|
||||
VMULHSUVV V1, V2, V3 // d7a1209a
|
||||
VMULHSUVV V1, V2, V0, V3 // d7a12098
|
||||
VMULHSUVX X10, V2, V3 // d761259a
|
||||
VMULHSUVX X10, V2, V0, V3 // d7612598
|
||||
|
||||
// 31.11.11: Vector Integer Divide Instructions
|
||||
VDIVUVV V1, V2, V3 // d7a12082
|
||||
VDIVUVV V1, V2, V0, V3 // d7a12080
|
||||
VDIVUVX X10, V2, V3 // d7612582
|
||||
VDIVUVX X10, V2, V0, V3 // d7612580
|
||||
VDIVVV V1, V2, V3 // d7a12086
|
||||
VDIVVV V1, V2, V0, V3 // d7a12084
|
||||
VDIVVX X10, V2, V3 // d7612586
|
||||
VDIVVX X10, V2, V0, V3 // d7612584
|
||||
VREMUVV V1, V2, V3 // d7a1208a
|
||||
VREMUVV V1, V2, V0, V3 // d7a12088
|
||||
VREMUVX X10, V2, V3 // d761258a
|
||||
VREMUVX X10, V2, V0, V3 // d7612588
|
||||
VREMVV V1, V2, V3 // d7a1208e
|
||||
VREMVV V1, V2, V0, V3 // d7a1208c
|
||||
VREMVX X10, V2, V3 // d761258e
|
||||
VREMVX X10, V2, V0, V3 // d761258c
|
||||
|
||||
// 31.11.12: Vector Widening Integer Multiply Instructions
|
||||
VWMULVV V1, V2, V3 // d7a120ee
|
||||
VWMULVV V1, V2, V0, V3 // d7a120ec
|
||||
VWMULVX X10, V2, V3 // d76125ee
|
||||
VWMULVX X10, V2, V0, V3 // d76125ec
|
||||
VWMULUVV V1, V2, V3 // d7a120e2
|
||||
VWMULUVV V1, V2, V0, V3 // d7a120e0
|
||||
VWMULUVX X10, V2, V3 // d76125e2
|
||||
VWMULUVX X10, V2, V0, V3 // d76125e0
|
||||
VWMULSUVV V1, V2, V3 // d7a120ea
|
||||
VWMULSUVV V1, V2, V0, V3 // d7a120e8
|
||||
VWMULSUVX X10, V2, V3 // d76125ea
|
||||
VWMULSUVX X10, V2, V0, V3 // d76125e8
|
||||
|
||||
// 31.11.13: Vector Single-Width Integer Multiply-Add Instructions
|
||||
VMACCVV V2, V1, V3 // d7a120b6
|
||||
VMACCVV V2, V1, V0, V3 // d7a120b4
|
||||
VMACCVX V2, X10, V3 // d76125b6
|
||||
VMACCVX V2, X10, V0, V3 // d76125b4
|
||||
VNMSACVV V2, V1, V3 // d7a120be
|
||||
VNMSACVV V2, V1, V0, V3 // d7a120bc
|
||||
VNMSACVX V2, X10, V3 // d76125be
|
||||
VNMSACVX V2, X10, V0, V3 // d76125bc
|
||||
VMADDVV V2, V1, V3 // d7a120a6
|
||||
VMADDVV V2, V1, V0, V3 // d7a120a4
|
||||
VMADDVX V2, X10, V3 // d76125a6
|
||||
VMADDVX V2, X10, V0, V3 // d76125a4
|
||||
VNMSUBVV V2, V1, V3 // d7a120ae
|
||||
VNMSUBVV V2, V1, V0, V3 // d7a120ac
|
||||
VNMSUBVX V2, X10, V3 // d76125ae
|
||||
VNMSUBVX V2, X10, V0, V3 // d76125ac
|
||||
|
||||
// 31.11.14: Vector Widening Integer Multiply-Add Instructions
|
||||
VWMACCUVV V2, V1, V3 // d7a120f2
|
||||
VWMACCUVV V2, V1, V0, V3 // d7a120f0
|
||||
VWMACCUVX V2, X10, V3 // d76125f2
|
||||
VWMACCUVX V2, X10, V0, V3 // d76125f0
|
||||
VWMACCVV V2, V1, V3 // d7a120f6
|
||||
VWMACCVV V2, V1, V0, V3 // d7a120f4
|
||||
VWMACCVX V2, X10, V3 // d76125f6
|
||||
VWMACCVX V2, X10, V0, V3 // d76125f4
|
||||
VWMACCSUVV V2, V1, V3 // d7a120fe
|
||||
VWMACCSUVV V2, V1, V0, V3 // d7a120fc
|
||||
VWMACCSUVX V2, X10, V3 // d76125fe
|
||||
VWMACCSUVX V2, X10, V0, V3 // d76125fc
|
||||
VWMACCUSVX V2, X10, V3 // d76125fa
|
||||
VWMACCUSVX V2, X10, V0, V3 // d76125f8
|
||||
|
||||
// 31.11.15: Vector Integer Merge Instructions
|
||||
VMERGEVVM V1, V2, V0, V3 // d781205c
|
||||
VMERGEVXM X10, V2, V0, V3 // d741255c
|
||||
VMERGEVIM $15, V2, V0, V3 // d7b1275c
|
||||
|
||||
// 31.11.16: Vector Integer Move Instructions
|
||||
VMVVV V2, V3 // d701015e
|
||||
VMVVX X10, V3 // d741055e
|
||||
VMVVI $15, V3 // d7b1075e
|
||||
|
||||
// 31.12.1: Vector Single-Width Saturating Add and Subtract
|
||||
VSADDUVV V1, V2, V3 // d7812082
|
||||
VSADDUVV V1, V2, V0, V3 // d7812080
|
||||
VSADDUVX X10, V2, V3 // d7412582
|
||||
VSADDUVX X10, V2, V0, V3 // d7412580
|
||||
VSADDUVI $15, V2, V3 // d7b12782
|
||||
VSADDUVI $15, V2, V0, V3 // d7b12780
|
||||
VSADDVV V1, V2, V3 // d7812086
|
||||
VSADDVV V1, V2, V0, V3 // d7812084
|
||||
VSADDVX X10, V2, V3 // d7412586
|
||||
VSADDVX X10, V2, V0, V3 // d7412584
|
||||
VSADDVI $15, V2, V3 // d7b12786
|
||||
VSADDVI $15, V2, V0, V3 // d7b12784
|
||||
VSSUBUVV V1, V2, V3 // d781208a
|
||||
VSSUBUVV V1, V2, V0, V3 // d7812088
|
||||
VSSUBUVX X10, V2, V3 // d741258a
|
||||
VSSUBUVX X10, V2, V0, V3 // d7412588
|
||||
VSSUBVV V1, V2, V3 // d781208e
|
||||
VSSUBVV V1, V2, V0, V3 // d781208c
|
||||
VSSUBVX X10, V2, V3 // d741258e
|
||||
VSSUBVX X10, V2, V0, V3 // d741258c
|
||||
|
||||
// 31.12.2: Vector Single-Width Averaging Add and Subtract
|
||||
VAADDUVV V1, V2, V3 // d7a12022
|
||||
VAADDUVV V1, V2, V0, V3 // d7a12020
|
||||
VAADDUVX X10, V2, V3 // d7612522
|
||||
VAADDUVX X10, V2, V0, V3 // d7612520
|
||||
VAADDVV V1, V2, V3 // d7a12026
|
||||
VAADDVV V1, V2, V0, V3 // d7a12024
|
||||
VAADDVX X10, V2, V3 // d7612526
|
||||
VAADDVX X10, V2, V0, V3 // d7612524
|
||||
VASUBUVV V1, V2, V3 // d7a1202a
|
||||
VASUBUVV V1, V2, V0, V3 // d7a12028
|
||||
VASUBUVX X10, V2, V3 // d761252a
|
||||
VASUBUVX X10, V2, V0, V3 // d7612528
|
||||
VASUBVV V1, V2, V3 // d7a1202e
|
||||
VASUBVV V1, V2, V0, V3 // d7a1202c
|
||||
VASUBVX X10, V2, V3 // d761252e
|
||||
VASUBVX X10, V2, V0, V3 // d761252c
|
||||
|
||||
// 31.12.3: Vector Single-Width Fractional Multiply with Rounding and Saturation
|
||||
VSMULVV V1, V2, V3 // d781209e
|
||||
VSMULVV V1, V2, V0, V3 // d781209c
|
||||
VSMULVX X10, V2, V3 // d741259e
|
||||
VSMULVX X10, V2, V0, V3 // d741259c
|
||||
|
||||
// 31.12.4: Vector Single-Width Scaling Shift Instructions
|
||||
VSSRLVV V1, V2, V3 // d78120aa
|
||||
VSSRLVV V1, V2, V0, V3 // d78120a8
|
||||
VSSRLVX X10, V2, V3 // d74125aa
|
||||
VSSRLVX X10, V2, V0, V3 // d74125a8
|
||||
VSSRLVI $15, V2, V3 // d7b127aa
|
||||
VSSRLVI $15, V2, V0, V3 // d7b127a8
|
||||
VSSRAVV V1, V2, V3 // d78120ae
|
||||
VSSRAVV V1, V2, V0, V3 // d78120ac
|
||||
VSSRAVX X10, V2, V3 // d74125ae
|
||||
VSSRAVX X10, V2, V0, V3 // d74125ac
|
||||
VSSRAVI $16, V2, V3 // d73128ae
|
||||
VSSRAVI $16, V2, V0, V3 // d73128ac
|
||||
|
||||
// 31.12.5: Vector Narrowing Fixed-Point Clip Instructions
|
||||
VNCLIPUWV V1, V2, V3 // d78120ba
|
||||
VNCLIPUWV V1, V2, V0, V3 // d78120b8
|
||||
VNCLIPUWX X10, V2, V3 // d74125ba
|
||||
VNCLIPUWX X10, V2, V0, V3 // d74125b8
|
||||
VNCLIPUWI $16, V2, V3 // d73128ba
|
||||
VNCLIPUWI $16, V2, V0, V3 // d73128b8
|
||||
VNCLIPWV V1, V2, V3 // d78120be
|
||||
VNCLIPWV V1, V2, V0, V3 // d78120bc
|
||||
VNCLIPWX X10, V2, V3 // d74125be
|
||||
VNCLIPWX X10, V2, V0, V3 // d74125bc
|
||||
VNCLIPWI $16, V2, V3 // d73128be
|
||||
VNCLIPWI $16, V2, V0, V3 // d73128bc
|
||||
|
||||
// 31.13.2: Vector Single-Width Floating-Point Add/Subtract Instructions
|
||||
VFADDVV V1, V2, V3 // d7912002
|
||||
VFADDVV V1, V2, V0, V3 // d7912000
|
||||
VFADDVF F10, V2, V3 // d7512502
|
||||
VFADDVF F10, V2, V0, V3 // d7512500
|
||||
VFSUBVV V1, V2, V3 // d791200a
|
||||
VFSUBVV V1, V2, V0, V3 // d7912008
|
||||
VFSUBVF F10, V2, V3 // d751250a
|
||||
VFSUBVF F10, V2, V0, V3 // d7512508
|
||||
VFRSUBVF F10, V2, V3 // d751259e
|
||||
VFRSUBVF F10, V2, V0, V3 // d751259c
|
||||
|
||||
// 31.13.3: Vector Widening Floating-Point Add/Subtract Instructions
|
||||
VFWADDVV V1, V2, V3 // d79120c2
|
||||
VFWADDVV V1, V2, V0, V3 // d79120c0
|
||||
VFWADDVF F10, V2, V3 // d75125c2
|
||||
VFWADDVF F10, V2, V0, V3 // d75125c0
|
||||
VFWSUBVV V1, V2, V3 // d79120ca
|
||||
VFWSUBVV V1, V2, V0, V3 // d79120c8
|
||||
VFWSUBVF F10, V2, V3 // d75125ca
|
||||
VFWSUBVF F10, V2, V0, V3 // d75125c8
|
||||
VFWADDWV V1, V2, V3 // d79120d2
|
||||
VFWADDWV V1, V2, V0, V3 // d79120d0
|
||||
VFWADDWF F10, V2, V3 // d75125d2
|
||||
VFWADDWF F10, V2, V0, V3 // d75125d0
|
||||
VFWSUBWV V1, V2, V3 // d79120da
|
||||
VFWSUBWV V1, V2, V0, V3 // d79120d8
|
||||
VFWSUBWF F10, V2, V3 // d75125da
|
||||
VFWSUBWF F10, V2, V0, V3 // d75125d8
|
||||
|
||||
// 31.13.4: Vector Single-Width Floating-Point Multiply/Divide Instructions
|
||||
VFMULVV V1, V2, V3 // d7912092
|
||||
VFMULVV V1, V2, V0, V3 // d7912090
|
||||
VFMULVF F10, V2, V3 // d7512592
|
||||
VFMULVF F10, V2, V0, V3 // d7512590
|
||||
VFDIVVV V1, V2, V3 // d7912082
|
||||
VFDIVVV V1, V2, V0, V3 // d7912080
|
||||
VFDIVVF F10, V2, V3 // d7512582
|
||||
VFDIVVF F10, V2, V0, V3 // d7512580
|
||||
VFRDIVVF F10, V2, V3 // d7512586
|
||||
VFRDIVVF F10, V2, V0, V3 // d7512584
|
||||
|
||||
// 31.13.5: Vector Widening Floating-Point Multiply
|
||||
VFWMULVV V1, V2, V3 // d79120e2
|
||||
VFWMULVV V1, V2, V0, V3 // d79120e0
|
||||
VFWMULVF F10, V2, V3 // d75125e2
|
||||
VFWMULVF F10, V2, V0, V3 // d75125e0
|
||||
|
||||
// 31.13.6: Vector Single-Width Floating-Point Fused Multiply-Add Instructions
|
||||
VFMACCVV V2, V1, V3 // d79120b2
|
||||
VFMACCVV V2, V1, V0, V3 // d79120b0
|
||||
VFMACCVF V2, F10, V3 // d75125b2
|
||||
VFMACCVF V2, F10, V0, V3 // d75125b0
|
||||
VFNMACCVV V2, V1, V3 // d79120b6
|
||||
VFNMACCVV V2, V1, V0, V3 // d79120b4
|
||||
VFNMACCVF V2, F10, V3 // d75125b6
|
||||
VFNMACCVF V2, F10, V0, V3 // d75125b4
|
||||
VFMSACVV V2, V1, V3 // d79120ba
|
||||
VFMSACVV V2, V1, V0, V3 // d79120b8
|
||||
VFMSACVF V2, F10, V3 // d75125ba
|
||||
VFMSACVF V2, F10, V0, V3 // d75125b8
|
||||
VFNMSACVV V2, V1, V3 // d79120be
|
||||
VFNMSACVV V2, V1, V0, V3 // d79120bc
|
||||
VFNMSACVF V2, F10, V3 // d75125be
|
||||
VFNMSACVF V2, F10, V0, V3 // d75125bc
|
||||
VFMADDVV V2, V1, V3 // d79120a2
|
||||
VFMADDVV V2, V1, V0, V3 // d79120a0
|
||||
VFMADDVF V2, F10, V3 // d75125a2
|
||||
VFMADDVF V2, F10, V0, V3 // d75125a0
|
||||
VFNMADDVV V2, V1, V3 // d79120a6
|
||||
VFNMADDVV V2, V1, V0, V3 // d79120a4
|
||||
VFNMADDVF V2, F10, V3 // d75125a6
|
||||
VFNMADDVF V2, F10, V0, V3 // d75125a4
|
||||
VFMSUBVV V2, V1, V3 // d79120aa
|
||||
VFMSUBVV V2, V1, V0, V3 // d79120a8
|
||||
VFMSUBVF V2, F10, V3 // d75125aa
|
||||
VFMSUBVF V2, F10, V0, V3 // d75125a8
|
||||
VFNMSUBVV V2, V1, V3 // d79120ae
|
||||
VFNMSUBVV V2, V1, V0, V3 // d79120ac
|
||||
VFNMSUBVF V2, F10, V3 // d75125ae
|
||||
VFNMSUBVF V2, F10, V0, V3 // d75125ac
|
||||
|
||||
// 31.13.7: Vector Widening Floating-Point Fused Multiply-Add Instructions
|
||||
VFWMACCVV V2, V1, V3 // d79120f2
|
||||
VFWMACCVV V2, V1, V0, V3 // d79120f0
|
||||
VFWMACCVF V2, F10, V3 // d75125f2
|
||||
VFWMACCVF V2, F10, V0, V3 // d75125f0
|
||||
VFWNMACCVV V2, V1, V3 // d79120f6
|
||||
VFWNMACCVV V2, V1, V0, V3 // d79120f4
|
||||
VFWNMACCVF V2, F10, V3 // d75125f6
|
||||
VFWNMACCVF V2, F10, V0, V3 // d75125f4
|
||||
VFWMSACVV V2, V1, V3 // d79120fa
|
||||
VFWMSACVV V2, V1, V0, V3 // d79120f8
|
||||
VFWMSACVF V2, F10, V3 // d75125fa
|
||||
VFWMSACVF V2, F10, V0, V3 // d75125f8
|
||||
VFWNMSACVV V2, V1, V3 // d79120fe
|
||||
VFWNMSACVV V2, V1, V0, V3 // d79120fc
|
||||
VFWNMSACVF V2, F10, V3 // d75125fe
|
||||
VFWNMSACVF V2, F10, V0, V3 // d75125fc
|
||||
|
||||
// 31.13.8: Vector Floating-Point Square-Root Instruction
|
||||
VFSQRTV V2, V3 // d711204e
|
||||
VFSQRTV V2, V0, V3 // d711204c
|
||||
|
||||
// 31.13.9: Vector Floating-Point Reciprocal Square-Root Estimate Instruction
|
||||
VFRSQRT7V V2, V3 // d711224e
|
||||
VFRSQRT7V V2, V0, V3 // d711224c
|
||||
|
||||
// 31.13.10: Vector Floating-Point Reciprocal Estimate Instruction
|
||||
VFREC7V V2, V3 // d791224e
|
||||
VFREC7V V2, V0, V3 // d791224c
|
||||
|
||||
// 31.13.11: Vector Floating-Point MIN/MAX Instructions
|
||||
VFMINVV V1, V2, V3 // d7912012
|
||||
VFMINVV V1, V2, V0, V3 // d7912010
|
||||
VFMINVF F10, V2, V3 // d7512512
|
||||
VFMINVF F10, V2, V0, V3 // d7512510
|
||||
VFMAXVV V1, V2, V3 // d791201a
|
||||
VFMAXVV V1, V2, V0, V3 // d7912018
|
||||
VFMAXVF F10, V2, V3 // d751251a
|
||||
VFMAXVF F10, V2, V0, V3 // d7512518
|
||||
|
||||
// 31.13.12: Vector Floating-Point Sign-Injection Instructions
|
||||
VFSGNJVV V1, V2, V3 // d7912022
|
||||
VFSGNJVV V1, V2, V0, V3 // d7912020
|
||||
VFSGNJVF F10, V2, V3 // d7512522
|
||||
VFSGNJVF F10, V2, V0, V3 // d7512520
|
||||
VFSGNJNVV V1, V2, V3 // d7912026
|
||||
VFSGNJNVV V1, V2, V0, V3 // d7912024
|
||||
VFSGNJNVF F10, V2, V3 // d7512526
|
||||
VFSGNJNVF F10, V2, V0, V3 // d7512524
|
||||
VFSGNJXVV V1, V2, V3 // d791202a
|
||||
VFSGNJXVV V1, V2, V0, V3 // d7912028
|
||||
VFSGNJXVF F10, V2, V3 // d751252a
|
||||
VFSGNJXVF F10, V2, V0, V3 // d7512528
|
||||
VFNEGV V2, V3 // d7112126
|
||||
VFNEGV V2, V0, V3 // d7112124
|
||||
VFABSV V2, V3 // d711212a
|
||||
VFABSV V2, V0, V3 // d7112128
|
||||
|
||||
// 31.13.13: Vector Floating-Point Compare Instructions
|
||||
VMFEQVV V1, V2, V3 // d7912062
|
||||
VMFEQVV V1, V2, V0, V3 // d7912060
|
||||
VMFEQVF F10, V2, V3 // d7512562
|
||||
VMFEQVF F10, V2, V0, V3 // d7512560
|
||||
VMFNEVV V1, V2, V3 // d7912072
|
||||
VMFNEVV V1, V2, V0, V3 // d7912070
|
||||
VMFNEVF F10, V2, V3 // d7512572
|
||||
VMFNEVF F10, V2, V0, V3 // d7512570
|
||||
VMFLTVV V1, V2, V3 // d791206e
|
||||
VMFLTVV V1, V2, V0, V3 // d791206c
|
||||
VMFLTVF F10, V2, V3 // d751256e
|
||||
VMFLTVF F10, V2, V0, V3 // d751256c
|
||||
VMFLEVV V1, V2, V3 // d7912066
|
||||
VMFLEVV V1, V2, V0, V3 // d7912064
|
||||
VMFLEVF F10, V2, V3 // d7512566
|
||||
VMFLEVF F10, V2, V0, V3 // d7512564
|
||||
VMFGTVF F10, V2, V3 // d7512576
|
||||
VMFGTVF F10, V2, V0, V3 // d7512574
|
||||
VMFGEVF F10, V2, V3 // d751257e
|
||||
VMFGEVF F10, V2, V0, V3 // d751257c
|
||||
VMFGTVV V1, V2, V3 // d711116e
|
||||
VMFGTVV V1, V2, V0, V3 // d711116c
|
||||
VMFGEVV V1, V2, V3 // d7111166
|
||||
VMFGEVV V1, V2, V0, V3 // d7111164
|
||||
|
||||
// 31.13.14: Vector Floating-Point Classify Instruction
|
||||
VFCLASSV V2, V3 // d711284e
|
||||
VFCLASSV V2, V0, V3 // d711284c
|
||||
|
||||
// 31.13.15: Vector Floating-Point Merge Instruction
|
||||
VFMERGEVFM F10, V2, V0, V3 // d751255c
|
||||
|
||||
// 31.13.16: Vector Floating-Point Move Instruction
|
||||
VFMVVF F10, V3 // d751055e
|
||||
|
||||
// 31.13.17: Single-Width Floating-Point/Integer Type-Convert Instructions
|
||||
VFCVTXUFV V2, V3 // d711204a
|
||||
VFCVTXUFV V2, V0, V3 // d7112048
|
||||
VFCVTXFV V2, V3 // d791204a
|
||||
VFCVTXFV V2, V0, V3 // d7912048
|
||||
VFCVTRTZXUFV V2, V3 // d711234a
|
||||
VFCVTRTZXUFV V2, V0, V3 // d7112348
|
||||
VFCVTRTZXFV V2, V3 // d791234a
|
||||
VFCVTRTZXFV V2, V0, V3 // d7912348
|
||||
VFCVTFXUV V2, V3 // d711214a
|
||||
VFCVTFXUV V2, V0, V3 // d7112148
|
||||
VFCVTFXV V2, V3 // d791214a
|
||||
VFCVTFXV V2, V0, V3 // d7912148
|
||||
|
||||
// 31.13.18: Widening Floating-Point/Integer Type-Convert Instructions
|
||||
VFWCVTXUFV V2, V3 // d711244a
|
||||
VFWCVTXUFV V2, V0, V3 // d7112448
|
||||
VFWCVTXFV V2, V3 // d791244a
|
||||
VFWCVTXFV V2, V0, V3 // d7912448
|
||||
VFWCVTRTZXUFV V2, V3 // d711274a
|
||||
VFWCVTRTZXUFV V2, V0, V3 // d7112748
|
||||
VFWCVTRTZXFV V2, V3 // d791274a
|
||||
VFWCVTRTZXFV V2, V0, V3 // d7912748
|
||||
VFWCVTFXUV V2, V3 // d711254a
|
||||
VFWCVTFXUV V2, V0, V3 // d7112548
|
||||
VFWCVTFXV V2, V3 // d791254a
|
||||
VFWCVTFXV V2, V0, V3 // d7912548
|
||||
VFWCVTFFV V2, V3 // d711264a
|
||||
VFWCVTFFV V2, V0, V3 // d7112648
|
||||
|
||||
// 31.13.19: Narrowing Floating-Point/Integer Type-Convert Instructions
|
||||
VFNCVTXUFW V2, V3 // d711284a
|
||||
VFNCVTXUFW V2, V0, V3 // d7112848
|
||||
VFNCVTXFW V2, V3 // d791284a
|
||||
VFNCVTXFW V2, V0, V3 // d7912848
|
||||
VFNCVTRTZXUFW V2, V3 // d7112b4a
|
||||
VFNCVTRTZXUFW V2, V0, V3 // d7112b48
|
||||
VFNCVTRTZXFW V2, V3 // d7912b4a
|
||||
VFNCVTRTZXFW V2, V0, V3 // d7912b48
|
||||
VFNCVTFXUW V2, V3 // d711294a
|
||||
VFNCVTFXUW V2, V0, V3 // d7112948
|
||||
VFNCVTFXW V2, V3 // d791294a
|
||||
VFNCVTFXW V2, V0, V3 // d7912948
|
||||
VFNCVTFFW V2, V3 // d7112a4a
|
||||
VFNCVTFFW V2, V0, V3 // d7112a48
|
||||
VFNCVTRODFFW V2, V3 // d7912a4a
|
||||
VFNCVTRODFFW V2, V0, V3 // d7912a48
|
||||
|
||||
// 31.14.1: Vector Single-Width Integer Reduction Instructions
|
||||
VREDSUMVS V1, V2, V3 // d7a12002
|
||||
VREDSUMVS V1, V2, V0, V3 // d7a12000
|
||||
VREDMAXUVS V1, V2, V3 // d7a1201a
|
||||
VREDMAXUVS V1, V2, V0, V3 // d7a12018
|
||||
VREDMAXVS V1, V2, V3 // d7a1201e
|
||||
VREDMAXVS V1, V2, V0, V3 // d7a1201c
|
||||
VREDMINUVS V1, V2, V3 // d7a12012
|
||||
VREDMINUVS V1, V2, V0, V3 // d7a12010
|
||||
VREDMINVS V1, V2, V3 // d7a12016
|
||||
VREDMINVS V1, V2, V0, V3 // d7a12014
|
||||
VREDANDVS V1, V2, V3 // d7a12006
|
||||
VREDANDVS V1, V2, V0, V3 // d7a12004
|
||||
VREDORVS V1, V2, V3 // d7a1200a
|
||||
VREDORVS V1, V2, V0, V3 // d7a12008
|
||||
VREDXORVS V1, V2, V3 // d7a1200e
|
||||
VREDXORVS V1, V2, V0, V3 // d7a1200c
|
||||
|
||||
// 31.14.2: Vector Widening Integer Reduction Instructions
|
||||
VWREDSUMUVS V1, V2, V3 // d78120c2
|
||||
VWREDSUMUVS V1, V2, V0, V3 // d78120c0
|
||||
VWREDSUMVS V1, V2, V3 // d78120c6
|
||||
VWREDSUMVS V1, V2, V0, V3 // d78120c4
|
||||
|
||||
// 31.14.3: Vector Single-Width Floating-Point Reduction Instructions
|
||||
VFREDOSUMVS V1, V2, V3 // d791200e
|
||||
VFREDOSUMVS V1, V2, V0, V3 // d791200c
|
||||
VFREDUSUMVS V1, V2, V3 // d7912006
|
||||
VFREDUSUMVS V1, V2, V0, V3 // d7912004
|
||||
VFREDMAXVS V1, V2, V3 // d791201e
|
||||
VFREDMAXVS V1, V2, V0, V3 // d791201c
|
||||
VFREDMINVS V1, V2, V3 // d7912016
|
||||
VFREDMINVS V1, V2, V0, V3 // d7912014
|
||||
|
||||
// 31.14.4: Vector Widening Floating-Point Reduction Instructions
|
||||
VFWREDOSUMVS V1, V2, V3 // d79120ce
|
||||
VFWREDOSUMVS V1, V2, V0, V3 // d79120cc
|
||||
VFWREDUSUMVS V1, V2, V3 // d79120c6
|
||||
VFWREDUSUMVS V1, V2, V0, V3 // d79120c4
|
||||
|
||||
// 31.15: Vector Mask Instructions
|
||||
VMANDMM V1, V2, V3 // d7a12066
|
||||
VMNANDMM V1, V2, V3 // d7a12076
|
||||
VMANDNMM V1, V2, V3 // d7a12062
|
||||
VMXORMM V1, V2, V3 // d7a1206e
|
||||
VMORMM V1, V2, V3 // d7a1206a
|
||||
VMNORMM V1, V2, V3 // d7a1207a
|
||||
VMORNMM V1, V2, V3 // d7a12072
|
||||
VMXNORMM V1, V2, V3 // d7a1207e
|
||||
VMMVM V2, V3 // d7212166
|
||||
VMCLRM V3 // d7a1316e
|
||||
VMSETM V3 // d7a1317e
|
||||
VMNOTM V2, V3 // d7212176
|
||||
VCPOPM V2, X10 // 57252842
|
||||
VCPOPM V2, V0, X10 // 57252840
|
||||
VFIRSTM V2, X10 // 57a52842
|
||||
VFIRSTM V2, V0, X10 // 57a52840
|
||||
VMSBFM V2, V3 // d7a12052
|
||||
VMSBFM V2, V0, V3 // d7a12050
|
||||
VMSIFM V2, V3 // d7a12152
|
||||
VMSIFM V2, V0, V3 // d7a12150
|
||||
VMSOFM V2, V3 // d7212152
|
||||
VMSOFM V2, V0, V3 // d7212150
|
||||
VIOTAM V2, V3 // d7212852
|
||||
VIOTAM V2, V0, V3 // d7212850
|
||||
VIDV V3 // d7a10852
|
||||
VIDV V0, V3 // d7a10850
|
||||
|
||||
// 31.16.1: Integer Scalar Move Instructions
|
||||
VMVXS V2, X10 // 57252042
|
||||
VMVSX X10, V2 // 57610542
|
||||
|
||||
// 31.16.2: Floating-Point Scalar Move Instructions
|
||||
VFMVFS V2, F10 // 57152042
|
||||
VFMVSF F10, V2 // 57510542
|
||||
|
||||
// 31.16.3: Vector Slide Instructions
|
||||
VSLIDEUPVX X10, V2, V3 // d741253a
|
||||
VSLIDEUPVX X10, V2, V0, V3 // d7412538
|
||||
VSLIDEUPVI $16, V2, V3 // d731283a
|
||||
VSLIDEUPVI $16, V2, V0, V3 // d7312838
|
||||
VSLIDEDOWNVX X10, V2, V3 // d741253e
|
||||
VSLIDEDOWNVX X10, V2, V0, V3 // d741253c
|
||||
VSLIDEDOWNVI $16, V2, V3 // d731283e
|
||||
VSLIDEDOWNVI $16, V2, V0, V3 // d731283c
|
||||
VSLIDE1UPVX X10, V2, V3 // d761253a
|
||||
VSLIDE1UPVX X10, V2, V0, V3 // d7612538
|
||||
VFSLIDE1UPVF F10, V2, V3 // d751253a
|
||||
VFSLIDE1UPVF F10, V2, V0, V3 // d7512538
|
||||
VSLIDE1DOWNVX X10, V2, V3 // d761253e
|
||||
VSLIDE1DOWNVX X10, V2, V0, V3 // d761253c
|
||||
VFSLIDE1DOWNVF F10, V2, V3 // d751253e
|
||||
VFSLIDE1DOWNVF F10, V2, V0, V3 // d751253c
|
||||
|
||||
// 31.16.4: Vector Register Gather Instructions
|
||||
VRGATHERVV V1, V2, V3 // d7812032
|
||||
VRGATHERVV V1, V2, V0, V3 // d7812030
|
||||
VRGATHEREI16VV V1, V2, V3 // d781203a
|
||||
VRGATHEREI16VV V1, V2, V0, V3 // d7812038
|
||||
VRGATHERVX X10, V2, V3 // d7412532
|
||||
VRGATHERVX X10, V2, V0, V3 // d7412530
|
||||
VRGATHERVI $16, V2, V3 // d7312832
|
||||
VRGATHERVI $16, V2, V0, V3 // d7312830
|
||||
|
||||
// 31.16.5: Vector Compress Instruction
|
||||
VCOMPRESSVM V1, V2, V3 // d7a1205e
|
||||
|
||||
// 31.16.6: Whole Vector Register Move
|
||||
VMV1RV V2, V1 // d730209e
|
||||
VMV2RV V12, V10 // 57b5c09e
|
||||
VMV4RV V8, V4 // 57b2819e
|
||||
VMV8RV V8, V0 // 57b0839e
|
||||
|
||||
// 33.2.1: Vector Basic Bit-manipulation (Zvbb)
|
||||
VANDNVV V1, V2, V3 // d7812006
|
||||
VANDNVV V1, V2, V0, V3 // d7812004
|
||||
VANDNVX X10, V2, V3 // d7412506
|
||||
VANDNVX X10, V2, V0, V3 // d7412504
|
||||
VBREVV V2, V3 // d721254a
|
||||
VBREVV V2, V0, V3 // d7212548
|
||||
VBREV8V V2, V3 // d721244a
|
||||
VBREV8V V2, V0, V3 // d7212448
|
||||
VREV8V V2, V3 // d7a1244a
|
||||
VREV8V V2, V0, V3 // d7a12448
|
||||
VCLZV V2, V3 // d721264a
|
||||
VCLZV V2, V0, V3 // d7212648
|
||||
VCTZV V2, V3 // d7a1264a
|
||||
VCTZV V2, V0, V3 // d7a12648
|
||||
VCPOPV V2, V3 // d721274a
|
||||
VCPOPV V2, V0, V3 // d7212748
|
||||
VROLVV V1, V2, V3 // d7812056
|
||||
VROLVV V1, V2, V0, V3 // d7812054
|
||||
VROLVX X10, V2, V3 // d7412556
|
||||
VROLVX X10, V2, V0, V3 // d7412554
|
||||
VRORVV V1, V2, V3 // d7812052
|
||||
VRORVV V1, V2, V0, V3 // d7812050
|
||||
VRORVX X10, V2, V3 // d7412552
|
||||
VRORVX X10, V2, V0, V3 // d7412550
|
||||
VRORVI $16, V2, V3 // d7312852
|
||||
VRORVI $16, V2, V0, V3 // d7312850
|
||||
VWSLLVV V1, V2, V3 // d78120d6
|
||||
VWSLLVV V1, V2, V0, V3 // d78120d4
|
||||
VWSLLVX X10, V2, V3 // d74125d6
|
||||
VWSLLVX X10, V2, V0, V3 // d74125d4
|
||||
VWSLLVI $16, V2, V3 // d73128d6
|
||||
VWSLLVI $16, V2, V0, V3 // d73128d4
|
||||
|
||||
// 33.2.2: Vector Carryless Multiplication (Zvbc)
|
||||
VCLMULVV V1, V2, V3 // d7a12032
|
||||
VCLMULVV V1, V2, V0, V3 // d7a12030
|
||||
VCLMULVX X10, V2, V3 // d7612532
|
||||
VCLMULVX X10, V2, V0, V3 // d7612530
|
||||
VCLMULHVV V1, V2, V3 // d7a12036
|
||||
VCLMULHVV V1, V2, V0, V3 // d7a12034
|
||||
VCLMULHVX X10, V2, V3 // d7612536
|
||||
VCLMULHVX X10, V2, V0, V3 // d7612534
|
||||
RET
|
||||
`
|
||||
dir := t.TempDir()
|
||||
path := filepath.Join(dir, "vecarith_riscv64.s")
|
||||
if err := os.WriteFile(path, []byte(src), 0o644); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
assertRISCVDifferential(t, path, src, "vecarith")
|
||||
}
|
||||
Reference in new issue
Block a user