diff --git a/gas/testsuite/gas/riscv/zc-zca-add-fail.s b/gas/testsuite/gas/riscv/zc-zca-add-fail.s
new file mode 100644
index 00000000000..20f8d94e3ae
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-add-fail.s
@@ -0,0 +1,9 @@
+target:
+    c.add
+    c.add , x1
+    c.add x1,
+
+    c.add x0, x0
+    c.add 1, x1
+    c.add x1, x0
+    c.add x1, 0
diff --git a/gas/testsuite/gas/riscv/zc-zca-add-rv32-fail.d b/gas/testsuite/gas/riscv/zc-zca-add-rv32-fail.d
new file mode 100644
index 00000000000..619b61edc12
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-add-rv32-fail.d
@@ -0,0 +1,3 @@
+#as: -march=rv32ifd_zca
+#source: zc-zca-add-fail.s
+#error_output: zc-zca-add-rv32-fail.l
diff --git a/gas/testsuite/gas/riscv/zc-zca-add-rv32-fail.l b/gas/testsuite/gas/riscv/zc-zca-add-rv32-fail.l
new file mode 100644
index 00000000000..6518d9d9728
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-add-rv32-fail.l
@@ -0,0 +1,8 @@
+.*: Assembler messages:
+.*: Error: illegal operands `c.add'
+.*: Error: illegal operands `c.add ,x1'
+.*: Error: illegal operands `c.add x1,'
+.*: Error: illegal operands `c.add x0,x0'
+.*: Error: illegal operands `c.add 1,x1'
+.*: Error: illegal operands `c.add x1,x0'
+.*: Error: illegal operands `c.add x1,0'
diff --git a/gas/testsuite/gas/riscv/zc-zca-add-rv32.d b/gas/testsuite/gas/riscv/zc-zca-add-rv32.d
new file mode 100644
index 00000000000..b5663f14064
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-add-rv32.d
@@ -0,0 +1,18 @@
+#as: -march=rv32ifd_zca
+#source: zc-zca-add.s
+#objdump: -d -Mno-aliases
+
+.*:[ 	]+file format .*
+
+
+Disassembly of section .text:
+
+0+000 <target>:
+[ 	]+0:[ 	]+908a[ 	]+c.add[ 	]+ra,sp
+[ 	]+2:[ 	]+910e[ 	]+c.add[ 	]+sp,gp
+[ 	]+4:[ 	]+9192[ 	]+c.add[ 	]+gp,tp
+[ 	]+6:[ 	]+9226[ 	]+c.add[ 	]+tp,s1
+[ 	]+8:[ 	]+94a6[ 	]+c.add[ 	]+s1,s1
+[ 	]+a:[ 	]+957e[ 	]+c.add[ 	]+a0,t6
+[ 	]+c:[ 	]+9faa[ 	]+c.add[ 	]+t6,a0
+[ 	]+e:[ 	]+907e[ 	]+c.add[ 	]+zero,t6
diff --git a/gas/testsuite/gas/riscv/zc-zca-add-rv64-fail.d b/gas/testsuite/gas/riscv/zc-zca-add-rv64-fail.d
new file mode 100644
index 00000000000..8074ed84486
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-add-rv64-fail.d
@@ -0,0 +1,3 @@
+#as: -march=rv64ifd_zca
+#source: zc-zca-add-fail.s
+#error_output: zc-zca-add-rv64-fail.l
diff --git a/gas/testsuite/gas/riscv/zc-zca-add-rv64-fail.l b/gas/testsuite/gas/riscv/zc-zca-add-rv64-fail.l
new file mode 100644
index 00000000000..6518d9d9728
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-add-rv64-fail.l
@@ -0,0 +1,8 @@
+.*: Assembler messages:
+.*: Error: illegal operands `c.add'
+.*: Error: illegal operands `c.add ,x1'
+.*: Error: illegal operands `c.add x1,'
+.*: Error: illegal operands `c.add x0,x0'
+.*: Error: illegal operands `c.add 1,x1'
+.*: Error: illegal operands `c.add x1,x0'
+.*: Error: illegal operands `c.add x1,0'
diff --git a/gas/testsuite/gas/riscv/zc-zca-add-rv64.d b/gas/testsuite/gas/riscv/zc-zca-add-rv64.d
new file mode 100644
index 00000000000..9ffaaff43d5
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-add-rv64.d
@@ -0,0 +1,18 @@
+#as: -march=rv64ifd_zca
+#source: zc-zca-add.s
+#objdump: -d -Mno-aliases
+
+.*:[ 	]+file format .*
+
+
+Disassembly of section .text:
+
+0+000 <target>:
+[ 	]+0:[ 	]+908a[ 	]+c.add[ 	]+ra,sp
+[ 	]+2:[ 	]+910e[ 	]+c.add[ 	]+sp,gp
+[ 	]+4:[ 	]+9192[ 	]+c.add[ 	]+gp,tp
+[ 	]+6:[ 	]+9226[ 	]+c.add[ 	]+tp,s1
+[ 	]+8:[ 	]+94a6[ 	]+c.add[ 	]+s1,s1
+[ 	]+a:[ 	]+957e[ 	]+c.add[ 	]+a0,t6
+[ 	]+c:[ 	]+9faa[ 	]+c.add[ 	]+t6,a0
+[ 	]+e:[ 	]+907e[ 	]+c.add[ 	]+zero,t6
diff --git a/gas/testsuite/gas/riscv/zc-zca-add.s b/gas/testsuite/gas/riscv/zc-zca-add.s
new file mode 100644
index 00000000000..dcb1922f4d8
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-add.s
@@ -0,0 +1,9 @@
+target:
+    c.add x1, x2
+    c.add x2, x3
+    c.add x3, x4
+    c.add x4, x9
+    c.add x9, x9
+    c.add x10, x31
+    c.add x31, x10
+    c.add x0, x31
diff --git a/gas/testsuite/gas/riscv/zc-zca-addi-fail.s b/gas/testsuite/gas/riscv/zc-zca-addi-fail.s
new file mode 100644
index 00000000000..13c72c5472b
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-addi-fail.s
@@ -0,0 +1,10 @@
+target:
+    c.addi
+    c.addi , 0
+    c.addi x1,
+
+    c.addi 1, 0
+    c.addi x1, -33
+    c.addi x1, 32
+    c.addi x1, 0.0
+    c.addi x1, x8
diff --git a/gas/testsuite/gas/riscv/zc-zca-addi-rv32-fail.d b/gas/testsuite/gas/riscv/zc-zca-addi-rv32-fail.d
new file mode 100644
index 00000000000..789bd87d014
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-addi-rv32-fail.d
@@ -0,0 +1,3 @@
+#as: -march=rv32ifd_zca
+#source: zc-zca-addi-fail.s
+#error_output: zc-zca-addi-rv32-fail.l
diff --git a/gas/testsuite/gas/riscv/zc-zca-addi-rv32-fail.l b/gas/testsuite/gas/riscv/zc-zca-addi-rv32-fail.l
new file mode 100644
index 00000000000..e907574d9db
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-addi-rv32-fail.l
@@ -0,0 +1,9 @@
+.*: Assembler messages:
+.*: Error: illegal operands `c.addi'
+.*: Error: illegal operands `c.addi ,0'
+.*: Error: illegal operands `c.addi x1,'
+.*: Error: illegal operands `c.addi 1,0'
+.*: Error: illegal operands `c.addi x1,-33'
+.*: Error: illegal operands `c.addi x1,32'
+.*: Error: illegal operands `c.addi x1,0.0'
+.*: Error: illegal operands `c.addi x1,x8'
diff --git a/gas/testsuite/gas/riscv/zc-zca-addi-rv32.d b/gas/testsuite/gas/riscv/zc-zca-addi-rv32.d
new file mode 100644
index 00000000000..e58501fb730
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-addi-rv32.d
@@ -0,0 +1,18 @@
+#as: -march=rv32ifd_zca
+#source: zc-zca-addi.s
+#objdump: -d -Mno-aliases
+
+.*:[ 	]+file format .*
+
+
+Disassembly of section .text:
+
+0+000 <target>:
+[ 	]+0:[ 	]+1081[ 	]+c.addi[ 	]+ra,-32
+[ 	]+2:[ 	]+0101[ 	]+c.addi[ 	]+sp,0
+[ 	]+4:[ 	]+01fd[ 	]+c.addi[ 	]+gp,31
+[ 	]+6:[ 	]+1245[ 	]+c.addi[ 	]+tp,-15+.*
+[ 	]+8:[ 	]+14fd[ 	]+c.addi[ 	]+s1,-1
+[ 	]+a:[ 	]+0505[ 	]+c.addi[ 	]+a0,1
+[ 	]+c:[ 	]+0fc1[ 	]+c.addi[ 	]+t6,16
+[ 	]+e:[ 	]+0051[ 	]+c.addi[ 	]+zero,20
diff --git a/gas/testsuite/gas/riscv/zc-zca-addi-rv64-fail.d b/gas/testsuite/gas/riscv/zc-zca-addi-rv64-fail.d
new file mode 100644
index 00000000000..e1d75e3c366
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-addi-rv64-fail.d
@@ -0,0 +1,3 @@
+#as: -march=rv64ifd_zca
+#source: zc-zca-addi-fail.s
+#error_output: zc-zca-addi-rv64-fail.l
diff --git a/gas/testsuite/gas/riscv/zc-zca-addi-rv64-fail.l b/gas/testsuite/gas/riscv/zc-zca-addi-rv64-fail.l
new file mode 100644
index 00000000000..e907574d9db
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-addi-rv64-fail.l
@@ -0,0 +1,9 @@
+.*: Assembler messages:
+.*: Error: illegal operands `c.addi'
+.*: Error: illegal operands `c.addi ,0'
+.*: Error: illegal operands `c.addi x1,'
+.*: Error: illegal operands `c.addi 1,0'
+.*: Error: illegal operands `c.addi x1,-33'
+.*: Error: illegal operands `c.addi x1,32'
+.*: Error: illegal operands `c.addi x1,0.0'
+.*: Error: illegal operands `c.addi x1,x8'
diff --git a/gas/testsuite/gas/riscv/zc-zca-addi-rv64.d b/gas/testsuite/gas/riscv/zc-zca-addi-rv64.d
new file mode 100644
index 00000000000..0870ff9080e
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-addi-rv64.d
@@ -0,0 +1,18 @@
+#as: -march=rv64ifd_zca
+#source: zc-zca-addi.s
+#objdump: -d -Mno-aliases
+
+.*:[ 	]+file format .*
+
+
+Disassembly of section .text:
+
+0+000 <target>:
+[ 	]+0:[ 	]+1081[ 	]+c.addi[ 	]+ra,-32
+[ 	]+2:[ 	]+0101[ 	]+c.addi[ 	]+sp,0
+[ 	]+4:[ 	]+01fd[ 	]+c.addi[ 	]+gp,31
+[ 	]+6:[ 	]+1245[ 	]+c.addi[ 	]+tp,-15+.*
+[ 	]+8:[ 	]+14fd[ 	]+c.addi[ 	]+s1,-1
+[ 	]+a:[ 	]+0505[ 	]+c.addi[ 	]+a0,1
+[ 	]+c:[ 	]+0fc1[ 	]+c.addi[ 	]+t6,16
+[ 	]+e:[ 	]+0051[ 	]+c.addi[ 	]+zero,20
diff --git a/gas/testsuite/gas/riscv/zc-zca-addi.s b/gas/testsuite/gas/riscv/zc-zca-addi.s
new file mode 100644
index 00000000000..e1770bde6c3
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-addi.s
@@ -0,0 +1,9 @@
+target:
+    c.addi x1, -32
+    c.addi x2, 0
+    c.addi x3, 31
+    c.addi x4, -15
+    c.addi x9, -1
+    c.addi x10, 1
+    c.addi x31, 16
+    c.addi x0, 20
diff --git a/gas/testsuite/gas/riscv/zc-zca-addi16sp-fail.s b/gas/testsuite/gas/riscv/zc-zca-addi16sp-fail.s
new file mode 100644
index 00000000000..7bd514b3d20
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-addi16sp-fail.s
@@ -0,0 +1,14 @@
+target:
+    c.addi16sp
+    c.addi16sp ,
+    c.addi16sp , 16
+    c.addi16sp x2,
+
+    c.addi16sp x1, 16
+    c.addi16sp 16, 16
+
+    c.addi16sp x2, 0
+    c.addi16sp x2, 497
+    c.addi16sp x2, -513
+    c.addi16sp x2, 16.0
+    c.addi16sp x2, x8
diff --git a/gas/testsuite/gas/riscv/zc-zca-addi16sp-rv32-fail.d b/gas/testsuite/gas/riscv/zc-zca-addi16sp-rv32-fail.d
new file mode 100644
index 00000000000..3e2de3528ea
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-addi16sp-rv32-fail.d
@@ -0,0 +1,3 @@
+#as: -march=rv32ifd_zca
+#source: zc-zca-addi16sp-fail.s
+#error_output: zc-zca-addi16sp-rv32-fail.l
diff --git a/gas/testsuite/gas/riscv/zc-zca-addi16sp-rv32-fail.l b/gas/testsuite/gas/riscv/zc-zca-addi16sp-rv32-fail.l
new file mode 100644
index 00000000000..93b1897daa9
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-addi16sp-rv32-fail.l
@@ -0,0 +1,12 @@
+.*: Assembler messages:
+.*: Error: illegal operands `c.addi16sp'
+.*: Error: illegal operands `c.addi16sp ,'
+.*: Error: illegal operands `c.addi16sp ,16'
+.*: Error: illegal operands `c.addi16sp x2,'
+.*: Error: illegal operands `c.addi16sp x1,16'
+.*: Error: illegal operands `c.addi16sp 16,16'
+.*: Error: illegal operands `c.addi16sp x2,0'
+.*: Error: illegal operands `c.addi16sp x2,497'
+.*: Error: illegal operands `c.addi16sp x2,-513'
+.*: Error: illegal operands `c.addi16sp x2,16.0'
+.*: Error: illegal operands `c.addi16sp x2,x8'
diff --git a/gas/testsuite/gas/riscv/zc-zca-addi16sp-rv32.d b/gas/testsuite/gas/riscv/zc-zca-addi16sp-rv32.d
new file mode 100644
index 00000000000..954c3ea035e
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-addi16sp-rv32.d
@@ -0,0 +1,14 @@
+#as: -march=rv32ifd_zca
+#source: zc-zca-addi16sp.s
+#objdump: -d -Mno-aliases
+
+.*:[ 	]+file format .*
+
+
+Disassembly of section .text:
+
+0+000 <target>:
+[ 	]+0:[ 	]+6105[ 	]+c.addi16sp[ 	]+sp,32
+[ 	]+2:[ 	]+713d[ 	]+c.addi16sp[ 	]+sp,-32
+[ 	]+4:[ 	]+617d[ 	]+c.addi16sp[ 	]+sp,496
+[ 	]+6:[ 	]+7101[ 	]+c.addi16sp[ 	]+sp,-512
diff --git a/gas/testsuite/gas/riscv/zc-zca-addi16sp-rv64-fail.d b/gas/testsuite/gas/riscv/zc-zca-addi16sp-rv64-fail.d
new file mode 100644
index 00000000000..5ccade3f14f
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-addi16sp-rv64-fail.d
@@ -0,0 +1,3 @@
+#as: -march=rv64ifd_zca
+#source: zc-zca-addi16sp-fail.s
+#error_output: zc-zca-addi16sp-rv64-fail.l
diff --git a/gas/testsuite/gas/riscv/zc-zca-addi16sp-rv64-fail.l b/gas/testsuite/gas/riscv/zc-zca-addi16sp-rv64-fail.l
new file mode 100644
index 00000000000..93b1897daa9
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-addi16sp-rv64-fail.l
@@ -0,0 +1,12 @@
+.*: Assembler messages:
+.*: Error: illegal operands `c.addi16sp'
+.*: Error: illegal operands `c.addi16sp ,'
+.*: Error: illegal operands `c.addi16sp ,16'
+.*: Error: illegal operands `c.addi16sp x2,'
+.*: Error: illegal operands `c.addi16sp x1,16'
+.*: Error: illegal operands `c.addi16sp 16,16'
+.*: Error: illegal operands `c.addi16sp x2,0'
+.*: Error: illegal operands `c.addi16sp x2,497'
+.*: Error: illegal operands `c.addi16sp x2,-513'
+.*: Error: illegal operands `c.addi16sp x2,16.0'
+.*: Error: illegal operands `c.addi16sp x2,x8'
diff --git a/gas/testsuite/gas/riscv/zc-zca-addi16sp-rv64.d b/gas/testsuite/gas/riscv/zc-zca-addi16sp-rv64.d
new file mode 100644
index 00000000000..cbca0196fe7
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-addi16sp-rv64.d
@@ -0,0 +1,14 @@
+#as: -march=rv64ifd_zca
+#source: zc-zca-addi16sp.s
+#objdump: -d -Mno-aliases
+
+.*:[ 	]+file format .*
+
+
+Disassembly of section .text:
+
+0+000 <target>:
+[ 	]+0:[ 	]+6105[ 	]+c.addi16sp[ 	]+sp,32
+[ 	]+2:[ 	]+713d[ 	]+c.addi16sp[ 	]+sp,-32
+[ 	]+4:[ 	]+617d[ 	]+c.addi16sp[ 	]+sp,496
+[ 	]+6:[ 	]+7101[ 	]+c.addi16sp[ 	]+sp,-512
diff --git a/gas/testsuite/gas/riscv/zc-zca-addi16sp.s b/gas/testsuite/gas/riscv/zc-zca-addi16sp.s
new file mode 100644
index 00000000000..25e9d8d1525
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-addi16sp.s
@@ -0,0 +1,5 @@
+target:
+    c.addi16sp x2, 32
+    c.addi16sp x2, -32
+    c.addi16sp x2, 496
+    c.addi16sp x2,-512
diff --git a/gas/testsuite/gas/riscv/zc-zca-addi4spn-fail.s b/gas/testsuite/gas/riscv/zc-zca-addi4spn-fail.s
new file mode 100644
index 00000000000..46df79d5ad2
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-addi4spn-fail.s
@@ -0,0 +1,22 @@
+target:
+    c.addi4spn
+    c.addi4spn , ,
+    c.addi4spn , x2, 4
+    c.addi4spn x8, , 4
+    c.addi4spn x8, x2,
+
+    c.addi4spn x7, x2, 4
+    c.addi4spn x16, x2, 4
+    c.addi4spn 4, x2, 4
+
+    c.addi4spn x8, x1, 4
+    c.addi4spn x8, 4, 4
+    c.addi4spn x8, x3, 4
+
+    c.addi4spn x8, x2, 0
+    c.addi4spn x8, x2, 3
+    c.addi4spn x8, x2, 4.0
+    c.addi4spn x8, x2, 5
+    c.addi4spn x8, x2, 1023
+    c.addi4spn x8, x2, 1024
+    c.addi4spn x8, x2, x9
diff --git a/gas/testsuite/gas/riscv/zc-zca-addi4spn-rv32-fail.d b/gas/testsuite/gas/riscv/zc-zca-addi4spn-rv32-fail.d
new file mode 100644
index 00000000000..7c193bf61a7
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-addi4spn-rv32-fail.d
@@ -0,0 +1,3 @@
+#as: -march=rv32ifd_zca
+#source: zc-zca-addi4spn-fail.s
+#error_output: zc-zca-addi4spn-rv32-fail.l
diff --git a/gas/testsuite/gas/riscv/zc-zca-addi4spn-rv32-fail.l b/gas/testsuite/gas/riscv/zc-zca-addi4spn-rv32-fail.l
new file mode 100644
index 00000000000..bb377a43039
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-addi4spn-rv32-fail.l
@@ -0,0 +1,19 @@
+.*: Assembler messages:
+.*: Error: illegal operands `c.addi4spn'
+.*: Error: illegal operands `c.addi4spn ,,'
+.*: Error: illegal operands `c.addi4spn ,x2,4'
+.*: Error: illegal operands `c.addi4spn x8,,4'
+.*: Error: illegal operands `c.addi4spn x8,x2,'
+.*: Error: illegal operands `c.addi4spn x7,x2,4'
+.*: Error: illegal operands `c.addi4spn x16,x2,4'
+.*: Error: illegal operands `c.addi4spn 4,x2,4'
+.*: Error: illegal operands `c.addi4spn x8,x1,4'
+.*: Error: illegal operands `c.addi4spn x8,4,4'
+.*: Error: illegal operands `c.addi4spn x8,x3,4'
+.*: Error: illegal operands `c.addi4spn x8,x2,0'
+.*: Error: illegal operands `c.addi4spn x8,x2,3'
+.*: Error: illegal operands `c.addi4spn x8,x2,4.0'
+.*: Error: illegal operands `c.addi4spn x8,x2,5'
+.*: Error: illegal operands `c.addi4spn x8,x2,1023'
+.*: Error: illegal operands `c.addi4spn x8,x2,1024'
+.*: Error: illegal operands `c.addi4spn x8,x2,x9'
diff --git a/gas/testsuite/gas/riscv/zc-zca-addi4spn-rv32.d b/gas/testsuite/gas/riscv/zc-zca-addi4spn-rv32.d
new file mode 100644
index 00000000000..f9536b26db4
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-addi4spn-rv32.d
@@ -0,0 +1,13 @@
+#as: -march=rv32ifd_zca
+#source: zc-zca-addi4spn.s
+#objdump: -d -Mno-aliases
+
+.*:[ 	]+file format .*
+
+
+Disassembly of section .text:
+
+0+000 <target>:
+[ 	]+0:[ 	]+0040[ 	]+c.addi4spn[ 	]+s0,sp,4
+[ 	]+2:[ 	]+1888[ 	]+c.addi4spn[ 	]+a0,sp,112
+[ 	]+4:[ 	]+1ffc[ 	]+c.addi4spn[ 	]+a5,sp,1020
diff --git a/gas/testsuite/gas/riscv/zc-zca-addi4spn-rv64-fail.d b/gas/testsuite/gas/riscv/zc-zca-addi4spn-rv64-fail.d
new file mode 100644
index 00000000000..86b486b0392
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-addi4spn-rv64-fail.d
@@ -0,0 +1,3 @@
+#as: -march=rv64ifd_zca
+#source: zc-zca-addi4spn-fail.s
+#error_output: zc-zca-addi4spn-rv64-fail.l
diff --git a/gas/testsuite/gas/riscv/zc-zca-addi4spn-rv64-fail.l b/gas/testsuite/gas/riscv/zc-zca-addi4spn-rv64-fail.l
new file mode 100644
index 00000000000..bb377a43039
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-addi4spn-rv64-fail.l
@@ -0,0 +1,19 @@
+.*: Assembler messages:
+.*: Error: illegal operands `c.addi4spn'
+.*: Error: illegal operands `c.addi4spn ,,'
+.*: Error: illegal operands `c.addi4spn ,x2,4'
+.*: Error: illegal operands `c.addi4spn x8,,4'
+.*: Error: illegal operands `c.addi4spn x8,x2,'
+.*: Error: illegal operands `c.addi4spn x7,x2,4'
+.*: Error: illegal operands `c.addi4spn x16,x2,4'
+.*: Error: illegal operands `c.addi4spn 4,x2,4'
+.*: Error: illegal operands `c.addi4spn x8,x1,4'
+.*: Error: illegal operands `c.addi4spn x8,4,4'
+.*: Error: illegal operands `c.addi4spn x8,x3,4'
+.*: Error: illegal operands `c.addi4spn x8,x2,0'
+.*: Error: illegal operands `c.addi4spn x8,x2,3'
+.*: Error: illegal operands `c.addi4spn x8,x2,4.0'
+.*: Error: illegal operands `c.addi4spn x8,x2,5'
+.*: Error: illegal operands `c.addi4spn x8,x2,1023'
+.*: Error: illegal operands `c.addi4spn x8,x2,1024'
+.*: Error: illegal operands `c.addi4spn x8,x2,x9'
diff --git a/gas/testsuite/gas/riscv/zc-zca-addi4spn-rv64.d b/gas/testsuite/gas/riscv/zc-zca-addi4spn-rv64.d
new file mode 100644
index 00000000000..24101ed1f2e
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-addi4spn-rv64.d
@@ -0,0 +1,13 @@
+#as: -march=rv64ifd_zca
+#source: zc-zca-addi4spn.s
+#objdump: -d -Mno-aliases
+
+.*:[ 	]+file format .*
+
+
+Disassembly of section .text:
+
+0+000 <target>:
+[ 	]+0:[ 	]+0040[ 	]+c.addi4spn[ 	]+s0,sp,4
+[ 	]+2:[ 	]+1888[ 	]+c.addi4spn[ 	]+a0,sp,112
+[ 	]+4:[ 	]+1ffc[ 	]+c.addi4spn[ 	]+a5,sp,1020
diff --git a/gas/testsuite/gas/riscv/zc-zca-addi4spn.s b/gas/testsuite/gas/riscv/zc-zca-addi4spn.s
new file mode 100644
index 00000000000..ced11e6369a
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-addi4spn.s
@@ -0,0 +1,4 @@
+target:
+    c.addi4spn x8, x2, 4
+    c.addi4spn x10, x2, 112
+    c.addi4spn x15, x2, 1020
diff --git a/gas/testsuite/gas/riscv/zc-zca-addiw-fail.s b/gas/testsuite/gas/riscv/zc-zca-addiw-fail.s
new file mode 100644
index 00000000000..2851c1593de
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-addiw-fail.s
@@ -0,0 +1,11 @@
+target:
+    c.addiw
+    c.addiw , 0
+    c.addiw x1,
+
+    c.addiw 1, 0
+    c.addiw x0, 0
+    c.addiw x1, -33
+    c.addiw x1, 32
+    c.addiw x1, 0.0
+    c.addiw x1, x8
diff --git a/gas/testsuite/gas/riscv/zc-zca-addiw-rv64-fail.d b/gas/testsuite/gas/riscv/zc-zca-addiw-rv64-fail.d
new file mode 100644
index 00000000000..4c51556cc5e
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-addiw-rv64-fail.d
@@ -0,0 +1,3 @@
+#as: -march=rv64ifd_zca
+#source: zc-zca-addiw-fail.s
+#error_output: zc-zca-addiw-rv64-fail.l
diff --git a/gas/testsuite/gas/riscv/zc-zca-addiw-rv64-fail.l b/gas/testsuite/gas/riscv/zc-zca-addiw-rv64-fail.l
new file mode 100644
index 00000000000..2289036463c
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-addiw-rv64-fail.l
@@ -0,0 +1,10 @@
+.*: Assembler messages:
+.*: Error: illegal operands `c.addiw'
+.*: Error: illegal operands `c.addiw ,0'
+.*: Error: illegal operands `c.addiw x1,'
+.*: Error: illegal operands `c.addiw 1,0'
+.*: Error: illegal operands `c.addiw x0,0'
+.*: Error: illegal operands `c.addiw x1,-33'
+.*: Error: illegal operands `c.addiw x1,32'
+.*: Error: illegal operands `c.addiw x1,0.0'
+.*: Error: illegal operands `c.addiw x1,x8'
diff --git a/gas/testsuite/gas/riscv/zc-zca-addiw-rv64.d b/gas/testsuite/gas/riscv/zc-zca-addiw-rv64.d
new file mode 100644
index 00000000000..a22a04dbe86
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-addiw-rv64.d
@@ -0,0 +1,17 @@
+#as: -march=rv64ifd_zca
+#source: zc-zca-addiw.s
+#objdump: -d -Mno-aliases
+
+.*:[ 	]+file format .*
+
+
+Disassembly of section .text:
+
+0+000 <target>:
+[ 	]+0:[ 	]+3081[ 	]+c.addiw[ 	]+ra,-32
+[ 	]+2:[ 	]+2101[ 	]+c.addiw[ 	]+sp,0
+[ 	]+4:[ 	]+21fd[ 	]+c.addiw[ 	]+gp,31
+[ 	]+6:[ 	]+3245[ 	]+c.addiw[ 	]+tp,-15+.*
+[ 	]+8:[ 	]+34fd[ 	]+c.addiw[ 	]+s1,-1
+[ 	]+a:[ 	]+2505[ 	]+c.addiw[ 	]+a0,1
+[ 	]+c:[ 	]+2fc1[ 	]+c.addiw[ 	]+t6,16
diff --git a/gas/testsuite/gas/riscv/zc-zca-addiw.s b/gas/testsuite/gas/riscv/zc-zca-addiw.s
new file mode 100644
index 00000000000..5f3177f51fc
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-addiw.s
@@ -0,0 +1,8 @@
+target:
+    c.addiw x1, -32
+    c.addiw x2, 0
+    c.addiw x3, 31
+    c.addiw x4, -15
+    c.addiw x9, -1
+    c.addiw x10, 1
+    c.addiw x31, 16
diff --git a/gas/testsuite/gas/riscv/zc-zca-and-fail.s b/gas/testsuite/gas/riscv/zc-zca-and-fail.s
new file mode 100644
index 00000000000..4c0d8e621cf
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-and-fail.s
@@ -0,0 +1,14 @@
+target:
+    c.and
+    c.and ,
+    c.and , x8
+    c.and x8,
+    c.and , ,
+
+    c.and x7, x8
+    c.and x16, x8
+    c.and 3, x8
+
+    c.and x8, x7
+    c.and x8, x16
+    c.and x8, 3
diff --git a/gas/testsuite/gas/riscv/zc-zca-and-rv32-fail.d b/gas/testsuite/gas/riscv/zc-zca-and-rv32-fail.d
new file mode 100644
index 00000000000..011f214d167
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-and-rv32-fail.d
@@ -0,0 +1,3 @@
+#as: -march=rv32ifd_zca
+#source: zc-zca-and-fail.s
+#error_output: zc-zca-and-rv32-fail.l
diff --git a/gas/testsuite/gas/riscv/zc-zca-and-rv32-fail.l b/gas/testsuite/gas/riscv/zc-zca-and-rv32-fail.l
new file mode 100644
index 00000000000..170c799dff0
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-and-rv32-fail.l
@@ -0,0 +1,12 @@
+.*: Assembler messages:
+.*: Error: illegal operands `c.and'
+.*: Error: illegal operands `c.and ,'
+.*: Error: illegal operands `c.and ,x8'
+.*: Error: illegal operands `c.and x8,'
+.*: Error: illegal operands `c.and ,,'
+.*: Error: illegal operands `c.and x7,x8'
+.*: Error: illegal operands `c.and x16,x8'
+.*: Error: illegal operands `c.and 3,x8'
+.*: Error: illegal operands `c.and x8,x7'
+.*: Error: illegal operands `c.and x8,x16'
+.*: Error: illegal operands `c.and x8,3'
diff --git a/gas/testsuite/gas/riscv/zc-zca-and-rv32.d b/gas/testsuite/gas/riscv/zc-zca-and-rv32.d
new file mode 100644
index 00000000000..34a3f3aa088
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-and-rv32.d
@@ -0,0 +1,14 @@
+#as: -march=rv32ifd_zca
+#source: zc-zca-and.s
+#objdump: -d -Mno-aliases
+
+.*:[ 	]+file format .*
+
+
+Disassembly of section .text:
+
+0+000 <target>:
+[ 	]+0:[ 	]+8c65[ 	]+c.and[ 	]+s0,s1
+[ 	]+2:[ 	]+8d6d[ 	]+c.and[ 	]+a0,a1
+[ 	]+4:[ 	]+8ffd[ 	]+c.and[ 	]+a5,a5
+[ 	]+6:[ 	]+00a4f433[ 	]+and[ 	]+s0,s1,a0
diff --git a/gas/testsuite/gas/riscv/zc-zca-and-rv64-fail.d b/gas/testsuite/gas/riscv/zc-zca-and-rv64-fail.d
new file mode 100644
index 00000000000..5a181f7feea
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-and-rv64-fail.d
@@ -0,0 +1,3 @@
+#as: -march=rv64ifd_zca
+#source: zc-zca-and-fail.s
+#error_output: zc-zca-and-rv64-fail.l
diff --git a/gas/testsuite/gas/riscv/zc-zca-and-rv64-fail.l b/gas/testsuite/gas/riscv/zc-zca-and-rv64-fail.l
new file mode 100644
index 00000000000..170c799dff0
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-and-rv64-fail.l
@@ -0,0 +1,12 @@
+.*: Assembler messages:
+.*: Error: illegal operands `c.and'
+.*: Error: illegal operands `c.and ,'
+.*: Error: illegal operands `c.and ,x8'
+.*: Error: illegal operands `c.and x8,'
+.*: Error: illegal operands `c.and ,,'
+.*: Error: illegal operands `c.and x7,x8'
+.*: Error: illegal operands `c.and x16,x8'
+.*: Error: illegal operands `c.and 3,x8'
+.*: Error: illegal operands `c.and x8,x7'
+.*: Error: illegal operands `c.and x8,x16'
+.*: Error: illegal operands `c.and x8,3'
diff --git a/gas/testsuite/gas/riscv/zc-zca-and-rv64.d b/gas/testsuite/gas/riscv/zc-zca-and-rv64.d
new file mode 100644
index 00000000000..2e3ffb814d6
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-and-rv64.d
@@ -0,0 +1,14 @@
+#as: -march=rv64ifd_zca
+#source: zc-zca-and.s
+#objdump: -d -Mno-aliases
+
+.*:[ 	]+file format .*
+
+
+Disassembly of section .text:
+
+0+000 <target>:
+[ 	]+0:[ 	]+8c65[ 	]+c.and[ 	]+s0,s1
+[ 	]+2:[ 	]+8d6d[ 	]+c.and[ 	]+a0,a1
+[ 	]+4:[ 	]+8ffd[ 	]+c.and[ 	]+a5,a5
+[ 	]+6:[ 	]+00a4f433[ 	]+and[ 	]+s0,s1,a0
diff --git a/gas/testsuite/gas/riscv/zc-zca-and.s b/gas/testsuite/gas/riscv/zc-zca-and.s
new file mode 100644
index 00000000000..6bc283f6231
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-and.s
@@ -0,0 +1,5 @@
+target:
+    c.and x8, x9
+    c.and x10,x11
+    c.and x15,x15
+    and x8,x9,x10
diff --git a/gas/testsuite/gas/riscv/zc-zca-andi-fail.s b/gas/testsuite/gas/riscv/zc-zca-andi-fail.s
new file mode 100644
index 00000000000..d5570c1bcdd
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-andi-fail.s
@@ -0,0 +1,14 @@
+target:
+    c.andi
+    c.andi ,
+    c.andi , x8
+    c.andi x8,
+    c.andi , ,
+
+    c.andi x7, 1
+    c.andi x16, 1
+    c.andi 3, 1
+
+    c.andi x8, -33
+    c.andi x8, 32
+    c.andi x8, x9
diff --git a/gas/testsuite/gas/riscv/zc-zca-andi-rv32-fail.d b/gas/testsuite/gas/riscv/zc-zca-andi-rv32-fail.d
new file mode 100644
index 00000000000..3c21bcc5e52
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-andi-rv32-fail.d
@@ -0,0 +1,3 @@
+#as: -march=rv32ifd_zca
+#source: zc-zca-andi-fail.s
+#error_output: zc-zca-andi-rv32-fail.l
diff --git a/gas/testsuite/gas/riscv/zc-zca-andi-rv32-fail.l b/gas/testsuite/gas/riscv/zc-zca-andi-rv32-fail.l
new file mode 100644
index 00000000000..9b05f45c777
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-andi-rv32-fail.l
@@ -0,0 +1,12 @@
+.*: Assembler messages:
+.*: Error: illegal operands `c.andi'
+.*: Error: illegal operands `c.andi ,'
+.*: Error: illegal operands `c.andi ,x8'
+.*: Error: illegal operands `c.andi x8,'
+.*: Error: illegal operands `c.andi ,,'
+.*: Error: illegal operands `c.andi x7,1'
+.*: Error: illegal operands `c.andi x16,1'
+.*: Error: illegal operands `c.andi 3,1'
+.*: Error: illegal operands `c.andi x8,-33'
+.*: Error: illegal operands `c.andi x8,32'
+.*: Error: illegal operands `c.andi x8,x9'
diff --git a/gas/testsuite/gas/riscv/zc-zca-andi-rv32.d b/gas/testsuite/gas/riscv/zc-zca-andi-rv32.d
new file mode 100644
index 00000000000..b54234553d8
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-andi-rv32.d
@@ -0,0 +1,14 @@
+#as: -march=rv32ifd_zca
+#source: zc-zca-andi.s
+#objdump: -d -Mno-aliases
+
+.*:[ 	]+file format .*
+
+
+Disassembly of section .text:
+
+0+000 <target>:
+[ 	]+0:[ 	]+9801[ 	]+c.andi[ 	]+s0,-32
+[ 	]+2:[ 	]+8901[ 	]+c.andi[ 	]+a0,0
+[ 	]+4:[ 	]+8bfd[ 	]+c.andi[ 	]+a5,31
+[ 	]+6:[ 	]+01f4f413[ 	]+andi[ 	]+s0,s1,31
diff --git a/gas/testsuite/gas/riscv/zc-zca-andi-rv64-fail.d b/gas/testsuite/gas/riscv/zc-zca-andi-rv64-fail.d
new file mode 100644
index 00000000000..ad32ad1f35a
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-andi-rv64-fail.d
@@ -0,0 +1,3 @@
+#as: -march=rv64ifd_zca
+#source: zc-zca-andi-fail.s
+#error_output: zc-zca-andi-rv64-fail.l
diff --git a/gas/testsuite/gas/riscv/zc-zca-andi-rv64-fail.l b/gas/testsuite/gas/riscv/zc-zca-andi-rv64-fail.l
new file mode 100644
index 00000000000..9b05f45c777
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-andi-rv64-fail.l
@@ -0,0 +1,12 @@
+.*: Assembler messages:
+.*: Error: illegal operands `c.andi'
+.*: Error: illegal operands `c.andi ,'
+.*: Error: illegal operands `c.andi ,x8'
+.*: Error: illegal operands `c.andi x8,'
+.*: Error: illegal operands `c.andi ,,'
+.*: Error: illegal operands `c.andi x7,1'
+.*: Error: illegal operands `c.andi x16,1'
+.*: Error: illegal operands `c.andi 3,1'
+.*: Error: illegal operands `c.andi x8,-33'
+.*: Error: illegal operands `c.andi x8,32'
+.*: Error: illegal operands `c.andi x8,x9'
diff --git a/gas/testsuite/gas/riscv/zc-zca-andi-rv64.d b/gas/testsuite/gas/riscv/zc-zca-andi-rv64.d
new file mode 100644
index 00000000000..526bb6a5549
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-andi-rv64.d
@@ -0,0 +1,14 @@
+#as: -march=rv64ifd_zca
+#source: zc-zca-andi.s
+#objdump: -d -Mno-aliases
+
+.*:[ 	]+file format .*
+
+
+Disassembly of section .text:
+
+0+000 <target>:
+[ 	]+0:[ 	]+9801[ 	]+c.andi[ 	]+s0,-32
+[ 	]+2:[ 	]+8901[ 	]+c.andi[ 	]+a0,0
+[ 	]+4:[ 	]+8bfd[ 	]+c.andi[ 	]+a5,31
+[ 	]+6:[ 	]+01f4f413[ 	]+andi[ 	]+s0,s1,31
diff --git a/gas/testsuite/gas/riscv/zc-zca-andi.s b/gas/testsuite/gas/riscv/zc-zca-andi.s
new file mode 100644
index 00000000000..9d170afa27f
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-andi.s
@@ -0,0 +1,5 @@
+target:
+    c.andi x8, -32
+    c.andi x10,0
+    c.andi x15,31
+    andi x8,x9,31
diff --git a/gas/testsuite/gas/riscv/zc-zca-beqz-fail.s b/gas/testsuite/gas/riscv/zc-zca-beqz-fail.s
new file mode 100644
index 00000000000..10d25c2bf7d
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-beqz-fail.s
@@ -0,0 +1,9 @@
+target:
+    c.beqz
+    c.beqz , target
+    c.beqz x8, 2.1
+
+    c.beqz x1, target
+    c.beqz x7, target
+    c.beqz x16, target
+    c.beqz x31, target
diff --git a/gas/testsuite/gas/riscv/zc-zca-beqz-rv32-fail.d b/gas/testsuite/gas/riscv/zc-zca-beqz-rv32-fail.d
new file mode 100644
index 00000000000..717c0914e6e
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-beqz-rv32-fail.d
@@ -0,0 +1,3 @@
+#as: -march=rv32ifd_zca
+#source: zc-zca-beqz-fail.s
+#error_output: zc-zca-beqz-rv32-fail.l
\ No newline at end of file
diff --git a/gas/testsuite/gas/riscv/zc-zca-beqz-rv32-fail.l b/gas/testsuite/gas/riscv/zc-zca-beqz-rv32-fail.l
new file mode 100644
index 00000000000..0b027601e9a
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-beqz-rv32-fail.l
@@ -0,0 +1,8 @@
+.*: Assembler messages:
+.*: Error: illegal operands `c.beqz'
+.*: Error: illegal operands `c.beqz ,target'
+.*: Error: illegal operands `c.beqz x8,2.1'
+.*: Error: illegal operands `c.beqz x1,target'
+.*: Error: illegal operands `c.beqz x7,target'
+.*: Error: illegal operands `c.beqz x16,target'
+.*: Error: illegal operands `c.beqz x31,target'
\ No newline at end of file
diff --git a/gas/testsuite/gas/riscv/zc-zca-beqz-rv32.d b/gas/testsuite/gas/riscv/zc-zca-beqz-rv32.d
new file mode 100644
index 00000000000..27bff3f8714
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-beqz-rv32.d
@@ -0,0 +1,18 @@
+#as: -march=rv32ifd_zca
+#source: zc-zca-beqz.s
+#objdump: -d -Mno-aliases
+
+.*:[ 	]+file format .*
+
+
+Disassembly of section .text:
+
+0+000 <target>:
+[ 	]+0:[ 	]+c001[ 	]+c.beqz[ 	]+s0,0[ ]+\<target\>
+[ 	]+2:[ 	]+dcfd[ 	]+c.beqz[ 	]+s1,0[ ]+\<target\>
+[ 	]+4:[ 	]+dd75[ 	]+c.beqz[ 	]+a0,0[ ]+\<target\>
+[ 	]+6:[ 	]+dded[ 	]+c.beqz[ 	]+a1,0[ ]+\<target\>
+[ 	]+8:[ 	]+de65[ 	]+c.beqz[ 	]+a2,0[ ]+\<target\>
+[ 	]+a:[ 	]+dafd[ 	]+c.beqz[ 	]+a3,0[ ]+\<target\>
+[ 	]+c:[ 	]+db75[ 	]+c.beqz[ 	]+a4,0[ ]+\<target\>
+[ 	]+e:[ 	]+dbed[ 	]+c.beqz[ 	]+a5,0[ ]+\<target\>
diff --git a/gas/testsuite/gas/riscv/zc-zca-beqz-rv64-fail.d b/gas/testsuite/gas/riscv/zc-zca-beqz-rv64-fail.d
new file mode 100644
index 00000000000..52f73951cbc
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-beqz-rv64-fail.d
@@ -0,0 +1,3 @@
+#as: -march=rv64ifd_zca
+#source: zc-zca-beqz-fail.s
+#error_output: zc-zca-beqz-rv64-fail.l
\ No newline at end of file
diff --git a/gas/testsuite/gas/riscv/zc-zca-beqz-rv64-fail.l b/gas/testsuite/gas/riscv/zc-zca-beqz-rv64-fail.l
new file mode 100644
index 00000000000..3be0bafaaeb
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-beqz-rv64-fail.l
@@ -0,0 +1,8 @@
+.*: Assembler messages:
+.*: Error: illegal operands `c.beqz'
+.*: Error: illegal operands `c.beqz ,target'
+.*: Error: illegal operands `c.beqz x8,2.1'
+.*: Error: illegal operands `c.beqz x1,target'
+.*: Error: illegal operands `c.beqz x7,target'
+.*: Error: illegal operands `c.beqz x16,target'
+.*: Error: illegal operands `c.beqz x31,target'
diff --git a/gas/testsuite/gas/riscv/zc-zca-beqz-rv64.d b/gas/testsuite/gas/riscv/zc-zca-beqz-rv64.d
new file mode 100644
index 00000000000..86c560a7e9b
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-beqz-rv64.d
@@ -0,0 +1,18 @@
+#as: -march=rv64ifd_zca
+#source: zc-zca-beqz.s
+#objdump: -d -Mno-aliases
+
+.*:[ 	]+file format .*
+
+
+Disassembly of section .text:
+
+0+000 <target>:
+[ 	]+0:[ 	]+c001[ 	]+c.beqz[ 	]+s0,0[ ]+\<target\>
+[ 	]+2:[ 	]+dcfd[ 	]+c.beqz[ 	]+s1,0[ ]+\<target\>
+[ 	]+4:[ 	]+dd75[ 	]+c.beqz[ 	]+a0,0[ ]+\<target\>
+[ 	]+6:[ 	]+dded[ 	]+c.beqz[ 	]+a1,0[ ]+\<target\>
+[ 	]+8:[ 	]+de65[ 	]+c.beqz[ 	]+a2,0[ ]+\<target\>
+[ 	]+a:[ 	]+dafd[ 	]+c.beqz[ 	]+a3,0[ ]+\<target\>
+[ 	]+c:[ 	]+db75[ 	]+c.beqz[ 	]+a4,0[ ]+\<target\>
+[ 	]+e:[ 	]+dbed[ 	]+c.beqz[ 	]+a5,0[ ]+\<target\>
diff --git a/gas/testsuite/gas/riscv/zc-zca-beqz.s b/gas/testsuite/gas/riscv/zc-zca-beqz.s
new file mode 100644
index 00000000000..d5de14d4bc5
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-beqz.s
@@ -0,0 +1,9 @@
+target:
+    c.beqz x8, target
+    c.beqz x9, target
+    c.beqz x10, target
+    c.beqz x11, target
+    c.beqz x12, target
+    c.beqz x13, target
+    c.beqz x14, target
+    c.beqz x15, target
diff --git a/gas/testsuite/gas/riscv/zc-zca-bnez-fail.s b/gas/testsuite/gas/riscv/zc-zca-bnez-fail.s
new file mode 100644
index 00000000000..0a07996fc7d
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-bnez-fail.s
@@ -0,0 +1,9 @@
+target:
+    c.bnez
+    c.bnez , target
+    c.bnez x8, 2.1
+
+    c.bnez x1, target
+    c.bnez x7, target
+    c.bnez x16, target
+    c.bnez x31, target
diff --git a/gas/testsuite/gas/riscv/zc-zca-bnez-rv32-fail.d b/gas/testsuite/gas/riscv/zc-zca-bnez-rv32-fail.d
new file mode 100644
index 00000000000..bc1ba5b4589
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-bnez-rv32-fail.d
@@ -0,0 +1,3 @@
+#as: -march=rv32ifd_zca
+#source: zc-zca-bnez-fail.s
+#error_output: zc-zca-bnez-rv32-fail.l
\ No newline at end of file
diff --git a/gas/testsuite/gas/riscv/zc-zca-bnez-rv32-fail.l b/gas/testsuite/gas/riscv/zc-zca-bnez-rv32-fail.l
new file mode 100644
index 00000000000..0ee813904cc
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-bnez-rv32-fail.l
@@ -0,0 +1,8 @@
+.*: Assembler messages:
+.*: Error: illegal operands `c.bnez'
+.*: Error: illegal operands `c.bnez ,target'
+.*: Error: illegal operands `c.bnez x8,2.1'
+.*: Error: illegal operands `c.bnez x1,target'
+.*: Error: illegal operands `c.bnez x7,target'
+.*: Error: illegal operands `c.bnez x16,target'
+.*: Error: illegal operands `c.bnez x31,target'
diff --git a/gas/testsuite/gas/riscv/zc-zca-bnez-rv32.d b/gas/testsuite/gas/riscv/zc-zca-bnez-rv32.d
new file mode 100644
index 00000000000..de0054c8821
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-bnez-rv32.d
@@ -0,0 +1,18 @@
+#as: -march=rv32ifd_zca
+#source: zc-zca-bnez.s
+#objdump: -d -Mno-aliases
+
+.*:[ 	]+file format .*
+
+
+Disassembly of section .text:
+
+0+000 <target>:
+[ 	]+0:[ 	]+e001[ 	]+c.bnez[ 	]+s0,0[ ]+\<target\>
+[ 	]+2:[ 	]+fcfd[ 	]+c.bnez[ 	]+s1,0[ ]+\<target\>
+[ 	]+4:[ 	]+fd75[ 	]+c.bnez[ 	]+a0,0[ ]+\<target\>
+[ 	]+6:[ 	]+fded[ 	]+c.bnez[ 	]+a1,0[ ]+\<target\>
+[ 	]+8:[ 	]+fe65[ 	]+c.bnez[ 	]+a2,0[ ]+\<target\>
+[ 	]+a:[ 	]+fafd[ 	]+c.bnez[ 	]+a3,0[ ]+\<target\>
+[ 	]+c:[ 	]+fb75[ 	]+c.bnez[ 	]+a4,0[ ]+\<target\>
+[ 	]+e:[ 	]+fbed[ 	]+c.bnez[ 	]+a5,0[ ]+\<target\>
diff --git a/gas/testsuite/gas/riscv/zc-zca-bnez-rv64-fail.d b/gas/testsuite/gas/riscv/zc-zca-bnez-rv64-fail.d
new file mode 100644
index 00000000000..ac915ad5f27
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-bnez-rv64-fail.d
@@ -0,0 +1,3 @@
+#as: -march=rv64ifd_zca
+#source: zc-zca-bnez-fail.s
+#error_output: zc-zca-bnez-rv64-fail.l
\ No newline at end of file
diff --git a/gas/testsuite/gas/riscv/zc-zca-bnez-rv64-fail.l b/gas/testsuite/gas/riscv/zc-zca-bnez-rv64-fail.l
new file mode 100644
index 00000000000..0ee813904cc
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-bnez-rv64-fail.l
@@ -0,0 +1,8 @@
+.*: Assembler messages:
+.*: Error: illegal operands `c.bnez'
+.*: Error: illegal operands `c.bnez ,target'
+.*: Error: illegal operands `c.bnez x8,2.1'
+.*: Error: illegal operands `c.bnez x1,target'
+.*: Error: illegal operands `c.bnez x7,target'
+.*: Error: illegal operands `c.bnez x16,target'
+.*: Error: illegal operands `c.bnez x31,target'
diff --git a/gas/testsuite/gas/riscv/zc-zca-bnez-rv64.d b/gas/testsuite/gas/riscv/zc-zca-bnez-rv64.d
new file mode 100644
index 00000000000..b9e56880289
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-bnez-rv64.d
@@ -0,0 +1,18 @@
+#as: -march=rv64ifd_zca
+#source: zc-zca-bnez.s
+#objdump: -d -Mno-aliases
+
+.*:[ 	]+file format .*
+
+
+Disassembly of section .text:
+
+0+000 <target>:
+[ 	]+0:[ 	]+e001[ 	]+c.bnez[ 	]+s0,0[ ]+\<target\>
+[ 	]+2:[ 	]+fcfd[ 	]+c.bnez[ 	]+s1,0[ ]+\<target\>
+[ 	]+4:[ 	]+fd75[ 	]+c.bnez[ 	]+a0,0[ ]+\<target\>
+[ 	]+6:[ 	]+fded[ 	]+c.bnez[ 	]+a1,0[ ]+\<target\>
+[ 	]+8:[ 	]+fe65[ 	]+c.bnez[ 	]+a2,0[ ]+\<target\>
+[ 	]+a:[ 	]+fafd[ 	]+c.bnez[ 	]+a3,0[ ]+\<target\>
+[ 	]+c:[ 	]+fb75[ 	]+c.bnez[ 	]+a4,0[ ]+\<target\>
+[ 	]+e:[ 	]+fbed[ 	]+c.bnez[ 	]+a5,0[ ]+\<target\>
diff --git a/gas/testsuite/gas/riscv/zc-zca-bnez.s b/gas/testsuite/gas/riscv/zc-zca-bnez.s
new file mode 100644
index 00000000000..94276e078fb
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-bnez.s
@@ -0,0 +1,9 @@
+target:
+    c.bnez x8, target
+    c.bnez x9, target
+    c.bnez x10, target
+    c.bnez x11, target
+    c.bnez x12, target
+    c.bnez x13, target
+    c.bnez x14, target
+    c.bnez x15, target
diff --git a/gas/testsuite/gas/riscv/zc-zca-ebreak-fail.s b/gas/testsuite/gas/riscv/zc-zca-ebreak-fail.s
new file mode 100644
index 00000000000..9ab36777585
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-ebreak-fail.s
@@ -0,0 +1,3 @@
+target:
+    c.ebreak f
+    c.ebreak s0
diff --git a/gas/testsuite/gas/riscv/zc-zca-ebreak-rv32-fail.d b/gas/testsuite/gas/riscv/zc-zca-ebreak-rv32-fail.d
new file mode 100644
index 00000000000..ba59c441ec5
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-ebreak-rv32-fail.d
@@ -0,0 +1,3 @@
+#as: -march=rv32ifd_zca
+#source: zc-zca-ebreak-fail.s
+#error_output: zc-zca-ebreak-rv32-fail.l
\ No newline at end of file
diff --git a/gas/testsuite/gas/riscv/zc-zca-ebreak-rv32-fail.l b/gas/testsuite/gas/riscv/zc-zca-ebreak-rv32-fail.l
new file mode 100644
index 00000000000..75c2f7432a0
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-ebreak-rv32-fail.l
@@ -0,0 +1,3 @@
+.*: Assembler messages:
+.*: Error: illegal operands `c.ebreak f'
+.*: Error: illegal operands `c.ebreak s0'
\ No newline at end of file
diff --git a/gas/testsuite/gas/riscv/zc-zca-ebreak-rv64-fail.d b/gas/testsuite/gas/riscv/zc-zca-ebreak-rv64-fail.d
new file mode 100644
index 00000000000..c982b80f456
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-ebreak-rv64-fail.d
@@ -0,0 +1,3 @@
+#as: -march=rv64ifd_zca
+#source: zc-zca-ebreak-fail.s
+#error_output: zc-zca-ebreak-rv64-fail.l
\ No newline at end of file
diff --git a/gas/testsuite/gas/riscv/zc-zca-ebreak-rv64-fail.l b/gas/testsuite/gas/riscv/zc-zca-ebreak-rv64-fail.l
new file mode 100644
index 00000000000..75c2f7432a0
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-ebreak-rv64-fail.l
@@ -0,0 +1,3 @@
+.*: Assembler messages:
+.*: Error: illegal operands `c.ebreak f'
+.*: Error: illegal operands `c.ebreak s0'
\ No newline at end of file
diff --git a/gas/testsuite/gas/riscv/zc-zca-j-fail.s b/gas/testsuite/gas/riscv/zc-zca-j-fail.s
new file mode 100644
index 00000000000..f548f883015
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-j-fail.s
@@ -0,0 +1,2 @@
+target:
+    c.j 2046.1
diff --git a/gas/testsuite/gas/riscv/zc-zca-j-rv32-fail.d b/gas/testsuite/gas/riscv/zc-zca-j-rv32-fail.d
new file mode 100644
index 00000000000..e9b825da65f
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-j-rv32-fail.d
@@ -0,0 +1,3 @@
+#as: -march=rv32ifd_zca
+#source: zc-zca-j-fail.s
+#error_output: zc-zca-j-rv32-fail.l
\ No newline at end of file
diff --git a/gas/testsuite/gas/riscv/zc-zca-j-rv32-fail.l b/gas/testsuite/gas/riscv/zc-zca-j-rv32-fail.l
new file mode 100644
index 00000000000..dd39cfaf79a
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-j-rv32-fail.l
@@ -0,0 +1,2 @@
+.*: Assembler messages:
+.*: Error: illegal operands `c.j 2046.1'
\ No newline at end of file
diff --git a/gas/testsuite/gas/riscv/zc-zca-j-rv32.d b/gas/testsuite/gas/riscv/zc-zca-j-rv32.d
new file mode 100644
index 00000000000..89706069630
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-j-rv32.d
@@ -0,0 +1,11 @@
+#as: -march=rv32ifd_zca
+#source: zc-zca-j.s
+#objdump: -d -Mno-aliases
+
+.*:[ 	]+file format .*
+
+
+Disassembly of section .text:
+
+0+000 <target>:
+[ 	]+0:[ 	]+a001[ 	]+c.j[ 	]+0[ ]+\<target\>
\ No newline at end of file
diff --git a/gas/testsuite/gas/riscv/zc-zca-j-rv64-fail.d b/gas/testsuite/gas/riscv/zc-zca-j-rv64-fail.d
new file mode 100644
index 00000000000..abefad6f102
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-j-rv64-fail.d
@@ -0,0 +1,3 @@
+#as: -march=rv64ifd_zca
+#source: zc-zca-j-fail.s
+#error_output: zc-zca-j-rv64-fail.l
\ No newline at end of file
diff --git a/gas/testsuite/gas/riscv/zc-zca-j-rv64-fail.l b/gas/testsuite/gas/riscv/zc-zca-j-rv64-fail.l
new file mode 100644
index 00000000000..e1822cf3f0a
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-j-rv64-fail.l
@@ -0,0 +1,2 @@
+.*: Assembler messages:
+.*: Error: illegal operands `c.j 2046.1'
diff --git a/gas/testsuite/gas/riscv/zc-zca-j-rv64.d b/gas/testsuite/gas/riscv/zc-zca-j-rv64.d
new file mode 100644
index 00000000000..283c49a547f
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-j-rv64.d
@@ -0,0 +1,11 @@
+#as: -march=rv64ifd_zca
+#source: zc-zca-j.s
+#objdump: -d -Mno-aliases
+
+.*:[ 	]+file format .*
+
+
+Disassembly of section .text:
+
+0+000 <target>:
+[ 	]+0:[ 	]+a001[ 	]+c.j[ 	]+0[ ]+\<target\>
\ No newline at end of file
diff --git a/gas/testsuite/gas/riscv/zc-zca-j.s b/gas/testsuite/gas/riscv/zc-zca-j.s
new file mode 100644
index 00000000000..3f64002ba49
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-j.s
@@ -0,0 +1,2 @@
+target:
+    c.j target
diff --git a/gas/testsuite/gas/riscv/zc-zca-jalr-fail.s b/gas/testsuite/gas/riscv/zc-zca-jalr-fail.s
new file mode 100644
index 00000000000..d28fc8ad7dd
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-jalr-fail.s
@@ -0,0 +1,4 @@
+target:
+    c.jalr zero
+    c.jalr 2
+    c.jalr
diff --git a/gas/testsuite/gas/riscv/zc-zca-jalr-rv32-fail.d b/gas/testsuite/gas/riscv/zc-zca-jalr-rv32-fail.d
new file mode 100644
index 00000000000..96c11f1c812
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-jalr-rv32-fail.d
@@ -0,0 +1,3 @@
+#as: -march=rv32ifd_zca
+#source: zc-zca-jalr-fail.s
+#error_output: zc-zca-jalr-rv32-fail.l
\ No newline at end of file
diff --git a/gas/testsuite/gas/riscv/zc-zca-jalr-rv32-fail.l b/gas/testsuite/gas/riscv/zc-zca-jalr-rv32-fail.l
new file mode 100644
index 00000000000..f2188e3e0c7
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-jalr-rv32-fail.l
@@ -0,0 +1,4 @@
+.*: Assembler messages:
+.*: Error: illegal operands `c.jalr zero'
+.*: Error: illegal operands `c.jalr 2'
+.*: Error: illegal operands `c.jalr'
\ No newline at end of file
diff --git a/gas/testsuite/gas/riscv/zc-zca-jalr-rv32.d b/gas/testsuite/gas/riscv/zc-zca-jalr-rv32.d
new file mode 100644
index 00000000000..18033f46049
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-jalr-rv32.d
@@ -0,0 +1,20 @@
+#as: -march=rv32ifd_zca
+#source: zc-zca-jalr.s
+#objdump: -d -Mno-aliases
+
+.*:[ 	]+file format .*
+
+
+Disassembly of section .text:
+
+0+000 <target>:
+[ 	]+0:[ 	]+9502[ 	]+c.jalr[ 	]+a0
+[ 	]+2:[ 	]+9082[ 	]+c.jalr[ 	]+ra
+[ 	]+4:[ 	]+9102[ 	]+c.jalr[ 	]+sp
+[ 	]+6:[ 	]+9182[ 	]+c.jalr[ 	]+gp
+[ 	]+8:[ 	]+9202[ 	]+c.jalr[ 	]+tp
+[ 	]+a:[ 	]+9282[ 	]+c.jalr[ 	]+t0
+[ 	]+c:[ 	]+9402[ 	]+c.jalr[ 	]+s0
+[ 	]+e:[ 	]+9882[ 	]+c.jalr[ 	]+a7
+[ 	]+10:[ 	]+9d82[ 	]+c.jalr[ 	]+s11
+[ 	]+12:[ 	]+9f82[ 	]+c.jalr[ 	]+t6
diff --git a/gas/testsuite/gas/riscv/zc-zca-jalr-rv64-fail.d b/gas/testsuite/gas/riscv/zc-zca-jalr-rv64-fail.d
new file mode 100644
index 00000000000..6a04b40142b
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-jalr-rv64-fail.d
@@ -0,0 +1,3 @@
+#as: -march=rv64ifd_zca
+#source: zc-zca-jalr-fail.s
+#error_output: zc-zca-jalr-rv64-fail.l
\ No newline at end of file
diff --git a/gas/testsuite/gas/riscv/zc-zca-jalr-rv64-fail.l b/gas/testsuite/gas/riscv/zc-zca-jalr-rv64-fail.l
new file mode 100644
index 00000000000..f2188e3e0c7
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-jalr-rv64-fail.l
@@ -0,0 +1,4 @@
+.*: Assembler messages:
+.*: Error: illegal operands `c.jalr zero'
+.*: Error: illegal operands `c.jalr 2'
+.*: Error: illegal operands `c.jalr'
\ No newline at end of file
diff --git a/gas/testsuite/gas/riscv/zc-zca-jalr-rv64.d b/gas/testsuite/gas/riscv/zc-zca-jalr-rv64.d
new file mode 100644
index 00000000000..a8ee14eefa2
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-jalr-rv64.d
@@ -0,0 +1,20 @@
+#as: -march=rv64ifd_zca
+#source: zc-zca-jalr.s
+#objdump: -d -Mno-aliases
+
+.*:[ 	]+file format .*
+
+
+Disassembly of section .text:
+
+0+000 <target>:
+[ 	]+0:[ 	]+9502[ 	]+c.jalr[ 	]+a0
+[ 	]+2:[ 	]+9082[ 	]+c.jalr[ 	]+ra
+[ 	]+4:[ 	]+9102[ 	]+c.jalr[ 	]+sp
+[ 	]+6:[ 	]+9182[ 	]+c.jalr[ 	]+gp
+[ 	]+8:[ 	]+9202[ 	]+c.jalr[ 	]+tp
+[ 	]+a:[ 	]+9282[ 	]+c.jalr[ 	]+t0
+[ 	]+c:[ 	]+9402[ 	]+c.jalr[ 	]+s0
+[ 	]+e:[ 	]+9882[ 	]+c.jalr[ 	]+a7
+[ 	]+10:[ 	]+9d82[ 	]+c.jalr[ 	]+s11
+[ 	]+12:[ 	]+9f82[ 	]+c.jalr[ 	]+t6
diff --git a/gas/testsuite/gas/riscv/zc-zca-jalr.s b/gas/testsuite/gas/riscv/zc-zca-jalr.s
new file mode 100644
index 00000000000..a2dfc6c4453
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-jalr.s
@@ -0,0 +1,11 @@
+target:
+    c.jalr a0
+    c.jalr ra
+    c.jalr sp
+    c.jalr gp
+    c.jalr tp
+    c.jalr t0
+    c.jalr s0
+    c.jalr a7
+    c.jalr s11
+    c.jalr t6
diff --git a/gas/testsuite/gas/riscv/zc-zca-jr-fail.s b/gas/testsuite/gas/riscv/zc-zca-jr-fail.s
new file mode 100644
index 00000000000..cef4ef2b71b
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-jr-fail.s
@@ -0,0 +1,4 @@
+target:
+    c.jr zero
+    c.jr
+    c.jr 3
diff --git a/gas/testsuite/gas/riscv/zc-zca-jr-rv32-fail.d b/gas/testsuite/gas/riscv/zc-zca-jr-rv32-fail.d
new file mode 100644
index 00000000000..9117307998f
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-jr-rv32-fail.d
@@ -0,0 +1,3 @@
+#as: -march=rv32ifd_zca
+#source: zc-zca-jr-fail.s
+#error_output: zc-zca-jr-rv32-fail.l
\ No newline at end of file
diff --git a/gas/testsuite/gas/riscv/zc-zca-jr-rv32-fail.l b/gas/testsuite/gas/riscv/zc-zca-jr-rv32-fail.l
new file mode 100644
index 00000000000..6c434682f02
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-jr-rv32-fail.l
@@ -0,0 +1,4 @@
+.*: Assembler messages:
+.*: Error: illegal operands `c.jr zero'
+.*: Error: illegal operands `c.jr'
+.*: Error: illegal operands `c.jr 3'
\ No newline at end of file
diff --git a/gas/testsuite/gas/riscv/zc-zca-jr-rv32.d b/gas/testsuite/gas/riscv/zc-zca-jr-rv32.d
new file mode 100644
index 00000000000..1abdb8f2e6c
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-jr-rv32.d
@@ -0,0 +1,20 @@
+#as: -march=rv32ifd_zca
+#source: zc-zca-jr.s
+#objdump: -d -Mno-aliases
+
+.*:[ 	]+file format .*
+
+
+Disassembly of section .text:
+
+0+000 <target>:
+[ 	]+0:[ 	]+8502[ 	]+c.jr[ 	]+a0
+[ 	]+2:[ 	]+8082[ 	]+c.jr[ 	]+ra
+[ 	]+4:[ 	]+8102[ 	]+c.jr[ 	]+sp
+[ 	]+6:[ 	]+8182[ 	]+c.jr[ 	]+gp
+[ 	]+8:[ 	]+8202[ 	]+c.jr[ 	]+tp
+[ 	]+a:[ 	]+8282[ 	]+c.jr[ 	]+t0
+[ 	]+c:[ 	]+8402[ 	]+c.jr[ 	]+s0
+[ 	]+e:[ 	]+8882[ 	]+c.jr[ 	]+a7
+[ 	]+10:[ 	]+8d82[ 	]+c.jr[ 	]+s11
+[ 	]+12:[ 	]+8f82[ 	]+c.jr[ 	]+t6
diff --git a/gas/testsuite/gas/riscv/zc-zca-jr-rv64-fail.d b/gas/testsuite/gas/riscv/zc-zca-jr-rv64-fail.d
new file mode 100644
index 00000000000..cc20b47d9ca
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-jr-rv64-fail.d
@@ -0,0 +1,3 @@
+#as: -march=rv64ifd_zca
+#source: zc-zca-jr-fail.s
+#error_output: zc-zca-jr-rv64-fail.l
\ No newline at end of file
diff --git a/gas/testsuite/gas/riscv/zc-zca-jr-rv64-fail.l b/gas/testsuite/gas/riscv/zc-zca-jr-rv64-fail.l
new file mode 100644
index 00000000000..6c434682f02
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-jr-rv64-fail.l
@@ -0,0 +1,4 @@
+.*: Assembler messages:
+.*: Error: illegal operands `c.jr zero'
+.*: Error: illegal operands `c.jr'
+.*: Error: illegal operands `c.jr 3'
\ No newline at end of file
diff --git a/gas/testsuite/gas/riscv/zc-zca-jr-rv64.d b/gas/testsuite/gas/riscv/zc-zca-jr-rv64.d
new file mode 100644
index 00000000000..7ff2259a222
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-jr-rv64.d
@@ -0,0 +1,20 @@
+#as: -march=rv64ifd_zca
+#source: zc-zca-jr.s
+#objdump: -d -Mno-aliases
+
+.*:[ 	]+file format .*
+
+
+Disassembly of section .text:
+
+0+000 <target>:
+[ 	]+0:[ 	]+8502[ 	]+c.jr[ 	]+a0
+[ 	]+2:[ 	]+8082[ 	]+c.jr[ 	]+ra
+[ 	]+4:[ 	]+8102[ 	]+c.jr[ 	]+sp
+[ 	]+6:[ 	]+8182[ 	]+c.jr[ 	]+gp
+[ 	]+8:[ 	]+8202[ 	]+c.jr[ 	]+tp
+[ 	]+a:[ 	]+8282[ 	]+c.jr[ 	]+t0
+[ 	]+c:[ 	]+8402[ 	]+c.jr[ 	]+s0
+[ 	]+e:[ 	]+8882[ 	]+c.jr[ 	]+a7
+[ 	]+10:[ 	]+8d82[ 	]+c.jr[ 	]+s11
+[ 	]+12:[ 	]+8f82[ 	]+c.jr[ 	]+t6
diff --git a/gas/testsuite/gas/riscv/zc-zca-jr.s b/gas/testsuite/gas/riscv/zc-zca-jr.s
new file mode 100644
index 00000000000..dfe78196ee3
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-jr.s
@@ -0,0 +1,11 @@
+target:
+    c.jr a0
+    c.jr ra
+    c.jr sp
+    c.jr gp
+    c.jr tp
+    c.jr t0
+    c.jr s0
+    c.jr a7
+    c.jr s11
+    c.jr t6
diff --git a/gas/testsuite/gas/riscv/zc-zca-ld-fail.s b/gas/testsuite/gas/riscv/zc-zca-ld-fail.s
new file mode 100644
index 00000000000..f4723b81779
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-ld-fail.s
@@ -0,0 +1,26 @@
+target:
+    c.ld
+    c.ld ,
+    c.ld , (x9)
+    c.ld x8,
+    c.ld x8, 8
+    c.ld x8, x9
+
+    c.ld x7, (x9)
+    c.ld x16, (x8)
+    c.ld 8, (x8)
+
+    c.ld x10, (x7)
+    c.ld x10, (x16)
+    c.ld x10, (x0)
+    c.ld x10, (x2)
+    c.ld x10, (x31)
+
+    c.ld x11, 1(x8)
+    c.ld x11, 7(x8)
+    c.ld x11, -8(x8)
+    c.ld x11, 8.0(x8)
+    c.ld x11, 9(x8)
+    c.ld x11, 249(x8)
+    c.ld x11, 255(x8)
+    c.ld x11, 256(x8)
diff --git a/gas/testsuite/gas/riscv/zc-zca-ld-rv64-fail.d b/gas/testsuite/gas/riscv/zc-zca-ld-rv64-fail.d
new file mode 100644
index 00000000000..e54e4ccde51
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-ld-rv64-fail.d
@@ -0,0 +1,3 @@
+#as: -march=rv64ifd_zca
+#source: zc-zca-ld-fail.s
+#error_output: zc-zca-ld-rv64-fail.l
diff --git a/gas/testsuite/gas/riscv/zc-zca-ld-rv64-fail.l b/gas/testsuite/gas/riscv/zc-zca-ld-rv64-fail.l
new file mode 100644
index 00000000000..13618129278
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-ld-rv64-fail.l
@@ -0,0 +1,23 @@
+.*: Assembler messages:
+.*: Error: illegal operands `c.ld'
+.*: Error: illegal operands `c.ld ,'
+.*: Error: illegal operands `c.ld ,\(x9\)'
+.*: Error: illegal operands `c.ld x8,'
+.*: Error: illegal operands `c.ld x8,8'
+.*: Error: illegal operands `c.ld x8,x9'
+.*: Error: illegal operands `c.ld x7,\(x9\)'
+.*: Error: illegal operands `c.ld x16,\(x8\)'
+.*: Error: illegal operands `c.ld 8,\(x8\)'
+.*: Error: illegal operands `c.ld x10,\(x7\)'
+.*: Error: illegal operands `c.ld x10,\(x16\)'
+.*: Error: illegal operands `c.ld x10,\(x0\)'
+.*: Error: illegal operands `c.ld x10,\(x2\)'
+.*: Error: illegal operands `c.ld x10,\(x31\)'
+.*: Error: illegal operands `c.ld x11,1\(x8\)'
+.*: Error: illegal operands `c.ld x11,7\(x8\)'
+.*: Error: illegal operands `c.ld x11,-8\(x8\)'
+.*: Error: illegal operands `c.ld x11,8.0\(x8\)'
+.*: Error: illegal operands `c.ld x11,9\(x8\)'
+.*: Error: illegal operands `c.ld x11,249\(x8\)'
+.*: Error: illegal operands `c.ld x11,255\(x8\)'
+.*: Error: illegal operands `c.ld x11,256\(x8\)'
diff --git a/gas/testsuite/gas/riscv/zc-zca-ld-rv64.d b/gas/testsuite/gas/riscv/zc-zca-ld-rv64.d
new file mode 100644
index 00000000000..6b7a5832044
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-ld-rv64.d
@@ -0,0 +1,15 @@
+#as: -march=rv64ifd_zca
+#source: zc-zca-ld.s
+#objdump: -d -Mno-aliases
+
+.*:[ 	]+file format .*
+
+
+Disassembly of section .text:
+
+0+000 <target>:
+[ 	]+0:[ 	]+6380[ 	]+c.ld[ 	]+s0,0\(a5\)
+[ 	]+2:[ 	]+6504[ 	]+c.ld[ 	]+s1,8\(a0\)
+[ 	]+4:[ 	]+6988[ 	]+c.ld[ 	]+a0,16\(a1\)
+[ 	]+6:[ 	]+7c7c[ 	]+c.ld[ 	]+a5,248\(s0\)
+[ 	]+8:[ 	]+6502[ 	]+c.ldsp[ 	]+a0,0\(sp\)
diff --git a/gas/testsuite/gas/riscv/zc-zca-ld.s b/gas/testsuite/gas/riscv/zc-zca-ld.s
new file mode 100644
index 00000000000..07506e9b76e
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-ld.s
@@ -0,0 +1,6 @@
+target:
+    c.ld x8, (x15)
+    c.ld x9, 8(x10)
+    c.ld x10, 16(x11)
+    c.ld x15, 248(x8)
+    ld a0, (sp)
diff --git a/gas/testsuite/gas/riscv/zc-zca-ldsp-fail.s b/gas/testsuite/gas/riscv/zc-zca-ldsp-fail.s
new file mode 100644
index 00000000000..41c0af6c7fb
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-ldsp-fail.s
@@ -0,0 +1,20 @@
+target:
+    c.ldsp
+    c.ldsp ,
+    c.ldsp , (x2)
+    c.ldsp x1,
+    c.ldsp x1, 8
+
+    c.ldsp x0, (x2)
+    c.ldsp 8, (x2)
+    c.ldsp x32, (x2)
+
+    c.ldsp x12, 1(x2)
+    c.ldsp x12, -1(x2)
+    c.ldsp x12, 2(x2)
+    c.ldsp x12, 7(x2)
+    c.ldsp x12, 8(x1)
+    c.ldsp x12, 8(x0)
+    c.ldsp x12, 9(x2)
+    c.ldsp x12, 512(x2)
+    c.ldsp x12, 511(x2)
diff --git a/gas/testsuite/gas/riscv/zc-zca-ldsp-rv64-fail.d b/gas/testsuite/gas/riscv/zc-zca-ldsp-rv64-fail.d
new file mode 100644
index 00000000000..bfe089feffc
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-ldsp-rv64-fail.d
@@ -0,0 +1,3 @@
+#as: -march=rv64ifd_zca
+#source: zc-zca-ldsp-fail.s
+#error_output: zc-zca-ldsp-rv64-fail.l
diff --git a/gas/testsuite/gas/riscv/zc-zca-ldsp-rv64-fail.l b/gas/testsuite/gas/riscv/zc-zca-ldsp-rv64-fail.l
new file mode 100644
index 00000000000..d8ddb0a28d6
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-ldsp-rv64-fail.l
@@ -0,0 +1,18 @@
+.*: Assembler messages:
+.*: Error: illegal operands `c.ldsp'
+.*: Error: illegal operands `c.ldsp ,'
+.*: Error: illegal operands `c.ldsp ,\(x2\)'
+.*: Error: illegal operands `c.ldsp x1,'
+.*: Error: illegal operands `c.ldsp x1,8'
+.*: Error: illegal operands `c.ldsp x0,\(x2\)'
+.*: Error: illegal operands `c.ldsp 8,\(x2\)'
+.*: Error: illegal operands `c.ldsp x32,\(x2\)'
+.*: Error: illegal operands `c.ldsp x12,1\(x2\)'
+.*: Error: illegal operands `c.ldsp x12,-1\(x2\)'
+.*: Error: illegal operands `c.ldsp x12,2\(x2\)'
+.*: Error: illegal operands `c.ldsp x12,7\(x2\)'
+.*: Error: illegal operands `c.ldsp x12,8\(x1\)'
+.*: Error: illegal operands `c.ldsp x12,8\(x0\)'
+.*: Error: illegal operands `c.ldsp x12,9\(x2\)'
+.*: Error: illegal operands `c.ldsp x12,512\(x2\)'
+.*: Error: illegal operands `c.ldsp x12,511\(x2\)'
diff --git a/gas/testsuite/gas/riscv/zc-zca-ldsp-rv64.d b/gas/testsuite/gas/riscv/zc-zca-ldsp-rv64.d
new file mode 100644
index 00000000000..a5c768e261a
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-ldsp-rv64.d
@@ -0,0 +1,17 @@
+#as: -march=rv64ifd_zca
+#source: zc-zca-ldsp.s
+#objdump: -d -Mno-aliases
+
+.*:[ 	]+file format .*
+
+
+Disassembly of section .text:
+
+0+000 <target>:
+[ 	]+0:[ 	]+6082[ 	]+c.ldsp[ 	]+ra,0\(sp\)
+[ 	]+2:[ 	]+6122[ 	]+c.ldsp[ 	]+sp,8\(sp\)
+[ 	]+4:[ 	]+7182[ 	]+c.ldsp[ 	]+gp,32\(sp\)
+[ 	]+6:[ 	]+7222[ 	]+c.ldsp[ 	]+tp,40\(sp\)
+[ 	]+8:[ 	]+648a[ 	]+c.ldsp[ 	]+s1,128\(sp\)
+[ 	]+a:[ 	]+652a[ 	]+c.ldsp[ 	]+a0,136\(sp\)
+[ 	]+c:[ 	]+7ffe[ 	]+c.ldsp[ 	]+t6,504\(sp\)
diff --git a/gas/testsuite/gas/riscv/zc-zca-ldsp.s b/gas/testsuite/gas/riscv/zc-zca-ldsp.s
new file mode 100644
index 00000000000..4b140841a0b
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-ldsp.s
@@ -0,0 +1,8 @@
+target:
+    c.ldsp x1, (sp)
+    c.ldsp x2, 8(sp)
+    c.ldsp x3, 32(sp)
+    c.ldsp x4, 40(sp)
+    c.ldsp x9, 128(sp)
+    c.ldsp x10, 136(sp)
+    c.ldsp x31, 504(sp)
diff --git a/gas/testsuite/gas/riscv/zc-zca-li-fail.s b/gas/testsuite/gas/riscv/zc-zca-li-fail.s
new file mode 100644
index 00000000000..ef464485929
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-li-fail.s
@@ -0,0 +1,10 @@
+target:
+    c.li
+    c.li , 0
+    c.li x1,
+
+    c.li 1, 0
+    c.li x1, -33
+    c.li x1, 32
+    c.li x1, 0.0
+    c.li x1, x8
diff --git a/gas/testsuite/gas/riscv/zc-zca-li-rv32-fail.d b/gas/testsuite/gas/riscv/zc-zca-li-rv32-fail.d
new file mode 100644
index 00000000000..9b8cbb0546c
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-li-rv32-fail.d
@@ -0,0 +1,3 @@
+#as: -march=rv32ifd_zca
+#source: zc-zca-li-fail.s
+#error_output: zc-zca-li-rv32-fail.l
\ No newline at end of file
diff --git a/gas/testsuite/gas/riscv/zc-zca-li-rv32-fail.l b/gas/testsuite/gas/riscv/zc-zca-li-rv32-fail.l
new file mode 100644
index 00000000000..bb9786036ad
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-li-rv32-fail.l
@@ -0,0 +1,9 @@
+.*: Assembler messages:
+.*: Error: illegal operands `c.li'
+.*: Error: illegal operands `c.li ,0'
+.*: Error: illegal operands `c.li x1,'
+.*: Error: illegal operands `c.li 1,0'
+.*: Error: illegal operands `c.li x1,-33'
+.*: Error: illegal operands `c.li x1,32'
+.*: Error: illegal operands `c.li x1,0.0'
+.*: Error: illegal operands `c.li x1,x8'
diff --git a/gas/testsuite/gas/riscv/zc-zca-li-rv32.d b/gas/testsuite/gas/riscv/zc-zca-li-rv32.d
new file mode 100644
index 00000000000..b8d27c162fe
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-li-rv32.d
@@ -0,0 +1,18 @@
+#as: -march=rv32ifd_zca
+#source: zc-zca-li.s
+#objdump: -d -Mno-aliases
+
+.*:[ 	]+file format .*
+
+
+Disassembly of section .text:
+
+0+000 <target>:
+[ 	]+0:[ 	]+5081[ 	]+c.li[ 	]+ra,-32
+[ 	]+2:[ 	]+4101[ 	]+c.li[ 	]+sp,0
+[ 	]+4:[ 	]+41fd[ 	]+c.li[ 	]+gp,31
+[ 	]+6:[ 	]+5245[ 	]+c.li[ 	]+tp,-15
+[ 	]+8:[ 	]+54fd[ 	]+c.li[ 	]+s1,-1
+[ 	]+a:[ 	]+4505[ 	]+c.li[ 	]+a0,1
+[ 	]+c:[ 	]+4fc1[ 	]+c.li[ 	]+t6,16
+[ 	]+e:[ 	]+4051[ 	]+c.li[ 	]+zero,20
\ No newline at end of file
diff --git a/gas/testsuite/gas/riscv/zc-zca-li-rv64-fail.d b/gas/testsuite/gas/riscv/zc-zca-li-rv64-fail.d
new file mode 100644
index 00000000000..e1a4ff0ee53
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-li-rv64-fail.d
@@ -0,0 +1,3 @@
+#as: -march=rv64ifd_zca
+#source: zc-zca-li-fail.s
+#error_output: zc-zca-li-rv64-fail.l
\ No newline at end of file
diff --git a/gas/testsuite/gas/riscv/zc-zca-li-rv64-fail.l b/gas/testsuite/gas/riscv/zc-zca-li-rv64-fail.l
new file mode 100644
index 00000000000..bb9786036ad
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-li-rv64-fail.l
@@ -0,0 +1,9 @@
+.*: Assembler messages:
+.*: Error: illegal operands `c.li'
+.*: Error: illegal operands `c.li ,0'
+.*: Error: illegal operands `c.li x1,'
+.*: Error: illegal operands `c.li 1,0'
+.*: Error: illegal operands `c.li x1,-33'
+.*: Error: illegal operands `c.li x1,32'
+.*: Error: illegal operands `c.li x1,0.0'
+.*: Error: illegal operands `c.li x1,x8'
diff --git a/gas/testsuite/gas/riscv/zc-zca-li-rv64.d b/gas/testsuite/gas/riscv/zc-zca-li-rv64.d
new file mode 100644
index 00000000000..cada7c280ce
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-li-rv64.d
@@ -0,0 +1,18 @@
+#as: -march=rv64ifd_zca
+#source: zc-zca-li.s
+#objdump: -d -Mno-aliases
+
+.*:[ 	]+file format .*
+
+
+Disassembly of section .text:
+
+0+000 <target>:
+[ 	]+0:[ 	]+5081[ 	]+c.li[ 	]+ra,-32
+[ 	]+2:[ 	]+4101[ 	]+c.li[ 	]+sp,0
+[ 	]+4:[ 	]+41fd[ 	]+c.li[ 	]+gp,31
+[ 	]+6:[ 	]+5245[ 	]+c.li[ 	]+tp,-15
+[ 	]+8:[ 	]+54fd[ 	]+c.li[ 	]+s1,-1
+[ 	]+a:[ 	]+4505[ 	]+c.li[ 	]+a0,1
+[ 	]+c:[ 	]+4fc1[ 	]+c.li[ 	]+t6,16
+[ 	]+e:[ 	]+4051[ 	]+c.li[ 	]+zero,20
diff --git a/gas/testsuite/gas/riscv/zc-zca-li.s b/gas/testsuite/gas/riscv/zc-zca-li.s
new file mode 100644
index 00000000000..3743c07de2c
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-li.s
@@ -0,0 +1,9 @@
+target:
+    c.li x1, -32
+    c.li x2, 0
+    c.li x3, 31
+    c.li x4, -15
+    c.li x9, -1
+    c.li x10, 1
+    c.li x31, 16
+    c.li x0, 20
diff --git a/gas/testsuite/gas/riscv/zc-zca-lui-fail.s b/gas/testsuite/gas/riscv/zc-zca-lui-fail.s
new file mode 100644
index 00000000000..b188b1f1e8f
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-lui-fail.s
@@ -0,0 +1,14 @@
+target:
+    c.lui
+    c.lui , 31
+    c.lui x4,
+
+    c.lui x2, 4
+    c.lui 2, 4
+
+    c.lui x31, x0
+    c.lui x31, x2
+    c.lui x31, -1
+    c.lui x31, 32
+    c.lui x31, 1.0
+    c.lui x31, 0
diff --git a/gas/testsuite/gas/riscv/zc-zca-lui-rv32-fail.d b/gas/testsuite/gas/riscv/zc-zca-lui-rv32-fail.d
new file mode 100644
index 00000000000..ff3ff1848be
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-lui-rv32-fail.d
@@ -0,0 +1,3 @@
+#as: -march=rv32ifd_zca
+#source: zc-zca-lui-fail.s
+#error_output: zc-zca-lui-rv32-fail.l
\ No newline at end of file
diff --git a/gas/testsuite/gas/riscv/zc-zca-lui-rv32-fail.l b/gas/testsuite/gas/riscv/zc-zca-lui-rv32-fail.l
new file mode 100644
index 00000000000..8dd6c1788bf
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-lui-rv32-fail.l
@@ -0,0 +1,12 @@
+.*: Assembler messages:
+.*: Error: illegal operands `c.lui'
+.*: Error: illegal operands `c.lui ,31'
+.*: Error: illegal operands `c.lui x4,'
+.*: Error: illegal operands `c.lui x2,4'
+.*: Error: illegal operands `c.lui 2,4'
+.*: Error: illegal operands `c.lui x31,x0'
+.*: Error: illegal operands `c.lui x31,x2'
+.*: Error: illegal operands `c.lui x31,-1'
+.*: Error: illegal operands `c.lui x31,32'
+.*: Error: illegal operands `c.lui x31,1.0'
+.*: Error: illegal operands `c.lui x31,0'
diff --git a/gas/testsuite/gas/riscv/zc-zca-lui-rv32.d b/gas/testsuite/gas/riscv/zc-zca-lui-rv32.d
new file mode 100644
index 00000000000..5605e0e5fe9
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-lui-rv32.d
@@ -0,0 +1,17 @@
+#as: -march=rv32ifd_zca
+#source: zc-zca-lui.s
+#objdump: -d -Mno-aliases
+
+.*:[ 	]+file format .*
+
+
+Disassembly of section .text:
+
+0+000 <target>:
+[ 	]+0:[ 	]+6085[ 	]+c.lui[ 	]+ra,0x1
+[ 	]+2:[ 	]+61fd[ 	]+c.lui[ 	]+gp,0x1f
+[ 	]+4:[ 	]+6239[ 	]+c.lui[ 	]+tp,0xe
+[ 	]+6:[ 	]+64a5[ 	]+c.lui[ 	]+s1,0x9
+[ 	]+8:[ 	]+6511[ 	]+c.lui[ 	]+a0,0x4
+[ 	]+a:[ 	]+6fe5[ 	]+c.lui[ 	]+t6,0x19
+[ 	]+c:[ 	]+6025[ 	]+c.lui[ 	]+zero,0x9
diff --git a/gas/testsuite/gas/riscv/zc-zca-lui-rv64-fail.d b/gas/testsuite/gas/riscv/zc-zca-lui-rv64-fail.d
new file mode 100644
index 00000000000..288a28f8cee
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-lui-rv64-fail.d
@@ -0,0 +1,3 @@
+#as: -march=rv64ifd_zca
+#source: zc-zca-lui-fail.s
+#error_output: zc-zca-lui-rv64-fail.l
\ No newline at end of file
diff --git a/gas/testsuite/gas/riscv/zc-zca-lui-rv64-fail.l b/gas/testsuite/gas/riscv/zc-zca-lui-rv64-fail.l
new file mode 100644
index 00000000000..8dd6c1788bf
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-lui-rv64-fail.l
@@ -0,0 +1,12 @@
+.*: Assembler messages:
+.*: Error: illegal operands `c.lui'
+.*: Error: illegal operands `c.lui ,31'
+.*: Error: illegal operands `c.lui x4,'
+.*: Error: illegal operands `c.lui x2,4'
+.*: Error: illegal operands `c.lui 2,4'
+.*: Error: illegal operands `c.lui x31,x0'
+.*: Error: illegal operands `c.lui x31,x2'
+.*: Error: illegal operands `c.lui x31,-1'
+.*: Error: illegal operands `c.lui x31,32'
+.*: Error: illegal operands `c.lui x31,1.0'
+.*: Error: illegal operands `c.lui x31,0'
diff --git a/gas/testsuite/gas/riscv/zc-zca-lui-rv64.d b/gas/testsuite/gas/riscv/zc-zca-lui-rv64.d
new file mode 100644
index 00000000000..897adc5f369
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-lui-rv64.d
@@ -0,0 +1,17 @@
+#as: -march=rv64ifd_zca
+#source: zc-zca-lui.s
+#objdump: -d -Mno-aliases
+
+.*:[ 	]+file format .*
+
+
+Disassembly of section .text:
+
+0+000 <target>:
+[ 	]+0:[ 	]+6085[ 	]+c.lui[ 	]+ra,0x1
+[ 	]+2:[ 	]+61fd[ 	]+c.lui[ 	]+gp,0x1f
+[ 	]+4:[ 	]+6239[ 	]+c.lui[ 	]+tp,0xe
+[ 	]+6:[ 	]+64a5[ 	]+c.lui[ 	]+s1,0x9
+[ 	]+8:[ 	]+6511[ 	]+c.lui[ 	]+a0,0x4
+[ 	]+a:[ 	]+6fe5[ 	]+c.lui[ 	]+t6,0x19
+[ 	]+c:[ 	]+6025[ 	]+c.lui[ 	]+zero,0x9
diff --git a/gas/testsuite/gas/riscv/zc-zca-lui.s b/gas/testsuite/gas/riscv/zc-zca-lui.s
new file mode 100644
index 00000000000..8a79fa3baba
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-lui.s
@@ -0,0 +1,8 @@
+target:
+    c.lui x1, 1
+    c.lui x3, 31
+    c.lui x4, 14
+    c.lui x9, 9
+    c.lui x10, 4
+    c.lui x31, 25
+    c.lui x0, 9
diff --git a/gas/testsuite/gas/riscv/zc-zca-lw-fail.s b/gas/testsuite/gas/riscv/zc-zca-lw-fail.s
new file mode 100644
index 00000000000..328d70085fc
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-lw-fail.s
@@ -0,0 +1,27 @@
+target:
+    c.lw
+    c.lw , (x9)
+    c.lw x8,
+    c.lw x8, 124
+    c.lw x8, x9
+
+    c.lw x0, (x9)
+    c.lw x1, (x9)
+    c.lw x7, (x9)
+    c.lw x16, (x8)
+    c.lw 4, (x8)
+
+    c.lw x10, (x7)
+    c.lw x10, (x16)
+    c.lw x10, (x0)
+    c.lw x10, (x2)
+    c.lw x10, (x31)
+
+    c.lw x11, 1(x8)
+    c.lw x11, 2(x8)
+    c.lw x11, 3(x8)
+    c.lw x11, -4(x8)
+    c.lw x11, 5(x8)
+    c.lw x11, 123(x8)
+    c.lw x11, 125(x8)
+    c.lw x11, 128(x8)
diff --git a/gas/testsuite/gas/riscv/zc-zca-lw-rv32-fail.d b/gas/testsuite/gas/riscv/zc-zca-lw-rv32-fail.d
new file mode 100644
index 00000000000..97c01142c9e
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-lw-rv32-fail.d
@@ -0,0 +1,3 @@
+#as: -march=rv32ifd_zca
+#source: zc-zca-lw-fail.s
+#error_output: zc-zca-lw-rv32-fail.l
\ No newline at end of file
diff --git a/gas/testsuite/gas/riscv/zc-zca-lw-rv32-fail.l b/gas/testsuite/gas/riscv/zc-zca-lw-rv32-fail.l
new file mode 100644
index 00000000000..ed17d1f1da0
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-lw-rv32-fail.l
@@ -0,0 +1,24 @@
+.*: Assembler messages:
+.*: Error: illegal operands `c.lw'
+.*: Error: illegal operands `c.lw ,\(x9\)'
+.*: Error: illegal operands `c.lw x8,'
+.*: Error: illegal operands `c.lw x8,124'
+.*: Error: illegal operands `c.lw x8,x9'
+.*: Error: illegal operands `c.lw x0,\(x9\)'
+.*: Error: illegal operands `c.lw x1,\(x9\)'
+.*: Error: illegal operands `c.lw x7,\(x9\)'
+.*: Error: illegal operands `c.lw x16,\(x8\)'
+.*: Error: illegal operands `c.lw 4,\(x8\)'
+.*: Error: illegal operands `c.lw x10,\(x7\)'
+.*: Error: illegal operands `c.lw x10,\(x16\)'
+.*: Error: illegal operands `c.lw x10,\(x0\)'
+.*: Error: illegal operands `c.lw x10,\(x2\)'
+.*: Error: illegal operands `c.lw x10,\(x31\)'
+.*: Error: illegal operands `c.lw x11,1\(x8\)'
+.*: Error: illegal operands `c.lw x11,2\(x8\)'
+.*: Error: illegal operands `c.lw x11,3\(x8\)'
+.*: Error: illegal operands `c.lw x11,-4\(x8\)'
+.*: Error: illegal operands `c.lw x11,5\(x8\)'
+.*: Error: illegal operands `c.lw x11,123\(x8\)'
+.*: Error: illegal operands `c.lw x11,125\(x8\)'
+.*: Error: illegal operands `c.lw x11,128\(x8\)'
diff --git a/gas/testsuite/gas/riscv/zc-zca-lw-rv32.d b/gas/testsuite/gas/riscv/zc-zca-lw-rv32.d
new file mode 100644
index 00000000000..cacfcb65d71
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-lw-rv32.d
@@ -0,0 +1,19 @@
+#as: -march=rv32ifd_zca
+#source: zc-zca-lw.s
+#objdump: -d -Mno-aliases
+
+.*:[ 	]+file format .*
+
+
+Disassembly of section .text:
+
+0+000 <target>:
+[ 	]+0:[ 	]+4080[ 	]+c.lw[ 	]+s0,0\(s1\)
+[ 	]+2:[ 	]+5104[ 	]+c.lw[ 	]+s1,32\(a0\)
+[ 	]+4:[ 	]+5de8[ 	]+c.lw[ 	]+a0,124\(a1\)
+[ 	]+6:[ 	]+422c[ 	]+c.lw[ 	]+a1,64\(a2\)
+[ 	]+8:[ 	]+42f0[ 	]+c.lw[ 	]+a2,68\(a3\)
+[ 	]+a:[ 	]+4354[ 	]+c.lw[ 	]+a3,4\(a4\)
+[ 	]+c:[ 	]+4798[ 	]+c.lw[ 	]+a4,8\(a5\)
+[ 	]+e:[ 	]+481c[ 	]+c.lw[ 	]+a5,16\(s0\)
+[ 	]+10:[ 	]+4502[ 	]+c.lwsp[ 	]+a0,0\(sp\)
diff --git a/gas/testsuite/gas/riscv/zc-zca-lw-rv64-fail.d b/gas/testsuite/gas/riscv/zc-zca-lw-rv64-fail.d
new file mode 100644
index 00000000000..1f950ac17c7
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-lw-rv64-fail.d
@@ -0,0 +1,3 @@
+#as: -march=rv64ifd_zca
+#source: zc-zca-lw-fail.s
+#error_output: zc-zca-lw-rv64-fail.l
\ No newline at end of file
diff --git a/gas/testsuite/gas/riscv/zc-zca-lw-rv64-fail.l b/gas/testsuite/gas/riscv/zc-zca-lw-rv64-fail.l
new file mode 100644
index 00000000000..4275e2678de
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-lw-rv64-fail.l
@@ -0,0 +1,24 @@
+.*: Assembler messages:
+.*: Error: illegal operands `c.lw'
+.*: Error: illegal operands `c.lw ,\(x9\)'
+.*: Error: illegal operands `c.lw x8,'
+.*: Error: illegal operands `c.lw x8,124'
+.*: Error: illegal operands `c.lw x8,x9'
+.*: Error: illegal operands `c.lw x0,\(x9\)'
+.*: Error: illegal operands `c.lw x1,\(x9\)'
+.*: Error: illegal operands `c.lw x7,\(x9\)'
+.*: Error: illegal operands `c.lw x16,\(x8\)'
+.*: Error: illegal operands `c.lw 4,\(x8\)'
+.*: Error: illegal operands `c.lw x10,\(x7\)'
+.*: Error: illegal operands `c.lw x10,\(x16\)'
+.*: Error: illegal operands `c.lw x10,\(x0\)'
+.*: Error: illegal operands `c.lw x10,\(x2\)'
+.*: Error: illegal operands `c.lw x10,\(x31\)'
+.*: Error: illegal operands `c.lw x11,1\(x8\)'
+.*: Error: illegal operands `c.lw x11,2\(x8\)'
+.*: Error: illegal operands `c.lw x11,3\(x8\)'
+.*: Error: illegal operands `c.lw x11,-4\(x8\)'
+.*: Error: illegal operands `c.lw x11,5\(x8\)'
+.*: Error: illegal operands `c.lw x11,123\(x8\)'
+.*: Error: illegal operands `c.lw x11,125\(x8\)'
+.*: Error: illegal operands `c.lw x11,128\(x8\)'
\ No newline at end of file
diff --git a/gas/testsuite/gas/riscv/zc-zca-lw-rv64.d b/gas/testsuite/gas/riscv/zc-zca-lw-rv64.d
new file mode 100644
index 00000000000..da774f51a7a
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-lw-rv64.d
@@ -0,0 +1,19 @@
+#as: -march=rv64ifd_zca
+#source: zc-zca-lw.s
+#objdump: -d -Mno-aliases
+
+.*:[ 	]+file format .*
+
+
+Disassembly of section .text:
+
+0+000 <target>:
+[ 	]+0:[ 	]+4080[ 	]+c.lw[ 	]+s0,0\(s1\)
+[ 	]+2:[ 	]+5104[ 	]+c.lw[ 	]+s1,32\(a0\)
+[ 	]+4:[ 	]+5de8[ 	]+c.lw[ 	]+a0,124\(a1\)
+[ 	]+6:[ 	]+422c[ 	]+c.lw[ 	]+a1,64\(a2\)
+[ 	]+8:[ 	]+42f0[ 	]+c.lw[ 	]+a2,68\(a3\)
+[ 	]+a:[ 	]+4354[ 	]+c.lw[ 	]+a3,4\(a4\)
+[ 	]+c:[ 	]+4798[ 	]+c.lw[ 	]+a4,8\(a5\)
+[ 	]+e:[ 	]+481c[ 	]+c.lw[ 	]+a5,16\(s0\)
+[ 	]+10:[ 	]+4502[ 	]+c.lwsp[ 	]+a0,0\(sp\)
diff --git a/gas/testsuite/gas/riscv/zc-zca-lw.s b/gas/testsuite/gas/riscv/zc-zca-lw.s
new file mode 100644
index 00000000000..30f0ac8cea1
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-lw.s
@@ -0,0 +1,10 @@
+target:
+    c.lw x8, (x9)
+    c.lw x9, 32(x10)
+    c.lw x10, 124(x11)
+    c.lw x11, 64(x12)
+    c.lw x12, 68(x13)
+    c.lw x13, 4(x14)
+    c.lw x14, 8(x15)
+    c.lw x15, 16(x8)
+    lw a0, (sp)
diff --git a/gas/testsuite/gas/riscv/zc-zca-lwsp-fail.s b/gas/testsuite/gas/riscv/zc-zca-lwsp-fail.s
new file mode 100644
index 00000000000..faea3da9c9b
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-lwsp-fail.s
@@ -0,0 +1,22 @@
+target:
+    c.lwsp
+    c.lwsp , (x2)
+    c.lwsp x1,
+    c.lwsp x1, 4
+
+    c.lwsp x0, (x2)
+    c.lwsp 4, (x2)
+    c.lwsp x32, (x2)
+
+    c.lwsp x12, 1(x2)
+    c.lwsp x12, -1(x2)
+    c.lwsp x12, 2(x2)
+    c.lwsp x12, 3(x2)
+    c.lwsp x12, 4(x3)
+    c.lwsp x12, 8(x1)
+    c.lwsp x12, 12(x0)
+    c.lwsp x12, 5(x2)
+    c.lwsp x12, 253(x2)
+    c.lwsp x12, 254(x2)
+    c.lwsp x12, 255(x2)
+    c.lwsp x12, 256(x2)
diff --git a/gas/testsuite/gas/riscv/zc-zca-lwsp-rv32-fail.d b/gas/testsuite/gas/riscv/zc-zca-lwsp-rv32-fail.d
new file mode 100644
index 00000000000..e7b9aa2998e
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-lwsp-rv32-fail.d
@@ -0,0 +1,3 @@
+#as: -march=rv32ifd_zca
+#source: zc-zca-lwsp-fail.s
+#error_output: zc-zca-lwsp-rv32-fail.l
\ No newline at end of file
diff --git a/gas/testsuite/gas/riscv/zc-zca-lwsp-rv32-fail.l b/gas/testsuite/gas/riscv/zc-zca-lwsp-rv32-fail.l
new file mode 100644
index 00000000000..c5453290846
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-lwsp-rv32-fail.l
@@ -0,0 +1,20 @@
+.*: Assembler messages:
+.*: Error: illegal operands `c.lwsp'
+.*: Error: illegal operands `c.lwsp ,\(x2\)'
+.*: Error: illegal operands `c.lwsp x1,'
+.*: Error: illegal operands `c.lwsp x1,4'
+.*: Error: illegal operands `c.lwsp x0,\(x2\)'
+.*: Error: illegal operands `c.lwsp 4,\(x2\)'
+.*: Error: illegal operands `c.lwsp x32,\(x2\)'
+.*: Error: illegal operands `c.lwsp x12,1\(x2\)'
+.*: Error: illegal operands `c.lwsp x12,-1\(x2\)'
+.*: Error: illegal operands `c.lwsp x12,2\(x2\)'
+.*: Error: illegal operands `c.lwsp x12,3\(x2\)'
+.*: Error: illegal operands `c.lwsp x12,4\(x3\)'
+.*: Error: illegal operands `c.lwsp x12,8\(x1\)'
+.*: Error: illegal operands `c.lwsp x12,12\(x0\)'
+.*: Error: illegal operands `c.lwsp x12,5\(x2\)'
+.*: Error: illegal operands `c.lwsp x12,253\(x2\)'
+.*: Error: illegal operands `c.lwsp x12,254\(x2\)'
+.*: Error: illegal operands `c.lwsp x12,255\(x2\)'
+.*: Error: illegal operands `c.lwsp x12,256\(x2\)'
diff --git a/gas/testsuite/gas/riscv/zc-zca-lwsp-rv32.d b/gas/testsuite/gas/riscv/zc-zca-lwsp-rv32.d
new file mode 100644
index 00000000000..13a9a86799e
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-lwsp-rv32.d
@@ -0,0 +1,18 @@
+#as: -march=rv32ifd_zca
+#source: zc-zca-lwsp.s
+#objdump: -d -Mno-aliases
+
+.*:[ 	]+file format .*
+
+
+Disassembly of section .text:
+
+0+000 <target>:
+[ 	]+0:[ 	]+4082[ 	]+c.lwsp[ 	]+ra,0\(sp\)
+[ 	]+2:[ 	]+4112[ 	]+c.lwsp[ 	]+sp,4\(sp\)
+[ 	]+4:[ 	]+41a2[ 	]+c.lwsp[ 	]+gp,8\(sp\)
+[ 	]+6:[ 	]+5202[ 	]+c.lwsp[ 	]+tp,32\(sp\)
+[ 	]+8:[ 	]+54a2[ 	]+c.lwsp[ 	]+s1,40\(sp\)
+[ 	]+a:[ 	]+5576[ 	]+c.lwsp[ 	]+a0,124\(sp\)
+[ 	]+c:[ 	]+458a[ 	]+c.lwsp[ 	]+a1,128\(sp\)
+[ 	]+e:[ 	]+5ffe[ 	]+c.lwsp[ 	]+t6,252\(sp\)
\ No newline at end of file
diff --git a/gas/testsuite/gas/riscv/zc-zca-lwsp-rv64-fail.d b/gas/testsuite/gas/riscv/zc-zca-lwsp-rv64-fail.d
new file mode 100644
index 00000000000..af9462dc010
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-lwsp-rv64-fail.d
@@ -0,0 +1,3 @@
+#as: -march=rv64ifd_zca
+#source: zc-zca-lwsp-fail.s
+#error_output: zc-zca-lwsp-rv64-fail.l
\ No newline at end of file
diff --git a/gas/testsuite/gas/riscv/zc-zca-lwsp-rv64-fail.l b/gas/testsuite/gas/riscv/zc-zca-lwsp-rv64-fail.l
new file mode 100644
index 00000000000..c5453290846
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-lwsp-rv64-fail.l
@@ -0,0 +1,20 @@
+.*: Assembler messages:
+.*: Error: illegal operands `c.lwsp'
+.*: Error: illegal operands `c.lwsp ,\(x2\)'
+.*: Error: illegal operands `c.lwsp x1,'
+.*: Error: illegal operands `c.lwsp x1,4'
+.*: Error: illegal operands `c.lwsp x0,\(x2\)'
+.*: Error: illegal operands `c.lwsp 4,\(x2\)'
+.*: Error: illegal operands `c.lwsp x32,\(x2\)'
+.*: Error: illegal operands `c.lwsp x12,1\(x2\)'
+.*: Error: illegal operands `c.lwsp x12,-1\(x2\)'
+.*: Error: illegal operands `c.lwsp x12,2\(x2\)'
+.*: Error: illegal operands `c.lwsp x12,3\(x2\)'
+.*: Error: illegal operands `c.lwsp x12,4\(x3\)'
+.*: Error: illegal operands `c.lwsp x12,8\(x1\)'
+.*: Error: illegal operands `c.lwsp x12,12\(x0\)'
+.*: Error: illegal operands `c.lwsp x12,5\(x2\)'
+.*: Error: illegal operands `c.lwsp x12,253\(x2\)'
+.*: Error: illegal operands `c.lwsp x12,254\(x2\)'
+.*: Error: illegal operands `c.lwsp x12,255\(x2\)'
+.*: Error: illegal operands `c.lwsp x12,256\(x2\)'
diff --git a/gas/testsuite/gas/riscv/zc-zca-lwsp-rv64.d b/gas/testsuite/gas/riscv/zc-zca-lwsp-rv64.d
new file mode 100644
index 00000000000..6ab165b6540
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-lwsp-rv64.d
@@ -0,0 +1,18 @@
+#as: -march=rv64ifd_zca
+#source: zc-zca-lwsp.s
+#objdump: -d -Mno-aliases
+
+.*:[ 	]+file format .*
+
+
+Disassembly of section .text:
+
+0+000 <target>:
+[ 	]+0:[ 	]+4082[ 	]+c.lwsp[ 	]+ra,0\(sp\)
+[ 	]+2:[ 	]+4112[ 	]+c.lwsp[ 	]+sp,4\(sp\)
+[ 	]+4:[ 	]+41a2[ 	]+c.lwsp[ 	]+gp,8\(sp\)
+[ 	]+6:[ 	]+5202[ 	]+c.lwsp[ 	]+tp,32\(sp\)
+[ 	]+8:[ 	]+54a2[ 	]+c.lwsp[ 	]+s1,40\(sp\)
+[ 	]+a:[ 	]+5576[ 	]+c.lwsp[ 	]+a0,124\(sp\)
+[ 	]+c:[ 	]+458a[ 	]+c.lwsp[ 	]+a1,128\(sp\)
+[ 	]+e:[ 	]+5ffe[ 	]+c.lwsp[ 	]+t6,252\(sp\)
diff --git a/gas/testsuite/gas/riscv/zc-zca-lwsp.s b/gas/testsuite/gas/riscv/zc-zca-lwsp.s
new file mode 100644
index 00000000000..4f69ba66cb4
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-lwsp.s
@@ -0,0 +1,9 @@
+target:
+    c.lwsp x1, (x2)
+    c.lwsp x2, 4(x2)
+    c.lwsp x3, 8(x2)
+    c.lwsp x4, 32(x2)
+    c.lwsp x9, 40(x2)
+    c.lwsp x10, 124(x2)
+    c.lwsp x11, 128(x2)
+    c.lwsp x31, 252(x2)
diff --git a/gas/testsuite/gas/riscv/zc-zca-mv-fail.s b/gas/testsuite/gas/riscv/zc-zca-mv-fail.s
new file mode 100644
index 00000000000..87e06bb4030
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-mv-fail.s
@@ -0,0 +1,9 @@
+target:
+    c.mv
+    c.mv , x1
+    c.mv x1,
+
+    c.mv x0, x0
+    c.mv 1, x1
+    c.mv x1, x0
+    c.mv x1, 0
diff --git a/gas/testsuite/gas/riscv/zc-zca-mv-rv32-fail.d b/gas/testsuite/gas/riscv/zc-zca-mv-rv32-fail.d
new file mode 100644
index 00000000000..5c2eba1cef4
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-mv-rv32-fail.d
@@ -0,0 +1,3 @@
+#as: -march=rv32ifd_zca
+#source: zc-zca-mv-fail.s
+#error_output: zc-zca-mv-rv32-fail.l
\ No newline at end of file
diff --git a/gas/testsuite/gas/riscv/zc-zca-mv-rv32-fail.l b/gas/testsuite/gas/riscv/zc-zca-mv-rv32-fail.l
new file mode 100644
index 00000000000..2392f60f04f
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-mv-rv32-fail.l
@@ -0,0 +1,8 @@
+.*: Assembler messages:
+.*: Error: illegal operands `c.mv'
+.*: Error: illegal operands `c.mv ,x1'
+.*: Error: illegal operands `c.mv x1,'
+.*: Error: illegal operands `c.mv x0,x0'
+.*: Error: illegal operands `c.mv 1,x1'
+.*: Error: illegal operands `c.mv x1,x0'
+.*: Error: illegal operands `c.mv x1,0'
\ No newline at end of file
diff --git a/gas/testsuite/gas/riscv/zc-zca-mv-rv32.d b/gas/testsuite/gas/riscv/zc-zca-mv-rv32.d
new file mode 100644
index 00000000000..1cb191cd094
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-mv-rv32.d
@@ -0,0 +1,20 @@
+#as: -march=rv32ifd_zca
+#source: zc-zca-mv.s
+#objdump: -d -Mno-aliases
+
+.*:[ 	]+file format .*
+
+
+Disassembly of section .text:
+
+0+000 <target>:
+[ 	]+0:[ 	]+808a[ 	]+c.mv[ 	]+ra,sp
+[ 	]+2:[ 	]+8106[ 	]+c.mv[ 	]+sp,ra
+[ 	]+4:[ 	]+818a[ 	]+c.mv[ 	]+gp,sp
+[ 	]+6:[ 	]+820e[ 	]+c.mv[ 	]+tp,gp
+[ 	]+8:[ 	]+84a6[ 	]+c.mv[ 	]+s1,s1
+[ 	]+a:[ 	]+852e[ 	]+c.mv[ 	]+a0,a1
+[ 	]+c:[ 	]+85aa[ 	]+c.mv[ 	]+a1,a0
+[ 	]+e:[ 	]+87b6[ 	]+c.mv[ 	]+a5,a3
+[ 	]+10:[ 	]+8f8a[ 	]+c.mv[ 	]+t6,sp
+[ 	]+12:[ 	]+8006[ 	]+c.mv[ 	]+zero,ra
diff --git a/gas/testsuite/gas/riscv/zc-zca-mv-rv64-fail.d b/gas/testsuite/gas/riscv/zc-zca-mv-rv64-fail.d
new file mode 100644
index 00000000000..8c99fae20d3
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-mv-rv64-fail.d
@@ -0,0 +1,3 @@
+#as: -march=rv64ifd_zca
+#source: zc-zca-mv-fail.s
+#error_output: zc-zca-mv-rv64-fail.l
\ No newline at end of file
diff --git a/gas/testsuite/gas/riscv/zc-zca-mv-rv64-fail.l b/gas/testsuite/gas/riscv/zc-zca-mv-rv64-fail.l
new file mode 100644
index 00000000000..a844d709983
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-mv-rv64-fail.l
@@ -0,0 +1,8 @@
+.*: Assembler messages:
+.*: Error: illegal operands `c.mv'
+.*: Error: illegal operands `c.mv ,x1'
+.*: Error: illegal operands `c.mv x1,'
+.*: Error: illegal operands `c.mv x0,x0'
+.*: Error: illegal operands `c.mv 1,x1'
+.*: Error: illegal operands `c.mv x1,x0'
+.*: Error: illegal operands `c.mv x1,0'
diff --git a/gas/testsuite/gas/riscv/zc-zca-mv-rv64.d b/gas/testsuite/gas/riscv/zc-zca-mv-rv64.d
new file mode 100644
index 00000000000..58c469dd049
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-mv-rv64.d
@@ -0,0 +1,20 @@
+#as: -march=rv64ifd_zca
+#source: zc-zca-mv.s
+#objdump: -d -Mno-aliases
+
+.*:[ 	]+file format .*
+
+
+Disassembly of section .text:
+
+0+000 <target>:
+[ 	]+0:[ 	]+808a[ 	]+c.mv[ 	]+ra,sp
+[ 	]+2:[ 	]+8106[ 	]+c.mv[ 	]+sp,ra
+[ 	]+4:[ 	]+818a[ 	]+c.mv[ 	]+gp,sp
+[ 	]+6:[ 	]+820e[ 	]+c.mv[ 	]+tp,gp
+[ 	]+8:[ 	]+84a6[ 	]+c.mv[ 	]+s1,s1
+[ 	]+a:[ 	]+852e[ 	]+c.mv[ 	]+a0,a1
+[ 	]+c:[ 	]+85aa[ 	]+c.mv[ 	]+a1,a0
+[ 	]+e:[ 	]+87b6[ 	]+c.mv[ 	]+a5,a3
+[ 	]+10:[ 	]+8f8a[ 	]+c.mv[ 	]+t6,sp
+[ 	]+12:[ 	]+8006[ 	]+c.mv[ 	]+zero,ra
diff --git a/gas/testsuite/gas/riscv/zc-zca-mv.s b/gas/testsuite/gas/riscv/zc-zca-mv.s
new file mode 100644
index 00000000000..0e8b4064909
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-mv.s
@@ -0,0 +1,11 @@
+target:
+    c.mv x1, x2
+    c.mv x2, x1
+    c.mv x3, x2
+    c.mv x4, x3
+    c.mv x9, x9
+    c.mv x10, x11
+    c.mv x11, x10
+    c.mv x15, x13
+    c.mv x31, x2
+    c.mv x0, x1
diff --git a/gas/testsuite/gas/riscv/zc-zca-nop-fail.s b/gas/testsuite/gas/riscv/zc-zca-nop-fail.s
new file mode 100644
index 00000000000..d9fe2990434
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-nop-fail.s
@@ -0,0 +1,9 @@
+target:
+    nop 0.1
+    nop 1
+    nop x9
+
+    c.nop 32
+    c.nop -33
+    c.nop 0.0
+    c.nop x8
diff --git a/gas/testsuite/gas/riscv/zc-zca-nop-rv32-fail.d b/gas/testsuite/gas/riscv/zc-zca-nop-rv32-fail.d
new file mode 100644
index 00000000000..5e8d0dd7b3d
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-nop-rv32-fail.d
@@ -0,0 +1,3 @@
+#as: -march=rv32ifd_zca
+#source: zc-zca-nop-fail.s
+#error_output: zc-zca-nop-rv32-fail.l
\ No newline at end of file
diff --git a/gas/testsuite/gas/riscv/zc-zca-nop-rv32-fail.l b/gas/testsuite/gas/riscv/zc-zca-nop-rv32-fail.l
new file mode 100644
index 00000000000..047805a1203
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-nop-rv32-fail.l
@@ -0,0 +1,8 @@
+.*: Assembler messages:
+.*: Error: illegal operands `nop 0.1'
+.*: Error: illegal operands `nop 1'
+.*: Error: illegal operands `nop x9'
+.*: Error: illegal operands `c.nop 32'
+.*: Error: illegal operands `c.nop -33'
+.*: Error: illegal operands `c.nop 0.0'
+.*: Error: illegal operands `c.nop x8'
diff --git a/gas/testsuite/gas/riscv/zc-zca-nop-rv32.d b/gas/testsuite/gas/riscv/zc-zca-nop-rv32.d
new file mode 100644
index 00000000000..bc8f6746e62
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-nop-rv32.d
@@ -0,0 +1,15 @@
+#as: -march=rv32ifd_zca
+#source: zc-zca-nop.s
+#objdump: -d -Mno-aliases
+
+.*:[ 	]+file format .*
+
+
+Disassembly of section .text:
+
+0+000 <target>:
+[ 	]+0:[ 	]+0001[ 	]+c.addi[ 	]+zero,0
+[ 	]+2:[ 	]+007d[ 	]+c.addi[ 	]+zero,31
+[ 	]+4:[ 	]+1001[ 	]+c.addi[ 	]+zero,-32
+[ 	]+6:[ 	]+0001[ 	]+c.addi[ 	]+zero,0
+[ 	]+8:[ 	]+0041[ 	]+c.addi[ 	]+zero,16
diff --git a/gas/testsuite/gas/riscv/zc-zca-nop-rv64-fail.d b/gas/testsuite/gas/riscv/zc-zca-nop-rv64-fail.d
new file mode 100644
index 00000000000..8a5049e7f2b
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-nop-rv64-fail.d
@@ -0,0 +1,3 @@
+#as: -march=rv64ifd_zca
+#source: zc-zca-nop-fail.s
+#error_output: zc-zca-nop-rv64-fail.l
\ No newline at end of file
diff --git a/gas/testsuite/gas/riscv/zc-zca-nop-rv64-fail.l b/gas/testsuite/gas/riscv/zc-zca-nop-rv64-fail.l
new file mode 100644
index 00000000000..047805a1203
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-nop-rv64-fail.l
@@ -0,0 +1,8 @@
+.*: Assembler messages:
+.*: Error: illegal operands `nop 0.1'
+.*: Error: illegal operands `nop 1'
+.*: Error: illegal operands `nop x9'
+.*: Error: illegal operands `c.nop 32'
+.*: Error: illegal operands `c.nop -33'
+.*: Error: illegal operands `c.nop 0.0'
+.*: Error: illegal operands `c.nop x8'
diff --git a/gas/testsuite/gas/riscv/zc-zca-nop-rv64.d b/gas/testsuite/gas/riscv/zc-zca-nop-rv64.d
new file mode 100644
index 00000000000..15480045144
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-nop-rv64.d
@@ -0,0 +1,15 @@
+#as: -march=rv64ifd_zca
+#source: zc-zca-nop.s
+#objdump: -d -Mno-aliases
+
+.*:[ 	]+file format .*
+
+
+Disassembly of section .text:
+
+0+000 <target>:
+[ 	]+0:[ 	]+0001[ 	]+c.addi[ 	]+zero,0
+[ 	]+2:[ 	]+007d[ 	]+c.addi[ 	]+zero,31
+[ 	]+4:[ 	]+1001[ 	]+c.addi[ 	]+zero,-32
+[ 	]+6:[ 	]+0001[ 	]+c.addi[ 	]+zero,0
+[ 	]+8:[ 	]+0041[ 	]+c.addi[ 	]+zero,16
diff --git a/gas/testsuite/gas/riscv/zc-zca-nop.s b/gas/testsuite/gas/riscv/zc-zca-nop.s
new file mode 100644
index 00000000000..56b40e8f1db
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-nop.s
@@ -0,0 +1,6 @@
+target:
+    nop
+    c.nop 31
+    c.nop -32
+    c.nop
+    c.nop 16
diff --git a/gas/testsuite/gas/riscv/zc-zca-or-fail.s b/gas/testsuite/gas/riscv/zc-zca-or-fail.s
new file mode 100644
index 00000000000..67025363ee0
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-or-fail.s
@@ -0,0 +1,14 @@
+target:
+    c.or
+    c.or ,
+    c.or , x8
+    c.or x8,
+    c.or , ,
+
+    c.or x7, x8
+    c.or x16, x8
+    c.or 3, x8
+
+    c.or x8, x7
+    c.or x8, x16
+    c.or x8, 3
diff --git a/gas/testsuite/gas/riscv/zc-zca-or-rv32-fail.d b/gas/testsuite/gas/riscv/zc-zca-or-rv32-fail.d
new file mode 100644
index 00000000000..ef1a93cf036
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-or-rv32-fail.d
@@ -0,0 +1,3 @@
+#as: -march=rv32ifd_zca
+#source: zc-zca-or-fail.s
+#error_output: zc-zca-or-rv32-fail.l
diff --git a/gas/testsuite/gas/riscv/zc-zca-or-rv32-fail.l b/gas/testsuite/gas/riscv/zc-zca-or-rv32-fail.l
new file mode 100644
index 00000000000..be5a26d37f7
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-or-rv32-fail.l
@@ -0,0 +1,12 @@
+.*: Assembler messages:
+.*: Error: illegal operands `c.or'
+.*: Error: illegal operands `c.or ,'
+.*: Error: illegal operands `c.or ,x8'
+.*: Error: illegal operands `c.or x8,'
+.*: Error: illegal operands `c.or ,,'
+.*: Error: illegal operands `c.or x7,x8'
+.*: Error: illegal operands `c.or x16,x8'
+.*: Error: illegal operands `c.or 3,x8'
+.*: Error: illegal operands `c.or x8,x7'
+.*: Error: illegal operands `c.or x8,x16'
+.*: Error: illegal operands `c.or x8,3'
diff --git a/gas/testsuite/gas/riscv/zc-zca-or-rv32.d b/gas/testsuite/gas/riscv/zc-zca-or-rv32.d
new file mode 100644
index 00000000000..ae230dbc2c1
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-or-rv32.d
@@ -0,0 +1,14 @@
+#as: -march=rv32ifd_zca
+#source: zc-zca-or.s
+#objdump: -d -Mno-aliases
+
+.*:[ 	]+file format .*
+
+
+Disassembly of section .text:
+
+0+000 <target>:
+[ 	]+0:[ 	]+8c45[ 	]+c.or[ 	]+s0,s1
+[ 	]+2:[ 	]+8d4d[ 	]+c.or[ 	]+a0,a1
+[ 	]+4:[ 	]+8fdd[ 	]+c.or[ 	]+a5,a5
+[ 	]+6:[ 	]+00a4e433[ 	]+or[ 	]+s0,s1,a0
diff --git a/gas/testsuite/gas/riscv/zc-zca-or-rv64-fail.d b/gas/testsuite/gas/riscv/zc-zca-or-rv64-fail.d
new file mode 100644
index 00000000000..b840beaab3f
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-or-rv64-fail.d
@@ -0,0 +1,3 @@
+#as: -march=rv64ifd_zca
+#source: zc-zca-or-fail.s
+#error_output: zc-zca-or-rv64-fail.l
diff --git a/gas/testsuite/gas/riscv/zc-zca-or-rv64-fail.l b/gas/testsuite/gas/riscv/zc-zca-or-rv64-fail.l
new file mode 100644
index 00000000000..be5a26d37f7
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-or-rv64-fail.l
@@ -0,0 +1,12 @@
+.*: Assembler messages:
+.*: Error: illegal operands `c.or'
+.*: Error: illegal operands `c.or ,'
+.*: Error: illegal operands `c.or ,x8'
+.*: Error: illegal operands `c.or x8,'
+.*: Error: illegal operands `c.or ,,'
+.*: Error: illegal operands `c.or x7,x8'
+.*: Error: illegal operands `c.or x16,x8'
+.*: Error: illegal operands `c.or 3,x8'
+.*: Error: illegal operands `c.or x8,x7'
+.*: Error: illegal operands `c.or x8,x16'
+.*: Error: illegal operands `c.or x8,3'
diff --git a/gas/testsuite/gas/riscv/zc-zca-or-rv64.d b/gas/testsuite/gas/riscv/zc-zca-or-rv64.d
new file mode 100644
index 00000000000..c4c5c1a8ff5
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-or-rv64.d
@@ -0,0 +1,14 @@
+#as: -march=rv64ifd_zca
+#source: zc-zca-or.s
+#objdump: -d -Mno-aliases
+
+.*:[ 	]+file format .*
+
+
+Disassembly of section .text:
+
+0+000 <target>:
+[ 	]+0:[ 	]+8c45[ 	]+c.or[ 	]+s0,s1
+[ 	]+2:[ 	]+8d4d[ 	]+c.or[ 	]+a0,a1
+[ 	]+4:[ 	]+8fdd[ 	]+c.or[ 	]+a5,a5
+[ 	]+6:[ 	]+00a4e433[ 	]+or[ 	]+s0,s1,a0
diff --git a/gas/testsuite/gas/riscv/zc-zca-or.s b/gas/testsuite/gas/riscv/zc-zca-or.s
new file mode 100644
index 00000000000..c985589b036
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-or.s
@@ -0,0 +1,5 @@
+target:
+    c.or x8, x9
+    c.or x10,x11
+    c.or x15,x15
+    or x8,x9,x10
diff --git a/gas/testsuite/gas/riscv/zc-zca-rv32-jal-fail.d b/gas/testsuite/gas/riscv/zc-zca-rv32-jal-fail.d
new file mode 100644
index 00000000000..3568a39ac9d
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-rv32-jal-fail.d
@@ -0,0 +1,3 @@
+#as: -march=rv32ifd_zca
+#source: zc-zca-rv32-jal-fail.s
+#error_output: zc-zca-rv32-jal-fail.l
\ No newline at end of file
diff --git a/gas/testsuite/gas/riscv/zc-zca-rv32-jal-fail.l b/gas/testsuite/gas/riscv/zc-zca-rv32-jal-fail.l
new file mode 100644
index 00000000000..81b5af15493
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-rv32-jal-fail.l
@@ -0,0 +1,2 @@
+.*: Assembler messages:
+.*: Error: illegal operands `c.jal 2046.1'
\ No newline at end of file
diff --git a/gas/testsuite/gas/riscv/zc-zca-rv32-jal-fail.s b/gas/testsuite/gas/riscv/zc-zca-rv32-jal-fail.s
new file mode 100644
index 00000000000..5f0b144781a
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-rv32-jal-fail.s
@@ -0,0 +1,2 @@
+target:
+    c.jal 2046.1
diff --git a/gas/testsuite/gas/riscv/zc-zca-rv32-jal.d b/gas/testsuite/gas/riscv/zc-zca-rv32-jal.d
new file mode 100644
index 00000000000..b0c1f72e605
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-rv32-jal.d
@@ -0,0 +1,11 @@
+#as: -march=rv32ifd_zca
+#source: zc-zca-rv32-jal.s
+#objdump: -d -Mno-aliases
+
+.*:[ 	]+file format .*
+
+
+Disassembly of section .text:
+
+0+000 <target>:
+[ 	]+0:[ 	]+2001[ 	]+c.jal[ 	]+0[ ]+\<target\>
\ No newline at end of file
diff --git a/gas/testsuite/gas/riscv/zc-zca-rv32-jal.s b/gas/testsuite/gas/riscv/zc-zca-rv32-jal.s
new file mode 100644
index 00000000000..26f1c5f3f80
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-rv32-jal.s
@@ -0,0 +1,2 @@
+target:
+    c.jal target
diff --git a/gas/testsuite/gas/riscv/zc-zca-rv64-addw-fail.d b/gas/testsuite/gas/riscv/zc-zca-rv64-addw-fail.d
new file mode 100644
index 00000000000..69d7c013db7
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-rv64-addw-fail.d
@@ -0,0 +1,3 @@
+#as: -march=rv64ifd_zca
+#source: zc-zca-rv64-addw-fail.s
+#error_output: zc-zca-rv64-addw-fail.l
diff --git a/gas/testsuite/gas/riscv/zc-zca-rv64-addw-fail.l b/gas/testsuite/gas/riscv/zc-zca-rv64-addw-fail.l
new file mode 100644
index 00000000000..7de701323b1
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-rv64-addw-fail.l
@@ -0,0 +1,12 @@
+.*: Assembler messages:
+.*: Error: illegal operands `c.addw'
+.*: Error: illegal operands `c.addw ,'
+.*: Error: illegal operands `c.addw ,x8'
+.*: Error: illegal operands `c.addw x8,'
+.*: Error: illegal operands `c.addw ,,'
+.*: Error: illegal operands `c.addw x7,x8'
+.*: Error: illegal operands `c.addw x16,x8'
+.*: Error: illegal operands `c.addw 3,x8'
+.*: Error: illegal operands `c.addw x8,x7'
+.*: Error: illegal operands `c.addw x8,x16'
+.*: Error: illegal operands `c.addw x8,3'
diff --git a/gas/testsuite/gas/riscv/zc-zca-rv64-addw-fail.s b/gas/testsuite/gas/riscv/zc-zca-rv64-addw-fail.s
new file mode 100644
index 00000000000..ab61da6b2ec
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-rv64-addw-fail.s
@@ -0,0 +1,14 @@
+target:
+    c.addw
+    c.addw ,
+    c.addw , x8
+    c.addw x8,
+    c.addw , ,
+
+    c.addw x7, x8
+    c.addw x16, x8
+    c.addw 3, x8
+
+    c.addw x8, x7
+    c.addw x8, x16
+    c.addw x8, 3
diff --git a/gas/testsuite/gas/riscv/zc-zca-rv64-addw.d b/gas/testsuite/gas/riscv/zc-zca-rv64-addw.d
new file mode 100644
index 00000000000..ac6679164bf
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-rv64-addw.d
@@ -0,0 +1,14 @@
+#as: -march=rv64ifd_zca
+#source: zc-zca-rv64-addw.s
+#objdump: -d -Mno-aliases
+
+.*:[ 	]+file format .*
+
+
+Disassembly of section .text:
+
+0+000 <target>:
+[ 	]+0:[ 	]+9c25[ 	]+c.addw[ 	]+s0,s1
+[ 	]+2:[ 	]+9d2d[ 	]+c.addw[ 	]+a0,a1
+[ 	]+4:[ 	]+9fbd[ 	]+c.addw[ 	]+a5,a5
+[ 	]+6:[ 	]+00a4843b[ 	]+addw[ 	]+s0,s1,a0
diff --git a/gas/testsuite/gas/riscv/zc-zca-rv64-addw.s b/gas/testsuite/gas/riscv/zc-zca-rv64-addw.s
new file mode 100644
index 00000000000..d0a2108d3d9
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-rv64-addw.s
@@ -0,0 +1,5 @@
+target:
+    c.addw x8, x9
+    c.addw x10,x11
+    c.addw x15,x15
+    addw x8,x9,x10
diff --git a/gas/testsuite/gas/riscv/zc-zca-rv64-subw-fail.d b/gas/testsuite/gas/riscv/zc-zca-rv64-subw-fail.d
new file mode 100644
index 00000000000..8020e2762b4
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-rv64-subw-fail.d
@@ -0,0 +1,3 @@
+#as: -march=rv64ifd_zca
+#source: zc-zca-rv64-subw-fail.s
+#error_output: zc-zca-rv64-subw-fail.l
diff --git a/gas/testsuite/gas/riscv/zc-zca-rv64-subw-fail.l b/gas/testsuite/gas/riscv/zc-zca-rv64-subw-fail.l
new file mode 100644
index 00000000000..2bbc5166b88
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-rv64-subw-fail.l
@@ -0,0 +1,12 @@
+.*: Assembler messages:
+.*: Error: illegal operands `c.subw'
+.*: Error: illegal operands `c.subw ,'
+.*: Error: illegal operands `c.subw ,x8'
+.*: Error: illegal operands `c.subw x8,'
+.*: Error: illegal operands `c.subw ,,'
+.*: Error: illegal operands `c.subw x7,x8'
+.*: Error: illegal operands `c.subw x16,x8'
+.*: Error: illegal operands `c.subw 3,x8'
+.*: Error: illegal operands `c.subw x8,x7'
+.*: Error: illegal operands `c.subw x8,x16'
+.*: Error: illegal operands `c.subw x8,3'
diff --git a/gas/testsuite/gas/riscv/zc-zca-rv64-subw-fail.s b/gas/testsuite/gas/riscv/zc-zca-rv64-subw-fail.s
new file mode 100644
index 00000000000..2ca657e2935
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-rv64-subw-fail.s
@@ -0,0 +1,14 @@
+target:
+    c.subw
+    c.subw ,
+    c.subw , x8
+    c.subw x8,
+    c.subw , ,
+
+    c.subw x7, x8
+    c.subw x16, x8
+    c.subw 3, x8
+
+    c.subw x8, x7
+    c.subw x8, x16
+    c.subw x8, 3
diff --git a/gas/testsuite/gas/riscv/zc-zca-rv64-subw.d b/gas/testsuite/gas/riscv/zc-zca-rv64-subw.d
new file mode 100644
index 00000000000..146e58988d0
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-rv64-subw.d
@@ -0,0 +1,14 @@
+#as: -march=rv64ifd_zca
+#source: zc-zca-rv64-subw.s
+#objdump: -d -Mno-aliases
+
+.*:[ 	]+file format .*
+
+
+Disassembly of section .text:
+
+0+000 <target>:
+[ 	]+0:[ 	]+9c05[ 	]+c.subw[ 	]+s0,s1
+[ 	]+2:[ 	]+9d0d[ 	]+c.subw[ 	]+a0,a1
+[ 	]+4:[ 	]+9f9d[ 	]+c.subw[ 	]+a5,a5
+[ 	]+6:[ 	]+40a4843b[ 	]+subw[ 	]+s0,s1,a0
diff --git a/gas/testsuite/gas/riscv/zc-zca-rv64-subw.s b/gas/testsuite/gas/riscv/zc-zca-rv64-subw.s
new file mode 100644
index 00000000000..1c1c7165f7c
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-rv64-subw.s
@@ -0,0 +1,5 @@
+target:
+    c.subw x8, x9
+    c.subw x10,x11
+    c.subw x15,x15
+    subw x8,x9,x10
diff --git a/gas/testsuite/gas/riscv/zc-zca-sd-fail.s b/gas/testsuite/gas/riscv/zc-zca-sd-fail.s
new file mode 100644
index 00000000000..c4b1285e15d
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-sd-fail.s
@@ -0,0 +1,26 @@
+target:
+    c.sd
+    c.sd ,
+    c.sd , (x9)
+    c.sd x8,
+    c.sd x8, 8
+    c.sd x8, x9
+
+    c.sd x7, (x9)
+    c.sd x16, (x8)
+    c.sd 8, (x8)
+
+    c.sd x10, (x7)
+    c.sd x10, (x16)
+    c.sd x10, (x0)
+    c.sd x10, (x2)
+    c.sd x10, (x31)
+
+    c.sd x11, 1(x8)
+    c.sd x11, 7(x8)
+    c.sd x11, -8(x8)
+    c.sd x11, 8.0(x8)
+    c.sd x11, 9(x8)
+    c.sd x11, 249(x8)
+    c.sd x11, 255(x8)
+    c.sd x11, 256(x8)
diff --git a/gas/testsuite/gas/riscv/zc-zca-sd-rv64-fail.d b/gas/testsuite/gas/riscv/zc-zca-sd-rv64-fail.d
new file mode 100644
index 00000000000..3580e4909e6
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-sd-rv64-fail.d
@@ -0,0 +1,3 @@
+#as: -march=rv64ifd_zca
+#source: zc-zca-sd-fail.s
+#error_output: zc-zca-sd-rv64-fail.l
diff --git a/gas/testsuite/gas/riscv/zc-zca-sd-rv64-fail.l b/gas/testsuite/gas/riscv/zc-zca-sd-rv64-fail.l
new file mode 100644
index 00000000000..abc929c0f44
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-sd-rv64-fail.l
@@ -0,0 +1,23 @@
+.*: Assembler messages:
+.*: Error: illegal operands `c.sd'
+.*: Error: illegal operands `c.sd ,'
+.*: Error: illegal operands `c.sd ,\(x9\)'
+.*: Error: illegal operands `c.sd x8,'
+.*: Error: illegal operands `c.sd x8,8'
+.*: Error: illegal operands `c.sd x8,x9'
+.*: Error: illegal operands `c.sd x7,\(x9\)'
+.*: Error: illegal operands `c.sd x16,\(x8\)'
+.*: Error: illegal operands `c.sd 8,\(x8\)'
+.*: Error: illegal operands `c.sd x10,\(x7\)'
+.*: Error: illegal operands `c.sd x10,\(x16\)'
+.*: Error: illegal operands `c.sd x10,\(x0\)'
+.*: Error: illegal operands `c.sd x10,\(x2\)'
+.*: Error: illegal operands `c.sd x10,\(x31\)'
+.*: Error: illegal operands `c.sd x11,1\(x8\)'
+.*: Error: illegal operands `c.sd x11,7\(x8\)'
+.*: Error: illegal operands `c.sd x11,-8\(x8\)'
+.*: Error: illegal operands `c.sd x11,8.0\(x8\)'
+.*: Error: illegal operands `c.sd x11,9\(x8\)'
+.*: Error: illegal operands `c.sd x11,249\(x8\)'
+.*: Error: illegal operands `c.sd x11,255\(x8\)'
+.*: Error: illegal operands `c.sd x11,256\(x8\)'
diff --git a/gas/testsuite/gas/riscv/zc-zca-sd-rv64.d b/gas/testsuite/gas/riscv/zc-zca-sd-rv64.d
new file mode 100644
index 00000000000..86098959f4f
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-sd-rv64.d
@@ -0,0 +1,15 @@
+#as: -march=rv64ifd_zca
+#source: zc-zca-sd.s
+#objdump: -d -Mno-aliases
+
+.*:[ 	]+file format .*
+
+
+Disassembly of section .text:
+
+0+000 <target>:
+[ 	]+0:[ 	]+e380[ 	]+c.sd[ 	]+s0,0\(a5\)
+[ 	]+2:[ 	]+e504[ 	]+c.sd[ 	]+s1,8\(a0\)
+[ 	]+4:[ 	]+e988[ 	]+c.sd[ 	]+a0,16\(a1\)
+[ 	]+6:[ 	]+fc7c[ 	]+c.sd[ 	]+a5,248\(s0\)
+[ 	]+8:[ 	]+e02a[ 	]+c.sdsp[ 	]+a0,0\(sp\)
diff --git a/gas/testsuite/gas/riscv/zc-zca-sd.s b/gas/testsuite/gas/riscv/zc-zca-sd.s
new file mode 100644
index 00000000000..0c4d77ed517
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-sd.s
@@ -0,0 +1,6 @@
+target:
+    c.sd x8, (x15)
+    c.sd x9, 8(x10)
+    c.sd x10, 16(x11)
+    c.sd x15, 248(x8)
+    sd a0, (sp)
diff --git a/gas/testsuite/gas/riscv/zc-zca-sdsp-fail.s b/gas/testsuite/gas/riscv/zc-zca-sdsp-fail.s
new file mode 100644
index 00000000000..bac99914a94
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-sdsp-fail.s
@@ -0,0 +1,20 @@
+target:
+    c.sdsp
+    c.sdsp ,
+    c.sdsp , (x2)
+    c.sdsp x1,
+    c.sdsp x1, 8
+    c.sdsp x1, 8(x2
+
+    c.sdsp 8, (x2)
+    c.sdsp x32, (x2)
+
+    c.sdsp x12, 1(x2)
+    c.sdsp x12, -8(x2)
+    c.sdsp x12, 7(x2)
+    c.sdsp x12, 8(x3)
+    c.sdsp x12, 8(x1)
+    c.sdsp x12, 8(x0)
+    c.sdsp x12, 9(x2)
+    c.sdsp x12, 511(x2)
+    c.sdsp x12, 512(x2)
diff --git a/gas/testsuite/gas/riscv/zc-zca-sdsp-rv64-fail.d b/gas/testsuite/gas/riscv/zc-zca-sdsp-rv64-fail.d
new file mode 100644
index 00000000000..6ebaa5177fd
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-sdsp-rv64-fail.d
@@ -0,0 +1,3 @@
+#as: -march=rv64ifd_zca
+#source: zc-zca-sdsp-fail.s
+#error_output: zc-zca-sdsp-rv64-fail.l
diff --git a/gas/testsuite/gas/riscv/zc-zca-sdsp-rv64-fail.l b/gas/testsuite/gas/riscv/zc-zca-sdsp-rv64-fail.l
new file mode 100644
index 00000000000..d35354c15d3
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-sdsp-rv64-fail.l
@@ -0,0 +1,18 @@
+.*: Assembler messages:
+.*: Error: illegal operands `c.sdsp'
+.*: Error: illegal operands `c.sdsp ,'
+.*: Error: illegal operands `c.sdsp ,\(x2\)'
+.*: Error: illegal operands `c.sdsp x1,'
+.*: Error: illegal operands `c.sdsp x1,8'
+.*: Error: illegal operands `c.sdsp x1,8\(x2'
+.*: Error: illegal operands `c.sdsp 8,\(x2\)'
+.*: Error: illegal operands `c.sdsp x32,\(x2\)'
+.*: Error: illegal operands `c.sdsp x12,1\(x2\)'
+.*: Error: illegal operands `c.sdsp x12,-8\(x2\)'
+.*: Error: illegal operands `c.sdsp x12,7\(x2\)'
+.*: Error: illegal operands `c.sdsp x12,8\(x3\)'
+.*: Error: illegal operands `c.sdsp x12,8\(x1\)'
+.*: Error: illegal operands `c.sdsp x12,8\(x0\)'
+.*: Error: illegal operands `c.sdsp x12,9\(x2\)'
+.*: Error: illegal operands `c.sdsp x12,511\(x2\)'
+.*: Error: illegal operands `c.sdsp x12,512\(x2\)'
diff --git a/gas/testsuite/gas/riscv/zc-zca-sdsp-rv64.d b/gas/testsuite/gas/riscv/zc-zca-sdsp-rv64.d
new file mode 100644
index 00000000000..7d42393e514
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-sdsp-rv64.d
@@ -0,0 +1,19 @@
+#as: -march=rv64ifd_zca
+#source: zc-zca-sdsp.s
+#objdump: -d -Mno-aliases
+
+.*:[ 	]+file format .*
+
+
+Disassembly of section .text:
+
+0+000 <target>:
+[ 	]+0:[ 	]+e002[ 	]+c.sdsp[ 	]+zero,0\(sp\)
+[ 	]+2:[ 	]+e006[ 	]+c.sdsp[ 	]+ra,0\(sp\)
+[ 	]+4:[ 	]+e40a[ 	]+c.sdsp[ 	]+sp,8\(sp\)
+[ 	]+6:[ 	]+e80e[ 	]+c.sdsp[ 	]+gp,16\(sp\)
+[ 	]+8:[ 	]+f012[ 	]+c.sdsp[ 	]+tp,32\(sp\)
+[ 	]+a:[ 	]+f426[ 	]+c.sdsp[ 	]+s1,40\(sp\)
+[ 	]+c:[ 	]+e0aa[ 	]+c.sdsp[ 	]+a0,64\(sp\)
+[ 	]+e:[ 	]+e12e[ 	]+c.sdsp[ 	]+a1,128\(sp\)
+[ 	]+10:[ 	]+fffe[ 	]+c.sdsp[ 	]+t6,504\(sp\)
diff --git a/gas/testsuite/gas/riscv/zc-zca-sdsp.s b/gas/testsuite/gas/riscv/zc-zca-sdsp.s
new file mode 100644
index 00000000000..348bd60bb36
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-sdsp.s
@@ -0,0 +1,10 @@
+target:
+    c.sdsp x0, (x2)
+    c.sdsp x1, (x2)
+    c.sdsp x2, 8(x2)
+    c.sdsp x3, 16(x2)
+    c.sdsp x4, 32(x2)
+    c.sdsp x9, 40(x2)
+    c.sdsp x10, 64(x2)
+    c.sdsp x11, 128(x2)
+    c.sdsp x31, 504(x2)
diff --git a/gas/testsuite/gas/riscv/zc-zca-slli-rv32-fail.d b/gas/testsuite/gas/riscv/zc-zca-slli-rv32-fail.d
new file mode 100644
index 00000000000..08bdb5cb2b7
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-slli-rv32-fail.d
@@ -0,0 +1,3 @@
+#as: -march=rv32ifd_zca
+#source: zc-zca-slli-rv32-fail.s
+#error_output: zc-zca-slli-rv32-fail.l
diff --git a/gas/testsuite/gas/riscv/zc-zca-slli-rv32-fail.l b/gas/testsuite/gas/riscv/zc-zca-slli-rv32-fail.l
new file mode 100644
index 00000000000..25d3de7b78f
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-slli-rv32-fail.l
@@ -0,0 +1,12 @@
+.*: Assembler messages:
+.*: Error: illegal operands `c.slli'
+.*: Error: illegal operands `c.slli ,'
+.*: Error: illegal operands `c.slli ,1'
+.*: Error: illegal operands `c.slli x1,'
+.*: Error: illegal operands `c.slli x1,x2,4'
+.*: Error: illegal operands `c.slli 4,1'
+.*: Error: illegal operands `c.slli x0,0'
+.*: Error: illegal operands `c.slli x1,-1'
+.*: Error: illegal operands `c.slli x1,1.0'
+.*: Error: illegal operands `c.slli x1,32'
+.*: Error: illegal operands `c.slli x1,x8'
diff --git a/gas/testsuite/gas/riscv/zc-zca-slli-rv32-fail.s b/gas/testsuite/gas/riscv/zc-zca-slli-rv32-fail.s
new file mode 100644
index 00000000000..d0dcaec442e
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-slli-rv32-fail.s
@@ -0,0 +1,13 @@
+target:
+    c.slli
+    c.slli ,
+    c.slli , 1
+    c.slli x1,
+    c.slli x1,x2,4
+
+    c.slli 4, 1
+    c.slli x0, 0
+    c.slli x1, -1
+    c.slli x1, 1.0
+    c.slli x1, 32
+    c.slli x1, x8
diff --git a/gas/testsuite/gas/riscv/zc-zca-slli-rv32.d b/gas/testsuite/gas/riscv/zc-zca-slli-rv32.d
new file mode 100644
index 00000000000..d2a0b435f5f
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-slli-rv32.d
@@ -0,0 +1,19 @@
+#as: -march=rv32ifd_zca
+#source: zc-zca-slli-rv32.s
+#objdump: -d -Mno-aliases
+
+.*:[ 	]+file format .*
+
+
+Disassembly of section .text:
+
+0+000 <target>:
+[ 	]+0:[ 	]+0086[ 	]+c.slli[ 	]+ra,0x1
+[ 	]+2:[ 	]+010e[ 	]+c.slli[ 	]+sp,0x3
+[ 	]+4:[ 	]+018a[ 	]+c.slli[ 	]+gp,0x2
+[ 	]+6:[ 	]+022a[ 	]+c.slli[ 	]+tp,0xa
+[ 	]+8:[ 	]+043e[ 	]+c.slli[ 	]+s0,0xf
+[ 	]+a:[ 	]+0546[ 	]+c.slli[ 	]+a0,0x11
+[ 	]+c:[ 	]+0fa6[ 	]+c.slli[ 	]+t6,0x9
+[ 	]+e:[ 	]+00489613[ 	]+slli[ 	]+a2,a7,0x4
+[ 	]+12:[ 	]+0006[ 	]+c.slli[ 	]+zero,0x1
diff --git a/gas/testsuite/gas/riscv/zc-zca-slli-rv32.s b/gas/testsuite/gas/riscv/zc-zca-slli-rv32.s
new file mode 100644
index 00000000000..ea1636ec0e6
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-slli-rv32.s
@@ -0,0 +1,10 @@
+target:
+    c.slli x1, 1
+    c.slli x2, 3
+    c.slli x3, 2
+    c.slli x4, 10
+    c.slli x8, 15
+    c.slli x10, 17
+    c.slli x31, 9
+    slli x12,x17, 4
+    c.slli x0, 1
diff --git a/gas/testsuite/gas/riscv/zc-zca-slli-rv64-fail.d b/gas/testsuite/gas/riscv/zc-zca-slli-rv64-fail.d
new file mode 100644
index 00000000000..0ac30d6ee8c
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-slli-rv64-fail.d
@@ -0,0 +1,3 @@
+#as: -march=rv64ifd_zca
+#source: zc-zca-slli-rv64-fail.s
+#error_output: zc-zca-slli-rv64-fail.l
diff --git a/gas/testsuite/gas/riscv/zc-zca-slli-rv64-fail.l b/gas/testsuite/gas/riscv/zc-zca-slli-rv64-fail.l
new file mode 100644
index 00000000000..774909fe4ed
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-slli-rv64-fail.l
@@ -0,0 +1,12 @@
+.*: Assembler messages:
+.*: Error: illegal operands `c.slli'
+.*: Error: illegal operands `c.slli ,'
+.*: Error: illegal operands `c.slli ,1'
+.*: Error: illegal operands `c.slli x1,'
+.*: Error: illegal operands `c.slli x1,x2,4'
+.*: Error: illegal operands `c.slli 4,1'
+.*: Error: illegal operands `c.slli x0,0'
+.*: Error: illegal operands `c.slli x1,-1'
+.*: Error: illegal operands `c.slli x1,1.0'
+.*: Error: illegal operands `c.slli x1,64'
+.*: Error: illegal operands `c.slli x1,x8'
diff --git a/gas/testsuite/gas/riscv/zc-zca-slli-rv64-fail.s b/gas/testsuite/gas/riscv/zc-zca-slli-rv64-fail.s
new file mode 100644
index 00000000000..8b485b73874
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-slli-rv64-fail.s
@@ -0,0 +1,13 @@
+target:
+    c.slli
+    c.slli ,
+    c.slli , 1
+    c.slli x1,
+    c.slli x1,x2,4
+
+    c.slli 4, 1
+    c.slli x0, 0
+    c.slli x1, -1
+    c.slli x1, 1.0
+    c.slli x1, 64
+    c.slli x1, x8
diff --git a/gas/testsuite/gas/riscv/zc-zca-slli-rv64.d b/gas/testsuite/gas/riscv/zc-zca-slli-rv64.d
new file mode 100644
index 00000000000..65b009dfdae
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-slli-rv64.d
@@ -0,0 +1,19 @@
+#as: -march=rv64ifd_zca
+#source: zc-zca-slli-rv64.s
+#objdump: -d -Mno-aliases
+
+.*:[ 	]+file format .*
+
+
+Disassembly of section .text:
+
+0+000 <target>:
+[ 	]+0:[ 	]+0086[ 	]+c.slli[ 	]+ra,0x1
+[ 	]+2:[ 	]+117e[ 	]+c.slli[ 	]+sp,0x3f
+[ 	]+4:[ 	]+018a[ 	]+c.slli[ 	]+gp,0x2
+[ 	]+6:[ 	]+022a[ 	]+c.slli[ 	]+tp,0xa
+[ 	]+8:[ 	]+1402[ 	]+c.slli[ 	]+s0,0x20
+[ 	]+a:[ 	]+0546[ 	]+c.slli[ 	]+a0,0x11
+[ 	]+c:[ 	]+0fa6[ 	]+c.slli[ 	]+t6,0x9
+[ 	]+e:[ 	]+00489613[ 	]+slli[ 	]+a2,a7,0x4
+[ 	]+12:[ 	]+0006[ 	]+c.slli[ 	]+zero,0x1
diff --git a/gas/testsuite/gas/riscv/zc-zca-slli-rv64.s b/gas/testsuite/gas/riscv/zc-zca-slli-rv64.s
new file mode 100644
index 00000000000..e951ccd2adf
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-slli-rv64.s
@@ -0,0 +1,10 @@
+target:
+    c.slli x1, 1
+    c.slli x2, 63
+    c.slli x3, 2
+    c.slli x4, 10
+    c.slli x8, 32
+    c.slli x10, 17
+    c.slli x31, 9
+    slli x12,x17, 4
+    c.slli x0, 1
diff --git a/gas/testsuite/gas/riscv/zc-zca-slli64-fail.s b/gas/testsuite/gas/riscv/zc-zca-slli64-fail.s
new file mode 100644
index 00000000000..2d2035e3ccd
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-slli64-fail.s
@@ -0,0 +1,4 @@
+target:
+    c.slli64
+    c.slli64 x1,
+    c.slli64 3
diff --git a/gas/testsuite/gas/riscv/zc-zca-slli64-rv32-fail.d b/gas/testsuite/gas/riscv/zc-zca-slli64-rv32-fail.d
new file mode 100644
index 00000000000..eaa3f878fc0
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-slli64-rv32-fail.d
@@ -0,0 +1,3 @@
+#as: -march=rv32ifd_zca
+#source: zc-zca-slli64-fail.s
+#error_output: zc-zca-slli64-rv32-fail.l
diff --git a/gas/testsuite/gas/riscv/zc-zca-slli64-rv32-fail.l b/gas/testsuite/gas/riscv/zc-zca-slli64-rv32-fail.l
new file mode 100644
index 00000000000..0288c6a453c
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-slli64-rv32-fail.l
@@ -0,0 +1,4 @@
+.*: Assembler messages:
+.*: Error: illegal operands `c.slli64'
+.*: Error: illegal operands `c.slli64 x1,'
+.*: Error: illegal operands `c.slli64 3'
diff --git a/gas/testsuite/gas/riscv/zc-zca-slli64-rv32.d b/gas/testsuite/gas/riscv/zc-zca-slli64-rv32.d
new file mode 100644
index 00000000000..05e69fd0d97
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-slli64-rv32.d
@@ -0,0 +1,18 @@
+#as: -march=rv32ifd_zca
+#source: zc-zca-slli64.s
+#objdump: -d -Mno-aliases
+
+.*:[ 	]+file format .*
+
+
+Disassembly of section .text:
+
+0+000 <target>:
+[ 	]+0:[ 	]+0082[ 	]+c.slli64[ 	]+ra
+[ 	]+2:[ 	]+0102[ 	]+c.slli64[ 	]+sp
+[ 	]+4:[ 	]+0182[ 	]+c.slli64[ 	]+gp
+[ 	]+6:[ 	]+0202[ 	]+c.slli64[ 	]+tp
+[ 	]+8:[ 	]+0402[ 	]+c.slli64[ 	]+s0
+[ 	]+a:[ 	]+0782[ 	]+c.slli64[ 	]+a5
+[ 	]+c:[ 	]+0f82[ 	]+c.slli64[ 	]+t6
+[ 	]+e:[ 	]+0002[ 	]+c.slli64[ 	]+zero
diff --git a/gas/testsuite/gas/riscv/zc-zca-slli64-rv64-fail.d b/gas/testsuite/gas/riscv/zc-zca-slli64-rv64-fail.d
new file mode 100644
index 00000000000..7e196e833b6
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-slli64-rv64-fail.d
@@ -0,0 +1,3 @@
+#as: -march=rv64ifd_zca
+#source: zc-zca-slli64-fail.s
+#error_output: zc-zca-slli64-rv64-fail.l
diff --git a/gas/testsuite/gas/riscv/zc-zca-slli64-rv64-fail.l b/gas/testsuite/gas/riscv/zc-zca-slli64-rv64-fail.l
new file mode 100644
index 00000000000..0288c6a453c
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-slli64-rv64-fail.l
@@ -0,0 +1,4 @@
+.*: Assembler messages:
+.*: Error: illegal operands `c.slli64'
+.*: Error: illegal operands `c.slli64 x1,'
+.*: Error: illegal operands `c.slli64 3'
diff --git a/gas/testsuite/gas/riscv/zc-zca-slli64-rv64.d b/gas/testsuite/gas/riscv/zc-zca-slli64-rv64.d
new file mode 100644
index 00000000000..3addbdfd445
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-slli64-rv64.d
@@ -0,0 +1,18 @@
+#as: -march=rv64ifd_zca
+#source: zc-zca-slli64.s
+#objdump: -d -Mno-aliases
+
+.*:[ 	]+file format .*
+
+
+Disassembly of section .text:
+
+0+000 <target>:
+[ 	]+0:[ 	]+0082[ 	]+c.slli64[ 	]+ra
+[ 	]+2:[ 	]+0102[ 	]+c.slli64[ 	]+sp
+[ 	]+4:[ 	]+0182[ 	]+c.slli64[ 	]+gp
+[ 	]+6:[ 	]+0202[ 	]+c.slli64[ 	]+tp
+[ 	]+8:[ 	]+0402[ 	]+c.slli64[ 	]+s0
+[ 	]+a:[ 	]+0782[ 	]+c.slli64[ 	]+a5
+[ 	]+c:[ 	]+0f82[ 	]+c.slli64[ 	]+t6
+[ 	]+e:[ 	]+0002[ 	]+c.slli64[ 	]+zero
diff --git a/gas/testsuite/gas/riscv/zc-zca-slli64.s b/gas/testsuite/gas/riscv/zc-zca-slli64.s
new file mode 100644
index 00000000000..251c728e418
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-slli64.s
@@ -0,0 +1,9 @@
+target:
+    c.slli64 x1
+    c.slli64 x2
+    c.slli64 x3
+    c.slli64 x4
+    c.slli64 x8
+    c.slli64 x15
+    c.slli64 x31
+    c.slli64 x0
diff --git a/gas/testsuite/gas/riscv/zc-zca-srai-rv32-fail.d b/gas/testsuite/gas/riscv/zc-zca-srai-rv32-fail.d
new file mode 100644
index 00000000000..212e1a082f3
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-srai-rv32-fail.d
@@ -0,0 +1,3 @@
+#as: -march=rv32ifd_zca
+#source: zc-zca-srai-rv32-fail.s
+#error_output: zc-zca-srai-rv32-fail.l
diff --git a/gas/testsuite/gas/riscv/zc-zca-srai-rv32-fail.l b/gas/testsuite/gas/riscv/zc-zca-srai-rv32-fail.l
new file mode 100644
index 00000000000..655f05faddd
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-srai-rv32-fail.l
@@ -0,0 +1,14 @@
+.*: Assembler messages:
+.*: Error: illegal operands `c.srai'
+.*: Error: illegal operands `c.srai ,'
+.*: Error: illegal operands `c.srai ,1'
+.*: Error: illegal operands `c.srai x8,'
+.*: Error: illegal operands `c.srai x8,x11,15'
+.*: Error: illegal operands `c.srai x7,1'
+.*: Error: illegal operands `c.srai x16,1'
+.*: Error: illegal operands `c.srai 1,1'
+.*: Error: illegal operands `c.srai x8,0'
+.*: Error: illegal operands `c.srai x8,32'
+.*: Error: illegal operands `c.srai x8,-1'
+.*: Error: illegal operands `c.srai x8,1.0'
+.*: Error: illegal operands `c.srai x8,x10'
diff --git a/gas/testsuite/gas/riscv/zc-zca-srai-rv32-fail.s b/gas/testsuite/gas/riscv/zc-zca-srai-rv32-fail.s
new file mode 100644
index 00000000000..34f98bab50e
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-srai-rv32-fail.s
@@ -0,0 +1,15 @@
+target:
+    c.srai
+    c.srai ,
+    c.srai , 1
+    c.srai x8,
+    c.srai x8, x11, 15
+
+    c.srai x7, 1
+    c.srai x16, 1
+    c.srai 1, 1
+    c.srai x8, 0
+    c.srai x8, 32
+    c.srai x8, -1
+    c.srai x8, 1.0
+    c.srai x8, x10
diff --git a/gas/testsuite/gas/riscv/zc-zca-srai-rv32.d b/gas/testsuite/gas/riscv/zc-zca-srai-rv32.d
new file mode 100644
index 00000000000..cccf6ef0988
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-srai-rv32.d
@@ -0,0 +1,14 @@
+#as: -march=rv32ifd_zca
+#source: zc-zca-srai-rv32.s
+#objdump: -d -Mno-aliases
+
+.*:[ 	]+file format .*
+
+
+Disassembly of section .text:
+
+0+000 <target>:
+[ 	]+0:[ 	]+8405[ 	]+c.srai[ 	]+s0,0x1
+[ 	]+2:[ 	]+853d[ 	]+c.srai[ 	]+a0,0xf
+[ 	]+4:[ 	]+87fd[ 	]+c.srai[ 	]+a5,0x1f
+[ 	]+6:[ 	]+40f5d413[ 	]+srai[ 	]+s0,a1,0xf
diff --git a/gas/testsuite/gas/riscv/zc-zca-srai-rv32.s b/gas/testsuite/gas/riscv/zc-zca-srai-rv32.s
new file mode 100644
index 00000000000..ec7b6aa499c
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-srai-rv32.s
@@ -0,0 +1,5 @@
+target:
+    c.srai x8, 1
+    c.srai x10, 15
+    c.srai x15, 31
+    srai x8, x11, 15
diff --git a/gas/testsuite/gas/riscv/zc-zca-srai-rv64-fail.d b/gas/testsuite/gas/riscv/zc-zca-srai-rv64-fail.d
new file mode 100644
index 00000000000..40796583470
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-srai-rv64-fail.d
@@ -0,0 +1,3 @@
+#as: -march=rv64ifd_zca
+#source: zc-zca-srai-rv64-fail.s
+#error_output: zc-zca-srai-rv64-fail.l
diff --git a/gas/testsuite/gas/riscv/zc-zca-srai-rv64-fail.l b/gas/testsuite/gas/riscv/zc-zca-srai-rv64-fail.l
new file mode 100644
index 00000000000..fe1ad1cc838
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-srai-rv64-fail.l
@@ -0,0 +1,14 @@
+.*: Assembler messages:
+.*: Error: illegal operands `c.srai'
+.*: Error: illegal operands `c.srai ,'
+.*: Error: illegal operands `c.srai ,1'
+.*: Error: illegal operands `c.srai x8,'
+.*: Error: illegal operands `c.srai x8,x11,15'
+.*: Error: illegal operands `c.srai x7,1'
+.*: Error: illegal operands `c.srai x16,1'
+.*: Error: illegal operands `c.srai 1,1'
+.*: Error: illegal operands `c.srai x8,0'
+.*: Error: illegal operands `c.srai x8,64'
+.*: Error: illegal operands `c.srai x8,-1'
+.*: Error: illegal operands `c.srai x8,1.0'
+.*: Error: illegal operands `c.srai x8,x10'
diff --git a/gas/testsuite/gas/riscv/zc-zca-srai-rv64-fail.s b/gas/testsuite/gas/riscv/zc-zca-srai-rv64-fail.s
new file mode 100644
index 00000000000..8915f77fb50
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-srai-rv64-fail.s
@@ -0,0 +1,15 @@
+target:
+    c.srai
+    c.srai ,
+    c.srai , 1
+    c.srai x8,
+    c.srai x8, x11, 15
+
+    c.srai x7, 1
+    c.srai x16, 1
+    c.srai 1, 1
+    c.srai x8, 0
+    c.srai x8, 64
+    c.srai x8, -1
+    c.srai x8, 1.0
+    c.srai x8, x10
diff --git a/gas/testsuite/gas/riscv/zc-zca-srai-rv64.d b/gas/testsuite/gas/riscv/zc-zca-srai-rv64.d
new file mode 100644
index 00000000000..847bf7dc6d4
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-srai-rv64.d
@@ -0,0 +1,14 @@
+#as: -march=rv64ifd_zca
+#source: zc-zca-srai-rv64.s
+#objdump: -d -Mno-aliases
+
+.*:[ 	]+file format .*
+
+
+Disassembly of section .text:
+
+0+000 <target>:
+[ 	]+0:[ 	]+8405[ 	]+c.srai[ 	]+s0,0x1
+[ 	]+2:[ 	]+9505[ 	]+c.srai[ 	]+a0,0x21
+[ 	]+4:[ 	]+97fd[ 	]+c.srai[ 	]+a5,0x3f
+[ 	]+6:[ 	]+40f5d413[ 	]+srai[ 	]+s0,a1,0xf
diff --git a/gas/testsuite/gas/riscv/zc-zca-srai-rv64.s b/gas/testsuite/gas/riscv/zc-zca-srai-rv64.s
new file mode 100644
index 00000000000..9a4bb2a519b
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-srai-rv64.s
@@ -0,0 +1,5 @@
+target:
+    c.srai x8, 1
+    c.srai x10, 33
+    c.srai x15, 63
+    srai x8, x11, 15
diff --git a/gas/testsuite/gas/riscv/zc-zca-srai64-fail.s b/gas/testsuite/gas/riscv/zc-zca-srai64-fail.s
new file mode 100644
index 00000000000..6143b3356de
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-srai64-fail.s
@@ -0,0 +1,6 @@
+target:
+    C.srai64
+    C.srai64 x8,
+    c.srai64 x7
+    c.srai64 x16
+    c.srai64 3
diff --git a/gas/testsuite/gas/riscv/zc-zca-srai64-rv32-fail.d b/gas/testsuite/gas/riscv/zc-zca-srai64-rv32-fail.d
new file mode 100644
index 00000000000..a9bc928397c
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-srai64-rv32-fail.d
@@ -0,0 +1,3 @@
+#as: -march=rv32ifd_zca
+#source: zc-zca-srai64-fail.s
+#error_output: zc-zca-srai64-rv32-fail.l
diff --git a/gas/testsuite/gas/riscv/zc-zca-srai64-rv32-fail.l b/gas/testsuite/gas/riscv/zc-zca-srai64-rv32-fail.l
new file mode 100644
index 00000000000..9f0719d629d
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-srai64-rv32-fail.l
@@ -0,0 +1,6 @@
+.*: Assembler messages:
+.*: Error: illegal operands `c.srai64'
+.*: Error: illegal operands `c.srai64 x8,'
+.*: Error: illegal operands `c.srai64 x7'
+.*: Error: illegal operands `c.srai64 x16'
+.*: Error: illegal operands `c.srai64 3'
diff --git a/gas/testsuite/gas/riscv/zc-zca-srai64-rv32.d b/gas/testsuite/gas/riscv/zc-zca-srai64-rv32.d
new file mode 100644
index 00000000000..4ff3b72dc63
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-srai64-rv32.d
@@ -0,0 +1,13 @@
+#as: -march=rv32ifd_zca
+#source: zc-zca-srai64.s
+#objdump: -d -Mno-aliases
+
+.*:[ 	]+file format .*
+
+
+Disassembly of section .text:
+
+0+000 <target>:
+[ 	]+0:[ 	]+8401[ 	]+c.srai64[ 	]+s0
+[ 	]+2:[ 	]+8501[ 	]+c.srai64[ 	]+a0
+[ 	]+4:[ 	]+8781[ 	]+c.srai64[ 	]+a5
diff --git a/gas/testsuite/gas/riscv/zc-zca-srai64-rv64-fail.d b/gas/testsuite/gas/riscv/zc-zca-srai64-rv64-fail.d
new file mode 100644
index 00000000000..88b5dd52bd2
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-srai64-rv64-fail.d
@@ -0,0 +1,3 @@
+#as: -march=rv64ifd_zca
+#source: zc-zca-srai64-fail.s
+#error_output: zc-zca-srai64-rv64-fail.l
diff --git a/gas/testsuite/gas/riscv/zc-zca-srai64-rv64-fail.l b/gas/testsuite/gas/riscv/zc-zca-srai64-rv64-fail.l
new file mode 100644
index 00000000000..9f0719d629d
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-srai64-rv64-fail.l
@@ -0,0 +1,6 @@
+.*: Assembler messages:
+.*: Error: illegal operands `c.srai64'
+.*: Error: illegal operands `c.srai64 x8,'
+.*: Error: illegal operands `c.srai64 x7'
+.*: Error: illegal operands `c.srai64 x16'
+.*: Error: illegal operands `c.srai64 3'
diff --git a/gas/testsuite/gas/riscv/zc-zca-srai64-rv64.d b/gas/testsuite/gas/riscv/zc-zca-srai64-rv64.d
new file mode 100644
index 00000000000..ea802b21488
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-srai64-rv64.d
@@ -0,0 +1,13 @@
+#as: -march=rv64ifd_zca
+#source: zc-zca-srai64.s
+#objdump: -d -Mno-aliases
+
+.*:[ 	]+file format .*
+
+
+Disassembly of section .text:
+
+0+000 <target>:
+[ 	]+0:[ 	]+8401[ 	]+c.srai64[ 	]+s0
+[ 	]+2:[ 	]+8501[ 	]+c.srai64[ 	]+a0
+[ 	]+4:[ 	]+8781[ 	]+c.srai64[ 	]+a5
diff --git a/gas/testsuite/gas/riscv/zc-zca-srai64.s b/gas/testsuite/gas/riscv/zc-zca-srai64.s
new file mode 100644
index 00000000000..31d8b41077c
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-srai64.s
@@ -0,0 +1,4 @@
+target:
+    c.srai64 x8
+    c.srai64 x10
+    c.srai64 x15
diff --git a/gas/testsuite/gas/riscv/zc-zca-srli-rv32-fail.d b/gas/testsuite/gas/riscv/zc-zca-srli-rv32-fail.d
new file mode 100644
index 00000000000..3579d073536
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-srli-rv32-fail.d
@@ -0,0 +1,3 @@
+#as: -march=rv32ifd_zca
+#source: zc-zca-srli-rv32-fail.s
+#error_output: zc-zca-srli-rv32-fail.l
diff --git a/gas/testsuite/gas/riscv/zc-zca-srli-rv32-fail.l b/gas/testsuite/gas/riscv/zc-zca-srli-rv32-fail.l
new file mode 100644
index 00000000000..22f8aeda39f
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-srli-rv32-fail.l
@@ -0,0 +1,14 @@
+.*: Assembler messages:
+.*: Error: illegal operands `c.srli'
+.*: Error: illegal operands `c.srli ,'
+.*: Error: illegal operands `c.srli ,1'
+.*: Error: illegal operands `c.srli x8,'
+.*: Error: illegal operands `c.srli x8,x11,15'
+.*: Error: illegal operands `c.srli x7,1'
+.*: Error: illegal operands `c.srli x16,1'
+.*: Error: illegal operands `c.srli 1,1'
+.*: Error: illegal operands `c.srli x8,0'
+.*: Error: illegal operands `c.srli x8,32'
+.*: Error: illegal operands `c.srli x8,-1'
+.*: Error: illegal operands `c.srli x8,1.0'
+.*: Error: illegal operands `c.srli x8,x10'
diff --git a/gas/testsuite/gas/riscv/zc-zca-srli-rv32-fail.s b/gas/testsuite/gas/riscv/zc-zca-srli-rv32-fail.s
new file mode 100644
index 00000000000..76884437c10
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-srli-rv32-fail.s
@@ -0,0 +1,15 @@
+target:
+    c.srli
+    c.srli ,
+    c.srli , 1
+    c.srli x8,
+    c.srli x8, x11, 15
+
+    c.srli x7, 1
+    c.srli x16, 1
+    c.srli 1, 1
+    c.srli x8, 0
+    c.srli x8, 32
+    c.srli x8, -1
+    c.srli x8, 1.0
+    c.srli x8, x10
diff --git a/gas/testsuite/gas/riscv/zc-zca-srli-rv32.d b/gas/testsuite/gas/riscv/zc-zca-srli-rv32.d
new file mode 100644
index 00000000000..47bdb0b9ae8
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-srli-rv32.d
@@ -0,0 +1,14 @@
+#as: -march=rv32ifd_zca
+#source: zc-zca-srli-rv32.s
+#objdump: -d -Mno-aliases
+
+.*:[ 	]+file format .*
+
+
+Disassembly of section .text:
+
+0+000 <target>:
+[ 	]+0:[ 	]+8005[ 	]+c.srli[ 	]+s0,0x1
+[ 	]+2:[ 	]+813d[ 	]+c.srli[ 	]+a0,0xf
+[ 	]+4:[ 	]+83fd[ 	]+c.srli[ 	]+a5,0x1f
+[ 	]+6:[ 	]+00f5d413[ 	]+srli[ 	]+s0,a1,0xf
diff --git a/gas/testsuite/gas/riscv/zc-zca-srli-rv32.s b/gas/testsuite/gas/riscv/zc-zca-srli-rv32.s
new file mode 100644
index 00000000000..fd1cca11f8c
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-srli-rv32.s
@@ -0,0 +1,5 @@
+target:
+    c.srli x8, 1
+    c.srli x10, 15
+    c.srli x15, 31
+    srli x8, x11, 15
diff --git a/gas/testsuite/gas/riscv/zc-zca-srli-rv64-fail.d b/gas/testsuite/gas/riscv/zc-zca-srli-rv64-fail.d
new file mode 100644
index 00000000000..dc969e1763c
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-srli-rv64-fail.d
@@ -0,0 +1,3 @@
+#as: -march=rv64ifd_zca
+#source: zc-zca-srli-rv64-fail.s
+#error_output: zc-zca-srli-rv64-fail.l
diff --git a/gas/testsuite/gas/riscv/zc-zca-srli-rv64-fail.l b/gas/testsuite/gas/riscv/zc-zca-srli-rv64-fail.l
new file mode 100644
index 00000000000..0075ace3edf
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-srli-rv64-fail.l
@@ -0,0 +1,14 @@
+.*: Assembler messages:
+.*: Error: illegal operands `c.srli'
+.*: Error: illegal operands `c.srli ,'
+.*: Error: illegal operands `c.srli ,1'
+.*: Error: illegal operands `c.srli x8,'
+.*: Error: illegal operands `c.srli x8,x11,15'
+.*: Error: illegal operands `c.srli x7,1'
+.*: Error: illegal operands `c.srli x16,1'
+.*: Error: illegal operands `c.srli 1,1'
+.*: Error: illegal operands `c.srli x8,0'
+.*: Error: illegal operands `c.srli x8,64'
+.*: Error: illegal operands `c.srli x8,-1'
+.*: Error: illegal operands `c.srli x8,1.0'
+.*: Error: illegal operands `c.srli x8,x10'
diff --git a/gas/testsuite/gas/riscv/zc-zca-srli-rv64-fail.s b/gas/testsuite/gas/riscv/zc-zca-srli-rv64-fail.s
new file mode 100644
index 00000000000..edf8d21ec5d
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-srli-rv64-fail.s
@@ -0,0 +1,15 @@
+target:
+    c.srli
+    c.srli ,
+    c.srli , 1
+    c.srli x8,
+    c.srli x8, x11, 15
+
+    c.srli x7, 1
+    c.srli x16, 1
+    c.srli 1, 1
+    c.srli x8, 0
+    c.srli x8, 64
+    c.srli x8, -1
+    c.srli x8, 1.0
+    c.srli x8, x10
diff --git a/gas/testsuite/gas/riscv/zc-zca-srli-rv64.d b/gas/testsuite/gas/riscv/zc-zca-srli-rv64.d
new file mode 100644
index 00000000000..0313b754d17
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-srli-rv64.d
@@ -0,0 +1,14 @@
+#as: -march=rv64ifd_zca
+#source: zc-zca-srli-rv64.s
+#objdump: -d -Mno-aliases
+
+.*:[ 	]+file format .*
+
+
+Disassembly of section .text:
+
+0+000 <target>:
+[ 	]+0:[ 	]+8005[ 	]+c.srli[ 	]+s0,0x1
+[ 	]+2:[ 	]+9105[ 	]+c.srli[ 	]+a0,0x21
+[ 	]+4:[ 	]+93fd[ 	]+c.srli[ 	]+a5,0x3f
+[ 	]+6:[ 	]+00f5d413[ 	]+srli[ 	]+s0,a1,0xf
diff --git a/gas/testsuite/gas/riscv/zc-zca-srli-rv64.s b/gas/testsuite/gas/riscv/zc-zca-srli-rv64.s
new file mode 100644
index 00000000000..e6da296390c
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-srli-rv64.s
@@ -0,0 +1,5 @@
+target:
+    c.srli x8, 1
+    c.srli x10, 33
+    c.srli x15, 63
+    srli x8, x11, 15
diff --git a/gas/testsuite/gas/riscv/zc-zca-srli64-fail.s b/gas/testsuite/gas/riscv/zc-zca-srli64-fail.s
new file mode 100644
index 00000000000..2fbff5347a8
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-srli64-fail.s
@@ -0,0 +1,6 @@
+target:
+    C.srli64
+    C.srli64 x8,
+    c.srli64 x7
+    c.srli64 x16
+    c.srli64 3
diff --git a/gas/testsuite/gas/riscv/zc-zca-srli64-rv32-fail.d b/gas/testsuite/gas/riscv/zc-zca-srli64-rv32-fail.d
new file mode 100644
index 00000000000..6b32c2bf156
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-srli64-rv32-fail.d
@@ -0,0 +1,3 @@
+#as: -march=rv32ifd_zca
+#source: zc-zca-srli64-fail.s
+#error_output: zc-zca-srli64-rv32-fail.l
diff --git a/gas/testsuite/gas/riscv/zc-zca-srli64-rv32-fail.l b/gas/testsuite/gas/riscv/zc-zca-srli64-rv32-fail.l
new file mode 100644
index 00000000000..3049e8559b6
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-srli64-rv32-fail.l
@@ -0,0 +1,6 @@
+.*: Assembler messages:
+.*: Error: illegal operands `c.srli64'
+.*: Error: illegal operands `c.srli64 x8,'
+.*: Error: illegal operands `c.srli64 x7'
+.*: Error: illegal operands `c.srli64 x16'
+.*: Error: illegal operands `c.srli64 3'
diff --git a/gas/testsuite/gas/riscv/zc-zca-srli64-rv32.d b/gas/testsuite/gas/riscv/zc-zca-srli64-rv32.d
new file mode 100644
index 00000000000..290466f737f
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-srli64-rv32.d
@@ -0,0 +1,13 @@
+#as: -march=rv32ifd_zca
+#source: zc-zca-srli64.s
+#objdump: -d -Mno-aliases
+
+.*:[ 	]+file format .*
+
+
+Disassembly of section .text:
+
+0+000 <target>:
+[ 	]+0:[ 	]+8001[ 	]+c.srli64[ 	]+s0
+[ 	]+2:[ 	]+8101[ 	]+c.srli64[ 	]+a0
+[ 	]+4:[ 	]+8381[ 	]+c.srli64[ 	]+a5
diff --git a/gas/testsuite/gas/riscv/zc-zca-srli64-rv64-fail.d b/gas/testsuite/gas/riscv/zc-zca-srli64-rv64-fail.d
new file mode 100644
index 00000000000..aaeb6c0cdb3
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-srli64-rv64-fail.d
@@ -0,0 +1,3 @@
+#as: -march=rv64ifd_zca
+#source: zc-zca-srli64-fail.s
+#error_output: zc-zca-srli64-rv64-fail.l
diff --git a/gas/testsuite/gas/riscv/zc-zca-srli64-rv64-fail.l b/gas/testsuite/gas/riscv/zc-zca-srli64-rv64-fail.l
new file mode 100644
index 00000000000..3049e8559b6
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-srli64-rv64-fail.l
@@ -0,0 +1,6 @@
+.*: Assembler messages:
+.*: Error: illegal operands `c.srli64'
+.*: Error: illegal operands `c.srli64 x8,'
+.*: Error: illegal operands `c.srli64 x7'
+.*: Error: illegal operands `c.srli64 x16'
+.*: Error: illegal operands `c.srli64 3'
diff --git a/gas/testsuite/gas/riscv/zc-zca-srli64-rv64.d b/gas/testsuite/gas/riscv/zc-zca-srli64-rv64.d
new file mode 100644
index 00000000000..00112dbf978
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-srli64-rv64.d
@@ -0,0 +1,13 @@
+#as: -march=rv64ifd_zca
+#source: zc-zca-srli64.s
+#objdump: -d -Mno-aliases
+
+.*:[ 	]+file format .*
+
+
+Disassembly of section .text:
+
+0+000 <target>:
+[ 	]+0:[ 	]+8001[ 	]+c.srli64[ 	]+s0
+[ 	]+2:[ 	]+8101[ 	]+c.srli64[ 	]+a0
+[ 	]+4:[ 	]+8381[ 	]+c.srli64[ 	]+a5
diff --git a/gas/testsuite/gas/riscv/zc-zca-srli64.s b/gas/testsuite/gas/riscv/zc-zca-srli64.s
new file mode 100644
index 00000000000..429fb337524
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-srli64.s
@@ -0,0 +1,4 @@
+target:
+    c.srli64 x8
+    c.srli64 x10
+    c.srli64 x15
diff --git a/gas/testsuite/gas/riscv/zc-zca-sub-fail.s b/gas/testsuite/gas/riscv/zc-zca-sub-fail.s
new file mode 100644
index 00000000000..c6e46b3c997
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-sub-fail.s
@@ -0,0 +1,14 @@
+target:
+    c.sub
+    c.sub ,
+    c.sub , x8
+    c.sub x8,
+    c.sub , ,
+
+    c.sub x7, x8
+    c.sub x16, x8
+    c.sub 3, x8
+
+    c.sub x8, x7
+    c.sub x8, x16
+    c.sub x8, 3
diff --git a/gas/testsuite/gas/riscv/zc-zca-sub-rv32-fail.d b/gas/testsuite/gas/riscv/zc-zca-sub-rv32-fail.d
new file mode 100644
index 00000000000..13e6ae0ee0e
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-sub-rv32-fail.d
@@ -0,0 +1,3 @@
+#as: -march=rv32ifd_zca
+#source: zc-zca-sub-fail.s
+#error_output: zc-zca-sub-rv32-fail.l
diff --git a/gas/testsuite/gas/riscv/zc-zca-sub-rv32-fail.l b/gas/testsuite/gas/riscv/zc-zca-sub-rv32-fail.l
new file mode 100644
index 00000000000..03474606cf8
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-sub-rv32-fail.l
@@ -0,0 +1,12 @@
+.*: Assembler messages:
+.*: Error: illegal operands `c.sub'
+.*: Error: illegal operands `c.sub ,'
+.*: Error: illegal operands `c.sub ,x8'
+.*: Error: illegal operands `c.sub x8,'
+.*: Error: illegal operands `c.sub ,,'
+.*: Error: illegal operands `c.sub x7,x8'
+.*: Error: illegal operands `c.sub x16,x8'
+.*: Error: illegal operands `c.sub 3,x8'
+.*: Error: illegal operands `c.sub x8,x7'
+.*: Error: illegal operands `c.sub x8,x16'
+.*: Error: illegal operands `c.sub x8,3'
diff --git a/gas/testsuite/gas/riscv/zc-zca-sub-rv32.d b/gas/testsuite/gas/riscv/zc-zca-sub-rv32.d
new file mode 100644
index 00000000000..f43921cf434
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-sub-rv32.d
@@ -0,0 +1,14 @@
+#as: -march=rv32ifd_zca
+#source: zc-zca-sub.s
+#objdump: -d -Mno-aliases
+
+.*:[ 	]+file format .*
+
+
+Disassembly of section .text:
+
+0+000 <target>:
+[ 	]+0:[ 	]+8c05[ 	]+c.sub[ 	]+s0,s1
+[ 	]+2:[ 	]+8d0d[ 	]+c.sub[ 	]+a0,a1
+[ 	]+4:[ 	]+8f9d[ 	]+c.sub[ 	]+a5,a5
+[ 	]+6:[ 	]+40a48433[ 	]+sub[ 	]+s0,s1,a0
diff --git a/gas/testsuite/gas/riscv/zc-zca-sub-rv64-fail.d b/gas/testsuite/gas/riscv/zc-zca-sub-rv64-fail.d
new file mode 100644
index 00000000000..ed81c03e236
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-sub-rv64-fail.d
@@ -0,0 +1,3 @@
+#as: -march=rv64ifd_zca
+#source: zc-zca-sub-fail.s
+#error_output: zc-zca-sub-rv64-fail.l
diff --git a/gas/testsuite/gas/riscv/zc-zca-sub-rv64-fail.l b/gas/testsuite/gas/riscv/zc-zca-sub-rv64-fail.l
new file mode 100644
index 00000000000..03474606cf8
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-sub-rv64-fail.l
@@ -0,0 +1,12 @@
+.*: Assembler messages:
+.*: Error: illegal operands `c.sub'
+.*: Error: illegal operands `c.sub ,'
+.*: Error: illegal operands `c.sub ,x8'
+.*: Error: illegal operands `c.sub x8,'
+.*: Error: illegal operands `c.sub ,,'
+.*: Error: illegal operands `c.sub x7,x8'
+.*: Error: illegal operands `c.sub x16,x8'
+.*: Error: illegal operands `c.sub 3,x8'
+.*: Error: illegal operands `c.sub x8,x7'
+.*: Error: illegal operands `c.sub x8,x16'
+.*: Error: illegal operands `c.sub x8,3'
diff --git a/gas/testsuite/gas/riscv/zc-zca-sub-rv64.d b/gas/testsuite/gas/riscv/zc-zca-sub-rv64.d
new file mode 100644
index 00000000000..2ffe6900d72
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-sub-rv64.d
@@ -0,0 +1,14 @@
+#as: -march=rv64ifd_zca
+#source: zc-zca-sub.s
+#objdump: -d -Mno-aliases
+
+.*:[ 	]+file format .*
+
+
+Disassembly of section .text:
+
+0+000 <target>:
+[ 	]+0:[ 	]+8c05[ 	]+c.sub[ 	]+s0,s1
+[ 	]+2:[ 	]+8d0d[ 	]+c.sub[ 	]+a0,a1
+[ 	]+4:[ 	]+8f9d[ 	]+c.sub[ 	]+a5,a5
+[ 	]+6:[ 	]+40a48433[ 	]+sub[ 	]+s0,s1,a0
diff --git a/gas/testsuite/gas/riscv/zc-zca-sub.s b/gas/testsuite/gas/riscv/zc-zca-sub.s
new file mode 100644
index 00000000000..700dd6c51a6
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-sub.s
@@ -0,0 +1,5 @@
+target:
+    c.sub x8, x9
+    c.sub x10,x11
+    c.sub x15,x15
+    sub x8,x9,x10
diff --git a/gas/testsuite/gas/riscv/zc-zca-sw-fail.s b/gas/testsuite/gas/riscv/zc-zca-sw-fail.s
new file mode 100644
index 00000000000..99cc3e0178a
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-sw-fail.s
@@ -0,0 +1,27 @@
+target:
+    c.sw
+    c.sw , (x9)
+    c.sw x8,
+    c.sw x8, 124
+    c.sw x8, x9
+
+    c.sw x0, (x9)
+    c.sw x1, (x9)
+    c.sw x7, (x9)
+    c.sw x16, (x8)
+    c.sw 4, (x8)
+
+    c.sw x10, (x7)
+    c.sw x10, (x16)
+    c.sw x10, (x0)
+    c.sw x10, (x2)
+    c.sw x10, (x31)
+
+    c.sw x11, 1(x8)
+    c.sw x11, 2(x8)
+    c.sw x11, 3(x8)
+    c.sw x11, -4(x8)
+    c.sw x11, 5(x8)
+    c.sw x11, 123(x8)
+    c.sw x11, 125(x8)
+    c.sw x11, 128(x8)
diff --git a/gas/testsuite/gas/riscv/zc-zca-sw-rv32-fail.d b/gas/testsuite/gas/riscv/zc-zca-sw-rv32-fail.d
new file mode 100644
index 00000000000..8e3e6407f76
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-sw-rv32-fail.d
@@ -0,0 +1,3 @@
+#as: -march=rv32ifd_zca
+#source: zc-zca-sw-fail.s
+#error_output: zc-zca-sw-rv32-fail.l
\ No newline at end of file
diff --git a/gas/testsuite/gas/riscv/zc-zca-sw-rv32-fail.l b/gas/testsuite/gas/riscv/zc-zca-sw-rv32-fail.l
new file mode 100644
index 00000000000..42751881819
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-sw-rv32-fail.l
@@ -0,0 +1,24 @@
+.*: Assembler messages:
+.*: Error: illegal operands `c.sw'
+.*: Error: illegal operands `c.sw ,\(x9\)'
+.*: Error: illegal operands `c.sw x8,'
+.*: Error: illegal operands `c.sw x8,124'
+.*: Error: illegal operands `c.sw x8,x9'
+.*: Error: illegal operands `c.sw x0,\(x9\)'
+.*: Error: illegal operands `c.sw x1,\(x9\)'
+.*: Error: illegal operands `c.sw x7,\(x9\)'
+.*: Error: illegal operands `c.sw x16,\(x8\)'
+.*: Error: illegal operands `c.sw 4,\(x8\)'
+.*: Error: illegal operands `c.sw x10,\(x7\)'
+.*: Error: illegal operands `c.sw x10,\(x16\)'
+.*: Error: illegal operands `c.sw x10,\(x0\)'
+.*: Error: illegal operands `c.sw x10,\(x2\)'
+.*: Error: illegal operands `c.sw x10,\(x31\)'
+.*: Error: illegal operands `c.sw x11,1\(x8\)'
+.*: Error: illegal operands `c.sw x11,2\(x8\)'
+.*: Error: illegal operands `c.sw x11,3\(x8\)'
+.*: Error: illegal operands `c.sw x11,-4\(x8\)'
+.*: Error: illegal operands `c.sw x11,5\(x8\)'
+.*: Error: illegal operands `c.sw x11,123\(x8\)'
+.*: Error: illegal operands `c.sw x11,125\(x8\)'
+.*: Error: illegal operands `c.sw x11,128\(x8\)'
\ No newline at end of file
diff --git a/gas/testsuite/gas/riscv/zc-zca-sw-rv32.d b/gas/testsuite/gas/riscv/zc-zca-sw-rv32.d
new file mode 100644
index 00000000000..e1c5b586ffc
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-sw-rv32.d
@@ -0,0 +1,19 @@
+#as: -march=rv32ifd_zca
+#source: zc-zca-sw.s
+#objdump: -d -Mno-aliases
+
+.*:[ 	]+file format .*
+
+
+Disassembly of section .text:
+
+0+000 <target>:
+[ 	]+0:[ 	]+c080[ 	]+c.sw[ 	]+s0,0\(s1\)
+[ 	]+2:[ 	]+d104[ 	]+c.sw[ 	]+s1,32\(a0\)
+[ 	]+4:[ 	]+dde8[ 	]+c.sw[ 	]+a0,124\(a1\)
+[ 	]+6:[ 	]+c22c[ 	]+c.sw[ 	]+a1,64\(a2\)
+[ 	]+8:[ 	]+c2f0[ 	]+c.sw[ 	]+a2,68\(a3\)
+[ 	]+a:[ 	]+c354[ 	]+c.sw[ 	]+a3,4\(a4\)
+[ 	]+c:[ 	]+c798[ 	]+c.sw[ 	]+a4,8\(a5\)
+[ 	]+e:[ 	]+c81c[ 	]+c.sw[ 	]+a5,16\(s0\)
+[ 	]+10:[ 	]+c02a[ 	]+c.swsp[ 	]+a0,0\(sp\)
diff --git a/gas/testsuite/gas/riscv/zc-zca-sw-rv64-fail.d b/gas/testsuite/gas/riscv/zc-zca-sw-rv64-fail.d
new file mode 100644
index 00000000000..b908b5f0edf
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-sw-rv64-fail.d
@@ -0,0 +1,3 @@
+#as: -march=rv64ifd_zca
+#source: zc-zca-sw-fail.s
+#error_output: zc-zca-sw-rv64-fail.l
\ No newline at end of file
diff --git a/gas/testsuite/gas/riscv/zc-zca-sw-rv64-fail.l b/gas/testsuite/gas/riscv/zc-zca-sw-rv64-fail.l
new file mode 100644
index 00000000000..42751881819
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-sw-rv64-fail.l
@@ -0,0 +1,24 @@
+.*: Assembler messages:
+.*: Error: illegal operands `c.sw'
+.*: Error: illegal operands `c.sw ,\(x9\)'
+.*: Error: illegal operands `c.sw x8,'
+.*: Error: illegal operands `c.sw x8,124'
+.*: Error: illegal operands `c.sw x8,x9'
+.*: Error: illegal operands `c.sw x0,\(x9\)'
+.*: Error: illegal operands `c.sw x1,\(x9\)'
+.*: Error: illegal operands `c.sw x7,\(x9\)'
+.*: Error: illegal operands `c.sw x16,\(x8\)'
+.*: Error: illegal operands `c.sw 4,\(x8\)'
+.*: Error: illegal operands `c.sw x10,\(x7\)'
+.*: Error: illegal operands `c.sw x10,\(x16\)'
+.*: Error: illegal operands `c.sw x10,\(x0\)'
+.*: Error: illegal operands `c.sw x10,\(x2\)'
+.*: Error: illegal operands `c.sw x10,\(x31\)'
+.*: Error: illegal operands `c.sw x11,1\(x8\)'
+.*: Error: illegal operands `c.sw x11,2\(x8\)'
+.*: Error: illegal operands `c.sw x11,3\(x8\)'
+.*: Error: illegal operands `c.sw x11,-4\(x8\)'
+.*: Error: illegal operands `c.sw x11,5\(x8\)'
+.*: Error: illegal operands `c.sw x11,123\(x8\)'
+.*: Error: illegal operands `c.sw x11,125\(x8\)'
+.*: Error: illegal operands `c.sw x11,128\(x8\)'
\ No newline at end of file
diff --git a/gas/testsuite/gas/riscv/zc-zca-sw-rv64.d b/gas/testsuite/gas/riscv/zc-zca-sw-rv64.d
new file mode 100644
index 00000000000..ffbf6ae2b82
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-sw-rv64.d
@@ -0,0 +1,19 @@
+#as: -march=rv64ifd_zca
+#source: zc-zca-sw.s
+#objdump: -d -Mno-aliases
+
+.*:[ 	]+file format .*
+
+
+Disassembly of section .text:
+
+0+000 <target>:
+[ 	]+0:[ 	]+c080[ 	]+c.sw[ 	]+s0,0\(s1\)
+[ 	]+2:[ 	]+d104[ 	]+c.sw[ 	]+s1,32\(a0\)
+[ 	]+4:[ 	]+dde8[ 	]+c.sw[ 	]+a0,124\(a1\)
+[ 	]+6:[ 	]+c22c[ 	]+c.sw[ 	]+a1,64\(a2\)
+[ 	]+8:[ 	]+c2f0[ 	]+c.sw[ 	]+a2,68\(a3\)
+[ 	]+a:[ 	]+c354[ 	]+c.sw[ 	]+a3,4\(a4\)
+[ 	]+c:[ 	]+c798[ 	]+c.sw[ 	]+a4,8\(a5\)
+[ 	]+e:[ 	]+c81c[ 	]+c.sw[ 	]+a5,16\(s0\)
+[ 	]+10:[ 	]+c02a[ 	]+c.swsp[ 	]+a0,0\(sp\)
diff --git a/gas/testsuite/gas/riscv/zc-zca-sw.s b/gas/testsuite/gas/riscv/zc-zca-sw.s
new file mode 100644
index 00000000000..481f80257b2
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-sw.s
@@ -0,0 +1,10 @@
+target:
+    c.sw x8, (x9)
+    c.sw x9, 32(x10)
+    c.sw x10, 124(x11)
+    c.sw x11, 64(x12)
+    c.sw x12, 68(x13)
+    c.sw x13, 4(x14)
+    c.sw x14, 8(x15)
+    c.sw x15, 16(x8)
+    sw a0, (sp)
diff --git a/gas/testsuite/gas/riscv/zc-zca-swsp-fail.s b/gas/testsuite/gas/riscv/zc-zca-swsp-fail.s
new file mode 100644
index 00000000000..84aa866377e
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-swsp-fail.s
@@ -0,0 +1,21 @@
+target:
+    c.swsp
+    c.swsp , (x2)
+    c.swsp x1,
+    c.swsp x1, 4
+
+    c.swsp 4, (x2)
+    c.swsp x32, (x2)
+
+    c.swsp x12, 1(x2)
+    c.swsp x12, -1(x2)
+    c.swsp x12, 2(x2)
+    c.swsp x12, 3(x2)
+    c.swsp x12, 4(x3)
+    c.swsp x12, 8(x1)
+    c.swsp x12, 12(x0)
+    c.swsp x12, 5(x2)
+    c.swsp x12, 253(x2)
+    c.swsp x12, 254(x2)
+    c.swsp x12, 255(x2)
+    c.swsp x12, 256(x2)
diff --git a/gas/testsuite/gas/riscv/zc-zca-swsp-rv32-fail.d b/gas/testsuite/gas/riscv/zc-zca-swsp-rv32-fail.d
new file mode 100644
index 00000000000..131cbba03d2
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-swsp-rv32-fail.d
@@ -0,0 +1,3 @@
+#as: -march=rv32ifd_zca
+#source: zc-zca-swsp-fail.s
+#error_output: zc-zca-swsp-rv32-fail.l
\ No newline at end of file
diff --git a/gas/testsuite/gas/riscv/zc-zca-swsp-rv32-fail.l b/gas/testsuite/gas/riscv/zc-zca-swsp-rv32-fail.l
new file mode 100644
index 00000000000..73d3f3b25fc
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-swsp-rv32-fail.l
@@ -0,0 +1,19 @@
+.*: Assembler messages:
+.*: Error: illegal operands `c.swsp'
+.*: Error: illegal operands `c.swsp ,\(x2\)'
+.*: Error: illegal operands `c.swsp x1,'
+.*: Error: illegal operands `c.swsp x1,4'
+.*: Error: illegal operands `c.swsp 4,\(x2\)'
+.*: Error: illegal operands `c.swsp x32,\(x2\)'
+.*: Error: illegal operands `c.swsp x12,1\(x2\)'
+.*: Error: illegal operands `c.swsp x12,-1\(x2\)'
+.*: Error: illegal operands `c.swsp x12,2\(x2\)'
+.*: Error: illegal operands `c.swsp x12,3\(x2\)'
+.*: Error: illegal operands `c.swsp x12,4\(x3\)'
+.*: Error: illegal operands `c.swsp x12,8\(x1\)'
+.*: Error: illegal operands `c.swsp x12,12\(x0\)'
+.*: Error: illegal operands `c.swsp x12,5\(x2\)'
+.*: Error: illegal operands `c.swsp x12,253\(x2\)'
+.*: Error: illegal operands `c.swsp x12,254\(x2\)'
+.*: Error: illegal operands `c.swsp x12,255\(x2\)'
+.*: Error: illegal operands `c.swsp x12,256\(x2\)'
diff --git a/gas/testsuite/gas/riscv/zc-zca-swsp-rv32.d b/gas/testsuite/gas/riscv/zc-zca-swsp-rv32.d
new file mode 100644
index 00000000000..e6585ed2e88
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-swsp-rv32.d
@@ -0,0 +1,19 @@
+#as: -march=rv32ifd_zca
+#source: zc-zca-swsp.s
+#objdump: -d -Mno-aliases
+
+.*:[ 	]+file format .*
+
+
+Disassembly of section .text:
+
+0+000 <target>:
+[ 	]+0:[ 	]+c002[ 	]+c.swsp[ 	]+zero,0\(sp\)
+[ 	]+2:[ 	]+c006[ 	]+c.swsp[ 	]+ra,0\(sp\)
+[ 	]+4:[ 	]+c20a[ 	]+c.swsp[ 	]+sp,4\(sp\)
+[ 	]+6:[ 	]+c40e[ 	]+c.swsp[ 	]+gp,8\(sp\)
+[ 	]+8:[ 	]+d012[ 	]+c.swsp[ 	]+tp,32\(sp\)
+[ 	]+a:[ 	]+d426[ 	]+c.swsp[ 	]+s1,40\(sp\)
+[ 	]+c:[ 	]+deaa[ 	]+c.swsp[ 	]+a0,124\(sp\)
+[ 	]+e:[ 	]+c12e[ 	]+c.swsp[ 	]+a1,128\(sp\)
+[ 	]+10:[ 	]+dffe[ 	]+c.swsp[ 	]+t6,252\(sp\)
diff --git a/gas/testsuite/gas/riscv/zc-zca-swsp-rv64-fail.d b/gas/testsuite/gas/riscv/zc-zca-swsp-rv64-fail.d
new file mode 100644
index 00000000000..f192f11db52
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-swsp-rv64-fail.d
@@ -0,0 +1,3 @@
+#as: -march=rv64ifd_zca
+#source: zc-zca-swsp-fail.s
+#error_output: zc-zca-swsp-rv64-fail.l
\ No newline at end of file
diff --git a/gas/testsuite/gas/riscv/zc-zca-swsp-rv64-fail.l b/gas/testsuite/gas/riscv/zc-zca-swsp-rv64-fail.l
new file mode 100644
index 00000000000..73d3f3b25fc
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-swsp-rv64-fail.l
@@ -0,0 +1,19 @@
+.*: Assembler messages:
+.*: Error: illegal operands `c.swsp'
+.*: Error: illegal operands `c.swsp ,\(x2\)'
+.*: Error: illegal operands `c.swsp x1,'
+.*: Error: illegal operands `c.swsp x1,4'
+.*: Error: illegal operands `c.swsp 4,\(x2\)'
+.*: Error: illegal operands `c.swsp x32,\(x2\)'
+.*: Error: illegal operands `c.swsp x12,1\(x2\)'
+.*: Error: illegal operands `c.swsp x12,-1\(x2\)'
+.*: Error: illegal operands `c.swsp x12,2\(x2\)'
+.*: Error: illegal operands `c.swsp x12,3\(x2\)'
+.*: Error: illegal operands `c.swsp x12,4\(x3\)'
+.*: Error: illegal operands `c.swsp x12,8\(x1\)'
+.*: Error: illegal operands `c.swsp x12,12\(x0\)'
+.*: Error: illegal operands `c.swsp x12,5\(x2\)'
+.*: Error: illegal operands `c.swsp x12,253\(x2\)'
+.*: Error: illegal operands `c.swsp x12,254\(x2\)'
+.*: Error: illegal operands `c.swsp x12,255\(x2\)'
+.*: Error: illegal operands `c.swsp x12,256\(x2\)'
diff --git a/gas/testsuite/gas/riscv/zc-zca-swsp-rv64.d b/gas/testsuite/gas/riscv/zc-zca-swsp-rv64.d
new file mode 100644
index 00000000000..0b2fe2b50f3
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-swsp-rv64.d
@@ -0,0 +1,19 @@
+#as: -march=rv64ifd_zca
+#source: zc-zca-swsp.s
+#objdump: -d -Mno-aliases
+
+.*:[ 	]+file format .*
+
+
+Disassembly of section .text:
+
+0+000 <target>:
+[ 	]+0:[ 	]+c002[ 	]+c.swsp[ 	]+zero,0\(sp\)
+[ 	]+2:[ 	]+c006[ 	]+c.swsp[ 	]+ra,0\(sp\)
+[ 	]+4:[ 	]+c20a[ 	]+c.swsp[ 	]+sp,4\(sp\)
+[ 	]+6:[ 	]+c40e[ 	]+c.swsp[ 	]+gp,8\(sp\)
+[ 	]+8:[ 	]+d012[ 	]+c.swsp[ 	]+tp,32\(sp\)
+[ 	]+a:[ 	]+d426[ 	]+c.swsp[ 	]+s1,40\(sp\)
+[ 	]+c:[ 	]+deaa[ 	]+c.swsp[ 	]+a0,124\(sp\)
+[ 	]+e:[ 	]+c12e[ 	]+c.swsp[ 	]+a1,128\(sp\)
+[ 	]+10:[ 	]+dffe[ 	]+c.swsp[ 	]+t6,252\(sp\)
diff --git a/gas/testsuite/gas/riscv/zc-zca-swsp.s b/gas/testsuite/gas/riscv/zc-zca-swsp.s
new file mode 100644
index 00000000000..c3589d73d16
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-swsp.s
@@ -0,0 +1,10 @@
+target:
+    c.swsp x0, (x2)
+    c.swsp x1, (x2)
+    c.swsp x2, 4(x2)
+    c.swsp x3, 8(x2)
+    c.swsp x4, 32(x2)
+    c.swsp x9, 40(x2)
+    c.swsp x10, 124(x2)
+    c.swsp x11, 128(x2)
+    c.swsp x31, 252(x2)
diff --git a/gas/testsuite/gas/riscv/zc-zca-unimp-fail.s b/gas/testsuite/gas/riscv/zc-zca-unimp-fail.s
new file mode 100644
index 00000000000..309ed27e084
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-unimp-fail.s
@@ -0,0 +1,3 @@
+target:
+	c.unimp 1
+	c.unimp a0
diff --git a/gas/testsuite/gas/riscv/zc-zca-unimp-rv32-fail.d b/gas/testsuite/gas/riscv/zc-zca-unimp-rv32-fail.d
new file mode 100644
index 00000000000..96b69d95f4a
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-unimp-rv32-fail.d
@@ -0,0 +1,3 @@
+#as: -march=rv32ifd_zca
+#source: zc-zca-unimp-fail.s
+#error_output: zc-zca-unimp-rv32-fail.l
\ No newline at end of file
diff --git a/gas/testsuite/gas/riscv/zc-zca-unimp-rv32-fail.l b/gas/testsuite/gas/riscv/zc-zca-unimp-rv32-fail.l
new file mode 100644
index 00000000000..488b84a8148
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-unimp-rv32-fail.l
@@ -0,0 +1,3 @@
+.*: Assembler messages:
+.*: Error: illegal operands `c.unimp 1'
+.*: Error: illegal operands `c.unimp a0'
\ No newline at end of file
diff --git a/gas/testsuite/gas/riscv/zc-zca-unimp-rv64-fail.d b/gas/testsuite/gas/riscv/zc-zca-unimp-rv64-fail.d
new file mode 100644
index 00000000000..e2a029db823
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-unimp-rv64-fail.d
@@ -0,0 +1,3 @@
+#as: -march=rv64ifd_zca
+#source: zc-zca-unimp-fail.s
+#error_output: zc-zca-unimp-rv64-fail.l
\ No newline at end of file
diff --git a/gas/testsuite/gas/riscv/zc-zca-unimp-rv64-fail.l b/gas/testsuite/gas/riscv/zc-zca-unimp-rv64-fail.l
new file mode 100644
index 00000000000..488b84a8148
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-unimp-rv64-fail.l
@@ -0,0 +1,3 @@
+.*: Assembler messages:
+.*: Error: illegal operands `c.unimp 1'
+.*: Error: illegal operands `c.unimp a0'
\ No newline at end of file
diff --git a/gas/testsuite/gas/riscv/zc-zca-xor-fail.s b/gas/testsuite/gas/riscv/zc-zca-xor-fail.s
new file mode 100644
index 00000000000..f0dc27f5ffe
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-xor-fail.s
@@ -0,0 +1,14 @@
+target:
+    c.xor
+    c.xor ,
+    c.xor , x8
+    c.xor x8,
+    c.xor , ,
+
+    c.xor x7, x8
+    c.xor x16, x8
+    c.xor 3, x8
+
+    c.xor x8, x7
+    c.xor x8, x16
+    c.xor x8, 3
diff --git a/gas/testsuite/gas/riscv/zc-zca-xor-rv32-fail.d b/gas/testsuite/gas/riscv/zc-zca-xor-rv32-fail.d
new file mode 100644
index 00000000000..3abbd1e78aa
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-xor-rv32-fail.d
@@ -0,0 +1,3 @@
+#as: -march=rv32ifd_zca
+#source: zc-zca-xor-fail.s
+#error_output: zc-zca-xor-rv32-fail.l
diff --git a/gas/testsuite/gas/riscv/zc-zca-xor-rv32-fail.l b/gas/testsuite/gas/riscv/zc-zca-xor-rv32-fail.l
new file mode 100644
index 00000000000..818bdc68573
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-xor-rv32-fail.l
@@ -0,0 +1,12 @@
+.*: Assembler messages:
+.*: Error: illegal operands `c.xor'
+.*: Error: illegal operands `c.xor ,'
+.*: Error: illegal operands `c.xor ,x8'
+.*: Error: illegal operands `c.xor x8,'
+.*: Error: illegal operands `c.xor ,,'
+.*: Error: illegal operands `c.xor x7,x8'
+.*: Error: illegal operands `c.xor x16,x8'
+.*: Error: illegal operands `c.xor 3,x8'
+.*: Error: illegal operands `c.xor x8,x7'
+.*: Error: illegal operands `c.xor x8,x16'
+.*: Error: illegal operands `c.xor x8,3'
diff --git a/gas/testsuite/gas/riscv/zc-zca-xor-rv32.d b/gas/testsuite/gas/riscv/zc-zca-xor-rv32.d
new file mode 100644
index 00000000000..0f6ec1b5ddf
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-xor-rv32.d
@@ -0,0 +1,14 @@
+#as: -march=rv32ifd_zca
+#source: zc-zca-xor.s
+#objdump: -d -Mno-aliases
+
+.*:[ 	]+file format .*
+
+
+Disassembly of section .text:
+
+0+000 <target>:
+[ 	]+0:[ 	]+8c25[ 	]+c.xor[ 	]+s0,s1
+[ 	]+2:[ 	]+8d2d[ 	]+c.xor[ 	]+a0,a1
+[ 	]+4:[ 	]+8fbd[ 	]+c.xor[ 	]+a5,a5
+[ 	]+6:[ 	]+00a4c433[ 	]+xor[ 	]+s0,s1,a0
diff --git a/gas/testsuite/gas/riscv/zc-zca-xor-rv64-fail.d b/gas/testsuite/gas/riscv/zc-zca-xor-rv64-fail.d
new file mode 100644
index 00000000000..142a60ebf17
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-xor-rv64-fail.d
@@ -0,0 +1,3 @@
+#as: -march=rv64ifd_zca
+#source: zc-zca-xor-fail.s
+#error_output: zc-zca-xor-rv64-fail.l
diff --git a/gas/testsuite/gas/riscv/zc-zca-xor-rv64-fail.l b/gas/testsuite/gas/riscv/zc-zca-xor-rv64-fail.l
new file mode 100644
index 00000000000..818bdc68573
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-xor-rv64-fail.l
@@ -0,0 +1,12 @@
+.*: Assembler messages:
+.*: Error: illegal operands `c.xor'
+.*: Error: illegal operands `c.xor ,'
+.*: Error: illegal operands `c.xor ,x8'
+.*: Error: illegal operands `c.xor x8,'
+.*: Error: illegal operands `c.xor ,,'
+.*: Error: illegal operands `c.xor x7,x8'
+.*: Error: illegal operands `c.xor x16,x8'
+.*: Error: illegal operands `c.xor 3,x8'
+.*: Error: illegal operands `c.xor x8,x7'
+.*: Error: illegal operands `c.xor x8,x16'
+.*: Error: illegal operands `c.xor x8,3'
diff --git a/gas/testsuite/gas/riscv/zc-zca-xor-rv64.d b/gas/testsuite/gas/riscv/zc-zca-xor-rv64.d
new file mode 100644
index 00000000000..78046c5d5be
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-xor-rv64.d
@@ -0,0 +1,14 @@
+#as: -march=rv64ifd_zca
+#source: zc-zca-xor.s
+#objdump: -d -Mno-aliases
+
+.*:[ 	]+file format .*
+
+
+Disassembly of section .text:
+
+0+000 <target>:
+[ 	]+0:[ 	]+8c25[ 	]+c.xor[ 	]+s0,s1
+[ 	]+2:[ 	]+8d2d[ 	]+c.xor[ 	]+a0,a1
+[ 	]+4:[ 	]+8fbd[ 	]+c.xor[ 	]+a5,a5
+[ 	]+6:[ 	]+00a4c433[ 	]+xor[ 	]+s0,s1,a0
diff --git a/gas/testsuite/gas/riscv/zc-zca-xor.s b/gas/testsuite/gas/riscv/zc-zca-xor.s
new file mode 100644
index 00000000000..9bb6e0a4641
--- /dev/null
+++ b/gas/testsuite/gas/riscv/zc-zca-xor.s
@@ -0,0 +1,5 @@
+target:
+    c.xor x8, x9
+    c.xor x10,x11
+    c.xor x15,x15
+    xor x8,x9,x10
