Blame include/opcode/avr.h

Packit bbfece
/* Opcode table for the Atmel AVR micro controllers.
Packit bbfece
Packit bbfece
   Copyright (C) 2000-2018 Free Software Foundation, Inc.
Packit bbfece
   Contributed by Denis Chertykov <denisc@overta.ru>
Packit bbfece
   
Packit bbfece
   This program is free software; you can redistribute it and/or modify
Packit bbfece
   it under the terms of the GNU General Public License as published by
Packit bbfece
   the Free Software Foundation; either version 3, or (at your option)
Packit bbfece
   any later version.
Packit bbfece
Packit bbfece
   This program is distributed in the hope that it will be useful,
Packit bbfece
   but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit bbfece
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit bbfece
   GNU General Public License for more details.
Packit bbfece
Packit bbfece
   You should have received a copy of the GNU General Public License
Packit bbfece
   along with this program; if not, write to the Free Software
Packit bbfece
   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
Packit bbfece
   MA 02110-1301, USA.  */
Packit bbfece
Packit bbfece
#define AVR_ISA_1200  0x0001 /* In the beginning there was ...  */
Packit bbfece
#define AVR_ISA_LPM   0x0002 /* device has LPM */
Packit bbfece
#define AVR_ISA_LPMX  0x0004 /* device has LPM Rd,Z[+] */
Packit bbfece
#define AVR_ISA_SRAM  0x0008 /* device has SRAM (LD, ST, PUSH, POP, ...) */
Packit bbfece
#define AVR_ISA_TINY  0x0010 /* device has Tiny core specific encodings */
Packit bbfece
#define AVR_ISA_MEGA  0x0020 /* device has >8K program memory (JMP and CALL
Packit bbfece
				supported, no 8K wrap on RJMP and RCALL) */
Packit bbfece
#define AVR_ISA_MUL   0x0040 /* device has new core (MUL, FMUL, ...) */
Packit bbfece
#define AVR_ISA_ELPM  0x0080 /* device has >64K program memory (ELPM) */
Packit bbfece
#define AVR_ISA_ELPMX 0x0100 /* device has ELPM Rd,Z[+] */
Packit bbfece
#define AVR_ISA_SPM   0x0200 /* device can program itself */
Packit bbfece
#define AVR_ISA_BRK   0x0400 /* device has BREAK (on-chip debug) */
Packit bbfece
#define AVR_ISA_EIND  0x0800 /* device has >128K program memory (none yet) */
Packit bbfece
#define AVR_ISA_MOVW  0x1000 /* device has MOVW */
Packit bbfece
#define AVR_ISA_SPMX  0x2000 /* device has SPM Z[+] */
Packit bbfece
#define AVR_ISA_DES   0x4000 /* device has DES */
Packit bbfece
#define AVR_ISA_RMW   0x8000 /* device has RMW instructions XCH,LAC,LAS,LAT */
Packit bbfece
Packit bbfece
#define AVR_ISA_TINY1 (AVR_ISA_1200 | AVR_ISA_LPM)
Packit bbfece
#define AVR_ISA_2xxx  (AVR_ISA_TINY1 | AVR_ISA_SRAM)
Packit bbfece
#define AVR_ISA_2xxxa (AVR_ISA_1200 | AVR_ISA_SRAM)
Packit bbfece
/* For the attiny26 which is missing LPM Rd,Z+.  */
Packit bbfece
#define AVR_ISA_2xxe  (AVR_ISA_2xxx | AVR_ISA_LPMX)
Packit bbfece
#define AVR_ISA_RF401 (AVR_ISA_2xxx | AVR_ISA_MOVW | AVR_ISA_LPMX)
Packit bbfece
#define AVR_ISA_TINY2 (AVR_ISA_2xxx | AVR_ISA_MOVW | AVR_ISA_LPMX | \
Packit bbfece
                       AVR_ISA_SPM  | AVR_ISA_BRK)
