#include "elf/mep.h"
#define CGEN_VALIDATE_INSN_SUPPORTED
+#define mep_cgen_insn_supported mep_cgen_insn_supported_asm
const char * parse_csrn (CGEN_CPU_DESC, const char **, CGEN_KEYWORD *, long *);
const char * parse_tpreg (CGEN_CPU_DESC, const char **, CGEN_KEYWORD *, long *);
const char * parse_mep_align (CGEN_CPU_DESC, const char **, enum cgen_operand_type, long *);
const char * parse_mep_alignu (CGEN_CPU_DESC, const char **, enum cgen_operand_type, unsigned long *);
static const char * parse_signed16 (CGEN_CPU_DESC, const char **, int, long *);
+static const char * parse_signed16_range (CGEN_CPU_DESC, const char **, int, long *);
static const char * parse_unsigned16 (CGEN_CPU_DESC, const char **, int, unsigned long *);
+static const char * parse_unsigned16_range (CGEN_CPU_DESC, const char **, int, unsigned long *);
static const char * parse_lo16 (CGEN_CPU_DESC, const char **, int, long *, long);
static const char * parse_unsigned7 (CGEN_CPU_DESC, const char **, enum cgen_operand_type, unsigned long *);
static const char * parse_zero (CGEN_CPU_DESC, const char **, int, long *);
return parse_lo16 (cd, strp, opindex, (long *) valuep, 0);
}
+static const char *
+parse_signed16_range (CGEN_CPU_DESC cd,
+ const char **strp,
+ int opindex,
+ signed long *valuep)
+{
+ const char *errmsg = 0;
+ signed long value;
+
+ errmsg = cgen_parse_signed_integer (cd, strp, opindex, & value);
+ if (errmsg)
+ return errmsg;
+
+ if (value < -32768 || value > 32767)
+ return _("Immediate is out of range -32768 to 32767");
+
+ *valuep = value;
+ return 0;
+}
+
+static const char *
+parse_unsigned16_range (CGEN_CPU_DESC cd,
+ const char **strp,
+ int opindex,
+ unsigned long *valuep)
+{
+ const char *errmsg = 0;
+ unsigned long value;
+
+ errmsg = cgen_parse_unsigned_integer (cd, strp, opindex, & value);
+ if (errmsg)
+ return errmsg;
+
+ if (value > 65535)
+ return _("Immediate is out of range 0 to 65535");
+
+ *valuep = value;
+ return 0;
+}
+
/* A special case of parse_signed16 which accepts only the value zero. */
static const char *
errmsg = cgen_parse_keyword (cd, strp, & mep_cgen_opval_h_csr, & junk);
break;
case MEP_OPERAND_IMM16P0 :
- errmsg = cgen_parse_unsigned_integer (cd, strp, MEP_OPERAND_IMM16P0, (unsigned long *) (& fields->f_ivc2_imm16p0));
+ errmsg = parse_unsigned16_range (cd, strp, MEP_OPERAND_IMM16P0, (unsigned long *) (& fields->f_ivc2_imm16p0));
break;
case MEP_OPERAND_IMM3P12 :
errmsg = cgen_parse_unsigned_integer (cd, strp, MEP_OPERAND_IMM3P12, (unsigned long *) (& fields->f_ivc2_3u12));
case MEP_OPERAND_IVC_X_6_3 :
errmsg = cgen_parse_unsigned_integer (cd, strp, MEP_OPERAND_IVC_X_6_3, (unsigned long *) (& fields->f_ivc2_3u6));
break;
+ case MEP_OPERAND_IVC2_ACC0_0 :
+ errmsg = cgen_parse_keyword (cd, strp, & mep_cgen_opval_h_ccr_ivc2, & junk);
+ break;
+ case MEP_OPERAND_IVC2_ACC0_1 :
+ errmsg = cgen_parse_keyword (cd, strp, & mep_cgen_opval_h_ccr_ivc2, & junk);
+ break;
+ case MEP_OPERAND_IVC2_ACC0_2 :
+ errmsg = cgen_parse_keyword (cd, strp, & mep_cgen_opval_h_ccr_ivc2, & junk);
+ break;
+ case MEP_OPERAND_IVC2_ACC0_3 :
+ errmsg = cgen_parse_keyword (cd, strp, & mep_cgen_opval_h_ccr_ivc2, & junk);
+ break;
+ case MEP_OPERAND_IVC2_ACC0_4 :
+ errmsg = cgen_parse_keyword (cd, strp, & mep_cgen_opval_h_ccr_ivc2, & junk);
+ break;
+ case MEP_OPERAND_IVC2_ACC0_5 :
+ errmsg = cgen_parse_keyword (cd, strp, & mep_cgen_opval_h_ccr_ivc2, & junk);
+ break;
+ case MEP_OPERAND_IVC2_ACC0_6 :
+ errmsg = cgen_parse_keyword (cd, strp, & mep_cgen_opval_h_ccr_ivc2, & junk);
+ break;
+ case MEP_OPERAND_IVC2_ACC0_7 :
+ errmsg = cgen_parse_keyword (cd, strp, & mep_cgen_opval_h_ccr_ivc2, & junk);
+ break;
+ case MEP_OPERAND_IVC2_ACC1_0 :
+ errmsg = cgen_parse_keyword (cd, strp, & mep_cgen_opval_h_ccr_ivc2, & junk);
+ break;
+ case MEP_OPERAND_IVC2_ACC1_1 :
+ errmsg = cgen_parse_keyword (cd, strp, & mep_cgen_opval_h_ccr_ivc2, & junk);
+ break;
+ case MEP_OPERAND_IVC2_ACC1_2 :
+ errmsg = cgen_parse_keyword (cd, strp, & mep_cgen_opval_h_ccr_ivc2, & junk);
+ break;
+ case MEP_OPERAND_IVC2_ACC1_3 :
+ errmsg = cgen_parse_keyword (cd, strp, & mep_cgen_opval_h_ccr_ivc2, & junk);
+ break;
+ case MEP_OPERAND_IVC2_ACC1_4 :
+ errmsg = cgen_parse_keyword (cd, strp, & mep_cgen_opval_h_ccr_ivc2, & junk);
+ break;
+ case MEP_OPERAND_IVC2_ACC1_5 :
+ errmsg = cgen_parse_keyword (cd, strp, & mep_cgen_opval_h_ccr_ivc2, & junk);
+ break;
+ case MEP_OPERAND_IVC2_ACC1_6 :
+ errmsg = cgen_parse_keyword (cd, strp, & mep_cgen_opval_h_ccr_ivc2, & junk);
+ break;
+ case MEP_OPERAND_IVC2_ACC1_7 :
+ errmsg = cgen_parse_keyword (cd, strp, & mep_cgen_opval_h_ccr_ivc2, & junk);
+ break;
+ case MEP_OPERAND_IVC2_CC :
+ errmsg = cgen_parse_keyword (cd, strp, & mep_cgen_opval_h_ccr_ivc2, & junk);
+ break;
+ case MEP_OPERAND_IVC2_COFA0 :
+ errmsg = cgen_parse_keyword (cd, strp, & mep_cgen_opval_h_ccr_ivc2, & junk);
+ break;
+ case MEP_OPERAND_IVC2_COFA1 :
+ errmsg = cgen_parse_keyword (cd, strp, & mep_cgen_opval_h_ccr_ivc2, & junk);
+ break;
+ case MEP_OPERAND_IVC2_COFR0 :
+ errmsg = cgen_parse_keyword (cd, strp, & mep_cgen_opval_h_ccr_ivc2, & junk);
+ break;
+ case MEP_OPERAND_IVC2_COFR1 :
+ errmsg = cgen_parse_keyword (cd, strp, & mep_cgen_opval_h_ccr_ivc2, & junk);
+ break;
+ case MEP_OPERAND_IVC2_CSAR0 :
+ errmsg = cgen_parse_keyword (cd, strp, & mep_cgen_opval_h_ccr_ivc2, & junk);
+ break;
+ case MEP_OPERAND_IVC2_CSAR1 :
+ errmsg = cgen_parse_keyword (cd, strp, & mep_cgen_opval_h_ccr_ivc2, & junk);
+ break;
case MEP_OPERAND_IVC2C3CCRN :
- errmsg = cgen_parse_keyword (cd, strp, & mep_cgen_opval_h_ccr_ivc2, & fields->f_ccrn);
+ errmsg = cgen_parse_keyword (cd, strp, & mep_cgen_opval_h_ccr_ivc2, & fields->f_ivc2_ccrn_c3);
break;
case MEP_OPERAND_IVC2CCRN :
errmsg = cgen_parse_keyword (cd, strp, & mep_cgen_opval_h_ccr_ivc2, & fields->f_ivc2_ccrn);
errmsg = parse_signed16 (cd, strp, MEP_OPERAND_SIMM16, (long *) (& fields->f_16s16));
break;
case MEP_OPERAND_SIMM16P0 :
- errmsg = cgen_parse_signed_integer (cd, strp, MEP_OPERAND_SIMM16P0, (long *) (& fields->f_ivc2_simm16p0));
+ errmsg = parse_signed16_range (cd, strp, MEP_OPERAND_SIMM16P0, (long *) (& fields->f_ivc2_simm16p0));
break;
case MEP_OPERAND_SIMM6 :
errmsg = cgen_parse_signed_integer (cd, strp, MEP_OPERAND_SIMM6, (long *) (& fields->f_6s8));