Blame include/opcode/msp430.h

Packit bbfece
/* Opcode table for the TI MSP430 microcontrollers
Packit bbfece
Packit bbfece
   Copyright (C) 2002-2018 Free Software Foundation, Inc.
Packit bbfece
   Contributed by Dmitry Diky <diwil@mail.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
#ifndef __MSP430_H_
Packit bbfece
#define __MSP430_H_
Packit bbfece
Packit bbfece
struct msp430_operand_s
Packit bbfece
{
Packit bbfece
  int ol;	/* Operand length words.  */
Packit bbfece
  int am;	/* Addr mode.  */
Packit bbfece
  int reg;	/* Register.  */
Packit bbfece
  int mode;	/* Operand mode.  */
Packit bbfece
  int vshift;   /* Number of bytes to shift operand down.  */
Packit bbfece
#define OP_REG		0
Packit bbfece
#define OP_EXP		1
Packit bbfece
#ifndef DASM_SECTION
Packit bbfece
  expressionS	exp;
Packit bbfece
#endif
Packit bbfece
};
Packit bbfece
Packit bbfece
/* Byte operation flag for all instructions.  Also used as the
Packit bbfece
   A/L bit in the extension word to indicate a 20-bit operation.  */
Packit bbfece
#define BYTE_OPERATION    (1 << 6)
Packit bbfece
/* Z/C bit in the extension word.  If set the carry bit is ignored
Packit bbfece
   for the duration of the operation, although it may be changed as
Packit bbfece
   a result of the operation.  */
