Message ID | 20240214063651.3012733-1-maskray@google.com |
---|---|
State | New |
Headers | show |
Series | RISC-V: Add tests for constraints "i" and "s" | expand |
On Tue, Feb 13, 2024 at 10:36 PM Fangrui Song <maskray@google.com> wrote: > > 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. > --- > gcc/doc/md.texi | 2 +- > gcc/testsuite/gcc.target/riscv/asm-raw-symbol.c | 14 ++++++++++++++ > 2 files changed, 15 insertions(+), 1 deletion(-) > create mode 100644 gcc/testsuite/gcc.target/riscv/asm-raw-symbol.c > > diff --git a/gcc/doc/md.texi b/gcc/doc/md.texi > index b0c61925120..c75e5bf259d 100644 > --- a/gcc/doc/md.texi > +++ b/gcc/doc/md.texi > @@ -1947,7 +1947,7 @@ Integer constant that is valid as an immediate operand in a 64-bit @code{MOV} > pseudo instruction > > @item S > -An absolute symbolic address or a label reference > +A symbolic reference or label reference. > > @item Y > Floating point constant zero > 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 00000000000..28305a8b1f0 > --- /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" } } */ > -- > 2.43.0.687.g38aa6559b0-goog > Ping:)
LGTM, but I am OoO today, will commit that once I have laptop :p Fangrui Song <maskray@google.com> 於 2024年2月22日 週四 05:54 寫道: > On Tue, Feb 13, 2024 at 10:36 PM Fangrui Song <maskray@google.com> wrote: > > > > 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. > > --- > > gcc/doc/md.texi | 2 +- > > gcc/testsuite/gcc.target/riscv/asm-raw-symbol.c | 14 ++++++++++++++ > > 2 files changed, 15 insertions(+), 1 deletion(-) > > create mode 100644 gcc/testsuite/gcc.target/riscv/asm-raw-symbol.c > > > > diff --git a/gcc/doc/md.texi b/gcc/doc/md.texi > > index b0c61925120..c75e5bf259d 100644 > > --- a/gcc/doc/md.texi > > +++ b/gcc/doc/md.texi > > @@ -1947,7 +1947,7 @@ Integer constant that is valid as an immediate > operand in a 64-bit @code{MOV} > > pseudo instruction > > > > @item S > > -An absolute symbolic address or a label reference > > +A symbolic reference or label reference. > > > > @item Y > > Floating point constant zero > > 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 00000000000..28305a8b1f0 > > --- /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" } } */ > > -- > > 2.43.0.687.g38aa6559b0-goog > > > > Ping:) > > > -- > 宋方睿 >
On Wed, Feb 21, 2024 at 4:07 PM Kito Cheng <kito.cheng@gmail.com> wrote: > > LGTM, but I am OoO today, will commit that once I have laptop :p Thanks! Dropped the gcc/doc/md.texi change and pushed as commit 9ca4c1bf082a4691482ca9f4814fea68f04e2cb3 (I have write-after-approval now:) ) > Fangrui Song <maskray@google.com> 於 2024年2月22日 週四 05:54 寫道: >> >> On Tue, Feb 13, 2024 at 10:36 PM Fangrui Song <maskray@google.com> wrote: >> > >> > 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. >> > --- >> > gcc/doc/md.texi | 2 +- >> > gcc/testsuite/gcc.target/riscv/asm-raw-symbol.c | 14 ++++++++++++++ >> > 2 files changed, 15 insertions(+), 1 deletion(-) >> > create mode 100644 gcc/testsuite/gcc.target/riscv/asm-raw-symbol.c >> > >> > diff --git a/gcc/doc/md.texi b/gcc/doc/md.texi >> > index b0c61925120..c75e5bf259d 100644 >> > --- a/gcc/doc/md.texi >> > +++ b/gcc/doc/md.texi >> > @@ -1947,7 +1947,7 @@ Integer constant that is valid as an immediate operand in a 64-bit @code{MOV} >> > pseudo instruction >> > >> > @item S >> > -An absolute symbolic address or a label reference >> > +A symbolic reference or label reference. >> > >> > @item Y >> > Floating point constant zero >> > 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 00000000000..28305a8b1f0 >> > --- /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" } } */ >> > -- >> > 2.43.0.687.g38aa6559b0-goog >> > >> >> Ping:) >> >> >> -- >> 宋方睿
diff --git a/gcc/doc/md.texi b/gcc/doc/md.texi index b0c61925120..c75e5bf259d 100644 --- a/gcc/doc/md.texi +++ b/gcc/doc/md.texi @@ -1947,7 +1947,7 @@ Integer constant that is valid as an immediate operand in a 64-bit @code{MOV} pseudo instruction @item S -An absolute symbolic address or a label reference +A symbolic reference or label reference. @item Y Floating point constant zero 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 00000000000..28305a8b1f0 --- /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" } } */