.sect .text
.define _main
.define _main2
.define _xxx
! integer arithmetic and logical instructions

_main:
.data2 0x0
adawi	r0, r1
addb2	r0,r1
addb3	r0,r2,r4
addw2	r0,r1
addw3	r0,r2,r4
addl2	r0,r1
addl3	r0,r2,r4
adwc	r0, r1
ashl	r0, r1, r2
ashq	r0, r1, r2
bicb2	r0,r1
bicb3	r0,r2,r4
bicw2	r0,r1
bicw3	r0,r2,r4
bicl2	r0,r1
bicl3	r0,r2,r4
bisb2	r0,r1
bisb3	r0,r2,r4
bisw2	r0,r1
bisw3	r0,r2,r4
bisl2	r0,r1
bisl3	r0,r2,r4
bitb	r0, r1
bitw	r0, r1
bitl	r0, r1
clrb	r0
clrw	r0
clrl	r0
clrq	r0
clro	r0
cmpb	r0, r1
cmpw	r0, r1
cmpl	r0, r1
cvtbw	r0, r1
cvtbl	r0, r1
cvtwb	r0, r1
cvtwl	r0, r1
cvtlb	r0, r1
cvtlw	r0, r1
decb	r0
decw	r0
decl	r0
divb2	r0,r1
divb3	r0,r2,r4
divw2	r0,r1
divw3	r0,r2,r4
divl2	r0,r1
divl3	r0,r2,r4
ediv	r0,r1,r2,r3
emul	r0,r1,r2,r3
incb	r0
incw	r0
incl	r0
mcomb	r0, r1
mcomw	r0, r1
mcoml	r0, r1
mnegb	r0, r1
mnegw	r0, r1
mnegl	r0, r1
movb	r0, r1
movw	r0, r1
movl	r0, r1
movq	r0, r1
movo	r0, r1
movzbw	r0, r1
movzbl	r0, r1
movzwl	r0, r1
mulb2	r0,r1
mulb3	r0,r2,r4
mulw2	r0,r1
mulw3	r0,r2,r4
mull2	r0,r1
mull3	r0,r2,r4
pushl	r0
pushl	$1
rotl	r0, r1, r2
sbwc	r0, r1
subb2	r0,r1
subb3	r0,r2,r4
subw2	r0,r1
subw3	r0,r2,r4
subl2	r0,r1
subl3	r0,r2,r4
tstb	r0
tstw	r0
tstl	r0
xorb2	r0,r1
xorb3	r0,r2,r4
xorw2	r0,r1
xorw3	r0,r2,r4
xorl2	r0,r1
xorl3	r0,r2,r4

!* Address instructions */

movab	(sp),r0
movaw	(sp),r0
moval	(sp),r0
movaf	(sp),r0
movaq	(sp),r0
movad	(sp),r0
movag	(sp),r0
movah	(sp),r0
movao	(sp),r0
pushab	(sp)
pushaw	(sp)
pushal	(sp)
pushaf	(sp)
pushaq	(sp)
pushad	(sp)
pushag	(sp)
pushah	(sp)
pushao	(sp)

!* Variable length bit-field instructions */

cmpv	r0,r1,r2,r3
cmpzv	r0,r1,r2,r3
extv	r0,r1,r2,r3
extzv	r0,r1,r2,r3
ffc	r0,r1,r2,r3
ffs	r0,r1,r2,r3
insv	r0,r1,r2,r3

!* Control instructions */

