diff options
author | Nick Clifton <nickc@redhat.com> | 2000-08-17 23:46:43 +0000 |
---|---|---|
committer | Nick Clifton <nickc@redhat.com> | 2000-08-17 23:46:43 +0000 |
commit | 4fb7971f4b419c9c5cac5cdeaf4b32162caa9a49 (patch) | |
tree | 8dd1b4a58eae0ab2f9583a4fe0a174570cd6e1be /gas/config/tc-arm.c | |
parent | 3f215a10930f7d2cd7dc76f6a0b51bd405ae1a7d (diff) | |
download | gdb-4fb7971f4b419c9c5cac5cdeaf4b32162caa9a49.zip gdb-4fb7971f4b419c9c5cac5cdeaf4b32162caa9a49.tar.gz gdb-4fb7971f4b419c9c5cac5cdeaf4b32162caa9a49.tar.bz2 |
Allow illegal shifts by zero to be recorded as logical shift lefts by zero.
Diffstat (limited to 'gas/config/tc-arm.c')
-rw-r--r-- | gas/config/tc-arm.c | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/gas/config/tc-arm.c b/gas/config/tc-arm.c index a2ae26f..8af25e6 100644 --- a/gas/config/tc-arm.c +++ b/gas/config/tc-arm.c @@ -2531,7 +2531,7 @@ decode_shift (str, unrestrict) char ** str; int unrestrict; { - struct asm_shift_name * shift; + const struct asm_shift_name * shift; char * p; char c; @@ -2548,7 +2548,7 @@ decode_shift (str, unrestrict) c = * p; * p = '\0'; - shift = (struct asm_shift_name *) hash_find (arm_shift_hsh, * str); + shift = (const struct asm_shift_name *) hash_find (arm_shift_hsh, * str); * p = c; if (shift == NULL) @@ -2602,10 +2602,16 @@ decode_shift (str, unrestrict) || (num == 32 && shift->properties->allows_32 == 0) ) { - /* As a special case we allow ROR #0, but we issue a message - reminding the programmer that this is actually an RRX. */ - if (num == 0 && shift->properties->index == SHIFT_ROR) - as_tsktsk (_("ROR #0 is actually RRX")); + /* As a special case we allow a shift of zero for + modes that do not support it to be recoded as an + logical shift left of zero (ie nothing). We warn + about this though. */ + if (num == 0) + { + as_tsktsk (_("Shift of 0 ignored.")); + shift = shift_names; + assert (shift->properties->index == SHIFT_LSL); + } else { inst.error = _("Invalid immediate shift"); |