public inbox for binutils-cvs@sourceware.org
 help / color / mirror / Atom feed
* [binutils-gdb] gas: BPF pseudo-c syntax tests
@ 2023-04-26 17:30 Jose E. Marchesi
  0 siblings, 0 replies; only message in thread
From: Jose E. Marchesi @ 2023-04-26 17:30 UTC (permalink / raw)
  To: bfd-cvs

https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=bba4624d035002ad90970ac06a9976c006872258

commit bba4624d035002ad90970ac06a9976c006872258
Author: Guillermo E. Martinez <guillermo.e.martinez@oracle.com>
Date:   Thu Apr 20 16:43:03 2023 +0200

    gas: BPF pseudo-c syntax tests
    
    This patch expands the GAS BPF testsuite in order to also test the
    alternative pseudo-C syntax used in BPF assembly.
    
    This includes three main changes:
    
    - Some general GAS tests involving assignment and equality operands in
      expressions (such as = and ==) are disabled in bpf-* targets,
      because the syntax collides with the pseudo-C BPF assembly syntax.
    
    - New tests are added to the BPF GAS testsuite that test the pseudo-c
    syntax.  Tests for all BPF instructions are included.
    
    - New tests are added to the BPF GAS testsuite that test the support
      for both syntaxes in the same source.
    
    gas/ChangeLog:
    
    2023-04-20  Guillermo E. Martinez  <guillermo.e.martinez@oracle.com>
    
            PR gas/29728
            * testsuite/gas/all/assign-bad-recursive.d: Skip test in bpf-*
            targets.
            * testsuite/gas/all/eqv-dot.d: Likewise.
            * testsuite/gas/all/gas.exp: Skip other assignment tests in bpf-*.
            * testsuite/gas/bpf/alu-pseudoc.s: New file.
            * testsuite/gas/bpf/pseudoc-normal.s: Likewise.
            * testsuite/gas/bpf/pseudoc-normal.d: Likewise.
            * testsuite/gas/bpf/pseudoc-normal-be.d: Likewise.
            * testsuite/gas/bpf/mem-pseudoc.s: Likewise.
            * testsuite/gas/bpf/lddw-pseudoc.s: Likewise.
            * testsuite/gas/bpf/jump32-pseudoc.s: Likewise.
            * testsuite/gas/bpf/jump-pseudoc.s: Likewise.
            * testsuite/gas/bpf/indcall-1-pseudoc.s: Likewise.
            * testsuite/gas/bpf/atomic-pseudoc.s: Likewise.
            * testsuite/gas/bpf/alu32-pseudoc.s: Likewise.
            * testsuite/gas/bpf/*.d: Add -pseudoc variants of the tests.

Diff:
---
 gas/ChangeLog                                |  20 +++
 gas/testsuite/gas/all/assign-bad-recursive.d |   1 +
 gas/testsuite/gas/all/eqv-dot.d              |   2 +-
 gas/testsuite/gas/all/gas.exp                |   5 +-
 gas/testsuite/gas/bpf/alu-be.d               |   1 +
 gas/testsuite/gas/bpf/alu-pseudoc.s          |  51 +++++++
 gas/testsuite/gas/bpf/alu32-be.d             |   1 +
 gas/testsuite/gas/bpf/alu32-pseudoc.s        |  57 +++++++
 gas/testsuite/gas/bpf/alu32.d                |   2 +
 gas/testsuite/gas/bpf/atomic-be.d            |   1 +
 gas/testsuite/gas/bpf/atomic-pseudoc.s       |   4 +
 gas/testsuite/gas/bpf/atomic.d               |   2 +
 gas/testsuite/gas/bpf/bpf.exp                |   2 +
 gas/testsuite/gas/bpf/indcall-1-pseudoc.s    |  13 ++
 gas/testsuite/gas/bpf/indcall-1.d            |   2 +
 gas/testsuite/gas/bpf/indcall-bad-1.l        |   2 +
 gas/testsuite/gas/bpf/jump-be.d              |   1 +
 gas/testsuite/gas/bpf/jump-pseudoc.s         |  25 ++++
 gas/testsuite/gas/bpf/jump.d                 |   4 +-
 gas/testsuite/gas/bpf/jump32-pseudoc.s       |  25 ++++
 gas/testsuite/gas/bpf/jump32.d               |   2 +
 gas/testsuite/gas/bpf/lddw-be.d              |   1 +
 gas/testsuite/gas/bpf/lddw-pseudoc.s         |   6 +
 gas/testsuite/gas/bpf/lddw.d                 |   2 +
 gas/testsuite/gas/bpf/mem-be.d               |   3 +-
 gas/testsuite/gas/bpf/mem-pseudoc.s          |  23 +++
 gas/testsuite/gas/bpf/mem.d                  |   2 +
 gas/testsuite/gas/bpf/pseudoc-normal-be.d    | 214 +++++++++++++++++++++++++++
 gas/testsuite/gas/bpf/pseudoc-normal.d       | 214 +++++++++++++++++++++++++++
 gas/testsuite/gas/bpf/pseudoc-normal.s       | 196 ++++++++++++++++++++++++
 gas/testsuite/gas/macros/macros.exp          |   1 +
 31 files changed, 880 insertions(+), 5 deletions(-)

diff --git a/gas/ChangeLog b/gas/ChangeLog
index e1cfcec4abf..88a9d2eff95 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,3 +1,23 @@
+2023-04-20  Guillermo E. Martinez  <guillermo.e.martinez@oracle.com>
+
+	PR gas/29728
+	* testsuite/gas/all/assign-bad-recursive.d: Skip test in bpf-*
+	targets.
+	* testsuite/gas/all/eqv-dot.d: Likewise.
+	* testsuite/gas/all/gas.exp: Skip other assignment tests in bpf-*.
+	* testsuite/gas/bpf/alu-pseudoc.s: New file.
+	* testsuite/gas/bpf/pseudoc-normal.s: Likewise.
+	* testsuite/gas/bpf/pseudoc-normal.d: Likewise.
+	* testsuite/gas/bpf/pseudoc-normal-be.d: Likewise.
+	* testsuite/gas/bpf/mem-pseudoc.s: Likewise.
+	* testsuite/gas/bpf/lddw-pseudoc.s: Likewise.
+	* testsuite/gas/bpf/jump32-pseudoc.s: Likewise.
+	* testsuite/gas/bpf/jump-pseudoc.s: Likewise.
+	* testsuite/gas/bpf/indcall-1-pseudoc.s: Likewise.
+	* testsuite/gas/bpf/atomic-pseudoc.s: Likewise.
+	* testsuite/gas/bpf/alu32-pseudoc.s: Likewise.
+	* testsuite/gas/bpf/*.d: Add -pseudoc variants of the tests.
+
 2023-04-20  Guillermo E. Martinez  <guillermo.e.martinez@oracle.com>
 
 	PR gas/29728
diff --git a/gas/testsuite/gas/all/assign-bad-recursive.d b/gas/testsuite/gas/all/assign-bad-recursive.d
index aeec5d55f8a..678be3e7c9f 100644
--- a/gas/testsuite/gas/all/assign-bad-recursive.d
+++ b/gas/testsuite/gas/all/assign-bad-recursive.d
@@ -1,4 +1,5 @@
 #name: bad recursive assignments
 #source: assign-bad-recursive.s
 #xfail: bfin-*-*
+#notarget: *bpf-*-*
 #error_output: assign-bad-recursive.l
diff --git a/gas/testsuite/gas/all/eqv-dot.d b/gas/testsuite/gas/all/eqv-dot.d
index fc40b09f217..d97db14995e 100644
--- a/gas/testsuite/gas/all/eqv-dot.d
+++ b/gas/testsuite/gas/all/eqv-dot.d
@@ -2,7 +2,7 @@
 #name: eqv involving dot
 # bfin doesn't support 'symbol = expression'
 # tic30 and tic4x have 4 octets per byte, tic54x has 2 octets per byte
-#notarget: bfin-*-* *c30-*-* *c4x-*-* *c54x-*-*
+#notarget: bfin-*-* *c30-*-* *c4x-*-* *c54x-*-* *bpf-*-*
 # linkrelax targets don't handle equivalence expressions well (nor any
 # other forward expression).  mep uses complex relocs
 #xfail: am33_2.0-*-* crx-*-* h8300-*-* mn10200-*-* mn10300-*-* mep-*-*
diff --git a/gas/testsuite/gas/all/gas.exp b/gas/testsuite/gas/all/gas.exp
index 734634f78d3..53d825310e2 100644
--- a/gas/testsuite/gas/all/gas.exp
+++ b/gas/testsuite/gas/all/gas.exp
@@ -105,7 +105,7 @@ if { [istarget "pdp11-*-*"] } then {
     run_dump_test eqv-dot
 }
 
-if { ![istarget "bfin-*-*"] } then {
+if { ![istarget "bfin-*-*"] && ![istarget "bpf-*-*"]  } then {
     gas_test "assign-ok.s" "" "" "== assignment support"
 }
 gas_test_error "assign-bad.s" "" "== assignment for symbol already set"
@@ -403,7 +403,8 @@ if {  ([istarget "i*86-*-*pe*"] && ![istarget "i*86-*-openbsd*"]) \
   gas_test "fastcall.s" ""   "" "fastcall labels"
 }
 
-if { ![istarget "bfin-*-*"] && ![istarget "nds32*-*-*"] } then {
+if { ![istarget "bfin-*-*"] && ![istarget "nds32*-*-*"] \
+    && ![istarget "bpf-*-*"] } then {
     run_dump_test assign
 }
 run_dump_test sleb128
diff --git a/gas/testsuite/gas/bpf/alu-be.d b/gas/testsuite/gas/bpf/alu-be.d
index c4ddbad7d18..d42d33bc3cb 100644
--- a/gas/testsuite/gas/bpf/alu-be.d
+++ b/gas/testsuite/gas/bpf/alu-be.d
@@ -1,5 +1,6 @@
 #as: --EB
 #source: alu.s
+#source: alu-pseudoc.s
 #objdump: -dr
 #name: eBPF ALU64 instructions, big endian
 
diff --git a/gas/testsuite/gas/bpf/alu-pseudoc.s b/gas/testsuite/gas/bpf/alu-pseudoc.s
new file mode 100644
index 00000000000..0f79929ea0d
--- /dev/null
+++ b/gas/testsuite/gas/bpf/alu-pseudoc.s
@@ -0,0 +1,51 @@
+# Tests for the ALU64 eBPF pseudo-C instructions
+        .text
+	r2 += 666
+	r3 += -666
+	r4 += 2125315823
+	r5 += r6
+	r2 -= 666
+	r3 -= -666
+	r4 -= 2125315823
+	r5 -= r6
+	r2 *= 666
+	r3 *= -666
+	r4 *= 2125315823
+	r5 *= r6
+	r2 /= 666
+	r3 /= -666
+	r4 /= 2125315823
+	r5 /= r6
+	r2 |= 666
+	r3 |= -666
+	r4 |= 2125315823
+	r5 |= r6
+	r2 &= 666
+	r3 &= -666
+	r4 &= 2125315823
+	r5 &= r6
+	r2 <<= 666
+	r3 <<= -666
+	r4 <<= 2125315823
+	r5 <<= r6
+	r2 >>= 666
+	r3 >>= -666
+	r4 >>= 2125315823
+	r5 >>= r6
+	r2 %= 0x29a
+	r3 %= -666
+	r4 %= 0x7eadbeef
+	r5 %= r6
+	r2 ^= 666
+	r3 ^= -666
+	r4 ^= 2125315823
+	r5 ^= r6
+	r2 = 666
+	r3 = -666
+	r4 = 2125315823
+	r5 = r6
+	r2 s>>= 666
+	r3 s>>= -666
+	r4 s>>= 2125315823
+	r5 s>>= r6
+	r2 = -r2
diff --git a/gas/testsuite/gas/bpf/alu32-be.d b/gas/testsuite/gas/bpf/alu32-be.d
index 2c753e2261d..2ad744dc84c 100644
--- a/gas/testsuite/gas/bpf/alu32-be.d
+++ b/gas/testsuite/gas/bpf/alu32-be.d
@@ -1,5 +1,6 @@
 #as: --EB
 #source: alu32.s
+#source: alu32-pseudoc.s
 #objdump: -dr
 #name: eBPF ALU instructions, big-endian
 
diff --git a/gas/testsuite/gas/bpf/alu32-pseudoc.s b/gas/testsuite/gas/bpf/alu32-pseudoc.s
new file mode 100644
index 00000000000..a29f6ea0336
--- /dev/null
+++ b/gas/testsuite/gas/bpf/alu32-pseudoc.s
@@ -0,0 +1,57 @@
+# Tests for the ALU eBPF pseudo-C instructions
+        .text
+	W2 += 666
+	W3 += -666
+	W4 += 2125315823
+	W5 += w6
+	W2 -= 666
+	W3 -= -666
+	W4 -= 2125315823
+	W5 -= w6
+	W2 *= 666
+	W3 *= -666
+	W4 *= 2125315823
+	w5 *= w6
+	w2 /= 666
+	w3 /= -666
+	w4 /= 2125315823
+	w5 /= w6
+	w2 |= 666
+	w3 |= -666
+	w4 |= 2125315823
+	w5 |= w6
+	w2 &= 666
+	w3 &= -666
+	w4 &= 2125315823
+	w5 &= w6
+	w2 <<= 666
+	w3 <<= -666
+	w4 <<= 2125315823
+	w5 <<= w6
+	w2 >>= 666
+	w3 >>= -666
+	w4 >>= 2125315823
+	w5 >>= w6
+	w2 %= 666
+	w3 %= -666
+	w4 %= 0x7eadbeef
+	w5 %= w6
+	w2 ^= 666
+	w3 ^= -666
+	w4 ^= 2125315823
+	w5 ^= w6
+	w2 = 666
+	w3 = -666
+	w4 = 2125315823
+	w5 = w6
+	w2 s>>= 666
+	w3 s>>= -666
+	w4 s>>= 2125315823
+	w5 s>>= w6
+	w2 = -w2
+	r9 = le16 r9
+	r8 = le32 r8
+	r7 = le64 r7
+	r6 = be16 r6
+	r5 = be32 r5
+	r4 = be64 r4
diff --git a/gas/testsuite/gas/bpf/alu32.d b/gas/testsuite/gas/bpf/alu32.d
index d2260fffeb6..ac5c8341e52 100644
--- a/gas/testsuite/gas/bpf/alu32.d
+++ b/gas/testsuite/gas/bpf/alu32.d
@@ -1,5 +1,7 @@
 #as: --EL
 #objdump: -dr
+#source: alu32.s
+#source: alu32-pseudoc.s
 #name: eBPF ALU instructions
 
 .*: +file format .*bpf.*
diff --git a/gas/testsuite/gas/bpf/atomic-be.d b/gas/testsuite/gas/bpf/atomic-be.d
index 04161e08aca..b252571e5fd 100644
--- a/gas/testsuite/gas/bpf/atomic-be.d
+++ b/gas/testsuite/gas/bpf/atomic-be.d
@@ -1,5 +1,6 @@
 #as: --EB
 #source: atomic.s
+#source: atomic-pseudoc.s
 #objdump: -dr
 #name: eBPF atomic instructions, big endian
 
diff --git a/gas/testsuite/gas/bpf/atomic-pseudoc.s b/gas/testsuite/gas/bpf/atomic-pseudoc.s
new file mode 100644
index 00000000000..1a4f218ccb7
--- /dev/null
+++ b/gas/testsuite/gas/bpf/atomic-pseudoc.s
@@ -0,0 +1,4 @@
+        # Test for eBPF ADDW and ADDDW pseudo-C instructions
+        .text
+	lock *(u64 *)(r1 + 7919) += r2
+	lock *(u32 *)(r1 + 7919) += r2
diff --git a/gas/testsuite/gas/bpf/atomic.d b/gas/testsuite/gas/bpf/atomic.d
index 1c83cb582ab..e22d54283de 100644
--- a/gas/testsuite/gas/bpf/atomic.d
+++ b/gas/testsuite/gas/bpf/atomic.d
@@ -1,5 +1,7 @@
 #as: --EL
 #objdump: -dr
+#source: atomic.s
+#source: atomic-pseudoc.s
 #name: eBPF atomic instructions
 
 .*: +file format .*bpf.*
diff --git a/gas/testsuite/gas/bpf/bpf.exp b/gas/testsuite/gas/bpf/bpf.exp
index b0c49a9e23a..1cdaf6dcc08 100644
--- a/gas/testsuite/gas/bpf/bpf.exp
+++ b/gas/testsuite/gas/bpf/bpf.exp
@@ -28,6 +28,7 @@ if {[istarget bpf*-*-*]} {
     run_dump_test exit
     run_dump_test atomic
     run_dump_test data
+    run_dump_test pseudoc-normal
 
     run_dump_test lddw-be
     run_dump_test alu-be
@@ -38,6 +39,7 @@ if {[istarget bpf*-*-*]} {
     run_dump_test exit-be
     run_dump_test atomic-be
     run_dump_test data-be
+    run_dump_test pseudoc-normal-be
 
     run_dump_test indcall-1
     run_list_test indcall-bad-1
diff --git a/gas/testsuite/gas/bpf/indcall-1-pseudoc.s b/gas/testsuite/gas/bpf/indcall-1-pseudoc.s
new file mode 100644
index 00000000000..ede3eac58ef
--- /dev/null
+++ b/gas/testsuite/gas/bpf/indcall-1-pseudoc.s
@@ -0,0 +1,13 @@
+
+    .text
+    .align 4
+main:
+	r0 = 1
+	r1 = 1
+	r2 = 2
+	r6 = 56 ll
+	callx r6
+	exit
+bar:
+	r0 = 0
+	exit
diff --git a/gas/testsuite/gas/bpf/indcall-1.d b/gas/testsuite/gas/bpf/indcall-1.d
index b26e8f8853f..158c75438d7 100644
--- a/gas/testsuite/gas/bpf/indcall-1.d
+++ b/gas/testsuite/gas/bpf/indcall-1.d
@@ -1,5 +1,7 @@
 #as: -mxbpf --EL
 #objdump: -mxbpf -dr
+#source: indcall-1.s
+#source: indcall-1-pseudoc.s
 #name: BPF indirect call 1
 
 .*: +file format .*bpf.*
diff --git a/gas/testsuite/gas/bpf/indcall-bad-1.l b/gas/testsuite/gas/bpf/indcall-bad-1.l
index 510ec6eabf2..8386736ee78 100644
--- a/gas/testsuite/gas/bpf/indcall-bad-1.l
+++ b/gas/testsuite/gas/bpf/indcall-bad-1.l
@@ -1,3 +1,5 @@
 .*: Assembler messages:
+.* Error: bad expression
 .* Error: illegal operand `call %r6'
+.* Error: unexpected token: '%r6'
 #pass
diff --git a/gas/testsuite/gas/bpf/jump-be.d b/gas/testsuite/gas/bpf/jump-be.d
index 65632e0813b..7e235e69551 100644
--- a/gas/testsuite/gas/bpf/jump-be.d
+++ b/gas/testsuite/gas/bpf/jump-be.d
@@ -1,5 +1,6 @@
 #as: --EB
 #source: jump.s
+#source: jump-pseudoc.s
 #objdump: -dr
 #name: eBPF JUMP instructions, big endian
 
diff --git a/gas/testsuite/gas/bpf/jump-pseudoc.s b/gas/testsuite/gas/bpf/jump-pseudoc.s
new file mode 100644
index 00000000000..1331bdad307
--- /dev/null
+++ b/gas/testsuite/gas/bpf/jump-pseudoc.s
@@ -0,0 +1,25 @@
+# Tests for the JUMP pseudo-C instructions
+        .text
+        goto 2f
+        r1 += r1
+1:      if r3 == 3 goto 2f
+        if r3 == r4 goto 2f
+2:      if r3 >= 3 goto 1b
+        if r3 >= r4 goto 1b
+1:      if r3 < 3 goto 1f
+        if r3 < r4 goto  1f
+1:      if r3 <= 3 goto 1f
+        if r3 <= r4 goto 1f
+1:      if r3 & 3 goto 1f
+        if r3 & r4 goto 1f
+1:      if r3 != 3 goto 1f
+        if r3 != r4 goto 1f
+1:      if r3 s> 3 goto 1f
+        if r3 s> r4 goto 1f
+1:      if r3 s>= 3 goto 1f
+        if r3 s>= r4 goto 1f
+1:      if r3 s< 3 goto 1f
+        if r3 s< r4 goto 1f
+1:      if r3 s<= 3 goto 1f
+        if r3 s<= r4 goto 1f
+1:
diff --git a/gas/testsuite/gas/bpf/jump.d b/gas/testsuite/gas/bpf/jump.d
index ca600f602ba..903f70e8043 100644
--- a/gas/testsuite/gas/bpf/jump.d
+++ b/gas/testsuite/gas/bpf/jump.d
@@ -1,5 +1,7 @@
 #as: --EL
 #objdump: -dr
+#source: jump.s
+#source: jump-pseudoc.s
 #name: eBPF JUMP instructions
 
 .*: +file format .*bpf.*
@@ -28,4 +30,4 @@ Disassembly of section .text:
   90:	c5 03 01 00 03 00 00 00 	jslt %r3,3,1
   98:	cd 43 00 00 00 00 00 00 	jslt %r3,%r4,0
   a0:	d5 03 01 00 03 00 00 00 	jsle %r3,3,1
-  a8:	dd 43 00 00 00 00 00 00 	jsle %r3,%r4,0
\ No newline at end of file
+  a8:	dd 43 00 00 00 00 00 00 	jsle %r3,%r4,0
diff --git a/gas/testsuite/gas/bpf/jump32-pseudoc.s b/gas/testsuite/gas/bpf/jump32-pseudoc.s
new file mode 100644
index 00000000000..07311657ebe
--- /dev/null
+++ b/gas/testsuite/gas/bpf/jump32-pseudoc.s
@@ -0,0 +1,25 @@
+# Tests for the eBPF JUMP32 pseudo-C instructions
+        .text
+        goto 2f
+        r1 += r1
+1:      if w3 == 3 goto 2f
+        if w3 == w4 goto 2f
+2:      if w3 >= 3 goto 1b
+        if w3 >= w4 goto 1b
+1:      if w3 < 3 goto 1f
+        if w3 < w4 goto 1f
+1:      if w3 <= 3 goto 1f
+        if w3 <= w4 goto 1f
+1:      if w3 & 3 goto 1f
+        if w3 & w4 goto 1f
+1:      if w3 != 3 goto 1f
+        if w3 != w4 goto 1f
+1:      if w3 s> 3 goto 1f
+        if w3 s> w4 goto 1f
+1:      if w3 s>= 3 goto 1f
+        if w3 s>= w4 goto 1f
+1:      if w3 s< 3 goto 1f
+        if w3 s< w4 goto 1f
+1:      if w3 s<= 3 goto 1f
+        if w3 s<= w4 goto 1f
+1:
diff --git a/gas/testsuite/gas/bpf/jump32.d b/gas/testsuite/gas/bpf/jump32.d
index 4f5ae2c5aa3..ae8683dd69b 100644
--- a/gas/testsuite/gas/bpf/jump32.d
+++ b/gas/testsuite/gas/bpf/jump32.d
@@ -1,5 +1,7 @@
 #as: --EL
 #objdump: -dr
+#source: jump32.s
+#source: jump32-pseudoc.s
 #name: eBPF JUMP32 instructions
 
 .*: +file format .*bpf.*
diff --git a/gas/testsuite/gas/bpf/lddw-be.d b/gas/testsuite/gas/bpf/lddw-be.d
index dc69d3a64d5..b9e60457cde 100644
--- a/gas/testsuite/gas/bpf/lddw-be.d
+++ b/gas/testsuite/gas/bpf/lddw-be.d
@@ -1,5 +1,6 @@
 #as: --EB
 #source: lddw.s
+#source: lddw-pseudoc.s
 #objdump: -dr
 #name: eBPF LDDW, big-endian
 
diff --git a/gas/testsuite/gas/bpf/lddw-pseudoc.s b/gas/testsuite/gas/bpf/lddw-pseudoc.s
new file mode 100644
index 00000000000..9968c5d8e78
--- /dev/null
+++ b/gas/testsuite/gas/bpf/lddw-pseudoc.s
@@ -0,0 +1,6 @@
+# Tests for the LDDW pseudo-C instruction
+        .text
+        r3 = 1 ll
+        r4 = 0xdeadbeef ll
+        r5 = 0x1122334455667788 ll
+        r6 = -2 ll
diff --git a/gas/testsuite/gas/bpf/lddw.d b/gas/testsuite/gas/bpf/lddw.d
index f44e7724353..042e4dead30 100644
--- a/gas/testsuite/gas/bpf/lddw.d
+++ b/gas/testsuite/gas/bpf/lddw.d
@@ -1,5 +1,7 @@
 #as: --EL
 #objdump: -dr
+#source: lddw.s
+#source: lddw-pseudoc.s
 #name: eBPF LDDW
 
 .*: +file format .*bpf.*
diff --git a/gas/testsuite/gas/bpf/mem-be.d b/gas/testsuite/gas/bpf/mem-be.d
index b3dba80c2b6..148c55a3491 100644
--- a/gas/testsuite/gas/bpf/mem-be.d
+++ b/gas/testsuite/gas/bpf/mem-be.d
@@ -1,5 +1,6 @@
 #as: --EB
 #source: mem.s
+#source: mem-pseudoc.s
 #objdump: -dr
 #name: eBPF MEM instructions, modulus lddw, big endian
 
@@ -27,4 +28,4 @@ Disassembly of section .text:
   80:	72 10 7e ef 11 22 33 44 	stb \[%r1\+0x7eef\],0x11223344
   88:	6a 10 7e ef 11 22 33 44 	sth \[%r1\+0x7eef\],0x11223344
   90:	62 10 7e ef 11 22 33 44 	stw \[%r1\+0x7eef\],0x11223344
-  98:	7a 10 ff fe 11 22 33 44 	stdw \[%r1\+-2\],0x11223344
\ No newline at end of file
+  98:	7a 10 ff fe 11 22 33 44 	stdw \[%r1\+-2\],0x11223344
diff --git a/gas/testsuite/gas/bpf/mem-pseudoc.s b/gas/testsuite/gas/bpf/mem-pseudoc.s
new file mode 100644
index 00000000000..06c2cfcdde9
--- /dev/null
+++ b/gas/testsuite/gas/bpf/mem-pseudoc.s
@@ -0,0 +1,23 @@
+# eBPF tests for MEM pseudo-C instructions, modulus lddw.
+
+        .text
+	r0 = *(u32 *)skb[48879]
+	r0 = *(u16 *)skb[48879]
+	r0 = *(u8 *)skb[48879]
+	r0 = *(u64 *)skb[48879]
+	r0 = *(u32 *)skb[r3 + 0xbeef]
+	r0 = *(u16 *)skb[r5 + 0xbeef]
+	r0 = *(u8 *)skb[r7 + 0xbeef]
+	r0 = *(u64 *)skb[r9 + 0xbeef]
+	r2 = *(u32 *)(r1 + 32495)
+	r2 = *(u16 *)(r1 + 32495)
+	r2 = *(u8 *)(r1 + 32495)
+	r2 = *(u64 *)(r1 - 2)
+	*(u32 *)(r1 + 32495) = r2
+	*(u16 *)(r1 + 32495) = r2
+	*(u8 *)(r1 + 32495) = r2
+	*(u64 *)(r1 - 2) = r2
+	stb [%r1+0x7eef], 0x11223344
+	sth [%r1+0x7eef], 0x11223344
+	stw [%r1+0x7eef], 0x11223344
+	stdw [%r1+-2], 0x11223344
diff --git a/gas/testsuite/gas/bpf/mem.d b/gas/testsuite/gas/bpf/mem.d
index 0e0b498ea91..5f257317057 100644
--- a/gas/testsuite/gas/bpf/mem.d
+++ b/gas/testsuite/gas/bpf/mem.d
@@ -1,5 +1,7 @@
 #as: --EL
 #objdump: -dr
+#source: mem.s
+#source: mem-pseudoc.s
 #name: eBPF MEM instructions, modulus lddw
 
 .*: +file format .*bpf.*
diff --git a/gas/testsuite/gas/bpf/pseudoc-normal-be.d b/gas/testsuite/gas/bpf/pseudoc-normal-be.d
new file mode 100644
index 00000000000..7a577edbe4c
--- /dev/null
+++ b/gas/testsuite/gas/bpf/pseudoc-normal-be.d
@@ -0,0 +1,214 @@
+#as: --EB
+#objdump: -dr
+#source: pseudoc-normal.s
+#name: eBPF clang (pseudo-C)/gas (normal) instructions
+
+.*: +file format .*bpf.*
+
+Disassembly of section .text:
+
+0+ <beg>:
+   0:	07 10 00 00 00 00 00 aa 	add %r1,0xaa
+   8:	07 10 00 00 00 00 00 aa 	add %r1,0xaa
+  10:	0f 12 00 00 00 00 00 00 	add %r1,%r2
+  18:	0f 12 00 00 00 00 00 00 	add %r1,%r2
+  20:	17 10 00 00 00 00 00 aa 	sub %r1,0xaa
+  28:	17 10 00 00 00 00 00 aa 	sub %r1,0xaa
+  30:	1f 12 00 00 00 00 00 00 	sub %r1,%r2
+  38:	1f 12 00 00 00 00 00 00 	sub %r1,%r2
+  40:	27 10 00 00 00 00 00 aa 	mul %r1,0xaa
+  48:	27 10 00 00 00 00 00 aa 	mul %r1,0xaa
+  50:	2f 12 00 00 00 00 00 00 	mul %r1,%r2
+  58:	2f 12 00 00 00 00 00 00 	mul %r1,%r2
+  60:	37 10 00 00 00 00 00 aa 	div %r1,0xaa
+  68:	37 10 00 00 00 00 00 aa 	div %r1,0xaa
+  70:	3f 12 00 00 00 00 00 00 	div %r1,%r2
+  78:	3f 12 00 00 00 00 00 00 	div %r1,%r2
+  80:	47 10 00 00 00 00 00 aa 	or %r1,0xaa
+  88:	47 10 00 00 00 00 00 aa 	or %r1,0xaa
+  90:	4f 12 00 00 00 00 00 00 	or %r1,%r2
+  98:	4f 12 00 00 00 00 00 00 	or %r1,%r2
+  a0:	57 10 00 00 00 00 00 aa 	and %r1,0xaa
+  a8:	57 10 00 00 00 00 00 aa 	and %r1,0xaa
+  b0:	5f 12 00 00 00 00 00 00 	and %r1,%r2
+  b8:	5f 12 00 00 00 00 00 00 	and %r1,%r2
+  c0:	67 10 00 00 00 00 00 aa 	lsh %r1,0xaa
+  c8:	67 10 00 00 00 00 00 aa 	lsh %r1,0xaa
+  d0:	6f 12 00 00 00 00 00 00 	lsh %r1,%r2
+  d8:	6f 12 00 00 00 00 00 00 	lsh %r1,%r2
+  e0:	77 10 00 00 00 00 00 aa 	rsh %r1,0xaa
+  e8:	77 10 00 00 00 00 00 aa 	rsh %r1,0xaa
+  f0:	7f 12 00 00 00 00 00 00 	rsh %r1,%r2
+  f8:	7f 12 00 00 00 00 00 00 	rsh %r1,%r2
+ 100:	a7 10 00 00 00 00 00 aa 	xor %r1,0xaa
+ 108:	a7 10 00 00 00 00 00 aa 	xor %r1,0xaa
+ 110:	af 12 00 00 00 00 00 00 	xor %r1,%r2
+ 118:	af 12 00 00 00 00 00 00 	xor %r1,%r2
+ 120:	b7 10 00 00 00 00 00 aa 	mov %r1,0xaa
+ 128:	b7 10 00 00 00 00 00 aa 	mov %r1,0xaa
+ 130:	bf 12 00 00 00 00 00 00 	mov %r1,%r2
+ 138:	bf 12 00 00 00 00 00 00 	mov %r1,%r2
+ 140:	c7 10 00 00 00 00 00 aa 	arsh %r1,0xaa
+ 148:	c7 10 00 00 00 00 00 aa 	arsh %r1,0xaa
+ 150:	cf 12 00 00 00 00 00 00 	arsh %r1,%r2
+ 158:	cf 12 00 00 00 00 00 00 	arsh %r1,%r2
+ 160:	87 10 00 00 00 00 00 00 	neg %r1
+ 168:	87 10 00 00 00 00 00 00 	neg %r1
+ 170:	04 10 00 00 00 00 00 aa 	add32 %r1,0xaa
+ 178:	04 10 00 00 00 00 00 aa 	add32 %r1,0xaa
+ 180:	0c 12 00 00 00 00 00 00 	add32 %r1,%r2
+ 188:	0c 12 00 00 00 00 00 00 	add32 %r1,%r2
+ 190:	14 10 00 00 00 00 00 aa 	sub32 %r1,0xaa
+ 198:	14 10 00 00 00 00 00 aa 	sub32 %r1,0xaa
+ 1a0:	1c 12 00 00 00 00 00 00 	sub32 %r1,%r2
+ 1a8:	1c 12 00 00 00 00 00 00 	sub32 %r1,%r2
+ 1b0:	24 10 00 00 00 00 00 aa 	mul32 %r1,0xaa
+ 1b8:	24 10 00 00 00 00 00 aa 	mul32 %r1,0xaa
+ 1c0:	2c 12 00 00 00 00 00 00 	mul32 %r1,%r2
+ 1c8:	2c 12 00 00 00 00 00 00 	mul32 %r1,%r2
+ 1d0:	34 10 00 00 00 00 00 aa 	div32 %r1,0xaa
+ 1d8:	34 10 00 00 00 00 00 aa 	div32 %r1,0xaa
+ 1e0:	3c 12 00 00 00 00 00 00 	div32 %r1,%r2
+ 1e8:	3c 12 00 00 00 00 00 00 	div32 %r1,%r2
+ 1f0:	44 10 00 00 00 00 00 aa 	or32 %r1,0xaa
+ 1f8:	44 10 00 00 00 00 00 aa 	or32 %r1,0xaa
+ 200:	4c 12 00 00 00 00 00 00 	or32 %r1,%r2
+ 208:	4c 12 00 00 00 00 00 00 	or32 %r1,%r2
+ 210:	54 10 00 00 00 00 00 aa 	and32 %r1,0xaa
+ 218:	54 10 00 00 00 00 00 aa 	and32 %r1,0xaa
+ 220:	5c 12 00 00 00 00 00 00 	and32 %r1,%r2
+ 228:	5c 12 00 00 00 00 00 00 	and32 %r1,%r2
+ 230:	64 10 00 00 00 00 00 aa 	lsh32 %r1,0xaa
+ 238:	64 10 00 00 00 00 00 aa 	lsh32 %r1,0xaa
+ 240:	6c 12 00 00 00 00 00 00 	lsh32 %r1,%r2
+ 248:	6c 12 00 00 00 00 00 00 	lsh32 %r1,%r2
+ 250:	74 10 00 00 00 00 00 aa 	rsh32 %r1,0xaa
+ 258:	74 10 00 00 00 00 00 aa 	rsh32 %r1,0xaa
+ 260:	7c 12 00 00 00 00 00 00 	rsh32 %r1,%r2
+ 268:	7c 12 00 00 00 00 00 00 	rsh32 %r1,%r2
+ 270:	a4 10 00 00 00 00 00 aa 	xor32 %r1,0xaa
+ 278:	a4 10 00 00 00 00 00 aa 	xor32 %r1,0xaa
+ 280:	ac 12 00 00 00 00 00 00 	xor32 %r1,%r2
+ 288:	ac 12 00 00 00 00 00 00 	xor32 %r1,%r2
+ 290:	b4 10 00 00 00 00 00 aa 	mov32 %r1,0xaa
+ 298:	b4 10 00 00 00 00 00 aa 	mov32 %r1,0xaa
+ 2a0:	bc 12 00 00 00 00 00 00 	mov32 %r1,%r2
+ 2a8:	bc 12 00 00 00 00 00 00 	mov32 %r1,%r2
+ 2b0:	c4 10 00 00 00 00 00 aa 	arsh32 %r1,0xaa
+ 2b8:	c4 10 00 00 00 00 00 aa 	arsh32 %r1,0xaa
+ 2c0:	cc 12 00 00 00 00 00 00 	arsh32 %r1,%r2
+ 2c8:	cc 12 00 00 00 00 00 00 	arsh32 %r1,%r2
+ 2d0:	84 10 00 00 00 00 00 00 	neg32 %r1
+ 2d8:	84 10 00 00 00 00 00 00 	neg32 %r1
+ 2e0:	d4 10 00 00 00 00 00 10 	endle %r1,16
+ 2e8:	d4 10 00 00 00 00 00 10 	endle %r1,16
+ 2f0:	d4 10 00 00 00 00 00 20 	endle %r1,32
+ 2f8:	d4 10 00 00 00 00 00 20 	endle %r1,32
+ 300:	d4 10 00 00 00 00 00 40 	endle %r1,64
+ 308:	d4 10 00 00 00 00 00 40 	endle %r1,64
+ 310:	dc 10 00 00 00 00 00 10 	endbe %r1,16
+ 318:	dc 10 00 00 00 00 00 10 	endbe %r1,16
+ 320:	dc 10 00 00 00 00 00 20 	endbe %r1,32
+ 328:	dc 10 00 00 00 00 00 20 	endbe %r1,32
+ 330:	dc 10 00 00 00 00 00 40 	endbe %r1,64
+ 338:	dc 10 00 00 00 00 00 40 	endbe %r1,64
+ 340:	71 12 00 aa 00 00 00 00 	ldxb %r1,\[%r2\+0xaa\]
+ 348:	71 12 00 aa 00 00 00 00 	ldxb %r1,\[%r2\+0xaa\]
+ 350:	69 12 00 aa 00 00 00 00 	ldxh %r1,\[%r2\+0xaa\]
+ 358:	69 12 00 aa 00 00 00 00 	ldxh %r1,\[%r2\+0xaa\]
+ 360:	61 12 00 aa 00 00 00 00 	ldxw %r1,\[%r2\+0xaa\]
+ 368:	61 12 00 aa 00 00 00 00 	ldxw %r1,\[%r2\+0xaa\]
+ 370:	79 12 00 aa 00 00 00 00 	ldxdw %r1,\[%r2\+0xaa\]
+ 378:	79 12 00 aa 00 00 00 00 	ldxdw %r1,\[%r2\+0xaa\]
+ 380:	73 12 00 aa 00 00 00 00 	stxb \[%r1\+0xaa\],%r2
+ 388:	73 12 00 aa 00 00 00 00 	stxb \[%r1\+0xaa\],%r2
+ 390:	6b 12 00 aa 00 00 00 00 	stxh \[%r1\+0xaa\],%r2
+ 398:	6b 12 00 aa 00 00 00 00 	stxh \[%r1\+0xaa\],%r2
+ 3a0:	63 12 00 aa 00 00 00 00 	stxw \[%r1\+0xaa\],%r2
+ 3a8:	63 12 00 aa 00 00 00 00 	stxw \[%r1\+0xaa\],%r2
+ 3b0:	7b 12 00 aa 00 00 00 00 	stxdw \[%r1\+0xaa\],%r2
+ 3b8:	7b 12 00 aa 00 00 00 00 	stxdw \[%r1\+0xaa\],%r2
+ 3c0:	05 00 00 bb 00 00 00 00 	ja 187
+ 3c8:	05 00 00 bb 00 00 00 00 	ja 187
+ 3d0:	15 10 00 bb 00 00 00 aa 	jeq %r1,0xaa,187
+ 3d8:	15 10 00 bb 00 00 00 aa 	jeq %r1,0xaa,187
+ 3e0:	1d 12 00 bb 00 00 00 00 	jeq %r1,%r2,187
+ 3e8:	1d 12 00 bb 00 00 00 00 	jeq %r1,%r2,187
+ 3f0:	25 10 00 bb 00 00 00 aa 	jgt %r1,0xaa,187
+ 3f8:	25 10 00 bb 00 00 00 aa 	jgt %r1,0xaa,187
+ 400:	2d 12 00 bb 00 00 00 00 	jgt %r1,%r2,187
+ 408:	2d 12 00 bb 00 00 00 00 	jgt %r1,%r2,187
+ 410:	35 10 00 bb 00 00 00 aa 	jge %r1,0xaa,187
+ 418:	35 10 00 bb 00 00 00 aa 	jge %r1,0xaa,187
+ 420:	3d 12 00 bb 00 00 00 00 	jge %r1,%r2,187
+ 428:	3d 12 00 bb 00 00 00 00 	jge %r1,%r2,187
+ 430:	a5 10 00 bb 00 00 00 aa 	jlt %r1,0xaa,187
+ 438:	a5 10 00 bb 00 00 00 aa 	jlt %r1,0xaa,187
+ 440:	ad 12 00 bb 00 00 00 00 	jlt %r1,%r2,187
+ 448:	ad 12 00 bb 00 00 00 00 	jlt %r1,%r2,187
+ 450:	b5 10 00 bb 00 00 00 aa 	jle %r1,0xaa,187
+ 458:	b5 10 00 bb 00 00 00 aa 	jle %r1,0xaa,187
+ 460:	bd 12 00 bb 00 00 00 00 	jle %r1,%r2,187
+ 468:	bd 12 00 bb 00 00 00 00 	jle %r1,%r2,187
+ 470:	45 10 00 bb 00 00 00 aa 	jset %r1,0xaa,187
+ 478:	45 10 00 bb 00 00 00 aa 	jset %r1,0xaa,187
+ 480:	4d 12 00 bb 00 00 00 00 	jset %r1,%r2,187
+ 488:	4d 12 00 bb 00 00 00 00 	jset %r1,%r2,187
+ 490:	55 10 00 bb 00 00 00 aa 	jne %r1,0xaa,187
+ 498:	55 10 00 bb 00 00 00 aa 	jne %r1,0xaa,187
+ 4a0:	5d 12 00 bb 00 00 00 00 	jne %r1,%r2,187
+ 4a8:	5d 12 00 bb 00 00 00 00 	jne %r1,%r2,187
+ 4b0:	65 10 00 bb 00 00 00 aa 	jsgt %r1,0xaa,187
+ 4b8:	65 10 00 bb 00 00 00 aa 	jsgt %r1,0xaa,187
+ 4c0:	6d 12 00 bb 00 00 00 00 	jsgt %r1,%r2,187
+ 4c8:	6d 12 00 bb 00 00 00 00 	jsgt %r1,%r2,187
+ 4d0:	75 10 00 bb 00 00 00 aa 	jsge %r1,0xaa,187
+ 4d8:	75 10 00 bb 00 00 00 aa 	jsge %r1,0xaa,187
+ 4e0:	7d 12 00 bb 00 00 00 00 	jsge %r1,%r2,187
+ 4e8:	7d 12 00 bb 00 00 00 00 	jsge %r1,%r2,187
+ 4f0:	c5 10 00 bb 00 00 00 aa 	jslt %r1,0xaa,187
+ 4f8:	c5 10 00 bb 00 00 00 aa 	jslt %r1,0xaa,187
+ 500:	cd 12 00 bb 00 00 00 00 	jslt %r1,%r2,187
+ 508:	cd 12 00 bb 00 00 00 00 	jslt %r1,%r2,187
+ 510:	d5 10 00 bb 00 00 00 aa 	jsle %r1,0xaa,187
+ 518:	d5 10 00 bb 00 00 00 aa 	jsle %r1,0xaa,187
+ 520:	dd 12 00 bb 00 00 00 00 	jsle %r1,%r2,187
+ 528:	dd 12 00 bb 00 00 00 00 	jsle %r1,%r2,187
+ 530:	85 00 00 00 00 00 00 aa 	call 170
+ 538:	85 00 00 00 00 00 00 aa 	call 170
+ 540:	95 00 00 00 00 00 00 00 	exit
+ 548:	95 00 00 00 00 00 00 00 	exit
+ 550:	b7 60 00 00 00 00 06 20 	mov %r6,0x620
+ 558:	95 00 00 00 00 00 00 00 	exit
+ 560:	20 00 00 00 00 00 00 aa 	ldabsw 0xaa
+ 568:	20 00 00 00 00 00 00 aa 	ldabsw 0xaa
+ 570:	50 07 00 00 00 00 00 aa 	ldindb %r7,0xaa
+ 578:	50 07 00 00 00 00 00 aa 	ldindb %r7,0xaa
+ 580:	20 00 00 00 00 00 00 aa 	ldabsw 0xaa
+ 588:	20 00 00 00 00 00 00 aa 	ldabsw 0xaa
+ 590:	50 07 00 00 00 00 00 aa 	ldindb %r7,0xaa
+ 598:	50 07 00 00 00 00 00 aa 	ldindb %r7,0xaa
+ 5a0:	18 30 00 00 00 00 00 01 	lddw %r3,1
+ 5a8:	00 00 00 00 00 00 00 00 
+ 5b0:	18 30 00 00 00 00 00 01 	lddw %r3,1
+ 5b8:	00 00 00 00 00 00 00 00 
+ 5c0:	18 40 00 00 ee ff 77 88 	lddw %r4,-6144092013047351416
+ 5c8:	00 00 00 00 aa bb cc dd 
+ 5d0:	18 40 00 00 ee ff 77 88 	lddw %r4,-6144092013047351416
+ 5d8:	00 00 00 00 aa bb cc dd 
+ 5e0:	18 50 00 00 55 66 77 88 	lddw %r5,0x1122334455667788
+ 5e8:	00 00 00 00 11 22 33 44 
+ 5f0:	18 50 00 00 55 66 77 88 	lddw %r5,0x1122334455667788
+ 5f8:	00 00 00 00 11 22 33 44 
+ 600:	18 60 00 00 00 00 06 20 	lddw %r6,0x620
+ 608:	00 00 00 00 00 00 00 00 
+			600: R_BPF_64_64	.text
+ 610:	18 60 00 00 00 00 06 20 	lddw %r6,0x620
+ 618:	00 00 00 00 00 00 00 00 
+			610: R_BPF_64_64	.text
+
+0000000000000620 <main>:
+ 620:	c3 12 00 aa 00 00 00 00 	xaddw \[%r1\+0xaa\],%r2
+ 628:	c3 12 00 aa 00 00 00 00 	xaddw \[%r1\+0xaa\],%r2
+ 630:	db 12 00 aa 00 00 00 00 	xadddw \[%r1\+0xaa\],%r2
+ 638:	db 12 00 aa 00 00 00 00 	xadddw \[%r1\+0xaa\],%r2
diff --git a/gas/testsuite/gas/bpf/pseudoc-normal.d b/gas/testsuite/gas/bpf/pseudoc-normal.d
new file mode 100644
index 00000000000..5bece2a085a
--- /dev/null
+++ b/gas/testsuite/gas/bpf/pseudoc-normal.d
@@ -0,0 +1,214 @@
+#as: --EL
+#objdump: -dr
+#source: pseudoc-normal.s
+#name: eBPF clang (pseudo-C)/gas (normal) instructions
+
+.*: +file format .*bpf.*
+
+Disassembly of section .text:
+
+0+ <beg>:
+   0:	07 01 00 00 aa 00 00 00 	add %r1,0xaa
+   8:	07 01 00 00 aa 00 00 00 	add %r1,0xaa
+  10:	0f 21 00 00 00 00 00 00 	add %r1,%r2
+  18:	0f 21 00 00 00 00 00 00 	add %r1,%r2
+  20:	17 01 00 00 aa 00 00 00 	sub %r1,0xaa
+  28:	17 01 00 00 aa 00 00 00 	sub %r1,0xaa
+  30:	1f 21 00 00 00 00 00 00 	sub %r1,%r2
+  38:	1f 21 00 00 00 00 00 00 	sub %r1,%r2
+  40:	27 01 00 00 aa 00 00 00 	mul %r1,0xaa
+  48:	27 01 00 00 aa 00 00 00 	mul %r1,0xaa
+  50:	2f 21 00 00 00 00 00 00 	mul %r1,%r2
+  58:	2f 21 00 00 00 00 00 00 	mul %r1,%r2
+  60:	37 01 00 00 aa 00 00 00 	div %r1,0xaa
+  68:	37 01 00 00 aa 00 00 00 	div %r1,0xaa
+  70:	3f 21 00 00 00 00 00 00 	div %r1,%r2
+  78:	3f 21 00 00 00 00 00 00 	div %r1,%r2
+  80:	47 01 00 00 aa 00 00 00 	or %r1,0xaa
+  88:	47 01 00 00 aa 00 00 00 	or %r1,0xaa
+  90:	4f 21 00 00 00 00 00 00 	or %r1,%r2
+  98:	4f 21 00 00 00 00 00 00 	or %r1,%r2
+  a0:	57 01 00 00 aa 00 00 00 	and %r1,0xaa
+  a8:	57 01 00 00 aa 00 00 00 	and %r1,0xaa
+  b0:	5f 21 00 00 00 00 00 00 	and %r1,%r2
+  b8:	5f 21 00 00 00 00 00 00 	and %r1,%r2
+  c0:	67 01 00 00 aa 00 00 00 	lsh %r1,0xaa
+  c8:	67 01 00 00 aa 00 00 00 	lsh %r1,0xaa
+  d0:	6f 21 00 00 00 00 00 00 	lsh %r1,%r2
+  d8:	6f 21 00 00 00 00 00 00 	lsh %r1,%r2
+  e0:	77 01 00 00 aa 00 00 00 	rsh %r1,0xaa
+  e8:	77 01 00 00 aa 00 00 00 	rsh %r1,0xaa
+  f0:	7f 21 00 00 00 00 00 00 	rsh %r1,%r2
+  f8:	7f 21 00 00 00 00 00 00 	rsh %r1,%r2
+ 100:	a7 01 00 00 aa 00 00 00 	xor %r1,0xaa
+ 108:	a7 01 00 00 aa 00 00 00 	xor %r1,0xaa
+ 110:	af 21 00 00 00 00 00 00 	xor %r1,%r2
+ 118:	af 21 00 00 00 00 00 00 	xor %r1,%r2
+ 120:	b7 01 00 00 aa 00 00 00 	mov %r1,0xaa
+ 128:	b7 01 00 00 aa 00 00 00 	mov %r1,0xaa
+ 130:	bf 21 00 00 00 00 00 00 	mov %r1,%r2
+ 138:	bf 21 00 00 00 00 00 00 	mov %r1,%r2
+ 140:	c7 01 00 00 aa 00 00 00 	arsh %r1,0xaa
+ 148:	c7 01 00 00 aa 00 00 00 	arsh %r1,0xaa
+ 150:	cf 21 00 00 00 00 00 00 	arsh %r1,%r2
+ 158:	cf 21 00 00 00 00 00 00 	arsh %r1,%r2
+ 160:	87 01 00 00 00 00 00 00 	neg %r1
+ 168:	87 01 00 00 00 00 00 00 	neg %r1
+ 170:	04 01 00 00 aa 00 00 00 	add32 %r1,0xaa
+ 178:	04 01 00 00 aa 00 00 00 	add32 %r1,0xaa
+ 180:	0c 21 00 00 00 00 00 00 	add32 %r1,%r2
+ 188:	0c 21 00 00 00 00 00 00 	add32 %r1,%r2
+ 190:	14 01 00 00 aa 00 00 00 	sub32 %r1,0xaa
+ 198:	14 01 00 00 aa 00 00 00 	sub32 %r1,0xaa
+ 1a0:	1c 21 00 00 00 00 00 00 	sub32 %r1,%r2
+ 1a8:	1c 21 00 00 00 00 00 00 	sub32 %r1,%r2
+ 1b0:	24 01 00 00 aa 00 00 00 	mul32 %r1,0xaa
+ 1b8:	24 01 00 00 aa 00 00 00 	mul32 %r1,0xaa
+ 1c0:	2c 21 00 00 00 00 00 00 	mul32 %r1,%r2
+ 1c8:	2c 21 00 00 00 00 00 00 	mul32 %r1,%r2
+ 1d0:	34 01 00 00 aa 00 00 00 	div32 %r1,0xaa
+ 1d8:	34 01 00 00 aa 00 00 00 	div32 %r1,0xaa
+ 1e0:	3c 21 00 00 00 00 00 00 	div32 %r1,%r2
+ 1e8:	3c 21 00 00 00 00 00 00 	div32 %r1,%r2
+ 1f0:	44 01 00 00 aa 00 00 00 	or32 %r1,0xaa
+ 1f8:	44 01 00 00 aa 00 00 00 	or32 %r1,0xaa
+ 200:	4c 21 00 00 00 00 00 00 	or32 %r1,%r2
+ 208:	4c 21 00 00 00 00 00 00 	or32 %r1,%r2
+ 210:	54 01 00 00 aa 00 00 00 	and32 %r1,0xaa
+ 218:	54 01 00 00 aa 00 00 00 	and32 %r1,0xaa
+ 220:	5c 21 00 00 00 00 00 00 	and32 %r1,%r2
+ 228:	5c 21 00 00 00 00 00 00 	and32 %r1,%r2
+ 230:	64 01 00 00 aa 00 00 00 	lsh32 %r1,0xaa
+ 238:	64 01 00 00 aa 00 00 00 	lsh32 %r1,0xaa
+ 240:	6c 21 00 00 00 00 00 00 	lsh32 %r1,%r2
+ 248:	6c 21 00 00 00 00 00 00 	lsh32 %r1,%r2
+ 250:	74 01 00 00 aa 00 00 00 	rsh32 %r1,0xaa
+ 258:	74 01 00 00 aa 00 00 00 	rsh32 %r1,0xaa
+ 260:	7c 21 00 00 00 00 00 00 	rsh32 %r1,%r2
+ 268:	7c 21 00 00 00 00 00 00 	rsh32 %r1,%r2
+ 270:	a4 01 00 00 aa 00 00 00 	xor32 %r1,0xaa
+ 278:	a4 01 00 00 aa 00 00 00 	xor32 %r1,0xaa
+ 280:	ac 21 00 00 00 00 00 00 	xor32 %r1,%r2
+ 288:	ac 21 00 00 00 00 00 00 	xor32 %r1,%r2
+ 290:	b4 01 00 00 aa 00 00 00 	mov32 %r1,0xaa
+ 298:	b4 01 00 00 aa 00 00 00 	mov32 %r1,0xaa
+ 2a0:	bc 21 00 00 00 00 00 00 	mov32 %r1,%r2
+ 2a8:	bc 21 00 00 00 00 00 00 	mov32 %r1,%r2
+ 2b0:	c4 01 00 00 aa 00 00 00 	arsh32 %r1,0xaa
+ 2b8:	c4 01 00 00 aa 00 00 00 	arsh32 %r1,0xaa
+ 2c0:	cc 21 00 00 00 00 00 00 	arsh32 %r1,%r2
+ 2c8:	cc 21 00 00 00 00 00 00 	arsh32 %r1,%r2
+ 2d0:	84 01 00 00 00 00 00 00 	neg32 %r1
+ 2d8:	84 01 00 00 00 00 00 00 	neg32 %r1
+ 2e0:	d4 01 00 00 10 00 00 00 	endle %r1,16
+ 2e8:	d4 01 00 00 10 00 00 00 	endle %r1,16
+ 2f0:	d4 01 00 00 20 00 00 00 	endle %r1,32
+ 2f8:	d4 01 00 00 20 00 00 00 	endle %r1,32
+ 300:	d4 01 00 00 40 00 00 00 	endle %r1,64
+ 308:	d4 01 00 00 40 00 00 00 	endle %r1,64
+ 310:	dc 01 00 00 10 00 00 00 	endbe %r1,16
+ 318:	dc 01 00 00 10 00 00 00 	endbe %r1,16
+ 320:	dc 01 00 00 20 00 00 00 	endbe %r1,32
+ 328:	dc 01 00 00 20 00 00 00 	endbe %r1,32
+ 330:	dc 01 00 00 40 00 00 00 	endbe %r1,64
+ 338:	dc 01 00 00 40 00 00 00 	endbe %r1,64
+ 340:	71 21 aa 00 00 00 00 00 	ldxb %r1,\[%r2\+0xaa\]
+ 348:	71 21 aa 00 00 00 00 00 	ldxb %r1,\[%r2\+0xaa\]
+ 350:	69 21 aa 00 00 00 00 00 	ldxh %r1,\[%r2\+0xaa\]
+ 358:	69 21 aa 00 00 00 00 00 	ldxh %r1,\[%r2\+0xaa\]
+ 360:	61 21 aa 00 00 00 00 00 	ldxw %r1,\[%r2\+0xaa\]
+ 368:	61 21 aa 00 00 00 00 00 	ldxw %r1,\[%r2\+0xaa\]
+ 370:	79 21 aa 00 00 00 00 00 	ldxdw %r1,\[%r2\+0xaa\]
+ 378:	79 21 aa 00 00 00 00 00 	ldxdw %r1,\[%r2\+0xaa\]
+ 380:	73 21 aa 00 00 00 00 00 	stxb \[%r1\+0xaa\],%r2
+ 388:	73 21 aa 00 00 00 00 00 	stxb \[%r1\+0xaa\],%r2
+ 390:	6b 21 aa 00 00 00 00 00 	stxh \[%r1\+0xaa\],%r2
+ 398:	6b 21 aa 00 00 00 00 00 	stxh \[%r1\+0xaa\],%r2
+ 3a0:	63 21 aa 00 00 00 00 00 	stxw \[%r1\+0xaa\],%r2
+ 3a8:	63 21 aa 00 00 00 00 00 	stxw \[%r1\+0xaa\],%r2
+ 3b0:	7b 21 aa 00 00 00 00 00 	stxdw \[%r1\+0xaa\],%r2
+ 3b8:	7b 21 aa 00 00 00 00 00 	stxdw \[%r1\+0xaa\],%r2
+ 3c0:	05 00 bb 00 00 00 00 00 	ja 187
+ 3c8:	05 00 bb 00 00 00 00 00 	ja 187
+ 3d0:	15 01 bb 00 aa 00 00 00 	jeq %r1,0xaa,187
+ 3d8:	15 01 bb 00 aa 00 00 00 	jeq %r1,0xaa,187
+ 3e0:	1d 21 bb 00 00 00 00 00 	jeq %r1,%r2,187
+ 3e8:	1d 21 bb 00 00 00 00 00 	jeq %r1,%r2,187
+ 3f0:	25 01 bb 00 aa 00 00 00 	jgt %r1,0xaa,187
+ 3f8:	25 01 bb 00 aa 00 00 00 	jgt %r1,0xaa,187
+ 400:	2d 21 bb 00 00 00 00 00 	jgt %r1,%r2,187
+ 408:	2d 21 bb 00 00 00 00 00 	jgt %r1,%r2,187
+ 410:	35 01 bb 00 aa 00 00 00 	jge %r1,0xaa,187
+ 418:	35 01 bb 00 aa 00 00 00 	jge %r1,0xaa,187
+ 420:	3d 21 bb 00 00 00 00 00 	jge %r1,%r2,187
+ 428:	3d 21 bb 00 00 00 00 00 	jge %r1,%r2,187
+ 430:	a5 01 bb 00 aa 00 00 00 	jlt %r1,0xaa,187
+ 438:	a5 01 bb 00 aa 00 00 00 	jlt %r1,0xaa,187
+ 440:	ad 21 bb 00 00 00 00 00 	jlt %r1,%r2,187
+ 448:	ad 21 bb 00 00 00 00 00 	jlt %r1,%r2,187
+ 450:	b5 01 bb 00 aa 00 00 00 	jle %r1,0xaa,187
+ 458:	b5 01 bb 00 aa 00 00 00 	jle %r1,0xaa,187
+ 460:	bd 21 bb 00 00 00 00 00 	jle %r1,%r2,187
+ 468:	bd 21 bb 00 00 00 00 00 	jle %r1,%r2,187
+ 470:	45 01 bb 00 aa 00 00 00 	jset %r1,0xaa,187
+ 478:	45 01 bb 00 aa 00 00 00 	jset %r1,0xaa,187
+ 480:	4d 21 bb 00 00 00 00 00 	jset %r1,%r2,187
+ 488:	4d 21 bb 00 00 00 00 00 	jset %r1,%r2,187
+ 490:	55 01 bb 00 aa 00 00 00 	jne %r1,0xaa,187
+ 498:	55 01 bb 00 aa 00 00 00 	jne %r1,0xaa,187
+ 4a0:	5d 21 bb 00 00 00 00 00 	jne %r1,%r2,187
+ 4a8:	5d 21 bb 00 00 00 00 00 	jne %r1,%r2,187
+ 4b0:	65 01 bb 00 aa 00 00 00 	jsgt %r1,0xaa,187
+ 4b8:	65 01 bb 00 aa 00 00 00 	jsgt %r1,0xaa,187
+ 4c0:	6d 21 bb 00 00 00 00 00 	jsgt %r1,%r2,187
+ 4c8:	6d 21 bb 00 00 00 00 00 	jsgt %r1,%r2,187
+ 4d0:	75 01 bb 00 aa 00 00 00 	jsge %r1,0xaa,187
+ 4d8:	75 01 bb 00 aa 00 00 00 	jsge %r1,0xaa,187
+ 4e0:	7d 21 bb 00 00 00 00 00 	jsge %r1,%r2,187
+ 4e8:	7d 21 bb 00 00 00 00 00 	jsge %r1,%r2,187
+ 4f0:	c5 01 bb 00 aa 00 00 00 	jslt %r1,0xaa,187
+ 4f8:	c5 01 bb 00 aa 00 00 00 	jslt %r1,0xaa,187
+ 500:	cd 21 bb 00 00 00 00 00 	jslt %r1,%r2,187
+ 508:	cd 21 bb 00 00 00 00 00 	jslt %r1,%r2,187
+ 510:	d5 01 bb 00 aa 00 00 00 	jsle %r1,0xaa,187
+ 518:	d5 01 bb 00 aa 00 00 00 	jsle %r1,0xaa,187
+ 520:	dd 21 bb 00 00 00 00 00 	jsle %r1,%r2,187
+ 528:	dd 21 bb 00 00 00 00 00 	jsle %r1,%r2,187
+ 530:	85 00 00 00 aa 00 00 00 	call 170
+ 538:	85 00 00 00 aa 00 00 00 	call 170
+ 540:	95 00 00 00 00 00 00 00 	exit
+ 548:	95 00 00 00 00 00 00 00 	exit
+ 550:	b7 06 00 00 20 06 00 00 	mov %r6,0x620
+ 558:	95 00 00 00 00 00 00 00 	exit
+ 560:	20 00 00 00 aa 00 00 00 	ldabsw 0xaa
+ 568:	20 00 00 00 aa 00 00 00 	ldabsw 0xaa
+ 570:	50 70 00 00 aa 00 00 00 	ldindb %r7,0xaa
+ 578:	50 70 00 00 aa 00 00 00 	ldindb %r7,0xaa
+ 580:	20 00 00 00 aa 00 00 00 	ldabsw 0xaa
+ 588:	20 00 00 00 aa 00 00 00 	ldabsw 0xaa
+ 590:	50 70 00 00 aa 00 00 00 	ldindb %r7,0xaa
+ 598:	50 70 00 00 aa 00 00 00 	ldindb %r7,0xaa
+ 5a0:	18 03 00 00 01 00 00 00 	lddw %r3,1
+ 5a8:	00 00 00 00 00 00 00 00 
+ 5b0:	18 03 00 00 01 00 00 00 	lddw %r3,1
+ 5b8:	00 00 00 00 00 00 00 00 
+ 5c0:	18 04 00 00 88 77 ff ee 	lddw %r4,-6144092013047351416
+ 5c8:	00 00 00 00 dd cc bb aa 
+ 5d0:	18 04 00 00 88 77 ff ee 	lddw %r4,-6144092013047351416
+ 5d8:	00 00 00 00 dd cc bb aa 
+ 5e0:	18 05 00 00 88 77 66 55 	lddw %r5,0x1122334455667788
+ 5e8:	00 00 00 00 44 33 22 11 
+ 5f0:	18 05 00 00 88 77 66 55 	lddw %r5,0x1122334455667788
+ 5f8:	00 00 00 00 44 33 22 11 
+ 600:	18 06 00 00 20 06 00 00 	lddw %r6,0x620
+ 608:	00 00 00 00 00 00 00 00 
+			600: R_BPF_64_64	.text
+ 610:	18 06 00 00 20 06 00 00 	lddw %r6,0x620
+ 618:	00 00 00 00 00 00 00 00 
+			610: R_BPF_64_64	.text
+
+0000000000000620 <main>:
+ 620:	c3 21 aa 00 00 00 00 00 	xaddw \[%r1\+0xaa\],%r2
+ 628:	c3 21 aa 00 00 00 00 00 	xaddw \[%r1\+0xaa\],%r2
+ 630:	db 21 aa 00 00 00 00 00 	xadddw \[%r1\+0xaa\],%r2
+ 638:	db 21 aa 00 00 00 00 00 	xadddw \[%r1\+0xaa\],%r2
diff --git a/gas/testsuite/gas/bpf/pseudoc-normal.s b/gas/testsuite/gas/bpf/pseudoc-normal.s
new file mode 100644
index 00000000000..b3467d12219
--- /dev/null
+++ b/gas/testsuite/gas/bpf/pseudoc-normal.s
@@ -0,0 +1,196 @@
+# Tests for mixing pseudo-C and normal eBPF instructions
+beg:
+        .text
+	add %r1,0xaa
+	r1 += 0xaa
+	add %r1,%r2
+	r1 += r2
+	sub %r1,0xaa
+	r1 -= 0xaa
+	sub %r1,%r2
+	r1 -= r2
+	mul %r1,0xaa
+	r1 *= 0xaa
+	mul %r1,%r2
+	r1 *= r2
+	div %r1,0xaa
+	r1 /= 0xaa
+	div %r1,%r2
+	r1 /= r2
+	or %r1,0xaa
+	r1 |= 0xaa
+	or %r1,%r2
+	r1 |= r2
+	and %r1,0xaa
+	r1 &= 0xaa
+	and %r1,%r2
+	r1 &= r2
+	lsh %r1,0xaa
+	r1 <<= 0xaa
+	lsh %r1,%r2
+	r1 <<= r2
+	rsh %r1,0xaa
+	r1 >>= 0xaa
+	rsh %r1,%r2
+	r1 >>= r2
+	xor %r1,0xaa
+	r1 ^= 0xaa
+	xor %r1,%r2
+	r1 ^= r2
+	mov %r1,0xaa
+	r1 = 0xaa
+	mov %r1,%r2
+	r1 = r2
+	arsh %r1,0xaa
+	r1 s>>= 0xaa
+	arsh %r1,%r2
+	r1 s>>= r2
+	neg %r1
+	r1 = -r1
+	add32 %r1,0xaa
+	w1 += 0xaa
+	add32 %r1,%r2
+	w1 += w2
+	sub32 %r1,0xaa
+	w1 -= 0xaa
+	sub32 %r1,%r2
+	w1 -= w2
+	mul32 %r1,0xaa
+	w1 *= 0xaa
+	mul32 %r1,%r2
+	w1 *= w2
+	div32 %r1,0xaa
+	w1 /= 0xaa
+	div32 %r1,%r2
+	w1 /= w2
+	or32 %r1,0xaa
+	w1 |= 0xaa
+	or32 %r1,%r2
+	w1 |= w2
+	and32 %r1,0xaa
+	w1 &= 0xaa
+	and32 %r1,%r2
+	w1 &= w2
+	lsh32 %r1,0xaa
+	w1 <<= 0xaa
+	lsh32 %r1,%r2
+	w1 <<= w2
+	rsh32 %r1,0xaa
+	w1 >>= 0xaa
+	rsh32 %r1,%r2
+	w1 >>= w2
+	xor32 %r1,0xaa
+	w1 ^= 0xaa
+	xor32 %r1,%r2
+	w1 ^= w2
+	mov32 %r1,0xaa
+	w1 = 0xaa
+	mov32 %r1,%r2
+	w1 = w2
+	arsh32 %r1,0xaa
+	w1 s>>= 0xaa
+	arsh32 %r1,%r2
+	w1 s>>= w2
+	neg32 %r1
+	w1 = -w1
+	endle %r1,16
+	r1 = le16 r1
+	endle %r1,32
+	r1 = le32 r1
+	endle %r1,64
+	r1 = le64 r1
+	endbe %r1,16
+	r1 = be16 r1
+	endbe %r1,32
+	r1 = be32 r1
+	endbe %r1,64
+	r1 = be64 r1
+	ldxb %r1,[%r2+0xaa]
+	r1 = *(u8 *)(r2 + 0xaa)
+	ldxh %r1,[%r2+0xaa]
+	r1 = *(u16 *)(r2 + 0xaa)
+	ldxw %r1,[%r2+0xaa]
+	r1 = *(u32 *)(r2 + 0xaa)
+	ldxdw %r1,[%r2+0xaa]
+	r1 = *(u64 *)(r2 + 0xaa)
+	stxb [%r1+0xaa],%r2
+	*(u8 *)(r1 + 0xaa) = r2
+	stxh [%r1+0xaa],%r2
+	*(u16 *)(r1 + 0xaa) = r2
+	stxw [%r1+0xaa],%r2
+	*(u32 *)(r1 + 0xaa) = r2
+	stxdw [%r1+0xaa],%r2
+	*(u64 *)(r1 + 0xaa) = r2
+	ja 187
+	goto 0xbb
+	jeq %r1,0xaa,187
+	if r1 == 0xaa goto 0xbb
+	jeq %r1,%r2,187
+	if r1 == r2 goto 0xbb
+	jgt %r1,0xaa,187
+	if r1 > 0xaa goto 0xbb
+	jgt %r1,%r2,187
+	if r1 > r2 goto 0xbb
+	jge %r1,0xaa,187
+	if r1 >= 0xaa goto 0xbb
+	jge %r1,%r2,187
+	if r1 >= r2 goto 0xbb
+	jlt %r1,0xaa,187
+	if r1 < 0xaa goto 0xbb
+	jlt %r1,%r2,187
+	if r1 < r2 goto 0xbb
+	jle %r1,0xaa,187
+	if r1 <= 0xaa goto 0xbb
+	jle %r1,%r2,187
+	if r1 <= r2 goto 0xbb
+	jset %r1,0xaa,187
+	if r1 & 0xaa goto 0xbb
+	jset %r1,%r2,187
+	if r1 & r2 goto 0xbb
+	jne %r1,0xaa,187
+	if r1 != 0xaa goto 0xbb
+	jne %r1,%r2,187
+	if r1 != r2 goto 0xbb
+	jsgt %r1,0xaa,187
+	if r1 s> 0xaa goto 0xbb
+	jsgt %r1,%r2,187
+	if r1 s> r2 goto 0xbb
+	jsge %r1,0xaa,187
+	if r1 s>= 0xaa goto 0xbb
+	jsge %r1,%r2,187
+	if r1 s>= r2 goto 0xbb
+	jslt %r1,0xaa,187
+	if r1 s< 0xaa goto 0xbb
+	jslt %r1,%r2,187
+	if r1 s< r2 goto 0xbb
+	jsle %r1,0xaa,187
+	if r1 s<= 0xaa goto 0xbb
+	jsle %r1,%r2,187
+	if r1 s<= r2 goto 0xbb
+	call 170
+	call 0xaa
+	exit
+	exit
+	mov %r6,main - beg
+        exit
+	ldabsw 0xaa
+	r0 = *(u32 *)skb[0xaa]
+	ldindb %r7,0xaa
+	r0 = *(u8 *)skb[r7 + 0xaa]
+	ldabsw 0xaa
+	r0 = *(u32 *)skb[0xaa]
+	ldindb %r7,0xaa
+	r0 = *(u8 *)skb[r7 + 0xaa]
+	lddw %r3,1
+	r3 =  1 ll
+	lddw %r4,0xaabbccddeeff7788
+	r4 =  0xaabbccddeeff7788 ll
+	r5 =  0x1122334455667788 ll
+	lddw %r5,0x1122334455667788
+	lddw %r6,main
+	r6 = main ll
+	main:
+	lock *(u32 *)(r1 + 0xaa) += r2
+	xaddw [%r1+0xaa],%r2
+	lock *(u64 *)(r1 + 0xaa) += r2
+	xadddw [%r1+0xaa],%r2
diff --git a/gas/testsuite/gas/macros/macros.exp b/gas/testsuite/gas/macros/macros.exp
index e217b2b14ae..811ef7d835c 100644
--- a/gas/testsuite/gas/macros/macros.exp
+++ b/gas/testsuite/gas/macros/macros.exp
@@ -82,6 +82,7 @@ switch -glob $target_triplet {
     rl78-*-* { }
     rx-*-* { }
     vax-*-* { }
+    bpf-*-* { }
     default { run_list_test dot "-alm" }
 }
 run_list_test end ""

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2023-04-26 17:30 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-04-26 17:30 [binutils-gdb] gas: BPF pseudo-c syntax tests Jose E. Marchesi

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).