/* nfp.h.  NFP opcode list.
   Copyright (C) 2017-2021 Free Software Foundation, Inc.
   Contributed by Francois H. Theron <francois.theron@netronome.com>

   This file is part of the GNU opcodes library.

   GDB, GAS, and the GNU binutils are free software; you can redistribute
   them and/or modify them 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.

   GDB, GAS, and the GNU binutils are distributed in the hope that they
   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 COPYING3.  If not, write to the Free
   Software Foundation, 51 Franklin Street - Fifth Floor, Boston,
   MA 02110-1301, USA.  */

#ifndef _NFP_H_
#define _NFP_H_

#include "bfd.h"
#include <stdint.h>
#include "elf/nfp.h"

#ifdef __cplusplus
extern "C"
{
#endif

/* We use ME versions for most of this rather than NFP family and revision
   numbers.  The version numbers are currently 2.7 and 2.8 and to avoid long
   names with many underscores we'll just use 27 and 28 until some feature
   number makes it necessary to do something different.  */

#define NFP_ME27_INSTR_MASK_CMD	        ((uint64_t) 0x008000000000)
#define NFP_ME27_INSTR_CMD		((uint64_t) 0x000000000000)
#define NFP_ME27_INSTR_IS_CMD(instr) \
	((instr & NFP_ME27_INSTR_MASK_CMD) == NFP_ME27_INSTR_CMD)

#define NFP_ME27_INSTR_MASK_ALU_SHF	((uint64_t) 0x1ee000000000)
#define NFP_ME27_INSTR_ALU_SHF		((uint64_t) 0x008000000000)
#define NFP_ME27_INSTR_IS_ALU_SHF(instr) \
	((instr & NFP_ME27_INSTR_MASK_ALU_SHF) == NFP_ME27_INSTR_ALU_SHF)

#define NFP_ME27_INSTR_MASK_ALU	        ((uint64_t) 0x1ee000000000)
#define NFP_ME27_INSTR_ALU		((uint64_t) 0x00a000000000)
#define NFP_ME27_INSTR_IS_ALU(instr) \
		((instr & NFP_ME27_INSTR_MASK_ALU) == NFP_ME27_INSTR_ALU)

#define NFP_ME27_INSTR_MASK_IMMED	((uint64_t) 0x1ff900000000)
#define NFP_ME27_INSTR_IMMED		((uint64_t) 0x00f000000000)
#define NFP_ME27_INSTR_IS_IMMED(instr) \
	((instr & NFP_ME27_INSTR_MASK_IMMED) == NFP_ME27_INSTR_IMMED)

#define NFP_ME27_INSTR_MASK_LD_FIELD	((uint64_t) 0x1ffa00e00000)
#define NFP_ME27_INSTR_LD_FIELD	        ((uint64_t) 0x00c000000000)
#define NFP_ME27_INSTR_IS_LD_FIELD(instr) \
	((instr & NFP_ME27_INSTR_MASK_LD_FIELD) == NFP_ME27_INSTR_LD_FIELD)

#define NFP_ME27_INSTR_MASK_CTX_ARB	((uint64_t) 0x00f800000000)
#define NFP_ME27_INSTR_CTX_ARB		((uint64_t) 0x00e000000000)
#define NFP_ME27_INSTR_IS_CTX_ARB(instr) \
	((instr & NFP_ME27_INSTR_MASK_CTX_ARB) == NFP_ME27_INSTR_CTX_ARB)

#define NFP_ME27_INSTR_MASK_LOCAL_CSR	((uint64_t) 0x1ffe00100000)
#define NFP_ME27_INSTR_LOCAL_CSR	((uint64_t) 0x00fc00000000)
#define NFP_ME27_INSTR_IS_LOCAL_CSR(instr) \
	((instr & NFP_ME27_INSTR_MASK_LOCAL_CSR) == NFP_ME27_INSTR_LOCAL_CSR)

#define NFP_ME27_INSTR_MASK_BRANCH	((uint64_t) 0x00f8000c3ce0)
#define NFP_ME27_INSTR_BRANCH		((uint64_t) 0x00d800000020)
#define NFP_ME27_INSTR_IS_BRANCH(instr) \
	((instr & NFP_ME27_INSTR_MASK_BRANCH) == NFP_ME27_INSTR_BRANCH)

#define NFP_ME27_INSTR_MASK_BR_BYTE	((uint64_t) 0x00f800000000)
#define NFP_ME27_INSTR_BR_BYTE		((uint64_t) 0x00c800000000)
#define NFP_ME27_INSTR_IS_BR_BYTE(instr) \
	((instr & NFP_ME27_INSTR_MASK_BR_BYTE) == NFP_ME27_INSTR_BR_BYTE)

#define NFP_ME27_INSTR_MASK_BR_BIT	((uint64_t) 0x00f800080300)
#define NFP_ME27_INSTR_BR_BIT		((uint64_t) 0x00d000000000)
#define NFP_ME27_INSTR_IS_BR_BIT(instr) \
	((instr & NFP_ME27_INSTR_MASK_BR_BIT) == NFP_ME27_INSTR_BR_BIT)

#define NFP_ME27_INSTR_MASK_BR_ALU	((uint64_t) 0x1fff80000000)
#define NFP_ME27_INSTR_BR_ALU		((uint64_t) 0x00e800000000)
#define NFP_ME27_INSTR_IS_BR_ALU(instr) \
	((instr & NFP_ME27_INSTR_MASK_BR_ALU) == NFP_ME27_INSTR_BR_ALU)

#define NFP_ME27_INSTR_MASK_MULT	((uint64_t) 0x1efe3f000000)
#define NFP_ME27_INSTR_MULT		((uint64_t) 0x00f800000000)
#define NFP_ME27_INSTR_IS_MULT(instr) \
	((instr & NFP_ME27_INSTR_MASK_MULT) == NFP_ME27_INSTR_MULT)


#define NFP_ME28_INSTR_MASK_CMD	        ((uint64_t) 0x008000000000)
#define NFP_ME28_INSTR_CMD		((uint64_t) 0x000000000000)
#define NFP_ME28_INSTR_IS_CMD(instr) \
	((instr & NFP_ME28_INSTR_MASK_CMD) == NFP_ME28_INSTR_CMD)

#define NFP_ME28_INSTR_MASK_ALU_SHF	((uint64_t) 0x00e000000000)
#define NFP_ME28_INSTR_ALU_SHF		((uint64_t) 0x008000000000)
#define NFP_ME28_INSTR_IS_ALU_SHF(instr) \
	((instr & NFP_ME28_INSTR_MASK_ALU_SHF) == NFP_ME28_INSTR_ALU_SHF)

#define NFP_ME28_INSTR_MASK_ALU	        ((uint64_t) 0x00e000000000)
#define NFP_ME28_INSTR_ALU		((uint64_t) 0x00a000000000)
#define NFP_ME28_INSTR_IS_ALU(instr) \
	((instr & NFP_ME28_INSTR_MASK_ALU) == NFP_ME28_INSTR_ALU)

#define NFP_ME28_INSTR_MASK_IMMED	((uint64_t) 0x01f900000000)
#define NFP_ME28_INSTR_IMMED		((uint64_t) 0x00f000000000)
#define NFP_ME28_INSTR_IS_IMMED(instr) \
	((instr & NFP_ME28_INSTR_MASK_IMMED) == NFP_ME28_INSTR_IMMED)

#define NFP_ME28_INSTR_MASK_LD_FIELD	((uint64_t) 0x01fa00e00000)
#define NFP_ME28_INSTR_LD_FIELD	        ((uint64_t) 0x00c000000000)
#define NFP_ME28_INSTR_IS_LD_FIELD(instr) \
	((instr & NFP_ME28_INSTR_MASK_LD_FIELD) == NFP_ME28_INSTR_LD_FIELD)

#define NFP_ME28_INSTR_MASK_CTX_ARB	((uint64_t) 0x00f800000000)
#define NFP_ME28_INSTR_CTX_ARB		((uint64_t) 0x00e000000000)
#define NFP_ME28_INSTR_IS_CTX_ARB(instr) \
	((instr & NFP_ME28_INSTR_MASK_CTX_ARB) == NFP_ME28_INSTR_CTX_ARB)

#define NFP_ME28_INSTR_MASK_LOCAL_CSR	((uint64_t) 0x01fe00100000)
#define NFP_ME28_INSTR_LOCAL_CSR	((uint64_t) 0x00fc00000000)
#define NFP_ME28_INSTR_IS_LOCAL_CSR(instr) \
	((instr & NFP_ME28_INSTR_MASK_LOCAL_CSR) == NFP_ME28_INSTR_LOCAL_CSR)

#define NFP_ME28_INSTR_MASK_BRANCH	((uint64_t) 0x00f8000c3ce0)
#define NFP_ME28_INSTR_BRANCH		((uint64_t) 0x00d800000020)
#define NFP_ME28_INSTR_IS_BRANCH(instr) \
	((instr & NFP_ME28_INSTR_MASK_BRANCH) == NFP_ME28_INSTR_BRANCH)

#define NFP_ME28_INSTR_MASK_BR_BYTE	((uint64_t) 0x00f800000000)
#define NFP_ME28_INSTR_BR_BYTE		((uint64_t) 0x00c800000000)
#define NFP_ME28_INSTR_IS_BR_BYTE(instr) \
	((instr & NFP_ME28_INSTR_MASK_BR_BYTE) == NFP_ME28_INSTR_BR_BYTE)

#define NFP_ME28_INSTR_MASK_BR_BIT	((uint64_t) 0x00f800080300)
#define NFP_ME28_INSTR_BR_BIT		((uint64_t) 0x00d000000000)
#define NFP_ME28_INSTR_IS_BR_BIT(instr) \
	((instr & NFP_ME28_INSTR_MASK_BR_BIT) == NFP_ME28_INSTR_BR_BIT)

#define NFP_ME28_INSTR_MASK_BR_ALU	((uint64_t) 0x00ff80000000)
#define NFP_ME28_INSTR_BR_ALU		((uint64_t) 0x00e800000000)
#define NFP_ME28_INSTR_IS_BR_ALU(instr) \
	((instr & NFP_ME28_INSTR_MASK_BR_ALU) == NFP_ME28_INSTR_BR_ALU)

#define NFP_ME28_INSTR_MASK_MULT	((uint64_t) 0x00fe3f000000)
#define NFP_ME28_INSTR_MULT		((uint64_t) 0x00f800000000)
#define NFP_ME28_INSTR_IS_MULT(instr) \
	((instr & NFP_ME28_INSTR_MASK_MULT) == NFP_ME28_INSTR_MULT)

typedef struct
{
  int cpp_target;
  int cpp_action;
  int cpp_token;
  unsigned int len_fixed;
  unsigned int len_mask;
  const char *mnemonic;
}
nfp_cmd_mnemonic;

#ifdef __cplusplus
}
#endif

#endif				/* _NFP_H_ */
