| OLD | NEW |
| 1 /* Opcode table for the Atmel AVR micro controllers. | 1 /* Opcode table for the Atmel AVR micro controllers. |
| 2 | 2 |
| 3 Copyright 2000, 2001, 2004, 2006, 2008, 2010 Free Software Foundation, Inc. | 3 Copyright 2000, 2001, 2004, 2006, 2008, 2010, 2012 Free Software Foundation,
Inc. |
| 4 Contributed by Denis Chertykov <denisc@overta.ru> | 4 Contributed by Denis Chertykov <denisc@overta.ru> |
| 5 | 5 |
| 6 This program is free software; you can redistribute it and/or modify | 6 This program is free software; you can redistribute it and/or modify |
| 7 it under the terms of the GNU General Public License as published by | 7 it under the terms of the GNU General Public License as published by |
| 8 the Free Software Foundation; either version 3, or (at your option) | 8 the Free Software Foundation; either version 3, or (at your option) |
| 9 any later version. | 9 any later version. |
| 10 | 10 |
| 11 This program is distributed in the hope that it will be useful, | 11 This program is distributed in the hope that it will be useful, |
| 12 but WITHOUT ANY WARRANTY; without even the implied warranty of | 12 but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| (...skipping 12 matching lines...) Expand all Loading... |
| 26 supported, no 8K wrap on RJMP and RCALL) */ | 26 supported, no 8K wrap on RJMP and RCALL) */ |
| 27 #define AVR_ISA_MUL 0x0040 /* device has new core (MUL, FMUL, ...) */ | 27 #define AVR_ISA_MUL 0x0040 /* device has new core (MUL, FMUL, ...) */ |
| 28 #define AVR_ISA_ELPM 0x0080 /* device has >64K program memory (ELPM) */ | 28 #define AVR_ISA_ELPM 0x0080 /* device has >64K program memory (ELPM) */ |
| 29 #define AVR_ISA_ELPMX 0x0100 /* device has ELPM Rd,Z[+] */ | 29 #define AVR_ISA_ELPMX 0x0100 /* device has ELPM Rd,Z[+] */ |
| 30 #define AVR_ISA_SPM 0x0200 /* device can program itself */ | 30 #define AVR_ISA_SPM 0x0200 /* device can program itself */ |
| 31 #define AVR_ISA_BRK 0x0400 /* device has BREAK (on-chip debug) */ | 31 #define AVR_ISA_BRK 0x0400 /* device has BREAK (on-chip debug) */ |
| 32 #define AVR_ISA_EIND 0x0800 /* device has >128K program memory (none yet) */ | 32 #define AVR_ISA_EIND 0x0800 /* device has >128K program memory (none yet) */ |
| 33 #define AVR_ISA_MOVW 0x1000 /* device has MOVW */ | 33 #define AVR_ISA_MOVW 0x1000 /* device has MOVW */ |
| 34 #define AVR_ISA_SPMX 0x2000 /* device has SPM Z[+] */ | 34 #define AVR_ISA_SPMX 0x2000 /* device has SPM Z[+] */ |
| 35 #define AVR_ISA_DES 0x4000 /* device has DES */ | 35 #define AVR_ISA_DES 0x4000 /* device has DES */ |
| 36 #define AVR_ISA_XCH 0x8000 /* device has XCH, LAC, LAS, LAT */ |
| 36 | 37 |
| 37 #define AVR_ISA_TINY1 (AVR_ISA_1200 | AVR_ISA_LPM) | 38 #define AVR_ISA_TINY1 (AVR_ISA_1200 | AVR_ISA_LPM) |
| 38 #define AVR_ISA_2xxx (AVR_ISA_TINY1 | AVR_ISA_SRAM) | 39 #define AVR_ISA_2xxx (AVR_ISA_TINY1 | AVR_ISA_SRAM) |
| 39 /* For the attiny26 which is missing LPM Rd,Z+. */ | 40 /* For the attiny26 which is missing LPM Rd,Z+. */ |
| 40 #define AVR_ISA_2xxe (AVR_ISA_2xxx | AVR_ISA_LPMX) | 41 #define AVR_ISA_2xxe (AVR_ISA_2xxx | AVR_ISA_LPMX) |
| 41 #define AVR_ISA_RF401 (AVR_ISA_2xxx | AVR_ISA_MOVW | AVR_ISA_LPMX) | 42 #define AVR_ISA_RF401 (AVR_ISA_2xxx | AVR_ISA_MOVW | AVR_ISA_LPMX) |
| 42 #define AVR_ISA_TINY2 (AVR_ISA_2xxx | AVR_ISA_MOVW | AVR_ISA_LPMX | \ | 43 #define AVR_ISA_TINY2 (AVR_ISA_2xxx | AVR_ISA_MOVW | AVR_ISA_LPMX | \ |
| 43 AVR_ISA_SPM | AVR_ISA_BRK) | 44 AVR_ISA_SPM | AVR_ISA_BRK) |
| 44 #define AVR_ISA_M603 (AVR_ISA_2xxx | AVR_ISA_MEGA) | 45 #define AVR_ISA_M603 (AVR_ISA_2xxx | AVR_ISA_MEGA) |
| 45 #define AVR_ISA_M103 (AVR_ISA_M603 | AVR_ISA_ELPM) | 46 #define AVR_ISA_M103 (AVR_ISA_M603 | AVR_ISA_ELPM) |
| 46 #define AVR_ISA_M8 (AVR_ISA_2xxx | AVR_ISA_MUL | AVR_ISA_MOVW | \ | 47 #define AVR_ISA_M8 (AVR_ISA_2xxx | AVR_ISA_MUL | AVR_ISA_MOVW | \ |
| 47 AVR_ISA_LPMX | AVR_ISA_SPM) | 48 AVR_ISA_LPMX | AVR_ISA_SPM) |
| 48 #define AVR_ISA_PWMx (AVR_ISA_M8 | AVR_ISA_BRK) | 49 #define AVR_ISA_PWMx (AVR_ISA_M8 | AVR_ISA_BRK) |
| 49 #define AVR_ISA_M161 (AVR_ISA_M603 | AVR_ISA_MUL | AVR_ISA_MOVW | \ | 50 #define AVR_ISA_M161 (AVR_ISA_M603 | AVR_ISA_MUL | AVR_ISA_MOVW | \ |
| 50 AVR_ISA_LPMX | AVR_ISA_SPM) | 51 AVR_ISA_LPMX | AVR_ISA_SPM) |
| 51 #define AVR_ISA_94K (AVR_ISA_M603 | AVR_ISA_MUL | AVR_ISA_MOVW | AVR_ISA_LPMX) | 52 #define AVR_ISA_94K (AVR_ISA_M603 | AVR_ISA_MUL | AVR_ISA_MOVW | AVR_ISA_LPMX) |
| 52 #define AVR_ISA_M323 (AVR_ISA_M161 | AVR_ISA_BRK) | 53 #define AVR_ISA_M323 (AVR_ISA_M161 | AVR_ISA_BRK) |
| 53 #define AVR_ISA_M128 (AVR_ISA_M323 | AVR_ISA_ELPM | AVR_ISA_ELPMX) | 54 #define AVR_ISA_M128 (AVR_ISA_M323 | AVR_ISA_ELPM | AVR_ISA_ELPMX) |
| 54 #define AVR_ISA_M256 (AVR_ISA_M128 | AVR_ISA_EIND) | 55 #define AVR_ISA_M256 (AVR_ISA_M128 | AVR_ISA_EIND) |
| 55 #define AVR_ISA_XMEGA (AVR_ISA_M256 | AVR_ISA_SPMX | AVR_ISA_DES) | 56 #define AVR_ISA_XMEGA (AVR_ISA_M256 | AVR_ISA_SPMX | AVR_ISA_DES | AVR_ISA_XCH) |
| 56 | 57 |
| 57 #define AVR_ISA_AVR1 AVR_ISA_TINY1 | 58 #define AVR_ISA_AVR1 AVR_ISA_TINY1 |
| 58 #define AVR_ISA_AVR2 AVR_ISA_2xxx | 59 #define AVR_ISA_AVR2 AVR_ISA_2xxx |
| 59 #define AVR_ISA_AVR25 AVR_ISA_TINY2 | 60 #define AVR_ISA_AVR25 AVR_ISA_TINY2 |
| 60 #define AVR_ISA_AVR3 AVR_ISA_M603 | 61 #define AVR_ISA_AVR3 AVR_ISA_M603 |
| 61 #define AVR_ISA_AVR31 AVR_ISA_M103 | 62 #define AVR_ISA_AVR31 AVR_ISA_M103 |
| 62 #define AVR_ISA_AVR35 (AVR_ISA_AVR3 | AVR_ISA_MOVW | \ | 63 #define AVR_ISA_AVR35 (AVR_ISA_AVR3 | AVR_ISA_MOVW | \ |
| 63 AVR_ISA_LPMX | AVR_ISA_SPM | AVR_ISA_BRK) | 64 AVR_ISA_LPMX | AVR_ISA_SPM | AVR_ISA_BRK) |
| 64 #define AVR_ISA_AVR3_ALL (AVR_ISA_AVR3 | AVR_ISA_AVR31 | AVR_ISA_AVR35) | 65 #define AVR_ISA_AVR3_ALL (AVR_ISA_AVR3 | AVR_ISA_AVR31 | AVR_ISA_AVR35) |
| 65 #define AVR_ISA_AVR4 AVR_ISA_PWMx | 66 #define AVR_ISA_AVR4 AVR_ISA_PWMx |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 117 | 118 |
| 118 Order is important - some binary opcodes have more than one name, | 119 Order is important - some binary opcodes have more than one name, |
| 119 the disassembler will only see the first match. | 120 the disassembler will only see the first match. |
| 120 | 121 |
| 121 Remaining undefined opcodes (1699 total - some of them might work | 122 Remaining undefined opcodes (1699 total - some of them might work |
| 122 as normal instructions if not all of the bits are decoded): | 123 as normal instructions if not all of the bits are decoded): |
| 123 | 124 |
| 124 0x0001...0x00ff (255) (known to be decoded as `nop' by the old core) | 125 0x0001...0x00ff (255) (known to be decoded as `nop' by the old core) |
| 125 "100100xxxxxxx011" (128) 0x9[0-3][0-9a-f][3b] | 126 "100100xxxxxxx011" (128) 0x9[0-3][0-9a-f][3b] |
| 126 "100100xxxxxx1000" (64) 0x9[0-3][0-9a-f]8 | 127 "100100xxxxxx1000" (64) 0x9[0-3][0-9a-f]8 |
| 127 "1001001xxxxx01xx" (128) 0x9[23][0-9a-f][4-7] | |
| 128 "1001010xxxxx0100" (32) 0x9[45][0-9a-f]4 | 128 "1001010xxxxx0100" (32) 0x9[45][0-9a-f]4 |
| 129 "1001010x001x1001" (4) 0x9[45][23]9 | 129 "1001010x001x1001" (4) 0x9[45][23]9 |
| 130 "1001010x01xx1001" (8) 0x9[45][4-7]9 | 130 "1001010x01xx1001" (8) 0x9[45][4-7]9 |
| 131 "1001010x1xxx1001" (16) 0x9[45][8-9a-f]9 | 131 "1001010x1xxx1001" (16) 0x9[45][8-9a-f]9 |
| 132 "1001010xxxxx1011" (32) 0x9[45][0-9a-f]b | 132 "1001010xxxxx1011" (32) 0x9[45][0-9a-f]b |
| 133 "10010101001x1000" (2) 0x95[23]8 | 133 "10010101001x1000" (2) 0x95[23]8 |
| 134 "1001010101xx1000" (4) 0x95[4-7]8 | 134 "1001010101xx1000" (4) 0x95[4-7]8 |
| 135 "1001010110111000" (1) 0x95b8 | 135 "1001010110111000" (1) 0x95b8 |
| 136 "1001010111111000" (1) 0x95f8 (`espm' removed in databook update) | 136 "1001010111111000" (1) 0x95f8 (`espm' removed in databook update) |
| 137 "11111xxxxxxx1xxx" (1024) 0xf[8-9a-f][0-9a-f][8-9a-f] | 137 "11111xxxxxxx1xxx" (1024) 0xf[8-9a-f][0-9a-f][8-9a-f] |
| (...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 258 AVR_INSN (com, "r", "1001010rrrrr0000", 1, AVR_ISA_1200, 0x9400) | 258 AVR_INSN (com, "r", "1001010rrrrr0000", 1, AVR_ISA_1200, 0x9400) |
| 259 AVR_INSN (dec, "r", "1001010rrrrr1010", 1, AVR_ISA_1200, 0x940a) | 259 AVR_INSN (dec, "r", "1001010rrrrr1010", 1, AVR_ISA_1200, 0x940a) |
| 260 AVR_INSN (inc, "r", "1001010rrrrr0011", 1, AVR_ISA_1200, 0x9403) | 260 AVR_INSN (inc, "r", "1001010rrrrr0011", 1, AVR_ISA_1200, 0x9403) |
| 261 AVR_INSN (lsr, "r", "1001010rrrrr0110", 1, AVR_ISA_1200, 0x9406) | 261 AVR_INSN (lsr, "r", "1001010rrrrr0110", 1, AVR_ISA_1200, 0x9406) |
| 262 AVR_INSN (neg, "r", "1001010rrrrr0001", 1, AVR_ISA_1200, 0x9401) | 262 AVR_INSN (neg, "r", "1001010rrrrr0001", 1, AVR_ISA_1200, 0x9401) |
| 263 AVR_INSN (pop, "r", "1001000rrrrr1111", 1, AVR_ISA_2xxx, 0x900f) | 263 AVR_INSN (pop, "r", "1001000rrrrr1111", 1, AVR_ISA_2xxx, 0x900f) |
| 264 AVR_INSN (push, "r", "1001001rrrrr1111", 1, AVR_ISA_2xxx, 0x920f) | 264 AVR_INSN (push, "r", "1001001rrrrr1111", 1, AVR_ISA_2xxx, 0x920f) |
| 265 AVR_INSN (ror, "r", "1001010rrrrr0111", 1, AVR_ISA_1200, 0x9407) | 265 AVR_INSN (ror, "r", "1001010rrrrr0111", 1, AVR_ISA_1200, 0x9407) |
| 266 AVR_INSN (swap, "r", "1001010rrrrr0010", 1, AVR_ISA_1200, 0x9402) | 266 AVR_INSN (swap, "r", "1001010rrrrr0010", 1, AVR_ISA_1200, 0x9402) |
| 267 | 267 |
| 268 /* Atomic memory operations for XMEGA. List before `sts'. */ |
| 269 AVR_INSN (xch, "z,r", "1001001rrrrr0100", 1, AVR_ISA_XCH, 0x9204) |
| 270 AVR_INSN (las, "z,r", "1001001rrrrr0101", 1, AVR_ISA_XCH, 0x9205) |
| 271 AVR_INSN (lac, "z,r", "1001001rrrrr0110", 1, AVR_ISA_XCH, 0x9206) |
| 272 AVR_INSN (lat, "z,r", "1001001rrrrr0111", 1, AVR_ISA_XCH, 0x9207) |
| 273 |
| 268 /* Known to be decoded as `nop' by the old core. */ | 274 /* Known to be decoded as `nop' by the old core. */ |
| 269 AVR_INSN (movw, "v,v", "00000001ddddrrrr", 1, AVR_ISA_MOVW, 0x0100) | 275 AVR_INSN (movw, "v,v", "00000001ddddrrrr", 1, AVR_ISA_MOVW, 0x0100) |
| 270 AVR_INSN (muls, "d,d", "00000010ddddrrrr", 1, AVR_ISA_MUL, 0x0200) | 276 AVR_INSN (muls, "d,d", "00000010ddddrrrr", 1, AVR_ISA_MUL, 0x0200) |
| 271 AVR_INSN (mulsu,"a,a", "000000110ddd0rrr", 1, AVR_ISA_MUL, 0x0300) | 277 AVR_INSN (mulsu,"a,a", "000000110ddd0rrr", 1, AVR_ISA_MUL, 0x0300) |
| 272 AVR_INSN (fmul, "a,a", "000000110ddd1rrr", 1, AVR_ISA_MUL, 0x0308) | 278 AVR_INSN (fmul, "a,a", "000000110ddd1rrr", 1, AVR_ISA_MUL, 0x0308) |
| 273 AVR_INSN (fmuls,"a,a", "000000111ddd0rrr", 1, AVR_ISA_MUL, 0x0380) | 279 AVR_INSN (fmuls,"a,a", "000000111ddd0rrr", 1, AVR_ISA_MUL, 0x0380) |
| 274 AVR_INSN (fmulsu,"a,a","000000111ddd1rrr", 1, AVR_ISA_MUL, 0x0388) | 280 AVR_INSN (fmulsu,"a,a","000000111ddd1rrr", 1, AVR_ISA_MUL, 0x0388) |
| 275 | 281 |
| 276 AVR_INSN (sts, "i,r", "1001001ddddd0000", 2, AVR_ISA_2xxx, 0x9200) | 282 AVR_INSN (sts, "i,r", "1001001ddddd0000", 2, AVR_ISA_2xxx, 0x9200) |
| 277 AVR_INSN (lds, "r,i", "1001000ddddd0000", 2, AVR_ISA_2xxx, 0x9000) | 283 AVR_INSN (lds, "r,i", "1001000ddddd0000", 2, AVR_ISA_2xxx, 0x9000) |
| 278 | 284 |
| 279 /* Special case for b+0, `e' must be next entry after `b', | 285 /* Special case for b+0, `e' must be next entry after `b', |
| 280 b={Y=1,Z=0}, ee={X=11,Y=10,Z=00}, !=1 if -e or e+ or X. */ | 286 b={Y=1,Z=0}, ee={X=11,Y=10,Z=00}, !=1 if -e or e+ or X. */ |
| 281 AVR_INSN (ldd, "r,b", "10o0oo0dddddbooo", 1, AVR_ISA_2xxx, 0x8000) | 287 AVR_INSN (ldd, "r,b", "10o0oo0dddddbooo", 1, AVR_ISA_2xxx, 0x8000) |
| 282 AVR_INSN (ld, "r,e", "100!000dddddee-+", 1, AVR_ISA_1200, 0x8000) | 288 AVR_INSN (ld, "r,e", "100!000dddddee-+", 1, AVR_ISA_1200, 0x8000) |
| 283 AVR_INSN (std, "b,r", "10o0oo1rrrrrbooo", 1, AVR_ISA_2xxx, 0x8200) | 289 AVR_INSN (std, "b,r", "10o0oo1rrrrrbooo", 1, AVR_ISA_2xxx, 0x8200) |
| 284 AVR_INSN (st, "e,r", "100!001rrrrree-+", 1, AVR_ISA_1200, 0x8200) | 290 AVR_INSN (st, "e,r", "100!001rrrrree-+", 1, AVR_ISA_1200, 0x8200) |
| 285 | 291 |
| 286 /* These are for devices that don't exist yet | 292 /* These are for devices that don't exist yet |
| 287 (>128K program memory, PC = EIND:Z). */ | 293 (>128K program memory, PC = EIND:Z). */ |
| 288 AVR_INSN (eicall, "", "1001010100011001", 1, AVR_ISA_EIND, 0x9519) | 294 AVR_INSN (eicall, "", "1001010100011001", 1, AVR_ISA_EIND, 0x9519) |
| 289 AVR_INSN (eijmp, "", "1001010000011001", 1, AVR_ISA_EIND, 0x9419) | 295 AVR_INSN (eijmp, "", "1001010000011001", 1, AVR_ISA_EIND, 0x9419) |
| 290 | 296 |
| 291 /* DES instruction for encryption and decryption */ | 297 /* DES instruction for encryption and decryption */ |
| 292 AVR_INSN (des, "E", "10010100EEEE1011", 1, AVR_ISA_DES, 0x940B) | 298 AVR_INSN (des, "E", "10010100EEEE1011", 1, AVR_ISA_DES, 0x940B) |
| 293 | 299 |
| OLD | NEW |