On Tue, Nov 12, 2024 at 2:15 AM Jeff Law <jeffreya...@gmail.com> wrote:
> > + > > + > > +/* Generate assembly to calculate CRC using clmul instruction. > > + The following code will be generated when the CRC and data sizes are > equal: > > + li a4,quotient > > + li a5,polynomial > > + xor a0,a1,a0 > > + clmul a0,a0,a4 > > + srli a0,a0,crc_size > > + clmul a0,a0,a5 > > + slli a0,a0,word_mode_size - crc_size > > + srli a0,a0,word_mode_size - crc_size > Not something you need to change. Aren't the final two instructions > here just a zero extension? > > I suspect combine would pick this up. So it's probably not worth adding > more conditionals in expander. In the GCC code, after inserting the clmul instruction, I call riscv_emit_move (operands[0], gen_lowpart (crc_mode, a0)). I do not explicitly insert slli and srli instructions. Zero extension is used in the early phases of the compilation, but during the split2 pass, it is replaced by ashift and lshiftrt instructions. > > > > > > \ No newline at end of file > > diff --git a/gcc/testsuite/gcc.target/riscv/crc-1-zbkc.c > b/gcc/testsuite/gcc.target/riscv/crc-1-zbkc.c > > new file mode 100644 > > index 00000000000..8c627c0431a > > --- /dev/null > > +++ b/gcc/testsuite/gcc.target/riscv/crc-1-zbkc.c > > @@ -0,0 +1,11 @@ > > +/* { dg-do run } */ > > +/* { dg-options "-fdump-tree-crc -fdump-rtl-dfinish > -fdisable-tree-phiopt2 -fdisable-tree-phiopt3" } */ > > +/* { dg-additional-options "-march=rv64gc_zbkc" { target { rv64 } } } */ > > +/* { dg-additional-options "-march=rv32gc_zbkc" { target { rv32 } } } */ > So I think we probably need to add a bit of code to the testsuite. > Essentially we don't want to run this test on targets that don't have > zbkc support. > > I think we probably end up wanting something similar to what we do with > vector where we have a test to tell us when V is supported. I'm > planning to pick that up. Similarly I think we want to do something > similar for Zbc. > To address this, I added code in target-supports.exp and modified the relevant tests. I've attached the patch. Could you please check whether it is correct? Thanks, Mariam > Jeff >
diff --git a/gcc/testsuite/gcc.target/riscv/crc-1-zbc.c b/gcc/testsuite/gcc.target/riscv/crc-1-zbc.c index c16224d045a..46ef0b27a81 100644 --- a/gcc/testsuite/gcc.target/riscv/crc-1-zbc.c +++ b/gcc/testsuite/gcc.target/riscv/crc-1-zbc.c @@ -1,7 +1,5 @@ -/* { dg-do run } */ +/* { dg-do run { target riscv_zbc } } */ /* { dg-options "-fdump-tree-crc -fdump-rtl-dfinish -fdisable-tree-phiopt2 -fdisable-tree-phiopt3" } */ -/* { dg-additional-options "-march=rv64gc_zbc" { target { rv64 } } } */ -/* { dg-additional-options "-march=rv32gc_zbc" { target { rv32 } } } */ /* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-Og" } } */ #include "../../gcc.dg/torture/crc-1.c" diff --git a/gcc/testsuite/gcc.target/riscv/crc-1-zbkc.c b/gcc/testsuite/gcc.target/riscv/crc-1-zbkc.c index 8c627c0431a..ff7b0068de2 100644 --- a/gcc/testsuite/gcc.target/riscv/crc-1-zbkc.c +++ b/gcc/testsuite/gcc.target/riscv/crc-1-zbkc.c @@ -1,7 +1,6 @@ -/* { dg-do run } */ +/* { dg-do run { target riscv_zbkc } } */ /* { dg-options "-fdump-tree-crc -fdump-rtl-dfinish -fdisable-tree-phiopt2 -fdisable-tree-phiopt3" } */ -/* { dg-additional-options "-march=rv64gc_zbkc" { target { rv64 } } } */ -/* { dg-additional-options "-march=rv32gc_zbkc" { target { rv32 } } } */ + /* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-Og" } } */ #include "../../gcc.dg/torture/crc-1.c" diff --git a/gcc/testsuite/gcc.target/riscv/crc-10-zbc.c b/gcc/testsuite/gcc.target/riscv/crc-10-zbc.c index 7a69ae673e6..768080e618c 100644 --- a/gcc/testsuite/gcc.target/riscv/crc-10-zbc.c +++ b/gcc/testsuite/gcc.target/riscv/crc-10-zbc.c @@ -1,7 +1,5 @@ -/* { dg-do run } */ +/* { dg-do run { target riscv_zbc } } */ /* { dg-options "-fdump-tree-crc -fdump-rtl-dfinish " } */ -/* { dg-additional-options "-march=rv64gc_zbc" { target { rv64 } } } */ -/* { dg-additional-options "-march=rv32gc_zbc" { target { rv32 } } } */ /* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-Og" } } */ #include "../../gcc.dg/torture/crc-10.c" diff --git a/gcc/testsuite/gcc.target/riscv/crc-10-zbkc.c b/gcc/testsuite/gcc.target/riscv/crc-10-zbkc.c index c4e65f8f758..1d9c07b2e2d 100644 --- a/gcc/testsuite/gcc.target/riscv/crc-10-zbkc.c +++ b/gcc/testsuite/gcc.target/riscv/crc-10-zbkc.c @@ -1,7 +1,5 @@ -/* { dg-do run } */ +/* { dg-do run { target riscv_zbkc } } */ /* { dg-options "-fdump-tree-crc -fdump-rtl-dfinish " } */ -/* { dg-additional-options "-march=rv64gc_zbkc" { target { rv64 } } } */ -/* { dg-additional-options "-march=rv32gc_zbkc" { target { rv32 } } } */ /* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-Og" } } */ #include "../../gcc.dg/torture/crc-10.c" diff --git a/gcc/testsuite/gcc.target/riscv/crc-12-zbc.c b/gcc/testsuite/gcc.target/riscv/crc-12-zbc.c index 919796e4818..3e3e43e90e4 100644 --- a/gcc/testsuite/gcc.target/riscv/crc-12-zbc.c +++ b/gcc/testsuite/gcc.target/riscv/crc-12-zbc.c @@ -1,7 +1,5 @@ -/* { dg-do run } */ +/* { dg-do run { target riscv_zbc } } */ /* { dg-options "-fdump-tree-crc -fdump-rtl-dfinish -fdisable-tree-phiopt2 -fdisable-tree-phiopt3" } */ -/* { dg-additional-options "-march=rv64gc_zbc" { target { rv64 } } } */ -/* { dg-additional-options "-march=rv32gc_zbc" { target { rv32 } } } */ /* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-Og" } } */ #include "../../gcc.dg/torture/crc-12.c" diff --git a/gcc/testsuite/gcc.target/riscv/crc-12-zbkc.c b/gcc/testsuite/gcc.target/riscv/crc-12-zbkc.c index 674edb39de2..a877274ebf1 100644 --- a/gcc/testsuite/gcc.target/riscv/crc-12-zbkc.c +++ b/gcc/testsuite/gcc.target/riscv/crc-12-zbkc.c @@ -1,7 +1,5 @@ -/* { dg-do run } */ +/* { dg-do run { target riscv_zbkc } } */ /* { dg-options "-fdump-tree-crc -fdump-rtl-dfinish -fdisable-tree-phiopt2 -fdisable-tree-phiopt3" } */ -/* { dg-additional-options "-march=rv64gc_zbkc" { target { rv64 } } } */ -/* { dg-additional-options "-march=rv32gc_zbkc" { target { rv32 } } } */ /* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-Og" } } */ #include "../../gcc.dg/torture/crc-12.c" diff --git a/gcc/testsuite/gcc.target/riscv/crc-13-zbc.c b/gcc/testsuite/gcc.target/riscv/crc-13-zbc.c index a6f131c1c49..3be593c6ae8 100644 --- a/gcc/testsuite/gcc.target/riscv/crc-13-zbc.c +++ b/gcc/testsuite/gcc.target/riscv/crc-13-zbc.c @@ -1,7 +1,5 @@ -/* { dg-do run } */ +/* { dg-do run { target riscv_zbc } } */ /* { dg-options "-fdump-tree-crc -fdump-rtl-dfinish " } */ -/* { dg-additional-options "-march=rv64gc_zbc" { target { rv64 } } } */ -/* { dg-additional-options "-march=rv32gc_zbc" { target { rv32 } } } */ /* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-Og" } } */ #include "../../gcc.dg/torture/crc-13.c" diff --git a/gcc/testsuite/gcc.target/riscv/crc-13-zbkc.c b/gcc/testsuite/gcc.target/riscv/crc-13-zbkc.c index c59c6ee5959..f5011507bff 100644 --- a/gcc/testsuite/gcc.target/riscv/crc-13-zbkc.c +++ b/gcc/testsuite/gcc.target/riscv/crc-13-zbkc.c @@ -1,7 +1,6 @@ -/* { dg-do run } */ +/* { dg-do run { target riscv_zbkc } } */ /* { dg-options "-fdump-tree-crc -fdump-rtl-dfinish " } */ -/* { dg-additional-options "-march=rv64gc_zbkc" { target { rv64 } } } */ -/* { dg-additional-options "-march=rv32gc_zbkc" { target { rv32 } } } */ + /* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-Og" } } */ #include "../../gcc.dg/torture/crc-13.c" diff --git a/gcc/testsuite/gcc.target/riscv/crc-14-zbc.c b/gcc/testsuite/gcc.target/riscv/crc-14-zbc.c index a4a1c948194..454a6161d8e 100644 --- a/gcc/testsuite/gcc.target/riscv/crc-14-zbc.c +++ b/gcc/testsuite/gcc.target/riscv/crc-14-zbc.c @@ -1,7 +1,5 @@ -/* { dg-do run } */ +/* { dg-do run { target riscv_zbc } } */ /* { dg-options "-fdump-tree-crc -fdump-rtl-dfinish " } */ -/* { dg-additional-options "-march=rv64gc_zbc" { target { rv64 } } } */ -/* { dg-additional-options "-march=rv32gc_zbc" { target { rv32 } } } */ /* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-Og" } } */ #include "../../gcc.dg/torture/crc-14.c" diff --git a/gcc/testsuite/gcc.target/riscv/crc-14-zbkc.c b/gcc/testsuite/gcc.target/riscv/crc-14-zbkc.c index a7c1381eebe..d9af892457a 100644 --- a/gcc/testsuite/gcc.target/riscv/crc-14-zbkc.c +++ b/gcc/testsuite/gcc.target/riscv/crc-14-zbkc.c @@ -1,7 +1,5 @@ -/* { dg-do run } */ +/* { dg-do run { target riscv_zbkc } } */ /* { dg-options "-fdump-tree-crc -fdump-rtl-dfinish " } */ -/* { dg-additional-options "-march=rv64gc_zbkc" { target { rv64 } } } */ -/* { dg-additional-options "-march=rv32gc_zbkc" { target { rv32 } } } */ /* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-Og" } } */ #include "../../gcc.dg/torture/crc-14.c" diff --git a/gcc/testsuite/gcc.target/riscv/crc-17-zbc.c b/gcc/testsuite/gcc.target/riscv/crc-17-zbc.c index 244c22a6e86..5f601232bf9 100644 --- a/gcc/testsuite/gcc.target/riscv/crc-17-zbc.c +++ b/gcc/testsuite/gcc.target/riscv/crc-17-zbc.c @@ -1,7 +1,5 @@ -/* { dg-do run } */ +/* { dg-do run { target riscv_zbc } } */ /* { dg-options "-fdump-tree-crc -fdump-rtl-dfinish " } */ -/* { dg-additional-options "-march=rv64gc_zbc" { target { rv64 } } } */ -/* { dg-additional-options "-march=rv32gc_zbc" { target { rv32 } } } */ /* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-Og" } } */ #include "../../gcc.dg/torture/crc-17.c" diff --git a/gcc/testsuite/gcc.target/riscv/crc-17-zbkc.c b/gcc/testsuite/gcc.target/riscv/crc-17-zbkc.c index 879fc285330..685fc35b9fd 100644 --- a/gcc/testsuite/gcc.target/riscv/crc-17-zbkc.c +++ b/gcc/testsuite/gcc.target/riscv/crc-17-zbkc.c @@ -1,7 +1,5 @@ -/* { dg-do run } */ +/* { dg-do run { target riscv_zbkc } } */ /* { dg-options "-fdump-tree-crc -fdump-rtl-dfinish " } */ -/* { dg-additional-options "-march=rv64gc_zbkc" { target { rv64 } } } */ -/* { dg-additional-options "-march=rv32gc_zbkc" { target { rv32 } } } */ /* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-Og" } } */ #include "../../gcc.dg/torture/crc-17.c" diff --git a/gcc/testsuite/gcc.target/riscv/crc-18-zbc.c b/gcc/testsuite/gcc.target/riscv/crc-18-zbc.c index b4e6aa3b063..5de366d4742 100644 --- a/gcc/testsuite/gcc.target/riscv/crc-18-zbc.c +++ b/gcc/testsuite/gcc.target/riscv/crc-18-zbc.c @@ -1,7 +1,5 @@ -/* { dg-do run } */ +/* { dg-do run { target riscv_zbc } } */ /* { dg-options "-fdump-tree-crc -fdump-rtl-dfinish " } */ -/* { dg-additional-options "-march=rv64gc_zbc" { target { rv64 } } } */ -/* { dg-additional-options "-march=rv32gc_zbc" { target { rv32 } } } */ /* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-Og" } } */ #include "../../gcc.dg/torture/crc-18.c" diff --git a/gcc/testsuite/gcc.target/riscv/crc-18-zbkc.c b/gcc/testsuite/gcc.target/riscv/crc-18-zbkc.c index 6b4d2531678..4842d5cae20 100644 --- a/gcc/testsuite/gcc.target/riscv/crc-18-zbkc.c +++ b/gcc/testsuite/gcc.target/riscv/crc-18-zbkc.c @@ -1,7 +1,5 @@ -/* { dg-do run } */ +/* { dg-do run { target riscv_zbkc } } */ /* { dg-options "-fdump-tree-crc -fdump-rtl-dfinish " } */ -/* { dg-additional-options "-march=rv64gc_zbkc" { target { rv64 } } } */ -/* { dg-additional-options "-march=rv32gc_zbkc" { target { rv32 } } } */ /* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-Og" } } */ #include "../../gcc.dg/torture/crc-18.c" diff --git a/gcc/testsuite/gcc.target/riscv/crc-21-rv64-zbc.c b/gcc/testsuite/gcc.target/riscv/crc-21-rv64-zbc.c index 261fe701933..c7725d36dfe 100644 --- a/gcc/testsuite/gcc.target/riscv/crc-21-rv64-zbc.c +++ b/gcc/testsuite/gcc.target/riscv/crc-21-rv64-zbc.c @@ -1,4 +1,4 @@ -/* { dg-do run { target { riscv64*-*-* } } } */ +/* { dg-do run { target { riscv64*-*-* && riscv_zbc } } } */ /* { dg-options "-fdump-tree-crc -fdump-rtl-dfinish -march=rv64gc_zbc" } */ /* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-Og" } } */ diff --git a/gcc/testsuite/gcc.target/riscv/crc-21-rv64-zbkc.c b/gcc/testsuite/gcc.target/riscv/crc-21-rv64-zbkc.c index 0b5142640c6..6851c6a54cd 100644 --- a/gcc/testsuite/gcc.target/riscv/crc-21-rv64-zbkc.c +++ b/gcc/testsuite/gcc.target/riscv/crc-21-rv64-zbkc.c @@ -1,4 +1,4 @@ -/* { dg-do run { target { riscv64*-*-* } } } */ +/* { dg-do run { target { riscv64*-*-* && riscv_zbc } } } */ /* { dg-options "-fdump-tree-crc -fdump-rtl-dfinish -march=rv64gc_zbkc" } */ /* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-Og" } } */ diff --git a/gcc/testsuite/gcc.target/riscv/crc-22-zbc.c b/gcc/testsuite/gcc.target/riscv/crc-22-zbc.c index e7249b5132f..d5b272aa853 100644 --- a/gcc/testsuite/gcc.target/riscv/crc-22-zbc.c +++ b/gcc/testsuite/gcc.target/riscv/crc-22-zbc.c @@ -1,7 +1,5 @@ -/* { dg-do run } */ +/* { dg-do run { target riscv_zbc } } */ /* { dg-options "-fdump-tree-crc -fdump-rtl-dfinish " } */ -/* { dg-additional-options "-march=rv64gc_zbc" { target { rv64 } } } */ -/* { dg-additional-options "-march=rv32gc_zbc" { target { rv32 } } } */ /* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-Og" } } */ #include "../../gcc.dg/torture/crc-22.c" diff --git a/gcc/testsuite/gcc.target/riscv/crc-22-zbkb.c b/gcc/testsuite/gcc.target/riscv/crc-22-zbkb.c index f63ef4e8d9f..b5055d7983c 100644 --- a/gcc/testsuite/gcc.target/riscv/crc-22-zbkb.c +++ b/gcc/testsuite/gcc.target/riscv/crc-22-zbkb.c @@ -1,7 +1,5 @@ -/* { dg-do run } */ +/* { dg-do run { target riscv_zbkb } } */ /* { dg-options "-fdump-tree-crc-details" } */ -/* { dg-additional-options "-march=rv64gc_zbkb" { target { rv64 } } } */ -/* { dg-additional-options "-march=rv32gc_zbkb" { target { rv32 } } } */ /* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-Os" "-Oz" "-Og" "-flto"} } */ #include "../../gcc.dg/torture/crc-22.c" diff --git a/gcc/testsuite/gcc.target/riscv/crc-22-zbkc.c b/gcc/testsuite/gcc.target/riscv/crc-22-zbkc.c index 7499d151557..b866c9391e1 100644 --- a/gcc/testsuite/gcc.target/riscv/crc-22-zbkc.c +++ b/gcc/testsuite/gcc.target/riscv/crc-22-zbkc.c @@ -1,7 +1,5 @@ -/* { dg-do run } */ +/* { dg-do run { target riscv_zbkc } } */ /* { dg-options "-fdump-tree-crc -fdump-rtl-dfinish " } */ -/* { dg-additional-options "-march=rv64gc_zbkc" { target { rv64 } } } */ -/* { dg-additional-options "-march=rv32gc_zbkc" { target { rv32 } } } */ /* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-Og" } } */ #include "../../gcc.dg/torture/crc-22.c" diff --git a/gcc/testsuite/gcc.target/riscv/crc-23-zbc.c b/gcc/testsuite/gcc.target/riscv/crc-23-zbc.c index 2c2b91f8e3b..8258fd6f070 100644 --- a/gcc/testsuite/gcc.target/riscv/crc-23-zbc.c +++ b/gcc/testsuite/gcc.target/riscv/crc-23-zbc.c @@ -1,7 +1,5 @@ -/* { dg-do run } */ +/* { dg-do run { target riscv_zbc } } */ /* { dg-options "-fdump-tree-crc -fdump-rtl-dfinish " } */ -/* { dg-additional-options "-march=rv64gc_zbc" { target { rv64 } } } */ -/* { dg-additional-options "-march=rv32gc_zbc" { target { rv32 } } } */ /* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-Og" } } */ #include "../../gcc.dg/torture/crc-23.c" diff --git a/gcc/testsuite/gcc.target/riscv/crc-23-zbkc.c b/gcc/testsuite/gcc.target/riscv/crc-23-zbkc.c index 59439ee6706..ab2a31d44ef 100644 --- a/gcc/testsuite/gcc.target/riscv/crc-23-zbkc.c +++ b/gcc/testsuite/gcc.target/riscv/crc-23-zbkc.c @@ -1,7 +1,5 @@ -/* { dg-do run } */ +/* { dg-do run { target riscv_zbkc } } */ /* { dg-options "-fdump-tree-crc -fdump-rtl-dfinish " } */ -/* { dg-additional-options "-march=rv64gc_zbkc" { target { rv64 } } } */ -/* { dg-additional-options "-march=rv32gc_zbkc" { target { rv32 } } } */ /* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-Og" } } */ #include "../../gcc.dg/torture/crc-23.c" diff --git a/gcc/testsuite/gcc.target/riscv/crc-4-zbc.c b/gcc/testsuite/gcc.target/riscv/crc-4-zbc.c index c7c859a16e4..f81f303ea37 100644 --- a/gcc/testsuite/gcc.target/riscv/crc-4-zbc.c +++ b/gcc/testsuite/gcc.target/riscv/crc-4-zbc.c @@ -1,7 +1,5 @@ -/* { dg-do run } */ +/* { dg-do run { target riscv_zbc } } */ /* { dg-options "-fdump-tree-crc -fdump-rtl-dfinish " } */ -/* { dg-additional-options "-march=rv64gc_zbc" { target { rv64 } } } */ -/* { dg-additional-options "-march=rv32gc_zbc" { target { rv32 } } } */ /* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-Og" } } */ #include "../../gcc.dg/torture/crc-4.c" diff --git a/gcc/testsuite/gcc.target/riscv/crc-4-zbkb.c b/gcc/testsuite/gcc.target/riscv/crc-4-zbkb.c index 7017de9bec9..fadfffaab7b 100644 --- a/gcc/testsuite/gcc.target/riscv/crc-4-zbkb.c +++ b/gcc/testsuite/gcc.target/riscv/crc-4-zbkb.c @@ -1,7 +1,5 @@ -/* { dg-do run } */ +/* { dg-do run { target riscv_zbkb } } */ /* { dg-options "-fdump-tree-crc-details" } */ -/* { dg-additional-options "-march=rv64gc_zbkb" { target { rv64 } } } */ -/* { dg-additional-options "-march=rv32gc_zbkb" { target { rv32 } } } */ /* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-Os" "-Oz" "-Og" "-flto"} } */ #include "../../gcc.dg/torture/crc-4.c" diff --git a/gcc/testsuite/gcc.target/riscv/crc-4-zbkc.c b/gcc/testsuite/gcc.target/riscv/crc-4-zbkc.c index 3601af1ab81..337f70b9e24 100644 --- a/gcc/testsuite/gcc.target/riscv/crc-4-zbkc.c +++ b/gcc/testsuite/gcc.target/riscv/crc-4-zbkc.c @@ -1,7 +1,5 @@ -/* { dg-do run } */ +/* { dg-do run { target riscv_zbkc } } */ /* { dg-options "-fdump-tree-crc -fdump-rtl-dfinish " } */ -/* { dg-additional-options "-march=rv64gc_zbkc" { target { rv64 } } } */ -/* { dg-additional-options "-march=rv32gc_zbkc" { target { rv32 } } } */ /* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-Og" } } */ #include "../../gcc.dg/torture/crc-4.c" diff --git a/gcc/testsuite/gcc.target/riscv/crc-5-zbc.c b/gcc/testsuite/gcc.target/riscv/crc-5-zbc.c index 54f8c6b2172..d82114d11fe 100644 --- a/gcc/testsuite/gcc.target/riscv/crc-5-zbc.c +++ b/gcc/testsuite/gcc.target/riscv/crc-5-zbc.c @@ -1,7 +1,5 @@ -/* { dg-do run } */ +/* { dg-do run { target riscv_zbc } } */ /* { dg-options "-w -fdump-tree-crc -fdump-rtl-dfinish " } */ -/* { dg-additional-options "-march=rv64gc_zbc" { target { rv64 } } } */ -/* { dg-additional-options "-march=rv32gc_zbc" { target { rv32 } } } */ /* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-Og" } } */ #include "../../gcc.dg/torture/crc-5.c" diff --git a/gcc/testsuite/gcc.target/riscv/crc-5-zbkb.c b/gcc/testsuite/gcc.target/riscv/crc-5-zbkb.c index ee327064dce..c7441164557 100644 --- a/gcc/testsuite/gcc.target/riscv/crc-5-zbkb.c +++ b/gcc/testsuite/gcc.target/riscv/crc-5-zbkb.c @@ -1,7 +1,5 @@ -/* { dg-do run } */ +/* { dg-do run { target riscv_zbkb } } */ /* { dg-options "-w -fdump-tree-crc-details" } */ -/* { dg-additional-options "-march=rv64gc_zbkb" { target { rv64 } } } */ -/* { dg-additional-options "-march=rv32gc_zbkb" { target { rv32 } } } */ /* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-Os" "-Oz" "-Og" "-flto"} } */ #include "../../gcc.dg/torture/crc-5.c" diff --git a/gcc/testsuite/gcc.target/riscv/crc-5-zbkc.c b/gcc/testsuite/gcc.target/riscv/crc-5-zbkc.c index 956bdd417db..6ac165c00a2 100644 --- a/gcc/testsuite/gcc.target/riscv/crc-5-zbkc.c +++ b/gcc/testsuite/gcc.target/riscv/crc-5-zbkc.c @@ -1,7 +1,5 @@ -/* { dg-do run } */ +/* { dg-do run { target riscv_zbkc } } */ /* { dg-options "-w -fdump-tree-crc -fdump-rtl-dfinish " } */ -/* { dg-additional-options "-march=rv64gc_zbkc" { target { rv64 } } } */ -/* { dg-additional-options "-march=rv32gc_zbkc" { target { rv32 } } } */ /* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-Og" } } */ #include "../../gcc.dg/torture/crc-5.c" diff --git a/gcc/testsuite/gcc.target/riscv/crc-6-zbc.c b/gcc/testsuite/gcc.target/riscv/crc-6-zbc.c index 49e79397e4a..ac9271dc46d 100644 --- a/gcc/testsuite/gcc.target/riscv/crc-6-zbc.c +++ b/gcc/testsuite/gcc.target/riscv/crc-6-zbc.c @@ -1,7 +1,5 @@ -/* { dg-do run } */ +/* { dg-do run { target riscv_zbc } } */ /* { dg-options "-fdump-tree-crc -fdump-rtl-dfinish " } */ -/* { dg-additional-options "-march=rv64gc_zbc" { target { rv64 } } } */ -/* { dg-additional-options "-march=rv32gc_zbc" { target { rv32 } } } */ /* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-O3" "-Og" } } */ #include "../../gcc.dg/torture/crc-6.c" diff --git a/gcc/testsuite/gcc.target/riscv/crc-6-zbkc.c b/gcc/testsuite/gcc.target/riscv/crc-6-zbkc.c index e5316f4cfb3..8f5d7c376cb 100644 --- a/gcc/testsuite/gcc.target/riscv/crc-6-zbkc.c +++ b/gcc/testsuite/gcc.target/riscv/crc-6-zbkc.c @@ -1,7 +1,5 @@ -/* { dg-do run } */ +/* { dg-do run { target riscv_zbkc } } */ /* { dg-options "-fdump-tree-crc -fdump-rtl-dfinish " } */ -/* { dg-additional-options "-march=rv64gc_zbkc" { target { rv64 } } } */ -/* { dg-additional-options "-march=rv32gc_zbkc" { target { rv32 } } } */ /* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-O3" "-Og" } } */ #include "../../gcc.dg/torture/crc-6.c" diff --git a/gcc/testsuite/gcc.target/riscv/crc-7-zbc.c b/gcc/testsuite/gcc.target/riscv/crc-7-zbc.c index 2be80ee467e..7d406a72966 100644 --- a/gcc/testsuite/gcc.target/riscv/crc-7-zbc.c +++ b/gcc/testsuite/gcc.target/riscv/crc-7-zbc.c @@ -1,7 +1,5 @@ -/* { dg-do run } */ +/* { dg-do run { target riscv_zbc } } */ /* { dg-options "-fdump-tree-crc -fdump-rtl-dfinish " } */ -/* { dg-additional-options "-march=rv64gc_zbc" { target { rv64 } } } */ -/* { dg-additional-options "-march=rv32gc_zbc" { target { rv32 } } } */ /* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-Og" } } */ #include "../../gcc.dg/torture/crc-7.c" diff --git a/gcc/testsuite/gcc.target/riscv/crc-7-zbkc.c b/gcc/testsuite/gcc.target/riscv/crc-7-zbkc.c index 5b9db3c5372..70c78c3db77 100644 --- a/gcc/testsuite/gcc.target/riscv/crc-7-zbkc.c +++ b/gcc/testsuite/gcc.target/riscv/crc-7-zbkc.c @@ -1,7 +1,5 @@ -/* { dg-do run } */ +/* { dg-do run { target riscv_zbkc } } */ /* { dg-options "-fdump-tree-crc -fdump-rtl-dfinish " } */ -/* { dg-additional-options "-march=rv64gc_zbkc" { target { rv64 } } } */ -/* { dg-additional-options "-march=rv32gc_zbkc" { target { rv32 } } } */ /* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-Og" } } */ #include "../../gcc.dg/torture/crc-7.c" diff --git a/gcc/testsuite/gcc.target/riscv/crc-8-zbc.c b/gcc/testsuite/gcc.target/riscv/crc-8-zbc.c index be3564050f9..c660e9ce896 100644 --- a/gcc/testsuite/gcc.target/riscv/crc-8-zbc.c +++ b/gcc/testsuite/gcc.target/riscv/crc-8-zbc.c @@ -1,7 +1,5 @@ -/* { dg-do run } */ +/* { dg-do run { target riscv_zbc } } */ /* { dg-options "-fdump-tree-crc -fdump-rtl-dfinish " } */ -/* { dg-additional-options "-march=rv64gc_zbc" { target { rv64 } } } */ -/* { dg-additional-options "-march=rv32gc_zbc" { target { rv32 } } } */ /* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-Og" } } */ #include "../../gcc.dg/torture/crc-8.c" diff --git a/gcc/testsuite/gcc.target/riscv/crc-8-zbkb.c b/gcc/testsuite/gcc.target/riscv/crc-8-zbkb.c index f9bd4945fbf..52a771dc652 100644 --- a/gcc/testsuite/gcc.target/riscv/crc-8-zbkb.c +++ b/gcc/testsuite/gcc.target/riscv/crc-8-zbkb.c @@ -1,7 +1,5 @@ -/* { dg-do run } */ +/* { dg-do run { target riscv_zbkb } } */ /* { dg-options "-fdump-tree-crc-details" } */ -/* { dg-additional-options "-march=rv64gc_zbkb" { target { rv64 } } } */ -/* { dg-additional-options "-march=rv32gc_zbkb" { target { rv32 } } } */ /* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-Os" "-Oz" "-Og" "-flto"} } */ #include "../../gcc.dg/torture/crc-8.c" diff --git a/gcc/testsuite/gcc.target/riscv/crc-8-zbkc.c b/gcc/testsuite/gcc.target/riscv/crc-8-zbkc.c index e7a3520a3b0..23553618248 100644 --- a/gcc/testsuite/gcc.target/riscv/crc-8-zbkc.c +++ b/gcc/testsuite/gcc.target/riscv/crc-8-zbkc.c @@ -1,7 +1,5 @@ -/* { dg-do run } */ +/* { dg-do run { target riscv_zbkc } } */ /* { dg-options "-fdump-tree-crc -fdump-rtl-dfinish " } */ -/* { dg-additional-options "-march=rv64gc_zbkc" { target { rv64 } } } */ -/* { dg-additional-options "-march=rv32gc_zbkc" { target { rv32 } } } */ /* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-Og" } } */ #include "../../gcc.dg/torture/crc-8.c" diff --git a/gcc/testsuite/gcc.target/riscv/crc-9-zbc.c b/gcc/testsuite/gcc.target/riscv/crc-9-zbc.c index 9b05264d149..8e74af289a8 100644 --- a/gcc/testsuite/gcc.target/riscv/crc-9-zbc.c +++ b/gcc/testsuite/gcc.target/riscv/crc-9-zbc.c @@ -1,7 +1,5 @@ -/* { dg-do run } */ +/* { dg-do run { target riscv_zbc } } */ /* { dg-options "-fdump-tree-crc -fdump-rtl-dfinish " } */ -/* { dg-additional-options "-march=rv64gc_zbc" { target { rv64 } } } */ -/* { dg-additional-options "-march=rv32gc_zbc" { target { rv32 } } } */ /* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-O3" "-Og" } } */ #include "../../gcc.dg/torture/crc-9.c" diff --git a/gcc/testsuite/gcc.target/riscv/crc-9-zbkc.c b/gcc/testsuite/gcc.target/riscv/crc-9-zbkc.c index 30df5e695cf..654edb06f6f 100644 --- a/gcc/testsuite/gcc.target/riscv/crc-9-zbkc.c +++ b/gcc/testsuite/gcc.target/riscv/crc-9-zbkc.c @@ -1,7 +1,5 @@ -/* { dg-do run } */ +/* { dg-do run { target riscv_zbkc } } */ /* { dg-options "-fdump-tree-crc -fdump-rtl-dfinish " } */ -/* { dg-additional-options "-march=rv64gc_zbkc" { target { rv64 } } } */ -/* { dg-additional-options "-march=rv32gc_zbkc" { target { rv32 } } } */ /* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-O3" "-Og" } } */ #include "../../gcc.dg/torture/crc-9.c" diff --git a/gcc/testsuite/gcc.target/riscv/crc-CCIT-data16-zbc.c b/gcc/testsuite/gcc.target/riscv/crc-CCIT-data16-zbc.c index b21d7f07e0b..be15dea2bc8 100644 --- a/gcc/testsuite/gcc.target/riscv/crc-CCIT-data16-zbc.c +++ b/gcc/testsuite/gcc.target/riscv/crc-CCIT-data16-zbc.c @@ -1,7 +1,5 @@ -/* { dg-do run } */ +/* { dg-do run { target riscv_zbc } } */ /* { dg-options "-w -fdump-tree-crc -fdump-rtl-dfinish " } */ -/* { dg-additional-options "-march=rv64gc_zbc" { target { rv64 } } } */ -/* { dg-additional-options "-march=rv32gc_zbc" { target { rv32 } } } */ /* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-Og" } } */ #include "../../gcc.dg/torture/crc-CCIT-data16.c" diff --git a/gcc/testsuite/gcc.target/riscv/crc-CCIT-data16-zbkc.c b/gcc/testsuite/gcc.target/riscv/crc-CCIT-data16-zbkc.c index 5f66a9d405f..a8f76b5f73c 100644 --- a/gcc/testsuite/gcc.target/riscv/crc-CCIT-data16-zbkc.c +++ b/gcc/testsuite/gcc.target/riscv/crc-CCIT-data16-zbkc.c @@ -1,7 +1,5 @@ -/* { dg-do run } */ +/* { dg-do run { target riscv_zbkc } } */ /* { dg-options "-w -fdump-tree-crc -fdump-rtl-dfinish " } */ -/* { dg-additional-options "-march=rv64gc_zbkc" { target { rv64 } } } */ -/* { dg-additional-options "-march=rv32gc_zbkc" { target { rv32 } } } */ /* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-Og" } } */ #include "../../gcc.dg/torture/crc-CCIT-data16.c" diff --git a/gcc/testsuite/gcc.target/riscv/crc-CCIT-data8-zbc.c b/gcc/testsuite/gcc.target/riscv/crc-CCIT-data8-zbc.c index 0a7b83b35c4..da5e1f370e2 100644 --- a/gcc/testsuite/gcc.target/riscv/crc-CCIT-data8-zbc.c +++ b/gcc/testsuite/gcc.target/riscv/crc-CCIT-data8-zbc.c @@ -1,7 +1,5 @@ -/* { dg-do run } */ +/* { dg-do run { target riscv_zbc } } */ /* { dg-options "-w -fdump-tree-crc -fdump-rtl-dfinish " } */ -/* { dg-additional-options "-march=rv64gc_zbc" { target { rv64 } } } */ -/* { dg-additional-options "-march=rv32gc_zbc" { target { rv32 } } } */ /* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-Og" } } */ #include "../../gcc.dg/torture/crc-CCIT-data8.c" diff --git a/gcc/testsuite/gcc.target/riscv/crc-CCIT-data8-zbkc.c b/gcc/testsuite/gcc.target/riscv/crc-CCIT-data8-zbkc.c index c68ee27c123..3bdbb015aa8 100644 --- a/gcc/testsuite/gcc.target/riscv/crc-CCIT-data8-zbkc.c +++ b/gcc/testsuite/gcc.target/riscv/crc-CCIT-data8-zbkc.c @@ -1,7 +1,5 @@ -/* { dg-do run } */ +/* { dg-do run { target riscv_zbkc } } */ /* { dg-options "-w -fdump-tree-crc -fdump-rtl-dfinish " } */ -/* { dg-additional-options "-march=rv64gc_zbkc" { target { rv64 } } } */ -/* { dg-additional-options "-march=rv32gc_zbkc" { target { rv32 } } } */ /* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-Og" } } */ #include "../../gcc.dg/torture/crc-CCIT-data8.c" diff --git a/gcc/testsuite/gcc.target/riscv/crc-coremark-16bitdata-zbc.c b/gcc/testsuite/gcc.target/riscv/crc-coremark-16bitdata-zbc.c index 20d1ad42813..307456da0ba 100644 --- a/gcc/testsuite/gcc.target/riscv/crc-coremark-16bitdata-zbc.c +++ b/gcc/testsuite/gcc.target/riscv/crc-coremark-16bitdata-zbc.c @@ -1,7 +1,5 @@ -/* { dg-do run } */ +/* { dg-do run { target riscv_zbc } } */ /* { dg-options "-w -fdump-tree-crc -fdump-rtl-dfinish " } */ -/* { dg-additional-options "-march=rv64gc_zbc" { target { rv64 } } } */ -/* { dg-additional-options "-march=rv32gc_zbc" { target { rv32 } } } */ /* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-Og" } } */ #include "../../gcc.dg/torture/crc-coremark16-data16.c" diff --git a/gcc/testsuite/gcc.target/riscv/crc-coremark-16bitdata-zbkc.c b/gcc/testsuite/gcc.target/riscv/crc-coremark-16bitdata-zbkc.c index 4da3e8b2543..b31411e20ff 100644 --- a/gcc/testsuite/gcc.target/riscv/crc-coremark-16bitdata-zbkc.c +++ b/gcc/testsuite/gcc.target/riscv/crc-coremark-16bitdata-zbkc.c @@ -1,7 +1,5 @@ -/* { dg-do run } */ +/* { dg-do run { target riscv_zbkc } } */ /* { dg-options "-w -fdump-tree-crc -fdump-rtl-dfinish " } */ -/* { dg-additional-options "-march=rv64gc_zbkc" { target { rv64 } } } */ -/* { dg-additional-options "-march=rv32gc_zbkc" { target { rv32 } } } */ /* { dg-skip-if "" { *-*-* } { "-O0" "-O1" "-Og" } } */ #include "../../gcc.dg/torture/crc-coremark16-data16.c" diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp index cb9971d5398..e9cba88d544 100644 --- a/gcc/testsuite/lib/target-supports.exp +++ b/gcc/testsuite/lib/target-supports.exp @@ -2050,6 +2050,39 @@ proc check_effective_target_riscv_zvbb { } { }] } +# Return 1 if the target arch supports the Zbc extension, 0 otherwise. +# Cache the result. + +proc check_effective_target_riscv_zbc { } { + return [check_no_compiler_messages riscv_ext_zbc assembly { + #ifndef __riscv_zbc + #error "Not __riscv_zbc" + #endif + }] +} + +# Return 1 if the target arch supports the Zbkb extension, 0 otherwise. +# Cache the result. + +proc check_effective_target_riscv_zbkb { } { + return [check_no_compiler_messages riscv_ext_zbkb assembly { + #ifndef __riscv_zbkb + #error "Not __riscv_zbkb" + #endif + }] +} + +# Return 1 if the target arch supports the Zbkc extension, 0 otherwise. +# Cache the result. + +proc check_effective_target_riscv_zbkc { } { + return [check_no_compiler_messages riscv_ext_zbkc assembly { + #ifndef __riscv_zbkc + #error "Not __riscv_zbkc" + #endif + }] +} + # Return 1 if the target arch supports the XTheadVector extension, 0 otherwise. # Cache the result. @@ -2138,6 +2171,77 @@ proc check_effective_target_riscv_zvfh_ok { } { return 0 } +# Return 1 if we can execute code when using dg-add-options riscv_zbc + +proc check_effective_target_riscv_zbc_ok { } { + # If the target already supports zbc without any added options, + # we may assume we can execute just fine. + if { [check_effective_target_riscv_zbc] } { + return 1 + } + + # check if we can execute zbc insns with the given hardware or + # simulator + set gcc_march [riscv_get_arch] + if { [check_runtime ${gcc_march}_zbc_exec { + int main() + { + asm ("clmul a0,a0,a1"); + asm ("clmulh a0,a0,a1"); + return 0; + } } "-march=${gcc_march}"] } { + return 1 + } + return 0 +} + +# Return 1 if we can execute code when using dg-add-options riscv_zbkb + +proc check_effective_target_riscv_zbkb_ok { } { + # If the target already supports zbkb without any added options, + # we may assume we can execute just fine. + if { [check_effective_target_riscv_zbkb] } { + return 1 + } + + # check if we can execute zbkb insns with the given hardware or + # simulator + set gcc_march [riscv_get_arch] + if { [check_runtime ${gcc_march}_zbkb_exec { + int main() + { + asm ("brev8 a0,a0"); + return 0; + } } "-march=${gcc_march}"] } { + return 1 + } + return 0 +} + +# Return 1 if we can execute code when using dg-add-options riscv_zbkc + +proc check_effective_target_riscv_zbkc_ok { } { + # If the target already supports zbkc without any added options, + # we may assume we can execute just fine. + if { [check_effective_target_riscv_zbkc] } { + return 1 + } + + # check if we can execute zbkc insns with the given hardware or + # simulator + set gcc_march [riscv_get_arch] + if { [check_runtime ${gcc_march}_zbkc_exec { + int main() + { + asm ("clmul a0,a0,a1"); + asm ("clmulh a0,a0,a1"); + return 0; + } } "-march=${gcc_march}"] } { + return 1 + } + return 0 +} + # Return 1 if we can execute code when using dg-add-options riscv_zvbb proc check_effective_target_riscv_zvbb_ok { } { @@ -2188,7 +2292,7 @@ proc check_effective_target_riscv_v_misalign_ok { } { proc riscv_get_arch { } { set gcc_march "" # ??? do we neeed to add more extensions to the list below? - foreach ext { i m a f d q c b v zicsr zifencei zfh zba zbb zbc zbs zvbb zvfh ztso zaamo zalrsc zabha zacas } { + foreach ext { i m a f d q c b v zicsr zifencei zfh zba zbb zbc zbkb zbkc zbs zvbb zvfh ztso zaamo zalrsc zabha zacas } { if { [check_no_compiler_messages riscv_ext_$ext assembly [string map [list DEF __riscv_$ext] { #ifndef DEF #error "Not DEF"