/* moxie-opc.c -- Definitions for moxie opcodes.
   Copyright (C) 2009-2014 Free Software Foundation, Inc.
   Contributed by Anthony Green (green@moxielogic.com).

   This file is part of the GNU opcodes library.

   This library is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 3, or (at your option)
   any later version.

   It is distributed in the hope that it will be useful, but WITHOUT
   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
   or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
   License for more details.

   You should have received a copy of the GNU General Public License
   along with this file; see the file COPYING.  If not, write to the
   Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston,
   MA 02110-1301, USA.  */

#include "sysdep.h"
#include "opcode/moxie.h"

/* The moxie processor's 16-bit instructions come in two forms:

  FORM 1 instructions start with a 0 bit...

    0oooooooaaaabbbb
    0              F

   ooooooo - form 1 opcode number
   aaaa    - operand A
   bbbb    - operand B

  FORM 2 instructions start with bits "10"...

    10ooaaaavvvvvvvv
    0              F

   oo       - form 2 opcode number
   aaaa     - operand A
   vvvvvvvv - 8-bit immediate value

  FORM 3 instructions start with a bits "11"...

    11oooovvvvvvvvvv
    0              F

   oooo         - form 3 opcode number
   vvvvvvvvvv   - 10-bit immediate value.  */

const moxie_opc_info_t moxie_form1_opc_info[128] =
  {
    { 0x00, MOXIE_BAD,     "bad" },  // Reserved as bad.
    { 0x01, MOXIE_F1_A4,   "ldi.l" },
    { 0x02, MOXIE_F1_AB,   "mov" },
    { 0x03, MOXIE_F1_M,    "jsra" },
    { 0x04, MOXIE_F1_NARG, "ret" },
    { 0x05, MOXIE_F1_AB,   "add.l" },
    { 0x06, MOXIE_F1_AB,   "push" },
    { 0x07, MOXIE_F1_AB,   "pop" },
    { 0x08, MOXIE_F1_A4,   "lda.l" },
    { 0x09, MOXIE_F1_4A,   "sta.l" },
    { 0x0a, MOXIE_F1_ABi,  "ld.l" },
    { 0x0b, MOXIE_F1_AiB,  "st.l" },
    { 0x0c, MOXIE_F1_ABi4, "ldo.l" },
    { 0x0d, MOXIE_F1_AiB4, "sto.l" },
    { 0x0e, MOXIE_F1_AB,   "cmp" },
    { 0x0f, MOXIE_F1_NARG, "nop" },
    { 0x10, MOXIE_F1_AB,   "sex.b" },
    { 0x11, MOXIE_F1_AB,   "sex.s" },
    { 0x12, MOXIE_BAD,     "bad" },
    { 0x13, MOXIE_BAD,     "bad" },
    { 0x14, MOXIE_BAD,     "bad" },
    { 0x15, MOXIE_BAD,     "bad" },
    { 0x16, MOXIE_BAD,     "bad" },
    { 0x17, MOXIE_BAD,     "bad" },
    { 0x18, MOXIE_BAD,     "bad" },
    { 0x19, MOXIE_F1_A,    "jsr" },
    { 0x1a, MOXIE_F1_M,    "jmpa" },
    { 0x1b, MOXIE_F1_A4,   "ldi.b" },
    { 0x1c, MOXIE_F1_ABi,  "ld.b" },
    { 0x1d, MOXIE_F1_A4,   "lda.b" },
    { 0x1e, MOXIE_F1_AiB,  "st.b" },
    { 0x1f, MOXIE_F1_4A,   "sta.b" },
    { 0x20, MOXIE_F1_A4,   "ldi.s" },
    { 0x21, MOXIE_F1_ABi,  "ld.s" },
    { 0x22, MOXIE_F1_A4,   "lda.s" },
    { 0x23, MOXIE_F1_AiB,  "st.s" },
    { 0x24, MOXIE_F1_4A,   "sta.s" },
    { 0x25, MOXIE_F1_A,    "jmp" },
    { 0x26, MOXIE_F1_AB,   "and" },
    { 0x27, MOXIE_F1_AB,   "lshr" },
    { 0x28, MOXIE_F1_AB,   "ashl" },
    { 0x29, MOXIE_F1_AB,   "sub.l" },
    { 0x2a, MOXIE_F1_AB,   "neg" },
    { 0x2b, MOXIE_F1_AB,   "or" },
    { 0x2c, MOXIE_F1_AB,   "not" },
    { 0x2d, MOXIE_F1_AB,   "ashr" },
    { 0x2e, MOXIE_F1_AB,   "xor" },
    { 0x2f, MOXIE_F1_AB,   "mul.l" },
    { 0x30, MOXIE_F1_4,    "swi" },
    { 0x31, MOXIE_F1_AB,   "div.l" },
    { 0x32, MOXIE_F1_AB,   "udiv.l" },
    { 0x33, MOXIE_F1_AB,   "mod.l" },
    { 0x34, MOXIE_F1_AB,   "umod.l" },
    { 0x35, MOXIE_F1_NARG, "brk" },
    { 0x36, MOXIE_F1_ABi4, "ldo.b" },
    { 0x37, MOXIE_F1_AiB4, "sto.b" },
    { 0x38, MOXIE_F1_ABi4, "ldo.s" },
    { 0x39, MOXIE_F1_AiB4, "sto.s" },
    { 0x3a, MOXIE_BAD,     "bad" },
    { 0x3b, MOXIE_BAD,     "bad" },
    { 0x3c, MOXIE_BAD,     "bad" },
    { 0x3d, MOXIE_BAD,     "bad" },
    { 0x3e, MOXIE_BAD,     "bad" },
    { 0x3f, MOXIE_BAD,     "bad" },
    { 0x40, MOXIE_BAD,     "bad" },
    { 0x41, MOXIE_BAD,     "bad" },
    { 0x42, MOXIE_BAD,     "bad" },
    { 0x43, MOXIE_BAD,     "bad" },
    { 0x44, MOXIE_BAD,     "bad" },
    { 0x45, MOXIE_BAD,     "bad" },
    { 0x46, MOXIE_BAD,     "bad" },
    { 0x47, MOXIE_BAD,     "bad" },
    { 0x48, MOXIE_BAD,     "bad" },
    { 0x49, MOXIE_BAD,     "bad" },
    { 0x4a, MOXIE_BAD,     "bad" },
    { 0x4b, MOXIE_BAD,     "bad" },
    { 0x4c, MOXIE_BAD,     "bad" },
    { 0x4d, MOXIE_BAD,     "bad" },
    { 0x4e, MOXIE_BAD,     "bad" },
    { 0x4f, MOXIE_BAD,     "bad" },
    { 0x50, MOXIE_BAD,     "bad" },
    { 0x51, MOXIE_BAD,     "bad" },
    { 0x52, MOXIE_BAD,     "bad" },
    { 0x53, MOXIE_BAD,     "bad" },
    { 0x54, MOXIE_BAD,     "bad" },
    { 0x55, MOXIE_BAD,     "bad" },
    { 0x56, MOXIE_BAD,     "bad" },
    { 0x57, MOXIE_BAD,     "bad" },
    { 0x58, MOXIE_BAD,     "bad" },
    { 0x59, MOXIE_BAD,     "bad" },
    { 0x5a, MOXIE_BAD,     "bad" },
    { 0x5b, MOXIE_BAD,     "bad" },
    { 0x5c, MOXIE_BAD,     "bad" },
    { 0x5d, MOXIE_BAD,     "bad" },
    { 0x5e, MOXIE_BAD,     "bad" },
    { 0x5f, MOXIE_BAD,     "bad" },
    { 0x60, MOXIE_BAD,     "bad" },
    { 0x61, MOXIE_BAD,     "bad" },
    { 0x62, MOXIE_BAD,     "bad" },
    { 0x63, MOXIE_BAD,     "bad" },
    { 0x64, MOXIE_BAD,     "bad" },
    { 0x65, MOXIE_BAD,     "bad" },
    { 0x66, MOXIE_BAD,     "bad" },
    { 0x67, MOXIE_BAD,     "bad" },
    { 0x68, MOXIE_BAD,     "bad" },
    { 0x69, MOXIE_BAD,     "bad" },
    { 0x6a, MOXIE_BAD,     "bad" },
    { 0x6b, MOXIE_BAD,     "bad" },
    { 0x6c, MOXIE_BAD,     "bad" },
    { 0x6d, MOXIE_BAD,     "bad" },
    { 0x6e, MOXIE_BAD,     "bad" },
    { 0x6f, MOXIE_BAD,     "bad" },
    { 0x70, MOXIE_BAD,     "bad" },
    { 0x71, MOXIE_BAD,     "bad" },
    { 0x72, MOXIE_BAD,     "bad" },
    { 0x73, MOXIE_BAD,     "bad" },
    { 0x74, MOXIE_BAD,     "bad" },
    { 0x75, MOXIE_BAD,     "bad" },
    { 0x76, MOXIE_BAD,     "bad" },
    { 0x77, MOXIE_BAD,     "bad" },
    { 0x78, MOXIE_BAD,     "bad" },
    { 0x79, MOXIE_BAD,     "bad" },
    { 0x7a, MOXIE_BAD,     "bad" },
    { 0x7b, MOXIE_BAD,     "bad" },
    { 0x7c, MOXIE_BAD,     "bad" },
    { 0x7d, MOXIE_BAD,     "bad" },
    { 0x7e, MOXIE_BAD,     "bad" },
    { 0x7f, MOXIE_BAD,     "bad" }
  };

