aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFangrui Song <maskray@gcc.gnu.org>2024-01-30 20:41:12 -0800
committerFangrui Song <maskray@gcc.gnu.org>2024-02-21 17:20:33 -0800
commit9ca4c1bf082a4691482ca9f4814fea68f04e2cb3 (patch)
treef8d9d16e3e47513753249df4886d8af318d85841
parent98004ca00e4bf7a513cf3de65d3c3d9ad373872e (diff)
downloadgcc-9ca4c1bf082a4691482ca9f4814fea68f04e2cb3.zip
gcc-9ca4c1bf082a4691482ca9f4814fea68f04e2cb3.tar.gz
gcc-9ca4c1bf082a4691482ca9f4814fea68f04e2cb3.tar.bz2
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.
-rw-r--r--gcc/testsuite/gcc.target/riscv/asm-raw-symbol.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.target/riscv/asm-raw-symbol.c b/gcc/testsuite/gcc.target/riscv/asm-raw-symbol.c
new file mode 100644
index 0000000..28305a8
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/asm-raw-symbol.c
@@ -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" } } */