AArch64: Add SVE constraints verifier.
[external/binutils.git] / gdb / target-float.c
1 /* Floating point routines for GDB, the GNU debugger.
2
3    Copyright (C) 2017-2018 Free Software Foundation, Inc.
4
5    This file is part of GDB.
6
7    This program is free software; you can redistribute it and/or modify
8    it under the terms of the GNU General Public License as published by
9    the Free Software Foundation; either version 3 of the License, or
10    (at your option) any later version.
11
12    This program is distributed in the hope that it will be useful,
13    but WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15    GNU General Public License for more details.
16
17    You should have received a copy of the GNU General Public License
18    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
19
20 #include "defs.h"
21 #include "gdbtypes.h"
22 #include "floatformat.h"
23 #include "target-float.h"
24
25
26 /* Target floating-point operations.
27
28    We provide multiple implementations of those operations, which differ
29    by the host-side intermediate format they perform computations in.
30
31    Those multiple implementations all derive from the following abstract
32    base class, which specifies the set of operations to be implemented.  */
33
34 class target_float_ops
35 {
36 public:
37   virtual std::string to_string (const gdb_byte *addr, const struct type *type,
38                                  const char *format) const = 0;
39   virtual bool from_string (gdb_byte *addr, const struct type *type,
40                             const std::string &string) const = 0;
41
42   virtual LONGEST to_longest (const gdb_byte *addr,
43                               const struct type *type) const = 0;
44   virtual void from_longest (gdb_byte *addr, const struct type *type,
45                              LONGEST val) const = 0;
46   virtual void from_ulongest (gdb_byte *addr, const struct type *type,
47                               ULONGEST val) const = 0;
48   virtual double to_host_double (const gdb_byte *addr,
49                                  const struct type *type) const = 0;
50   virtual void from_host_double (gdb_byte *addr, const struct type *type,
51                                  double val) const = 0;
52   virtual void convert (const gdb_byte *from, const struct type *from_type,
53                         gdb_byte *to, const struct type *to_type) const = 0;
54
55   virtual void binop (enum exp_opcode opcode,
56                       const gdb_byte *x, const struct type *type_x,
57                       const gdb_byte *y, const struct type *type_y,
58                       gdb_byte *res, const struct type *type_res) const = 0;
59   virtual int compare (const gdb_byte *x, const struct type *type_x,
60                        const gdb_byte *y, const struct type *type_y) const = 0;
61 };
62
63
64 /* Helper routines operating on binary floating-point data.  */
65
66 #include <cmath>
67 #include <limits>
68
69 /* Different kinds of floatformat numbers recognized by
70    floatformat_classify.  To avoid portability issues, we use local
71    values instead of the C99 macros (FP_NAN et cetera).  */
72 enum float_kind {
73   float_nan,
74   float_infinite,
75   float_zero,
76   float_normal,
77   float_subnormal
78 };
79
80 /* The odds that CHAR_BIT will be anything but 8 are low enough that I'm not
81    going to bother with trying to muck around with whether it is defined in
82    a system header, what we do if not, etc.  */
83 #define FLOATFORMAT_CHAR_BIT 8
84
85 /* The number of bytes that the largest floating-point type that we
86    can convert to doublest will need.  */
87 #define FLOATFORMAT_LARGEST_BYTES 16
88
89 /* Return the floatformat's total size in host bytes.  */
90 static size_t
91 floatformat_totalsize_bytes (const struct floatformat *fmt)
92 {
93   return ((fmt->totalsize + FLOATFORMAT_CHAR_BIT - 1)
94           / FLOATFORMAT_CHAR_BIT);
95 }
96
97 /* Return the precision of the floating point format FMT.  */
98 static int
99 floatformat_precision (const struct floatformat *fmt)
100 {
101   /* Assume the precision of and IBM long double is twice the precision
102      of the underlying double.  This matches what GCC does.  */
103   if (fmt->split_half)
104     return 2 * floatformat_precision (fmt->split_half);
105
106   /* Otherwise, the precision is the size of mantissa in bits,
107      including the implicit bit if present.  */
108   int prec = fmt->man_len;
109   if (fmt->intbit == floatformat_intbit_no)
110     prec++;
111
112   return prec;
113 }
114
115 /* Normalize the byte order of FROM into TO.  If no normalization is
116    needed then FMT->byteorder is returned and TO is not changed;
117    otherwise the format of the normalized form in TO is returned.  */
118 static enum floatformat_byteorders
119 floatformat_normalize_byteorder (const struct floatformat *fmt,
120                                  const void *from, void *to)
121 {
122   const unsigned char *swapin;
123   unsigned char *swapout;
124   int words;
125
126   if (fmt->byteorder == floatformat_little
127       || fmt->byteorder == floatformat_big)
128     return fmt->byteorder;
129
130   words = fmt->totalsize / FLOATFORMAT_CHAR_BIT;
131   words >>= 2;
132
133   swapout = (unsigned char *)to;
134   swapin = (const unsigned char *)from;
135
136   if (fmt->byteorder == floatformat_vax)
137     {
138       while (words-- > 0)
139         {
140           *swapout++ = swapin[1];
141           *swapout++ = swapin[0];
142           *swapout++ = swapin[3];
143           *swapout++ = swapin[2];
144           swapin += 4;
145         }
146       /* This may look weird, since VAX is little-endian, but it is
147          easier to translate to big-endian than to little-endian.  */
148       return floatformat_big;
149     }
150   else
151     {
152       gdb_assert (fmt->byteorder == floatformat_littlebyte_bigword);
153
154       while (words-- > 0)
155         {
156           *swapout++ = swapin[3];
157           *swapout++ = swapin[2];
158           *swapout++ = swapin[1];
159           *swapout++ = swapin[0];
160           swapin += 4;
161         }
162       return floatformat_big;
163     }
164 }
165
166 /* Extract a field which starts at START and is LEN bytes long.  DATA and
167    TOTAL_LEN are the thing we are extracting it from, in byteorder ORDER.  */
168 static unsigned long
169 get_field (const bfd_byte *data, enum floatformat_byteorders order,
170            unsigned int total_len, unsigned int start, unsigned int len)
171 {
172   unsigned long result;
173   unsigned int cur_byte;
174   int cur_bitshift;
175
176   /* Caller must byte-swap words before calling this routine.  */
177   gdb_assert (order == floatformat_little || order == floatformat_big);
178
179   /* Start at the least significant part of the field.  */
180   if (order == floatformat_little)
181     {
182       /* We start counting from the other end (i.e, from the high bytes
183          rather than the low bytes).  As such, we need to be concerned
184          with what happens if bit 0 doesn't start on a byte boundary.
185          I.e, we need to properly handle the case where total_len is
186          not evenly divisible by 8.  So we compute ``excess'' which
187          represents the number of bits from the end of our starting
188          byte needed to get to bit 0.  */
189       int excess = FLOATFORMAT_CHAR_BIT - (total_len % FLOATFORMAT_CHAR_BIT);
190
191       cur_byte = (total_len / FLOATFORMAT_CHAR_BIT)
192                  - ((start + len + excess) / FLOATFORMAT_CHAR_BIT);
193       cur_bitshift = ((start + len + excess) % FLOATFORMAT_CHAR_BIT)
194                      - FLOATFORMAT_CHAR_BIT;
195     }
196   else
197     {
198       cur_byte = (start + len) / FLOATFORMAT_CHAR_BIT;
199       cur_bitshift =
200         ((start + len) % FLOATFORMAT_CHAR_BIT) - FLOATFORMAT_CHAR_BIT;
201     }
202   if (cur_bitshift > -FLOATFORMAT_CHAR_BIT)
203     result = *(data + cur_byte) >> (-cur_bitshift);
204   else
205     result = 0;
206   cur_bitshift += FLOATFORMAT_CHAR_BIT;
207   if (order == floatformat_little)
208     ++cur_byte;
209   else
210     --cur_byte;
211
212   /* Move towards the most significant part of the field.  */
213   while (cur_bitshift < len)
214     {
215       result |= (unsigned long)*(data + cur_byte) << cur_bitshift;
216       cur_bitshift += FLOATFORMAT_CHAR_BIT;
217       switch (order)
218         {
219         case floatformat_little:
220           ++cur_byte;
221           break;
222         case floatformat_big:
223           --cur_byte;
224           break;
225         }
226     }
227   if (len < sizeof(result) * FLOATFORMAT_CHAR_BIT)
228     /* Mask out bits which are not part of the field.  */
229     result &= ((1UL << len) - 1);
230   return result;
231 }
232
233 /* Set a field which starts at START and is LEN bytes long.  DATA and
234    TOTAL_LEN are the thing we are extracting it from, in byteorder ORDER.  */
235 static void
236 put_field (unsigned char *data, enum floatformat_byteorders order,
237            unsigned int total_len, unsigned int start, unsigned int len,
238            unsigned long stuff_to_put)
239 {
240   unsigned int cur_byte;
241   int cur_bitshift;
242
243   /* Caller must byte-swap words before calling this routine.  */
244   gdb_assert (order == floatformat_little || order == floatformat_big);
245
246   /* Start at the least significant part of the field.  */
247   if (order == floatformat_little)
248     {
249       int excess = FLOATFORMAT_CHAR_BIT - (total_len % FLOATFORMAT_CHAR_BIT);
250
251       cur_byte = (total_len / FLOATFORMAT_CHAR_BIT)
252                  - ((start + len + excess) / FLOATFORMAT_CHAR_BIT);
253       cur_bitshift = ((start + len + excess) % FLOATFORMAT_CHAR_BIT)
254                      - FLOATFORMAT_CHAR_BIT;
255     }
256   else
257     {
258       cur_byte = (start + len) / FLOATFORMAT_CHAR_BIT;
259       cur_bitshift =
260         ((start + len) % FLOATFORMAT_CHAR_BIT) - FLOATFORMAT_CHAR_BIT;
261     }
262   if (cur_bitshift > -FLOATFORMAT_CHAR_BIT)
263     {
264       *(data + cur_byte) &=
265         ~(((1 << ((start + len) % FLOATFORMAT_CHAR_BIT)) - 1)
266           << (-cur_bitshift));
267       *(data + cur_byte) |=
268         (stuff_to_put & ((1 << FLOATFORMAT_CHAR_BIT) - 1)) << (-cur_bitshift);
269     }
270   cur_bitshift += FLOATFORMAT_CHAR_BIT;
271   if (order == floatformat_little)
272     ++cur_byte;
273   else
274     --cur_byte;
275
276   /* Move towards the most significant part of the field.  */
277   while (cur_bitshift < len)
278     {
279       if (len - cur_bitshift < FLOATFORMAT_CHAR_BIT)
280         {
281           /* This is the last byte.  */
282           *(data + cur_byte) &=
283             ~((1 << (len - cur_bitshift)) - 1);
284           *(data + cur_byte) |= (stuff_to_put >> cur_bitshift);
285         }
286       else
287         *(data + cur_byte) = ((stuff_to_put >> cur_bitshift)
288                               & ((1 << FLOATFORMAT_CHAR_BIT) - 1));
289       cur_bitshift += FLOATFORMAT_CHAR_BIT;
290       if (order == floatformat_little)
291         ++cur_byte;
292       else
293         --cur_byte;
294     }
295 }
296
297 /* Check if VAL (which is assumed to be a floating point number whose
298    format is described by FMT) is negative.  */
299 static int
300 floatformat_is_negative (const struct floatformat *fmt,
301                          const bfd_byte *uval)
302 {
303   enum floatformat_byteorders order;
304   unsigned char newfrom[FLOATFORMAT_LARGEST_BYTES];
305
306   gdb_assert (fmt != NULL);
307   gdb_assert (fmt->totalsize
308               <= FLOATFORMAT_LARGEST_BYTES * FLOATFORMAT_CHAR_BIT);
309
310   /* An IBM long double (a two element array of double) always takes the
311      sign of the first double.  */
312   if (fmt->split_half)
313     fmt = fmt->split_half;
314
315   order = floatformat_normalize_byteorder (fmt, uval, newfrom);
316
317   if (order != fmt->byteorder)
318     uval = newfrom;
319
320   return get_field (uval, order, fmt->totalsize, fmt->sign_start, 1);
321 }
322
323 /* Check if VAL is "not a number" (NaN) for FMT.  */
324 static enum float_kind
325 floatformat_classify (const struct floatformat *fmt,
326                       const bfd_byte *uval)
327 {
328   long exponent;
329   unsigned long mant;
330   unsigned int mant_bits, mant_off;
331   int mant_bits_left;
332   enum floatformat_byteorders order;
333   unsigned char newfrom[FLOATFORMAT_LARGEST_BYTES];
334   int mant_zero;
335
336   gdb_assert (fmt != NULL);
337   gdb_assert (fmt->totalsize
338               <= FLOATFORMAT_LARGEST_BYTES * FLOATFORMAT_CHAR_BIT);
339
340   /* An IBM long double (a two element array of double) can be classified
341      by looking at the first double.  inf and nan are specified as
342      ignoring the second double.  zero and subnormal will always have
343      the second double 0.0 if the long double is correctly rounded.  */
344   if (fmt->split_half)
345     fmt = fmt->split_half;
346
347   order = floatformat_normalize_byteorder (fmt, uval, newfrom);
348
349   if (order != fmt->byteorder)
350     uval = newfrom;
351
352   exponent = get_field (uval, order, fmt->totalsize, fmt->exp_start,
353                         fmt->exp_len);
354
355   mant_bits_left = fmt->man_len;
356   mant_off = fmt->man_start;
357
358   mant_zero = 1;
359   while (mant_bits_left > 0)
360     {
361       mant_bits = std::min (mant_bits_left, 32);
362
363       mant = get_field (uval, order, fmt->totalsize, mant_off, mant_bits);
364
365       /* If there is an explicit integer bit, mask it off.  */
366       if (mant_off == fmt->man_start
367           && fmt->intbit == floatformat_intbit_yes)
368         mant &= ~(1 << (mant_bits - 1));
369
370       if (mant)
371         {
372           mant_zero = 0;
373           break;
374         }
375
376       mant_off += mant_bits;
377       mant_bits_left -= mant_bits;
378     }
379
380   /* If exp_nan is not set, assume that inf, NaN, and subnormals are not
381      supported.  */
382   if (! fmt->exp_nan)
383     {
384       if (mant_zero)
385         return float_zero;
386       else
387         return float_normal;
388     }
389
390   if (exponent == 0)
391     {
392       if (mant_zero)
393         return float_zero;
394       else
395         return float_subnormal;
396     }
397
398   if (exponent == fmt->exp_nan)
399     {
400       if (mant_zero)
401         return float_infinite;
402       else
403         return float_nan;
404     }
405
406   return float_normal;
407 }
408
409 /* Convert the mantissa of VAL (which is assumed to be a floating
410    point number whose format is described by FMT) into a hexadecimal
411    and store it in a static string.  Return a pointer to that string.  */
412 static const char *
413 floatformat_mantissa (const struct floatformat *fmt,
414                       const bfd_byte *val)
415 {
416   unsigned char *uval = (unsigned char *) val;
417   unsigned long mant;
418   unsigned int mant_bits, mant_off;
419   int mant_bits_left;
420   static char res[50];
421   char buf[9];
422   int len;
423   enum floatformat_byteorders order;
424   unsigned char newfrom[FLOATFORMAT_LARGEST_BYTES];
425
426   gdb_assert (fmt != NULL);
427   gdb_assert (fmt->totalsize
428               <= FLOATFORMAT_LARGEST_BYTES * FLOATFORMAT_CHAR_BIT);
429
430   /* For IBM long double (a two element array of double), return the
431      mantissa of the first double.  The problem with returning the
432      actual mantissa from both doubles is that there can be an
433      arbitrary number of implied 0's or 1's between the mantissas
434      of the first and second double.  In any case, this function
435      is only used for dumping out nans, and a nan is specified to
436      ignore the value in the second double.  */
437   if (fmt->split_half)
438     fmt = fmt->split_half;
439
440   order = floatformat_normalize_byteorder (fmt, uval, newfrom);
441
442   if (order != fmt->byteorder)
443     uval = newfrom;
444
445   if (! fmt->exp_nan)
446     return 0;
447
448   /* Make sure we have enough room to store the mantissa.  */
449   gdb_assert (sizeof res > ((fmt->man_len + 7) / 8) * 2);
450
451   mant_off = fmt->man_start;
452   mant_bits_left = fmt->man_len;
453   mant_bits = (mant_bits_left % 32) > 0 ? mant_bits_left % 32 : 32;
454
455   mant = get_field (uval, order, fmt->totalsize, mant_off, mant_bits);
456
457   len = xsnprintf (res, sizeof res, "%lx", mant);
458
459   mant_off += mant_bits;
460   mant_bits_left -= mant_bits;
461
462   while (mant_bits_left > 0)
463     {
464       mant = get_field (uval, order, fmt->totalsize, mant_off, 32);
465
466       xsnprintf (buf, sizeof buf, "%08lx", mant);
467       gdb_assert (len + strlen (buf) <= sizeof res);
468       strcat (res, buf);
469
470       mant_off += 32;
471       mant_bits_left -= 32;
472     }
473
474   return res;
475 }
476
477 /* Convert printf format string FORMAT to the otherwise equivalent string
478    which may be used to print a host floating-point number using the length
479    modifier LENGTH (which may be 0 if none is needed).  If FORMAT is null,
480    return a format appropriate to print the full precision of a target
481    floating-point number of format FMT.  */
482 static std::string
483 floatformat_printf_format (const struct floatformat *fmt,
484                            const char *format, char length)
485 {
486   std::string host_format;
487   char conversion;
488
489   if (format == nullptr)
490     {
491       /* If no format was specified, print the number using a format string
492          where the precision is set to the DECIMAL_DIG value for the given
493          floating-point format.  This value is computed as
494
495                 ceil(1 + p * log10(b)),
496
497          where p is the precision of the floating-point format in bits, and
498          b is the base (which is always 2 for the formats we support).  */
499       const double log10_2 = .30102999566398119521;
500       double d_decimal_dig = 1 + floatformat_precision (fmt) * log10_2;
501       int decimal_dig = d_decimal_dig;
502       if (decimal_dig < d_decimal_dig)
503         decimal_dig++;
504
505       host_format = string_printf ("%%.%d", decimal_dig);
506       conversion = 'g';
507     }
508   else
509     {
510       /* Use the specified format, stripping out the conversion character
511          and length modifier, if present.  */
512       size_t len = strlen (format);
513       gdb_assert (len > 1);
514       conversion = format[--len];
515       gdb_assert (conversion == 'e' || conversion == 'f' || conversion == 'g'
516                   || conversion == 'E' || conversion == 'G');
517       if (format[len - 1] == 'L')
518         len--;
519
520       host_format = std::string (format, len);
521     }
522
523   /* Add the length modifier and conversion character appropriate for
524      handling the appropriate host floating-point type.  */
525   if (length)
526     host_format += length;
527   host_format += conversion;
528
529   return host_format;
530 }
531
532 /* Implementation of target_float_ops using the host floating-point type T
533    as intermediate type.  */
534
535 template<typename T> class host_float_ops : public target_float_ops
536 {
537 public:
538   std::string to_string (const gdb_byte *addr, const struct type *type,
539                          const char *format) const override;
540   bool from_string (gdb_byte *addr, const struct type *type,
541                     const std::string &string) const override;
542
543   LONGEST to_longest (const gdb_byte *addr,
544                       const struct type *type) const override;
545   void from_longest (gdb_byte *addr, const struct type *type,
546                      LONGEST val) const override;
547   void from_ulongest (gdb_byte *addr, const struct type *type,
548                       ULONGEST val) const override;
549   double to_host_double (const gdb_byte *addr,
550                          const struct type *type) const override;
551   void from_host_double (gdb_byte *addr, const struct type *type,
552                          double val) const override;
553   void convert (const gdb_byte *from, const struct type *from_type,
554                 gdb_byte *to, const struct type *to_type) const override;
555
556   void binop (enum exp_opcode opcode,
557               const gdb_byte *x, const struct type *type_x,
558               const gdb_byte *y, const struct type *type_y,
559               gdb_byte *res, const struct type *type_res) const override;
560   int compare (const gdb_byte *x, const struct type *type_x,
561                const gdb_byte *y, const struct type *type_y) const override;
562
563 private:
564   void from_target (const struct floatformat *fmt,
565                     const gdb_byte *from, T *to) const;
566   void from_target (const struct type *type,
567                     const gdb_byte *from, T *to) const;
568
569   void to_target (const struct type *type,
570                   const T *from, gdb_byte *to) const;
571   void to_target (const struct floatformat *fmt,
572                   const T *from, gdb_byte *to) const;
573 };
574
575
576 /* Convert TO/FROM target to the host floating-point format T.
577
578    If the host and target formats agree, we just copy the raw data
579    into the appropriate type of variable and return, letting the host
580    increase precision as necessary.  Otherwise, we call the conversion
581    routine and let it do the dirty work.  Note that even if the target
582    and host floating-point formats match, the length of the types
583    might still be different, so the conversion routines must make sure
584    to not overrun any buffers.  For example, on x86, long double is
585    the 80-bit extended precision type on both 32-bit and 64-bit ABIs,
586    but by default it is stored as 12 bytes on 32-bit, and 16 bytes on
587    64-bit, for alignment reasons.  See comment in store_typed_floating
588    for a discussion about zeroing out remaining bytes in the target
589    buffer.  */
590
591 static const struct floatformat *host_float_format = GDB_HOST_FLOAT_FORMAT;
592 static const struct floatformat *host_double_format = GDB_HOST_DOUBLE_FORMAT;
593 static const struct floatformat *host_long_double_format
594   = GDB_HOST_LONG_DOUBLE_FORMAT;
595
596 /* Convert target floating-point value at FROM in format FMT to host
597    floating-point format of type T.  */
598 template<typename T> void
599 host_float_ops<T>::from_target (const struct floatformat *fmt,
600                                 const gdb_byte *from, T *to) const
601 {
602   gdb_assert (fmt != NULL);
603
604   if (fmt == host_float_format)
605     {
606       float val = 0;
607
608       memcpy (&val, from, floatformat_totalsize_bytes (fmt));
609       *to = val;
610       return;
611     }
612   else if (fmt == host_double_format)
613     {
614       double val = 0;
615
616       memcpy (&val, from, floatformat_totalsize_bytes (fmt));
617       *to = val;
618       return;
619     }
620   else if (fmt == host_long_double_format)
621     {
622       long double val = 0;
623
624       memcpy (&val, from, floatformat_totalsize_bytes (fmt));
625       *to = val;
626       return;
627     }
628
629   unsigned char *ufrom = (unsigned char *) from;
630   T dto;
631   long exponent;
632   unsigned long mant;
633   unsigned int mant_bits, mant_off;
634   int mant_bits_left;
635   int special_exponent;         /* It's a NaN, denorm or zero.  */
636   enum floatformat_byteorders order;
637   unsigned char newfrom[FLOATFORMAT_LARGEST_BYTES];
638   enum float_kind kind;
639
640   gdb_assert (fmt->totalsize
641               <= FLOATFORMAT_LARGEST_BYTES * FLOATFORMAT_CHAR_BIT);
642
643   /* For non-numbers, reuse libiberty's logic to find the correct
644      format.  We do not lose any precision in this case by passing
645      through a double.  */
646   kind = floatformat_classify (fmt, (const bfd_byte *) from);
647   if (kind == float_infinite || kind == float_nan)
648     {
649       double dto;
650
651       floatformat_to_double (fmt->split_half ? fmt->split_half : fmt,
652                              from, &dto);
653       *to = (T) dto;
654       return;
655     }
656
657   order = floatformat_normalize_byteorder (fmt, ufrom, newfrom);
658
659   if (order != fmt->byteorder)
660     ufrom = newfrom;
661
662   if (fmt->split_half)
663     {
664       T dtop, dbot;
665
666       from_target (fmt->split_half, ufrom, &dtop);
667       /* Preserve the sign of 0, which is the sign of the top
668          half.  */
669       if (dtop == 0.0)
670         {
671           *to = dtop;
672           return;
673         }
674       from_target (fmt->split_half,
675                    ufrom + fmt->totalsize / FLOATFORMAT_CHAR_BIT / 2, &dbot);
676       *to = dtop + dbot;
677       return;
678     }
679
680   exponent = get_field (ufrom, order, fmt->totalsize, fmt->exp_start,
681                         fmt->exp_len);
682   /* Note that if exponent indicates a NaN, we can't really do anything useful
683      (not knowing if the host has NaN's, or how to build one).  So it will
684      end up as an infinity or something close; that is OK.  */
685
686   mant_bits_left = fmt->man_len;
687   mant_off = fmt->man_start;
688   dto = 0.0;
689
690   special_exponent = exponent == 0 || exponent == fmt->exp_nan;
691
692   /* Don't bias NaNs.  Use minimum exponent for denorms.  For
693      simplicity, we don't check for zero as the exponent doesn't matter.
694      Note the cast to int; exp_bias is unsigned, so it's important to
695      make sure the operation is done in signed arithmetic.  */
696   if (!special_exponent)
697     exponent -= fmt->exp_bias;
698   else if (exponent == 0)
699     exponent = 1 - fmt->exp_bias;
700
701   /* Build the result algebraically.  Might go infinite, underflow, etc;
702      who cares.  */
703
704   /* If this format uses a hidden bit, explicitly add it in now.  Otherwise,
705      increment the exponent by one to account for the integer bit.  */
706
707   if (!special_exponent)
708     {
709       if (fmt->intbit == floatformat_intbit_no)
710         dto = ldexp (1.0, exponent);
711       else
712         exponent++;
713     }
714
715   while (mant_bits_left > 0)
716     {
717       mant_bits = std::min (mant_bits_left, 32);
718
719       mant = get_field (ufrom, order, fmt->totalsize, mant_off, mant_bits);
720
721       dto += ldexp ((T) mant, exponent - mant_bits);
722       exponent -= mant_bits;
723       mant_off += mant_bits;
724       mant_bits_left -= mant_bits;
725     }
726
727   /* Negate it if negative.  */
728   if (get_field (ufrom, order, fmt->totalsize, fmt->sign_start, 1))
729     dto = -dto;
730   *to = dto;
731 }
732
733 template<typename T> void
734 host_float_ops<T>::from_target (const struct type *type,
735                                 const gdb_byte *from, T *to) const
736 {
737   from_target (floatformat_from_type (type), from, to);
738 }
739
740 /* Convert host floating-point value of type T to target floating-point
741    value in format FMT and store at TO.  */
742 template<typename T> void
743 host_float_ops<T>::to_target (const struct floatformat *fmt,
744                               const T *from, gdb_byte *to) const
745 {
746   gdb_assert (fmt != NULL);
747
748   if (fmt == host_float_format)
749     {
750       float val = *from;
751
752       memcpy (to, &val, floatformat_totalsize_bytes (fmt));
753       return;
754     }
755   else if (fmt == host_double_format)
756     {
757       double val = *from;
758
759       memcpy (to, &val, floatformat_totalsize_bytes (fmt));
760       return;
761     }
762   else if (fmt == host_long_double_format)
763     {
764       long double val = *from;
765
766       memcpy (to, &val, floatformat_totalsize_bytes (fmt));
767       return;
768     }
769
770   T dfrom;
771   int exponent;
772   T mant;
773   unsigned int mant_bits, mant_off;
774   int mant_bits_left;
775   unsigned char *uto = (unsigned char *) to;
776   enum floatformat_byteorders order = fmt->byteorder;
777   unsigned char newto[FLOATFORMAT_LARGEST_BYTES];
778
779   if (order != floatformat_little)
780     order = floatformat_big;
781
782   if (order != fmt->byteorder)
783     uto = newto;
784
785   memcpy (&dfrom, from, sizeof (dfrom));
786   memset (uto, 0, floatformat_totalsize_bytes (fmt));
787
788   if (fmt->split_half)
789     {
790       /* Use static volatile to ensure that any excess precision is
791          removed via storing in memory, and so the top half really is
792          the result of converting to double.  */
793       static volatile double dtop, dbot;
794       T dtopnv, dbotnv;
795
796       dtop = (double) dfrom;
797       /* If the rounded top half is Inf, the bottom must be 0 not NaN
798          or Inf.  */
799       if (dtop + dtop == dtop && dtop != 0.0)
800         dbot = 0.0;
801       else
802         dbot = (double) (dfrom - (T) dtop);
803       dtopnv = dtop;
804       dbotnv = dbot;
805       to_target (fmt->split_half, &dtopnv, uto);
806       to_target (fmt->split_half, &dbotnv,
807                  uto + fmt->totalsize / FLOATFORMAT_CHAR_BIT / 2);
808       return;
809     }
810
811   if (dfrom == 0)
812     goto finalize_byteorder;    /* Result is zero */
813   if (dfrom != dfrom)           /* Result is NaN */
814     {
815       /* From is NaN */
816       put_field (uto, order, fmt->totalsize, fmt->exp_start,
817                  fmt->exp_len, fmt->exp_nan);
818       /* Be sure it's not infinity, but NaN value is irrel.  */
819       put_field (uto, order, fmt->totalsize, fmt->man_start,
820                  fmt->man_len, 1);
821       goto finalize_byteorder;
822     }
823
824   /* If negative, set the sign bit.  */
825   if (dfrom < 0)
826     {
827       put_field (uto, order, fmt->totalsize, fmt->sign_start, 1, 1);
828       dfrom = -dfrom;
829     }
830
831   if (dfrom + dfrom == dfrom && dfrom != 0.0)   /* Result is Infinity.  */
832     {
833       /* Infinity exponent is same as NaN's.  */
834       put_field (uto, order, fmt->totalsize, fmt->exp_start,
835                  fmt->exp_len, fmt->exp_nan);
836       /* Infinity mantissa is all zeroes.  */
837       put_field (uto, order, fmt->totalsize, fmt->man_start,
838                  fmt->man_len, 0);
839       goto finalize_byteorder;
840     }
841
842   mant = frexp (dfrom, &exponent);
843
844   if (exponent + fmt->exp_bias <= 0)
845     {
846       /* The value is too small to be expressed in the destination
847          type (not enough bits in the exponent.  Treat as 0.  */
848       put_field (uto, order, fmt->totalsize, fmt->exp_start,
849                  fmt->exp_len, 0);
850       put_field (uto, order, fmt->totalsize, fmt->man_start,
851                  fmt->man_len, 0);
852       goto finalize_byteorder;
853     }
854
855   if (exponent + fmt->exp_bias >= (1 << fmt->exp_len))
856     {
857       /* The value is too large to fit into the destination.
858          Treat as infinity.  */
859       put_field (uto, order, fmt->totalsize, fmt->exp_start,
860                  fmt->exp_len, fmt->exp_nan);
861       put_field (uto, order, fmt->totalsize, fmt->man_start,
862                  fmt->man_len, 0);
863       goto finalize_byteorder;
864     }
865
866   put_field (uto, order, fmt->totalsize, fmt->exp_start, fmt->exp_len,
867              exponent + fmt->exp_bias - 1);
868
869   mant_bits_left = fmt->man_len;
870   mant_off = fmt->man_start;
871   while (mant_bits_left > 0)
872     {
873       unsigned long mant_long;
874
875       mant_bits = mant_bits_left < 32 ? mant_bits_left : 32;
876
877       mant *= 4294967296.0;
878       mant_long = ((unsigned long) mant) & 0xffffffffL;
879       mant -= mant_long;
880
881       /* If the integer bit is implicit, then we need to discard it.
882          If we are discarding a zero, we should be (but are not) creating
883          a denormalized number which means adjusting the exponent
884          (I think).  */
885       if (mant_bits_left == fmt->man_len
886           && fmt->intbit == floatformat_intbit_no)
887         {
888           mant_long <<= 1;
889           mant_long &= 0xffffffffL;
890           /* If we are processing the top 32 mantissa bits of a doublest
891              so as to convert to a float value with implied integer bit,
892              we will only be putting 31 of those 32 bits into the
893              final value due to the discarding of the top bit.  In the
894              case of a small float value where the number of mantissa
895              bits is less than 32, discarding the top bit does not alter
896              the number of bits we will be adding to the result.  */
897           if (mant_bits == 32)
898             mant_bits -= 1;
899         }
900
901       if (mant_bits < 32)
902         {
903           /* The bits we want are in the most significant MANT_BITS bits of
904              mant_long.  Move them to the least significant.  */
905           mant_long >>= 32 - mant_bits;
906         }
907
908       put_field (uto, order, fmt->totalsize,
909                  mant_off, mant_bits, mant_long);
910       mant_off += mant_bits;
911       mant_bits_left -= mant_bits;
912     }
913
914  finalize_byteorder:
915   /* Do we need to byte-swap the words in the result?  */
916   if (order != fmt->byteorder)
917     floatformat_normalize_byteorder (fmt, newto, to);
918 }
919
920 template<typename T> void
921 host_float_ops<T>::to_target (const struct type *type,
922                               const T *from, gdb_byte *to) const
923 {
924   /* Ensure possible padding bytes in the target buffer are zeroed out.  */
925   memset (to, 0, TYPE_LENGTH (type));
926
927   to_target (floatformat_from_type (type), from, to);
928 }
929
930 /* Convert the byte-stream ADDR, interpreted as floating-point type TYPE,
931    to a string, optionally using the print format FORMAT.  */
932 template<typename T> struct printf_length_modifier
933 {
934   static constexpr char value = 0;
935 };
936 template<> struct printf_length_modifier<long double>
937 {
938   static constexpr char value = 'L';
939 };
940 template<typename T> std::string
941 host_float_ops<T>::to_string (const gdb_byte *addr, const struct type *type,
942                               const char *format) const
943 {
944   /* Determine the format string to use on the host side.  */
945   constexpr char length = printf_length_modifier<T>::value;
946   const struct floatformat *fmt = floatformat_from_type (type);
947   std::string host_format = floatformat_printf_format (fmt, format, length);
948
949   T host_float;
950   from_target (type, addr, &host_float);
951
952   DIAGNOSTIC_PUSH
953   DIAGNOSTIC_IGNORE_FORMAT_NONLITERAL
954   return string_printf (host_format.c_str (), host_float);
955   DIAGNOSTIC_POP
956 }
957
958 /* Parse string IN into a target floating-number of type TYPE and
959    store it as byte-stream ADDR.  Return whether parsing succeeded.  */
960 template<typename T> struct scanf_length_modifier
961 {
962   static constexpr char value = 0;
963 };
964 template<> struct scanf_length_modifier<double>
965 {
966   static constexpr char value = 'l';
967 };
968 template<> struct scanf_length_modifier<long double>
969 {
970   static constexpr char value = 'L';
971 };
972 template<typename T> bool
973 host_float_ops<T>::from_string (gdb_byte *addr, const struct type *type,
974                                 const std::string &in) const
975 {
976   T host_float;
977   int n, num;
978
979   std::string scan_format = "%";
980   if (scanf_length_modifier<T>::value)
981     scan_format += scanf_length_modifier<T>::value;
982   scan_format += "g%n";
983
984   DIAGNOSTIC_PUSH
985   DIAGNOSTIC_IGNORE_FORMAT_NONLITERAL
986   num = sscanf (in.c_str (), scan_format.c_str(), &host_float, &n);
987   DIAGNOSTIC_POP
988
989   /* The sscanf man page suggests not making any assumptions on the effect
990      of %n on the result, so we don't.
991      That is why we simply test num == 0.  */
992   if (num == 0)
993     return false;
994
995   /* We only accept the whole string.  */
996   if (in[n])
997     return false;
998
999   to_target (type, &host_float, addr);
1000   return true;
1001 }
1002
1003 /* Convert the byte-stream ADDR, interpreted as floating-point type TYPE,
1004    to an integer value (rounding towards zero).  */
1005 template<typename T> LONGEST
1006 host_float_ops<T>::to_longest (const gdb_byte *addr,
1007                                const struct type *type) const
1008 {
1009   T host_float;
1010   from_target (type, addr, &host_float);
1011   /* Converting an out-of-range value is undefined behavior in C, but we
1012      prefer to return a defined value here.  */
1013   if (host_float > std::numeric_limits<LONGEST>::max())
1014     return std::numeric_limits<LONGEST>::max();
1015   if (host_float < std::numeric_limits<LONGEST>::min())
1016     return std::numeric_limits<LONGEST>::min();
1017   return (LONGEST) host_float;
1018 }
1019
1020 /* Convert signed integer VAL to a target floating-number of type TYPE
1021    and store it as byte-stream ADDR.  */
1022 template<typename T> void
1023 host_float_ops<T>::from_longest (gdb_byte *addr, const struct type *type,
1024                                  LONGEST val) const
1025 {
1026   T host_float = (T) val;
1027   to_target (type, &host_float, addr);
1028 }
1029
1030 /* Convert unsigned integer VAL to a target floating-number of type TYPE
1031    and store it as byte-stream ADDR.  */
1032 template<typename T> void
1033 host_float_ops<T>::from_ulongest (gdb_byte *addr, const struct type *type,
1034                                   ULONGEST val) const
1035 {
1036   T host_float = (T) val;
1037   to_target (type, &host_float, addr);
1038 }
1039
1040 /* Convert the byte-stream ADDR, interpreted as floating-point type TYPE,
1041    to a floating-point value in the host "double" format.  */
1042 template<typename T> double
1043 host_float_ops<T>::to_host_double (const gdb_byte *addr,
1044                                    const struct type *type) const
1045 {
1046   T host_float;
1047   from_target (type, addr, &host_float);
1048   return (double) host_float;
1049 }
1050
1051 /* Convert floating-point value VAL in the host "double" format to a target
1052    floating-number of type TYPE and store it as byte-stream ADDR.  */
1053 template<typename T> void
1054 host_float_ops<T>::from_host_double (gdb_byte *addr, const struct type *type,
1055                                      double val) const
1056 {
1057   T host_float = (T) val;
1058   to_target (type, &host_float, addr);
1059 }
1060
1061 /* Convert a floating-point number of type FROM_TYPE from the target
1062    byte-stream FROM to a floating-point number of type TO_TYPE, and
1063    store it to the target byte-stream TO.  */
1064 template<typename T> void
1065 host_float_ops<T>::convert (const gdb_byte *from,
1066                             const struct type *from_type,
1067                             gdb_byte *to,
1068                             const struct type *to_type) const
1069 {
1070   T host_float;
1071   from_target (from_type, from, &host_float);
1072   to_target (to_type, &host_float, to);
1073 }
1074
1075 /* Perform the binary operation indicated by OPCODE, using as operands the
1076    target byte streams X and Y, interpreted as floating-point numbers of
1077    types TYPE_X and TYPE_Y, respectively.  Convert the result to format
1078    TYPE_RES and store it into the byte-stream RES.  */
1079 template<typename T> void
1080 host_float_ops<T>::binop (enum exp_opcode op,
1081                           const gdb_byte *x, const struct type *type_x,
1082                           const gdb_byte *y, const struct type *type_y,
1083                           gdb_byte *res, const struct type *type_res) const
1084 {
1085   T v1, v2, v = 0;
1086
1087   from_target (type_x, x, &v1);
1088   from_target (type_y, y, &v2);
1089
1090   switch (op)
1091     {
1092       case BINOP_ADD:
1093         v = v1 + v2;
1094         break;
1095
1096       case BINOP_SUB:
1097         v = v1 - v2;
1098         break;
1099
1100       case BINOP_MUL:
1101         v = v1 * v2;
1102         break;
1103
1104       case BINOP_DIV:
1105         v = v1 / v2;
1106         break;
1107
1108       case BINOP_EXP:
1109         errno = 0;
1110         v = pow (v1, v2);
1111         if (errno)
1112           error (_("Cannot perform exponentiation: %s"),
1113                  safe_strerror (errno));
1114         break;
1115
1116       case BINOP_MIN:
1117         v = v1 < v2 ? v1 : v2;
1118         break;
1119
1120       case BINOP_MAX:
1121         v = v1 > v2 ? v1 : v2;
1122         break;
1123
1124       default:
1125         error (_("Integer-only operation on floating point number."));
1126         break;
1127     }
1128
1129   to_target (type_res, &v, res);
1130 }
1131
1132 /* Compare the two target byte streams X and Y, interpreted as floating-point
1133    numbers of types TYPE_X and TYPE_Y, respectively.  Return zero if X and Y
1134    are equal, -1 if X is less than Y, and 1 otherwise.  */
1135 template<typename T> int
1136 host_float_ops<T>::compare (const gdb_byte *x, const struct type *type_x,
1137                             const gdb_byte *y, const struct type *type_y) const
1138 {
1139   T v1, v2;
1140
1141   from_target (type_x, x, &v1);
1142   from_target (type_y, y, &v2);
1143
1144   if (v1 == v2)
1145     return 0;
1146   if (v1 < v2)
1147     return -1;
1148   return 1;
1149 }
1150
1151
1152 /* Implementation of target_float_ops using the MPFR library
1153    mpfr_t as intermediate type.  */
1154
1155 #ifdef HAVE_LIBMPFR
1156
1157 #define MPFR_USE_INTMAX_T
1158
1159 #include <mpfr.h>
1160
1161 class mpfr_float_ops : public target_float_ops
1162 {
1163 public:
1164   std::string to_string (const gdb_byte *addr, const struct type *type,
1165                          const char *format) const override;
1166   bool from_string (gdb_byte *addr, const struct type *type,
1167                     const std::string &string) const override;
1168
1169   LONGEST to_longest (const gdb_byte *addr,
1170                       const struct type *type) const override;
1171   void from_longest (gdb_byte *addr, const struct type *type,
1172                      LONGEST val) const override;
1173   void from_ulongest (gdb_byte *addr, const struct type *type,
1174                       ULONGEST val) const override;
1175   double to_host_double (const gdb_byte *addr,
1176                          const struct type *type) const override;
1177   void from_host_double (gdb_byte *addr, const struct type *type,
1178                          double val) const override;
1179   void convert (const gdb_byte *from, const struct type *from_type,
1180                 gdb_byte *to, const struct type *to_type) const override;
1181
1182   void binop (enum exp_opcode opcode,
1183               const gdb_byte *x, const struct type *type_x,
1184               const gdb_byte *y, const struct type *type_y,
1185               gdb_byte *res, const struct type *type_res) const override;
1186   int compare (const gdb_byte *x, const struct type *type_x,
1187                const gdb_byte *y, const struct type *type_y) const override;
1188
1189 private:
1190   /* Local wrapper class to handle mpfr_t initalization and cleanup.  */
1191   class gdb_mpfr
1192   {
1193   public:
1194     mpfr_t val;
1195
1196     gdb_mpfr (const struct type *type)
1197     {
1198       const struct floatformat *fmt = floatformat_from_type (type);
1199       mpfr_init2 (val, floatformat_precision (fmt));
1200     }
1201
1202     gdb_mpfr (const gdb_mpfr &source)
1203     {
1204       mpfr_init2 (val, mpfr_get_prec (source.val));
1205     }
1206
1207     ~gdb_mpfr ()
1208     {
1209       mpfr_clear (val);
1210     }
1211   };
1212
1213   void from_target (const struct floatformat *fmt,
1214                 const gdb_byte *from, gdb_mpfr &to) const;
1215   void from_target (const struct type *type,
1216                 const gdb_byte *from, gdb_mpfr &to) const;
1217
1218   void to_target (const struct type *type,
1219                   const gdb_mpfr &from, gdb_byte *to) const;
1220   void to_target (const struct floatformat *fmt,
1221                   const gdb_mpfr &from, gdb_byte *to) const;
1222 };
1223
1224
1225 /* Convert TO/FROM target floating-point format to mpfr_t.  */
1226
1227 void
1228 mpfr_float_ops::from_target (const struct floatformat *fmt,
1229                              const gdb_byte *orig_from, gdb_mpfr &to) const
1230 {
1231   const gdb_byte *from = orig_from;
1232   mpfr_exp_t exponent;
1233   unsigned long mant;
1234   unsigned int mant_bits, mant_off;
1235   int mant_bits_left;
1236   int special_exponent;         /* It's a NaN, denorm or zero.  */
1237   enum floatformat_byteorders order;
1238   unsigned char newfrom[FLOATFORMAT_LARGEST_BYTES];
1239   enum float_kind kind;
1240
1241   gdb_assert (fmt->totalsize
1242               <= FLOATFORMAT_LARGEST_BYTES * FLOATFORMAT_CHAR_BIT);
1243
1244   /* Handle non-numbers.  */
1245   kind = floatformat_classify (fmt, from);
1246   if (kind == float_infinite)
1247     {
1248       mpfr_set_inf (to.val, floatformat_is_negative (fmt, from) ? -1 : 1);
1249       return;
1250     }
1251   if (kind == float_nan)
1252     {
1253       mpfr_set_nan (to.val);
1254       return;
1255     }
1256
1257   order = floatformat_normalize_byteorder (fmt, from, newfrom);
1258
1259   if (order != fmt->byteorder)
1260     from = newfrom;
1261
1262   if (fmt->split_half)
1263     {
1264       gdb_mpfr top (to), bot (to);
1265
1266       from_target (fmt->split_half, from, top);
1267       /* Preserve the sign of 0, which is the sign of the top half.  */
1268       if (mpfr_zero_p (top.val))
1269         {
1270           mpfr_set (to.val, top.val, MPFR_RNDN);
1271           return;
1272         }
1273       from_target (fmt->split_half,
1274                from + fmt->totalsize / FLOATFORMAT_CHAR_BIT / 2, bot);
1275       mpfr_add (to.val, top.val, bot.val, MPFR_RNDN);
1276       return;
1277     }
1278
1279   exponent = get_field (from, order, fmt->totalsize, fmt->exp_start,
1280                         fmt->exp_len);
1281   /* Note that if exponent indicates a NaN, we can't really do anything useful
1282      (not knowing if the host has NaN's, or how to build one).  So it will
1283      end up as an infinity or something close; that is OK.  */
1284
1285   mant_bits_left = fmt->man_len;
1286   mant_off = fmt->man_start;
1287   mpfr_set_zero (to.val, 0);
1288
1289   special_exponent = exponent == 0 || exponent == fmt->exp_nan;
1290
1291   /* Don't bias NaNs.  Use minimum exponent for denorms.  For
1292      simplicity, we don't check for zero as the exponent doesn't matter.
1293      Note the cast to int; exp_bias is unsigned, so it's important to
1294      make sure the operation is done in signed arithmetic.  */
1295   if (!special_exponent)
1296     exponent -= fmt->exp_bias;
1297   else if (exponent == 0)
1298     exponent = 1 - fmt->exp_bias;
1299
1300   /* Build the result algebraically.  Might go infinite, underflow, etc;
1301      who cares.  */
1302
1303   /* If this format uses a hidden bit, explicitly add it in now.  Otherwise,
1304      increment the exponent by one to account for the integer bit.  */
1305
1306   if (!special_exponent)
1307     {
1308       if (fmt->intbit == floatformat_intbit_no)
1309         mpfr_set_ui_2exp (to.val, 1, exponent, MPFR_RNDN);
1310       else
1311         exponent++;
1312     }
1313
1314   gdb_mpfr tmp (to);
1315
1316   while (mant_bits_left > 0)
1317     {
1318       mant_bits = std::min (mant_bits_left, 32);
1319
1320       mant = get_field (from, order, fmt->totalsize, mant_off, mant_bits);
1321
1322       mpfr_set_ui (tmp.val, mant, MPFR_RNDN);
1323       mpfr_mul_2si (tmp.val, tmp.val, exponent - mant_bits, MPFR_RNDN);
1324       mpfr_add (to.val, to.val, tmp.val, MPFR_RNDN);
1325       exponent -= mant_bits;
1326       mant_off += mant_bits;
1327       mant_bits_left -= mant_bits;
1328     }
1329
1330   /* Negate it if negative.  */
1331   if (get_field (from, order, fmt->totalsize, fmt->sign_start, 1))
1332     mpfr_neg (to.val, to.val, MPFR_RNDN);
1333 }
1334
1335 void
1336 mpfr_float_ops::from_target (const struct type *type,
1337                              const gdb_byte *from, gdb_mpfr &to) const
1338 {
1339   from_target (floatformat_from_type (type), from, to);
1340 }
1341
1342 void
1343 mpfr_float_ops::to_target (const struct floatformat *fmt,
1344                            const gdb_mpfr &from, gdb_byte *orig_to) const
1345 {
1346   unsigned char *to = orig_to;
1347   mpfr_exp_t exponent;
1348   unsigned int mant_bits, mant_off;
1349   int mant_bits_left;
1350   enum floatformat_byteorders order = fmt->byteorder;
1351   unsigned char newto[FLOATFORMAT_LARGEST_BYTES];
1352
1353   if (order != floatformat_little)
1354     order = floatformat_big;
1355
1356   if (order != fmt->byteorder)
1357     to = newto;
1358
1359   memset (to, 0, floatformat_totalsize_bytes (fmt));
1360
1361   if (fmt->split_half)
1362     {
1363       gdb_mpfr top (from), bot (from);
1364
1365       mpfr_set (top.val, from.val, MPFR_RNDN);
1366       /* If the rounded top half is Inf, the bottom must be 0 not NaN
1367          or Inf.  */
1368       if (mpfr_inf_p (top.val))
1369         mpfr_set_zero (bot.val, 0);
1370       else
1371         mpfr_sub (bot.val, from.val, top.val, MPFR_RNDN);
1372
1373       to_target (fmt->split_half, top, to);
1374       to_target (fmt->split_half, bot,
1375                  to + fmt->totalsize / FLOATFORMAT_CHAR_BIT / 2);
1376       return;
1377     }
1378
1379   gdb_mpfr tmp (from);
1380
1381   if (mpfr_zero_p (from.val))
1382     goto finalize_byteorder;    /* Result is zero */
1383
1384   mpfr_set (tmp.val, from.val, MPFR_RNDN);
1385
1386   if (mpfr_nan_p (tmp.val))     /* Result is NaN */
1387     {
1388       /* From is NaN */
1389       put_field (to, order, fmt->totalsize, fmt->exp_start,
1390                  fmt->exp_len, fmt->exp_nan);
1391       /* Be sure it's not infinity, but NaN value is irrel.  */
1392       put_field (to, order, fmt->totalsize, fmt->man_start,
1393                  fmt->man_len, 1);
1394       goto finalize_byteorder;
1395     }
1396
1397   /* If negative, set the sign bit.  */
1398   if (mpfr_sgn (tmp.val) < 0)
1399     {
1400       put_field (to, order, fmt->totalsize, fmt->sign_start, 1, 1);
1401       mpfr_neg (tmp.val, tmp.val, MPFR_RNDN);
1402     }
1403
1404   if (mpfr_inf_p (tmp.val))             /* Result is Infinity.  */
1405     {
1406       /* Infinity exponent is same as NaN's.  */
1407       put_field (to, order, fmt->totalsize, fmt->exp_start,
1408                  fmt->exp_len, fmt->exp_nan);
1409       /* Infinity mantissa is all zeroes.  */
1410       put_field (to, order, fmt->totalsize, fmt->man_start,
1411                  fmt->man_len, 0);
1412       goto finalize_byteorder;
1413     }
1414
1415   mpfr_frexp (&exponent, tmp.val, tmp.val, MPFR_RNDN);
1416
1417   if (exponent + fmt->exp_bias <= 0)
1418     {
1419       /* The value is too small to be expressed in the destination
1420          type (not enough bits in the exponent.  Treat as 0.  */
1421       put_field (to, order, fmt->totalsize, fmt->exp_start,
1422                  fmt->exp_len, 0);
1423       put_field (to, order, fmt->totalsize, fmt->man_start,
1424                  fmt->man_len, 0);
1425       goto finalize_byteorder;
1426     }
1427
1428   if (exponent + fmt->exp_bias >= (1 << fmt->exp_len))
1429     {
1430       /* The value is too large to fit into the destination.
1431          Treat as infinity.  */
1432       put_field (to, order, fmt->totalsize, fmt->exp_start,
1433                  fmt->exp_len, fmt->exp_nan);
1434       put_field (to, order, fmt->totalsize, fmt->man_start,
1435                  fmt->man_len, 0);
1436       goto finalize_byteorder;
1437     }
1438
1439   put_field (to, order, fmt->totalsize, fmt->exp_start, fmt->exp_len,
1440              exponent + fmt->exp_bias - 1);
1441
1442   mant_bits_left = fmt->man_len;
1443   mant_off = fmt->man_start;
1444   while (mant_bits_left > 0)
1445     {
1446       unsigned long mant_long;
1447
1448       mant_bits = mant_bits_left < 32 ? mant_bits_left : 32;
1449
1450       mpfr_mul_2ui (tmp.val, tmp.val, 32, MPFR_RNDN);
1451       mant_long = mpfr_get_ui (tmp.val, MPFR_RNDZ) & 0xffffffffL;
1452       mpfr_sub_ui (tmp.val, tmp.val, mant_long, MPFR_RNDZ);
1453
1454       /* If the integer bit is implicit, then we need to discard it.
1455          If we are discarding a zero, we should be (but are not) creating
1456          a denormalized number which means adjusting the exponent
1457          (I think).  */
1458       if (mant_bits_left == fmt->man_len
1459           && fmt->intbit == floatformat_intbit_no)
1460         {
1461           mant_long <<= 1;
1462           mant_long &= 0xffffffffL;
1463           /* If we are processing the top 32 mantissa bits of a doublest
1464              so as to convert to a float value with implied integer bit,
1465              we will only be putting 31 of those 32 bits into the
1466              final value due to the discarding of the top bit.  In the
1467              case of a small float value where the number of mantissa
1468              bits is less than 32, discarding the top bit does not alter
1469              the number of bits we will be adding to the result.  */
1470           if (mant_bits == 32)
1471             mant_bits -= 1;
1472         }
1473
1474       if (mant_bits < 32)
1475         {
1476           /* The bits we want are in the most significant MANT_BITS bits of
1477              mant_long.  Move them to the least significant.  */
1478           mant_long >>= 32 - mant_bits;
1479         }
1480
1481       put_field (to, order, fmt->totalsize,
1482                  mant_off, mant_bits, mant_long);
1483       mant_off += mant_bits;
1484       mant_bits_left -= mant_bits;
1485     }
1486
1487  finalize_byteorder:
1488   /* Do we need to byte-swap the words in the result?  */
1489   if (order != fmt->byteorder)
1490     floatformat_normalize_byteorder (fmt, newto, orig_to);
1491 }
1492
1493 void
1494 mpfr_float_ops::to_target (const struct type *type,
1495                            const gdb_mpfr &from, gdb_byte *to) const
1496 {
1497   /* Ensure possible padding bytes in the target buffer are zeroed out.  */
1498   memset (to, 0, TYPE_LENGTH (type));
1499
1500   to_target (floatformat_from_type (type), from, to);
1501 }
1502
1503 /* Convert the byte-stream ADDR, interpreted as floating-point type TYPE,
1504    to a string, optionally using the print format FORMAT.  */
1505 std::string
1506 mpfr_float_ops::to_string (const gdb_byte *addr,
1507                            const struct type *type,
1508                            const char *format) const
1509 {
1510   const struct floatformat *fmt = floatformat_from_type (type);
1511
1512   /* Unless we need to adhere to a specific format, provide special
1513      output for certain cases.  */
1514   if (format == nullptr)
1515     {
1516       /* Detect invalid representations.  */
1517       if (!floatformat_is_valid (fmt, addr))
1518         return "<invalid float value>";
1519
1520       /* Handle NaN and Inf.  */
1521       enum float_kind kind = floatformat_classify (fmt, addr);
1522       if (kind == float_nan)
1523         {
1524           const char *sign = floatformat_is_negative (fmt, addr)? "-" : "";
1525           const char *mantissa = floatformat_mantissa (fmt, addr);
1526           return string_printf ("%snan(0x%s)", sign, mantissa);
1527         }
1528       else if (kind == float_infinite)
1529         {
1530           const char *sign = floatformat_is_negative (fmt, addr)? "-" : "";
1531           return string_printf ("%sinf", sign);
1532         }
1533     }
1534
1535   /* Determine the format string to use on the host side.  */
1536   std::string host_format = floatformat_printf_format (fmt, format, 'R');
1537
1538   gdb_mpfr tmp (type);
1539   from_target (type, addr, tmp);
1540
1541   int size = mpfr_snprintf (NULL, 0, host_format.c_str (), tmp.val);
1542   std::string str (size, '\0');
1543   mpfr_sprintf (&str[0], host_format.c_str (), tmp.val);
1544
1545   return str;
1546 }
1547
1548 /* Parse string STRING into a target floating-number of type TYPE and
1549    store it as byte-stream ADDR.  Return whether parsing succeeded.  */
1550 bool
1551 mpfr_float_ops::from_string (gdb_byte *addr,
1552                              const struct type *type,
1553                              const std::string &in) const
1554 {
1555   gdb_mpfr tmp (type);
1556
1557   char *endptr;
1558   mpfr_strtofr (tmp.val, in.c_str (), &endptr, 0, MPFR_RNDN);
1559
1560   /* We only accept the whole string.  */
1561   if (*endptr)
1562     return false;
1563
1564   to_target (type, tmp, addr);
1565   return true;
1566 }
1567
1568 /* Convert the byte-stream ADDR, interpreted as floating-point type TYPE,
1569    to an integer value (rounding towards zero).  */
1570 LONGEST
1571 mpfr_float_ops::to_longest (const gdb_byte *addr,
1572                             const struct type *type) const
1573 {
1574   gdb_mpfr tmp (type);
1575   from_target (type, addr, tmp);
1576   return mpfr_get_sj (tmp.val, MPFR_RNDZ);
1577 }
1578
1579 /* Convert signed integer VAL to a target floating-number of type TYPE
1580    and store it as byte-stream ADDR.  */
1581 void
1582 mpfr_float_ops::from_longest (gdb_byte *addr,
1583                               const struct type *type,
1584                               LONGEST val) const
1585 {
1586   gdb_mpfr tmp (type);
1587   mpfr_set_sj (tmp.val, val, MPFR_RNDN);
1588   to_target (type, tmp, addr);
1589 }
1590
1591 /* Convert unsigned integer VAL to a target floating-number of type TYPE
1592    and store it as byte-stream ADDR.  */
1593 void
1594 mpfr_float_ops::from_ulongest (gdb_byte *addr,
1595                                const struct type *type,
1596                                ULONGEST val) const
1597 {
1598   gdb_mpfr tmp (type);
1599   mpfr_set_uj (tmp.val, val, MPFR_RNDN);
1600   to_target (type, tmp, addr);
1601 }
1602
1603 /* Convert the byte-stream ADDR, interpreted as floating-point type TYPE,
1604    to a floating-point value in the host "double" format.  */
1605 double
1606 mpfr_float_ops::to_host_double (const gdb_byte *addr,
1607                                 const struct type *type) const
1608 {
1609   gdb_mpfr tmp (type);
1610   from_target (type, addr, tmp);
1611   return mpfr_get_d (tmp.val, MPFR_RNDN);
1612 }
1613
1614 /* Convert floating-point value VAL in the host "double" format to a target
1615    floating-number of type TYPE and store it as byte-stream ADDR.  */
1616 void
1617 mpfr_float_ops::from_host_double (gdb_byte *addr,
1618                                   const struct type *type,
1619                                   double val) const
1620 {
1621   gdb_mpfr tmp (type);
1622   mpfr_set_d (tmp.val, val, MPFR_RNDN);
1623   to_target (type, tmp, addr);
1624 }
1625
1626 /* Convert a floating-point number of type FROM_TYPE from the target
1627    byte-stream FROM to a floating-point number of type TO_TYPE, and
1628    store it to the target byte-stream TO.  */
1629 void
1630 mpfr_float_ops::convert (const gdb_byte *from,
1631                          const struct type *from_type,
1632                          gdb_byte *to,
1633                          const struct type *to_type) const
1634 {
1635   gdb_mpfr from_tmp (from_type), to_tmp (to_type);
1636   from_target (from_type, from, from_tmp);
1637   mpfr_set (to_tmp.val, from_tmp.val, MPFR_RNDN);
1638   to_target (to_type, to_tmp, to);
1639 }
1640
1641 /* Perform the binary operation indicated by OPCODE, using as operands the
1642    target byte streams X and Y, interpreted as floating-point numbers of
1643    types TYPE_X and TYPE_Y, respectively.  Convert the result to type
1644    TYPE_RES and store it into the byte-stream RES.  */
1645 void
1646 mpfr_float_ops::binop (enum exp_opcode op,
1647                        const gdb_byte *x, const struct type *type_x,
1648                        const gdb_byte *y, const struct type *type_y,
1649                        gdb_byte *res, const struct type *type_res) const
1650 {
1651   gdb_mpfr x_tmp (type_x), y_tmp (type_y), tmp (type_res);
1652
1653   from_target (type_x, x, x_tmp);
1654   from_target (type_y, y, y_tmp);
1655
1656   switch (op)
1657     {
1658       case BINOP_ADD:
1659         mpfr_add (tmp.val, x_tmp.val, y_tmp.val, MPFR_RNDN);
1660         break;
1661
1662       case BINOP_SUB:
1663         mpfr_sub (tmp.val, x_tmp.val, y_tmp.val, MPFR_RNDN);
1664         break;
1665
1666       case BINOP_MUL:
1667         mpfr_mul (tmp.val, x_tmp.val, y_tmp.val, MPFR_RNDN);
1668         break;
1669
1670       case BINOP_DIV:
1671         mpfr_div (tmp.val, x_tmp.val, y_tmp.val, MPFR_RNDN);
1672         break;
1673
1674       case BINOP_EXP:
1675         mpfr_pow (tmp.val, x_tmp.val, y_tmp.val, MPFR_RNDN);
1676         break;
1677
1678       case BINOP_MIN:
1679         mpfr_min (tmp.val, x_tmp.val, y_tmp.val, MPFR_RNDN);
1680         break;
1681
1682       case BINOP_MAX:
1683         mpfr_max (tmp.val, x_tmp.val, y_tmp.val, MPFR_RNDN);
1684         break;
1685
1686       default:
1687         error (_("Integer-only operation on floating point number."));
1688         break;
1689     }
1690
1691   to_target (type_res, tmp, res);
1692 }
1693
1694 /* Compare the two target byte streams X and Y, interpreted as floating-point
1695    numbers of types TYPE_X and TYPE_Y, respectively.  Return zero if X and Y
1696    are equal, -1 if X is less than Y, and 1 otherwise.  */
1697 int
1698 mpfr_float_ops::compare (const gdb_byte *x, const struct type *type_x,
1699                          const gdb_byte *y, const struct type *type_y) const
1700 {
1701   gdb_mpfr x_tmp (type_x), y_tmp (type_y);
1702
1703   from_target (type_x, x, x_tmp);
1704   from_target (type_y, y, y_tmp);
1705
1706   if (mpfr_equal_p (x_tmp.val, y_tmp.val))
1707     return 0;
1708   else if (mpfr_less_p (x_tmp.val, y_tmp.val))
1709     return -1;
1710   else
1711     return 1;
1712 }
1713
1714 #endif
1715
1716
1717 /* Helper routines operating on decimal floating-point data.  */
1718
1719 /* Decimal floating point is one of the extension to IEEE 754, which is
1720    described in http://grouper.ieee.org/groups/754/revision.html and
1721    http://www2.hursley.ibm.com/decimal/.  It completes binary floating
1722    point by representing floating point more exactly.  */
1723
1724 /* The order of the following headers is important for making sure
1725    decNumber structure is large enough to hold decimal128 digits.  */
1726
1727 #include "dpd/decimal128.h"
1728 #include "dpd/decimal64.h"
1729 #include "dpd/decimal32.h"
1730
1731 /* When using decimal128, this is the maximum string length + 1
1732    (value comes from libdecnumber's DECIMAL128_String constant).  */
1733 #define MAX_DECIMAL_STRING  43
1734
1735 /* In GDB, we are using an array of gdb_byte to represent decimal values.
1736    They are stored in host byte order.  This routine does the conversion if
1737    the target byte order is different.  */
1738 static void
1739 match_endianness (const gdb_byte *from, const struct type *type, gdb_byte *to)
1740 {
1741   gdb_assert (TYPE_CODE (type) == TYPE_CODE_DECFLOAT);
1742
1743   int len = TYPE_LENGTH (type);
1744   int i;
1745
1746 #if WORDS_BIGENDIAN
1747 #define OPPOSITE_BYTE_ORDER BFD_ENDIAN_LITTLE
1748 #else
1749 #define OPPOSITE_BYTE_ORDER BFD_ENDIAN_BIG
1750 #endif
1751
1752   if (gdbarch_byte_order (get_type_arch (type)) == OPPOSITE_BYTE_ORDER)
1753     for (i = 0; i < len; i++)
1754       to[i] = from[len - i - 1];
1755   else
1756     for (i = 0; i < len; i++)
1757       to[i] = from[i];
1758
1759   return;
1760 }
1761
1762 /* Helper function to get the appropriate libdecnumber context for each size
1763    of decimal float.  */
1764 static void
1765 set_decnumber_context (decContext *ctx, const struct type *type)
1766 {
1767   gdb_assert (TYPE_CODE (type) == TYPE_CODE_DECFLOAT);
1768
1769   switch (TYPE_LENGTH (type))
1770     {
1771       case 4:
1772         decContextDefault (ctx, DEC_INIT_DECIMAL32);
1773         break;
1774       case 8:
1775         decContextDefault (ctx, DEC_INIT_DECIMAL64);
1776         break;
1777       case 16:
1778         decContextDefault (ctx, DEC_INIT_DECIMAL128);
1779         break;
1780     }
1781
1782   ctx->traps = 0;
1783 }
1784
1785 /* Check for errors signaled in the decimal context structure.  */
1786 static void
1787 decimal_check_errors (decContext *ctx)
1788 {
1789   /* An error here could be a division by zero, an overflow, an underflow or
1790      an invalid operation (from the DEC_Errors constant in decContext.h).
1791      Since GDB doesn't complain about division by zero, overflow or underflow
1792      errors for binary floating, we won't complain about them for decimal
1793      floating either.  */
1794   if (ctx->status & DEC_IEEE_854_Invalid_operation)
1795     {
1796       /* Leave only the error bits in the status flags.  */
1797       ctx->status &= DEC_IEEE_854_Invalid_operation;
1798       error (_("Cannot perform operation: %s"),
1799              decContextStatusToString (ctx));
1800     }
1801 }
1802
1803 /* Helper function to convert from libdecnumber's appropriate representation
1804    for computation to each size of decimal float.  */
1805 static void
1806 decimal_from_number (const decNumber *from,
1807                      gdb_byte *to, const struct type *type)
1808 {
1809   gdb_byte dec[16];
1810
1811   decContext set;
1812
1813   set_decnumber_context (&set, type);
1814
1815   switch (TYPE_LENGTH (type))
1816     {
1817       case 4:
1818         decimal32FromNumber ((decimal32 *) dec, from, &set);
1819         break;
1820       case 8:
1821         decimal64FromNumber ((decimal64 *) dec, from, &set);
1822         break;
1823       case 16:
1824         decimal128FromNumber ((decimal128 *) dec, from, &set);
1825         break;
1826       default:
1827         error (_("Unknown decimal floating point type."));
1828         break;
1829     }
1830
1831   match_endianness (dec, type, to);
1832 }
1833
1834 /* Helper function to convert each size of decimal float to libdecnumber's
1835    appropriate representation for computation.  */
1836 static void
1837 decimal_to_number (const gdb_byte *addr, const struct type *type,
1838                    decNumber *to)
1839 {
1840   gdb_byte dec[16];
1841   match_endianness (addr, type, dec);
1842
1843   switch (TYPE_LENGTH (type))
1844     {
1845       case 4:
1846         decimal32ToNumber ((decimal32 *) dec, to);
1847         break;
1848       case 8:
1849         decimal64ToNumber ((decimal64 *) dec, to);
1850         break;
1851       case 16:
1852         decimal128ToNumber ((decimal128 *) dec, to);
1853         break;
1854       default:
1855         error (_("Unknown decimal floating point type."));
1856         break;
1857     }
1858 }
1859
1860 /* Returns true if ADDR (which is of type TYPE) is the number zero.  */
1861 static bool
1862 decimal_is_zero (const gdb_byte *addr, const struct type *type)
1863 {
1864   decNumber number;
1865
1866   decimal_to_number (addr, type, &number);
1867
1868   return decNumberIsZero (&number);
1869 }
1870
1871
1872 /* Implementation of target_float_ops using the libdecnumber decNumber type
1873    as intermediate format.  */
1874
1875 class decimal_float_ops : public target_float_ops
1876 {
1877 public:
1878   std::string to_string (const gdb_byte *addr, const struct type *type,
1879                          const char *format) const override;
1880   bool from_string (gdb_byte *addr, const struct type *type,
1881                     const std::string &string) const override;
1882
1883   LONGEST to_longest (const gdb_byte *addr,
1884                       const struct type *type) const override;
1885   void from_longest (gdb_byte *addr, const struct type *type,
1886                      LONGEST val) const override;
1887   void from_ulongest (gdb_byte *addr, const struct type *type,
1888                       ULONGEST val) const override;
1889   double to_host_double (const gdb_byte *addr,
1890                          const struct type *type) const override
1891   {
1892     /* We don't support conversions between target decimal floating-point
1893        types and the host double type.  */
1894     gdb_assert_not_reached ("invalid operation on decimal float");
1895   }
1896   void from_host_double (gdb_byte *addr, const struct type *type,
1897                          double val) const override
1898   {
1899     /* We don't support conversions between target decimal floating-point
1900        types and the host double type.  */
1901     gdb_assert_not_reached ("invalid operation on decimal float");
1902   }
1903   void convert (const gdb_byte *from, const struct type *from_type,
1904                 gdb_byte *to, const struct type *to_type) const override;
1905
1906   void binop (enum exp_opcode opcode,
1907               const gdb_byte *x, const struct type *type_x,
1908               const gdb_byte *y, const struct type *type_y,
1909               gdb_byte *res, const struct type *type_res) const override;
1910   int compare (const gdb_byte *x, const struct type *type_x,
1911                const gdb_byte *y, const struct type *type_y) const override;
1912 };
1913
1914 /* Convert decimal type to its string representation.  LEN is the length
1915    of the decimal type, 4 bytes for decimal32, 8 bytes for decimal64 and
1916    16 bytes for decimal128.  */
1917 std::string
1918 decimal_float_ops::to_string (const gdb_byte *addr, const struct type *type,
1919                               const char *format = nullptr) const
1920 {
1921   gdb_byte dec[16];
1922
1923   match_endianness (addr, type, dec);
1924
1925   if (format != nullptr)
1926     {
1927       /* We don't handle format strings (yet).  If the host printf supports
1928          decimal floating point types, just use this.  Otherwise, fall back
1929          to printing the number while ignoring the format string.  */
1930 #if defined (PRINTF_HAS_DECFLOAT)
1931       /* FIXME: This makes unwarranted assumptions about the host ABI!  */
1932       return string_printf (format, dec);
1933 #endif
1934     }
1935
1936   std::string result;
1937   result.resize (MAX_DECIMAL_STRING);
1938
1939   switch (TYPE_LENGTH (type))
1940     {
1941       case 4:
1942         decimal32ToString ((decimal32 *) dec, &result[0]);
1943         break;
1944       case 8:
1945         decimal64ToString ((decimal64 *) dec, &result[0]);
1946         break;
1947       case 16:
1948         decimal128ToString ((decimal128 *) dec, &result[0]);
1949         break;
1950       default:
1951         error (_("Unknown decimal floating point type."));
1952         break;
1953     }
1954
1955   return result;
1956 }
1957
1958 /* Convert the string form of a decimal value to its decimal representation.
1959    LEN is the length of the decimal type, 4 bytes for decimal32, 8 bytes for
1960    decimal64 and 16 bytes for decimal128.  */
1961 bool
1962 decimal_float_ops::from_string (gdb_byte *addr, const struct type *type,
1963                                 const std::string &string) const
1964 {
1965   decContext set;
1966   gdb_byte dec[16];
1967
1968   set_decnumber_context (&set, type);
1969
1970   switch (TYPE_LENGTH (type))
1971     {
1972       case 4:
1973         decimal32FromString ((decimal32 *) dec, string.c_str (), &set);
1974         break;
1975       case 8:
1976         decimal64FromString ((decimal64 *) dec, string.c_str (), &set);
1977         break;
1978       case 16:
1979         decimal128FromString ((decimal128 *) dec, string.c_str (), &set);
1980         break;
1981       default:
1982         error (_("Unknown decimal floating point type."));
1983         break;
1984     }
1985
1986   match_endianness (dec, type, addr);
1987
1988   /* Check for errors in the DFP operation.  */
1989   decimal_check_errors (&set);
1990
1991   return true;
1992 }
1993
1994 /* Converts a LONGEST to a decimal float of specified LEN bytes.  */
1995 void
1996 decimal_float_ops::from_longest (gdb_byte *addr, const struct type *type,
1997                                  LONGEST from) const
1998 {
1999   decNumber number;
2000
2001   if ((int32_t) from != from)
2002     /* libdecnumber can convert only 32-bit integers.  */
2003     error (_("Conversion of large integer to a "
2004              "decimal floating type is not supported."));
2005
2006   decNumberFromInt32 (&number, (int32_t) from);
2007
2008   decimal_from_number (&number, addr, type);
2009 }
2010
2011 /* Converts a ULONGEST to a decimal float of specified LEN bytes.  */
2012 void
2013 decimal_float_ops::from_ulongest (gdb_byte *addr, const struct type *type,
2014                                   ULONGEST from) const
2015 {
2016   decNumber number;
2017
2018   if ((uint32_t) from != from)
2019     /* libdecnumber can convert only 32-bit integers.  */
2020     error (_("Conversion of large integer to a "
2021              "decimal floating type is not supported."));
2022
2023   decNumberFromUInt32 (&number, (uint32_t) from);
2024
2025   decimal_from_number (&number, addr, type);
2026 }
2027
2028 /* Converts a decimal float of LEN bytes to a LONGEST.  */
2029 LONGEST
2030 decimal_float_ops::to_longest (const gdb_byte *addr,
2031                                const struct type *type) const
2032 {
2033   /* libdecnumber has a function to convert from decimal to integer, but
2034      it doesn't work when the decimal number has a fractional part.  */
2035   std::string str = to_string (addr, type);
2036   return strtoll (str.c_str (), NULL, 10);
2037 }
2038
2039 /* Perform operation OP with operands X and Y with sizes LEN_X and LEN_Y
2040    and byte orders BYTE_ORDER_X and BYTE_ORDER_Y, and store value in
2041    RESULT with size LEN_RESULT and byte order BYTE_ORDER_RESULT.  */
2042 void
2043 decimal_float_ops::binop (enum exp_opcode op,
2044                           const gdb_byte *x, const struct type *type_x,
2045                           const gdb_byte *y, const struct type *type_y,
2046                           gdb_byte *res, const struct type *type_res) const
2047 {
2048   decContext set;
2049   decNumber number1, number2, number3;
2050
2051   decimal_to_number (x, type_x, &number1);
2052   decimal_to_number (y, type_y, &number2);
2053
2054   set_decnumber_context (&set, type_res);
2055
2056   switch (op)
2057     {
2058       case BINOP_ADD:
2059         decNumberAdd (&number3, &number1, &number2, &set);
2060         break;
2061       case BINOP_SUB:
2062         decNumberSubtract (&number3, &number1, &number2, &set);
2063         break;
2064       case BINOP_MUL:
2065         decNumberMultiply (&number3, &number1, &number2, &set);
2066         break;
2067       case BINOP_DIV:
2068         decNumberDivide (&number3, &number1, &number2, &set);
2069         break;
2070       case BINOP_EXP:
2071         decNumberPower (&number3, &number1, &number2, &set);
2072         break;
2073      default:
2074         error (_("Operation not valid for decimal floating point number."));
2075         break;
2076     }
2077
2078   /* Check for errors in the DFP operation.  */
2079   decimal_check_errors (&set);
2080
2081   decimal_from_number (&number3, res, type_res);
2082 }
2083
2084 /* Compares two numbers numerically.  If X is less than Y then the return value
2085    will be -1.  If they are equal, then the return value will be 0.  If X is
2086    greater than the Y then the return value will be 1.  */
2087 int
2088 decimal_float_ops::compare (const gdb_byte *x, const struct type *type_x,
2089                             const gdb_byte *y, const struct type *type_y) const
2090 {
2091   decNumber number1, number2, result;
2092   decContext set;
2093   const struct type *type_result;
2094
2095   decimal_to_number (x, type_x, &number1);
2096   decimal_to_number (y, type_y, &number2);
2097
2098   /* Perform the comparison in the larger of the two sizes.  */
2099   type_result = TYPE_LENGTH (type_x) > TYPE_LENGTH (type_y) ? type_x : type_y;
2100   set_decnumber_context (&set, type_result);
2101
2102   decNumberCompare (&result, &number1, &number2, &set);
2103
2104   /* Check for errors in the DFP operation.  */
2105   decimal_check_errors (&set);
2106
2107   if (decNumberIsNaN (&result))
2108     error (_("Comparison with an invalid number (NaN)."));
2109   else if (decNumberIsZero (&result))
2110     return 0;
2111   else if (decNumberIsNegative (&result))
2112     return -1;
2113   else
2114     return 1;
2115 }
2116
2117 /* Convert a decimal value from a decimal type with LEN_FROM bytes to a
2118    decimal type with LEN_TO bytes.  */
2119 void
2120 decimal_float_ops::convert (const gdb_byte *from, const struct type *from_type,
2121                             gdb_byte *to, const struct type *to_type) const
2122 {
2123   decNumber number;
2124
2125   decimal_to_number (from, from_type, &number);
2126   decimal_from_number (&number, to, to_type);
2127 }
2128
2129
2130 /* Typed floating-point routines.  These routines operate on floating-point
2131    values in target format, represented by a byte buffer interpreted as a
2132    "struct type", which may be either a binary or decimal floating-point
2133    type (TYPE_CODE_FLT or TYPE_CODE_DECFLOAT).  */
2134
2135 /* Return whether TYPE1 and TYPE2 are of the same category (binary or
2136    decimal floating-point).  */
2137 static bool
2138 target_float_same_category_p (const struct type *type1,
2139                               const struct type *type2)
2140 {
2141   return TYPE_CODE (type1) == TYPE_CODE (type2);
2142 }
2143
2144 /* Return whether TYPE1 and TYPE2 use the same floating-point format.  */
2145 static bool
2146 target_float_same_format_p (const struct type *type1,
2147                             const struct type *type2)
2148 {
2149   if (!target_float_same_category_p (type1, type2))
2150     return false;
2151
2152   switch (TYPE_CODE (type1))
2153     {
2154       case TYPE_CODE_FLT:
2155         return floatformat_from_type (type1) == floatformat_from_type (type2);
2156
2157       case TYPE_CODE_DECFLOAT:
2158         return (TYPE_LENGTH (type1) == TYPE_LENGTH (type2)
2159                 && (gdbarch_byte_order (get_type_arch (type1))
2160                     == gdbarch_byte_order (get_type_arch (type2))));
2161
2162       default:
2163         gdb_assert_not_reached ("unexpected type code");
2164     }
2165 }
2166
2167 /* Return the size (without padding) of the target floating-point
2168    format used by TYPE.  */
2169 static int
2170 target_float_format_length (const struct type *type)
2171 {
2172   switch (TYPE_CODE (type))
2173     {
2174       case TYPE_CODE_FLT:
2175         return floatformat_totalsize_bytes (floatformat_from_type (type));
2176
2177       case TYPE_CODE_DECFLOAT:
2178         return TYPE_LENGTH (type);
2179
2180       default:
2181         gdb_assert_not_reached ("unexpected type code");
2182     }
2183 }
2184
2185 /* Identifiers of available host-side intermediate formats.  These must
2186    be sorted so the that the more "general" kinds come later.  */
2187 enum target_float_ops_kind
2188 {
2189   /* Target binary floating-point formats that match a host format.  */
2190   host_float = 0,
2191   host_double,
2192   host_long_double,
2193   /* Any other target binary floating-point format.  */
2194   binary,
2195   /* Any target decimal floating-point format.  */
2196   decimal
2197 };
2198
2199 /* Given a target type TYPE, choose the best host-side intermediate format
2200    to perform operations on TYPE in.  */
2201 static enum target_float_ops_kind
2202 get_target_float_ops_kind (const struct type *type)
2203 {
2204   switch (TYPE_CODE (type))
2205     {
2206       case TYPE_CODE_FLT:
2207         {
2208           const struct floatformat *fmt = floatformat_from_type (type);
2209
2210           /* Binary floating-point formats matching a host format.  */
2211           if (fmt == host_float_format)
2212             return target_float_ops_kind::host_float;
2213           if (fmt == host_double_format)
2214             return target_float_ops_kind::host_double;
2215           if (fmt == host_long_double_format)
2216             return target_float_ops_kind::host_long_double;
2217
2218           /* Any other binary floating-point format.  */
2219           return target_float_ops_kind::binary;
2220         }
2221
2222       case TYPE_CODE_DECFLOAT:
2223         {
2224           /* Any decimal floating-point format.  */
2225           return target_float_ops_kind::decimal;
2226         }
2227
2228       default:
2229         gdb_assert_not_reached ("unexpected type code");
2230     }
2231 }
2232
2233 /* Return target_float_ops to peform operations for KIND.  */
2234 static const target_float_ops *
2235 get_target_float_ops (enum target_float_ops_kind kind)
2236 {
2237   switch (kind)
2238     {
2239       /* If the type format matches one of the host floating-point
2240          types, use that type as intermediate format.  */
2241       case target_float_ops_kind::host_float:
2242         {
2243           static host_float_ops<float> host_float_ops_float;
2244           return &host_float_ops_float;
2245         }
2246
2247       case target_float_ops_kind::host_double:
2248         {
2249           static host_float_ops<double> host_float_ops_double;
2250           return &host_float_ops_double;
2251         }
2252
2253       case target_float_ops_kind::host_long_double:
2254         {
2255           static host_float_ops<long double> host_float_ops_long_double;
2256           return &host_float_ops_long_double;
2257         }
2258
2259       /* For binary floating-point formats that do not match any host format,
2260          use mpfr_t as intermediate format to provide precise target-floating
2261          point emulation.  However, if the MPFR library is not availabe,
2262          use the largest host floating-point type as intermediate format.  */
2263       case target_float_ops_kind::binary:
2264         {
2265 #ifdef HAVE_LIBMPFR
2266           static mpfr_float_ops binary_float_ops;
2267 #else
2268           static host_float_ops<long double> binary_float_ops;
2269 #endif
2270           return &binary_float_ops;
2271         }
2272
2273       /* For decimal floating-point types, always use the libdecnumber
2274          decNumber type as intermediate format.  */
2275       case target_float_ops_kind::decimal:
2276         {
2277           static decimal_float_ops decimal_float_ops;
2278           return &decimal_float_ops;
2279         }
2280
2281       default:
2282         gdb_assert_not_reached ("unexpected target_float_ops_kind");
2283     }
2284 }
2285
2286 /* Given a target type TYPE, determine the best host-side intermediate format
2287    to perform operations on TYPE in.  */
2288 static const target_float_ops *
2289 get_target_float_ops (const struct type *type)
2290 {
2291   enum target_float_ops_kind kind = get_target_float_ops_kind (type);
2292   return get_target_float_ops (kind);
2293 }
2294
2295 /* The same for operations involving two target types TYPE1 and TYPE2.  */
2296 static const target_float_ops *
2297 get_target_float_ops (const struct type *type1, const struct type *type2)
2298 {
2299   gdb_assert (TYPE_CODE (type1) == TYPE_CODE (type2));
2300
2301   enum target_float_ops_kind kind1 = get_target_float_ops_kind (type1);
2302   enum target_float_ops_kind kind2 = get_target_float_ops_kind (type2);
2303
2304   /* Given the way the kinds are sorted, we simply choose the larger one;
2305      this will be able to hold values of either type.  */
2306   return get_target_float_ops (std::max (kind1, kind2));
2307 }
2308
2309 /* Return whether the byte-stream ADDR holds a valid value of
2310    floating-point type TYPE.  */
2311 bool
2312 target_float_is_valid (const gdb_byte *addr, const struct type *type)
2313 {
2314   if (TYPE_CODE (type) == TYPE_CODE_FLT)
2315     return floatformat_is_valid (floatformat_from_type (type), addr);
2316
2317   if (TYPE_CODE (type) == TYPE_CODE_DECFLOAT)
2318     return true;
2319
2320   gdb_assert_not_reached ("unexpected type code");
2321 }
2322
2323 /* Return whether the byte-stream ADDR, interpreted as floating-point
2324    type TYPE, is numerically equal to zero (of either sign).  */
2325 bool
2326 target_float_is_zero (const gdb_byte *addr, const struct type *type)
2327 {
2328   if (TYPE_CODE (type) == TYPE_CODE_FLT)
2329     return (floatformat_classify (floatformat_from_type (type), addr)
2330             == float_zero);
2331
2332   if (TYPE_CODE (type) == TYPE_CODE_DECFLOAT)
2333     return decimal_is_zero (addr, type);
2334
2335   gdb_assert_not_reached ("unexpected type code");
2336 }
2337
2338 /* Convert the byte-stream ADDR, interpreted as floating-point type TYPE,
2339    to a string, optionally using the print format FORMAT.  */
2340 std::string
2341 target_float_to_string (const gdb_byte *addr, const struct type *type,
2342                         const char *format)
2343 {
2344   /* Unless we need to adhere to a specific format, provide special
2345      output for special cases of binary floating-point numbers.  */
2346   if (format == nullptr && TYPE_CODE (type) == TYPE_CODE_FLT)
2347     {
2348       const struct floatformat *fmt = floatformat_from_type (type);
2349
2350       /* Detect invalid representations.  */
2351       if (!floatformat_is_valid (fmt, addr))
2352         return "<invalid float value>";
2353
2354       /* Handle NaN and Inf.  */
2355       enum float_kind kind = floatformat_classify (fmt, addr);
2356       if (kind == float_nan)
2357         {
2358           const char *sign = floatformat_is_negative (fmt, addr)? "-" : "";
2359           const char *mantissa = floatformat_mantissa (fmt, addr);
2360           return string_printf ("%snan(0x%s)", sign, mantissa);
2361         }
2362       else if (kind == float_infinite)
2363         {
2364           const char *sign = floatformat_is_negative (fmt, addr)? "-" : "";
2365           return string_printf ("%sinf", sign);
2366         }
2367     }
2368
2369   const target_float_ops *ops = get_target_float_ops (type);
2370   return ops->to_string (addr, type, format);
2371 }
2372
2373 /* Parse string STRING into a target floating-number of type TYPE and
2374    store it as byte-stream ADDR.  Return whether parsing succeeded.  */
2375 bool
2376 target_float_from_string (gdb_byte *addr, const struct type *type,
2377                           const std::string &string)
2378 {
2379   const target_float_ops *ops = get_target_float_ops (type);
2380   return ops->from_string (addr, type, string);
2381 }
2382
2383 /* Convert the byte-stream ADDR, interpreted as floating-point type TYPE,
2384    to an integer value (rounding towards zero).  */
2385 LONGEST
2386 target_float_to_longest (const gdb_byte *addr, const struct type *type)
2387 {
2388   const target_float_ops *ops = get_target_float_ops (type);
2389   return ops->to_longest (addr, type);
2390 }
2391
2392 /* Convert signed integer VAL to a target floating-number of type TYPE
2393    and store it as byte-stream ADDR.  */
2394 void
2395 target_float_from_longest (gdb_byte *addr, const struct type *type,
2396                            LONGEST val)
2397 {
2398   const target_float_ops *ops = get_target_float_ops (type);
2399   ops->from_longest (addr, type, val);
2400 }
2401
2402 /* Convert unsigned integer VAL to a target floating-number of type TYPE
2403    and store it as byte-stream ADDR.  */
2404 void
2405 target_float_from_ulongest (gdb_byte *addr, const struct type *type,
2406                             ULONGEST val)
2407 {
2408   const target_float_ops *ops = get_target_float_ops (type);
2409   ops->from_ulongest (addr, type, val);
2410 }
2411
2412 /* Convert the byte-stream ADDR, interpreted as floating-point type TYPE,
2413    to a floating-point value in the host "double" format.  */
2414 double
2415 target_float_to_host_double (const gdb_byte *addr,
2416                              const struct type *type)
2417 {
2418   const target_float_ops *ops = get_target_float_ops (type);
2419   return ops->to_host_double (addr, type);
2420 }
2421
2422 /* Convert floating-point value VAL in the host "double" format to a target
2423    floating-number of type TYPE and store it as byte-stream ADDR.  */
2424 void
2425 target_float_from_host_double (gdb_byte *addr, const struct type *type,
2426                                double val)
2427 {
2428   const target_float_ops *ops = get_target_float_ops (type);
2429   ops->from_host_double (addr, type, val);
2430 }
2431
2432 /* Convert a floating-point number of type FROM_TYPE from the target
2433    byte-stream FROM to a floating-point number of type TO_TYPE, and
2434    store it to the target byte-stream TO.  */
2435 void
2436 target_float_convert (const gdb_byte *from, const struct type *from_type,
2437                       gdb_byte *to, const struct type *to_type)
2438 {
2439   /* We cannot directly convert between binary and decimal floating-point
2440      types, so go via an intermediary string.  */
2441   if (!target_float_same_category_p (from_type, to_type))
2442     {
2443       std::string str = target_float_to_string (from, from_type);
2444       target_float_from_string (to, to_type, str);
2445       return;
2446     }
2447
2448   /* Convert between two different formats in the same category.  */
2449   if (!target_float_same_format_p (from_type, to_type))
2450   {
2451     const target_float_ops *ops = get_target_float_ops (from_type, to_type);
2452     ops->convert (from, from_type, to, to_type);
2453     return;
2454   }
2455
2456   /* The floating-point formats match, so we simply copy the data, ensuring
2457      possible padding bytes in the target buffer are zeroed out.  */
2458   memset (to, 0, TYPE_LENGTH (to_type));
2459   memcpy (to, from, target_float_format_length (to_type));
2460 }
2461
2462 /* Perform the binary operation indicated by OPCODE, using as operands the
2463    target byte streams X and Y, interpreted as floating-point numbers of
2464    types TYPE_X and TYPE_Y, respectively.  Convert the result to type
2465    TYPE_RES and store it into the byte-stream RES.
2466
2467    The three types must either be all binary floating-point types, or else
2468    all decimal floating-point types.  Binary and decimal floating-point
2469    types cannot be mixed within a single operation.  */
2470 void
2471 target_float_binop (enum exp_opcode opcode,
2472                     const gdb_byte *x, const struct type *type_x,
2473                     const gdb_byte *y, const struct type *type_y,
2474                     gdb_byte *res, const struct type *type_res)
2475 {
2476   gdb_assert (target_float_same_category_p (type_x, type_res));
2477   gdb_assert (target_float_same_category_p (type_y, type_res));
2478
2479   const target_float_ops *ops = get_target_float_ops (type_x, type_y);
2480   ops->binop (opcode, x, type_x, y, type_y, res, type_res);
2481 }
2482
2483 /* Compare the two target byte streams X and Y, interpreted as floating-point
2484    numbers of types TYPE_X and TYPE_Y, respectively.  Return zero if X and Y
2485    are equal, -1 if X is less than Y, and 1 otherwise.
2486
2487    The two types must either both be binary floating-point types, or else
2488    both be decimal floating-point types.  Binary and decimal floating-point
2489    types cannot compared directly against each other.  */
2490 int
2491 target_float_compare (const gdb_byte *x, const struct type *type_x,
2492                       const gdb_byte *y, const struct type *type_y)
2493 {
2494   gdb_assert (target_float_same_category_p (type_x, type_y));
2495
2496   const target_float_ops *ops = get_target_float_ops (type_x, type_y);
2497   return ops->compare (x, type_x, y, type_y);
2498 }
2499