https://gcc.gnu.org/bugzilla/show_bug.cgi?id=110201
Bug ID: 110201 Summary: RISC-V: __builtin_riscv_sm4ks and __builtin_riscv_sm4ed produce invalid assembly Product: gcc Version: 14.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: target Assignee: unassigned at gcc dot gnu.org Reporter: craig.topper at gmail dot com Target Milestone: --- The __builtin_riscv_sm4ks and __builtin_riscv_sm4ed builtins don't enforce that the byte select should be an immediate. if an immediate provided they still use a register. int32_t foo1(int32_t rs1, int32_t rs2, int bs) { return __builtin_riscv_sm4ks(rs1,rs2,bs); } int32_t foo2(int32_t rs1, int32_t rs2, int bs) { return __builtin_riscv_sm4ed(rs1,rs2,bs); } int32_t foo3(int32_t rs1, int32_t rs2, int bs) { return __builtin_riscv_sm4ks(rs1,rs2,0); } int32_t foo4(int32_t rs1, int32_t rs2, int bs) { return __builtin_riscv_sm4ed(rs1,rs2,0); } https://godbolt.org/z/jadKva9M9