diff options
-rw-r--r-- | gas/ChangeLog | 5 | ||||
-rw-r--r-- | gas/config/tc-alpha.c | 12 | ||||
-rw-r--r-- | gas/expr.h | 10 |
3 files changed, 23 insertions, 4 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog index d14befe..48c2228 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,8 @@ +Mon Jun 7 10:22:16 1999 Richard Henderson <rth@cygnus.com> + + * expr.h (struct expressionS): Revert last change; widen X_op. + * config/tc-alpha.c (md_begin): Check the field is wide enough. + Mon Jun 7 11:25:16 1999 Andreas Schwab <schwab@issan.cs.uni-dortmund.de> * Makefile.am (TARGET_CPU_CFILES): Add config/tc-fr30.c. diff --git a/gas/config/tc-alpha.c b/gas/config/tc-alpha.c index 791f15d..e55a9bc 100644 --- a/gas/config/tc-alpha.c +++ b/gas/config/tc-alpha.c @@ -96,8 +96,9 @@ struct alpha_macro /* Two extra symbols we want to see in our input. This is a blatent misuse of the expressionS.X_op field. */ -#define O_pregister (O_max+1) /* O_register, but in parentheses */ -#define O_cpregister (O_pregister+1) /* + a leading comma */ +#define O_pregister ((operatorT) (O_max+1)) /* O_register, in parentheses */ +#define O_cpregister ((operatorT) (O_pregister+1)) /* + a leading comma */ +#define O_alpha_max ((operatorT) (O_cpregister+1)) /* Macros for extracting the type and number of encoded register tokens */ @@ -709,6 +710,13 @@ md_begin () { unsigned int i; + /* Verify that X_op field is wide enough. */ + { + expressionS e; + e.X_op = O_alpha_max; + assert (e.X_op == O_alpha_max); + } + /* Create the opcode hash table */ alpha_opcode_hash = hash_new (); @@ -116,8 +116,14 @@ typedef struct expressionS symbolS *X_op_symbol; /* A number to add. */ offsetT X_add_number; - /* The type of the expression. */ - operatorT X_op; + /* The type of the expression. We can't assume that an arbitrary + compiler can handle a bitfield of enum type. FIXME: We could + check this using autoconf. */ +#ifdef __GNUC__ + operatorT X_op : 7; +#else + unsigned X_op : 7; +#endif /* Non-zero if X_add_number should be regarded as unsigned. This is only valid for O_constant expressions. It is only used when an O_constant must be extended into a bignum (i.e., it is not used |