459 lines
5.8 KiB
ArmAsm
459 lines
5.8 KiB
ArmAsm
.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
|