diff options
author | Jose E. Marchesi <jose.marchesi@oracle.com> | 2023-07-26 12:07:30 +0200 |
---|---|---|
committer | Jose E. Marchesi <jose.marchesi@oracle.com> | 2023-07-26 12:09:41 +0200 |
commit | 590a8287bf2e7c6b179cfa9a39b4b9a7ae5624a5 (patch) | |
tree | a193a5576617952ed4f16a51f9ad039b3944af7f | |
parent | 819f3d3692cbfe69ed7861da6ef47805914bb0b8 (diff) | |
download | gcc-590a8287bf2e7c6b179cfa9a39b4b9a7ae5624a5.zip gcc-590a8287bf2e7c6b179cfa9a39b4b9a7ae5624a5.tar.gz gcc-590a8287bf2e7c6b179cfa9a39b4b9a7ae5624a5.tar.bz2 |
bpf: fix generation of neg and neg32 BPF instructions
This patch fixes GCC to generate correct neg and neg32 instructions,
which do not take a source register operand. A couple of new tests
are added.
Tested in bpf-unknown-none.
gcc/ChangeLog
2023-07-26 Jose E. Marchesi <jose.marchesi@oracle.com>
* config/bpf/bpf.md: Fix neg{SI,DI}2 insn.
gcc/testsuite/ChangeLog
2023-07-26 Jose E. Marchesi <jose.marchesi@oracle.com>
* gcc.target/bpf/neg-1.c: New test.
* gcc.target/bpf/neg-pseudoc-1.c: Likewise.
-rw-r--r-- | gcc/config/bpf/bpf.md | 4 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/bpf/neg-1.c | 14 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/bpf/neg-pseudoc-1.c | 14 |
3 files changed, 30 insertions, 2 deletions
diff --git a/gcc/config/bpf/bpf.md b/gcc/config/bpf/bpf.md index 579a821..1b5e190 100644 --- a/gcc/config/bpf/bpf.md +++ b/gcc/config/bpf/bpf.md @@ -142,9 +142,9 @@ ;;; Negation (define_insn "neg<AM:mode>2" [(set (match_operand:AM 0 "register_operand" "=r,r") - (neg:AM (match_operand:AM 1 "reg_or_imm_operand" " r,I")))] + (neg:AM (match_operand:AM 1 "reg_or_imm_operand" " 0,I")))] "" - "{neg<msuffix>\t%0,%1|%w0 = -%w1}" + "{neg<msuffix>\t%0|%w0 = -%w1}" [(set_attr "type" "<mtype>")]) ;;; Multiplication diff --git a/gcc/testsuite/gcc.target/bpf/neg-1.c b/gcc/testsuite/gcc.target/bpf/neg-1.c new file mode 100644 index 0000000..9ffb956 --- /dev/null +++ b/gcc/testsuite/gcc.target/bpf/neg-1.c @@ -0,0 +1,14 @@ +/* Check negr and negr32 instructions. */ + +/* { dg-do compile } */ +/* { dg-options "-malu32" } */ + +long foo (long a, long b, int x, int y) +{ + a = -b; + x = -y; + return a + x; +} + +/* { dg-final { scan-assembler "neg\t%r.\n" } } */ +/* { dg-final { scan-assembler "neg32\t%r.\n" } } */ diff --git a/gcc/testsuite/gcc.target/bpf/neg-pseudoc-1.c b/gcc/testsuite/gcc.target/bpf/neg-pseudoc-1.c new file mode 100644 index 0000000..a4fb687 --- /dev/null +++ b/gcc/testsuite/gcc.target/bpf/neg-pseudoc-1.c @@ -0,0 +1,14 @@ +/* Check negr and negr32 instructions (pseudoc asm dialect.) */ + +/* { dg-do compile } */ +/* { dg-options "-malu32 -masm=pseudoc" } */ + +long foo (long a, long b, int x, int y) +{ + a = -b; + x = -y; + return a + x; +} + +/* { dg-final { scan-assembler {\t(r.) = -\1\n} } } */ +/* { dg-final { scan-assembler {\t(w.) = -\1\n} } } */ |