RISC-V: Add tests for constraints "i" and "s"

The constraints "i" and "s" can be used with a symbol that binds
externally, e.g.
```
namespace ns { extern int var, a[4]; }
void foo() {
  asm(".pushsection .xxx,\"aw\"; .dc.a %0; .popsection" :: "s"(&ns::var));
  asm(".reloc ., BFD_RELOC_NONE, %0" :: "s"(&ns::a[3]));
}
```

gcc/testsuite/ChangeLog:

	* gcc.target/riscv/asm-raw-symbol.c: New test.
This commit is contained in:
Fangrui Song 2024-01-30 20:41:12 -08:00
parent 98004ca00e
commit 9ca4c1bf08

View file

@ -0,0 +1,14 @@
/* { dg-do compile } */
/* { dg-options "-fpic" } */
extern int var, arr[2][2];
void
test (void)
{
__asm__ ("@ %0" : : "i"(&var));
__asm__ ("@ %0 %1 %2" : : "s"(&var), "s"(&arr[1][1]), "s"(test));
}
/* { dg-final { scan-assembler "@ var arr\\+12 test" } } */
/* { dg-final { scan-assembler "@ var" } } */