Packit bbfece
#define IGNORE_CARRY_BIT  (1 << 8)  
Packit bbfece
Packit bbfece
struct  msp430_opcode_s
Packit bbfece
{
Packit bbfece
  const char *name;
Packit bbfece
  int fmt;
Packit bbfece
  int insn_opnumb;
Packit bbfece
  int bin_opcode;
Packit bbfece
  int bin_mask;
Packit bbfece
};
Packit bbfece
Packit bbfece
#define MSP_INSN(name, fmt, numb, bin, mask) { #name, fmt, numb, bin, mask }
Packit bbfece
Packit bbfece
static struct msp430_opcode_s msp430_opcodes[] = 
Packit bbfece
{
Packit bbfece
  MSP_INSN (and,   1, 2, 0xf000, 0xf000),
Packit bbfece
  MSP_INSN (inv,   0, 1, 0xe330, 0xfff0),
Packit bbfece
  MSP_INSN (xor,   1, 2, 0xe000, 0xf000),
Packit bbfece
  MSP_INSN (setz,  0, 0, 0xd322, 0xffff),
Packit bbfece
  MSP_INSN (setc,  0, 0, 0xd312, 0xffff),
Packit bbfece
  MSP_INSN (eint,  0, 0, 0xd232, 0xffff),
Packit bbfece
  MSP_INSN (setn,  0, 0, 0xd222, 0xffff),
Packit bbfece
  MSP_INSN (bis,   1, 2, 0xd000, 0xf000),
Packit bbfece
  MSP_INSN (clrz,  0, 0, 0xc322, 0xffff),
Packit bbfece
  MSP_INSN (clrc,  0, 0, 0xc312, 0xffff),
Packit bbfece
  MSP_INSN (dint,  0, 0, 0xc232, 0xffff),
Packit bbfece
  MSP_INSN (clrn,  0, 0, 0xc222, 0xffff),
Packit bbfece
  MSP_INSN (bic,   1, 2, 0xc000, 0xf000),
Packit bbfece
  MSP_INSN (bit,   1, 2, 0xb000, 0xf000),
Packit bbfece
  MSP_INSN (dadc,  0, 1, 0xa300, 0xff30),
Packit bbfece
  MSP_INSN (dadd,  1, 2, 0xa000, 0xf000),
Packit bbfece
  MSP_INSN (tst,   0, 1, 0x9300, 0xff30),
Packit bbfece
  MSP_INSN (cmp,   1, 2, 0x9000, 0xf000),
Packit bbfece
  MSP_INSN (decd,  0, 1, 0x8320, 0xff30),
Packit bbfece
  MSP_INSN (dec,   0, 1, 0x8310, 0xff30),
Packit bbfece
  MSP_INSN (sub,   1, 2, 0x8000, 0xf000),
Packit bbfece
  MSP_INSN (sbc,   0, 1, 0x7300, 0xff30),
Packit bbfece
  MSP_INSN (subc,  1, 2, 0x7000, 0xf000),
Packit bbfece
  MSP_INSN (adc,   0, 1, 0x6300, 0xff30),
Packit bbfece
  MSP_INSN (rlc,   0, 2, 0x6000, 0xf000),
Packit bbfece
  MSP_INSN (addc,  1, 2, 0x6000, 0xf000),
Packit bbfece
  MSP_INSN (incd,  0, 1, 0x5320, 0xff30),
Packit bbfece
  MSP_INSN (inc,   0, 1, 0x5310, 0xff30),
Packit bbfece
  MSP_INSN (rla,   0, 2, 0x5000, 0xf000),
Packit bbfece
  MSP_INSN (add,   1, 2, 0x5000, 0xf000),
Packit bbfece
  MSP_INSN (nop,   0, 0, 0x4303, 0xffff),
Packit bbfece
  MSP_INSN (clr,   0, 1, 0x4300, 0xff30),
Packit bbfece
  MSP_INSN (ret,   0, 0, 0x4130, 0xff30),
Packit bbfece
  MSP_INSN (pop,   0, 1, 0x4130, 0xff30),
Packit bbfece
  MSP_INSN (br,    0, 3, 0x4000, 0xf000),
Packit bbfece
  MSP_INSN (mov,   1, 2, 0x4000, 0xf000),
Packit bbfece
  MSP_INSN (jmp,   3, 1, 0x3c00, 0xfc00),
Packit bbfece
  MSP_INSN (jl,    3, 1, 0x3800, 0xfc00),
Packit bbfece
  MSP_INSN (jge,   3, 1, 0x3400, 0xfc00),
Packit bbfece
  MSP_INSN (jn,    3, 1, 0x3000, 0xfc00),
Packit bbfece
  MSP_INSN (jc,    3, 1, 0x2c00, 0xfc00),
Packit bbfece
  MSP_INSN (jhs,   3, 1, 0x2c00, 0xfc00),
Packit bbfece
  MSP_INSN (jnc,   3, 1, 0x2800, 0xfc00),
Packit bbfece
  MSP_INSN (jlo,   3, 1, 0x2800, 0xfc00),
Packit bbfece
  MSP_INSN (jz,    3, 1, 0x2400, 0xfc00),
Packit bbfece
  MSP_INSN (jeq,   3, 1, 0x2400, 0xfc00),
Packit bbfece
  MSP_INSN (jnz,   3, 1, 0x2000, 0xfc00),
Packit bbfece
  MSP_INSN (jne,   3, 1, 0x2000, 0xfc00),
Packit bbfece
  MSP_INSN (reti,  2, 0, 0x1300, 0xffc0),
Packit bbfece
  MSP_INSN (call,  2, 1, 0x1280, 0xffc0),
Packit bbfece
  MSP_INSN (push,  2, 1, 0x1200, 0xff80),
Packit bbfece
  MSP_INSN (sxt,   2, 1, 0x1180, 0xffc0),
Packit bbfece
  MSP_INSN (rra,   2, 1, 0x1100, 0xff80),
Packit bbfece
  MSP_INSN (swpb,  2, 1, 0x1080, 0xffc0),
Packit bbfece
  MSP_INSN (rrc,   2, 1, 0x1000, 0xff80),
Packit bbfece
  /* Simple polymorphs.  */
Packit bbfece
  MSP_INSN (beq,   4, 0, 0, 0xffff),
Packit bbfece
  MSP_INSN (bne,   4, 1, 0, 0xffff),
Packit bbfece
  MSP_INSN (blt,   4, 2, 0, 0xffff),
Packit bbfece
  MSP_INSN (bltu,  4, 3, 0, 0xffff),
Packit bbfece
  MSP_INSN (bge,   4, 4, 0, 0xffff),
Packit bbfece
  MSP_INSN (bgeu,  4, 5, 0, 0xffff),
Packit bbfece
  MSP_INSN (bltn,  4, 6, 0, 0xffff),
Packit bbfece
  MSP_INSN (jump,  4, 7, 0, 0xffff),
Packit bbfece
  /* Long polymorphs.  */
Packit bbfece
  MSP_INSN (bgt,   5, 0, 0, 0xffff),
Packit bbfece
  MSP_INSN (bgtu,  5, 1, 0, 0xffff),
Packit bbfece
  MSP_INSN (bleu,  5, 2, 0, 0xffff),
Packit bbfece
  MSP_INSN (ble,   5, 3, 0, 0xffff),
Packit bbfece
Packit bbfece
  /* MSP430X instructions - these ones use an extension word.
Packit bbfece
     A negative format indicates an MSP430X instruction.  */
Packit bbfece
  MSP_INSN (addcx, -2, 2, 0x6000, 0xf000),
Packit bbfece
  MSP_INSN (addx,  -2, 2, 0x5000, 0xf000),
Packit bbfece
  MSP_INSN (andx,  -2, 2, 0xf000, 0xf000),
Packit bbfece
  MSP_INSN (bicx,  -2, 2, 0xc000, 0xf000),
Packit bbfece
  MSP_INSN (bisx,  -2, 2, 0xd000, 0xf000),
Packit bbfece
  MSP_INSN (bitx,  -2, 2, 0xb000, 0xf000),
Packit bbfece
  MSP_INSN (cmpx,  -2, 2, 0x9000, 0xf000),
Packit bbfece
  MSP_INSN (daddx, -2, 2, 0xa000, 0xf000),
Packit bbfece
  MSP_INSN (movx,  -2, 2, 0x4000, 0xf000),
Packit bbfece
  MSP_INSN (subcx, -2, 2, 0x7000, 0xf000),
Packit bbfece
  MSP_INSN (subx,  -2, 2, 0x8000, 0xf000),
Packit bbfece
  MSP_INSN (xorx,  -2, 2, 0xe000, 0xf000),
Packit bbfece
Packit bbfece
  /* MSP430X Synthetic instructions.  */
Packit bbfece
  MSP_INSN (adcx,  -1, 1, 0x6300, 0xff30),
Packit bbfece
  MSP_INSN (clra,  -1, 1, 0x4300, 0xff30),
Packit bbfece
  MSP_INSN (clrx,  -1, 1, 0x4300, 0xff30),
Packit bbfece
  MSP_INSN (dadcx, -1, 1, 0xa300, 0xff30),
Packit bbfece
  MSP_INSN (decx,  -1, 1, 0x8310, 0xff30),  
Packit bbfece
  MSP_INSN (decda, -1, 1, 0x8320, 0xff30),
Packit bbfece
  MSP_INSN (decdx, -1, 1, 0x8320, 0xff30),
Packit bbfece
  MSP_INSN (incx,  -1, 1, 0x5310, 0xff30),  
Packit bbfece
  MSP_INSN (incda, -1, 1, 0x5320, 0xff30),
Packit bbfece
  MSP_INSN (incdx, -1, 1, 0x5320, 0xff30),
Packit bbfece
  MSP_INSN (invx,  -1, 1, 0xe330, 0xfff0),
Packit bbfece
  MSP_INSN (popx,  -1, 1, 0x4130, 0xff30),
Packit bbfece
  MSP_INSN (rlax,  -1, 2, 0x5000, 0xf000),  
Packit bbfece
  MSP_INSN (rlcx,  -1, 2, 0x6000, 0xf000),
Packit bbfece
  MSP_INSN (sbcx,  -1, 1, 0x7300, 0xff30),
Packit bbfece
  MSP_INSN (tsta,  -1, 1, 0x9300, 0xff30),
Packit bbfece
  MSP_INSN (tstx,  -1, 1, 0x9300, 0xff30),
Packit bbfece
Packit bbfece
  MSP_INSN (pushx, -3, 1, 0x1200, 0xff80),
Packit bbfece
  MSP_INSN (rrax,  -3, 1, 0x1100, 0xff80),
Packit bbfece
  MSP_INSN (rrcx,  -3, 1, 0x1000, 0xff80), /* Synthesised as RRC but with the Z/C bit clear.  */
Packit bbfece
  MSP_INSN (rrux,  -3, 1, 0x1000, 0xff80), /* Synthesised as RRC but with the Z/C bit set.  */
Packit bbfece
  MSP_INSN (swpbx, -3, 1, 0x1080, 0xffc0),
Packit bbfece
  MSP_INSN (sxtx,  -3, 1, 0x1180, 0xffc0),
Packit bbfece
Packit bbfece
  /* MSP430X Address instructions - no extension word needed.
Packit bbfece
     The insn_opnumb field is used to encode the nature of the
Packit bbfece
     instruction for assembly and disassembly purposes.  */
Packit bbfece
  MSP_INSN (calla, -1, 4, 0x1300, 0xff00),
Packit bbfece
Packit bbfece
  MSP_INSN (popm,  -1, 5, 0x1600, 0xfe00),
Packit bbfece
  MSP_INSN (pushm, -1, 5, 0x1400, 0xfe00),
Packit bbfece
Packit bbfece
  MSP_INSN (rrcm,  -1, 6, 0x0040, 0xf3e0),
Packit bbfece
  MSP_INSN (rram,  -1, 6, 0x0140, 0xf3e0),
Packit bbfece
  MSP_INSN (rlam,  -1, 6, 0x0240, 0xf3e0),
Packit bbfece
  MSP_INSN (rrum,  -1, 6, 0x0340, 0xf3e0),
Packit bbfece
Packit bbfece
  MSP_INSN (adda,  -1, 8, 0x00a0, 0xf0b0),
Packit bbfece
  MSP_INSN (cmpa,  -1, 8, 0x0090, 0xf0b0),
Packit bbfece
  MSP_INSN (suba,  -1, 8, 0x00b0, 0xf0b0),
Packit bbfece
Packit bbfece
  MSP_INSN (reta,  -1, 9, 0x0110, 0xffff),
Packit bbfece
  MSP_INSN (bra,   -1, 9, 0x0000, 0xf0cf),
Packit bbfece
  MSP_INSN (mova,  -1, 9, 0x0000, 0xf080),
Packit bbfece
  MSP_INSN (mova,  -1, 9, 0x0080, 0xf0b0),
Packit bbfece
  MSP_INSN (mova,  -1, 9, 0x00c0, 0xf0f0),
Packit bbfece
Packit bbfece
  /* Pseudo instruction to set the repeat field in the extension word.  */
Packit bbfece
  MSP_INSN (rpt,   -1, 10, 0x0000, 0x0000),
Packit bbfece
Packit bbfece
  /* End of instruction set.  */
Packit bbfece
  { NULL, 0, 0, 0, 0 }
Packit bbfece
};
Packit bbfece
Packit bbfece
#endif