const moxie_opc_info_t moxie_form2_opc_info[4] =
  {
    { 0x00, MOXIE_F2_A8V,  "inc" },
    { 0x01, MOXIE_F2_A8V,  "dec" },
    { 0x02, MOXIE_F2_A8V,  "gsr" },
    { 0x03, MOXIE_F2_A8V,  "ssr" }
  };

const moxie_opc_info_t moxie_form3_opc_info[16] =
  {
    { 0x00, MOXIE_F3_PCREL,"beq" },
    { 0x01, MOXIE_F3_PCREL,"bne" },
    { 0x02, MOXIE_F3_PCREL,"blt" },
    { 0x03, MOXIE_F3_PCREL,"bgt" },
    { 0x04, MOXIE_F3_PCREL,"bltu" },
    { 0x05, MOXIE_F3_PCREL,"bgtu" },
    { 0x06, MOXIE_F3_PCREL,"bge" },
    { 0x07, MOXIE_F3_PCREL,"ble" },
    { 0x08, MOXIE_F3_PCREL,"bgeu" },
    { 0x09, MOXIE_F3_PCREL,"bleu" },
    { 0x0a, MOXIE_BAD,     "bad" },
    { 0x0b, MOXIE_BAD,     "bad" },
    { 0x0c, MOXIE_BAD,     "bad" },
    { 0x0d, MOXIE_BAD,     "bad" },
    { 0x0e, MOXIE_BAD,     "bad" },
    { 0x0f, MOXIE_BAD,     "bad" }  // Reserved as bad.
  };