acbb	r0,r1,r2,_main
acbw	r0,r1,r2,_main
acbl	r0,r1,r2,_main
acbf	r0,r1,r2,_main
acbd	r0,r1,r2,_main
acbg	r0,r1,r2,_main
acbh	r0,r1,r2,_main
aobleq	r0, r1, 1f
1:
aoblss	r0, r1, 1f
1:
bgtr	1f
1:
bleq	1f
1:
bneq	1f
1:
bnequ	1f
1:
beql	1f
1:
beqlu	1f
1:
bgeq	1f
1:
blss	1f
1:
bgtru	1f
1:
blequ	1f
1:
bvc	1f
1:
bvs	1f
1:
bgequ	1f
1:
bcc	1f
1:
blssu	1f
1:
bcs	1f
1:
bbs	r0, r1, 1f
1:
bbc	r0, r1, 1f
1:
bbss	r0, r1, 1f
1:
bbcs	r0, r1, 1f
1:
bbsc	r0, r1, 1f
1:
bbcc	r0, r1, 1f
1:
bbssi	r0, r1, 1f
1:
bbcci	r0, r1, 1f
1:
blbs	r0,1f
blbc	r0,1f
1:
jgtr	_main
jleq	_main
jneq	_main
jnequ	_main
jeql	_main
jeqlu	_main
jgeq	_main
jlss	_main
jgtru	_main
jlequ	_main
jvc	_main
jvs	_main
jgequ	_main
jcc	_main
jlssu	_main
jcs	_main
jlbs	r0, _main
jlbc	r0, _main
jbs	r0, r1, _main
jbc	r0, r1, _main
jbss	r0, r1, _main
jbcs	r0, r1, _main
jbsc	r0, r1, _main
jbcc	r0, r1, _main
jbssi	r0, r1, _main
jbcci	r0, r1, _main
br	_main
br	_main2
brb	1f
1:
brw	1f
1:
jbr	_main
jbr	_main2
bsb	1f
1:
caseb	r0, r1, r2
casew	r0, r1, r2
casel	r0, r1, r2
jmp	_main
jsb	_main
rsb
sobgeq	r0, 1f
sobgtr	r0, 1f
1:

!* Procedure call instructions */

callg	(sp),_main
calls	$2, _main
ret

!* Miscellaneous instructions */

bicpsw	r0
bispsw	r0
bpt
halt
index	r0,r1,r2,r3,r4,r5
movpsl	r0
nop
popr	r0
pushr	r0
xfc

!* Queue instructions */

insqhi	(sp), _main
insqti	(sp), _main
insque	(sp), _main
remqhi	(sp), _main
remqti	(sp), _main
remque	(sp), _main

!* Floating point instructions */

addf2	r0,r1
addf3	r0,r2,r4
addd2	r0,r1
addd3	r0,r2,r4
addg2	r0,r1
addg3	r0,r2,r4
addh2	r0,r1
addh3	r0,r2,r4
clrf	r0
clrd	r0
clrg	r0
clrh	r0
cmpf	r0,r2
cmpd	r0,r2
cmpg	r0,r2
cmph	r0,r2
cvtbf	r0,r2
cvtbd	r0,r2
cvtbg	r0,r2
cvtbh	r0,r2
cvtwf	r0,r2
cvtwd	r0,r2
cvtwg	r0,r2
cvtwh	r0,r2
cvtlf	r0,r2
cvtld	r0,r2
cvtlg	r0,r2
cvtlh	r0,r2
cvtfb	r0,r2
cvtdb	r0,r2
cvtgb	r0,r2
cvthb	r0,r2
cvtfw	r0,r2
cvtdw	r0,r2
cvtgw	r0,r2
cvthw	r0,r2
cvtfl	r0,r2
cvtdl	r0,r2
cvtgl	r0,r2
cvthl	r0,r2
cvtrfl	r0,r2
cvtrdl	r0,r2
cvtrgl	r0,r2
cvtrhl	r0,r2
cvtfd	r0,r2
cvtfg	r0,r2
cvtfh	r0,r2
cvtdf	r0,r2
cvtdh	r0,r2
cvtgf	r0,r2
cvtgh	r0,r2
cvthf	r0,r2
cvthd	r0,r2
cvthg	r0,r2
divf2	r0,r1
divf3	r0,r2,r4
divd2	r0,r1
divd3	r0,r2,r4
divg2	r0,r1
divg3	r0,r2,r4
divh2	r0,r1
divh3	r0,r2,r4
emodf	(r0),(r1),(r2),(r3),(r4)
emodd	(r0),(r1),(r2),(r3),(r4)
emodg	(r0),(r1),(r2),(r3),(r4)
emodh	(r0),(r1),(r2),(r3),(r4)
mnegf	r0,r2
mnegd	r0,r2
mnegg	r0,r2
mnegh	r0,r2
movf	r0,r2
movd	r0,r2
movg	r0,r2
movh	r0,r2
mulf2	r0,r1
mulf3	r0,r2,r4
muld2	r0,r1
muld3	r0,r2,r4
mulg2	r0,r1
mulg3	r0,r2,r4
mulh2	r0,r1
mulh3	r0,r2,r4
polyf	r0,r2,(sp)
polyd	r0,r2,(sp)
polyg	r0,r2,(sp)
polyh	r0,r2,(sp)
subf2	r0,r1
subf3	r0,r2,r4
subd2	r0,r1
subd3	r0,r2,r4
subg2	r0,r1
subg3	r0,r2,r4
subh2	r0,r1
subh3	r0,r2,r4
tstf	r0
tstd	r0
tstg	r0
tsth	r0

