# 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