1 /* { dg-do compile } */
2 /* { dg-options "-march=rv32gc_xtheadbb" { target { rv32 } } } */
3 /* { dg-options "-march=rv64gc_xtheadbb" { target { rv64 } } } */
4 /* { dg-skip-if "" { *-*-* } { "-O0" } } */
5
6 unsigned long
7 foo1 (unsigned long rs1)
8 {
9 unsigned sz = sizeof(unsigned long) * 8;
10 unsigned shamt = sz - 11;
11 return (rs1 << shamt) | (rs1 >> (sz - shamt));
12 }
13
14 unsigned int
15 foo2 (unsigned int rs1)
16 {
17 unsigned sz = sizeof(unsigned int) * 8;
18 unsigned shamt = sz - 11;
19 return (rs1 << shamt) | (rs1 >> (sz - shamt));
20 }
21
22 /* { dg-final { scan-assembler-times "th.srri\t" 2 { target { rv32 } } } } */
23
24 /* { dg-final { scan-assembler-times "th.srri\t" 1 { target { rv64 } } } } */
25 /* { dg-final { scan-assembler-times "th.srriw\t" 1 { target { rv64 } } } } */