4vtomat created this revision. Herald added subscribers: sunshaoce, VincentWu, vkmr, frasercrmck, jdoerfert, evandro, luismarques, apazos, sameer.abuasal, s.egerton, Jim, benna, psnobl, jocewei, PkmX, the_o, brucehoult, MartinMosbeck, rogfer01, edward-jones, zzheng, jrtc27, shiva0217, kito-cheng, niosHD, sabuasal, simoncook, johnrusso, rbar, asb, hiraditya, arichardson. Herald added a project: All. 4vtomat requested review of this revision. Herald added subscribers: llvm-commits, cfe-commits, pcwang-thead, eopXD, MaskRay. Herald added projects: clang, LLVM.
Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D138807 Files: clang/test/Preprocessor/riscv-target-features.c llvm/lib/Support/RISCVISAInfo.cpp llvm/lib/Target/RISCV/RISCV.td llvm/lib/Target/RISCV/RISCVInstrInfoV.td llvm/lib/Target/RISCV/RISCVInstrInfoZvk.td llvm/lib/Target/RISCV/RISCVSubtarget.h llvm/test/CodeGen/RISCV/attributes.ll llvm/test/MC/RISCV/attribute-arch.s llvm/test/MC/RISCV/rvv/rv64zvkb.s llvm/test/MC/RISCV/rvv/rv64zvkg.s llvm/test/MC/RISCV/rvv/rv64zvknf.s llvm/test/MC/RISCV/rvv/rv64zvknha.s llvm/test/MC/RISCV/rvv/rv64zvknhb.s llvm/test/MC/RISCV/rvv/rv64zvkns.s llvm/test/MC/RISCV/rvv/rv64zvksed.s llvm/test/MC/RISCV/rvv/rv64zvksh.s
Index: llvm/test/MC/RISCV/rvv/rv64zvksh.s =================================================================== --- /dev/null +++ llvm/test/MC/RISCV/rvv/rv64zvksh.s @@ -0,0 +1,21 @@ +# RUN: llvm-mc -triple=riscv64 -show-encoding --mattr=+zvksh %s \ +# RUN: | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST +# RUN: not llvm-mc -triple=riscv64 -show-encoding %s 2>&1 \ +# RUN: | FileCheck %s --check-prefix=CHECK-ERROR +# RUN: llvm-mc -triple=riscv64 -filetype=obj --mattr=+zvksh %s \ +# RUN: | llvm-objdump -d --mattr=+zvksh - \ +# RUN: | FileCheck %s --check-prefix=CHECK-INST +# RUN: llvm-mc -triple=riscv64 -filetype=obj --mattr=+zvksh %s \ +# RUN: | llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-UNKNOWN + +vsm3c.vi v10, v9, 7 +# CHECK-INST: vsm3c.vi v10, v9, 7 +# CHECK-ENCODING: [0x57,0xb5,0x93,0xd6] +# CHECK-ERROR: instruction requires the following: 'Zvksh' +# CHECK-UNKNOWN: 57 b5 93 d6 <unknown> + +vsm3me.vv v10, v9, v8 +# CHECK-INST: vsm3me.vv v10, v9, v8 +# CHECK-ENCODING: [0x57,0x35,0x94,0xda] +# CHECK-ERROR: instruction requires the following: 'Zvksh' +# CHECK-UNKNOWN: 57 35 94 da <unknown> Index: llvm/test/MC/RISCV/rvv/rv64zvksed.s =================================================================== --- /dev/null +++ llvm/test/MC/RISCV/rvv/rv64zvksed.s @@ -0,0 +1,21 @@ +# RUN: llvm-mc -triple=riscv64 -show-encoding --mattr=+zvksed %s \ +# RUN: | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST +# RUN: not llvm-mc -triple=riscv64 -show-encoding %s 2>&1 \ +# RUN: | FileCheck %s --check-prefix=CHECK-ERROR +# RUN: llvm-mc -triple=riscv64 -filetype=obj --mattr=+zvksed %s \ +# RUN: | llvm-objdump -d --mattr=+zvksed - \ +# RUN: | FileCheck %s --check-prefix=CHECK-INST +# RUN: llvm-mc -triple=riscv64 -filetype=obj --mattr=+zvksed %s \ +# RUN: | llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-UNKNOWN + +vsm4k.vi v10, v9, 7 +# CHECK-INST: vsm4k.vi v10, v9, 7 +# CHECK-ENCODING: [0x57,0xb5,0x93,0xea] +# CHECK-ERROR: instruction requires the following: 'Zvksed' +# CHECK-UNKNOWN: 57 b5 93 ea <unknown> + +vsm4r.vv v10, v9 +# CHECK-INST: vsm4r.vv v10, v9 +# CHECK-ENCODING: [0x57,0x35,0x90,0xee] +# CHECK-ERROR: instruction requires the following: 'Zvksed' +# CHECK-UNKNOWN: 57 35 90 ee <unknown> Index: llvm/test/MC/RISCV/rvv/rv64zvkns.s =================================================================== --- /dev/null +++ llvm/test/MC/RISCV/rvv/rv64zvkns.s @@ -0,0 +1,87 @@ +# RUN: llvm-mc -triple=riscv64 -show-encoding --mattr=+zvkns %s \ +# RUN: | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST +# RUN: not llvm-mc -triple=riscv64 -show-encoding %s 2>&1 \ +# RUN: | FileCheck %s --check-prefix=CHECK-ERROR +# RUN: llvm-mc -triple=riscv64 -filetype=obj --mattr=+zvkns %s \ +# RUN: | llvm-objdump -d --mattr=+zvkns - \ +# RUN: | FileCheck %s --check-prefix=CHECK-INST +# RUN: llvm-mc -triple=riscv64 -filetype=obj --mattr=+zvkns %s \ +# RUN: | llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-UNKNOWN + +vaesdf.vv v10, v9 +# CHECK-INST: vaesdf.vv v10, v9 +# CHECK-ENCODING: [0x57,0x05,0x90,0xee] +# CHECK-ERROR: instruction requires the following: 'Zvkns' +# CHECK-UNKNOWN: 57 05 90 ee <unknown> + +vaesdf.vs v10, v9 +# CHECK-INST: vaesdf.vs v10, v9 +# CHECK-ENCODING: [0x57,0x65,0x90,0x66] +# CHECK-ERROR: instruction requires the following: 'Zvkns' +# CHECK-UNKNOWN: 57 65 90 66 <unknown> + +vaesef.vv v10, v9 +# CHECK-INST: vaesef.vv v10, v9 +# CHECK-ENCODING: [0x57,0x05,0x90,0xf6] +# CHECK-ERROR: instruction requires the following: 'Zvkns' +# CHECK-UNKNOWN: 57 05 90 f6 <unknown> + +vaesef.vs v10, v9 +# CHECK-INST: vaesef.vs v10, v9 +# CHECK-ENCODING: [0x57,0x65,0x90,0x76] +# CHECK-ERROR: instruction requires the following: 'Zvkns' +# CHECK-UNKNOWN: 57 65 90 76 <unknown> + +vaesdm.vv v10, v9 +# CHECK-INST: vaesdm.vv v10, v9 +# CHECK-ENCODING: [0x57,0x45,0x90,0xee] +# CHECK-ERROR: instruction requires the following: 'Zvkns' +# CHECK-UNKNOWN: 57 45 90 ee <unknown> + +vaesdm.vs v10, v9 +# CHECK-INST: vaesdm.vs v10, v9 +# CHECK-ENCODING: [0x57,0x65,0x90,0x6a] +# CHECK-ERROR: instruction requires the following: 'Zvkns' +# CHECK-UNKNOWN: 57 65 90 6a <unknown> + +vaesem.vv v10, v9 +# CHECK-INST: vaesem.vv v10, v9 +# CHECK-ENCODING: [0x57,0x45,0x90,0xf6] +# CHECK-ERROR: instruction requires the following: 'Zvkns' +# CHECK-UNKNOWN: 57 45 90 f6 <unknown> + +vaesem.vs v10, v9 +# CHECK-INST: vaesem.vs v10, v9 +# CHECK-ENCODING: [0x57,0x65,0x90,0x7a] +# CHECK-ERROR: instruction requires the following: 'Zvkns' +# CHECK-UNKNOWN: 57 65 90 7a <unknown> + +vaeskf1.vi v10, v9, 0, v0.t +# CHECK-INST: vaeskf1.vi v10, v9, 0, v0.t +# CHECK-ENCODING: [0x57,0x05,0x90,0xf8] +# CHECK-ERROR: instruction requires the following: 'Zvkns' +# CHECK-UNKNOWN: 57 05 90 f8 <unknown> + +vaeskf2.vi v10, v9, 0, v0.t +# CHECK-INST: vaeskf2.vi v10, v9, 0, v0.t +# CHECK-ENCODING: [0x57,0x45,0x90,0xf8] +# CHECK-ERROR: instruction requires the following: 'Zvkns' +# CHECK-UNKNOWN: 57 45 90 f8 <unknown> + +vaeskr1.vi v10, v9, 0, v0.t +# CHECK-INST: vaeskr1.vi v10, v9, 0, v0.t +# CHECK-ENCODING: [0x57,0x05,0x90,0xfc] +# CHECK-ERROR: instruction requires the following: 'Zvkns' +# CHECK-UNKNOWN: 57 05 90 fc <unknown> + +vaeskr2.vi v10, v9, 0 +# CHECK-INST: vaeskr2.vi v10, v9, 0 +# CHECK-ENCODING: [0x57,0x45,0x90,0xfe] +# CHECK-ERROR: instruction requires the following: 'Zvkns' +# CHECK-UNKNOWN: 57 45 90 fe <unknown> + +vaesz.vs v10, v9 +# CHECK-INST: vaesz.vs v10, v9 +# CHECK-ENCODING: [0x57,0x65,0x90,0x7e] +# CHECK-ERROR: instruction requires the following: 'Zvkns' +# CHECK-UNKNOWN: 57 65 90 7e <unknown> Index: llvm/test/MC/RISCV/rvv/rv64zvknhb.s =================================================================== --- /dev/null +++ llvm/test/MC/RISCV/rvv/rv64zvknhb.s @@ -0,0 +1,27 @@ +# RUN: llvm-mc -triple=riscv64 -show-encoding --mattr=+zvknhb %s \ +# RUN: | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST +# RUN: not llvm-mc -triple=riscv64 -show-encoding %s 2>&1 \ +# RUN: | FileCheck %s --check-prefix=CHECK-ERROR +# RUN: llvm-mc -triple=riscv64 -filetype=obj --mattr=+zvknhb %s \ +# RUN: | llvm-objdump -d --mattr=+zvknhb - \ +# RUN: | FileCheck %s --check-prefix=CHECK-INST +# RUN: llvm-mc -triple=riscv64 -filetype=obj --mattr=+zvknhb %s \ +# RUN: | llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-UNKNOWN + +vsha2ms.vv v10, v9, v8 +# CHECK-INST: vsha2ms.vv v10, v9, v8 +# CHECK-ENCODING: [0x57,0x35,0x94,0xf6] +# CHECK-ERROR: instruction requires the following: 'Zvknha' (Vector SHA-2. (SHA-256 only)) 'Zvknhb' (Vector SHA-2. (SHA-256 and SHA-512)) +# CHECK-UNKNOWN: 57 35 94 f6 <unknown> + +vsha2ch.vv v10, v9, v8 +# CHECK-INST: vsha2ch.vv v10, v9, v8 +# CHECK-ENCODING: [0x57,0x35,0x94,0xfa] +# CHECK-ERROR: instruction requires the following: 'Zvknha' (Vector SHA-2. (SHA-256 only)) 'Zvknhb' (Vector SHA-2. (SHA-256 and SHA-512)) +# CHECK-UNKNOWN: 57 35 94 fa <unknown> + +vsha2cl.vv v10, v9, v8 +# CHECK-INST: vsha2cl.vv v10, v9, v8 +# CHECK-ENCODING: [0x57,0x35,0x94,0xf2] +# CHECK-ERROR: instruction requires the following: 'Zvknha' (Vector SHA-2. (SHA-256 only)) 'Zvknhb' (Vector SHA-2. (SHA-256 and SHA-512)) +# CHECK-UNKNOWN: 57 35 94 f2 <unknown> Index: llvm/test/MC/RISCV/rvv/rv64zvknha.s =================================================================== --- /dev/null +++ llvm/test/MC/RISCV/rvv/rv64zvknha.s @@ -0,0 +1,27 @@ +# RUN: llvm-mc -triple=riscv64 -show-encoding --mattr=+zvknha %s \ +# RUN: | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST +# RUN: not llvm-mc -triple=riscv64 -show-encoding %s 2>&1 \ +# RUN: | FileCheck %s --check-prefix=CHECK-ERROR +# RUN: llvm-mc -triple=riscv64 -filetype=obj --mattr=+zvknha %s \ +# RUN: | llvm-objdump -d --mattr=+zvknha - \ +# RUN: | FileCheck %s --check-prefix=CHECK-INST +# RUN: llvm-mc -triple=riscv64 -filetype=obj --mattr=+zvknha %s \ +# RUN: | llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-UNKNOWN + +vsha2ms.vv v10, v9, v8 +# CHECK-INST: vsha2ms.vv v10, v9, v8 +# CHECK-ENCODING: [0x57,0x35,0x94,0xf6] +# CHECK-ERROR: instruction requires the following: 'Zvknha' (Vector SHA-2. (SHA-256 only)) 'Zvknhb' (Vector SHA-2. (SHA-256 and SHA-512)) +# CHECK-UNKNOWN: 57 35 94 f6 <unknown> + +vsha2ch.vv v10, v9, v8 +# CHECK-INST: vsha2ch.vv v10, v9, v8 +# CHECK-ENCODING: [0x57,0x35,0x94,0xfa] +# CHECK-ERROR: instruction requires the following: 'Zvknha' (Vector SHA-2. (SHA-256 only)) 'Zvknhb' (Vector SHA-2. (SHA-256 and SHA-512)) +# CHECK-UNKNOWN: 57 35 94 fa <unknown> + +vsha2cl.vv v10, v9, v8 +# CHECK-INST: vsha2cl.vv v10, v9, v8 +# CHECK-ENCODING: [0x57,0x35,0x94,0xf2] +# CHECK-ERROR: instruction requires the following: 'Zvknha' (Vector SHA-2. (SHA-256 only)) 'Zvknhb' (Vector SHA-2. (SHA-256 and SHA-512)) +# CHECK-UNKNOWN: 57 35 94 f2 <unknown> Index: llvm/test/MC/RISCV/rvv/rv64zvknf.s =================================================================== --- /dev/null +++ llvm/test/MC/RISCV/rvv/rv64zvknf.s @@ -0,0 +1,75 @@ +# RUN: llvm-mc -triple=riscv64 -show-encoding --mattr=+zvknf %s \ +# RUN: | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST +# RUN: not llvm-mc -triple=riscv64 -show-encoding %s 2>&1 \ +# RUN: | FileCheck %s --check-prefix=CHECK-ERROR +# RUN: llvm-mc -triple=riscv64 -filetype=obj --mattr=+zvknf %s \ +# RUN: | llvm-objdump -d --mattr=+zvknf - \ +# RUN: | FileCheck %s --check-prefix=CHECK-INST +# RUN: llvm-mc -triple=riscv64 -filetype=obj --mattr=+zvknf %s \ +# RUN: | llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-UNKNOWN + +vaese128.vv v10, v9, v8 +# CHECK-INST: vaese128.vv v10, v9, v8 +# CHECK-ENCODING: [0x57,0x05,0x94,0xf2] +# CHECK-ERROR: instruction requires the following: 'Zvknf' +# CHECK-UNKNOWN: 57 05 94 f2 <unknown> + +vaese128.vs v10, v9, v8 +# CHECK-INST: vaese128.vs v10, v9, v8 +# CHECK-ENCODING: [0x57,0x65,0x94,0x6e] +# CHECK-ERROR: instruction requires the following: 'Zvknf' +# CHECK-UNKNOWN: 57 65 94 6e <unknown> + +vaesd128.vv v10, v9, v8 +# CHECK-INST: vaesd128.vv v10, v9, v8 +# CHECK-ENCODING: [0x57,0x05,0x94,0xea] +# CHECK-ERROR: instruction requires the following: 'Zvknf' +# CHECK-UNKNOWN: 57 05 94 ea <unknown> + +vaesd128.vs v10, v9, v8 +# CHECK-INST: vaesd128.vs v10, v9, v8 +# CHECK-ENCODING: [0x57,0x65,0x94,0x5e] +# CHECK-ERROR: instruction requires the following: 'Zvknf' +# CHECK-UNKNOWN: 57 65 94 5e <unknown> + +vaese256.vv v10, v9, v8 +# CHECK-INST: vaese256.vv v10, v9, v8 +# CHECK-ENCODING: [0x57,0x45,0x94,0xf2] +# CHECK-ERROR: instruction requires the following: 'Zvknf' +# CHECK-UNKNOWN: 57 45 94 f2 <unknown> + +vaese256.vs v10, v9, v8 +# CHECK-INST: vaese256.vs v10, v9, v8 +# CHECK-ENCODING: [0x57,0x65,0x94,0x72] +# CHECK-ERROR: instruction requires the following: 'Zvknf' +# CHECK-UNKNOWN: 57 65 94 72 <unknown> + +vaesd256.vv v10, v9, v8 +# CHECK-INST: vaesd256.vv v10, v9, v8 +# CHECK-ENCODING: [0x57,0x45,0x94,0xea] +# CHECK-ERROR: instruction requires the following: 'Zvknf' +# CHECK-UNKNOWN: 57 45 94 ea <unknown> + +vaesd256.vs v10, v9, v8 +# CHECK-INST: vaesd256.vs v10, v9, v8 +# CHECK-ENCODING: [0x57,0x65,0x94,0x62] +# CHECK-ERROR: instruction requires the following: 'Zvknf' +# CHECK-UNKNOWN: 57 65 94 62 <unknown> + +vaes128k10.v v10, v9 +# CHECK-INST: vaes128k10.v v10, v9 +# CHECK-ENCODING: [0x57,0x05,0x90,0xe6] +# CHECK-ERROR: instruction requires the following: 'Zvknf' +# CHECK-UNKNOWN: 57 05 90 e6 <unknown> + +vaes256k13.vv v10, v9, v8 +# CHECK-INST: vaes256k13.vv v10, v9, v8 +# CHECK-ENCODING: [0x57,0x45,0x94,0xe6] +# CHECK-ERROR: instruction requires the following: 'Zvknf' +# CHECK-UNKNOWN: 57 45 94 e6 <unknown> + +vaes256k14.vv v10, v9, v8 +# CHECK-INST: vaes256k14.vv v10, v9, v8 +# CHECK-ENCODING: [0x57,0x35,0x94,0xe6] +# CHECK-ERROR: instruction requires the following: 'Zvknf' +# CHECK-UNKNOWN: 57 35 94 e6 <unknown> Index: llvm/test/MC/RISCV/rvv/rv64zvkg.s =================================================================== --- /dev/null +++ llvm/test/MC/RISCV/rvv/rv64zvkg.s @@ -0,0 +1,15 @@ +# RUN: llvm-mc -triple=riscv64 -show-encoding --mattr=+zvkg %s \ +# RUN: | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST +# RUN: not llvm-mc -triple=riscv64 -show-encoding %s 2>&1 \ +# RUN: | FileCheck %s --check-prefix=CHECK-ERROR +# RUN: llvm-mc -triple=riscv64 -filetype=obj --mattr=+zvkg %s \ +# RUN: | llvm-objdump -d --mattr=+zvkg - \ +# RUN: | FileCheck %s --check-prefix=CHECK-INST +# RUN: llvm-mc -triple=riscv64 -filetype=obj --mattr=+zvkg %s \ +# RUN: | llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-UNKNOWN + +vghmac.vv v10, v9, v8 +# CHECK-INST: vghmac.vv v10, v9, v8 +# CHECK-ENCODING: [0x57,0x05,0x94,0xd2] +# CHECK-ERROR: instruction requires the following: 'Zvkg' +# CHECK-UNKNOWN: 57 05 94 d2 <unknown> Index: llvm/test/MC/RISCV/rvv/rv64zvkb.s =================================================================== --- /dev/null +++ llvm/test/MC/RISCV/rvv/rv64zvkb.s @@ -0,0 +1,99 @@ +# RUN: llvm-mc -triple=riscv64 -show-encoding --mattr=+zvkb %s \ +# RUN: | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST +# RUN: not llvm-mc -triple=riscv64 -show-encoding %s 2>&1 \ +# RUN: | FileCheck %s --check-prefix=CHECK-ERROR +# RUN: llvm-mc -triple=riscv64 -filetype=obj --mattr=+zvkb %s \ +# RUN: | llvm-objdump -d --mattr=+zvkb - \ +# RUN: | FileCheck %s --check-prefix=CHECK-INST +# RUN: llvm-mc -triple=riscv64 -filetype=obj --mattr=+zvkb %s \ +# RUN: | llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-UNKNOWN + +vandn.vv v10, v9, v8, v0.t +# CHECK-INST: vandn.vv v10, v9, v8, v0.t +# CHECK-ENCODING: [0x57,0x05,0x94,0xcc] +# CHECK-ERROR: instruction requires the following: 'Zvkb' +# CHECK-UNKNOWN: 57 05 94 cc <unknown> + +vandn.vx v10, v9, a0, v0.t +# CHECK-INST: vandn.vx v10, v9, a0, v0.t +# CHECK-ENCODING: [0x57,0x45,0x95,0xcc] +# CHECK-ERROR: instruction requires the following: 'Zvkb' +# CHECK-UNKNOWN: 57 45 95 cc <unknown> + +vandn.vi v10, v9, 7, v0.t +# CHECK-INST: vandn.vi v10, v9, 7, v0.t +# CHECK-ENCODING: [0x57,0xb5,0x93,0xcc] +# CHECK-ERROR: instruction requires the following: 'Zvkb' +# CHECK-UNKNOWN: 57 b5 93 cc <unknown> + +vbrev8.v v10, v9, v0.t +# CHECK-INST: vbrev8.v v10, v9, v0.t +# CHECK-ENCODING: [0x57,0x35,0x90,0xd0] +# CHECK-ERROR: instruction requires the following: 'Zvkb' +# CHECK-UNKNOWN: 57 35 90 d0 <unknown> + +vclmul.vv v10, v9, v8 +# CHECK-INST: vclmul.vv v10, v9, v8 +# CHECK-ENCODING: [0x57,0x05,0x94,0xd6] +# CHECK-ERROR: instruction requires the following: 'Zvkb' +# CHECK-UNKNOWN: 57 05 94 d6 <unknown> + +vclmul.vx v10, v9, a0 +# CHECK-INST: vclmul.vx v10, v9, a0 +# CHECK-ENCODING: [0x57,0x45,0x95,0xd6] +# CHECK-ERROR: instruction requires the following: 'Zvkb' +# CHECK-UNKNOWN: 57 45 95 d6 <unknown> + +vclmulh.vv v10, v9, v8 +# CHECK-INST: vclmulh.vv v10, v9, v8 +# CHECK-ENCODING: [0x57,0x05,0x94,0xda] +# CHECK-ERROR: instruction requires the following: 'Zvkb' +# CHECK-UNKNOWN: 57 05 94 da <unknown> + +vclmulh.vx v10, v9, a0 +# CHECK-INST: vclmulh.vx v10, v9, a0 +# CHECK-ENCODING: [0x57,0x45,0x95,0xda] +# CHECK-ERROR: instruction requires the following: 'Zvkb' +# CHECK-UNKNOWN: 57 45 95 da <unknown> + +vrev8.v v10, v9, v0.t +# CHECK-INST: vrev8.v v10, v9, v0.t +# CHECK-ENCODING: [0x57,0x45,0x90,0xd0] +# CHECK-ERROR: instruction requires the following: 'Zvkb' +# CHECK-UNKNOWN: 57 45 90 d0 <unknown> + +vrol.vv v10, v9, v8, v0.t +# CHECK-INST: vrol.vv v10, v9, v8, v0.t +# CHECK-ENCODING: [0x57,0x05,0x94,0xdc] +# CHECK-ERROR: instruction requires the following: 'Zvkb' +# CHECK-UNKNOWN: 57 05 94 dc <unknown> + +vrol.vx v10, v9, a0, v0.t +# CHECK-INST: vrol.vx v10, v9, a0, v0.t +# CHECK-ENCODING: [0x57,0x45,0x95,0xdc] +# CHECK-ERROR: instruction requires the following: 'Zvkb' +# CHECK-UNKNOWN: 57 45 95 dc <unknown> + +vrol.vi v10, v9, 7, v0.t +# CHECK-INST: vrol.vi v10, v9, 7, v0.t +# CHECK-ENCODING: [0x57,0xb5,0x93,0xdc] +# CHECK-ERROR: instruction requires the following: 'Zvkb' +# CHECK-UNKNOWN: 57 b5 93 dc <unknown> + +vror.vv v10, v9, v8, v0.t +# CHECK-INST: vror.vv v10, v9, v8, v0.t +# CHECK-ENCODING: [0x57,0x05,0x94,0xe0] +# CHECK-ERROR: instruction requires the following: 'Zvkb' +# CHECK-UNKNOWN: 57 05 94 e0 <unknown> + +vror.vx v10, v9, a0, v0.t +# CHECK-INST: vror.vx v10, v9, a0, v0.t +# CHECK-ENCODING: [0x57,0x45,0x95,0xe0] +# CHECK-ERROR: instruction requires the following: 'Zvkb' +# CHECK-UNKNOWN: 57 45 95 e0 <unknown> + +vror.vi v10, v9, 7, v0.t +# CHECK-INST: vror.vi v10, v9, 7, v0.t +# CHECK-ENCODING: [0x57,0xb5,0x93,0xe0] +# CHECK-ERROR: instruction requires the following: 'Zvkb' +# CHECK-UNKNOWN: 57 b5 93 e0 <unknown> Index: llvm/test/MC/RISCV/attribute-arch.s =================================================================== --- llvm/test/MC/RISCV/attribute-arch.s +++ llvm/test/MC/RISCV/attribute-arch.s @@ -107,6 +107,30 @@ .attribute arch, "rv32izbc1p0" # CHECK: attribute 5, "rv32i2p0_zbc1p0" +.attribute arch, "rv32izvkns" +# CHECK: attribute 5, "rv32i2p0_f2p0_d2p0_zve32f1p0_zve32x1p0_zve64d1p0_zve64f1p0_zve64x1p0_zvkns0p1_zvl128b1p0_zvl32b1p0_zvl64b1p0" + +.attribute arch, "rv32izvknha" +# CHECK: attribute 5, "rv32i2p0_f2p0_d2p0_zve32f1p0_zve32x1p0_zve64d1p0_zve64f1p0_zve64x1p0_zvknha0p1_zvl128b1p0_zvl32b1p0_zvl64b1p0" + +.attribute arch, "rv32izvknhb" +# CHECK: attribute 5, "rv32i2p0_f2p0_d2p0_zve32f1p0_zve32x1p0_zve64d1p0_zve64f1p0_zve64x1p0_zvknhb0p1_zvl128b1p0_zvl32b1p0_zvl64b1p0" + +.attribute arch, "rv32izvknf" +# CHECK: attribute 5, "rv32i2p0_f2p0_d2p0_zve32f1p0_zve32x1p0_zve64d1p0_zve64f1p0_zve64x1p0_zvknf0p1_zvl128b1p0_zvl32b1p0_zvl64b1p0" + +.attribute arch, "rv32izvkb" +# CHECK: attribute 5, "rv32i2p0_f2p0_d2p0_zve32f1p0_zve32x1p0_zve64d1p0_zve64f1p0_zve64x1p0_zvkb0p1_zvl128b1p0_zvl32b1p0_zvl64b1p0" + +.attribute arch, "rv32izvkg" +# CHECK: attribute 5, "rv32i2p0_f2p0_d2p0_zve32f1p0_zve32x1p0_zve64d1p0_zve64f1p0_zve64x1p0_zvkg0p1_zvl128b1p0_zvl32b1p0_zvl64b1p0" + +.attribute arch, "rv32izvksed" +# CHECK: attribute 5, "rv32i2p0_f2p0_d2p0_zve32f1p0_zve32x1p0_zve64d1p0_zve64f1p0_zve64x1p0_zvksed0p1_zvl128b1p0_zvl32b1p0_zvl64b1p0" + +.attribute arch, "rv32izvksh" +# CHECK: attribute 5, "rv32i2p0_f2p0_d2p0_zve32f1p0_zve32x1p0_zve64d1p0_zve64f1p0_zve64x1p0_zvksh0p1_zvl128b1p0_zvl32b1p0_zvl64b1p0" + .attribute arch, "rv32izbs1p0" # CHECK: attribute 5, "rv32i2p0_zbs1p0" Index: llvm/test/CodeGen/RISCV/attributes.ll =================================================================== --- llvm/test/CodeGen/RISCV/attributes.ll +++ llvm/test/CodeGen/RISCV/attributes.ll @@ -40,6 +40,14 @@ ; RUN: llc -mtriple=riscv32 -mattr=+svinval %s -o - | FileCheck --check-prefix=RV32SVINVAL %s ; RUN: llc -mtriple=riscv32 -mattr=+experimental-zca %s -o - | FileCheck --check-prefix=RV32ZCA %s +; RUN: llc -mtriple=riscv32 -mattr=+zvkns %s -o - | FileCheck --check-prefix=RV32ZVKNS %s +; RUN: llc -mtriple=riscv32 -mattr=+zvknha %s -o - | FileCheck --check-prefix=RV32ZVKNHA %s +; RUN: llc -mtriple=riscv32 -mattr=+zvknhb %s -o - | FileCheck --check-prefix=RV32ZVKNHB %s +; RUN: llc -mtriple=riscv32 -mattr=+zvknf %s -o - | FileCheck --check-prefix=RV32ZVKNF %s +; RUN: llc -mtriple=riscv32 -mattr=+zvkb %s -o - | FileCheck --check-prefix=RV32ZVKB %s +; RUN: llc -mtriple=riscv32 -mattr=+zvkg %s -o - | FileCheck --check-prefix=RV32ZVKG %s +; RUN: llc -mtriple=riscv32 -mattr=+zvksed %s -o - | FileCheck --check-prefix=RV32ZVKSED %s +; RUN: llc -mtriple=riscv32 -mattr=+zvksh %s -o - | FileCheck --check-prefix=RV32ZVKSH %s ; RUN: llc -mtriple=riscv64 -mattr=+m %s -o - | FileCheck --check-prefix=RV64M %s ; RUN: llc -mtriple=riscv64 -mattr=+zmmul %s -o - | FileCheck --check-prefix=RV64ZMMUL %s ; RUN: llc -mtriple=riscv64 -mattr=+m,+zmmul %s -o - | FileCheck --check-prefix=RV64MZMMUL %s @@ -82,6 +90,14 @@ ; RUN: llc -mtriple=riscv64 -mattr=+experimental-zawrs %s -o - | FileCheck --check-prefix=RV64ZAWRS %s ; RUN: llc -mtriple=riscv64 -mattr=+experimental-ztso %s -o - | FileCheck --check-prefix=RV64ZTSO %s ; RUN: llc -mtriple=riscv64 -mattr=+experimental-zca %s -o - | FileCheck --check-prefix=RV64ZCA %s +; RUN: llc -mtriple=riscv64 -mattr=+zvkns %s -o - | FileCheck --check-prefix=RV64ZVKNS %s +; RUN: llc -mtriple=riscv64 -mattr=+zvknha %s -o - | FileCheck --check-prefix=RV64ZVKNHA %s +; RUN: llc -mtriple=riscv64 -mattr=+zvknhb %s -o - | FileCheck --check-prefix=RV64ZVKNHB %s +; RUN: llc -mtriple=riscv64 -mattr=+zvknf %s -o - | FileCheck --check-prefix=RV64ZVKNF %s +; RUN: llc -mtriple=riscv64 -mattr=+zvkb %s -o - | FileCheck --check-prefix=RV64ZVKB %s +; RUN: llc -mtriple=riscv64 -mattr=+zvkg %s -o - | FileCheck --check-prefix=RV64ZVKG %s +; RUN: llc -mtriple=riscv64 -mattr=+zvksed %s -o - | FileCheck --check-prefix=RV64ZVKSED %s +; RUN: llc -mtriple=riscv64 -mattr=+zvksh %s -o - | FileCheck --check-prefix=RV64ZVKSH %s ; RV32M: .attribute 5, "rv32i2p0_m2p0" ; RV32ZMMUL: .attribute 5, "rv32i2p0_zmmul1p0" @@ -122,6 +138,14 @@ ; RV32SVNAPOT: .attribute 5, "rv32i2p0_svnapot1p0" ; RV32SVINVAL: .attribute 5, "rv32i2p0_svinval1p0" ; RV32ZCA: .attribute 5, "rv32i2p0_zca0p70" +; RV32ZVKNS: .attribute 5, "rv32i2p0_f2p0_d2p0_v1p0_zve32f1p0_zve32x1p0_zve64d1p0_zve64f1p0_zve64x1p0_zvkns0p1_zvl128b1p0_zvl32b1p0_zvl64b1p0" +; RV32ZVKNHA: .attribute 5, "rv32i2p0_f2p0_d2p0_v1p0_zve32f1p0_zve32x1p0_zve64d1p0_zve64f1p0_zve64x1p0_zvknha0p1_zvl128b1p0_zvl32b1p0_zvl64b1p0" +; RV32ZVKNHB: .attribute 5, "rv32i2p0_f2p0_d2p0_v1p0_zve32f1p0_zve32x1p0_zve64d1p0_zve64f1p0_zve64x1p0_zvknha0p1_zvknhb0p1_zvl128b1p0_zvl32b1p0_zvl64b1p0" +; RV32ZVKNF: .attribute 5, "rv32i2p0_f2p0_d2p0_v1p0_zve32f1p0_zve32x1p0_zve64d1p0_zve64f1p0_zve64x1p0_zvknf0p1_zvl128b1p0_zvl32b1p0_zvl64b1p0" +; RV32ZVKB: .attribute 5, "rv32i2p0_f2p0_d2p0_v1p0_zve32f1p0_zve32x1p0_zve64d1p0_zve64f1p0_zve64x1p0_zvkb0p1_zvl128b1p0_zvl32b1p0_zvl64b1p0" +; RV32ZVKG: .attribute 5, "rv32i2p0_f2p0_d2p0_v1p0_zve32f1p0_zve32x1p0_zve64d1p0_zve64f1p0_zve64x1p0_zvkg0p1_zvl128b1p0_zvl32b1p0_zvl64b1p0" +; RV32ZVKSED: .attribute 5, "rv32i2p0_f2p0_d2p0_v1p0_zve32f1p0_zve32x1p0_zve64d1p0_zve64f1p0_zve64x1p0_zvksed0p1_zvl128b1p0_zvl32b1p0_zvl64b1p0" +; RV32ZVKSH: .attribute 5, "rv32i2p0_f2p0_d2p0_v1p0_zve32f1p0_zve32x1p0_zve64d1p0_zve64f1p0_zve64x1p0_zvksh0p1_zvl128b1p0_zvl32b1p0_zvl64b1p0" ; RV64M: .attribute 5, "rv64i2p0_m2p0" ; RV64ZMMUL: .attribute 5, "rv64i2p0_zmmul1p0" @@ -165,6 +189,14 @@ ; RV64XVENTANACONDOPS: .attribute 5, "rv64i2p0_xventanacondops1p0" ; RV64ZTSO: .attribute 5, "rv64i2p0_ztso0p1" ; RV64ZCA: .attribute 5, "rv64i2p0_zca0p70" +; RV64ZVKNS: .attribute 5, "rv64i2p0_f2p0_d2p0_v1p0_zve32f1p0_zve32x1p0_zve64d1p0_zve64f1p0_zve64x1p0_zvkns0p1_zvl128b1p0_zvl32b1p0_zvl64b1p0" +; RV64ZVKNHA: .attribute 5, "rv64i2p0_f2p0_d2p0_v1p0_zve32f1p0_zve32x1p0_zve64d1p0_zve64f1p0_zve64x1p0_zvknha0p1_zvl128b1p0_zvl32b1p0_zvl64b1p0" +; RV64ZVKNHB: .attribute 5, "rv64i2p0_f2p0_d2p0_v1p0_zve32f1p0_zve32x1p0_zve64d1p0_zve64f1p0_zve64x1p0_zvknha0p1_zvknhb0p1_zvl128b1p0_zvl32b1p0_zvl64b1p0" +; RV64ZVKNF: .attribute 5, "rv64i2p0_f2p0_d2p0_v1p0_zve32f1p0_zve32x1p0_zve64d1p0_zve64f1p0_zve64x1p0_zvknf0p1_zvl128b1p0_zvl32b1p0_zvl64b1p0" +; RV64ZVKB: .attribute 5, "rv64i2p0_f2p0_d2p0_v1p0_zve32f1p0_zve32x1p0_zve64d1p0_zve64f1p0_zve64x1p0_zvkb0p1_zvl128b1p0_zvl32b1p0_zvl64b1p0" +; RV64ZVKG: .attribute 5, "rv64i2p0_f2p0_d2p0_v1p0_zve32f1p0_zve32x1p0_zve64d1p0_zve64f1p0_zve64x1p0_zvkg0p1_zvl128b1p0_zvl32b1p0_zvl64b1p0" +; RV64ZVKSED: .attribute 5, "rv64i2p0_f2p0_d2p0_v1p0_zve32f1p0_zve32x1p0_zve64d1p0_zve64f1p0_zve64x1p0_zvksed0p1_zvl128b1p0_zvl32b1p0_zvl64b1p0" +; RV64ZVKSH: .attribute 5, "rv64i2p0_f2p0_d2p0_v1p0_zve32f1p0_zve32x1p0_zve64d1p0_zve64f1p0_zve64x1p0_zvksh0p1_zvl128b1p0_zvl32b1p0_zvl64b1p0" define i32 @addi(i32 %a) { %1 = add i32 %a, 1 Index: llvm/lib/Target/RISCV/RISCVSubtarget.h =================================================================== --- llvm/lib/Target/RISCV/RISCVSubtarget.h +++ llvm/lib/Target/RISCV/RISCVSubtarget.h @@ -94,6 +94,14 @@ bool HasStdExtZtso = false; bool HasVendorXVentanaCondOps = false; bool HasRV32 = false; + bool HasStdExtZvkns = false; + bool HasStdExtZvknha = false; + bool HasStdExtZvknhb = false; + bool HasStdExtZvknf = false; + bool HasStdExtZvkb = false; + bool HasStdExtZvkg = false; + bool HasStdExtZvksed = false; + bool HasStdExtZvksh = false; bool HasRV64 = false; bool IsRV32E = false; bool EnableLinkerRelax = false; @@ -188,6 +196,14 @@ bool hasStdExtZksed() const { return HasStdExtZksed; } bool hasStdExtZksh() const { return HasStdExtZksh; } bool hasStdExtZkr() const { return HasStdExtZkr; } + bool hasStdExtZvkns() const { return HasStdExtZvkns; } + bool hasStdExtZvknha() const { return HasStdExtZvknha; } + bool hasStdExtZvknhb() const { return HasStdExtZvknhb; } + bool hasStdExtZvknf() const { return HasStdExtZvknf; } + bool hasStdExtZvkb() const { return HasStdExtZvkb; } + bool hasStdExtZvkg() const { return HasStdExtZvkg; } + bool hasStdExtZvksed() const { return HasStdExtZvksed; } + bool hasStdExtZvksh() const { return HasStdExtZvksh; } bool hasStdExtZicbom() const { return HasStdExtZicbom; } bool hasStdExtZicboz() const { return HasStdExtZicboz; } bool hasStdExtZicbop() const { return HasStdExtZicbop; } Index: llvm/lib/Target/RISCV/RISCVInstrInfoZvk.td =================================================================== --- /dev/null +++ llvm/lib/Target/RISCV/RISCVInstrInfoZvk.td @@ -0,0 +1,117 @@ +//===-- RISCVInstrInfoZvk.td - RISC-V 'Zvk' instructions -------*- tablegen -*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// +/// +// This file describes the RISC-V instructions from the standard 'Zvk', +// Vector Cryptography Instructions extension, version 0.1. +/// +//===----------------------------------------------------------------------===// + +def rnum_0_7 : Operand<XLenVT>, ImmLeaf<XLenVT, + [{return (0 <= Imm && Imm <= 7);}]> { + let ParserMatchClass = UImmAsmOperand<5>; + let DecoderMethod = "decodeUImmOperand<5>"; + let OperandType = "OPERAND_RVKRNUM"; + let OperandNamespace = "RISCVOp"; +} + +def rnum_1_10 : Operand<XLenVT>, ImmLeaf<XLenVT, + [{return (1 <= Imm && Imm <= 10);}]> { + let ParserMatchClass = UImmAsmOperand<5>; + let DecoderMethod = "decodeUImmOperand<5>"; + let OperandType = "OPERAND_RVKRNUM"; + let OperandNamespace = "RISCVOp"; +} + +def rnum_1_14 : Operand<XLenVT>, ImmLeaf<XLenVT, + [{return (1 <= Imm && Imm <= 14);}]> { + let ParserMatchClass = UImmAsmOperand<5>; + let DecoderMethod = "decodeUImmOperand<5>"; + let OperandType = "OPERAND_RVKRNUM"; + let OperandNamespace = "RISCVOp"; +} + +let hasSideEffects = 0, mayLoad = 0, mayStore = 0 in { +class VALUVI_CUSTOM1<bits<6> funct6, string opcodestr, Operand optype> + : RVInstIVI<funct6, (outs VR:$vd), + (ins VR:$vs2, optype:$imm, VMaskOp:$vm), + opcodestr, "$vd, $vs2, $imm$vm"> { + let Inst{14-12} = 0b000; +} + +class VALUVI_CUSTOM2<bits<6> funct6, string opcodestr, Operand optype> + : RVInstIVI<funct6, (outs VR:$vd), + (ins VR:$vs2, optype:$imm, VMaskOp:$vm), + opcodestr, "$vd, $vs2, $imm$vm"> { + let Inst{14-12} = 0b100; +} + +class VALUVINoVm_CUSTOM1<bits<6> funct6, string opcodestr, Operand optype> + : VALUVINoVm<funct6, opcodestr, optype> { + let Inst{14-12} = 0b100; +} +} + +let Predicates = [HasStdExtZvknf] in { + def VAES128K10_V : VALUVs2NoVm<0b111001, 0b00000, RISCVVFormat<0b000>, "vaes128k10.v">; + def VAES256K13_VV : VALUVVNoVm<0b111001, RISCVVFormat<0b100>, "vaes256k13.vv">; + def VAES256K14_VV : VALUVVNoVm<0b111001, RISCVVFormat<0b011>, "vaes256k14.vv">; + def VAESD128_VV : VALUVVNoVm<0b111010, RISCVVFormat<0b000>, "vaesd128.vv">; + def VAESD128_VS : VALUVVNoVm<0b010111, RISCVVFormat<0b110>, "vaesd128.vs">; + def VAESD256_VV : VALUVVNoVm<0b111010, RISCVVFormat<0b100>, "vaesd256.vv">; + def VAESD256_VS : VALUVVNoVm<0b011000, RISCVVFormat<0b110>, "vaesd256.vs">; + def VAESE128_VV : VALUVVNoVm<0b111100, RISCVVFormat<0b000>, "vaese128.vv">; + def VAESE128_VS : VALUVVNoVm<0b011011, RISCVVFormat<0b110>, "vaese128.vs">; + def VAESE256_VV : VALUVVNoVm<0b111100, RISCVVFormat<0b100>, "vaese256.vv">; + def VAESE256_VS : VALUVVNoVm<0b011100, RISCVVFormat<0b110>, "vaese256.vs">; +} // Predicates = [HasStdExtZvknf] + +let Predicates = [HasStdExtZvkns] in { + def VAESDF_VV : VALUVs2NoVm<0b111011, 0b00000, RISCVVFormat<0b000>, "vaesdf.vv">; + def VAESDF_VS : VALUVs2NoVm<0b011001, 0b00000, RISCVVFormat<0b110>, "vaesdf.vs">; + def VAESEF_VV : VALUVs2NoVm<0b111101, 0b00000, RISCVVFormat<0b000>, "vaesef.vv">; + def VAESEF_VS : VALUVs2NoVm<0b011101, 0b00000, RISCVVFormat<0b110>, "vaesef.vs">; + def VAESDM_VV : VALUVs2NoVm<0b111011, 0b00000, RISCVVFormat<0b100>, "vaesdm.vv">; + def VAESDM_VS : VALUVs2NoVm<0b011010, 0b00000, RISCVVFormat<0b110>, "vaesdm.vs">; + def VAESEM_VV : VALUVs2NoVm<0b111101, 0b00000, RISCVVFormat<0b100>, "vaesem.vv">; + def VAESEM_VS : VALUVs2NoVm<0b011110, 0b00000, RISCVVFormat<0b110>, "vaesem.vs">; + def VAESKF1_VI : VALUVI_CUSTOM1<0b111110, "vaeskf1.vi", rnum_1_10>; + def VAESKF2_VI : VALUVI_CUSTOM2<0b111110, "vaeskf2.vi", rnum_1_14>; + def VAESKR1_VI : VALUVI_CUSTOM1<0b111111, "vaeskr1.vi", rnum_1_10>; + def VAESKR2_VI : VALUVINoVm_CUSTOM1<0b111111, "vaeskr2.vi", rnum_1_10>; + def VAESZ_VS : VALUVs2NoVm<0b011111, 0b00000, RISCVVFormat<0b110>, "vaesz.vs">; +} // Predicates = [HasStdExtZvkns] + +let Predicates = [HasStdExtZvkb] in { + defm VANDN_V : VALU_IV_V_X_I<"vandn", 0b110011, uimm5>; + def VBREV8_V : VALUVs2<0b110100, 0b00000, RISCVVFormat<0b011>, "vbrev8.v">; + defm VCLMUL_V : VALUNoVm_IV_V_X<"vclmul", 0b110101>; + defm VCLMULH_V : VALUNoVm_IV_V_X<"vclmulh", 0b110110>; + def VREV8_V : VALUVs2<0b110100, 0b00000, RISCVVFormat<0b100>, "vrev8.v">; + defm VROL_V : VALU_IV_V_X_I<"vrol", 0b110111, uimm5>; + defm VROR_V : VALU_IV_V_X_I<"vror", 0b111000, uimm5>; +} // Predicates = [HasStdExtZvkb] + +let Predicates = [HasStdExtZvkg] in { + def VGHMAC_VV : VALUVVNoVm<0b110100, RISCVVFormat<0b000>, "vghmac.vv">; +} // Predicates = [HasStdExtZvkg] + +let Predicates = [HasStdExtZvksed] in { + def VSM4K_VI : VALUVINoVm<0b111010, "vsm4k.vi", rnum_0_7>; + def VSM4R_VV : VALUVs2NoVm<0b111011, 0b00000, RISCVVFormat<0b011>, "vsm4r.vv">; +} // Predicates = [HasStdExtZvksed] + +let Predicates = [HasStdExtZvksh] in { + def VSM3C_VI : VALUVINoVm<0b110101, "vsm3c.vi", uimm5>; + def VSM3ME_VV : VALUVVNoVm<0b110110, RISCVVFormat<0b011>, "vsm3me.vv">; +} // Predicates = [HasStdExtZvksh] + +let Predicates = [HasStdExtZvknhaOrZvknhb] in { + def VSHA2CH_VV : VALUVVNoVm<0b111110, RISCVVFormat<0b011>, "vsha2ch.vv">; + def VSHA2CL_VV : VALUVVNoVm<0b111100, RISCVVFormat<0b011>, "vsha2cl.vv">; + def VSHA2MS_VV : VALUVVNoVm<0b111101, RISCVVFormat<0b011>, "vsha2ms.vv">; +} // Predicates = [HasStdExtZvknhaOrZvknhb] Index: llvm/lib/Target/RISCV/RISCVInstrInfoV.td =================================================================== --- llvm/lib/Target/RISCV/RISCVInstrInfoV.td +++ llvm/lib/Target/RISCV/RISCVInstrInfoV.td @@ -373,6 +373,14 @@ : RVInstV<funct6, vs1, opv, (outs VR:$vd), (ins VR:$vs2, VMaskOp:$vm), opcodestr, "$vd, $vs2$vm">; + +// op vd, vs2 (use vs1 as instruction encoding) +class VALUVs2NoVm<bits<6> funct6, bits<5> vs1, RISCVVFormat opv, string opcodestr> + : RVInstV<funct6, vs1, opv, (outs VR:$vd), + (ins VR:$vs2), opcodestr, + "$vd, $vs2"> { + let vm = 1; +} } // hasSideEffects = 0, mayLoad = 0, mayStore = 0 //===----------------------------------------------------------------------===// @@ -1664,4 +1672,5 @@ } } // Predicates = [HasVInstructionsI64, IsRV64] +include "RISCVInstrInfoZvk.td" //SIFIVE include "RISCVInstrInfoVPseudos.td" Index: llvm/lib/Target/RISCV/RISCV.td =================================================================== --- llvm/lib/Target/RISCV/RISCV.td +++ llvm/lib/Target/RISCV/RISCV.td @@ -452,6 +452,62 @@ // tuning CPU names. def Feature32Bit : SubtargetFeature<"32bit", "HasRV32", "true", "Implements RV32">; + +def FeatureStdExtZvkns + : SubtargetFeature<"zvkns", "HasStdExtZvkns", "true", + "'Zvkns' (Vector AES Encryption & Decryption (Single Round))", [FeatureStdExtV]>; +def HasStdExtZvkns : Predicate<"Subtarget->hasStdExtZvkns()">, + AssemblerPredicate<(all_of FeatureStdExtZvkns), + "'Zvkns' (Vector AES Encryption & Decryption (Single Round))">; + +def FeatureStdExtZvknha + : SubtargetFeature<"zvknha", "HasStdExtZvknha", "true", + "'Zvknha' (Vector SHA-2. (SHA-256 only))", [FeatureStdExtV]>; + +def FeatureStdExtZvknhb + : SubtargetFeature<"zvknhb", "HasStdExtZvknhb", "true", + "'Zvknhb' (Vector SHA-2. (SHA-256 and SHA-512))", + [FeatureStdExtZvknha]>; +def HasStdExtZvknhaOrZvknhb : Predicate<"Subtarget->hasStdExtZvknha() || Subtarget->hasStdExtZvknhb()">, + AssemblerPredicate<(any_of FeatureStdExtZvknha, FeatureStdExtZvknhb), + "'Zvknha' (Vector SHA-2. (SHA-256 only)) " + "'Zvknhb' (Vector SHA-2. (SHA-256 and SHA-512))">; + +def FeatureStdExtZvknf + : SubtargetFeature<"zvknf", "HasStdExtZvknf", "true", + "'Zvknf' (Vector AES Encryption & Decryption (Full Rounds).)", [FeatureStdExtV]>; +def HasStdExtZvknf : Predicate<"Subtarget->hasStdExtZvknf()">, + AssemblerPredicate<(all_of FeatureStdExtZvknf), + "'Zvknf' (Vector AES Encryption & Decryption (Full Rounds).)">; + +def FeatureStdExtZvkb + : SubtargetFeature<"zvkb", "HasStdExtZvkb", "true", + "'Zvkb' (Vector Bitmanip instructions for Cryptography.)", [FeatureStdExtV]>; +def HasStdExtZvkb : Predicate<"Subtarget->hasStdExtZvkb()">, + AssemblerPredicate<(all_of FeatureStdExtZvkb), + "'Zvkb' (Vector Bitmanip instructions for Cryptography.)">; + +def FeatureStdExtZvkg + : SubtargetFeature<"zvkg", "HasStdExtZvkg", "true", + "'Zvkg' (Vector GCM instructions for Cryptography.)", [FeatureStdExtV]>; +def HasStdExtZvkg : Predicate<"Subtarget->hasStdExtZvkg()">, + AssemblerPredicate<(all_of FeatureStdExtZvkg), + "'Zvkg' (Vector GCM instructions for Cryptography.)">; + +def FeatureStdExtZvksed + : SubtargetFeature<"zvksed", "HasStdExtZvksed", "true", + "'Zvksed' (SM4 Block Cipher Instructions.)", [FeatureStdExtV]>; +def HasStdExtZvksed : Predicate<"Subtarget->hasStdExtZvksed()">, + AssemblerPredicate<(all_of FeatureStdExtZvksed), + "'Zvksed' (SM4 Block Cipher Instructions.)">; + +def FeatureStdExtZvksh + : SubtargetFeature<"zvksh", "HasStdExtZvksh", "true", + "'Zvksh' (SM3 Hash Function Instructions.)", [FeatureStdExtV]>; +def HasStdExtZvksh : Predicate<"Subtarget->hasStdExtZvksh()">, + AssemblerPredicate<(all_of FeatureStdExtZvksh), + "'Zvksh' (SM3 Hash Function Instructions.)">; + def Feature64Bit : SubtargetFeature<"64bit", "HasRV64", "true", "Implements RV64">; def IsRV64 : Predicate<"Subtarget->is64Bit()">, Index: llvm/lib/Support/RISCVISAInfo.cpp =================================================================== --- llvm/lib/Support/RISCVISAInfo.cpp +++ llvm/lib/Support/RISCVISAInfo.cpp @@ -106,6 +106,16 @@ {"svnapot", RISCVExtensionVersion{1, 0}}, {"svinval", RISCVExtensionVersion{1, 0}}, {"xventanacondops", RISCVExtensionVersion{1, 0}}, + + // vector crypto + {"zvkns", RISCVExtensionVersion{0, 1}}, + {"zvknha", RISCVExtensionVersion{0, 1}}, + {"zvknhb", RISCVExtensionVersion{0, 1}}, + {"zvknf", RISCVExtensionVersion{0, 1}}, + {"zvkb", RISCVExtensionVersion{0, 1}}, + {"zvkg", RISCVExtensionVersion{0, 1}}, + {"zvksed", RISCVExtensionVersion{0, 1}}, + {"zvksh", RISCVExtensionVersion{0, 1}}, }; static const RISCVSupportedExtension SupportedExperimentalExtensions[] = { @@ -814,6 +824,14 @@ {{"zve64f"}, {ImpliedExtsZve64f}}, {{"zve64x"}, {ImpliedExtsZve64x}}, {{"zvfh"}, {ImpliedExtsZvfh}}, + {{"zvkb"}, {ImpliedExtsV}}, + {{"zvkg"}, {ImpliedExtsV}}, + {{"zvknf"}, {ImpliedExtsV}}, + {{"zvknha"}, {ImpliedExtsV}}, + {{"zvknhb"}, {ImpliedExtsV}}, + {{"zvkns"}, {ImpliedExtsV}}, + {{"zvksed"}, {ImpliedExtsV}}, + {{"zvksh"}, {ImpliedExtsV}}, {{"zvl1024b"}, {ImpliedExtsZvl1024b}}, {{"zvl128b"}, {ImpliedExtsZvl128b}}, {{"zvl16384b"}, {ImpliedExtsZvl16384b}}, Index: clang/test/Preprocessor/riscv-target-features.c =================================================================== --- clang/test/Preprocessor/riscv-target-features.c +++ clang/test/Preprocessor/riscv-target-features.c @@ -44,6 +44,14 @@ // CHECK-NOT: __riscv_xventanacondops // CHECK-NOT: __riscv_zcd // CHECK-NOT: __riscv_zcf +// CHECK-NOT: __riscv_zvkns +// CHECK-NOT: __riscv_zvknha +// CHECK-NOT: __riscv_zvknhb +// CHECK-NOT: __riscv_zvknf +// CHECK-NOT: __riscv_zvkb +// CHECK-NOT: __riscv_zvkg +// CHECK-NOT: __riscv_zvksed +// CHECK-NOT: __riscv_zvksh // RUN: %clang -target riscv32-unknown-linux-gnu -march=rv32im -x c -E -dM %s \ // RUN: -o - | FileCheck --check-prefix=CHECK-M-EXT %s @@ -449,3 +457,51 @@ // RUN: %clang -target riscv32 -march=rv32izcf0p70 -menable-experimental-extensions \ // RUN: -x c -E -dM %s -o - | FileCheck --check-prefix=CHECK-ZCF-EXT %s // CHECK-ZCF-EXT: __riscv_zcf 70000{{$}} + +// RUN: %clang -target riscv32 -march=rv32izvkns -x c -E -dM %s \ +// RUN: -o - | FileCheck --check-prefix=CHECK-ZVKNS-EXT %s +// RUN: %clang -target riscv64 -march=rv64izvkns -x c -E -dM %s \ +// RUN: -o - | FileCheck --check-prefix=CHECK-ZVKNS-EXT %s +// CHECK-ZVKNS-EXT: __riscv_zvkns 1000{{$}} + +// RUN: %clang -target riscv32 -march=rv32izvknha -x c -E -dM %s \ +// RUN: -o - | FileCheck --check-prefix=CHECK-ZVKNHA-EXT %s +// RUN: %clang -target riscv64 -march=rv64izvknha -x c -E -dM %s \ +// RUN: -o - | FileCheck --check-prefix=CHECK-ZVKNHA-EXT %s +// CHECK-ZVKNHA-EXT: __riscv_zvknha 1000{{$}} + +// RUN: %clang -target riscv32 -march=rv32izvknhb -x c -E -dM %s \ +// RUN: -o - | FileCheck --check-prefix=CHECK-ZVKNHB-EXT %s +// RUN: %clang -target riscv64 -march=rv64izvknhb -x c -E -dM %s \ +// RUN: -o - | FileCheck --check-prefix=CHECK-ZVKNHB-EXT %s +// CHECK-ZVKNHB-EXT: __riscv_zvknhb 1000{{$}} + +// RUN: %clang -target riscv32 -march=rv32izvknf -x c -E -dM %s \ +// RUN: -o - | FileCheck --check-prefix=CHECK-ZVKNF-EXT %s +// RUN: %clang -target riscv64 -march=rv64izvknf -x c -E -dM %s \ +// RUN: -o - | FileCheck --check-prefix=CHECK-ZVKNF-EXT %s +// CHECK-ZVKNF-EXT: __riscv_zvknf 1000{{$}} + +// RUN: %clang -target riscv32 -march=rv32izvkb -x c -E -dM %s \ +// RUN: -o - | FileCheck --check-prefix=CHECK-ZVKB-EXT %s +// RUN: %clang -target riscv64 -march=rv64izvkb -x c -E -dM %s \ +// RUN: -o - | FileCheck --check-prefix=CHECK-ZVKB-EXT %s +// CHECK-ZVKB-EXT: __riscv_zvkb 1000{{$}} + +// RUN: %clang -target riscv32 -march=rv32izvkg -x c -E -dM %s \ +// RUN: -o - | FileCheck --check-prefix=CHECK-ZVKG-EXT %s +// RUN: %clang -target riscv64 -march=rv64izvkg -x c -E -dM %s \ +// RUN: -o - | FileCheck --check-prefix=CHECK-ZVKG-EXT %s +// CHECK-ZVKG-EXT: __riscv_zvkg 1000{{$}} + +// RUN: %clang -target riscv32 -march=rv32izvksed -x c -E -dM %s \ +// RUN: -o - | FileCheck --check-prefix=CHECK-ZVKSED-EXT %s +// RUN: %clang -target riscv64 -march=rv64izvksed -x c -E -dM %s \ +// RUN: -o - | FileCheck --check-prefix=CHECK-ZVKSED-EXT %s +// CHECK-ZVKSED-EXT: __riscv_zvksed 1000{{$}} + +// RUN: %clang -target riscv32 -march=rv32izvksh -x c -E -dM %s \ +// RUN: -o - | FileCheck --check-prefix=CHECK-ZVKSH-EXT %s +// RUN: %clang -target riscv64 -march=rv64izvksh -x c -E -dM %s \ +// RUN: -o - | FileCheck --check-prefix=CHECK-ZVKSH-EXT %s +// CHECK-ZVKSH-EXT: __riscv_zvksh 1000{{$}}
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits