decides if this function accepts symbolic constants or not.
(parse_signed_bitbase): Likewise.
(parse_unsigned_bitbase8): Pass the new parameter.
(parse_unsigned_bitbase11): Likewise.
(parse_unsigned_bitbase16): Likewise.
(parse_unsigned_bitbase19): Likewise.
(parse_unsigned_bitbase27): Likewise.
(parse_signed_bitbase8): Likewise.
(parse_signed_bitbase11): Likewise.
(parse_signed_bitbase19): Likewise.
* m32c-asm.c: Regenerate.
+2006-04-10 DJ Delorie <dj@redhat.com>
+
+ * m32c.opc (parse_unsigned_bitbase): Take a new parameter which
+ decides if this function accepts symbolic constants or not.
+ (parse_signed_bitbase): Likewise.
+ (parse_unsigned_bitbase8): Pass the new parameter.
+ (parse_unsigned_bitbase11): Likewise.
+ (parse_unsigned_bitbase16): Likewise.
+ (parse_unsigned_bitbase19): Likewise.
+ (parse_unsigned_bitbase27): Likewise.
+ (parse_signed_bitbase8): Likewise.
+ (parse_signed_bitbase11): Likewise.
+ (parse_signed_bitbase19): Likewise.
+
2006-03-13 DJ Delorie <dj@redhat.com>
* m32c.cpu (Bit3-S): New.
static const char *
parse_unsigned_bitbase (CGEN_CPU_DESC cd, const char **strp,
int opindex, unsigned long *valuep,
- unsigned bits)
+ unsigned bits, int allow_syms)
{
const char *errmsg = 0;
unsigned long bit;
unsigned long base;
const char *newp = *strp;
unsigned long long bitbase;
+ long have_zero = 0;
errmsg = cgen_parse_unsigned_integer (cd, & newp, opindex, & bit);
if (errmsg)
return "Missing base for bit,base:8";
++newp;
+
+ if (strncmp (newp, "0x0", 3) == 0
+ || (newp[0] == '0' && newp[1] != 'x'))
+ have_zero = 1;
+
errmsg = cgen_parse_unsigned_integer (cd, & newp, opindex, & base);
if (errmsg)
return errmsg;
if (bitbase >= (1ull << bits))
return _("bit,base is out of range");
+ /* If this field may require a relocation then use larger displacement. */
+ if (! have_zero && base == 0)
+ {
+ switch (allow_syms) {
+ case 0:
+ return _("bit,base out of range for symbol");
+ case 1:
+ break;
+ case 2:
+ if (strncmp (newp, "[sb]", 4) != 0)
+ return _("bit,base out of range for symbol");
+ break;
+ }
+ }
+
*valuep = bitbase;
*strp = newp;
return 0;
static const char *
parse_signed_bitbase (CGEN_CPU_DESC cd, const char **strp,
int opindex, signed long *valuep,
- unsigned bits)
+ unsigned bits, int allow_syms)
{
const char *errmsg = 0;
unsigned long bit;
const char *newp = *strp;
long long bitbase;
long long limit;
+ long have_zero = 0;
errmsg = cgen_parse_unsigned_integer (cd, & newp, opindex, & bit);
if (errmsg)
return "Missing base for bit,base:8";
++newp;
+
+ if (strncmp (newp, "0x0", 3) == 0
+ || (newp[0] == '0' && newp[1] != 'x'))
+ have_zero = 1;
+
errmsg = cgen_parse_signed_integer (cd, & newp, opindex, & base);
if (errmsg)
return errmsg;
if (bitbase < -limit || bitbase >= limit)
return _("bit,base is out of range");
+ /* If this field may require a relocation then use larger displacement. */
+ if (! have_zero && base == 0 && ! allow_syms)
+ return _("bit,base out of range for symbol");
+
*valuep = bitbase;
*strp = newp;
return 0;
parse_unsigned_bitbase8 (CGEN_CPU_DESC cd, const char **strp,
int opindex, unsigned long *valuep)
{
- return parse_unsigned_bitbase (cd, strp, opindex, valuep, 8);
+ return parse_unsigned_bitbase (cd, strp, opindex, valuep, 8, 0);
}
static const char *
parse_unsigned_bitbase11 (CGEN_CPU_DESC cd, const char **strp,
int opindex, unsigned long *valuep)
{
- return parse_unsigned_bitbase (cd, strp, opindex, valuep, 11);
+ return parse_unsigned_bitbase (cd, strp, opindex, valuep, 11, 0);
}
static const char *
parse_unsigned_bitbase16 (CGEN_CPU_DESC cd, const char **strp,
int opindex, unsigned long *valuep)
{
- return parse_unsigned_bitbase (cd, strp, opindex, valuep, 16);
+ return parse_unsigned_bitbase (cd, strp, opindex, valuep, 16, 1);
}
static const char *
parse_unsigned_bitbase19 (CGEN_CPU_DESC cd, const char **strp,
int opindex, unsigned long *valuep)
{
- return parse_unsigned_bitbase (cd, strp, opindex, valuep, 19);
+ return parse_unsigned_bitbase (cd, strp, opindex, valuep, 19, 2);
}
static const char *
parse_unsigned_bitbase27 (CGEN_CPU_DESC cd, const char **strp,
int opindex, unsigned long *valuep)
{
- return parse_unsigned_bitbase (cd, strp, opindex, valuep, 27);
+ return parse_unsigned_bitbase (cd, strp, opindex, valuep, 27, 1);
}
static const char *
parse_signed_bitbase8 (CGEN_CPU_DESC cd, const char **strp,
int opindex, signed long *valuep)
{
- return parse_signed_bitbase (cd, strp, opindex, valuep, 8);
+ return parse_signed_bitbase (cd, strp, opindex, valuep, 8, 1);
}
static const char *
parse_signed_bitbase11 (CGEN_CPU_DESC cd, const char **strp,
int opindex, signed long *valuep)
{
- return parse_signed_bitbase (cd, strp, opindex, valuep, 11);
+ return parse_signed_bitbase (cd, strp, opindex, valuep, 11, 0);
}
static const char *
parse_signed_bitbase19 (CGEN_CPU_DESC cd, const char **strp,
int opindex, signed long *valuep)
{
- return parse_signed_bitbase (cd, strp, opindex, valuep, 19);
+ return parse_signed_bitbase (cd, strp, opindex, valuep, 19, 1);
}
/* Parse the suffix as :<char> or as nothing followed by a whitespace. */
+2006-04-10 DJ Delorie <dj@redhat.com>
+
+ * m32c-asm.c: Regenerate.
+
2006-04-06 Carlos O'Donell <carlos@codesourcery.com>
* Makefile.am: Add install-html target.
static const char *
parse_unsigned_bitbase (CGEN_CPU_DESC cd, const char **strp,
int opindex, unsigned long *valuep,
- unsigned bits)
+ unsigned bits, int allow_syms)
{
const char *errmsg = 0;
unsigned long bit;
unsigned long base;
const char *newp = *strp;
unsigned long long bitbase;
+ long have_zero = 0;
errmsg = cgen_parse_unsigned_integer (cd, & newp, opindex, & bit);
if (errmsg)
return "Missing base for bit,base:8";
++newp;
+
+ if (strncmp (newp, "0x0", 3) == 0
+ || (newp[0] == '0' && newp[1] != 'x'))
+ have_zero = 1;
+
errmsg = cgen_parse_unsigned_integer (cd, & newp, opindex, & base);
if (errmsg)
return errmsg;
if (bitbase >= (1ull << bits))
return _("bit,base is out of range");
+ /* If this field may require a relocation then use larger displacement. */
+ if (! have_zero && base == 0)
+ {
+ switch (allow_syms) {
+ case 0:
+ return _("bit,base out of range for symbol");
+ case 1:
+ break;
+ case 2:
+ if (strncmp (newp, "[sb]", 4) != 0)
+ return _("bit,base out of range for symbol");
+ break;
+ }
+ }
+
*valuep = bitbase;
*strp = newp;
return 0;
static const char *
parse_signed_bitbase (CGEN_CPU_DESC cd, const char **strp,
int opindex, signed long *valuep,
- unsigned bits)
+ unsigned bits, int allow_syms)
{
const char *errmsg = 0;
unsigned long bit;
const char *newp = *strp;
long long bitbase;
long long limit;
+ long have_zero = 0;
errmsg = cgen_parse_unsigned_integer (cd, & newp, opindex, & bit);
if (errmsg)
return "Missing base for bit,base:8";
++newp;
+
+ if (strncmp (newp, "0x0", 3) == 0
+ || (newp[0] == '0' && newp[1] != 'x'))
+ have_zero = 1;
+
errmsg = cgen_parse_signed_integer (cd, & newp, opindex, & base);
if (errmsg)
return errmsg;
if (bitbase < -limit || bitbase >= limit)
return _("bit,base is out of range");
+ /* If this field may require a relocation then use larger displacement. */
+ if (! have_zero && base == 0 && ! allow_syms)
+ return _("bit,base out of range for symbol");
+
*valuep = bitbase;
*strp = newp;
return 0;
parse_unsigned_bitbase8 (CGEN_CPU_DESC cd, const char **strp,
int opindex, unsigned long *valuep)
{
- return parse_unsigned_bitbase (cd, strp, opindex, valuep, 8);
+ return parse_unsigned_bitbase (cd, strp, opindex, valuep, 8, 0);
}
static const char *
parse_unsigned_bitbase11 (CGEN_CPU_DESC cd, const char **strp,
int opindex, unsigned long *valuep)
{
- return parse_unsigned_bitbase (cd, strp, opindex, valuep, 11);
+ return parse_unsigned_bitbase (cd, strp, opindex, valuep, 11, 0);
}
static const char *
parse_unsigned_bitbase16 (CGEN_CPU_DESC cd, const char **strp,
int opindex, unsigned long *valuep)
{
- return parse_unsigned_bitbase (cd, strp, opindex, valuep, 16);
+ return parse_unsigned_bitbase (cd, strp, opindex, valuep, 16, 1);
}
static const char *
parse_unsigned_bitbase19 (CGEN_CPU_DESC cd, const char **strp,
int opindex, unsigned long *valuep)
{
- return parse_unsigned_bitbase (cd, strp, opindex, valuep, 19);
+ return parse_unsigned_bitbase (cd, strp, opindex, valuep, 19, 2);
}
static const char *
parse_unsigned_bitbase27 (CGEN_CPU_DESC cd, const char **strp,
int opindex, unsigned long *valuep)
{
- return parse_unsigned_bitbase (cd, strp, opindex, valuep, 27);
+ return parse_unsigned_bitbase (cd, strp, opindex, valuep, 27, 1);
}
static const char *
parse_signed_bitbase8 (CGEN_CPU_DESC cd, const char **strp,
int opindex, signed long *valuep)
{
- return parse_signed_bitbase (cd, strp, opindex, valuep, 8);
+ return parse_signed_bitbase (cd, strp, opindex, valuep, 8, 1);
}
static const char *
parse_signed_bitbase11 (CGEN_CPU_DESC cd, const char **strp,
int opindex, signed long *valuep)
{
- return parse_signed_bitbase (cd, strp, opindex, valuep, 11);
+ return parse_signed_bitbase (cd, strp, opindex, valuep, 11, 0);
}
static const char *
parse_signed_bitbase19 (CGEN_CPU_DESC cd, const char **strp,
int opindex, signed long *valuep)
{
- return parse_signed_bitbase (cd, strp, opindex, valuep, 19);
+ return parse_signed_bitbase (cd, strp, opindex, valuep, 19, 1);
}
/* Parse the suffix as :<char> or as nothing followed by a whitespace. */