aboutsummaryrefslogtreecommitdiff
path: root/gas
diff options
context:
space:
mode:
authorKen Raeburn <raeburn@cygnus>1992-09-04 23:25:16 +0000
committerKen Raeburn <raeburn@cygnus>1992-09-04 23:25:16 +0000
commite53ab768f4d2face41ca483a832ce46ccd34db09 (patch)
treec65a40aab082128e1fb8ff6f52cde991d259906e /gas
parent8005788cd1953745d42217ff91b271b4d074d06f (diff)
downloadgdb-e53ab768f4d2face41ca483a832ce46ccd34db09.zip
gdb-e53ab768f4d2face41ca483a832ce46ccd34db09.tar.gz
gdb-e53ab768f4d2face41ca483a832ce46ccd34db09.tar.bz2
from p3: +0.0 is a small integer, at least for moveq
Diffstat (limited to 'gas')
-rw-r--r--gas/ChangeLog5
-rw-r--r--gas/config/tc-m68k.c27
2 files changed, 23 insertions, 9 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index e984634..a31cf32 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,3 +1,8 @@
+Fri Sep 4 18:20:56 1992 Ken Raeburn (raeburn@cygnus.com)
+
+ * config/tc-m68k.c (get_num, case SEG_BIG): If only small integers
+ including zero are accepted, pass +0.0.
+
Sun Aug 30 21:24:46 1992 Ian Lance Taylor (ian@cygnus.com)
* Makefile.in: map "as" through program_transform_name when
diff --git a/gas/config/tc-m68k.c b/gas/config/tc-m68k.c
index a0109be..e243362 100644
--- a/gas/config/tc-m68k.c
+++ b/gas/config/tc-m68k.c
@@ -3732,15 +3732,24 @@ int ok;
}
break;
case SEG_BIG:
- if(ok==80 && offs(exp)<0) { /* HACK! Turn it into a long */
- LITTLENUM_TYPE words[6];
-
- gen_to_words(words,2,8L);/* These numbers are magic! */
- seg(exp)=SEG_ABSOLUTE;
- adds(exp)=0;
- subs(exp)=0;
- offs(exp)=words[1]|(words[0]<<16);
- } else if(ok!=0) {
+ if (offs (exp) < 0 /* flonum */
+ && (ok == 80 /* no bignums */
+ || (ok > 10 /* small-int ranges including 0 ok */
+ /* If we have a flonum zero, a zero integer should
+ do as well (e.g., in moveq). */
+ && generic_floating_point_number.exponent == 0
+ && generic_floating_point_number.low[0] == 0)))
+ {
+ /* HACK! Turn it into a long */
+ LITTLENUM_TYPE words[6];
+
+ gen_to_words(words,2,8L);/* These numbers are magic! */
+ seg(exp)=SEG_ABSOLUTE;
+ adds(exp)=0;
+ subs(exp)=0;
+ offs(exp)=words[1]|(words[0]<<16);
+ }
+ else if(ok!=0) {
seg(exp)=SEG_ABSOLUTE;
adds(exp)=0;
subs(exp)=0;