!* Character string instructions */

cmpc3	r0,(sp),(r1)
cmpc5	(r0),(r1),(r2),(r3),(r4)
locc	(r0),(r1),(r2)
matchc	(r0),(r1),(r2),(r3)
movc3	r0,(sp),(r1)
movc5	(r0),(r1),(r2),(r3),(r4)
movtc	(r0),(r1),(r2),(r3),(r4),(r4)
movtuc	(r0),(r1),(r2),(r3),(r4),(r4)
scanc	(r0),(r1),(r2),(r3)
skpc	r0,(sp),(r1)
spanc	(r0),(r1),(r2),(r3)

!* Cyclic redundancy check instructions */

crc	(r0),(r1),(r2),(r3)

!* Decimal string instructions */

addp4	(r0),(r1),(r2),(r3)
addp6	(r0),(r1),(r2),(r3),(r4),(r4)
ashp	(r0),(r1),(r2),(r3),(r4),(r4)
cmpp3	r0,(sp),(r1)
cmpp4	(r0),(r1),(r2),(r3)
cvtlp	(r0),(r1),(r2)
cvtpl	(r0),(r1),(r2)
cvtps	(r0),(r1),(r2),(r3)
cvtpt	(r0),(r1),(r2),(r3),(r4)
cvtsp	(r0),(r1),(r2),(r3)
cvttp	(r0),(r1),(r2),(r3),(r4)
divp	(r0),(r1),(r2),(r3),(r4),(r4)
movp	(r0),(r1),(r2)
mulp	(r0),(r1),(r2),(r3),(r4),(r4)
subp4	(r0),(r1),(r2),(r3)
subp6	(r0),(r1),(r2),(r3),(r4),(r4)

!* Edit instruction */

editpc	(r0),(r1),(r2),(r3)

!* Other VAX-11 instructions */

bugw	_main
bugl	_main

prober	(r0),(r1),(r2)
probew	(r0),(r1),(r2)

rei
chmk	r0
chme	r0
chms	r0
chmu	r0

ldpctx
svpctx
mtpr	r0,r1
mfpr	r0,r1

! test some addressing modes
_main2:
.data2 0x0
pushal	_xxx
pushal	_main
pushal	_main2
pushal	*_xxx
pushal	*_main
pushal	*_main2
movl	$_xxx,-(sp)
movl	$_main2,-(sp)
movl	*$_main2,-(sp)
movl	(sp)+,r9
movl	*(sp)+,r9
movl	(r0),r9
movl	12(r0),r9
movl	*12(r0),r9
movl	_xxx(r0),r9
movl	*_xxx(r0),r9
movl	*_xxx(r0)[r1],r9
movb	*_xxx(r0)[r1],r9
movw	*_xxx(r0)[r1],r9


.sect .rom
_xxx:
	.data2 0