Message ID | 20190823071302.12692-1-kito.cheng@sifive.com |
---|---|
State | New |
Headers | show |
Series | RISC-V: Add testcase for testing li pseudo instruction | expand |
On Fri, Aug 23, 2019 at 12:13 AM Kito Cheng <kito.cheng@sifive.com> wrote: > gcc/testsuite/ChangeLog: > gcc.target/riscv/li.c: New test. Thanks. This looks good. This is incidentally a test for a new binutils patch that improves the li macro to emit compressed instructions when possible. We need an execution test to verify it is right, and we can't easily put that in binutils, so it is going here. Jim
Committed as r274920 On Sat, Aug 24, 2019 at 6:08 AM Jim Wilson <jimw@sifive.com> wrote: > > On Fri, Aug 23, 2019 at 12:13 AM Kito Cheng <kito.cheng@sifive.com> wrote: > > gcc/testsuite/ChangeLog: > > gcc.target/riscv/li.c: New test. > > Thanks. This looks good. > > This is incidentally a test for a new binutils patch that improves the > li macro to emit compressed instructions when possible. We need an > execution test to verify it is right, and we can't easily put that in > binutils, so it is going here. > > Jim
diff --git a/gcc/testsuite/gcc.target/riscv/li.c b/gcc/testsuite/gcc.target/riscv/li.c new file mode 100644 index 00000000000..fa5c02caee8 --- /dev/null +++ b/gcc/testsuite/gcc.target/riscv/li.c @@ -0,0 +1,36 @@ +/* { dg-do run } */ +/* { dg-options "-O1" } */ +#include <stdlib.h> +#define LOAD_IMM(var, val) \ + asm ("li %0, %1\n": "=r"(var): "i" (val)) + +#define CHECK_LI(type, val) \ + { \ + type var; \ + LOAD_IMM(var, val); \ + if (var != val) \ + abort(); \ + } + +#define CHECK_LI32(val) CHECK_LI(int, val) +#define CHECK_LI64(val) CHECK_LI(long long, val) + +int main() +{ + CHECK_LI32(0x8001); + CHECK_LI32(0x1f01); + CHECK_LI32(0x12345001); + CHECK_LI32(0xf2345001); +#if __riscv_xlen == 64 + CHECK_LI64(0x8001ll); + CHECK_LI64(0x1f01ll); + CHECK_LI64(0x12345001ll); + CHECK_LI64(0xf2345001ll); + CHECK_LI64(0xf12345001ll); + CHECK_LI64(0xff00ff00ff001f01ll); + CHECK_LI64(0x7ffffffff2345001ll); + CHECK_LI64(0x7f0f243ff2345001ll); + CHECK_LI64(0x1234567887654321ll); +#endif + return 0; +}