blob: 344749fa52204ada42e4a557f107c257c9b17d13 [file] [log] [blame]
# Used for all instructions that have a 3-address form
.macro TERNARY insn
# reg-reg
\insn $r31, $r0, $r0
\insn $r0, $r31, $r0
\insn $r0, $r0, $r31
\insn $r1, $r2, $r4
\insn $r8, $r16, $r0
# immediate
\insn $r31, $r0, -512
\insn $r0, $r31, 0
\insn $r0, $r31, 1
\insn $r0, $r31, 511
# short and byte
\insn\().s $r0, $r31, $r1
\insn\().s $r0, $r31, 77
\insn\().b $r0, $r31, $r1
\insn\().b $r0, $r31, 77
.endm
.macro RegUImm insn
\insn r0, r0, 0
\insn r0, r0, 65535
\insn r0, r31, 0
\insn r0, r31, 65535
\insn r31, r0, 0
\insn r31, r0, 65535
.endm
.macro CMPOP insn
# reg-reg
\insn $r0, $r0
\insn $r31, $r0
\insn $r0, $r31
# immediate
\insn $r0, -512
\insn $r31, 0
\insn $r31, 1
\insn $r31, 511
# short and byte
\insn\().s $r31, $r1
\insn\().s $r31, 77
\insn\().b $r31, $r1
\insn\().b $r31, 77
.endm
.section .data
dalabel:
.long 0
.section .text
pmlabel:
TERNARY add
TERNARY sub
TERNARY and
TERNARY or
TERNARY xor
TERNARY xnor
TERNARY ashl
TERNARY lshr
TERNARY ashr
TERNARY ror
TERNARY ldl
TERNARY bins
TERNARY bexts
TERNARY bextu
TERNARY flip
CMPOP addcc
CMPOP cmp
CMPOP tst
CMPOP btst
# LDI, STI, EXI
ldi.l $r0,$r31,-128
ldi.l $r31,$r0,127
ldi.s $r0,$r31,-128
ldi.s $r0,$r31,127
ldi.b $r31,$r0,-128
ldi.b $r31,$r0,127
sti.l $r31,-128,$r0
sti.l $r0,127,$r31
sti.s $r31,-128,$r0
sti.s $r31,127,$r0
sti.b $r0,-128,$r31
sti.b $r0,127,$r31
exi.l $r0,$r31,-128
exi.l $r31,$r0,127
exi.s $r0,$r31,-128
exi.s $r0,$r31,127
exi.b $r31,$r0,-128
exi.b $r31,$r0,127
# LPM, LPMI
lpm.l $r0,pmlabel
lpm.s $r16,pmlabel
lpm.b $r31,pmlabel
lpmi.l $r0,$r1,-128
lpmi.s $r16,$r1,127
lpmi.b $r31,$r1,-128
# JMP
jmp pmlabel
jmpi $r16
jmpx 31,$r28,1,pmlabel
jmpc nz,pmlabel
# CALL
call pmlabel
calli $r16
callx 31,$r28,1,pmlabel
callc nz,pmlabel
# PUSH, POP
push $r0
push $r16
push $r31
pop $r0
pop $r16
pop $r31
# LINK,UNLINK
link $r0,0
link $r16,65535
link $r31,1017
unlink $r0
unlink $r16
unlink $r31
# RETURN,RETI
return
reti
# LDA,STA,EXA
lda.l $r0,dalabel
lda.s $r16,dalabel
lda.b $r31,dalabel
sta.l dalabel,$r0
sta.s dalabel,$r16
sta.b dalabel,$r31
exa.l $r0,dalabel
exa.s $r16,dalabel
exa.b $r31,dalabel
# LDK
ldk $r0,-524288
ldk $r0,524287
ldk $r0,0
move $r0,$r31
move $r31,$r0
TERNARY udiv
TERNARY umod
TERNARY div
TERNARY mod
TERNARY strcmp
TERNARY memcpy
TERNARY memset
TERNARY mul
TERNARY muluh
TERNARY streamin
TERNARY streamini
TERNARY streamout
TERNARY streamouti
strlen.l $r0,$r31
strlen.l $r31,$r0
strlen.s $r0,$r31
strlen.s $r31,$r0
strlen.b $r0,$r31
strlen.b $r31,$r0
stpcpy.l $r0,$r31
stpcpy.l $r31,$r0
stpcpy.s $r0,$r31
stpcpy.s $r31,$r0
stpcpy.b $r0,$r31
stpcpy.b $r31,$r0