diff --git a/gcc/config/bpf/bpf.md b/gcc/config/bpf/bpf.md index 579a8213b09..1b5e1900d4f 100644 --- a/gcc/config/bpf/bpf.md +++ b/gcc/config/bpf/bpf.md @@ -142,9 +142,9 @@ ;;; Negation (define_insn "neg2" [(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\t%0,%1|%w0 = -%w1}" + "{neg\t%0|%w0 = -%w1}" [(set_attr "type" "")]) ;;; 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 00000000000..9ffb956859d --- /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 00000000000..a4fb687f04a --- /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} } } */