Packit bbfece
#define AVR_ISA_M603  (AVR_ISA_2xxx | AVR_ISA_MEGA)
Packit bbfece
#define AVR_ISA_M103  (AVR_ISA_M603 | AVR_ISA_ELPM)
Packit bbfece
#define AVR_ISA_M8    (AVR_ISA_2xxx | AVR_ISA_MUL | AVR_ISA_MOVW | \
Packit bbfece
                       AVR_ISA_LPMX | AVR_ISA_SPM)
Packit bbfece
#define AVR_ISA_PWMx  (AVR_ISA_M8   | AVR_ISA_BRK)
Packit bbfece
#define AVR_ISA_M161  (AVR_ISA_M603 | AVR_ISA_MUL | AVR_ISA_MOVW | \
Packit bbfece
                       AVR_ISA_LPMX | AVR_ISA_SPM)
Packit bbfece
#define AVR_ISA_94K   (AVR_ISA_M603 | AVR_ISA_MUL | AVR_ISA_MOVW | AVR_ISA_LPMX)
Packit bbfece
#define AVR_ISA_M323  (AVR_ISA_M161 | AVR_ISA_BRK)
Packit bbfece
#define AVR_ISA_M128  (AVR_ISA_M323 | AVR_ISA_ELPM | AVR_ISA_ELPMX)
Packit bbfece
#define AVR_ISA_M256  (AVR_ISA_M128 | AVR_ISA_EIND)
Packit bbfece
#define AVR_ISA_XMEGA (AVR_ISA_M256 | AVR_ISA_SPMX | AVR_ISA_DES)
Packit bbfece
#define AVR_ISA_XMEGAU (AVR_ISA_XMEGA | AVR_ISA_RMW)
Packit bbfece
Packit bbfece
#define AVR_ISA_AVR1   AVR_ISA_TINY1
Packit bbfece
#define AVR_ISA_AVR2   AVR_ISA_2xxx
Packit bbfece
#define AVR_ISA_AVR25  AVR_ISA_TINY2
Packit bbfece
#define AVR_ISA_AVR3   AVR_ISA_M603
Packit bbfece
#define AVR_ISA_AVR31 	AVR_ISA_M103
Packit bbfece
#define AVR_ISA_AVR35 	(AVR_ISA_AVR3 | AVR_ISA_MOVW | \
Packit bbfece
                        AVR_ISA_LPMX | AVR_ISA_SPM | AVR_ISA_BRK)
Packit bbfece
#define AVR_ISA_AVR3_ALL (AVR_ISA_AVR3 | AVR_ISA_AVR31 | AVR_ISA_AVR35)
Packit bbfece
#define AVR_ISA_AVR4   AVR_ISA_PWMx
Packit bbfece
#define AVR_ISA_AVR5   AVR_ISA_M323
Packit bbfece
#define AVR_ISA_AVR51  AVR_ISA_M128
Packit bbfece
#define AVR_ISA_AVR6   (AVR_ISA_1200 | AVR_ISA_LPM | AVR_ISA_LPMX | \
Packit bbfece
                        AVR_ISA_SRAM | AVR_ISA_MEGA | AVR_ISA_MUL | \
Packit bbfece
                        AVR_ISA_ELPM | AVR_ISA_ELPMX | AVR_ISA_SPM | \
Packit bbfece
                        AVR_ISA_BRK | AVR_ISA_EIND | AVR_ISA_MOVW)
Packit bbfece
Packit bbfece
#define AVR_ISA_AVRTINY (AVR_ISA_1200 | AVR_ISA_BRK | AVR_ISA_SRAM | \
Packit bbfece
                         AVR_ISA_TINY)
Packit bbfece
Packit bbfece
#define REGISTER_P(x) ((x) == 'r'		\
Packit bbfece
		       || (x) == 'd'		\
Packit bbfece
		       || (x) == 'w'		\
Packit bbfece
		       || (x) == 'a'		\
Packit bbfece
		       || (x) == 'v')
Packit bbfece
Packit bbfece
/* Undefined combination of operands - does the register
Packit bbfece
   operand overlap with pre-decremented or post-incremented
Packit bbfece
   pointer register (like ld r31,Z+)?  */
