(and (match_code "const_int")
(match_test "SINGLE_BIT_MASK_OPERAND (~ival)")))
-(define_constraint "D03"
- "0, 1, 2 or 3 immediate"
- (match_test "IN_RANGE (ival, 0, 3)"))
-
-(define_constraint "DsA"
- "0 - 10 immediate"
- (match_test "IN_RANGE (ival, 0, 10)"))
-
;; Floating-point constant +0.0, used for FCVT-based moves when FMV is
;; not available in RV32.
(define_constraint "G"
[(set (match_operand:SI 0 "register_operand" "=r")
(unspec:SI [(match_operand:SI 1 "register_operand" "r")
(match_operand:SI 2 "register_operand" "r")
- (match_operand:SI 3 "register_operand" "D03")]
+ (match_operand:SI 3 "const_0_3_operand" "")]
UNSPEC_AES_DSI))]
"TARGET_ZKND && !TARGET_64BIT"
"aes32dsi\t%0,%1,%2,%3"
[(set (match_operand:SI 0 "register_operand" "=r")
(unspec:SI [(match_operand:SI 1 "register_operand" "r")
(match_operand:SI 2 "register_operand" "r")
- (match_operand:SI 3 "register_operand" "D03")]
+ (match_operand:SI 3 "const_0_3_operand" "")]
UNSPEC_AES_DSMI))]
"TARGET_ZKND && !TARGET_64BIT"
"aes32dsmi\t%0,%1,%2,%3"
(define_insn "riscv_aes64ks1i"
[(set (match_operand:DI 0 "register_operand" "=r")
(unspec:DI [(match_operand:DI 1 "register_operand" "r")
- (match_operand:SI 2 "register_operand" "DsA")]
+ (match_operand:SI 2 "const_0_10_operand" "")]
UNSPEC_AES_KS1I))]
"(TARGET_ZKND || TARGET_ZKNE) && TARGET_64BIT"
"aes64ks1i\t%0,%1,%2"
[(set (match_operand:SI 0 "register_operand" "=r")
(unspec:SI [(match_operand:SI 1 "register_operand" "r")
(match_operand:SI 2 "register_operand" "r")
- (match_operand:SI 3 "register_operand" "D03")]
+ (match_operand:SI 3 "const_0_3_operand" "")]
UNSPEC_AES_ESI))]
"TARGET_ZKNE && !TARGET_64BIT"
"aes32esi\t%0,%1,%2,%3"
[(set (match_operand:SI 0 "register_operand" "=r")
(unspec:SI [(match_operand:SI 1 "register_operand" "r")
(match_operand:SI 2 "register_operand" "r")
- (match_operand:SI 3 "register_operand" "D03")]
+ (match_operand:SI 3 "const_0_3_operand" "")]
UNSPEC_AES_ESMI))]
"TARGET_ZKNE && !TARGET_64BIT"
"aes32esmi\t%0,%1,%2,%3"
[(set (match_operand:SI 0 "register_operand" "=r")
(unspec:SI [(match_operand:SI 1 "register_operand" "r")
(match_operand:SI 2 "register_operand" "r")
- (match_operand:SI 3 "register_operand" "D03")]
+ (match_operand:SI 3 "const_0_3_operand" "")]
SM4_OP))]
"TARGET_ZKSED && !TARGET_64BIT"
"<sm4_op>\t%0,%1,%2,%3"
(sign_extend:DI
(unspec:SI [(match_operand:SI 1 "register_operand" "r")
(match_operand:SI 2 "register_operand" "r")
- (match_operand:SI 3 "register_operand" "D03")]
+ (match_operand:SI 3 "const_0_3_operand" "")]
SM4_OP)))]
"TARGET_ZKSED && TARGET_64BIT"
"<sm4_op>\t%0,%1,%2,%3"
[(set (match_operand:SI 0 "register_operand" "=r")
(unspec:SI [(match_operand:SI 1 "register_operand" "r")
(match_operand:SI 2 "register_operand" "r")
- (match_operand:SI 3 "register_operand" "D03")]
+ (match_operand:SI 3 "const_0_3_operand" "")]
SM4_OP))]
"TARGET_ZKSED"
{
(and (match_code "const_int")
(match_test "IN_RANGE (INTVAL (op), 0, 31)")))
+(define_predicate "const_0_3_operand"
+ (and (match_code "const_int")
+ (match_test "IN_RANGE (INTVAL (op), 0, 3)")))
+
+(define_predicate "const_0_10_operand"
+ (and (match_code "const_int")
+ (match_test "IN_RANGE (INTVAL (op), 0, 10)")))
+
(define_predicate "csr_operand"
(ior (match_operand 0 "const_csr_operand")
(match_operand 0 "register_operand")))
--- /dev/null
+/* { dg-do compile } */
+/* { dg-options "-O2 -march=rv32gc_zknd -mabi=ilp32d" } */
+/* { dg-skip-if "" { *-*-* } { "-g" "-flto"} } */
+
+#include <stdint-gcc.h>
+
+uint32_t foo1(uint32_t rs1, uint32_t rs2)
+{
+ return __builtin_riscv_aes32dsi(rs1,rs2,0);
+}
+
+uint32_t foo2(uint32_t rs1, uint32_t rs2)
+{
+ return __builtin_riscv_aes32dsmi(rs1,rs2,0);
+}
+
+uint32_t foo3(uint32_t rs1, uint32_t rs2)
+{
+ return __builtin_riscv_aes32dsi(rs1,rs2,3);
+}
+
+uint32_t foo4(uint32_t rs1, uint32_t rs2)
+{
+ return __builtin_riscv_aes32dsmi(rs1,rs2,3);
+}
+
+/* { dg-final { scan-assembler-times "aes32dsi" 2 } } */
+/* { dg-final { scan-assembler-times "aes32dsmi" 2 } } */
uint32_t foo1(uint32_t rs1, uint32_t rs2, int bs)
{
- return __builtin_riscv_aes32dsi(rs1,rs2,bs);
+ return __builtin_riscv_aes32dsi(rs1,rs2,bs); /* { dg-error "invalid argument to built-in function" } */
}
uint32_t foo2(uint32_t rs1, uint32_t rs2, int bs)
{
- return __builtin_riscv_aes32dsmi(rs1,rs2,bs);
+ return __builtin_riscv_aes32dsmi(rs1,rs2,bs); /* { dg-error "invalid argument to built-in function" } */
}
-/* { dg-final { scan-assembler-times "aes32dsi" 1 } } */
-/* { dg-final { scan-assembler-times "aes32dsmi" 1 } } */
+uint32_t foo3(uint32_t rs1, uint32_t rs2)
+{
+ return __builtin_riscv_aes32dsi(rs1,rs2,-1); /* { dg-error "invalid argument to built-in function" } */
+}
+
+uint32_t foo4(uint32_t rs1, uint32_t rs2)
+{
+ return __builtin_riscv_aes32dsmi(rs1,rs2,-1); /* { dg-error "invalid argument to built-in function" } */
+}
+
+uint32_t foo5(uint32_t rs1, uint32_t rs2)
+{
+ return __builtin_riscv_aes32dsi(rs1,rs2,4); /* { dg-error "invalid argument to built-in function" } */
+}
+
+uint32_t foo6(uint32_t rs1, uint32_t rs2)
+{
+ return __builtin_riscv_aes32dsmi(rs1,rs2,4); /* { dg-error "invalid argument to built-in function" } */
+}
--- /dev/null
+/* { dg-do compile } */
+/* { dg-options "-O2 -march=rv64gc_zknd -mabi=lp64" } */
+/* { dg-skip-if "" { *-*-* } { "-g" "-flto"} } */
+
+#include <stdint-gcc.h>
+
+uint64_t foo1(uint64_t rs1, uint64_t rs2)
+{
+ return __builtin_riscv_aes64ds(rs1,rs2);
+}
+
+uint64_t foo2(uint64_t rs1, uint64_t rs2)
+{
+ return __builtin_riscv_aes64dsm(rs1,rs2);
+}
+
+uint64_t foo3(uint64_t rs1, unsigned rnum)
+{
+ return __builtin_riscv_aes64ks1i(rs1,0);
+}
+
+uint64_t foo3a(uint64_t rs1, unsigned rnum)
+{
+ return __builtin_riscv_aes64ks1i(rs1,10);
+}
+
+uint64_t foo4(uint64_t rs1, uint64_t rs2)
+{
+ return __builtin_riscv_aes64ks2(rs1,rs2);
+}
+
+uint64_t foo5(uint64_t rs1)
+{
+ return __builtin_riscv_aes64im(rs1);
+}
+
+/* { dg-final { scan-assembler-times "aes64ds\t" 1 } } */
+/* { dg-final { scan-assembler-times "aes64dsm" 1 } } */
+/* { dg-final { scan-assembler-times "aes64ks1i" 2 } } */
+/* { dg-final { scan-assembler-times "aes64ks2" 1 } } */
+/* { dg-final { scan-assembler-times {\maes64im} 1 } } */
+
#include <stdint-gcc.h>
-uint64_t foo1(uint64_t rs1, uint64_t rs2)
-{
- return __builtin_riscv_aes64ds(rs1,rs2);
-}
-
-uint64_t foo2(uint64_t rs1, uint64_t rs2)
-{
- return __builtin_riscv_aes64dsm(rs1,rs2);
-}
-
uint64_t foo3(uint64_t rs1, unsigned rnum)
{
- return __builtin_riscv_aes64ks1i(rs1,rnum);
+ return __builtin_riscv_aes64ks1i(rs1,rnum); /* { dg-error "invalid argument to built-in function" } */
}
-uint64_t foo4(uint64_t rs1, uint64_t rs2)
+uint64_t foo3a(uint64_t rs1, unsigned rnum)
{
- return __builtin_riscv_aes64ks2(rs1,rs2);
+ return __builtin_riscv_aes64ks1i(rs1,-1); /* { dg-error "invalid argument to built-in function" } */
}
-uint64_t foo5(uint64_t rs1)
+uint64_t foo3b(uint64_t rs1, unsigned rnum)
{
- return __builtin_riscv_aes64im(rs1);
+ return __builtin_riscv_aes64ks1i(rs1,11); /* { dg-error "invalid argument to built-in function" } */
}
-
-/* { dg-final { scan-assembler-times "aes64ds\t" 1 } } */
-/* { dg-final { scan-assembler-times "aes64dsm" 1 } } */
-/* { dg-final { scan-assembler-times "aes64ks1i" 1 } } */
-/* { dg-final { scan-assembler-times "aes64ks2" 1 } } */
-/* { dg-final { scan-assembler-times {\maes64im} 1 } } */
--- /dev/null
+/* { dg-do compile } */
+/* { dg-options "-O2 -march=rv32gc_zkne -mabi=ilp32d" } */
+/* { dg-skip-if "" { *-*-* } { "-g" "-flto"} } */
+
+#include <stdint-gcc.h>
+
+uint32_t foo1(uint32_t rs1, uint32_t rs2)
+{
+ return __builtin_riscv_aes32esi(rs1, rs2, 0);
+}
+
+uint32_t foo2(uint32_t rs1, uint32_t rs2)
+{
+ return __builtin_riscv_aes32esmi(rs1, rs2, 0);
+}
+
+uint32_t foo3(uint32_t rs1, uint32_t rs2)
+{
+ return __builtin_riscv_aes32esi(rs1, rs2, 3);
+}
+
+uint32_t foo4(uint32_t rs1, uint32_t rs2)
+{
+ return __builtin_riscv_aes32esmi(rs1, rs2, 3);
+}
+
+/* { dg-final { scan-assembler-times "aes32esi" 2 } } */
+/* { dg-final { scan-assembler-times "aes32esmi" 2 } } */
uint32_t foo1(uint32_t rs1, uint32_t rs2, unsigned bs)
{
- return __builtin_riscv_aes32esi(rs1, rs2, bs);
+ return __builtin_riscv_aes32esi(rs1, rs2, bs); /* { dg-error "invalid argument to built-in function" } */
}
uint32_t foo2(uint32_t rs1, uint32_t rs2, unsigned bs)
{
- return __builtin_riscv_aes32esmi(rs1, rs2, bs);
+ return __builtin_riscv_aes32esmi(rs1, rs2, bs); /* { dg-error "invalid argument to built-in function" } */
}
-/* { dg-final { scan-assembler-times "aes32esi" 1 } } */
-/* { dg-final { scan-assembler-times "aes32esmi" 1 } } */
+uint32_t foo3(uint32_t rs1, uint32_t rs2)
+{
+ return __builtin_riscv_aes32esi(rs1, rs2, -1); /* { dg-error "invalid argument to built-in function" } */
+}
+
+uint32_t foo4(uint32_t rs1, uint32_t rs2)
+{
+ return __builtin_riscv_aes32esmi(rs1, rs2, -1); /* { dg-error "invalid argument to built-in function" } */
+}
+
+uint32_t foo5(uint32_t rs1, uint32_t rs2)
+{
+ return __builtin_riscv_aes32esi(rs1, rs2, 4); /* { dg-error "invalid argument to built-in function" } */
+}
+
+uint32_t foo6(uint32_t rs1, uint32_t rs2)
+{
+ return __builtin_riscv_aes32esmi(rs1, rs2, 4); /* { dg-error "invalid argument to built-in function" } */
+}
--- /dev/null
+/* { dg-do compile } */
+/* { dg-options "-O2 -march=rv64gc_zkne -mabi=lp64" } */
+/* { dg-skip-if "" { *-*-* } { "-g" "-flto"} } */
+
+#include <stdint-gcc.h>
+
+uint64_t foo1(uint64_t rs1, uint64_t rs2)
+{
+ return __builtin_riscv_aes64es(rs1,rs2);
+}
+
+uint64_t foo2(uint64_t rs1, uint64_t rs2)
+{
+ return __builtin_riscv_aes64esm(rs1,rs2);
+}
+
+uint64_t foo3(uint64_t rs1, unsigned rnum)
+{
+ return __builtin_riscv_aes64ks1i(rs1,0);
+}
+
+uint64_t foo3a(uint64_t rs1, unsigned rnum)
+{
+ return __builtin_riscv_aes64ks1i(rs1,10);
+}
+uint64_t foo4(uint64_t rs1, uint64_t rs2)
+{
+ return __builtin_riscv_aes64ks2(rs1,rs2);
+}
+
+/* { dg-final { scan-assembler-times "aes64es\t" 1 } } */
+/* { dg-final { scan-assembler-times "aes64esm" 1 } } */
+/* { dg-final { scan-assembler-times "aes64ks1i" 2 } } */
+/* { dg-final { scan-assembler-times "aes64ks2" 1 } } */
#include <stdint-gcc.h>
-uint64_t foo1(uint64_t rs1, uint64_t rs2)
+uint64_t foo1(uint64_t rs1, unsigned rnum)
{
- return __builtin_riscv_aes64es(rs1,rs2);
+ return __builtin_riscv_aes64ks1i(rs1,-1); /* { dg-error "invalid argument to built-in function" } */
}
-uint64_t foo2(uint64_t rs1, uint64_t rs2)
+uint64_t foo2(uint64_t rs1, unsigned rnum)
{
- return __builtin_riscv_aes64esm(rs1,rs2);
+ return __builtin_riscv_aes64ks1i(rs1,11); /* { dg-error "invalid argument to built-in function" } */
}
uint64_t foo3(uint64_t rs1, unsigned rnum)
{
- return __builtin_riscv_aes64ks1i(rs1,rnum);
+ return __builtin_riscv_aes64ks1i(rs1,rnum); /* { dg-error "invalid argument to built-in function" } */
}
-uint64_t foo4(uint64_t rs1, uint64_t rs2)
-{
- return __builtin_riscv_aes64ks2(rs1,rs2);
-}
-
-/* { dg-final { scan-assembler-times "aes64es\t" 1 } } */
-/* { dg-final { scan-assembler-times "aes64esm" 1 } } */
-/* { dg-final { scan-assembler-times "aes64ks1i" 1 } } */
-/* { dg-final { scan-assembler-times "aes64ks2" 1 } } */
--- /dev/null
+/* { dg-do compile } */
+/* { dg-options "-O2 -march=rv32gc_zksed -mabi=ilp32" } */
+/* { dg-skip-if "" { *-*-* } { "-g" "-flto"} } */
+
+#include <stdint-gcc.h>
+
+uint32_t foo1(uint32_t rs1, uint32_t rs2)
+{
+ return __builtin_riscv_sm4ks(rs1,rs2,0);
+}
+
+uint32_t foo2(uint32_t rs1, uint32_t rs2)
+{
+ return __builtin_riscv_sm4ed(rs1,rs2,0);
+}
+
+uint32_t foo3(uint32_t rs1, uint32_t rs2)
+{
+ return __builtin_riscv_sm4ks(rs1,rs2,3);
+}
+
+uint32_t foo4(uint32_t rs1, uint32_t rs2)
+{
+ return __builtin_riscv_sm4ed(rs1,rs2,3);
+}
+
+
+/* { dg-final { scan-assembler-times {\msm4ks} 2 } } */
+/* { dg-final { scan-assembler-times {\msm4ed} 2 } } */
uint32_t foo1(uint32_t rs1, uint32_t rs2, unsigned bs)
{
- return __builtin_riscv_sm4ks(rs1,rs2,bs);
+ return __builtin_riscv_sm4ks(rs1,rs2,bs); /* { dg-error "invalid argument to built-in function" } */
}
uint32_t foo2(uint32_t rs1, uint32_t rs2, unsigned bs)
{
- return __builtin_riscv_sm4ed(rs1,rs2,bs);
+ return __builtin_riscv_sm4ed(rs1,rs2,bs); /* { dg-error "invalid argument to built-in function" } */
}
+uint32_t foo3(uint32_t rs1, uint32_t rs2)
+{
+ return __builtin_riscv_sm4ks(rs1,rs2,-1); /* { dg-error "invalid argument to built-in function" } */
+}
-/* { dg-final { scan-assembler-times {\msm4ks} 1 } } */
-/* { dg-final { scan-assembler-times {\msm4ed} 1 } } */
+uint32_t foo4(uint32_t rs1, uint32_t rs2)
+{
+ return __builtin_riscv_sm4ed(rs1,rs2,-1); /* { dg-error "invalid argument to built-in function" } */
+}
+
+uint32_t foo5(uint32_t rs1, uint32_t rs2)
+{
+ return __builtin_riscv_sm4ks(rs1,rs2,4); /* { dg-error "invalid argument to built-in function" } */
+}
+
+uint32_t foo6(uint32_t rs1, uint32_t rs2)
+{
+ return __builtin_riscv_sm4ed(rs1,rs2,4); /* { dg-error "invalid argument to built-in function" } */
+}
--- /dev/null
+/* { dg-do compile } */
+/* { dg-options "-O2 -march=rv64gc_zksed -mabi=lp64" } */
+/* { dg-skip-if "" { *-*-* } { "-g" "-flto"} } */
+
+#include <stdint-gcc.h>
+
+uint32_t foo1(uint32_t rs1, uint32_t rs2)
+{
+ return __builtin_riscv_sm4ks(rs1,rs2,0);
+}
+
+uint32_t foo2(uint32_t rs1, uint32_t rs2)
+{
+ return __builtin_riscv_sm4ed(rs1,rs2,0);
+}
+
+uint32_t foo3(uint32_t rs1, uint32_t rs2)
+{
+ return __builtin_riscv_sm4ks(rs1,rs2,3);
+}
+
+uint32_t foo4(uint32_t rs1, uint32_t rs2)
+{
+ return __builtin_riscv_sm4ed(rs1,rs2,3);
+}
+
+
+/* { dg-final { scan-assembler-times {\msm4ks} 2 } } */
+/* { dg-final { scan-assembler-times {\msm4ed} 2 } } */
uint32_t foo1(uint32_t rs1, uint32_t rs2, unsigned bs)
{
- return __builtin_riscv_sm4ks(rs1,rs2,bs);
+ return __builtin_riscv_sm4ks(rs1,rs2,bs); /* { dg-error "invalid argument to built-in function" } */
}
uint32_t foo2(uint32_t rs1, uint32_t rs2, unsigned bs)
{
- return __builtin_riscv_sm4ed(rs1,rs2,bs);
+ return __builtin_riscv_sm4ed(rs1,rs2,bs); /* { dg-error "invalid argument to built-in function" } */
}
+uint32_t foo3(uint32_t rs1, uint32_t rs2)
+{
+ return __builtin_riscv_sm4ks(rs1,rs2,-1); /* { dg-error "invalid argument to built-in function" } */
+}
+
+uint32_t foo4(uint32_t rs1, uint32_t rs2)
+{
+ return __builtin_riscv_sm4ed(rs1,rs2,-1); /* { dg-error "invalid argument to built-in function" } */
+}
-/* { dg-final { scan-assembler-times {\msm4ks} 1 } } */
-/* { dg-final { scan-assembler-times {\msm4ed} 1 } } */
+uint32_t foo5(uint32_t rs1, uint32_t rs2)
+{
+ return __builtin_riscv_sm4ks(rs1,rs2,4); /* { dg-error "invalid argument to built-in function" } */
+}
+
+uint32_t foo6(uint32_t rs1, uint32_t rs2)
+{
+ return __builtin_riscv_sm4ed(rs1,rs2,4); /* { dg-error "invalid argument to built-in function" } */
+}