/* Definitions for option handling for Nios II.
   Copyright (C) 2013-2023 Free Software Foundation, Inc.

This file is part of GCC.

GCC 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.

GCC 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 GCC; see the file COPYING3.  If not see
<http://www.gnu.org/licenses/>.  */

#ifndef NIOS2_OPTS_H
#define NIOS2_OPTS_H

/* Enumerate the possible -mgpopt choices.  */
enum nios2_gpopt_type
{
  gpopt_unspecified = -1,
  gpopt_none,
  gpopt_local,
  gpopt_global,
  gpopt_data,
  gpopt_all
};


/* Enumeration of all FPU insn codes.  */
#define N2FPU_ALL_CODES							\
  N2FPU_CODE(fadds) N2FPU_CODE(fsubs) N2FPU_CODE(fmuls) N2FPU_CODE(fdivs) \
  N2FPU_CODE(fmins) N2FPU_CODE(fmaxs)					\
  N2FPU_CODE(fnegs) N2FPU_CODE(fabss) N2FPU_CODE(fsqrts)		\
  N2FPU_CODE(fsins) N2FPU_CODE(fcoss) N2FPU_CODE(ftans) N2FPU_CODE(fatans) \
  N2FPU_CODE(fexps) N2FPU_CODE(flogs)					\
  N2FPU_CODE(fcmpeqs) N2FPU_CODE(fcmpnes)				\
  N2FPU_CODE(fcmplts) N2FPU_CODE(fcmples)				\
  N2FPU_CODE(fcmpgts) N2FPU_CODE(fcmpges)				\
  									\
  N2FPU_CODE(faddd) N2FPU_CODE(fsubd) N2FPU_CODE(fmuld) N2FPU_CODE(fdivd) \
  N2FPU_CODE(fmind) N2FPU_CODE(fmaxd)					\
  N2FPU_CODE(fnegd) N2FPU_CODE(fabsd) N2FPU_CODE(fsqrtd)		\
  N2FPU_CODE(fsind) N2FPU_CODE(fcosd) N2FPU_CODE(ftand) N2FPU_CODE(fatand) \
  N2FPU_CODE(fexpd) N2FPU_CODE(flogd)					\
  N2FPU_CODE(fcmpeqd) N2FPU_CODE(fcmpned)				\
  N2FPU_CODE(fcmpltd) N2FPU_CODE(fcmpled)				\
  N2FPU_CODE(fcmpgtd) N2FPU_CODE(fcmpged)				\
  									\
  N2FPU_CODE(floatis) N2FPU_CODE(floatus)				\
  N2FPU_CODE(floatid) N2FPU_CODE(floatud)				\
  N2FPU_CODE(round) N2FPU_CODE(fixsi) N2FPU_CODE(fixsu)			\
  N2FPU_CODE(fixdi) N2FPU_CODE(fixdu)					\
  N2FPU_CODE(fextsd) N2FPU_CODE(ftruncds)				\
									\
  N2FPU_CODE(fwrx) N2FPU_CODE(fwry)					\
  N2FPU_CODE(frdxlo) N2FPU_CODE(frdxhi) N2FPU_CODE(frdy)

enum n2fpu_code {
#define N2FPU_CODE(name) n2fpu_ ## name,
  N2FPU_ALL_CODES
#undef N2FPU_CODE
  n2fpu_code_num
};

/* An enumeration to indicate the custom code status; if values within 0--255
   are registered to an FPU insn, or custom insn.  */
enum nios2_ccs_code
{
  CCS_UNUSED,
  CCS_FPU,
  CCS_BUILTIN_CALL
};

/* Supported Nios II Architectures.  */
enum nios2_arch_type
{
  ARCH_R1=1,
  ARCH_R2
};

#endif