Packit bbfece
#define AVR_UNDEF_P(x) (((x) & 0xFFED) == 0x91E5 ||		\
Packit bbfece
  ((x) & 0xFDEF) == 0x91AD || ((x) & 0xFDEF) == 0x91AE ||	\
Packit bbfece
  ((x) & 0xFDEF) == 0x91C9 || ((x) & 0xFDEF) == 0x91CA ||	\
Packit bbfece
  ((x) & 0xFDEF) == 0x91E1 || ((x) & 0xFDEF) == 0x91E2)
Packit bbfece
Packit bbfece
/* Is this a skip instruction {cpse,sbic,sbis,sbrc,sbrs}?  */
Packit bbfece
#define AVR_SKIP_P(x) (((x) & 0xFC00) == 0x1000 ||		\
Packit bbfece
  ((x) & 0xFD00) == 0x9900 || ((x) & 0xFC08) == 0xFC00)
Packit bbfece
Packit bbfece
/* Is this `ldd r,b+0' or `std b+0,r' (b={Y,Z}, disassembled as
Packit bbfece
   `ld r,b' or `st b,r' respectively - next opcode entry)?  */
Packit bbfece
#define AVR_DISP0_P(x) (((x) & 0xFC07) == 0x8000)
Packit bbfece
Packit bbfece
/* Constraint letters:
Packit bbfece
   r - any register
Packit bbfece
   d - `ldi' register (r16-r31)
Packit bbfece
   v - `movw' even register (r0, r2, ..., r28, r30)
Packit bbfece
   a - `fmul' register (r16-r23)
Packit bbfece
   w - `adiw' register (r24,r26,r28,r30)
Packit bbfece
   e - pointer registers (X,Y,Z)
Packit bbfece
   b - base pointer register and displacement ([YZ]+disp)
Packit bbfece
   z - Z pointer register (for [e]lpm Rd,Z[+])
Packit bbfece
   M - immediate value from 0 to 255
Packit bbfece
   n - immediate value from 0 to 255 ( n = ~M ). Relocation impossible
Packit bbfece
   N - immediate value from 0 to 255. Relocation impossible
Packit bbfece
   s - immediate value from 0 to 7
Packit bbfece
   P - Port address value from 0 to 63. (in, out)
Packit bbfece
   p - Port address value from 0 to 31. (cbi, sbi, sbic, sbis)
Packit bbfece
   K - immediate value from 0 to 63 (used in `adiw', `sbiw')
Packit bbfece
   i - immediate value
Packit bbfece
   j - 7 bit immediate value from 0x40 to 0xBF (for 16-bit 'lds'/'sts')
Packit bbfece
   l - signed pc relative offset from -64 to 63
Packit bbfece
   L - signed pc relative offset from -2048 to 2047
Packit bbfece
   h - absolute code address (call, jmp)
Packit bbfece
   S - immediate value from 0 to 7 (S = s << 4)
Packit bbfece
   E - immediate value from 0 to 15, shifted left by 4 (des)
Packit bbfece
   ? - use this opcode entry if no parameters, else use next opcode entry
Packit bbfece
Packit bbfece
   Order is important - some binary opcodes have more than one name,
Packit bbfece
   the disassembler will only see the first match.
Packit bbfece
Packit bbfece
   Remaining undefined opcodes (1699 total - some of them might work
Packit bbfece
   as normal instructions if not all of the bits are decoded):
Packit bbfece
Packit bbfece
    0x0001...0x00ff    (255) (known to be decoded as `nop' by the old core)
Packit bbfece
   "100100xxxxxxx011"  (128) 0x9[0-3][0-9a-f][3b]
Packit bbfece
   "100100xxxxxx1000"   (64) 0x9[0-3][0-9a-f]8
Packit bbfece
   "1001010xxxxx0100"   (32) 0x9[45][0-9a-f]4
Packit bbfece
   "1001010x001x1001"    (4) 0x9[45][23]9
Packit bbfece
   "1001010x01xx1001"    (8) 0x9[45][4-7]9
Packit bbfece
   "1001010x1xxx1001"   (16) 0x9[45][8-9a-f]9
Packit bbfece
   "1001010xxxxx1011"   (32) 0x9[45][0-9a-f]b
Packit bbfece
   "10010101001x1000"    (2) 0x95[23]8
Packit bbfece
   "1001010101xx1000"    (4) 0x95[4-7]8
Packit bbfece
   "1001010110111000"    (1) 0x95b8
Packit bbfece
   "1001010111111000"    (1) 0x95f8 (`espm' removed in databook update)
Packit bbfece
   "11111xxxxxxx1xxx" (1024) 0xf[8-9a-f][0-9a-f][8-9a-f]
Packit bbfece
 */
