+2009-05-28 DJ Delorie <dj@redhat.com>
+
+ * cpu/mep.opc (parse_signed16_range): New.
+ (parse_unsigned16_range): New.
+ * cpu/mep-ivc2.cpu (imm16p0, simm16p0): Use them.
+
2009-05-26 DJ Delorie <dj@redhat.com>
* cpu/mep-ivc2.cpu (h-ccr-ivc2): Enable for C3 slots, fix
(dnop ivc-x-0-4 "filler" (all-mep-isas) h-uint f-ivc2-4u0)
(dnop ivc-x-0-5 "filler" (all-mep-isas) h-uint f-ivc2-5u0)
-(dnop imm16p0 "Imm16p0" (all-mep-isas) h-uint f-ivc2-imm16p0)
-(dnop simm16p0 "sImm16p0" (all-mep-isas) h-sint f-ivc2-simm16p0)
+(dpop imm16p0 "Imm16p0" (all-mep-isas) h-uint f-ivc2-imm16p0 "unsigned16_range")
+(dpop simm16p0 "sImm16p0" (all-mep-isas) h-sint f-ivc2-simm16p0 "signed16_range")
(df f-ivc2-ccrn-c3hi "ccrn hi 2u28" (all-mep-isas) 28 2 UINT #f #f)
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 *