summaryrefslogtreecommitdiff
path: root/gas/testsuite/gas/d30v
diff options
context:
space:
mode:
Diffstat (limited to 'gas/testsuite/gas/d30v')
-rw-r--r--gas/testsuite/gas/d30v/align.d17
-rw-r--r--gas/testsuite/gas/d30v/align.s28
-rw-r--r--gas/testsuite/gas/d30v/array.d31
-rw-r--r--gas/testsuite/gas/d30v/array.s15
-rw-r--r--gas/testsuite/gas/d30v/bittest.d20
-rw-r--r--gas/testsuite/gas/d30v/bittest.l56
-rw-r--r--gas/testsuite/gas/d30v/bittest.s28
-rw-r--r--gas/testsuite/gas/d30v/d30.exp35
-rw-r--r--gas/testsuite/gas/d30v/guard-debug.d25
-rw-r--r--gas/testsuite/gas/d30v/guard-debug.s17
-rw-r--r--gas/testsuite/gas/d30v/guard.d17
-rw-r--r--gas/testsuite/gas/d30v/guard.s24
-rw-r--r--gas/testsuite/gas/d30v/inst.d256
-rw-r--r--gas/testsuite/gas/d30v/inst.s504
-rw-r--r--gas/testsuite/gas/d30v/label-debug.d24
-rw-r--r--gas/testsuite/gas/d30v/label-debug.s11
-rw-r--r--gas/testsuite/gas/d30v/label.d16
-rw-r--r--gas/testsuite/gas/d30v/label.s11
-rw-r--r--gas/testsuite/gas/d30v/mul.d20
-rw-r--r--gas/testsuite/gas/d30v/mul.s19
-rw-r--r--gas/testsuite/gas/d30v/opt.d89
-rw-r--r--gas/testsuite/gas/d30v/opt.s216
-rw-r--r--gas/testsuite/gas/d30v/reloc.d93
-rw-r--r--gas/testsuite/gas/d30v/reloc.s68
-rw-r--r--gas/testsuite/gas/d30v/serial.l46
-rw-r--r--gas/testsuite/gas/d30v/serial.s14
-rw-r--r--gas/testsuite/gas/d30v/serial2.l138
-rw-r--r--gas/testsuite/gas/d30v/serial2.s29
-rw-r--r--gas/testsuite/gas/d30v/serial2O.l99
-rw-r--r--gas/testsuite/gas/d30v/serial2O.s29
-rw-r--r--gas/testsuite/gas/d30v/warn_oddreg.l40
-rw-r--r--gas/testsuite/gas/d30v/warn_oddreg.s12
32 files changed, 2047 insertions, 0 deletions
diff --git a/gas/testsuite/gas/d30v/align.d b/gas/testsuite/gas/d30v/align.d
new file mode 100644
index 00000000000..466768f5dc1
--- /dev/null
+++ b/gas/testsuite/gas/d30v/align.d
@@ -0,0 +1,17 @@
+#objdump: -dr
+#name: D30V alignment test
+#as:
+
+.*: +file format elf32-d30v
+
+Disassembly of section .text:
+
+0+0000 <start>:
+ 0: 08815a80 00f00000 abs r21, r42 || nop
+ 8: 08815a80 00f00000 abs r21, r42 || nop
+ 10: 08815a80 00f00000 abs r21, r42 || nop
+ 18: 00f00000 00f00000 abs r21, r42 || nop
+ 20: 08815a80 00f00000 abs r21, r42 || nop
+ 28: 08815a80 00f00000 abs r21, r42 || nop
+ 30: 08815a80 00f00000 abs r21, r42 || nop
+ ...
diff --git a/gas/testsuite/gas/d30v/align.s b/gas/testsuite/gas/d30v/align.s
new file mode 100644
index 00000000000..ef0039c6940
--- /dev/null
+++ b/gas/testsuite/gas/d30v/align.s
@@ -0,0 +1,28 @@
+# tests proper handling of aligns on D30V
+
+ .text
+ .align 3
+start:
+ abs r21,r42
+ .align 3
+ abs r21,r42
+ .align 4
+ abs r21,r42
+ .align 4
+ abs r21,r42
+
+ .data
+ .long 0xdeadbeef
+
+ .text
+ abs r21,r42
+
+ .data
+ .align 4
+ .long 0xdeadbeef
+
+ .text
+ .align 3
+ abs r21,r42
+ .end
+
diff --git a/gas/testsuite/gas/d30v/array.d b/gas/testsuite/gas/d30v/array.d
new file mode 100644
index 00000000000..e81bc3394ea
--- /dev/null
+++ b/gas/testsuite/gas/d30v/array.d
@@ -0,0 +1,31 @@
+#objdump: -dr
+#name: D30V array test
+#as:
+
+.*: +file format elf32-d30v
+
+Disassembly of section .text:
+
+0+0000 <__foo-0x48>:
+ 0: 880820c0 80000048 add.l r2, r3, 0x48
+ 0: R_D30V_32 .text
+ 8: 880820c0 80000049 add.l r2, r3, 0x49
+ 8: R_D30V_32 .text
+ 10: 880820c0 8000004a add.l r2, r3, 0x4a
+ 10: R_D30V_32 .text
+ 18: 880820c0 8000004b add.l r2, r3, 0x4b
+ 18: R_D30V_32 .text
+ 20: 880820c0 8000004c add.l r2, r3, 0x4c
+ 20: R_D30V_32 .text
+ 28: 880820c0 8000004d add.l r2, r3, 0x4d
+ 28: R_D30V_32 .text
+ 30: 880820c0 8000004e add.l r2, r3, 0x4e
+ 30: R_D30V_32 .text
+ 38: 880820c0 8000004f add.l r2, r3, 0x4f
+ 38: R_D30V_32 .text
+ 40: 880820c0 80000050 add.l r2, r3, 0x50
+ 40: R_D30V_32 .text
+
+0+0048 <__foo>:
+ 48: 12345678 12345678 .long 0x12345678 || .long 0x12345678
+ 50: 12345678 00000000 .long 0x12345678 || bra.s r0
diff --git a/gas/testsuite/gas/d30v/array.s b/gas/testsuite/gas/d30v/array.s
new file mode 100644
index 00000000000..3a187dd5afa
--- /dev/null
+++ b/gas/testsuite/gas/d30v/array.s
@@ -0,0 +1,15 @@
+# D30V array test
+ .text
+ add r2, r3 , __foo
+ add r2, r3 , __foo+1
+ add r2, r3 , __foo+2
+ add r2, r3 , __foo+3
+ add r2, r3 , __foo+4
+ add r2, r3 , __foo+5
+ add r2, r3 , __foo+6
+ add r2, r3 , __foo+7
+ add r2, r3 , __foo+8
+__foo:
+ .int 0x12345678
+ .int 0x12345678
+ .int 0x12345678
diff --git a/gas/testsuite/gas/d30v/bittest.d b/gas/testsuite/gas/d30v/bittest.d
new file mode 100644
index 00000000000..b96ab46cb84
--- /dev/null
+++ b/gas/testsuite/gas/d30v/bittest.d
@@ -0,0 +1,20 @@
+#objdump: -dr
+#name: D30V bittest opt
+#as: -WO
+
+.*: +file format elf32-d30v
+
+Disassembly of section .text:
+
+00000000 <.text>:
+ 0: 00f00000 84401083 nop -> ldw.s r1, @\(r2, r3\)
+ 8: 04406144 00f00000 ldw.s r6, @\(r5, r4\) || nop
+ 10: 00f00000 82201083 nop -> bset r1, r2, r3
+ 18: 80f00000 02001083 nop <- btst f1, r2, r3
+ 20: 00f00000 02301083 nop || bclr r1, r2, r3
+ 28: 00f00000 82101083 nop -> bnot r1, r2, r3
+ 30: 02101083 80f00000 bnot r1, r2, r3 -> nop
+ 38: 047c0105 02201083 moddec r4, 0x5 || bset r1, r2, r3
+ 40: 02201083 847c0105 bset r1, r2, r3 -> moddec r4, 0x5
+ 48: 02201083 08c04146 bset r1, r2, r3 || joinll.s r4, r5, r6
+ 50: 02201083 08c04146 bset r1, r2, r3 || joinll.s r4, r5, r6 \ No newline at end of file
diff --git a/gas/testsuite/gas/d30v/bittest.l b/gas/testsuite/gas/d30v/bittest.l
new file mode 100644
index 00000000000..75d1b7ed544
--- /dev/null
+++ b/gas/testsuite/gas/d30v/bittest.l
@@ -0,0 +1,56 @@
+.*: Assembler messages:
+.*: Warning: Swapping instruction order
+.*: Warning: Executing bset in IU may not work
+.*: Warning: Executing btst in IU may not work
+.*: Warning: Executing bclr in IU may not work
+.*: Warning: Executing bnot in IU may not work
+.*: Warning: Executing bset in IU may not work
+.*: Warning: Swapping instruction order
+GAS LISTING .*
+
+
+ 1 # bittest.s
+ 2 #
+ 3 # Bit operation instructions \(BCLR, BNOT, BSET, BTST\) should not be placed in IU.
+ 4 # If the user specifically indicates they should be in the IU, GAS will
+ 5 # generate warnings. The reason why this is not an error is that those instructions
+ 6 # will fail in IU only occasionally. Thus GAS should pack them in MU for
+ 7 # safety, and it just needs to draw attention when a violation is given.
+ 8
+ 9
+ 10 0000 00F00000 nop -> ldw R1, @\(R2,R3\)
+ 10 84401083
+ 11 0008 04406144 nop || ldw R6, @\(R5,R4\)
+.* Warning:Swapping instruction order
+ 11 00F00000
+ 12
+ 13 0010 00F00000 nop -> BSET R1, R2, R3
+.* Warning:Executing bset in IU may not work
+ 13 82201083
+ 14 0018 80F00000 nop <- BTST F1, R2, R3
+.* Warning:Executing btst in IU may not work
+ 14 02001083
+ 15 0020 00F00000 nop || BCLR R1, R2, R3
+.* Warning:Executing bclr in IU may not work
+ 15 02301083
+ 16 0028 00F00000 nop -> BNOT R1, R2, R3
+.* Warning:Executing bnot in IU may not work
+ 16 82101083
+ 17 0030 02101083 BNOT r1, r2, r3 -> nop
+ 17 80F00000
+ 18
+ 19 0038 047C0105 bset r1, r2, r3 || moddec r4, 5
+.* Warning:Swapping instruction order
+ 19 02201083
+ 20
+ 21 bset r1, r2, r3
+ 22 0040 02201083 moddec r4, 5
+ 22 847C0105
+ 23
+ 24 bset r1, r2, r3
+ 25 0048 02201083 joinll r4, r5, r6
+ 25 88C04146
+ 26
+ 27 joinll r4, r5, r6
+ 28 0050 82201083 bset r1, r2, r3
+ 28 08C04146
diff --git a/gas/testsuite/gas/d30v/bittest.s b/gas/testsuite/gas/d30v/bittest.s
new file mode 100644
index 00000000000..b79a56c95cd
--- /dev/null
+++ b/gas/testsuite/gas/d30v/bittest.s
@@ -0,0 +1,28 @@
+# bittest.s
+#
+# Bit operation instructions (BCLR, BNOT, BSET, BTST) should not be placed in IU.
+# If the user specifically indicates they should be in the IU, GAS will
+# generate warnings. The reason why this is not an error is that those instructions
+# will fail in IU only occasionally. Thus GAS should pack them in MU for
+# safety, and it just needs to draw attention when a violation is given.
+
+
+ nop -> ldw R1, @(R2,R3)
+ nop || ldw R6, @(R5,R4)
+
+ nop -> BSET R1, R2, R3
+ nop <- BTST F1, R2, R3
+ nop || BCLR R1, R2, R3
+ nop -> BNOT R1, R2, R3
+ BNOT r1, r2, r3 -> nop
+
+ bset r1, r2, r3 || moddec r4, 5
+
+ bset r1, r2, r3
+ moddec r4, 5
+
+ bset r1, r2, r3
+ joinll r4, r5, r6
+
+ joinll r4, r5, r6
+ bset r1, r2, r3
diff --git a/gas/testsuite/gas/d30v/d30.exp b/gas/testsuite/gas/d30v/d30.exp
new file mode 100644
index 00000000000..275b0e06df1
--- /dev/null
+++ b/gas/testsuite/gas/d30v/d30.exp
@@ -0,0 +1,35 @@
+#
+# D30V assembler tests
+#
+
+proc run_list_test { name opts } {
+ global srcdir subdir
+ set testname "D30V $name"
+ set file $srcdir/$subdir/$name
+ gas_run ${name}.s $opts ">&dump.out"
+ if {[regexp_diff "dump.out" "${file}.l"] } {
+ fail $testname
+ verbose "output is [file_contents "dump.out"]" 2
+ return
+ }
+ pass $testname
+}
+
+if {[istarget d30v-*-*]} {
+ run_dump_test "inst"
+ run_dump_test "align"
+ run_dump_test "guard"
+ run_dump_test "guard-debug"
+ run_dump_test "reloc"
+ run_dump_test "opt"
+ run_dump_test "array"
+ run_dump_test "label"
+ run_list_test "warn_oddreg" "-al"
+ run_list_test "bittest" "-al"
+ run_dump_test "bittest"
+ run_list_test "serial" "-al"
+ run_list_test "serial2" "-al"
+ run_list_test "serial2O" "-al -O"
+ run_dump_test "mul"
+}
+
diff --git a/gas/testsuite/gas/d30v/guard-debug.d b/gas/testsuite/gas/d30v/guard-debug.d
new file mode 100644
index 00000000000..e9a154c851c
--- /dev/null
+++ b/gas/testsuite/gas/d30v/guard-debug.d
@@ -0,0 +1,25 @@
+#objdump: -ldr
+#name: D30V debug (-g) test
+#as: -g
+
+.*: +file format elf32-d30v
+
+Disassembly of section .text:
+
+00000000 <.text>:
+.*:[0-9]+
+ 0: 08001083 00f00000 add.s r1, r2, r3 || nop
+.*:[0-9]+
+ 8: 08001083 00f00000 add.s r1, r2, r3 || nop
+.*:[0-9]+
+ 10: 18001083 00f00000 add.s/tx r1, r2, r3 || nop
+.*:[0-9]+
+ 18: 28001083 00f00000 add.s/fx r1, r2, r3 || nop
+.*:[0-9]+
+ 20: 38001083 00f00000 add.s/xt r1, r2, r3 || nop
+.*:[0-9]+
+ 28: 48001083 00f00000 add.s/xf r1, r2, r3 || nop
+.*:[0-9]+
+ 30: 58001083 00f00000 add.s/tt r1, r2, r3 || nop
+.*:[0-9]+
+ 38: 68001083 00f00000 add.s/tf r1, r2, r3 || nop
diff --git a/gas/testsuite/gas/d30v/guard-debug.s b/gas/testsuite/gas/d30v/guard-debug.s
new file mode 100644
index 00000000000..3f20f7b187d
--- /dev/null
+++ b/gas/testsuite/gas/d30v/guard-debug.s
@@ -0,0 +1,17 @@
+# Same as guard.s but here we are testing debug (-g) assembly
+# On the D30V, assembling with -g should disable the VLIW packing
+# and put only one instruction per line.
+
+ .text
+
+ add r1,r2,r3
+ add/al r1,r2,r3
+ add/tx r1,r2,r3
+ add/fx r1,r2,r3
+ add/xt r1,r2,r3
+ add/xf r1,r2,r3
+ add/tt r1,r2,r3
+ add/tf r1,r2,r3
+
+
+
diff --git a/gas/testsuite/gas/d30v/guard.d b/gas/testsuite/gas/d30v/guard.d
new file mode 100644
index 00000000000..0cfa2da7ae7
--- /dev/null
+++ b/gas/testsuite/gas/d30v/guard.d
@@ -0,0 +1,17 @@
+#objdump: -dr
+#name: D30V guarded execution test
+#as:
+
+.*: +file format elf32-d30v
+
+Disassembly of section .text:
+
+0+0000 <.text>:
+ 0: 08001083 88001083 add.s r1, r2, r3 -> add.s r1, r2, r3
+ 8: 18001083 a8001083 add.s/tx r1, r2, r3 -> add.s/fx r1, r2, r3
+ 10: 38001083 c8001083 add.s/xt r1, r2, r3 -> add.s/xf r1, r2, r3
+ 18: 58001083 e8001083 add.s/tt r1, r2, r3 -> add.s/tf r1, r2, r3
+ 20: 08001083 88001083 add.s r1, r2, r3 -> add.s r1, r2, r3
+ 28: 18001083 a8001083 add.s/tx r1, r2, r3 -> add.s/fx r1, r2, r3
+ 30: 38001083 c8001083 add.s/xt r1, r2, r3 -> add.s/xf r1, r2, r3
+ 38: 58001083 e8001083 add.s/tt r1, r2, r3 -> add.s/tf r1, r2, r3
diff --git a/gas/testsuite/gas/d30v/guard.s b/gas/testsuite/gas/d30v/guard.s
new file mode 100644
index 00000000000..ed9cd30bb4c
--- /dev/null
+++ b/gas/testsuite/gas/d30v/guard.s
@@ -0,0 +1,24 @@
+# D30V guarded execution assembly test
+
+ .text
+
+ add r1,r2,r3
+ add/al r1,r2,r3
+ add/tx r1,r2,r3
+ add/fx r1,r2,r3
+ add/xt r1,r2,r3
+ add/xf r1,r2,r3
+ add/tt r1,r2,r3
+ add/tf r1,r2,r3
+
+# check case sensitivity too
+ ADD r1,r2,r3
+ ADD/AL r1,r2,r3
+ ADD/tx r1,r2,r3
+ add/FX r1,r2,r3
+ ADD/XT r1,r2,r3
+ ADD/XF r1,r2,r3
+ add/TT r1,r2,r3
+ ADD/tf r1,r2,r3
+
+
diff --git a/gas/testsuite/gas/d30v/inst.d b/gas/testsuite/gas/d30v/inst.d
new file mode 100644
index 00000000000..9861cbf6cf2
--- /dev/null
+++ b/gas/testsuite/gas/d30v/inst.d
@@ -0,0 +1,256 @@
+#objdump: -dr
+#name: D30V basic instruction test
+#as:
+
+.*: +file format elf32-d30v
+
+Disassembly of section .text:
+
+00000000 <start>:
+ 0: 08815a80 88001083 abs r21, r42 -> add.s r1, r2, r3
+ 8: 080b2cda 00f00000 add.s r50, r51, 0x1a || nop
+ 10: 880b2cf7 8ab1beef add.l r50, r51, 0xdeadbeef
+ 18: 08101083 881b2cda add2h.s r1, r2, r3 -> add2h.s r50, r51, 0x1a
+ 20: 881b2cf7 8ab1beef add2h.l r50, r51, 0xdeadbeef
+ 28: 08401083 884b2cda addc.s r1, r2, r3 -> addc.s r50, r51, 0x1a
+ 30: 884b2cf7 8ab1beef addc.l r50, r51, 0xdeadbeef
+ 38: 09001083 890b2cda addhlll.s r1, r2, r3 -> addhlll.s r50, r51, 0x1a
+ 40: 890b2cf7 8ab1beef addhlll.l r50, r51, 0xdeadbeef
+ 48: 09101083 891b2cda addhllh.s r1, r2, r3 -> addhllh.s r50, r51, 0x1a
+ 50: 891b2cf7 8ab1beef addhllh.l r50, r51, 0xdeadbeef
+ 58: 09201083 892b2cda addhlhl.s r1, r2, r3 -> addhlhl.s r50, r51, 0x1a
+ 60: 892b2cf7 8ab1beef addhlhl.l r50, r51, 0xdeadbeef
+ 68: 09301083 893b2cda addhlhh.s r1, r2, r3 -> addhlhh.s r50, r51, 0x1a
+ 70: 893b2cf7 8ab1beef addhlhh.l r50, r51, 0xdeadbeef
+ 78: 09401083 894b2cda addhhll.s r1, r2, r3 -> addhhll.s r50, r51, 0x1a
+ 80: 894b2cf7 8ab1beef addhhll.l r50, r51, 0xdeadbeef
+ 88: 09501083 895b2cda addhhlh.s r1, r2, r3 -> addhhlh.s r50, r51, 0x1a
+ 90: 895b2cf7 8ab1beef addhhlh.l r50, r51, 0xdeadbeef
+ 98: 09601083 896b2cda addhhhl.s r1, r2, r3 -> addhhhl.s r50, r51, 0x1a
+ a0: 896b2cf7 8ab1beef addhhhl.l r50, r51, 0xdeadbeef
+ a8: 09701083 897b2cda addhhhh.s r1, r2, r3 -> addhhhh.s r50, r51, 0x1a
+ b0: 897b2cf7 8ab1beef addhhhh.l r50, r51, 0xdeadbeef
+ b8: 08601083 886b2cda adds.s r1, r2, r3 -> adds.s r50, r51, 0x1a
+ c0: 886b2cf7 8ab1beef adds.l r50, r51, 0xdeadbeef
+ c8: 08701083 887b2cda adds2h.s r1, r2, r3 -> adds2h.s r50, r51, 0x1a
+ d0: 887b2cf7 8ab1beef adds2h.l r50, r51, 0xdeadbeef
+ d8: 03801083 838b2cda and.s r1, r2, r3 -> and.s r50, r51, 0x1a
+ e0: 838b2cf7 8ab1beef and.l r50, r51, 0xdeadbeef
+ e8: 02800042 82883105 andfg f0, f1, f2 -> andfg f3, s, 0x5
+ f0: 08a01083 88a84146 avg.s r1, r2, r3 -> avg.s r4, r5, 0x6
+ f8: 88ab2cf7 8ab1beef avg.l r50, r51, 0xdeadbeef
+ 100: 08b01083 88b84146 avg2h.s r1, r2, r3 -> avg2h.s r4, r5, 0x6
+ 108: 88bb2cf7 8ab1beef avg2h.l r50, r51, 0xdeadbeef
+ 110: 02301083 82384146 bclr r1, r2, r3 -> bclr r4, r5, 0x6
+ 118: 02101083 82185cc6 bnot r1, r2, r3 -> bnot r5, r51, 0x6
+ 120: 00000029 00f00000 bra.s r41 || nop
+ 128: 00080008 00f00000 bra.s 40 \(168 <start\+0x168>\) || nop
+ 130: 00081e01 00f00000 bra.s f008 \(f138 <start\+0xf138>\) || nop
+ 138: 0046902a 00f00000 bratnz.s r41, r42 || nop
+ 140: 804c1000 8000f00d bratnz.l r1, f00d \(f14d <start\+0xf14d>\)
+ 148: 804c1037 8ab1f00d bratnz.l r1, -21520ff3 \(deadf155 <start\+0xdeadf155>\)
+ 150: 0042902a 00f00000 bratzr.s r41, r42 || nop
+ 158: 80481000 8000f00d bratzr.l r1, f00d \(f165 <start\+0xf165>\)
+ 160: 80481037 8ab1f00d bratzr.l r1, -21520ff3 \(deadf16d <start\+0xdeadf16d>\)
+ 168: 02201083 82285cc6 bset r1, r2, r3 -> bset r5, r51, 0x6
+ 170: 00200029 00f00000 bsr.s r41 || nop
+ 178: 00281e01 00f00000 bsr.s f008 \(f180 <start\+0xf180>\) || nop
+ 180: 80280037 8ab1f00d bsr.l -21520ff3 \(deadf18d <start\+0xdeadf18d>\)
+ 188: 0066902a 00f00000 bsrtnz.s r41, r42 || nop
+ 190: 806c1000 8000f00d bsrtnz.l r1, f00d \(f19d <start\+0xf19d>\)
+ 198: 806c1037 8ab1f00d bsrtnz.l r1, -21520ff3 \(deadf1a5 <start\+0xdeadf1a5>\)
+ 1a0: 0062902a 00f00000 bsrtzr.s r41, r42 || nop
+ 1a8: 80681000 8000f00d bsrtzr.l r1, f00d \(f1b5 <start\+0xf1b5>\)
+ 1b0: 80681037 8ab1f00d bsrtzr.l r1, -21520ff3 \(deadf1bd <start\+0xdeadf1bd>\)
+ 1b8: 02001083 82085cc6 btst f1, r2, r3 -> btst v, r51, 0x6
+ 1c0: 02c000c1 82c09515 cmpeq.s f0, r3, r1 -> cmpne.s f1, r20, r21
+ 1c8: 02c127e0 82c1b0c4 cmpgt.s f2, r31, r32 -> cmpge.s f3, r3, r4
+ 1d0: 02c240c4 82c2d0c4 cmplt.s s, r3, r4 -> cmple.s v, r3, r4
+ 1d8: 02c360c4 82c3f0c4 cmpps.s va, r3, r4 -> cmpng.s c, r3, r4
+ 1e0: 02d127e0 82d1b0c4 cmpugt.s f2, r31, r32 -> cmpuge.s f3, r3, r4
+ 1e8: 02d240c4 82d2d0c4 cmpult.s s, r3, r4 -> cmpule.s v, r3, r4
+ 1f0: 01001008 81081020 dbra.s r1, r8 -> dbra.s r1, 100 \(2f0 <start\+0x2f0>\)
+ 1f8: 81081037 8ab1f00d dbra.l r1, -21520ff3 \(deadf205 <start\+0xdeadf205>\)
+ 200: 0140201f 81482020 dbrai.s 10, r31 -> dbrai.s 10, 100 \(300 <start\+0x300>\)
+ 208: 81482037 8ab1f00d dbrai.l 10, -21520ff3 \(deadf215 <start\+0xdeadf215>\)
+ 210: 01201008 00f00000 dbsr.s r1, r8 || nop
+ 218: 01281020 00f00000 dbsr.s r1, 100 \(318 <start\+0x318>\) || nop
+ 220: 81281037 8ab1f00d dbsr.l r1, -21520ff3 \(deadf22d <start\+0xdeadf22d>\)
+ 228: 0160401f 00f00000 dbsri.s 20, r31 || nop
+ 230: 01684020 00f00000 dbsri.s 20, 100 \(330 <start\+0x330>\) || nop
+ 238: 81684037 8ab1f00d dbsri.l 20, -21520ff3 \(deadf245 <start\+0xdeadf245>\)
+ 240: 01101020 00f00000 djmp.s r1, r32 || nop
+ 248: 81181000 8000f00d djmp.l r1, f00d <start\+0xf00d>
+ 250: 81181037 8ab1f00d djmp.l r1, deadf00d <start\+0xdeadf00d>
+ 258: 01506020 00f00000 djmpi.s 30, r32 || nop
+ 260: 81586000 8000f00d djmpi.l 30, f00d <start\+0xf00d>
+ 268: 81586037 8ab1f00d djmpi.l 30, deadf00d <start\+0xdeadf00d>
+ 270: 01301020 00f00000 djsr.s r1, r32 || nop
+ 278: 81381000 8000f00d djsr.l r1, f00d <start\+0xf00d>
+ 280: 81381037 8ab1f00d djsr.l r1, deadf00d <start\+0xdeadf00d>
+ 288: 01702020 00f00000 djsri.s 10, r32 || nop
+ 290: 81784000 8000f00d djsri.l 20, f00d <start\+0xf00d>
+ 298: 81788037 8ab1f00d djsri.l 40, deadf00d <start\+0xdeadf00d>
+ 2a0: 00100029 00f00000 jmp.s r41 || nop
+ 2a8: 00181e01 00f00000 jmp.s f008 <start\+0xf008> || nop
+ 2b0: 80180037 8ab1f00d jmp.l deadf00d <start\+0xdeadf00d>
+ 2b8: 0056902a 00f00000 jmptnz.s r41, r42 || nop
+ 2c0: 805c1000 8000f00d jmptnz.l r1, f00d <start\+0xf00d>
+ 2c8: 805c1037 8ab1f00d jmptnz.l r1, deadf00d <start\+0xdeadf00d>
+ 2d0: 0052902a 00f00000 jmptzr.s r41, r42 || nop
+ 2d8: 80581000 8000f00d jmptzr.l r1, f00d <start\+0xf00d>
+ 2e0: 80581037 8ab1f00d jmptzr.l r1, deadf00d <start\+0xdeadf00d>
+ 2e8: 08c01084 88c8108f joinll.s r1, r2, r4 -> joinll.s r1, r2, 0xf
+ 2f0: 88c810b7 8ab1f00d joinll.l r1, r2, 0xdeadf00d
+ 2f8: 08d01084 88d8108f joinlh.s r1, r2, r4 -> joinlh.s r1, r2, 0xf
+ 300: 88d810b7 8ab1f00d joinlh.l r1, r2, 0xdeadf00d
+ 308: 08e01084 88e8108f joinhl.s r1, r2, r4 -> joinhl.s r1, r2, 0xf
+ 310: 88e810b7 8ab1f00d joinhl.l r1, r2, 0xdeadf00d
+ 318: 08f01084 88f8108f joinhh.s r1, r2, r4 -> joinhh.s r1, r2, 0xf
+ 320: 88f810b7 8ab1f00d joinhh.l r1, r2, 0xdeadf00d
+ 328: 00300029 00f00000 jsr.s r41 || nop
+ 330: 00381e01 00f00000 jsr.s f008 <start\+0xf008> || nop
+ 338: 80380037 8ab1f00d jsr.l deadf00d <start\+0xdeadf00d>
+ 340: 0076902a 00f00000 jsrtnz.s r41, r42 || nop
+ 348: 807c1000 8000f00d jsrtnz.l r1, f00d <start\+0xf00d>
+ 350: 807c1037 8ab1f00d jsrtnz.l r1, deadf00d <start\+0xdeadf00d>
+ 358: 0072902a 00f00000 jsrtzr.s r41, r42 || nop
+ 360: 80781000 8000f00d jsrtzr.l r1, f00d <start\+0xf00d>
+ 368: 80781037 8ab1f00d jsrtzr.l r1, deadf00d <start\+0xdeadf00d>
+ 370: 043061c8 843461c8 ld2h.s r6, @\(r7, r8\) -> ld2h.s r6, @\(r7\+, r8\)
+ 378: 043c61c8 843861da ld2h.s r6, @\(r7-, r8\) -> ld2h.s r6, @\(r7, 0x1a\)
+ 380: 843861c0 80001234 ld2h.l r6, @\(r7, 0x1234\)
+ 388: 046061c8 846461c8 ld2w.s r6, @\(r7, r8\) -> ld2w.s r6, @\(r7\+, r8\)
+ 390: 046c61c8 846861da ld2w.s r6, @\(r7-, r8\) -> ld2w.s r6, @\(r7, 0x1a\)
+ 398: 846861c0 80001234 ld2w.l r6, @\(r7, 0x1234\)
+ 3a0: 045061c8 845461c8 ld4bh.s r6, @\(r7, r8\) -> ld4bh.s r6, @\(r7\+, r8\)
+ 3a8: 045c61c8 845861da ld4bh.s r6, @\(r7-, r8\) -> ld4bh.s r6, @\(r7, 0x1a\)
+ 3b0: 845861c0 80001234 ld4bh.l r6, @\(r7, 0x1234\)
+ 3b8: 04d061c8 84d461c8 ld4bhu.s r6, @\(r7, r8\) -> ld4bhu.s r6, @\(r7\+, r8\)
+ 3c0: 04dc61c8 84d861da ld4bhu.s r6, @\(r7-, r8\) -> ld4bhu.s r6, @\(r7, 0x1a\)
+ 3c8: 84d861c0 80001234 ld4bhu.l r6, @\(r7, 0x1234\)
+ 3d0: 040061c8 840461c8 ldb.s r6, @\(r7, r8\) -> ldb.s r6, @\(r7\+, r8\)
+ 3d8: 040c61c8 840861da ldb.s r6, @\(r7-, r8\) -> ldb.s r6, @\(r7, 0x1a\)
+ 3e0: 840861c0 80001234 ldb.l r6, @\(r7, 0x1234\)
+ 3e8: 049061c8 849461c8 ldbu.s r6, @\(r7, r8\) -> ldbu.s r6, @\(r7\+, r8\)
+ 3f0: 049c61c8 849861da ldbu.s r6, @\(r7-, r8\) -> ldbu.s r6, @\(r7, 0x1a\)
+ 3f8: 849861c0 80001234 ldbu.l r6, @\(r7, 0x1234\)
+ 400: 042061c8 842461c8 ldh.s r6, @\(r7, r8\) -> ldh.s r6, @\(r7\+, r8\)
+ 408: 042c61c8 842861da ldh.s r6, @\(r7-, r8\) -> ldh.s r6, @\(r7, 0x1a\)
+ 410: 842861c0 80001234 ldh.l r6, @\(r7, 0x1234\)
+ 418: 041061c8 841461c8 ldhh.s r6, @\(r7, r8\) -> ldhh.s r6, @\(r7\+, r8\)
+ 420: 041c61c8 841861da ldhh.s r6, @\(r7-, r8\) -> ldhh.s r6, @\(r7, 0x1a\)
+ 428: 841861c0 80001234 ldhh.l r6, @\(r7, 0x1234\)
+ 430: 04a061c8 84a461c8 ldhu.s r6, @\(r7, r8\) -> ldhu.s r6, @\(r7\+, r8\)
+ 438: 04ac61c8 84a861da ldhu.s r6, @\(r7-, r8\) -> ldhu.s r6, @\(r7, 0x1a\)
+ 440: 84a861c0 80001234 ldhu.l r6, @\(r7, 0x1234\)
+ 448: 044061c8 844461c8 ldw.s r6, @\(r7, r8\) -> ldw.s r6, @\(r7\+, r8\)
+ 450: 044c61c8 844861da ldw.s r6, @\(r7-, r8\) -> ldw.s r6, @\(r7, 0x1a\)
+ 458: 844861c0 80001234 ldw.l r6, @\(r7, 0x1234\)
+ 460: 8b48109f 0b401084 mac0 r1, r2, 0x1f <- mac0 r1, r2, r4
+ 468: 8b4c109f 0b441084 mac1 r1, r2, 0x1f <- mac1 r1, r2, r4
+ 470: 8b58109f 0b501084 macs0 r1, r2, 0x1f <- macs0 r1, r2, r4
+ 478: 8b5c109f 0b541084 macs1 r1, r2, 0x1f <- macs1 r1, r2, r4
+ 480: 047c004a 8474004a moddec r1, 0xa -> modinc r1, 0xa
+ 488: 8b68109f 0b601084 msub0 r1, r2, 0x1f <- msub0 r1, r2, r4
+ 490: 8b6c109f 0b641084 msub1 r1, r2, 0x1f <- msub1 r1, r2, r4
+ 498: 8b08108a 0b001084 mul r1, r2, 0xa <- mul r1, r2, r4
+ 4a0: 8b78109f 0b701084 msubs0 r1, r2, 0x1f <- msubs0 r1, r2, r4
+ 4a8: 8b7c109f 0b741084 msubs1 r1, r2, 0x1f <- msubs1 r1, r2, r4
+ 4b0: 00f00000 00f00000 nop || nop
+ 4b8: 8a08108a 0a001084 mul2h r1, r2, 0xa <- mul2h r1, r2, r4
+ 4c0: 8a48108a 0a401084 mulhxll r1, r2, 0xa <- mulhxll r1, r2, r4
+ 4c8: 8a58108a 0a501084 mulhxlh r1, r2, 0xa <- mulhxlh r1, r2, r4
+ 4d0: 8a68108a 0a601084 mulhxhl r1, r2, 0xa <- mulhxhl r1, r2, r4
+ 4d8: 8a78108a 0a701084 mulhxhh r1, r2, 0xa <- mulhxhh r1, r2, r4
+ 4e0: 8b900044 0a108084 mulxs a0, r1, r4 <- mulx2h r8, r2, r4
+ 4e8: 8b88108a 0b800044 mulx a1, r2, 0xa <- mulx a0, r1, r4
+ 4f0: 8bf8204a 0bf01004 mvfacc r2, a1, 0xa <- mvfacc r1, a0, r4
+ 4f8: 8b98108a 0a18808a mulxs a1, r2, 0xa <- mulx2h r8, r2, 0xa
+ 500: 01e0a080 81e0a1c0 mvfsys r10, pc -> mvfsys r10, rpt_c
+ 508: 01e0a000 81e0a002 mvfsys r10, psw -> mvfsys r10, pswh
+ 510: 01e0a001 81e0a003 mvfsys r10, pswl -> mvfsys r10, f0
+ 518: 01e0a103 8af01084 mvfsys r10, s -> mvtacc a1, r2, r4
+ 520: 00e07280 80e00280 mvtsys rpt_c, r10 -> mvtsys psw, r10
+ 528: 00e00282 80e00281 mvtsys pswh, r10 -> mvtsys pswl, r10
+ 530: 00e00283 80e03283 mvtsys f0, r10 -> mvtsys f3, r10
+ 538: 00e04283 80e05283 mvtsys s, r10 -> mvtsys v, r10
+ 540: 00e06283 80e07283 mvtsys va, r10 -> mvtsys c, r10
+ 548: 00f00000 83901080 nop -> not r1, r2
+ 550: 02901080 83a01084 notfg f1, f2 -> or.s r1, r2, r4
+ 558: 03a8109a 00f00000 or.s r1, r2, 0x1a || nop
+ 560: 83a810b7 8ab1f00d or.l r1, r2, 0xdeadf00d
+ 568: 02a01084 82a84081 orfg f1, f2, s -> orfg s, f2, 0x1
+ 570: 00800000 00f00000 reit || nop
+ 578: 01801002 00f00000 repeat.s r1, r2 || nop
+ 580: 81884000 8000dead repeat.l r4, dead \(e42d <start\+0xe42d>\)
+ 588: 81884037 8ab1f00d repeat.l r4, -21520ff3 \(deadf595 <start\+0xdeadf595>\)
+ 590: 01a0a001 81a8a200 repeati.s a \(59a <start\+0x59a>\), r1 -> repeati.s a \(59a <start\+0x59a>\), 1000 \(1590 <start\+0x1590>\)
+ 598: 00f00000 00f00000 nop || nop
+ 5a0: 03401084 8348108a rot r1, r2, r4 -> rot r1, r2, 0xa
+ 5a8: 03501084 8358108a rot2h r1, r2, r4 -> rot2h r1, r2, 0xa
+ 5b0: 8a88108a 0a801084 sat r1, r2, 0xa <- sat r1, r2, r4
+ 5b8: 8a98108a 0a901084 sat2h r1, r2, 0xa <- sat2h r1, r2, r4
+ 5c0: 8bc8108a 0bc01084 sathl r1, r2, 0xa <- sathl r1, r2, r4
+ 5c8: 8bd8108a 0bd01084 sathh r1, r2, 0xa <- sathh r1, r2, r4
+ 5d0: 8aa8108a 0aa01084 satz r1, r2, 0xa <- satz r1, r2, r4
+ 5d8: 8ab8108a 0ab01084 satz2h r1, r2, 0xa <- satz2h r1, r2, r4
+ 5e0: 03001084 8308108a sra r1, r2, r4 -> sra r1, r2, 0xa
+ 5e8: 03101084 8318108a sra2h r1, r2, r4 -> sra2h r1, r2, 0xa
+ 5f0: 03601084 8368108a src r1, r2, r4 -> src r1, r2, 0xa
+ 5f8: 03201084 8328108a srl r1, r2, r4 -> srl r1, r2, 0xa
+ 600: 03301084 8338108a srl2h r1, r2, r4 -> srl2h r1, r2, 0xa
+ 608: 053061c8 853461c8 st2h.s r6, @\(r7, r8\) -> st2h.s r6, @\(r7\+, r8\)
+ 610: 053c61c8 853861da st2h.s r6, @\(r7-, r8\) -> st2h.s r6, @\(r7, 0x1a\)
+ 618: 853861c0 80001234 st2h.l r6, @\(r7, 0x1234\)
+ 620: 056061c8 856461c8 st2w.s r6, @\(r7, r8\) -> st2w.s r6, @\(r7\+, r8\)
+ 628: 056c61c8 856861da st2w.s r6, @\(r7-, r8\) -> st2w.s r6, @\(r7, 0x1a\)
+ 630: 856861c0 80001234 st2w.l r6, @\(r7, 0x1234\)
+ 638: 055061c8 855461c8 st4hb.s r6, @\(r7, r8\) -> st4hb.s r6, @\(r7\+, r8\)
+ 640: 055c61c8 855861da st4hb.s r6, @\(r7-, r8\) -> st4hb.s r6, @\(r7, 0x1a\)
+ 648: 855861c0 80001234 st4hb.l r6, @\(r7, 0x1234\)
+ 650: 050061c8 850461c8 stb.s r6, @\(r7, r8\) -> stb.s r6, @\(r7\+, r8\)
+ 658: 050c61c8 850861da stb.s r6, @\(r7-, r8\) -> stb.s r6, @\(r7, 0x1a\)
+ 660: 850861c0 80001234 stb.l r6, @\(r7, 0x1234\)
+ 668: 052061c8 852461c8 sth.s r6, @\(r7, r8\) -> sth.s r6, @\(r7\+, r8\)
+ 670: 052c61c8 852861da sth.s r6, @\(r7-, r8\) -> sth.s r6, @\(r7, 0x1a\)
+ 678: 852861c0 80001234 sth.l r6, @\(r7, 0x1234\)
+ 680: 051061c8 851461c8 sthh.s r6, @\(r7, r8\) -> sthh.s r6, @\(r7\+, r8\)
+ 688: 051c61c8 851861da sthh.s r6, @\(r7-, r8\) -> sthh.s r6, @\(r7, 0x1a\)
+ 690: 851861c0 80001234 sthh.l r6, @\(r7, 0x1234\)
+ 698: 054061c8 854461c8 stw.s r6, @\(r7, r8\) -> stw.s r6, @\(r7\+, r8\)
+ 6a0: 054c61c8 854861da stw.s r6, @\(r7-, r8\) -> stw.s r6, @\(r7, 0x1a\)
+ 6a8: 854861c0 80001234 stw.l r6, @\(r7, 0x1234\)
+ 6b0: 08201083 882b2cda sub.s r1, r2, r3 -> sub.s r50, r51, 0x1a
+ 6b8: 882b2cf7 8ab1beef sub.l r50, r51, 0xdeadbeef
+ 6c0: 08301083 883b2cda sub2h.s r1, r2, r3 -> sub2h.s r50, r51, 0x1a
+ 6c8: 883b2cf7 8ab1beef sub2h.l r50, r51, 0xdeadbeef
+ 6d0: 08501083 885b2cda subb.s r1, r2, r3 -> subb.s r50, r51, 0x1a
+ 6d8: 885b2cf7 8ab1beef subb.l r50, r51, 0xdeadbeef
+ 6e0: 09801083 898b2cda subhlll.s r1, r2, r3 -> subhlll.s r50, r51, 0x1a
+ 6e8: 898b2cf7 8ab1beef subhlll.l r50, r51, 0xdeadbeef
+ 6f0: 09901083 899b2cda subhllh.s r1, r2, r3 -> subhllh.s r50, r51, 0x1a
+ 6f8: 899b2cf7 8ab1beef subhllh.l r50, r51, 0xdeadbeef
+ 700: 09a01083 89ab2cda subhlhl.s r1, r2, r3 -> subhlhl.s r50, r51, 0x1a
+ 708: 89ab2cf7 8ab1beef subhlhl.l r50, r51, 0xdeadbeef
+ 710: 09b01083 89bb2cda subhlhh.s r1, r2, r3 -> subhlhh.s r50, r51, 0x1a
+ 718: 89bb2cf7 8ab1beef subhlhh.l r50, r51, 0xdeadbeef
+ 720: 09c01083 89cb2cda subhhll.s r1, r2, r3 -> subhhll.s r50, r51, 0x1a
+ 728: 89cb2cf7 8ab1beef subhhll.l r50, r51, 0xdeadbeef
+ 730: 09d01083 89db2cda subhhlh.s r1, r2, r3 -> subhhlh.s r50, r51, 0x1a
+ 738: 89db2cf7 8ab1beef subhhlh.l r50, r51, 0xdeadbeef
+ 740: 09e01083 89eb2cda subhhhl.s r1, r2, r3 -> subhhhl.s r50, r51, 0x1a
+ 748: 89eb2cf7 8ab1beef subhhhl.l r50, r51, 0xdeadbeef
+ 750: 09f01083 89fb2cda subhhhh.s r1, r2, r3 -> subhhhh.s r50, r51, 0x1a
+ 758: 89fb2cf7 8ab1beef subhhhh.l r50, r51, 0xdeadbeef
+ 760: 00900001 00f00000 trap.s r1 || nop
+ 768: 0098000a 00f00000 trap.s 0xa || nop
+ 770: 03b01084 83b8108a xor.s r1, r2, r4 -> xor.s r1, r2, 0xa
+ 778: 83b810b7 8ab1f00d xor.l r1, r2, 0xdeadf00d
+ 780: 02b01084 82b8110a xorfg f1, f2, s -> xorfg f1, s, 0xa
+ 788: 00f00000 80f00000 nop -> nop
+ 790: 00f00000 80f00000 nop -> nop
+ 798: 00f00000 00f00000 nop || nop
+ 7a0: 80f00000 00f00000 nop <- nop
+ 7a8: 03901080 00f00000 not r1, r2 || nop
+ 7b0: 039020c0 80f00000 not r2, r3 -> nop
diff --git a/gas/testsuite/gas/d30v/inst.s b/gas/testsuite/gas/d30v/inst.s
new file mode 100644
index 00000000000..ee6611eb117
--- /dev/null
+++ b/gas/testsuite/gas/d30v/inst.s
@@ -0,0 +1,504 @@
+# test all instructions
+
+start:
+ abs r21,r42
+
+ add r1,r2,r3
+ add r50,r51,0x1a
+ add r50,r51,0xdeadbeef
+
+ add2h r1,r2,r3
+ add2h r50,r51,0x1a
+ add2h r50,r51,0xdeadbeef
+
+ addc r1,r2,r3
+ addc r50,r51,0x1a
+ addc r50,r51,0xdeadbeef
+
+ addhlll r1,r2,r3
+ addhlll r50,r51,0x1a
+ addhlll r50,r51,0xdeadbeef
+
+ addhllh r1,r2,r3
+ addhllh r50,r51,0x1a
+ addhllh r50,r51,0xdeadbeef
+
+ addhlhl r1,r2,r3
+ addhlhl r50,r51,0x1a
+ addhlhl r50,r51,0xdeadbeef
+
+ addhlhh r1,r2,r3
+ addhlhh r50,r51,0x1a
+ addhlhh r50,r51,0xdeadbeef
+
+ addhhll r1,r2,r3
+ addhhll r50,r51,0x1a
+ addhhll r50,r51,0xdeadbeef
+
+ addhhlh r1,r2,r3
+ addhhlh r50,r51,0x1a
+ addhhlh r50,r51,0xdeadbeef
+
+ addhhhl r1,r2,r3
+ addhhhl r50,r51,0x1a
+ addhhhl r50,r51,0xdeadbeef
+
+ addhhhh r1,r2,r3
+ addhhhh r50,r51,0x1a
+ addhhhh r50,r51,0xdeadbeef
+
+ adds r1,r2,r3
+ adds r50,r51,0x1a
+ adds r50,r51,0xdeadbeef
+
+ adds2h r1,r2,r3
+ adds2h r50,r51,0x1a
+ adds2h r50,r51,0xdeadbeef
+
+ and r1,r2,r3
+ and r50,r51,0x1a
+ and r50,r51,0xdeadbeef
+
+ andfg f0,f1,f2
+ andfg f3,f4,5
+
+ avg r1,r2,r3
+ avg r4,r5,6
+ avg r50,r51,0xdeadbeef
+
+ avg2h r1,r2,r3
+ avg2h r4,r5,6
+ avg2h r50,r51,0xdeadbeef
+
+ bclr r1,r2,r3
+ bclr r4,r5,6
+
+ bnot r1,r2,r3
+ bnot r5,r51,6
+
+ bra r41
+ bra 0x40
+ bra 0xf00d
+
+ bratnz r41,r42
+ bratnz r1,0xf00d
+ bratnz r1,0xdeadf00d
+
+ bratzr r41,r42
+ bratzr r1,0xf00d
+ bratzr r1,0xdeadf00d
+
+ bset r1,r2,r3
+ bset r5,r51,6
+
+ bsr r41
+ bsr 0xf00d
+ bsr 0xdeadf00d
+
+ bsrtnz r41,r42
+ bsrtnz r1,0xf00d
+ bsrtnz r1,0xdeadf00d
+
+ bsrtzr r41,r42
+ bsrtzr r1,0xf00d
+ bsrtzr r1,0xdeadf00d
+
+ btst f1,r2,r3
+ btst f5,r51,6
+
+ cmpeq f0,r3,r1
+ cmpne f1,r20,r21
+ cmpgt f2,r31,r32
+ cmpge f3,r3,r4
+ cmplt f4,r3,r4
+ cmple f5,r3,r4
+ cmpps f6,r3,r4
+ cmpng f7,r3,r4
+
+ cmpugt f2,r31,r32
+ cmpuge f3,r3,r4
+ cmpult f4,r3,r4
+ cmpule f5,r3,r4
+
+ dbra r1,r8
+ dbra r1,0x100
+ dbra r1,0xdeadf00d
+
+ dbrai 0x10,r31
+ dbrai 0x10,0x100
+ dbrai 0x10,0xdeadf00d
+
+ dbsr r1,r8 || nop
+ dbsr r1,0x100 || nop
+ dbsr r1,0xdeadf00d
+
+ dbsri 0x20,r31 || nop
+ dbsri 0x20,0x100 || nop
+ dbsri 0x20,0xdeadf00d
+
+ djmp r1,r32
+ djmp r1,0xf00d
+ djmp r1,0xdeadf00d
+
+ djmpi 0x30,r32
+ djmpi 0x30,0xf00d
+ djmpi 0x30,0xdeadf00d
+
+ djsr r1,r32
+ djsr r1,0xf00d
+ djsr r1,0xdeadf00d
+
+ djsri 0x10,r32
+ djsri 0x20,0xf00d
+ djsri 0x40,0xdeadf00d
+
+ jmp r41
+ jmp 0xf00d
+ jmp 0xdeadf00d
+
+ jmptnz r41,r42
+ jmptnz r1,0xf00d
+ jmptnz r1,0xdeadf00d
+
+ jmptzr r41,r42
+ jmptzr r1,0xf00d
+ jmptzr r1,0xdeadf00d
+
+ joinll r1,r2,r4
+ joinll r1,r2,0xf
+ joinll r1,r2,0xdeadf00d
+
+ joinlh r1,r2,r4
+ joinlh r1,r2,0xf
+ joinlh r1,r2,0xdeadf00d
+
+ joinhl r1,r2,r4
+ joinhl r1,r2,0xf
+ joinhl r1,r2,0xdeadf00d
+
+ joinhh r1,r2,r4
+ joinhh r1,r2,0xf
+ joinhh r1,r2,0xdeadf00d
+
+ jsr r41
+ jsr 0xf00d
+ jsr 0xdeadf00d
+
+ jsrtnz r41,r42
+ jsrtnz r1,0xf00d
+ jsrtnz r1,0xdeadf00d
+
+ jsrtzr r41,r42
+ jsrtzr r1,0xf00d
+ jsrtzr r1,0xdeadf00d
+
+ ld2h r6,@(r7,r8)
+ ld2h r6,@(r7+,r8)
+ ld2h r6,@(r7-,r8)
+ ld2h r6,@(r7,0x1a)
+ ld2h r6,@(r7,0x1234)
+
+ ld2w r6,@(r7,r8)
+ ld2w r6,@(r7+,r8)
+ ld2w r6,@(r7-,r8)
+ ld2w r6,@(r7,0x1a)
+ ld2w r6,@(r7,0x1234)
+
+ ld4bh r6,@(r7,r8)
+ ld4bh r6,@(r7+,r8)
+ ld4bh r6,@(r7-,r8)
+ ld4bh r6,@(r7,0x1a)
+ ld4bh r6,@(r7,0x1234)
+
+ ld4bhu r6,@(r7,r8)
+ ld4bhu r6,@(r7+,r8)
+ ld4bhu r6,@(r7-,r8)
+ ld4bhu r6,@(r7,0x1a)
+ ld4bhu r6,@(r7,0x1234)
+
+ ldb r6,@(r7,r8)
+ ldb r6,@(r7+,r8)
+ ldb r6,@(r7-,r8)
+ ldb r6,@(r7,0x1a)
+ ldb r6,@(r7,0x1234)
+
+ ldbu r6,@(r7,r8)
+ ldbu r6,@(r7+,r8)
+ ldbu r6,@(r7-,r8)
+ ldbu r6,@(r7,0x1a)
+ ldbu r6,@(r7,0x1234)
+
+ ldh r6,@(r7,r8)
+ ldh r6,@(r7+,r8)
+ ldh r6,@(r7-,r8)
+ ldh r6,@(r7,0x1a)
+ ldh r6,@(r7,0x1234)
+
+ ldhh r6,@(r7,r8)
+ ldhh r6,@(r7+,r8)
+ ldhh r6,@(r7-,r8)
+ ldhh r6,@(r7,0x1a)
+ ldhh r6,@(r7,0x1234)
+
+ ldhu r6,@(r7,r8)
+ ldhu r6,@(r7+,r8)
+ ldhu r6,@(r7-,r8)
+ ldhu r6,@(r7,0x1a)
+ ldhu r6,@(r7,0x1234)
+
+ ldw r6,@(r7,r8)
+ ldw r6,@(r7+,r8)
+ ldw r6,@(r7-,r8)
+ ldw r6,@(r7,0x1a)
+ ldw r6,@(r7,0x1234)
+
+ mac0 r1,r2,r4
+ mac0 r1,r2,0x1f
+ mac1 r1,r2,r4
+ mac1 r1,r2,0x1f
+
+ macs0 r1,r2,r4
+ macs0 r1,r2,0x1f
+ macs1 r1,r2,r4
+ macs1 r1,r2,0x1f
+
+ moddec r1,0xa
+
+ modinc r1,0xa
+
+ msub0 r1,r2,r4
+ msub0 r1,r2,0x1f
+ msub1 r1,r2,r4
+ msub1 r1,r2,0x1f
+
+ mul r1,r2,r4
+ mul r1,r2,0xa
+
+ msubs0 r1,r2,r4
+ msubs0 r1,r2,0x1f
+ msubs1 r1,r2,r4
+ msubs1 r1,r2,0x1f
+
+ mul2h r1,r2,r4
+ mul2h r1,r2,0xa
+
+ mulhxll r1,r2,r4
+ mulhxll r1,r2,0xa
+
+ mulhxlh r1,r2,r4
+ mulhxlh r1,r2,0xa
+
+ mulhxhl r1,r2,r4
+ mulhxhl r1,r2,0xa
+
+ mulhxhh r1,r2,r4
+ mulhxhh r1,r2,0xa
+
+ mulx2h r8,r2,r4
+ mulxs a0,r1,r4
+
+ mulx a0,r1,r4
+ mulx a1,r2,0xa
+
+ mvfacc r1,a0,r4
+ mvfacc r2,a1,0xa
+
+ mulx2h r8,r2,0xa
+ mulxs a1,r2,0xa
+
+ mvfsys r10,pc
+ mvfsys r10,rpt_c
+ mvfsys r10,psw
+ mvfsys r10,pswh
+ mvfsys r10,pswl
+ mvfsys r10,f0
+ mvfsys r10,S
+
+ mvtacc a1,r2,r4
+
+ mvtsys rpt_c, r10
+ mvtsys psw, r10
+ mvtsys pswh, r10
+ mvtsys pswl, r10
+ mvtsys f0, r10
+ mvtsys f3, r10
+ mvtsys S, r10
+ mvtsys V, r10
+ mvtsys VA, r10
+ mvtsys C, r10
+
+ nop
+
+ not r1,r2
+
+ notfg f1,f2
+
+ or r1,r2,r4
+ or r1,r2,0x1a
+ or r1,r2,0xdeadf00d
+
+ orfg f1,f2,f4
+ orfg f4,f2,0x1
+
+ reit
+
+ repeat r1,r2
+ repeat r4,0xdead
+ repeat r4,0xdeadf00d
+
+ repeati 0xa,r1
+ repeati 0xa,0x1001
+
+ nop || nop
+
+ rot r1,r2,r4
+ rot r1,r2,0xa
+
+ rot2h r1,r2,r4
+ rot2h r1,r2,0xa
+
+ sat r1,r2,r4
+ sat r1,r2,0xa
+
+ sat2h r1,r2,r4
+ sat2h r1,r2,0xa
+
+ sathl r1,r2,r4
+ sathl r1,r2,0xa
+
+ sathh r1,r2,r4
+ sathh r1,r2,0xa
+
+ satz r1,r2,r4
+ satz r1,r2,0xa
+
+ satz2h r1,r2,r4
+ satz2h r1,r2,0xa
+
+ sra r1,r2,r4
+ sra r1,r2,0xa
+
+ sra2h r1,r2,r4
+ sra2h r1,r2,0xa
+
+ src r1,r2,r4
+ src r1,r2,0xa
+
+ srl r1,r2,r4
+ srl r1,r2,0xa
+
+ srl2h r1,r2,r4
+ srl2h r1,r2,0xa
+
+
+ st2h r6,@(r7,r8)
+ st2h r6,@(r7+,r8)
+ st2h r6,@(r7-,r8)
+ st2h r6,@(r7,0x1a)
+ st2h r6,@(r7,0x1234)
+
+ st2w r6,@(r7,r8)
+ st2w r6,@(r7+,r8)
+ st2w r6,@(r7-,r8)
+ st2w r6,@(r7,0x1a)
+ st2w r6,@(r7,0x1234)
+
+ st4hb r6,@(r7,r8)
+ st4hb r6,@(r7+,r8)
+ st4hb r6,@(r7-,r8)
+ st4hb r6,@(r7,0x1a)
+ st4hb r6,@(r7,0x1234)
+
+ stb r6,@(r7,r8)
+ stb r6,@(r7+,r8)
+ stb r6,@(r7-,r8)
+ stb r6,@(r7,0x1a)
+ stb r6,@(r7,0x1234)
+
+ sth r6,@(r7,r8)
+ sth r6,@(r7+,r8)
+ sth r6,@(r7-,r8)
+ sth r6,@(r7,0x1a)
+ sth r6,@(r7,0x1234)
+
+ sthh r6,@(r7,r8)
+ sthh r6,@(r7+,r8)
+ sthh r6,@(r7-,r8)
+ sthh r6,@(r7,0x1a)
+ sthh r6,@(r7,0x1234)
+
+ stw r6,@(r7,r8)
+ stw r6,@(r7+,r8)
+ stw r6,@(r7-,r8)
+ stw r6,@(r7,0x1a)
+ stw r6,@(r7,0x1234)
+
+ sub r1,r2,r3
+ sub r50,r51,0x1a
+ sub r50,r51,0xdeadbeef
+
+ sub2h r1,r2,r3
+ sub2h r50,r51,0x1a
+ sub2h r50,r51,0xdeadbeef
+
+ subb r1,r2,r3
+ subb r50,r51,0x1a
+ subb r50,r51,0xdeadbeef
+
+ subhlll r1,r2,r3
+ subhlll r50,r51,0x1a
+ subhlll r50,r51,0xdeadbeef
+
+ subhllh r1,r2,r3
+ subhllh r50,r51,0x1a
+ subhllh r50,r51,0xdeadbeef
+
+ subhlhl r1,r2,r3
+ subhlhl r50,r51,0x1a
+ subhlhl r50,r51,0xdeadbeef
+
+ subhlhh r1,r2,r3
+ subhlhh r50,r51,0x1a
+ subhlhh r50,r51,0xdeadbeef
+
+ subhhll r1,r2,r3
+ subhhll r50,r51,0x1a
+ subhhll r50,r51,0xdeadbeef
+
+ subhhlh r1,r2,r3
+ subhhlh r50,r51,0x1a
+ subhhlh r50,r51,0xdeadbeef
+
+ subhhhl r1,r2,r3
+ subhhhl r50,r51,0x1a
+ subhhhl r50,r51,0xdeadbeef
+
+ subhhhh r1,r2,r3
+ subhhhh r50,r51,0x1a
+ subhhhh r50,r51,0xdeadbeef
+
+ trap r1
+ trap 0xa
+
+ xor r1,r2,r4
+ xor r1,r2,0xa
+ xor r1,r2,0xdeadf00d
+
+ xorfg f1,f2,f4
+ xorfg f1,f4,0xa
+
+# VLIW syntax test
+ nop
+ nop
+ nop -> nop
+ nop || nop
+ nop <- nop
+
+# try changing sections
+ not r1,r2
+ .section .foo
+ add r10,r12,6
+ .text
+ not r2,r3
+ nop
+ \ No newline at end of file
diff --git a/gas/testsuite/gas/d30v/label-debug.d b/gas/testsuite/gas/d30v/label-debug.d
new file mode 100644
index 00000000000..e429f81e0f4
--- /dev/null
+++ b/gas/testsuite/gas/d30v/label-debug.d
@@ -0,0 +1,24 @@
+#objdump: -ldr
+#name: D30V debug (-g) test
+#as: -g
+
+.*: +file format elf32-d30v
+
+Disassembly of section .text:
+
+00000000 <_abc-0x18>:
+.*label-debug.s:4
+ 0: 10080003 00f00000 bra.s\/tx 18 \(18 <_abc>\) \|\| nop
+.*label-debug.s:5
+ 8: 00f00000 00f00000 nop || nop
+ 10: 0e000004 00f00000 .long 0xe000004 || nop
+
+00000018 <_abc>:
+.*label-debug.s:8
+ 18: 00f00000 00f00000 nop || nop
+.*label-debug.s:9
+ 20: 00f00000 00f00000 nop || nop
+.*label-debug.s:10
+ 28: 00f00000 00f00000 nop || nop
+.*label-debug.s:11
+ 30: 00f00000 00f00000 nop || nop
diff --git a/gas/testsuite/gas/d30v/label-debug.s b/gas/testsuite/gas/d30v/label-debug.s
new file mode 100644
index 00000000000..9640aa49bd7
--- /dev/null
+++ b/gas/testsuite/gas/d30v/label-debug.s
@@ -0,0 +1,11 @@
+# labels should be aligned on 8-byte boundries
+
+ .text
+ bra.s/tx _abc || nop
+ nop || nop
+ .word 0x0e000004
+_abc:
+ nop
+ nop
+ nop
+ nop
diff --git a/gas/testsuite/gas/d30v/label.d b/gas/testsuite/gas/d30v/label.d
new file mode 100644
index 00000000000..66cfcdab740
--- /dev/null
+++ b/gas/testsuite/gas/d30v/label.d
@@ -0,0 +1,16 @@
+#objdump: -dr
+#name: D30V label alignment test
+#as:
+
+.*: +file format elf32-d30v
+
+Disassembly of section .text:
+
+00000000 <_abc-0x18>:
+ 0: 10080003 00f00000 bra.s/tx 18 (18 <_abc>) || nop
+ 8: 00f00000 00f00000 nop || nop
+ 10: 0e000004 00f00000 .long 0xe000004 || nop
+
+00000018 <_abc>:
+ 18: 00f00000 80f00000 nop -> nop
+ 20: 00f00000 80f00000 nop -> nop
diff --git a/gas/testsuite/gas/d30v/label.s b/gas/testsuite/gas/d30v/label.s
new file mode 100644
index 00000000000..9640aa49bd7
--- /dev/null
+++ b/gas/testsuite/gas/d30v/label.s
@@ -0,0 +1,11 @@
+# labels should be aligned on 8-byte boundries
+
+ .text
+ bra.s/tx _abc || nop
+ nop || nop
+ .word 0x0e000004
+_abc:
+ nop
+ nop
+ nop
+ nop
diff --git a/gas/testsuite/gas/d30v/mul.d b/gas/testsuite/gas/d30v/mul.d
new file mode 100644
index 00000000000..04e0a550b15
--- /dev/null
+++ b/gas/testsuite/gas/d30v/mul.d
@@ -0,0 +1,20 @@
+#objdump: -dr
+#name: D30V alignment test
+#as: -WO
+
+.*: +file format elf32-d30v
+
+Disassembly of section .text:
+
+00000000 <.text>:
+ 0: 8a105187 0a1020c4 mulx2h r5, r6, r7 <- mulx2h r2, r3, r4
+ 8: 00f00000 0a10824a nop || mulx2h r8, r9, r10
+ 10: 00f00000 0a10b30d nop || mulx2h r11, r12, r13
+ 18: 8a111493 0a10e3d0 mulx2h r17, r18, r19 <- mulx2h r14, r15, r16
+ 20: 8a117619 0a114556 mulx2h r23, r24, r25 <- mulx2h r20, r21, r22
+ 28: 8b01d79f 0a11a6dc mul r29, r30, r31 <- mulx2h r26, r27, r28
+ 30: 8b005187 0b0020c4 mul r5, r6, r7 <- mul r2, r3, r4
+ 38: 8a10b30d 0a10824a mulx2h r11, r12, r13 <- mulx2h r8, r9, r10
+ 40: 80f00000 0b00e3d0 nop <- mul r14, r15, r16
+ 48: 00f00000 0a111493 nop || mulx2h r17, r18, r19
+ 50: 8b017619 0a114556 mul r23, r24, r25 <- mulx2h r20, r21, r22
diff --git a/gas/testsuite/gas/d30v/mul.s b/gas/testsuite/gas/d30v/mul.s
new file mode 100644
index 00000000000..fe678595067
--- /dev/null
+++ b/gas/testsuite/gas/d30v/mul.s
@@ -0,0 +1,19 @@
+# One of the rule on restricted sequence is consecutive IU instruction
+# IU: MUL, MAC, MACS, MSUB, MSUBS (a)
+# IU: MULHXpp, MULX2H, MUL2H (b)
+# This means that instructions in group (a) and in (b) should not be executed
+# in IU in consecutive cycles in the order (a)->(b). It does neither prohibit
+# executions in the reverse order (b)-> (a) nor consecutive execution of
+# group (a)->(a) or (b)->(b)
+
+ mulx2h r5,r6,r7 <- mulx2h r2,r3,r4
+ nop || mulx2h r8,r9,r10
+ nop || mulx2h r11,r12,r13
+ mulx2h r14,r15,r16
+ mulx2h r17,r18,r19
+ mulx2h r23,r24,r25 <- mulx2h r20,r21,r22
+ mul r29,r30,r31 <- mulx2h r26,r27,r28
+ mul r5, r6, r7 <- mul r2, r3, r4
+ mulx2h r11, r12, r13 <- mulx2h r8, r9, r10
+ mulx2h r17, r18, r19 <- mul r14, r15, r16
+ mul r23, r24, r25 <- mulx2h r20, r21, r22
diff --git a/gas/testsuite/gas/d30v/opt.d b/gas/testsuite/gas/d30v/opt.d
new file mode 100644
index 00000000000..b4bfa9c12fd
--- /dev/null
+++ b/gas/testsuite/gas/d30v/opt.d
@@ -0,0 +1,89 @@
+#objdump: -dr
+#name: D30V optimization test
+#as: -O
+
+.*: +file format elf32-d30v
+
+Disassembly of section .text:
+
+00000000 <start>:
+ 0: 08801080 08803100 abs r1, r2 || abs r3, r4
+ 8: 02900100 02901080 notfg f0, s || notfg f1, f2
+ 10: 08801080 02901080 abs r1, r2 || notfg f1, f2
+ 18: 08001083 82907000 add.s r1, r2, r3 -> notfg c, f0
+ 20: 08001083 829001c0 add.s r1, r2, r3 -> notfg f0, c
+ 28: 00080000 00f00000 bra.s 0 \(28 <start\+0x28>\) || nop
+ 30: 08801080 88801080 abs r1, r2 -> abs r1, r2
+ 38: 00080000 00f00000 bra.s 0 \(38 <start\+0x38>\) || nop
+ 40: 002bffff 00f00000 bsr.s -8 \(38 <start\+0x38>\) || nop
+ 48: 08801080 88801080 abs r1, r2 -> abs r1, r2
+ 50: 00280000 08801080 bsr.s 0 \(50 <start\+0x50>\) || abs r1, r2
+ 58: 04001083 85007209 ldb.s r1, @\(r2, r3\) -> stb.s r7, @\(r8, r9\)
+ 60: 05007209 84001083 stb.s r7, @\(r8, r9\) -> ldb.s r1, @\(r2, r3\)
+ 68: 04007209 84001083 ldb.s r7, @\(r8, r9\) -> ldb.s r1, @\(r2, r3\)
+ 70: 05007209 85001083 stb.s r7, @\(r8, r9\) -> stb.s r1, @\(r2, r3\)
+ 78: 080030c6 854820c0 add.s r3, r3, r6 -> stw.s r2, @\(r3, 0x0\)
+ 80: 02c28105 90180000 cmple.s f0, r4, r5 -> jmp.s/tx 0 <start>
+ 88: 02c28105 a0180000 cmple.s f0, r4, r5 -> jmp.s/fx 0 <start>
+ 90: 30180000 02c28105 jmp.s/xt 0 <start> || cmple.s f0, r4, r5
+ 98: 40180000 02c28105 jmp.s/xf 0 <start> || cmple.s f0, r4, r5
+ a0: 02c28105 d0180000 cmple.s f0, r4, r5 -> jmp.s/tt 0 <start>
+ a8: 02c28105 e0180000 cmple.s f0, r4, r5 -> jmp.s/tf 0 <start>
+ b0: 10180000 02c29105 jmp.s/tx 0 <start> || cmple.s f1, r4, r5
+ b8: 02c29105 b0180000 cmple.s f1, r4, r5 -> jmp.s/xt 0 <start>
+ c0: 08084001 82c28105 add.s r4, r0, 0x1 -> cmple.s f0, r4, r5
+ c8: 08084001 02c280c5 add.s r4, r0, 0x1 || cmple.s f0, r3, r5
+ d0: 04604006 886054d4 ld2w.s r4, @\(r0, r6\) -> adds.s r5, r19, r20
+ d8: 04604006 88603154 ld2w.s r4, @\(r0, r6\) -> adds.s r3, r5, r20
+ e0: 04604006 086064d4 ld2w.s r4, @\(r0, r6\) || adds.s r6, r19, r20
+ e8: 04604006 086074d4 ld2w.s r4, @\(r0, r6\) || adds.s r7, r19, r20
+ f0: 04604006 08607014 ld2w.s r4, @\(r0, r6\) || adds.s r7, r0, r20
+ f8: 05604006 086054d4 st2w.s r4, @\(r0, r6\) || adds.s r5, r19, r20
+ 100: 05604006 08603154 st2w.s r4, @\(r0, r6\) || adds.s r3, r5, r20
+ 108: 05604006 086064d4 st2w.s r4, @\(r0, r6\) || adds.s r6, r19, r20
+ 110: 05604006 086074d4 st2w.s r4, @\(r0, r6\) || adds.s r7, r19, r20
+ 118: 05604006 08607014 st2w.s r4, @\(r0, r6\) || adds.s r7, r0, r20
+ 120: 0560a0c4 85628aec st2w.s r10, @\(r3, r4\) -> st2w.s r40, @\(r43, r44\)
+ 128: 05401083 84429aab stw.s r1, @\(r2, r3\) -> ldw.s r41, @\(r42, r43\)
+ 130: 04401083 84029aab ldw.s r1, @\(r2, r3\) -> ldb.s r41, @\(r42, r43\)
+ 138: 0444418b 88689182 ldw.s r4, @\(r6\+, r11\) -> adds.s r9, r6, 0x2
+ 140: 044c418b 08689182 ldw.s r4, @\(r6-, r11\) || adds.s r9, r6, 0x2
+ 148: 054c418b 88689182 stw.s r4, @\(r6-, r11\) -> adds.s r9, r6, 0x2
+ 150: 0440418b 08689182 ldw.s r4, @\(r6, r11\) || adds.s r9, r6, 0x2
+ 158: 0440418b 08689182 ldw.s r4, @\(r6, r11\) || adds.s r9, r6, 0x2
+ 160: 00180000 00f00000 jmp.s 0 <start> || nop
+ 168: 00380000 08801080 jsr.s 0 <start> || abs r1, r2
+ 170: 08801080 00f00000 abs r1, r2 || nop
+ 178: 00080000 00f00000 bra.s 0 \(178 <start\+0x178>\) || nop
+ 180: 00280000 08801080 bsr.s 0 \(180 <start\+0x180>\) || abs r1, r2
+ 188: 08801080 00f00000 abs r1, r2 || nop
+
+00000190 <label1>:
+ 190: 05602083 89004146 st2w.s r2, @\(r2, r3\) -> addhlll.s r4, r5, r6
+
+00000198 <label2>:
+ 198: 05508209 8990a2cc st4hb.s r8, @\(r8, r9\) -> subhllh.s r10, r11, r12
+
+000001a0 <label3>:
+ 1a0: 0460e38f 8a610452 ld2w.s r14, @\(r14, r15\) -> mulhxhl r16, r17, r18
+
+000001a8 <label4>:
+ 1a8: 04413515 8a1165d8 ldw.s r19, @\(r20, r21\) -> mulx2h r22, r23, r24
+
+000001b0 <label5>:
+ 1b0: 0421969b 8a01c75e ldh.s r25, @\(r26, r27\) -> mul2h r28, r29, r30
+
+000001b8 <label6>:
+ 1b8: 80f00000 0b001083 nop <- mul r1, r2, r3
+ 1c0: 08007209 0a404146 add.s r7, r8, r9 || mulhxll r4, r5, r6
+
+000001c8 <label7>:
+ 1c8: 04405180 0b0020c4 ldw.s r5, @\(r6, r0\) || mul r2, r3, r4
+ 1d0: 80f00000 0b007209 nop <- mul r7, r8, r9
+ 1d8: 0440a2c0 00f00000 ldw.s r10, @\(r11, r0\) || nop
+ 1e0: 80f00000 0b00c34e nop <- mul r12, r13, r14
+ 1e8: 0440f400 0b4420c4 ldw.s r15, @\(r16, r0\) || mac1 r2, r3, r4
+ 1f0: 00f00000 00f00000 nop || nop
+ 1f8: 04405180 00f00000 ldw.s r5, @\(r6, r0\) || nop
+ 200: 80f00000 0b407209 nop <- mac0 r7, r8, r9
+ 208: 0440a2c0 8440a2c0 ldw.s r10, @\(r11, r0\) -> ldw.s r10, @\(r11, r0\)
diff --git a/gas/testsuite/gas/d30v/opt.s b/gas/testsuite/gas/d30v/opt.s
new file mode 100644
index 00000000000..573330027ec
--- /dev/null
+++ b/gas/testsuite/gas/d30v/opt.s
@@ -0,0 +1,216 @@
+# D30V parallel optimization test
+# assemble with "-O"
+
+ .text
+start:
+ abs r1,r2
+ abs r3,r4
+
+ notfg f0,f4
+ notfg f1,f2
+
+ abs r1,r2
+ notfg f1,f2
+
+# both change C flag
+ add r1,r2,r3
+ notfg C,f0
+
+# one uses and one changes C flag
+ add r1,r2,r3
+ notfg f0,C
+
+ bra .
+ abs r1,r2
+
+ abs r1,r2
+ bra .
+
+ bsr .
+ abs r1,r2
+
+ abs r1,r2
+ abs r1,r2
+ bsr .
+
+ ldb r1,@(r2,r3)
+ stb r7,@(r8,r9)
+
+ stb r7,@(r8,r9)
+ ldb r1,@(r2,r3)
+
+ ldb r7,@(r8,r9)
+ ldb r1,@(r2,r3)
+
+ stb r7,@(r8,r9)
+ stb r1,@(r2,r3)
+
+ add r3, r3, r6
+ stw r2, @(r3, 0)
+
+# should be serial because of conditional execution
+ cmple f0,r4,r5
+ jmp/tx 0x0
+
+ cmple f0,r4,r5
+ jmp/fx 0x0
+
+ cmple f0,r4,r5
+ jmp/xt 0x0
+
+ cmple f0,r4,r5
+ jmp/xf 0x0
+
+ cmple f0,r4,r5
+ jmp/tt 0x0
+
+ cmple f0,r4,r5
+ jmp/tf 0x0
+
+ cmple f1,r4,r5
+ jmp/tx 0x0
+
+ cmple f1,r4,r5
+ jmp/xt 0x0
+
+ # serial because of the r4 dependency
+ add r4, r0, 1
+ cmple f0, r4, r5
+
+ # parallel
+ add r4, r0, 1
+ cmple f0, r3, r5
+
+ # serial because ld2w loads r5
+ ld2w r4,@(r0,r6)
+ adds r5,r19,r20
+
+ # serial because ld2w loads r5
+ ld2w r4,@(r0,r6)
+ adds r3,r5,r20
+
+ # parallel even though ld2w uses r6 and adds changes it
+ ld2w r4,@(r0,r6)
+ adds r6,r19,r20
+
+ # parallel
+ ld2w r4,@(r0,r6)
+ adds r7,r19,r20
+
+ # parallel
+ ld2w r4,@(r0,r6)
+ adds r7,r0,r20
+
+ # parallel even though st2w uses r5 and adds modifies it
+ st2w r4,@(r0,r6)
+ adds r5,r19,r20
+
+ # parallel, both use but don't modify r5
+ st2w r4,@(r0,r6)
+ adds r3,r5,r20
+
+ # parallel even though st2w uses r6 and adds changes it
+ st2w r4,@(r0,r6)
+ adds r6,r19,r20
+
+ # parallel
+ st2w r4,@(r0,r6)
+ adds r7,r19,r20
+
+ # parallel
+ st2w r4,@(r0,r6)
+ adds r7,r0,r20
+
+# test memory dependencies
+
+ # always serial because one could overwrite the other
+ st2w r10,@(r3,r4)
+ st2w r40,@(r43,r44)
+
+ # always serial
+ stw r1,@(r2,r3)
+ ldw r41,@(r42,r43)
+
+ # reads can happen in parallel but the current architecture
+ # doesn't support it
+ ldw r1,@(r2,r3)
+ ldb r41,@(r42,r43)
+
+# test post increment and decrement dependencies
+
+ # serial
+ ldw r4,@(r6+,r11)
+ adds r9,r6,2
+
+ # parallel, modification to r6 happens last
+ adds r9,r6,2
+ ldw r4,@(r6-,r11)
+
+ # serial
+ stw r4,@(r6-,r11)
+ adds r9,r6,2
+
+ # parallel
+ ldw r4,@(r6,r11)
+ adds r9,r6,2
+
+ # parallel
+ adds r9,r6,2
+ ldw r4,@(r6,r11)
+
+# if the first instruction is a jmp, don't parallelize
+ jmp 0
+ abs r1,r2
+
+ jsr 0
+ abs r1,r2
+
+ .align 3
+
+ bra 0
+ abs r1,r2
+
+ bsr 0
+ abs r1,r2
+
+# Explicitly prohibited from parallel execution.
+# The labels are here to prevent instruction pairs
+# from being merged with following pairs.
+
+label1:
+ st2w r2, @(r2, r3)
+ addhlll r4, r5, r6
+label2:
+ st4hb r8, @(r8, r9)
+ subhllh r10, r11, r12
+label3:
+ ld2w r14, @(r14, r15)
+ mulhxhl r16, r17, r18
+label4:
+ ldw r19, @(r20, r21)
+ mulx2h r22, r23, r24
+label5:
+ ldh r25, @(r26, r27)
+ mul2h r28, r29, r30
+
+# Insertion of NOPs required to prevent pipeline clashes.
+
+label6:
+ mul r1,r2,r3
+ mulhxll r4,r5,r6
+ add r7, r8, r9
+label7:
+
+ mul r2,r3,r4
+ ldw r5, @(r6,r0)
+
+ ldw r10, @(r11, r0) <- mul r7,r8,r9
+
+ mul r12,r13,r14 -> ldw r15, @(r16, r0)
+
+ mac1 r2,r3,r4
+ ldw r5, @(r6,r0)
+
+ ldw r10, @(r11, r0) <- mac0 r7,r8,r9
+ ldw r10, @(r11, r0)
+
diff --git a/gas/testsuite/gas/d30v/reloc.d b/gas/testsuite/gas/d30v/reloc.d
new file mode 100644
index 00000000000..1de2780b483
--- /dev/null
+++ b/gas/testsuite/gas/d30v/reloc.d
@@ -0,0 +1,93 @@
+#objdump: -dr
+#name: D30V relocation test
+#as:
+
+.*: +file format elf32-d30v
+
+Disassembly of section .text:
+
+00000000 <start>:
+ 0: 88082000 80000028 add.l r2, r0, 0x28
+ 0: R_D30V_32 .text
+ 8: 88084000 80000000 add.l r4, r0, 0x0
+ 8: R_D30V_32 .data
+ 10: 88084000 80000006 add.l r4, r0, 0x6
+ 10: R_D30V_32 .data
+ 18: 88084000 80000000 add.l r4, r0, 0x0
+ 18: R_D30V_32 unk
+ 20: 80080000 80000018 bra.l 18 \(38 <cont>\)
+
+00000028 <hello>:
+ 28: 48656c6c 6f20576f .long 0x48656c6c || .long 0x6f20576f
+ 30: 726c640a 00f00000 .long 0x726c640a || nop
+
+00000038 <cont>:
+ 38: 80180000 80000048 jmp.l 48 <cont2>
+ 38: R_D30V_32 .text
+ 40: 088020c0 00f00000 abs r2, r3 || nop
+
+00000048 <cont2>:
+ 48: 000bfff7 00f00000 bra.s -48 \(0 <start>\) || nop
+ 50: 00080205 00f00000 bra.s 1028 \(1078 <exit>\) || nop
+ 58: 00180000 00f00000 jmp.s 0 <start> || nop
+ 60: 006c1ffb 00f00000 bsrtnz.s r1, -28 \(38 <cont>\) || nop
+ 68: 006c1ffa 00f00000 bsrtnz.s r1, -30 \(38 <cont>\) || nop
+ 70: 004c1ff9 00f00000 bratnz.s r1, -38 \(38 <cont>\) || nop
+ 78: 004c1ff8 00f00000 bratnz.s r1, -40 \(38 <cont>\) || nop
+ 80: 005c1007 00f00000 jmptnz.s r1, 38 <cont> || nop
+ 80: R_D30V_15 .text
+ 88: 006c11f1 00f00000 bsrtnz.s r1, f88 \(1010 <foo>\) || nop
+ 90: 005c1000 00f00000 jmptnz.s r1, 0 <start> || nop
+ 90: R_D30V_15 unk
+ 98: 006c1000 00f00000 bsrtnz.s r1, 0 \(98 <cont2\+0x50>\) || nop
+ 98: R_D30V_15_PCREL unk
+ a0: 805c1000 80000000 jmptnz.l r1, 0 <start>
+ a0: R_D30V_32 unk
+ a8: 806c1000 80000000 bsrtnz.l r1, 0 \(a8 <cont2\+0x60>\)
+ a8: R_D30V_32_PCREL unk
+ b0: 000801ec 00f00000 bra.s f60 \(1010 <foo>\) || nop
+ b8: 80080000 80000f58 bra.l f58 \(1010 <foo>\)
+ c0: 000bffe8 00f00000 bra.s -c0 \(0 <start>\) || nop
+ c8: 80180000 80000000 jmp.l 0 <start>
+ c8: R_D30V_32 .text
+ d0: 80180000 80000000 jmp.l 0 <start>
+ d0: R_D30V_32 .text
+ d8: 00180000 00f00000 jmp.s 0 <start> || nop
+ d8: R_D30V_21 .text
+ e0: 00180202 00f00000 jmp.s 1010 <foo> || nop
+ e0: R_D30V_21 .text
+ e8: 000bffe3 00f00000 bra.s -e8 \(0 <start>\) || nop
+ f0: 80080000 80000000 bra.l 0 \(f0 <cont2\+0xa8>\)
+ f0: R_D30V_32_PCREL unknown
+ f8: 80180000 80000000 jmp.l 0 <start>
+ f8: R_D30V_32 unknown
+ 100: 00180000 00f00000 jmp.s 0 <start> || nop
+ 100: R_D30V_21 unknown
+ 108: 00080000 00f00000 bra.s 0 \(108 <cont2\+0xc0>\) || nop
+ 108: R_D30V_21_PCREL unknown
+ ...
+
+00001010 <foo>:
+ 1010: 08001000 00f00000 add.s r1, r0, r0 || nop
+ 1018: 846bc000 80001070 ld2w.l r60, @\(r0, 0x1070\)
+ 1018: R_D30V_32 .text
+ 1020: 0803e000 8028000b add.s r62, r0, r0 -> bsr.s 58 \(1078 <exit>\)
+ 1028: 002bfffd 00f00000 bsr.s -18 \(1010 <foo>\) || nop
+ 1030: 000bfe03 00f00000 bra.s -fe8 \(48 <cont2>\) || nop
+ 1038: 000bfe02 00f00000 bra.s -ff0 \(48 <cont2>\) || nop
+ 1040: 00280007 00f00000 bsr.s 38 \(1078 <exit>\) || nop
+ 1048: 0018020f 00f00000 jmp.s 1078 <exit> || nop
+ 1048: R_D30V_21 .text
+ 1050: 0018020f 00f00000 jmp.s 1078 <exit> || nop
+ 1050: R_D30V_21 .text
+ 1058: 0018020f 00f00000 jmp.s 1078 <exit> || nop
+ 1058: R_D30V_21 .text
+ 1060: 80280000 80000018 bsr.l 18 \(1078 <exit>\)
+ 1068: 80180000 80001078 jmp.l 1078 <exit>
+ 1068: R_D30V_32 .text
+
+00001070 <longzero>:
+ ...
+
+00001078 <exit>:
+ 1078: 0010003e 00f00000 jmp.s r62 || nop
diff --git a/gas/testsuite/gas/d30v/reloc.s b/gas/testsuite/gas/d30v/reloc.s
new file mode 100644
index 00000000000..2a99bf9447e
--- /dev/null
+++ b/gas/testsuite/gas/d30v/reloc.s
@@ -0,0 +1,68 @@
+# D30V relocation test
+
+ .text
+start:
+ add r2, r0, hello
+ add r4, r0, bar
+ add r4, r0, bar2
+ add r4, r0, unk
+ bra cont
+hello: .ascii "Hello World\n"
+ .align 3
+cont: jmp cont2
+ abs r2,r3
+cont2:
+ bra start || nop
+ bra.s exit
+ jmp 0 || nop
+ bsrtnz.s r1,cont
+ bsrtnz r1,cont
+ bratnz.s r1,cont
+ bratnz r1,cont
+ jmptnz.s r1,cont
+ bsrtnz.s r1, foo
+ jmptnz.s r1, unk
+ bsrtnz.s r1, unk
+ jmptnz r1, unk
+ bsrtnz r1, unk
+ bra.s foo
+ bra foo
+ bra start
+ jmp start
+ jmp start
+ jmp.s start
+ jmp.s foo
+ bra start
+ bra unknown
+ jmp unknown
+ jmp.s unknown
+ bra.s unknown
+
+ .data
+bar: .asciz "XYZZY"
+bar2: .long 0xdeadbeef
+
+ .text
+ .space 0xF00,0
+
+foo:
+ add r1,r0,r0
+ ld2w r60, @(r0,longzero)
+ add r62,r0,r0
+ bsr.s exit
+ bsr.s foo
+ bra.s cont2
+ bra.s cont2
+ bsr.s exit
+ jmp.s exit
+ jmp.s exit
+ jmp.s exit
+ bsr exit
+ jmp exit
+
+longzero:
+ .quad 0
+
+ .text
+exit:
+ jmp r62
diff --git a/gas/testsuite/gas/d30v/serial.l b/gas/testsuite/gas/d30v/serial.l
new file mode 100644
index 00000000000..f7a5a670766
--- /dev/null
+++ b/gas/testsuite/gas/d30v/serial.l
@@ -0,0 +1,46 @@
+.*: Assembler messages:
+.*:6: Error: Unable to mix instructions as specified
+.*:7: Error: Unable to mix instructions as specified
+.*:8: Error: Unable to mix instructions as specified
+.*:9: Error: Unable to mix instructions as specified
+GAS LISTING .*
+
+
+ 1 # serial.s
+ 2 #
+ 3 # In the following examples, the right-subinstructions
+ 4 # will never be executed. GAS should detect this.
+ 5
+ 6 \?\?\?\? 000000F0 trap r21 -> add r2, r0, r0 ; right instruction will never be executed.
+\*\*\*\* Error:Unable to mix instructions as specified
+ 6 000000F0
+ 6 000000F0
+ 6 00000090
+ 6 001500F0
+ 7 \?\?\?\? 08002000 dbt -> add r2, r0, r0 ; ditto
+\*\*\*\* Error:Unable to mix instructions as specified
+ 7 00F00000
+ 7 00B00000
+ 7 00F00000
+ 8 \?\?\?\? 08002000 rtd -> add r2, r0, r0 ; ditto
+\*\*\*\* Error:Unable to mix instructions as specified
+ 8 00F00000
+ 8 00A00000
+ 8 00F00000
+ 9 \?\?\?\? 08002000 reit -> add r2, r0, r0 ; ditto
+\*\*\*\* Error:Unable to mix instructions as specified
+ 9 00F00000
+ 9 00800000
+ 9 00F00000
+ 10 \?\?\?\? 08002000 mvtsys psw, r1 -> add r2, r0, r0 ; OK
+ 10 00F00000
+ 10 00E00040
+ 10 88002000
+ 11 \?\?\?\? 00E00042 mvtsys pswh, r1 -> add r2, r0, r0 ; OK
+ 11 88002000
+ 12 \?\?\?\? 00E00041 mvtsys pswl, r1 -> add r2, r0, r0 ; OK
+ 12 88002000
+ 13 \?\?\?\? 00E00043 mvtsys f0, r1 -> add r2, r0, r0 ; OK
+ 13 88002000
+ 14 \?\?\?\? 00E0A040 mvtsys mod_s, r1 -> add r2, r0, r0 ; OK
+ 14 88002000
diff --git a/gas/testsuite/gas/d30v/serial.s b/gas/testsuite/gas/d30v/serial.s
new file mode 100644
index 00000000000..0995d634b84
--- /dev/null
+++ b/gas/testsuite/gas/d30v/serial.s
@@ -0,0 +1,14 @@
+# serial.s
+#
+# In the following examples, the right-subinstructions
+# will never be executed. GAS should detect this.
+
+ trap r21 -> add r2, r0, r0 ; right instruction will never be executed.
+ dbt -> add r2, r0, r0 ; ditto
+ rtd -> add r2, r0, r0 ; ditto
+ reit -> add r2, r0, r0 ; ditto
+ mvtsys psw, r1 -> add r2, r0, r0 ; OK
+ mvtsys pswh, r1 -> add r2, r0, r0 ; OK
+ mvtsys pswl, r1 -> add r2, r0, r0 ; OK
+ mvtsys f0, r1 -> add r2, r0, r0 ; OK
+ mvtsys mod_s, r1 -> add r2, r0, r0 ; OK
diff --git a/gas/testsuite/gas/d30v/serial2.l b/gas/testsuite/gas/d30v/serial2.l
new file mode 100644
index 00000000000..2de04dc2dbb
--- /dev/null
+++ b/gas/testsuite/gas/d30v/serial2.l
@@ -0,0 +1,138 @@
+.*: Assembler messages:
+.*:5: Error: Unable to mix instructions as specified
+.*:6: Error: Unable to mix instructions as specified
+.*:8: Error: Unable to mix instructions as specified
+.*:9: Error: Unable to mix instructions as specified
+.*:11: Error: Unable to mix instructions as specified
+.*:12: Error: Unable to mix instructions as specified
+.*:13: Error: Unable to mix instructions as specified
+.*:14: Error: Unable to mix instructions as specified
+.*:16: Error: Unable to mix instructions as specified
+.*:17: Error: Unable to mix instructions as specified
+.*:18: Error: Unable to mix instructions as specified
+.*:19: Error: Unable to mix instructions as specified
+.*:21: Error: Unable to mix instructions as specified
+.*:22: Error: Unable to mix instructions as specified
+.*:23: Error: Unable to mix instructions as specified
+.*:24: Error: Unable to mix instructions as specified
+.*:26: Error: Unable to mix instructions as specified
+.*:27: Error: Unable to mix instructions as specified
+.*:28: Error: Unable to mix instructions as specified
+.*:29: Error: Unable to mix instructions as specified
+GAS LISTING .*
+
+
+ 1 # D30V serial execution test
+ 2
+ 3 .text
+ 4
+ 5 \?\?\?\? 000000F0 bra -3 -> add r3,r0,0 ; Invalid
+\*\*\*\* Error:Unable to mix instructions as specified
+ 5 000000F0
+ 5 000000F0
+ 5 0000000B
+ 5 FFFF00F0
+ 6 \?\?\?\? 08083000 bsr -3 -> add r3,r0,0 ; Invalid
+\*\*\*\* Error:Unable to mix instructions as specified
+ 6 00F00000
+ 6 002BFFFF
+ 6 00F00000
+ 7
+ 8 \?\?\?\? 08083000 bra/tx -3 -> add r3,r0,0 ; Valid
+\*\*\*\* Error:Unable to mix instructions as specified
+ 8 00F00000
+ 8 100BFFFF
+ 8 00F00000
+ 9 \?\?\?\? 08083000 bsr/tx -3 -> add r3,r0,0 ; Valid
+\*\*\*\* Error:Unable to mix instructions as specified
+ 9 00F00000
+ 9 102BFFFF
+ 9 00F00000
+ 10
+ 11 \?\?\?\? 08083000 bsr -3 -> bsr -10 ; Invalid
+\*\*\*\* Error:Unable to mix instructions as specified
+ 11 00F00000
+ 11 002BFFFF
+ 11 00F00000
+ 12 \?\?\?\? 002BFFFE bsr -3 -> bsr/xt -10 ; Invalid
+\*\*\*\* Error:Unable to mix instructions as specified
+ 12 00F00000
+ 12 002BFFFF
+ 12 00F00000
+ 13 \?\?\?\? 302BFFFE bsr/tx -3 -> bsr -10 ; Valid
+\*\*\*\* Error:Unable to mix instructions as specified
+ 13 00F00000
+ 13 102BFFFF
+ 13 00F00000
+ 14 \?\?\?\? 002BFFFE bsr/tx -3 -> bsr/fx -10 ; Valid
+\*\*\*\* Error:Unable to mix instructions as specified
+ 14 00F00000
+ 14 102BFFFF
+ 14 00F00000
+ 15
+ 16 \?\?\?\? 202BFFFE bra -3 -> bra 10 ; Invalid
+\*\*\*\* Error:Unable to mix instructions as specified
+ 16 00F00000
+ 16 000BFFFF
+ 16 00F00000
+ 17 \?\?\?\? 00080001 bra -3 -> bra/tx 10 ; Invalid
+\*\*\*\* Error:Unable to mix instructions as specified
+ 17 00F00000
+ 17 000BFFFF
+ GAS LISTING .*
+
+
+ 17 00F00000
+ 18 \?\?\?\? 10080001 bra/tx -3 -> bra 10 ; Valid
+\*\*\*\* Error:Unable to mix instructions as specified
+ 18 00F00000
+ 18 100BFFFF
+ 18 00F00000
+ 19 \?\?\?\? 00080001 bra/tx -3 -> bra/fx 10 ; Valid
+\*\*\*\* Error:Unable to mix instructions as specified
+ 19 00F00000
+ 19 100BFFFF
+ 19 00F00000
+ 20
+ 21 \?\?\?\? 20080001 bsr -3 -> bra 10 ; Invalid
+\*\*\*\* Error:Unable to mix instructions as specified
+ 21 00F00000
+ 21 002BFFFF
+ 21 00F00000
+ 22 \?\?\?\? 00080001 bsr -3 -> bra/tx 10 ; Invalid
+\*\*\*\* Error:Unable to mix instructions as specified
+ 22 00F00000
+ 22 002BFFFF
+ 22 00F00000
+ 23 \?\?\?\? 10080001 bsr/tx -3 -> bra 10 ; Valid
+\*\*\*\* Error:Unable to mix instructions as specified
+ 23 00F00000
+ 23 102BFFFF
+ 23 00F00000
+ 24 \?\?\?\? 00080001 bsr/tx -3 -> bra/fx 10 ; Valid
+\*\*\*\* Error:Unable to mix instructions as specified
+ 24 00F00000
+ 24 102BFFFF
+ 24 00F00000
+ 25
+ 26 \?\?\?\? 20080001 bra -3 -> bsr 10 ; Invalid
+\*\*\*\* Error:Unable to mix instructions as specified
+ 26 00F00000
+ 26 000BFFFF
+ 26 00F00000
+ 27 \?\?\?\? 00280001 bra -3 -> bsr/tx 10 ; Invalid
+\*\*\*\* Error:Unable to mix instructions as specified
+ 27 00F00000
+ 27 000BFFFF
+ 27 00F00000
+ 28 \?\?\?\? 10280001 bra/tx -3 -> bsr 10 ; Valid
+\*\*\*\* Error:Unable to mix instructions as specified
+ 28 00F00000
+ 28 100BFFFF
+ 28 00F00000
+ 29 \?\?\?\? 00280001 bra/tx -3 -> bsr/fx 10 ; Valid
+\*\*\*\* Error:Unable to mix instructions as specified
+ 29 00F00000
+ 29 100BFFFF
+ 29 00F00000
+ 29 20280001
diff --git a/gas/testsuite/gas/d30v/serial2.s b/gas/testsuite/gas/d30v/serial2.s
new file mode 100644
index 00000000000..04531590228
--- /dev/null
+++ b/gas/testsuite/gas/d30v/serial2.s
@@ -0,0 +1,29 @@
+# D30V serial execution test
+
+ .text
+
+ bra -3 -> add r3,r0,0 ; Invalid
+ bsr -3 -> add r3,r0,0 ; Invalid
+
+ bra/tx -3 -> add r3,r0,0 ; Valid
+ bsr/tx -3 -> add r3,r0,0 ; Valid
+
+ bsr -3 -> bsr -10 ; Invalid
+ bsr -3 -> bsr/xt -10 ; Invalid
+ bsr/tx -3 -> bsr -10 ; Valid
+ bsr/tx -3 -> bsr/fx -10 ; Valid
+
+ bra -3 -> bra 10 ; Invalid
+ bra -3 -> bra/tx 10 ; Invalid
+ bra/tx -3 -> bra 10 ; Valid
+ bra/tx -3 -> bra/fx 10 ; Valid
+
+ bsr -3 -> bra 10 ; Invalid
+ bsr -3 -> bra/tx 10 ; Invalid
+ bsr/tx -3 -> bra 10 ; Valid
+ bsr/tx -3 -> bra/fx 10 ; Valid
+
+ bra -3 -> bsr 10 ; Invalid
+ bra -3 -> bsr/tx 10 ; Invalid
+ bra/tx -3 -> bsr 10 ; Valid
+ bra/tx -3 -> bsr/fx 10 ; Valid
diff --git a/gas/testsuite/gas/d30v/serial2O.l b/gas/testsuite/gas/d30v/serial2O.l
new file mode 100644
index 00000000000..d9eb05cb1a9
--- /dev/null
+++ b/gas/testsuite/gas/d30v/serial2O.l
@@ -0,0 +1,99 @@
+.*: Assembler messages:
+.*:5: Error: Unable to mix instructions as specified
+.*:6: Error: Unable to mix instructions as specified
+.*:11: Error: Unable to mix instructions as specified
+.*:12: Error: Unable to mix instructions as specified
+.*:16: Error: Unable to mix instructions as specified
+.*:17: Error: Unable to mix instructions as specified
+.*:21: Error: Unable to mix instructions as specified
+.*:22: Error: Unable to mix instructions as specified
+.*:26: Error: Unable to mix instructions as specified
+.*:27: Error: Unable to mix instructions as specified
+GAS LISTING .*
+
+
+ 1 # D30V serial execution test
+ 2
+ 3 .text
+ 4
+ 5 \?\?\?\? 000000F0 bra -3 -> add r3,r0,0 ; Invalid
+\*\*\*\* Error:Unable to mix instructions as specified
+ 5 000000F0
+ 5 000000F0
+ 5 0000000B
+ 5 FFFF00F0
+ 6 \?\?\?\? 08083000 bsr -3 -> add r3,r0,0 ; Invalid
+\*\*\*\* Error:Unable to mix instructions as specified
+ 6 00F00000
+ 6 002BFFFF
+ 6 00F00000
+ 7
+ 8 \?\?\?\? 08083000 bra/tx -3 -> add r3,r0,0 ; Valid
+ 8 00F00000
+ 8 100BFFFF
+ 8 88083000
+ 9 \?\?\?\? 102BFFFF bsr/tx -3 -> add r3,r0,0 ; Valid
+ 9 88083000
+ 10
+ 11 \?\?\?\? 002BFFFF bsr -3 -> bsr -10 ; Invalid
+\*\*\*\* Error:Unable to mix instructions as specified
+ 11 00F00000
+ 12 \?\?\?\? 002BFFFE bsr -3 -> bsr/xt -10 ; Invalid
+\*\*\*\* Error:Unable to mix instructions as specified
+ 12 00F00000
+ 12 002BFFFF
+ 12 00F00000
+ 13 \?\?\?\? 302BFFFE bsr/tx -3 -> bsr -10 ; Valid
+ 13 00F00000
+ 13 102BFFFF
+ 13 802BFFFE
+ 14 \?\?\?\? 102BFFFF bsr/tx -3 -> bsr/fx -10 ; Valid
+ 14 A02BFFFE
+ 15
+ 16 \?\?\?\? 000BFFFF bra -3 -> bra 10 ; Invalid
+\*\*\*\* Error:Unable to mix instructions as specified
+ 16 00F00000
+ 17 \?\?\?\? 00080001 bra -3 -> bra/tx 10 ; Invalid
+\*\*\*\* Error:Unable to mix instructions as specified
+ 17 00F00000
+ 17 000BFFFF
+ 17 00F00000
+ 18 \?\?\?\? 10080001 bra/tx -3 -> bra 10 ; Valid
+ 18 00F00000
+ 18 100BFFFF
+ 18 80080001
+ 19 \?\?\?\? 100BFFFF bra/tx -3 -> bra/fx 10 ; Valid
+ 19 A0080001
+ 20
+ 21 \?\?\?\? 002BFFFF bsr -3 -> bra 10 ; Invalid
+\*\*\*\* Error:Unable to mix instructions as specified
+ 21 00F00000
+ 22 \?\?\?\? 00080001 bsr -3 -> bra/tx 10 ; Invalid
+ GAS LISTING .*
+
+
+\*\*\*\* Error:Unable to mix instructions as specified
+ 22 00F00000
+ 22 002BFFFF
+ 22 00F00000
+ 23 \?\?\?\? 10080001 bsr/tx -3 -> bra 10 ; Valid
+ 23 00F00000
+ 23 102BFFFF
+ 23 80080001
+ 24 \?\?\?\? 102BFFFF bsr/tx -3 -> bra/fx 10 ; Valid
+ 24 A0080001
+ 25
+ 26 \?\?\?\? 000BFFFF bra -3 -> bsr 10 ; Invalid
+\*\*\*\* Error:Unable to mix instructions as specified
+ 26 00F00000
+ 27 \?\?\?\? 00280001 bra -3 -> bsr/tx 10 ; Invalid
+\*\*\*\* Error:Unable to mix instructions as specified
+ 27 00F00000
+ 27 000BFFFF
+ 27 00F00000
+ 28 \?\?\?\? 10280001 bra/tx -3 -> bsr 10 ; Valid
+ 28 00F00000
+ 28 100BFFFF
+ 28 80280001
+ 29 \?\?\?\? 100BFFFF bra/tx -3 -> bsr/fx 10 ; Valid
+ 29 A0280001
diff --git a/gas/testsuite/gas/d30v/serial2O.s b/gas/testsuite/gas/d30v/serial2O.s
new file mode 100644
index 00000000000..04531590228
--- /dev/null
+++ b/gas/testsuite/gas/d30v/serial2O.s
@@ -0,0 +1,29 @@
+# D30V serial execution test
+
+ .text
+
+ bra -3 -> add r3,r0,0 ; Invalid
+ bsr -3 -> add r3,r0,0 ; Invalid
+
+ bra/tx -3 -> add r3,r0,0 ; Valid
+ bsr/tx -3 -> add r3,r0,0 ; Valid
+
+ bsr -3 -> bsr -10 ; Invalid
+ bsr -3 -> bsr/xt -10 ; Invalid
+ bsr/tx -3 -> bsr -10 ; Valid
+ bsr/tx -3 -> bsr/fx -10 ; Valid
+
+ bra -3 -> bra 10 ; Invalid
+ bra -3 -> bra/tx 10 ; Invalid
+ bra/tx -3 -> bra 10 ; Valid
+ bra/tx -3 -> bra/fx 10 ; Valid
+
+ bsr -3 -> bra 10 ; Invalid
+ bsr -3 -> bra/tx 10 ; Invalid
+ bsr/tx -3 -> bra 10 ; Valid
+ bsr/tx -3 -> bra/fx 10 ; Valid
+
+ bra -3 -> bsr 10 ; Invalid
+ bra -3 -> bsr/tx 10 ; Invalid
+ bra/tx -3 -> bsr 10 ; Valid
+ bra/tx -3 -> bsr/fx 10 ; Valid
diff --git a/gas/testsuite/gas/d30v/warn_oddreg.l b/gas/testsuite/gas/d30v/warn_oddreg.l
new file mode 100644
index 00000000000..f1fb43cb2ca
--- /dev/null
+++ b/gas/testsuite/gas/d30v/warn_oddreg.l
@@ -0,0 +1,40 @@
+.*: Assembler messages:
+.*:5: Warning: Odd numbered register used as target of multi-register instruction
+.*:6: Warning: Odd numbered register used as target of multi-register instruction
+.*:7: Warning: Odd numbered register used as target of multi-register instruction
+.*:8: Warning: Odd numbered register used as target of multi-register instruction
+.*:9: Warning: Odd numbered register used as target of multi-register instruction
+.*:10: Warning: Odd numbered register used as target of multi-register instruction
+.*:11: Warning: Odd numbered register used as target of multi-register instruction
+.*:12: Warning: Odd numbered register used as target of multi-register instruction
+GAS LISTING .*
+
+
+ 1 # GAS should print a warning when an odd register is used as a target
+ 2 # of multi-word instructions: ld2w, ld4bh, ld4bhu, ld2h, st2w, st4hb, st2h,
+ 3 # and mulx2h
+ 4
+ 5 0000 05681000 st2w r1, @(r0, 0) || nop
+.* Warning:Odd numbered register used as target of multi-register instruction
+ 5 00F00000
+ 6 0008 04681000 ld2w r1, @(r0, 0) || nop
+.* Warning:Odd numbered register used as target of multi-register instruction
+ 6 00F00000
+ 7 0010 04581000 ld4bh r1, @(r0, 0) || nop
+.* Warning:Odd numbered register used as target of multi-register instruction
+ 7 00F00000
+ 8 0018 04D81000 ld4bhu r1, @(r0, 0) || nop
+.* Warning:Odd numbered register used as target of multi-register instruction
+ 8 00F00000
+ 9 0020 04381000 ld2h r1, @(r0, 0) || nop
+.* Warning:Odd numbered register used as target of multi-register instruction
+ 9 00F00000
+ 10 0028 05581000 st4hb r1, @(r0, 0) || nop
+.* Warning:Odd numbered register used as target of multi-register instruction
+ 10 00F00000
+ 11 0030 05381000 st2h r1, @(r0, 0) || nop
+.* Warning:Odd numbered register used as target of multi-register instruction
+ 11 00F00000
+ 12 0038 00F00000 nop || mulx2h r1, r5, r6
+.* Warning:Odd numbered register used as target of multi-register instruction
+ 12 0A101146
diff --git a/gas/testsuite/gas/d30v/warn_oddreg.s b/gas/testsuite/gas/d30v/warn_oddreg.s
new file mode 100644
index 00000000000..c09f750948a
--- /dev/null
+++ b/gas/testsuite/gas/d30v/warn_oddreg.s
@@ -0,0 +1,12 @@
+# GAS should print a warning when an odd register is used as a target
+# of multi-word instructions: ld2w, ld4bh, ld4bhu, ld2h, st2w, st4hb, st2h,
+# and mulx2h
+
+st2w r1, @(r0, 0) || nop
+ld2w r1, @(r0, 0) || nop
+ld4bh r1, @(r0, 0) || nop
+ld4bhu r1, @(r0, 0) || nop
+ld2h r1, @(r0, 0) || nop
+st4hb r1, @(r0, 0) || nop
+st2h r1, @(r0, 0) || nop
+nop || mulx2h r1, r5, r6