Packit bbfece
Packit bbfece
AVR_INSN (clc,  "",    "1001010010001000", 1, AVR_ISA_1200, 0x9488)
Packit bbfece
AVR_INSN (clh,  "",    "1001010011011000", 1, AVR_ISA_1200, 0x94d8)
Packit bbfece
AVR_INSN (cli,  "",    "1001010011111000", 1, AVR_ISA_1200, 0x94f8)
Packit bbfece
AVR_INSN (cln,  "",    "1001010010101000", 1, AVR_ISA_1200, 0x94a8)
Packit bbfece
AVR_INSN (cls,  "",    "1001010011001000", 1, AVR_ISA_1200, 0x94c8)
Packit bbfece
AVR_INSN (clt,  "",    "1001010011101000", 1, AVR_ISA_1200, 0x94e8)
Packit bbfece
AVR_INSN (clv,  "",    "1001010010111000", 1, AVR_ISA_1200, 0x94b8)
Packit bbfece
AVR_INSN (clz,  "",    "1001010010011000", 1, AVR_ISA_1200, 0x9498)
Packit bbfece
Packit bbfece
AVR_INSN (sec,  "",    "1001010000001000", 1, AVR_ISA_1200, 0x9408)
Packit bbfece
AVR_INSN (seh,  "",    "1001010001011000", 1, AVR_ISA_1200, 0x9458)
Packit bbfece
AVR_INSN (sei,  "",    "1001010001111000", 1, AVR_ISA_1200, 0x9478)
Packit bbfece
AVR_INSN (sen,  "",    "1001010000101000", 1, AVR_ISA_1200, 0x9428)
Packit bbfece
AVR_INSN (ses,  "",    "1001010001001000", 1, AVR_ISA_1200, 0x9448)
Packit bbfece
AVR_INSN (set,  "",    "1001010001101000", 1, AVR_ISA_1200, 0x9468)
Packit bbfece
AVR_INSN (sev,  "",    "1001010000111000", 1, AVR_ISA_1200, 0x9438)
Packit bbfece
AVR_INSN (sez,  "",    "1001010000011000", 1, AVR_ISA_1200, 0x9418)
Packit bbfece
Packit bbfece
/* Same as {cl,se}[chinstvz] above.  */
Packit bbfece
AVR_INSN (bclr, "S",   "100101001SSS1000", 1, AVR_ISA_1200, 0x9488)
Packit bbfece
AVR_INSN (bset, "S",   "100101000SSS1000", 1, AVR_ISA_1200, 0x9408)
Packit bbfece
Packit bbfece
AVR_INSN (icall,"",    "1001010100001001", 1, AVR_ISA_2xxxa,0x9509)
Packit bbfece
AVR_INSN (ijmp, "",    "1001010000001001", 1, AVR_ISA_2xxxa,0x9409)
Packit bbfece
Packit bbfece
AVR_INSN (lpm,  "?",   "1001010111001000", 1, AVR_ISA_TINY1,0x95c8)
Packit bbfece
AVR_INSN (lpm,  "r,z", "1001000ddddd010+", 1, AVR_ISA_LPMX, 0x9004)
Packit bbfece
AVR_INSN (elpm, "?",   "1001010111011000", 1, AVR_ISA_ELPM, 0x95d8)
Packit bbfece
AVR_INSN (elpm, "r,z", "1001000ddddd011+", 1, AVR_ISA_ELPMX,0x9006)
Packit bbfece
Packit bbfece
AVR_INSN (nop,  "",    "0000000000000000", 1, AVR_ISA_1200, 0x0000)
Packit bbfece
AVR_INSN (ret,  "",    "1001010100001000", 1, AVR_ISA_1200, 0x9508)
Packit bbfece
AVR_INSN (reti, "",    "1001010100011000", 1, AVR_ISA_1200, 0x9518)
Packit bbfece
AVR_INSN (sleep,"",    "1001010110001000", 1, AVR_ISA_1200, 0x9588)
Packit bbfece
AVR_INSN (break,"",    "1001010110011000", 1, AVR_ISA_BRK,  0x9598)
Packit bbfece
AVR_INSN (wdr,  "",    "1001010110101000", 1, AVR_ISA_1200, 0x95a8)
Packit bbfece
AVR_INSN (spm,  "?",   "1001010111101000", 1, AVR_ISA_SPM,  0x95e8)
Packit bbfece
AVR_INSN (spm,  "z",   "10010101111+1000", 1, AVR_ISA_SPMX, 0x95e8)
Packit bbfece
Packit bbfece
AVR_INSN (adc,  "r,r", "000111rdddddrrrr", 1, AVR_ISA_1200, 0x1c00)
Packit bbfece
AVR_INSN (add,  "r,r", "000011rdddddrrrr", 1, AVR_ISA_1200, 0x0c00)
Packit bbfece
AVR_INSN (and,  "r,r", "001000rdddddrrrr", 1, AVR_ISA_1200, 0x2000)
Packit bbfece
AVR_INSN (cp,   "r,r", "000101rdddddrrrr", 1, AVR_ISA_1200, 0x1400)
Packit bbfece
AVR_INSN (cpc,  "r,r", "000001rdddddrrrr", 1, AVR_ISA_1200, 0x0400)
Packit bbfece
AVR_INSN (cpse, "r,r", "000100rdddddrrrr", 1, AVR_ISA_1200, 0x1000)
Packit bbfece
AVR_INSN (eor,  "r,r", "001001rdddddrrrr", 1, AVR_ISA_1200, 0x2400)
Packit bbfece
AVR_INSN (mov,  "r,r", "001011rdddddrrrr", 1, AVR_ISA_1200, 0x2c00)
Packit bbfece
AVR_INSN (mul,  "r,r", "100111rdddddrrrr", 1, AVR_ISA_MUL,  0x9c00)
Packit bbfece
AVR_INSN (or,   "r,r", "001010rdddddrrrr", 1, AVR_ISA_1200, 0x2800)
Packit bbfece
AVR_INSN (sbc,  "r,r", "000010rdddddrrrr", 1, AVR_ISA_1200, 0x0800)
Packit bbfece
AVR_INSN (sub,  "r,r", "000110rdddddrrrr", 1, AVR_ISA_1200, 0x1800)
Packit bbfece
Packit bbfece
/* Shorthand for {eor,add,adc,and} r,r above.  */
Packit bbfece
AVR_INSN (clr,  "r=r", "001001rdddddrrrr", 1, AVR_ISA_1200, 0x2400)
Packit bbfece
AVR_INSN (lsl,  "r=r", "000011rdddddrrrr", 1, AVR_ISA_1200, 0x0c00)
Packit bbfece
AVR_INSN (rol,  "r=r", "000111rdddddrrrr", 1, AVR_ISA_1200, 0x1c00)
Packit bbfece
AVR_INSN (tst,  "r=r", "001000rdddddrrrr", 1, AVR_ISA_1200, 0x2000)
Packit bbfece
Packit bbfece
AVR_INSN (andi, "d,M", "0111KKKKddddKKKK", 1, AVR_ISA_1200, 0x7000)
Packit bbfece
  /*XXX special case*/
