diff --git a/gcc/config/bpf/bpf.md b/gcc/config/bpf/bpf.md index 2ffc4ebd17e..66436397bb7 100644 --- a/gcc/config/bpf/bpf.md +++ b/gcc/config/bpf/bpf.md @@ -131,7 +131,7 @@ (plus:AM (match_operand:AM 1 "register_operand" " 0,0") (match_operand:AM 2 "reg_or_imm_operand" " r,I")))] "1" - "{add\t%0,%2|%w0 += %w1}" + "{add\t%0,%2|%w0 += %w2}" [(set_attr "type" "")]) ;;; Subtraction @@ -144,7 +144,7 @@ (minus:AM (match_operand:AM 1 "register_operand" " 0") (match_operand:AM 2 "register_operand" " r")))] "" - "{sub\t%0,%2|%w0 -= %w1}" + "{sub\t%0,%2|%w0 -= %w2}" [(set_attr "type" "")]) ;;; Negation diff --git a/gcc/testsuite/gcc.target/bpf/alu-2.c b/gcc/testsuite/gcc.target/bpf/alu-2.c new file mode 100644 index 00000000000..0444a9bc68a --- /dev/null +++ b/gcc/testsuite/gcc.target/bpf/alu-2.c @@ -0,0 +1,12 @@ +/* Check add and sub instructions. */ +/* { dg-do compile } */ +/* { dg-options "" } */ + +long foo (long x, long y) +{ + return y - x + 4; +} + +/* { dg-final { scan-assembler-not {sub\t(%r.),\1\n} } } */ +/* { dg-final { scan-assembler {sub\t(\%r.),(\%r.)\n} } } */ +/* { dg-final { scan-assembler {add\t(\%r.),4\n} } } */ diff --git a/gcc/testsuite/gcc.target/bpf/alu-pseudoc-2.c b/gcc/testsuite/gcc.target/bpf/alu-pseudoc-2.c new file mode 100644 index 00000000000..751db2477c0 --- /dev/null +++ b/gcc/testsuite/gcc.target/bpf/alu-pseudoc-2.c @@ -0,0 +1,13 @@ +/* Check add and sub instructions (pseudoc asm dialect). */ +/* { dg-do compile } */ +/* { dg-options "-masm=pseudoc" } */ + +long foo (long x, long y) +{ + return y - x + 4; +} + +/* { dg-final { scan-assembler-not {\t(r.) -= \1\n} } } */ +/* { dg-final { scan-assembler {\t(r.) -= (r.)\n} } } */ +/* { dg-final { scan-assembler {\t(r.) \+= 4\n} } } */ +