Line 1... |
Line 1... |
/* CGEN generic assembler support code.
|
/* CGEN generic assembler support code.
|
Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005, 2007
|
Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005, 2007,
|
Free Software Foundation, Inc.
|
2011 Free Software Foundation, Inc.
|
|
|
This file is part of libopcodes.
|
This file is part of libopcodes.
|
|
|
This library is free software; you can redistribute it and/or modify
|
This library is free software; you can redistribute it and/or modify
|
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
Line 266... |
Line 266... |
errmsg = (* cd->parse_operand_fn)
|
errmsg = (* cd->parse_operand_fn)
|
(cd, CGEN_PARSE_OPERAND_INTEGER, strp, opindex, BFD_RELOC_NONE,
|
(cd, CGEN_PARSE_OPERAND_INTEGER, strp, opindex, BFD_RELOC_NONE,
|
&result, &value);
|
&result, &value);
|
/* FIXME: Examine `result'. */
|
/* FIXME: Examine `result'. */
|
if (!errmsg)
|
if (!errmsg)
|
|
{
|
|
/* Handle the case where a hex value is parsed on a 64-bit host.
|
|
A value like 0xffffe000 is clearly intended to be a negative
|
|
16-bit value, but on a 64-bit host it will be parsed by gas
|
|
as 0x00000000ffffe000.
|
|
|
|
The shifts below are designed not to produce compile time
|
|
warnings on a 32-bit host. */
|
|
if (sizeof (value) > 4
|
|
&& result == CGEN_PARSE_OPERAND_RESULT_NUMBER
|
|
&& value > 0
|
|
&& (value & 0x80000000)
|
|
&& ((value >> 31) == 1))
|
|
value |= -1 << 31;
|
|
|
*valuep = value;
|
*valuep = value;
|
|
}
|
return errmsg;
|
return errmsg;
|
}
|
}
|
|
|
/* Parse a small unsigned integer parser.
|
/* Parse a small unsigned integer parser.
|
??? VALUEP is not a bfd_vma * on purpose, though this is confusing.
|
??? VALUEP is not a bfd_vma * on purpose, though this is confusing.
|