Packit bbfece
AVR_INSN (cbr,  "d,n", "0111KKKKddddKKKK", 1, AVR_ISA_1200, 0x7000)
Packit bbfece
Packit bbfece
AVR_INSN (ldi,  "d,M", "1110KKKKddddKKKK", 1, AVR_ISA_1200, 0xe000)
Packit bbfece
AVR_INSN (ser,  "d",   "11101111dddd1111", 1, AVR_ISA_1200, 0xef0f)
Packit bbfece
Packit bbfece
AVR_INSN (ori,  "d,M", "0110KKKKddddKKKK", 1, AVR_ISA_1200, 0x6000)
Packit bbfece
AVR_INSN (sbr,  "d,M", "0110KKKKddddKKKK", 1, AVR_ISA_1200, 0x6000)
Packit bbfece
Packit bbfece
AVR_INSN (cpi,  "d,M", "0011KKKKddddKKKK", 1, AVR_ISA_1200, 0x3000)
Packit bbfece
AVR_INSN (sbci, "d,M", "0100KKKKddddKKKK", 1, AVR_ISA_1200, 0x4000)
Packit bbfece
AVR_INSN (subi, "d,M", "0101KKKKddddKKKK", 1, AVR_ISA_1200, 0x5000)
Packit bbfece
Packit bbfece
AVR_INSN (sbrc, "r,s", "1111110rrrrr0sss", 1, AVR_ISA_1200, 0xfc00)
Packit bbfece
AVR_INSN (sbrs, "r,s", "1111111rrrrr0sss", 1, AVR_ISA_1200, 0xfe00)
Packit bbfece
AVR_INSN (bld,  "r,s", "1111100ddddd0sss", 1, AVR_ISA_1200, 0xf800)
Packit bbfece
AVR_INSN (bst,  "r,s", "1111101ddddd0sss", 1, AVR_ISA_1200, 0xfa00)
Packit bbfece
Packit bbfece
AVR_INSN (in,   "r,P", "10110PPdddddPPPP", 1, AVR_ISA_1200, 0xb000)
Packit bbfece
AVR_INSN (out,  "P,r", "10111PPrrrrrPPPP", 1, AVR_ISA_1200, 0xb800)
Packit bbfece
Packit bbfece
AVR_INSN (adiw, "w,K", "10010110KKddKKKK", 1, AVR_ISA_2xxx, 0x9600)
Packit bbfece
AVR_INSN (sbiw, "w,K", "10010111KKddKKKK", 1, AVR_ISA_2xxx, 0x9700)
Packit bbfece
Packit bbfece
AVR_INSN (cbi,  "p,s", "10011000pppppsss", 1, AVR_ISA_1200, 0x9800)
Packit bbfece
AVR_INSN (sbi,  "p,s", "10011010pppppsss", 1, AVR_ISA_1200, 0x9a00)
Packit bbfece
AVR_INSN (sbic, "p,s", "10011001pppppsss", 1, AVR_ISA_1200, 0x9900)
Packit bbfece
AVR_INSN (sbis, "p,s", "10011011pppppsss", 1, AVR_ISA_1200, 0x9b00)
Packit bbfece
Packit bbfece
AVR_INSN (brcc, "l",   "111101lllllll000", 1, AVR_ISA_1200, 0xf400)
Packit bbfece
AVR_INSN (brcs, "l",   "111100lllllll000", 1, AVR_ISA_1200, 0xf000)
Packit bbfece
AVR_INSN (breq, "l",   "111100lllllll001", 1, AVR_ISA_1200, 0xf001)
Packit bbfece
AVR_INSN (brge, "l",   "111101lllllll100", 1, AVR_ISA_1200, 0xf404)
Packit bbfece
AVR_INSN (brhc, "l",   "111101lllllll101", 1, AVR_ISA_1200, 0xf405)
Packit bbfece
AVR_INSN (brhs, "l",   "111100lllllll101", 1, AVR_ISA_1200, 0xf005)
Packit bbfece
AVR_INSN (brid, "l",   "111101lllllll111", 1, AVR_ISA_1200, 0xf407)
Packit bbfece
AVR_INSN (brie, "l",   "111100lllllll111", 1, AVR_ISA_1200, 0xf007)
Packit bbfece
AVR_INSN (brlo, "l",   "111100lllllll000", 1, AVR_ISA_1200, 0xf000)
Packit bbfece
AVR_INSN (brlt, "l",   "111100lllllll100", 1, AVR_ISA_1200, 0xf004)
Packit bbfece
AVR_INSN (brmi, "l",   "111100lllllll010", 1, AVR_ISA_1200, 0xf002)
Packit bbfece
AVR_INSN (brne, "l",   "111101lllllll001", 1, AVR_ISA_1200, 0xf401)
Packit bbfece
AVR_INSN (brpl, "l",   "111101lllllll010", 1, AVR_ISA_1200, 0xf402)
Packit bbfece
AVR_INSN (brsh, "l",   "111101lllllll000", 1, AVR_ISA_1200, 0xf400)
Packit bbfece
AVR_INSN (brtc, "l",   "111101lllllll110", 1, AVR_ISA_1200, 0xf406)
Packit bbfece
AVR_INSN (brts, "l",   "111100lllllll110", 1, AVR_ISA_1200, 0xf006)
Packit bbfece
AVR_INSN (brvc, "l",   "111101lllllll011", 1, AVR_ISA_1200, 0xf403)
Packit bbfece
AVR_INSN (brvs, "l",   "111100lllllll011", 1, AVR_ISA_1200, 0xf003)
Packit bbfece
Packit bbfece
/* Same as br?? above.  */
Packit bbfece
AVR_INSN (brbc, "s,l", "111101lllllllsss", 1, AVR_ISA_1200, 0xf400)
Packit bbfece
AVR_INSN (brbs, "s,l", "111100lllllllsss", 1, AVR_ISA_1200, 0xf000)
Packit bbfece
Packit bbfece
AVR_INSN (rcall, "L",  "1101LLLLLLLLLLLL", 1, AVR_ISA_1200, 0xd000)
Packit bbfece
AVR_INSN (rjmp,  "L",  "1100LLLLLLLLLLLL", 1, AVR_ISA_1200, 0xc000)
Packit bbfece
Packit bbfece
AVR_INSN (call, "h",   "1001010hhhhh111h", 2, AVR_ISA_MEGA, 0x940e)
Packit bbfece
AVR_INSN (jmp,  "h",   "1001010hhhhh110h", 2, AVR_ISA_MEGA, 0x940c)
Packit bbfece
Packit bbfece
AVR_INSN (asr,  "r",   "1001010rrrrr0101", 1, AVR_ISA_1200, 0x9405)
Packit bbfece
AVR_INSN (com,  "r",   "1001010rrrrr0000", 1, AVR_ISA_1200, 0x9400)
Packit bbfece
AVR_INSN (dec,  "r",   "1001010rrrrr1010", 1, AVR_ISA_1200, 0x940a)
Packit bbfece
AVR_INSN (inc,  "r",   "1001010rrrrr0011", 1, AVR_ISA_1200, 0x9403)
Packit bbfece
AVR_INSN (lsr,  "r",   "1001010rrrrr0110", 1, AVR_ISA_1200, 0x9406)
Packit bbfece
AVR_INSN (neg,  "r",   "1001010rrrrr0001", 1, AVR_ISA_1200, 0x9401)
Packit bbfece
AVR_INSN (pop,  "r",   "1001000rrrrr1111", 1, AVR_ISA_2xxxa,0x900f)
Packit bbfece
AVR_INSN (push, "r",   "1001001rrrrr1111", 1, AVR_ISA_2xxxa,0x920f)
Packit bbfece
AVR_INSN (ror,  "r",   "1001010rrrrr0111", 1, AVR_ISA_1200, 0x9407)
Packit bbfece
AVR_INSN (swap, "r",   "1001010rrrrr0010", 1, AVR_ISA_1200, 0x9402)
Packit bbfece
Packit bbfece
/* Atomic memory operations for XMEGA.  List before `sts'.  */
Packit bbfece
AVR_INSN (xch,  "z,r",   "1001001rrrrr0100", 1, AVR_ISA_RMW, 0x9204)
Packit bbfece
AVR_INSN (las,  "z,r",   "1001001rrrrr0101", 1, AVR_ISA_RMW, 0x9205)
Packit bbfece
AVR_INSN (lac,  "z,r",   "1001001rrrrr0110", 1, AVR_ISA_RMW, 0x9206)
Packit bbfece
AVR_INSN (lat,  "z,r",   "1001001rrrrr0111", 1, AVR_ISA_RMW, 0x9207)
Packit bbfece
Packit bbfece
/* Known to be decoded as `nop' by the old core.  */
Packit bbfece
AVR_INSN (movw, "v,v", "00000001ddddrrrr", 1, AVR_ISA_MOVW, 0x0100)
Packit bbfece
AVR_INSN (muls, "d,d", "00000010ddddrrrr", 1, AVR_ISA_MUL,  0x0200)
Packit bbfece
AVR_INSN (mulsu,"a,a", "000000110ddd0rrr", 1, AVR_ISA_MUL,  0x0300)
Packit bbfece
AVR_INSN (fmul, "a,a", "000000110ddd1rrr", 1, AVR_ISA_MUL,  0x0308)
Packit bbfece
AVR_INSN (fmuls,"a,a", "000000111ddd0rrr", 1, AVR_ISA_MUL,  0x0380)
Packit bbfece
AVR_INSN (fmulsu,"a,a","000000111ddd1rrr", 1, AVR_ISA_MUL,  0x0388)
Packit bbfece
Packit bbfece
AVR_INSN (sts, "j,d", "10101kkkddddkkkk", 1, AVR_ISA_TINY, 0xA800)
Packit bbfece
AVR_INSN (sts, "i,r", "1001001ddddd0000", 2, AVR_ISA_2xxx, 0x9200)
Packit bbfece
AVR_INSN (lds, "d,j", "10100kkkddddkkkk", 1, AVR_ISA_TINY, 0xA000)
Packit bbfece
AVR_INSN (lds, "r,i", "1001000ddddd0000", 2, AVR_ISA_2xxx, 0x9000)
Packit bbfece
Packit bbfece
/* Special case for b+0, `e' must be next entry after `b',
Packit bbfece
   b={Y=1,Z=0}, ee={X=11,Y=10,Z=00}, !=1 if -e or e+ or X.  */
Packit bbfece
AVR_INSN (ldd,  "r,b", "10o0oo0dddddbooo", 1, AVR_ISA_2xxx, 0x8000)
Packit bbfece
AVR_INSN (ld,   "r,e", "100!000dddddee-+", 1, AVR_ISA_1200, 0x8000)
Packit bbfece
AVR_INSN (std,  "b,r", "10o0oo1rrrrrbooo", 1, AVR_ISA_2xxx, 0x8200)
Packit bbfece
AVR_INSN (st,   "e,r", "100!001rrrrree-+", 1, AVR_ISA_1200, 0x8200)
Packit bbfece
Packit bbfece
/* These are for devices that don't exist yet
Packit bbfece
   (>128K program memory, PC = EIND:Z).  */
Packit bbfece
AVR_INSN (eicall, "",  "1001010100011001", 1, AVR_ISA_EIND, 0x9519)
Packit bbfece
AVR_INSN (eijmp, "",   "1001010000011001", 1, AVR_ISA_EIND, 0x9419)
Packit bbfece
Packit bbfece
/* DES instruction for encryption and decryption.  */
Packit bbfece
AVR_INSN (des,  "E",   "10010100EEEE1011", 1, AVR_ISA_DES,  0x940B)
Packit bbfece
Packit bbfece
/* Operands are evaluated by hand and won't pop new fux-ups.
Packit bbfece
   The pseudo-insn is hidden behind NOP so that avr-dis.c don't see it. */
Packit bbfece
AVR_INSN (__gcc_isr, "", "0000000000000000", 1, AVR_ISA_1200,  0x0)
Packit bbfece