Backport from GCC mainline.
[platform/upstream/linaro-gcc.git] / gcc / wide-int.cc
1 /* Operations with very long integers.
2    Copyright (C) 2012-2016 Free Software Foundation, Inc.
3    Contributed by Kenneth Zadeck <zadeck@naturalbridge.com>
4
5 This file is part of GCC.
6
7 GCC is free software; you can redistribute it and/or modify it
8 under the terms of the GNU General Public License as published by the
9 Free Software Foundation; either version 3, or (at your option) any
10 later version.
11
12 GCC is distributed in the hope that it will be useful, but WITHOUT
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
15 for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING3.  If not see
19 <http://www.gnu.org/licenses/>.  */
20
21 #include "config.h"
22 #include "system.h"
23 #include "coretypes.h"
24 #include "tm.h"
25 #include "tree.h"
26
27
28 #define HOST_BITS_PER_HALF_WIDE_INT 32
29 #if HOST_BITS_PER_HALF_WIDE_INT == HOST_BITS_PER_LONG
30 # define HOST_HALF_WIDE_INT long
31 #elif HOST_BITS_PER_HALF_WIDE_INT == HOST_BITS_PER_INT
32 # define HOST_HALF_WIDE_INT int
33 #else
34 #error Please add support for HOST_HALF_WIDE_INT
35 #endif
36
37 #define W_TYPE_SIZE HOST_BITS_PER_WIDE_INT
38 /* Do not include longlong.h when compiler is clang-based. See PR61146.  */
39 #if GCC_VERSION >= 3000 && (W_TYPE_SIZE == 32 || defined (__SIZEOF_INT128__)) && !defined(__clang__)
40 typedef unsigned HOST_HALF_WIDE_INT UHWtype;
41 typedef unsigned HOST_WIDE_INT UWtype;
42 typedef unsigned int UQItype __attribute__ ((mode (QI)));
43 typedef unsigned int USItype __attribute__ ((mode (SI)));
44 typedef unsigned int UDItype __attribute__ ((mode (DI)));
45 #if W_TYPE_SIZE == 32
46 typedef unsigned int UDWtype __attribute__ ((mode (DI)));
47 #else
48 typedef unsigned int UDWtype __attribute__ ((mode (TI)));
49 #endif
50 #include "longlong.h"
51 #endif
52
53 static const HOST_WIDE_INT zeros[WIDE_INT_MAX_ELTS] = {};
54
55 /*
56  * Internal utilities.
57  */
58
59 /* Quantities to deal with values that hold half of a wide int.  Used
60    in multiply and divide.  */
61 #define HALF_INT_MASK (((HOST_WIDE_INT) 1 << HOST_BITS_PER_HALF_WIDE_INT) - 1)
62
63 #define BLOCK_OF(TARGET) ((TARGET) / HOST_BITS_PER_WIDE_INT)
64 #define BLOCKS_NEEDED(PREC) \
65   (PREC ? (((PREC) + HOST_BITS_PER_WIDE_INT - 1) / HOST_BITS_PER_WIDE_INT) : 1)
66 #define SIGN_MASK(X) ((HOST_WIDE_INT) (X) < 0 ? -1 : 0)
67
68 /* Return the value a VAL[I] if I < LEN, otherwise, return 0 or -1
69    based on the top existing bit of VAL. */
70
71 static unsigned HOST_WIDE_INT
72 safe_uhwi (const HOST_WIDE_INT *val, unsigned int len, unsigned int i)
73 {
74   return i < len ? val[i] : val[len - 1] < 0 ? (HOST_WIDE_INT) -1 : 0;
75 }
76
77 /* Convert the integer in VAL to canonical form, returning its new length.
78    LEN is the number of blocks currently in VAL and PRECISION is the number
79    of bits in the integer it represents.
80
81    This function only changes the representation, not the value.  */
82 static unsigned int
83 canonize (HOST_WIDE_INT *val, unsigned int len, unsigned int precision)
84 {
85   unsigned int blocks_needed = BLOCKS_NEEDED (precision);
86   HOST_WIDE_INT top;
87   int i;
88
89   if (len > blocks_needed)
90     len = blocks_needed;
91
92   if (len == 1)
93     return len;
94
95   top = val[len - 1];
96   if (len * HOST_BITS_PER_WIDE_INT > precision)
97     val[len - 1] = top = sext_hwi (top, precision % HOST_BITS_PER_WIDE_INT);
98   if (top != 0 && top != (HOST_WIDE_INT)-1)
99     return len;
100
101   /* At this point we know that the top is either 0 or -1.  Find the
102      first block that is not a copy of this.  */
103   for (i = len - 2; i >= 0; i--)
104     {
105       HOST_WIDE_INT x = val[i];
106       if (x != top)
107         {
108           if (SIGN_MASK (x) == top)
109             return i + 1;
110
111           /* We need an extra block because the top bit block i does
112              not match the extension.  */
113           return i + 2;
114         }
115     }
116
117   /* The number is 0 or -1.  */
118   return 1;
119 }
120
121 /* VAL[0] is the unsigned result of an operation.  Canonize it by adding
122    another 0 block if needed, and return number of blocks needed.  */
123
124 static inline unsigned int
125 canonize_uhwi (HOST_WIDE_INT *val, unsigned int precision)
126 {
127   if (val[0] < 0 && precision > HOST_BITS_PER_WIDE_INT)
128     {
129       val[1] = 0;
130       return 2;
131     }
132   return 1;
133 }
134
135 /*
136  * Conversion routines in and out of wide_int.
137  */
138
139 /* Copy XLEN elements from XVAL to VAL.  If NEED_CANON, canonize the
140    result for an integer with precision PRECISION.  Return the length
141    of VAL (after any canonization.  */
142 unsigned int
143 wi::from_array (HOST_WIDE_INT *val, const HOST_WIDE_INT *xval,
144                 unsigned int xlen, unsigned int precision, bool need_canon)
145 {
146   for (unsigned i = 0; i < xlen; i++)
147     val[i] = xval[i];
148   return need_canon ? canonize (val, xlen, precision) : xlen;
149 }
150
151 /* Construct a wide int from a buffer of length LEN.  BUFFER will be
152    read according to byte endianess and word endianess of the target.
153    Only the lower BUFFER_LEN bytes of the result are set; the remaining
154    high bytes are cleared.  */
155 wide_int
156 wi::from_buffer (const unsigned char *buffer, unsigned int buffer_len)
157 {
158   unsigned int precision = buffer_len * BITS_PER_UNIT;
159   wide_int result = wide_int::create (precision);
160   unsigned int words = buffer_len / UNITS_PER_WORD;
161
162   /* We have to clear all the bits ourself, as we merely or in values
163      below.  */
164   unsigned int len = BLOCKS_NEEDED (precision);
165   HOST_WIDE_INT *val = result.write_val ();
166   for (unsigned int i = 0; i < len; ++i)
167     val[i] = 0;
168
169   for (unsigned int byte = 0; byte < buffer_len; byte++)
170     {
171       unsigned int offset;
172       unsigned int index;
173       unsigned int bitpos = byte * BITS_PER_UNIT;
174       unsigned HOST_WIDE_INT value;
175
176       if (buffer_len > UNITS_PER_WORD)
177         {
178           unsigned int word = byte / UNITS_PER_WORD;
179
180           if (WORDS_BIG_ENDIAN)
181             word = (words - 1) - word;
182
183           offset = word * UNITS_PER_WORD;
184
185           if (BYTES_BIG_ENDIAN)
186             offset += (UNITS_PER_WORD - 1) - (byte % UNITS_PER_WORD);
187           else
188             offset += byte % UNITS_PER_WORD;
189         }
190       else
191         offset = BYTES_BIG_ENDIAN ? (buffer_len - 1) - byte : byte;
192
193       value = (unsigned HOST_WIDE_INT) buffer[offset];
194
195       index = bitpos / HOST_BITS_PER_WIDE_INT;
196       val[index] |= value << (bitpos % HOST_BITS_PER_WIDE_INT);
197     }
198
199   result.set_len (canonize (val, len, precision));
200
201   return result;
202 }
203
204 /* Sets RESULT from X, the sign is taken according to SGN.  */
205 void
206 wi::to_mpz (const wide_int_ref &x, mpz_t result, signop sgn)
207 {
208   int len = x.get_len ();
209   const HOST_WIDE_INT *v = x.get_val ();
210   int excess = len * HOST_BITS_PER_WIDE_INT - x.get_precision ();
211
212   if (wi::neg_p (x, sgn))
213     {
214       /* We use ones complement to avoid -x80..0 edge case that -
215          won't work on.  */
216       HOST_WIDE_INT *t = XALLOCAVEC (HOST_WIDE_INT, len);
217       for (int i = 0; i < len; i++)
218         t[i] = ~v[i];
219       if (excess > 0)
220         t[len - 1] = (unsigned HOST_WIDE_INT) t[len - 1] << excess >> excess;
221       mpz_import (result, len, -1, sizeof (HOST_WIDE_INT), 0, 0, t);
222       mpz_com (result, result);
223     }
224   else if (excess > 0)
225     {
226       HOST_WIDE_INT *t = XALLOCAVEC (HOST_WIDE_INT, len);
227       for (int i = 0; i < len - 1; i++)
228         t[i] = v[i];
229       t[len - 1] = (unsigned HOST_WIDE_INT) v[len - 1] << excess >> excess;
230       mpz_import (result, len, -1, sizeof (HOST_WIDE_INT), 0, 0, t);
231     }
232   else
233     mpz_import (result, len, -1, sizeof (HOST_WIDE_INT), 0, 0, v);
234 }
235
236 /* Returns X converted to TYPE.  If WRAP is true, then out-of-range
237    values of VAL will be wrapped; otherwise, they will be set to the
238    appropriate minimum or maximum TYPE bound.  */
239 wide_int
240 wi::from_mpz (const_tree type, mpz_t x, bool wrap)
241 {
242   size_t count, numb;
243   unsigned int prec = TYPE_PRECISION (type);
244   wide_int res = wide_int::create (prec);
245
246   if (!wrap)
247     {
248       mpz_t min, max;
249
250       mpz_init (min);
251       mpz_init (max);
252       get_type_static_bounds (type, min, max);
253
254       if (mpz_cmp (x, min) < 0)
255         mpz_set (x, min);
256       else if (mpz_cmp (x, max) > 0)
257         mpz_set (x, max);
258
259       mpz_clear (min);
260       mpz_clear (max);
261     }
262
263   /* Determine the number of unsigned HOST_WIDE_INTs that are required
264      for representing the absolute value.  The code to calculate count is
265      extracted from the GMP manual, section "Integer Import and Export":
266      http://gmplib.org/manual/Integer-Import-and-Export.html  */
267   numb = CHAR_BIT * sizeof (HOST_WIDE_INT);
268   count = (mpz_sizeinbase (x, 2) + numb - 1) / numb;
269   HOST_WIDE_INT *val = res.write_val ();
270   /* Read the absolute value.
271
272      Write directly to the wide_int storage if possible, otherwise leave
273      GMP to allocate the memory for us.  It might be slightly more efficient
274      to use mpz_tdiv_r_2exp for the latter case, but the situation is
275      pathological and it seems safer to operate on the original mpz value
276      in all cases.  */
277   void *valres = mpz_export (count <= WIDE_INT_MAX_ELTS ? val : 0,
278                              &count, -1, sizeof (HOST_WIDE_INT), 0, 0, x);
279   if (count < 1)
280     {
281       val[0] = 0;
282       count = 1;
283     }
284   count = MIN (count, BLOCKS_NEEDED (prec));
285   if (valres != val)
286     {
287       memcpy (val, valres, count * sizeof (HOST_WIDE_INT));
288       free (valres);
289     }
290   /* Zero-extend the absolute value to PREC bits.  */
291   if (count < BLOCKS_NEEDED (prec) && val[count - 1] < 0)
292     val[count++] = 0;
293   else
294     count = canonize (val, count, prec);
295   res.set_len (count);
296
297   if (mpz_sgn (x) < 0)
298     res = -res;
299
300   return res;
301 }
302
303 /*
304  * Largest and smallest values in a mode.
305  */
306
307 /* Return the largest SGNed number that is representable in PRECISION bits.
308
309    TODO: There is still code from the double_int era that trys to
310    make up for the fact that double int's could not represent the
311    min and max values of all types.  This code should be removed
312    because the min and max values can always be represented in
313    wide_ints and int-csts.  */
314 wide_int
315 wi::max_value (unsigned int precision, signop sgn)
316 {
317   gcc_checking_assert (precision != 0);
318   if (sgn == UNSIGNED)
319     /* The unsigned max is just all ones.  */
320     return shwi (-1, precision);
321   else
322     /* The signed max is all ones except the top bit.  This must be
323        explicitly represented.  */
324     return mask (precision - 1, false, precision);
325 }
326
327 /* Return the largest SGNed number that is representable in PRECISION bits.  */
328 wide_int
329 wi::min_value (unsigned int precision, signop sgn)
330 {
331   gcc_checking_assert (precision != 0);
332   if (sgn == UNSIGNED)
333     return uhwi (0, precision);
334   else
335     /* The signed min is all zeros except the top bit.  This must be
336        explicitly represented.  */
337     return wi::set_bit_in_zero (precision - 1, precision);
338 }
339
340 /*
341  * Public utilities.
342  */
343
344 /* Convert the number represented by XVAL, XLEN and XPRECISION, which has
345    signedness SGN, to an integer that has PRECISION bits.  Store the blocks
346    in VAL and return the number of blocks used.
347
348    This function can handle both extension (PRECISION > XPRECISION)
349    and truncation (PRECISION < XPRECISION).  */
350 unsigned int
351 wi::force_to_size (HOST_WIDE_INT *val, const HOST_WIDE_INT *xval,
352                    unsigned int xlen, unsigned int xprecision,
353                    unsigned int precision, signop sgn)
354 {
355   unsigned int blocks_needed = BLOCKS_NEEDED (precision);
356   unsigned int len = blocks_needed < xlen ? blocks_needed : xlen;
357   for (unsigned i = 0; i < len; i++)
358     val[i] = xval[i];
359
360   if (precision > xprecision)
361     {
362       unsigned int small_xprecision = xprecision % HOST_BITS_PER_WIDE_INT;
363
364       /* Expanding.  */
365       if (sgn == UNSIGNED)
366         {
367           if (small_xprecision && len == BLOCKS_NEEDED (xprecision))
368             val[len - 1] = zext_hwi (val[len - 1], small_xprecision);
369           else if (val[len - 1] < 0)
370             {
371               while (len < BLOCKS_NEEDED (xprecision))
372                 val[len++] = -1;
373               if (small_xprecision)
374                 val[len - 1] = zext_hwi (val[len - 1], small_xprecision);
375               else
376                 val[len++] = 0;
377             }
378         }
379       else
380         {
381           if (small_xprecision && len == BLOCKS_NEEDED (xprecision))
382             val[len - 1] = sext_hwi (val[len - 1], small_xprecision);
383         }
384     }
385   len = canonize (val, len, precision);
386
387   return len;
388 }
389
390 /* This function hides the fact that we cannot rely on the bits beyond
391    the precision.  This issue comes up in the relational comparisions
392    where we do allow comparisons of values of different precisions.  */
393 static inline HOST_WIDE_INT
394 selt (const HOST_WIDE_INT *a, unsigned int len,
395       unsigned int blocks_needed, unsigned int small_prec,
396       unsigned int index, signop sgn)
397 {
398   HOST_WIDE_INT val;
399   if (index < len)
400     val = a[index];
401   else if (index < blocks_needed || sgn == SIGNED)
402     /* Signed or within the precision.  */
403     val = SIGN_MASK (a[len - 1]);
404   else
405     /* Unsigned extension beyond the precision. */
406     val = 0;
407
408   if (small_prec && index == blocks_needed - 1)
409     return (sgn == SIGNED
410             ? sext_hwi (val, small_prec)
411             : zext_hwi (val, small_prec));
412   else
413     return val;
414 }
415
416 /* Find the highest bit represented in a wide int.  This will in
417    general have the same value as the sign bit.  */
418 static inline HOST_WIDE_INT
419 top_bit_of (const HOST_WIDE_INT *a, unsigned int len, unsigned int prec)
420 {
421   int excess = len * HOST_BITS_PER_WIDE_INT - prec;
422   unsigned HOST_WIDE_INT val = a[len - 1];
423   if (excess > 0)
424     val <<= excess;
425   return val >> (HOST_BITS_PER_WIDE_INT - 1);
426 }
427
428 /*
429  * Comparisons, note that only equality is an operator.  The other
430  * comparisons cannot be operators since they are inherently signed or
431  * unsigned and C++ has no such operators.
432  */
433
434 /* Return true if OP0 == OP1.  */
435 bool
436 wi::eq_p_large (const HOST_WIDE_INT *op0, unsigned int op0len,
437                 const HOST_WIDE_INT *op1, unsigned int op1len,
438                 unsigned int prec)
439 {
440   int l0 = op0len - 1;
441   unsigned int small_prec = prec & (HOST_BITS_PER_WIDE_INT - 1);
442
443   if (op0len != op1len)
444     return false;
445
446   if (op0len == BLOCKS_NEEDED (prec) && small_prec)
447     {
448       /* It does not matter if we zext or sext here, we just have to
449          do both the same way.  */
450       if (zext_hwi (op0 [l0], small_prec) != zext_hwi (op1 [l0], small_prec))
451         return false;
452       l0--;
453     }
454
455   while (l0 >= 0)
456     if (op0[l0] != op1[l0])
457       return false;
458     else
459       l0--;
460
461   return true;
462 }
463
464 /* Return true if OP0 < OP1 using signed comparisons.  */
465 bool
466 wi::lts_p_large (const HOST_WIDE_INT *op0, unsigned int op0len,
467                  unsigned int precision,
468                  const HOST_WIDE_INT *op1, unsigned int op1len)
469 {
470   HOST_WIDE_INT s0, s1;
471   unsigned HOST_WIDE_INT u0, u1;
472   unsigned int blocks_needed = BLOCKS_NEEDED (precision);
473   unsigned int small_prec = precision & (HOST_BITS_PER_WIDE_INT - 1);
474   int l = MAX (op0len - 1, op1len - 1);
475
476   /* Only the top block is compared as signed.  The rest are unsigned
477      comparisons.  */
478   s0 = selt (op0, op0len, blocks_needed, small_prec, l, SIGNED);
479   s1 = selt (op1, op1len, blocks_needed, small_prec, l, SIGNED);
480   if (s0 < s1)
481     return true;
482   if (s0 > s1)
483     return false;
484
485   l--;
486   while (l >= 0)
487     {
488       u0 = selt (op0, op0len, blocks_needed, small_prec, l, SIGNED);
489       u1 = selt (op1, op1len, blocks_needed, small_prec, l, SIGNED);
490
491       if (u0 < u1)
492         return true;
493       if (u0 > u1)
494         return false;
495       l--;
496     }
497
498   return false;
499 }
500
501 /* Returns -1 if OP0 < OP1, 0 if OP0 == OP1 and 1 if OP0 > OP1 using
502    signed compares.  */
503 int
504 wi::cmps_large (const HOST_WIDE_INT *op0, unsigned int op0len,
505                 unsigned int precision,
506                 const HOST_WIDE_INT *op1, unsigned int op1len)
507 {
508   HOST_WIDE_INT s0, s1;
509   unsigned HOST_WIDE_INT u0, u1;
510   unsigned int blocks_needed = BLOCKS_NEEDED (precision);
511   unsigned int small_prec = precision & (HOST_BITS_PER_WIDE_INT - 1);
512   int l = MAX (op0len - 1, op1len - 1);
513
514   /* Only the top block is compared as signed.  The rest are unsigned
515      comparisons.  */
516   s0 = selt (op0, op0len, blocks_needed, small_prec, l, SIGNED);
517   s1 = selt (op1, op1len, blocks_needed, small_prec, l, SIGNED);
518   if (s0 < s1)
519     return -1;
520   if (s0 > s1)
521     return 1;
522
523   l--;
524   while (l >= 0)
525     {
526       u0 = selt (op0, op0len, blocks_needed, small_prec, l, SIGNED);
527       u1 = selt (op1, op1len, blocks_needed, small_prec, l, SIGNED);
528
529       if (u0 < u1)
530         return -1;
531       if (u0 > u1)
532         return 1;
533       l--;
534     }
535
536   return 0;
537 }
538
539 /* Return true if OP0 < OP1 using unsigned comparisons.  */
540 bool
541 wi::ltu_p_large (const HOST_WIDE_INT *op0, unsigned int op0len,
542                  unsigned int precision,
543                  const HOST_WIDE_INT *op1, unsigned int op1len)
544 {
545   unsigned HOST_WIDE_INT x0;
546   unsigned HOST_WIDE_INT x1;
547   unsigned int blocks_needed = BLOCKS_NEEDED (precision);
548   unsigned int small_prec = precision & (HOST_BITS_PER_WIDE_INT - 1);
549   int l = MAX (op0len - 1, op1len - 1);
550
551   while (l >= 0)
552     {
553       x0 = selt (op0, op0len, blocks_needed, small_prec, l, UNSIGNED);
554       x1 = selt (op1, op1len, blocks_needed, small_prec, l, UNSIGNED);
555       if (x0 < x1)
556         return true;
557       if (x0 > x1)
558         return false;
559       l--;
560     }
561
562   return false;
563 }
564
565 /* Returns -1 if OP0 < OP1, 0 if OP0 == OP1 and 1 if OP0 > OP1 using
566    unsigned compares.  */
567 int
568 wi::cmpu_large (const HOST_WIDE_INT *op0, unsigned int op0len,
569                 unsigned int precision,
570                 const HOST_WIDE_INT *op1, unsigned int op1len)
571 {
572   unsigned HOST_WIDE_INT x0;
573   unsigned HOST_WIDE_INT x1;
574   unsigned int blocks_needed = BLOCKS_NEEDED (precision);
575   unsigned int small_prec = precision & (HOST_BITS_PER_WIDE_INT - 1);
576   int l = MAX (op0len - 1, op1len - 1);
577
578   while (l >= 0)
579     {
580       x0 = selt (op0, op0len, blocks_needed, small_prec, l, UNSIGNED);
581       x1 = selt (op1, op1len, blocks_needed, small_prec, l, UNSIGNED);
582       if (x0 < x1)
583         return -1;
584       if (x0 > x1)
585         return 1;
586       l--;
587     }
588
589   return 0;
590 }
591
592 /*
593  * Extension.
594  */
595
596 /* Sign-extend the number represented by XVAL and XLEN into VAL,
597    starting at OFFSET.  Return the number of blocks in VAL.  Both XVAL
598    and VAL have PRECISION bits.  */
599 unsigned int
600 wi::sext_large (HOST_WIDE_INT *val, const HOST_WIDE_INT *xval,
601                 unsigned int xlen, unsigned int precision, unsigned int offset)
602 {
603   unsigned int len = offset / HOST_BITS_PER_WIDE_INT;
604   /* Extending beyond the precision is a no-op.  If we have only stored
605      OFFSET bits or fewer, the rest are already signs.  */
606   if (offset >= precision || len >= xlen)
607     {
608       for (unsigned i = 0; i < xlen; ++i)
609         val[i] = xval[i];
610       return xlen;
611     }
612   unsigned int suboffset = offset % HOST_BITS_PER_WIDE_INT;
613   for (unsigned int i = 0; i < len; i++)
614     val[i] = xval[i];
615   if (suboffset > 0)
616     {
617       val[len] = sext_hwi (xval[len], suboffset);
618       len += 1;
619     }
620   return canonize (val, len, precision);
621 }
622
623 /* Zero-extend the number represented by XVAL and XLEN into VAL,
624    starting at OFFSET.  Return the number of blocks in VAL.  Both XVAL
625    and VAL have PRECISION bits.  */
626 unsigned int
627 wi::zext_large (HOST_WIDE_INT *val, const HOST_WIDE_INT *xval,
628                 unsigned int xlen, unsigned int precision, unsigned int offset)
629 {
630   unsigned int len = offset / HOST_BITS_PER_WIDE_INT;
631   /* Extending beyond the precision is a no-op.  If we have only stored
632      OFFSET bits or fewer, and the upper stored bit is zero, then there
633      is nothing to do.  */
634   if (offset >= precision || (len >= xlen && xval[xlen - 1] >= 0))
635     {
636       for (unsigned i = 0; i < xlen; ++i)
637         val[i] = xval[i];
638       return xlen;
639     }
640   unsigned int suboffset = offset % HOST_BITS_PER_WIDE_INT;
641   for (unsigned int i = 0; i < len; i++)
642     val[i] = i < xlen ? xval[i] : -1;
643   if (suboffset > 0)
644     val[len] = zext_hwi (len < xlen ? xval[len] : -1, suboffset);
645   else
646     val[len] = 0;
647   return canonize (val, len + 1, precision);
648 }
649
650 /*
651  * Masking, inserting, shifting, rotating.
652  */
653
654 /* Insert WIDTH bits from Y into X starting at START.  */
655 wide_int
656 wi::insert (const wide_int &x, const wide_int &y, unsigned int start,
657             unsigned int width)
658 {
659   wide_int result;
660   wide_int mask;
661   wide_int tmp;
662
663   unsigned int precision = x.get_precision ();
664   if (start >= precision)
665     return x;
666
667   gcc_checking_assert (precision >= width);
668
669   if (start + width >= precision)
670     width = precision - start;
671
672   mask = wi::shifted_mask (start, width, false, precision);
673   tmp = wi::lshift (wide_int::from (y, precision, UNSIGNED), start);
674   result = tmp & mask;
675
676   tmp = wi::bit_and_not (x, mask);
677   result = result | tmp;
678
679   return result;
680 }
681
682 /* Copy the number represented by XVAL and XLEN into VAL, setting bit BIT.
683    Return the number of blocks in VAL.  Both XVAL and VAL have PRECISION
684    bits.  */
685 unsigned int
686 wi::set_bit_large (HOST_WIDE_INT *val, const HOST_WIDE_INT *xval,
687                    unsigned int xlen, unsigned int precision, unsigned int bit)
688 {
689   unsigned int block = bit / HOST_BITS_PER_WIDE_INT;
690   unsigned int subbit = bit % HOST_BITS_PER_WIDE_INT;
691
692   if (block + 1 >= xlen)
693     {
694       /* The operation either affects the last current block or needs
695          a new block.  */
696       unsigned int len = block + 1;
697       for (unsigned int i = 0; i < len; i++)
698         val[i] = safe_uhwi (xval, xlen, i);
699       val[block] |= (unsigned HOST_WIDE_INT) 1 << subbit;
700
701       /* If the bit we just set is at the msb of the block, make sure
702          that any higher bits are zeros.  */
703       if (bit + 1 < precision && subbit == HOST_BITS_PER_WIDE_INT - 1)
704         val[len++] = 0;
705       return len;
706     }
707   else
708     {
709       for (unsigned int i = 0; i < xlen; i++)
710         val[i] = xval[i];
711       val[block] |= (unsigned HOST_WIDE_INT) 1 << subbit;
712       return canonize (val, xlen, precision);
713     }
714 }
715
716 /* bswap THIS.  */
717 wide_int
718 wide_int_storage::bswap () const
719 {
720   wide_int result = wide_int::create (precision);
721   unsigned int i, s;
722   unsigned int len = BLOCKS_NEEDED (precision);
723   unsigned int xlen = get_len ();
724   const HOST_WIDE_INT *xval = get_val ();
725   HOST_WIDE_INT *val = result.write_val ();
726
727   /* This is not a well defined operation if the precision is not a
728      multiple of 8.  */
729   gcc_assert ((precision & 0x7) == 0);
730
731   for (i = 0; i < len; i++)
732     val[i] = 0;
733
734   /* Only swap the bytes that are not the padding.  */
735   for (s = 0; s < precision; s += 8)
736     {
737       unsigned int d = precision - s - 8;
738       unsigned HOST_WIDE_INT byte;
739
740       unsigned int block = s / HOST_BITS_PER_WIDE_INT;
741       unsigned int offset = s & (HOST_BITS_PER_WIDE_INT - 1);
742
743       byte = (safe_uhwi (xval, xlen, block) >> offset) & 0xff;
744
745       block = d / HOST_BITS_PER_WIDE_INT;
746       offset = d & (HOST_BITS_PER_WIDE_INT - 1);
747
748       val[block] |= byte << offset;
749     }
750
751   result.set_len (canonize (val, len, precision));
752   return result;
753 }
754
755 /* Fill VAL with a mask where the lower WIDTH bits are ones and the bits
756    above that up to PREC are zeros.  The result is inverted if NEGATE
757    is true.  Return the number of blocks in VAL.  */
758 unsigned int
759 wi::mask (HOST_WIDE_INT *val, unsigned int width, bool negate,
760           unsigned int prec)
761 {
762   if (width >= prec)
763     {
764       val[0] = negate ? 0 : -1;
765       return 1;
766     }
767   else if (width == 0)
768     {
769       val[0] = negate ? -1 : 0;
770       return 1;
771     }
772
773   unsigned int i = 0;
774   while (i < width / HOST_BITS_PER_WIDE_INT)
775     val[i++] = negate ? 0 : -1;
776
777   unsigned int shift = width & (HOST_BITS_PER_WIDE_INT - 1);
778   if (shift != 0)
779     {
780       HOST_WIDE_INT last = ((unsigned HOST_WIDE_INT) 1 << shift) - 1;
781       val[i++] = negate ? ~last : last;
782     }
783   else
784     val[i++] = negate ? -1 : 0;
785
786   return i;
787 }
788
789 /* Fill VAL with a mask where the lower START bits are zeros, the next WIDTH
790    bits are ones, and the bits above that up to PREC are zeros.  The result
791    is inverted if NEGATE is true.  Return the number of blocks in VAL.  */
792 unsigned int
793 wi::shifted_mask (HOST_WIDE_INT *val, unsigned int start, unsigned int width,
794                   bool negate, unsigned int prec)
795 {
796   if (start >= prec || width == 0)
797     {
798       val[0] = negate ? -1 : 0;
799       return 1;
800     }
801
802   if (width > prec - start)
803     width = prec - start;
804   unsigned int end = start + width;
805
806   unsigned int i = 0;
807   while (i < start / HOST_BITS_PER_WIDE_INT)
808     val[i++] = negate ? -1 : 0;
809
810   unsigned int shift = start & (HOST_BITS_PER_WIDE_INT - 1);
811   if (shift)
812     {
813       HOST_WIDE_INT block = ((unsigned HOST_WIDE_INT) 1 << shift) - 1;
814       shift += width;
815       if (shift < HOST_BITS_PER_WIDE_INT)
816         {
817           /* case 000111000 */
818           block = ((unsigned HOST_WIDE_INT) 1 << shift) - block - 1;
819           val[i++] = negate ? ~block : block;
820           return i;
821         }
822       else
823         /* ...111000 */
824         val[i++] = negate ? block : ~block;
825     }
826
827   while (i < end / HOST_BITS_PER_WIDE_INT)
828     /* 1111111 */
829     val[i++] = negate ? 0 : -1;
830
831   shift = end & (HOST_BITS_PER_WIDE_INT - 1);
832   if (shift != 0)
833     {
834       /* 000011111 */
835       HOST_WIDE_INT block = ((unsigned HOST_WIDE_INT) 1 << shift) - 1;
836       val[i++] = negate ? ~block : block;
837     }
838   else if (end < prec)
839     val[i++] = negate ? -1 : 0;
840
841   return i;
842 }
843
844 /*
845  * logical operations.
846  */
847
848 /* Set VAL to OP0 & OP1.  Return the number of blocks used.  */
849 unsigned int
850 wi::and_large (HOST_WIDE_INT *val, const HOST_WIDE_INT *op0,
851                unsigned int op0len, const HOST_WIDE_INT *op1,
852                unsigned int op1len, unsigned int prec)
853 {
854   int l0 = op0len - 1;
855   int l1 = op1len - 1;
856   bool need_canon = true;
857
858   unsigned int len = MAX (op0len, op1len);
859   if (l0 > l1)
860     {
861       HOST_WIDE_INT op1mask = -top_bit_of (op1, op1len, prec);
862       if (op1mask == 0)
863         {
864           l0 = l1;
865           len = l1 + 1;
866         }
867       else
868         {
869           need_canon = false;
870           while (l0 > l1)
871             {
872               val[l0] = op0[l0];
873               l0--;
874             }
875         }
876     }
877   else if (l1 > l0)
878     {
879       HOST_WIDE_INT op0mask = -top_bit_of (op0, op0len, prec);
880       if (op0mask == 0)
881         len = l0 + 1;
882       else
883         {
884           need_canon = false;
885           while (l1 > l0)
886             {
887               val[l1] = op1[l1];
888               l1--;
889             }
890         }
891     }
892
893   while (l0 >= 0)
894     {
895       val[l0] = op0[l0] & op1[l0];
896       l0--;
897     }
898
899   if (need_canon)
900     len = canonize (val, len, prec);
901
902   return len;
903 }
904
905 /* Set VAL to OP0 & ~OP1.  Return the number of blocks used.  */
906 unsigned int
907 wi::and_not_large (HOST_WIDE_INT *val, const HOST_WIDE_INT *op0,
908                    unsigned int op0len, const HOST_WIDE_INT *op1,
909                    unsigned int op1len, unsigned int prec)
910 {
911   wide_int result;
912   int l0 = op0len - 1;
913   int l1 = op1len - 1;
914   bool need_canon = true;
915
916   unsigned int len = MAX (op0len, op1len);
917   if (l0 > l1)
918     {
919       HOST_WIDE_INT op1mask = -top_bit_of (op1, op1len, prec);
920       if (op1mask != 0)
921         {
922           l0 = l1;
923           len = l1 + 1;
924         }
925       else
926         {
927           need_canon = false;
928           while (l0 > l1)
929             {
930               val[l0] = op0[l0];
931               l0--;
932             }
933         }
934     }
935   else if (l1 > l0)
936     {
937       HOST_WIDE_INT op0mask = -top_bit_of (op0, op0len, prec);
938       if (op0mask == 0)
939         len = l0 + 1;
940       else
941         {
942           need_canon = false;
943           while (l1 > l0)
944             {
945               val[l1] = ~op1[l1];
946               l1--;
947             }
948         }
949     }
950
951   while (l0 >= 0)
952     {
953       val[l0] = op0[l0] & ~op1[l0];
954       l0--;
955     }
956
957   if (need_canon)
958     len = canonize (val, len, prec);
959
960   return len;
961 }
962
963 /* Set VAL to OP0 | OP1.  Return the number of blocks used.  */
964 unsigned int
965 wi::or_large (HOST_WIDE_INT *val, const HOST_WIDE_INT *op0,
966               unsigned int op0len, const HOST_WIDE_INT *op1,
967               unsigned int op1len, unsigned int prec)
968 {
969   wide_int result;
970   int l0 = op0len - 1;
971   int l1 = op1len - 1;
972   bool need_canon = true;
973
974   unsigned int len = MAX (op0len, op1len);
975   if (l0 > l1)
976     {
977       HOST_WIDE_INT op1mask = -top_bit_of (op1, op1len, prec);
978       if (op1mask != 0)
979         {
980           l0 = l1;
981           len = l1 + 1;
982         }
983       else
984         {
985           need_canon = false;
986           while (l0 > l1)
987             {
988               val[l0] = op0[l0];
989               l0--;
990             }
991         }
992     }
993   else if (l1 > l0)
994     {
995       HOST_WIDE_INT op0mask = -top_bit_of (op0, op0len, prec);
996       if (op0mask != 0)
997         len = l0 + 1;
998       else
999         {
1000           need_canon = false;
1001           while (l1 > l0)
1002             {
1003               val[l1] = op1[l1];
1004               l1--;
1005             }
1006         }
1007     }
1008
1009   while (l0 >= 0)
1010     {
1011       val[l0] = op0[l0] | op1[l0];
1012       l0--;
1013     }
1014
1015   if (need_canon)
1016     len = canonize (val, len, prec);
1017
1018   return len;
1019 }
1020
1021 /* Set VAL to OP0 | ~OP1.  Return the number of blocks used.  */
1022 unsigned int
1023 wi::or_not_large (HOST_WIDE_INT *val, const HOST_WIDE_INT *op0,
1024                   unsigned int op0len, const HOST_WIDE_INT *op1,
1025                   unsigned int op1len, unsigned int prec)
1026 {
1027   wide_int result;
1028   int l0 = op0len - 1;
1029   int l1 = op1len - 1;
1030   bool need_canon = true;
1031
1032   unsigned int len = MAX (op0len, op1len);
1033   if (l0 > l1)
1034     {
1035       HOST_WIDE_INT op1mask = -top_bit_of (op1, op1len, prec);
1036       if (op1mask == 0)
1037         {
1038           l0 = l1;
1039           len = l1 + 1;
1040         }
1041       else
1042         {
1043           need_canon = false;
1044           while (l0 > l1)
1045             {
1046               val[l0] = op0[l0];
1047               l0--;
1048             }
1049         }
1050     }
1051   else if (l1 > l0)
1052     {
1053       HOST_WIDE_INT op0mask = -top_bit_of (op0, op0len, prec);
1054       if (op0mask != 0)
1055         len = l0 + 1;
1056       else
1057         {
1058           need_canon = false;
1059           while (l1 > l0)
1060             {
1061               val[l1] = ~op1[l1];
1062               l1--;
1063             }
1064         }
1065     }
1066
1067   while (l0 >= 0)
1068     {
1069       val[l0] = op0[l0] | ~op1[l0];
1070       l0--;
1071     }
1072
1073   if (need_canon)
1074     len = canonize (val, len, prec);
1075
1076   return len;
1077 }
1078
1079 /* Set VAL to OP0 ^ OP1.  Return the number of blocks used.  */
1080 unsigned int
1081 wi::xor_large (HOST_WIDE_INT *val, const HOST_WIDE_INT *op0,
1082                unsigned int op0len, const HOST_WIDE_INT *op1,
1083                unsigned int op1len, unsigned int prec)
1084 {
1085   wide_int result;
1086   int l0 = op0len - 1;
1087   int l1 = op1len - 1;
1088
1089   unsigned int len = MAX (op0len, op1len);
1090   if (l0 > l1)
1091     {
1092       HOST_WIDE_INT op1mask = -top_bit_of (op1, op1len, prec);
1093       while (l0 > l1)
1094         {
1095           val[l0] = op0[l0] ^ op1mask;
1096           l0--;
1097         }
1098     }
1099
1100   if (l1 > l0)
1101     {
1102       HOST_WIDE_INT op0mask = -top_bit_of (op0, op0len, prec);
1103       while (l1 > l0)
1104         {
1105           val[l1] = op0mask ^ op1[l1];
1106           l1--;
1107         }
1108     }
1109
1110   while (l0 >= 0)
1111     {
1112       val[l0] = op0[l0] ^ op1[l0];
1113       l0--;
1114     }
1115
1116   return canonize (val, len, prec);
1117 }
1118
1119 /*
1120  * math
1121  */
1122
1123 /* Set VAL to OP0 + OP1.  If OVERFLOW is nonnull, record in *OVERFLOW
1124    whether the result overflows when OP0 and OP1 are treated as having
1125    signedness SGN.  Return the number of blocks in VAL.  */
1126 unsigned int
1127 wi::add_large (HOST_WIDE_INT *val, const HOST_WIDE_INT *op0,
1128                unsigned int op0len, const HOST_WIDE_INT *op1,
1129                unsigned int op1len, unsigned int prec,
1130                signop sgn, bool *overflow)
1131 {
1132   unsigned HOST_WIDE_INT o0 = 0;
1133   unsigned HOST_WIDE_INT o1 = 0;
1134   unsigned HOST_WIDE_INT x = 0;
1135   unsigned HOST_WIDE_INT carry = 0;
1136   unsigned HOST_WIDE_INT old_carry = 0;
1137   unsigned HOST_WIDE_INT mask0, mask1;
1138   unsigned int i;
1139
1140   unsigned int len = MAX (op0len, op1len);
1141   mask0 = -top_bit_of (op0, op0len, prec);
1142   mask1 = -top_bit_of (op1, op1len, prec);
1143   /* Add all of the explicitly defined elements.  */
1144
1145   for (i = 0; i < len; i++)
1146     {
1147       o0 = i < op0len ? (unsigned HOST_WIDE_INT) op0[i] : mask0;
1148       o1 = i < op1len ? (unsigned HOST_WIDE_INT) op1[i] : mask1;
1149       x = o0 + o1 + carry;
1150       val[i] = x;
1151       old_carry = carry;
1152       carry = carry == 0 ? x < o0 : x <= o0;
1153     }
1154
1155   if (len * HOST_BITS_PER_WIDE_INT < prec)
1156     {
1157       val[len] = mask0 + mask1 + carry;
1158       len++;
1159       if (overflow)
1160         *overflow = false;
1161     }
1162   else if (overflow)
1163     {
1164       unsigned int shift = -prec % HOST_BITS_PER_WIDE_INT;
1165       if (sgn == SIGNED)
1166         {
1167           unsigned HOST_WIDE_INT x = (val[len - 1] ^ o0) & (val[len - 1] ^ o1);
1168           *overflow = (HOST_WIDE_INT) (x << shift) < 0;
1169         }
1170       else
1171         {
1172           /* Put the MSB of X and O0 and in the top of the HWI.  */
1173           x <<= shift;
1174           o0 <<= shift;
1175           if (old_carry)
1176             *overflow = (x <= o0);
1177           else
1178             *overflow = (x < o0);
1179         }
1180     }
1181
1182   return canonize (val, len, prec);
1183 }
1184
1185 /* Subroutines of the multiplication and division operations.  Unpack
1186    the first IN_LEN HOST_WIDE_INTs in INPUT into 2 * IN_LEN
1187    HOST_HALF_WIDE_INTs of RESULT.  The rest of RESULT is filled by
1188    uncompressing the top bit of INPUT[IN_LEN - 1].  */
1189 static void
1190 wi_unpack (unsigned HOST_HALF_WIDE_INT *result, const HOST_WIDE_INT *input,
1191            unsigned int in_len, unsigned int out_len,
1192            unsigned int prec, signop sgn)
1193 {
1194   unsigned int i;
1195   unsigned int j = 0;
1196   unsigned int small_prec = prec & (HOST_BITS_PER_WIDE_INT - 1);
1197   unsigned int blocks_needed = BLOCKS_NEEDED (prec);
1198   HOST_WIDE_INT mask;
1199
1200   if (sgn == SIGNED)
1201     {
1202       mask = -top_bit_of ((const HOST_WIDE_INT *) input, in_len, prec);
1203       mask &= HALF_INT_MASK;
1204     }
1205   else
1206     mask = 0;
1207
1208   for (i = 0; i < blocks_needed - 1; i++)
1209     {
1210       HOST_WIDE_INT x = safe_uhwi (input, in_len, i);
1211       result[j++] = x;
1212       result[j++] = x >> HOST_BITS_PER_HALF_WIDE_INT;
1213     }
1214
1215   HOST_WIDE_INT x = safe_uhwi (input, in_len, i);
1216   if (small_prec)
1217     {
1218       if (sgn == SIGNED)
1219         x = sext_hwi (x, small_prec);
1220       else
1221         x = zext_hwi (x, small_prec);
1222     }
1223   result[j++] = x;
1224   result[j++] = x >> HOST_BITS_PER_HALF_WIDE_INT;
1225
1226   /* Smear the sign bit.  */
1227   while (j < out_len)
1228     result[j++] = mask;
1229 }
1230
1231 /* The inverse of wi_unpack.  IN_LEN is the number of input
1232    blocks and PRECISION is the precision of the result.  Return the
1233    number of blocks in the canonicalized result.  */
1234 static unsigned int
1235 wi_pack (HOST_WIDE_INT *result,
1236          const unsigned HOST_HALF_WIDE_INT *input,
1237          unsigned int in_len, unsigned int precision)
1238 {
1239   unsigned int i = 0;
1240   unsigned int j = 0;
1241   unsigned int blocks_needed = BLOCKS_NEEDED (precision);
1242
1243   while (i + 1 < in_len)
1244     {
1245       result[j++] = ((unsigned HOST_WIDE_INT) input[i]
1246                      | ((unsigned HOST_WIDE_INT) input[i + 1]
1247                         << HOST_BITS_PER_HALF_WIDE_INT));
1248       i += 2;
1249     }
1250
1251   /* Handle the case where in_len is odd.   For this we zero extend.  */
1252   if (in_len & 1)
1253     result[j++] = (unsigned HOST_WIDE_INT) input[i];
1254   else if (j < blocks_needed)
1255     result[j++] = 0;
1256   return canonize (result, j, precision);
1257 }
1258
1259 /* Multiply Op1 by Op2.  If HIGH is set, only the upper half of the
1260    result is returned.  
1261
1262    If HIGH is not set, throw away the upper half after the check is
1263    made to see if it overflows.  Unfortunately there is no better way
1264    to check for overflow than to do this.  If OVERFLOW is nonnull,
1265    record in *OVERFLOW whether the result overflowed.  SGN controls
1266    the signedness and is used to check overflow or if HIGH is set.  */
1267 unsigned int
1268 wi::mul_internal (HOST_WIDE_INT *val, const HOST_WIDE_INT *op1val,
1269                   unsigned int op1len, const HOST_WIDE_INT *op2val,
1270                   unsigned int op2len, unsigned int prec, signop sgn,
1271                   bool *overflow, bool high)
1272 {
1273   unsigned HOST_WIDE_INT o0, o1, k, t;
1274   unsigned int i;
1275   unsigned int j;
1276   unsigned int blocks_needed = BLOCKS_NEEDED (prec);
1277   unsigned int half_blocks_needed = blocks_needed * 2;
1278   /* The sizes here are scaled to support a 2x largest mode by 2x
1279      largest mode yielding a 4x largest mode result.  This is what is
1280      needed by vpn.  */
1281
1282   unsigned HOST_HALF_WIDE_INT
1283     u[4 * MAX_BITSIZE_MODE_ANY_INT / HOST_BITS_PER_HALF_WIDE_INT];
1284   unsigned HOST_HALF_WIDE_INT
1285     v[4 * MAX_BITSIZE_MODE_ANY_INT / HOST_BITS_PER_HALF_WIDE_INT];
1286   /* The '2' in 'R' is because we are internally doing a full
1287      multiply.  */
1288   unsigned HOST_HALF_WIDE_INT
1289     r[2 * 4 * MAX_BITSIZE_MODE_ANY_INT / HOST_BITS_PER_HALF_WIDE_INT];
1290   HOST_WIDE_INT mask = ((HOST_WIDE_INT)1 << HOST_BITS_PER_HALF_WIDE_INT) - 1;
1291
1292   /* If the top level routine did not really pass in an overflow, then
1293      just make sure that we never attempt to set it.  */
1294   bool needs_overflow = (overflow != 0);
1295   if (needs_overflow)
1296     *overflow = false;
1297
1298   wide_int_ref op1 = wi::storage_ref (op1val, op1len, prec);
1299   wide_int_ref op2 = wi::storage_ref (op2val, op2len, prec);
1300
1301   /* This is a surprisingly common case, so do it first.  */
1302   if (op1 == 0 || op2 == 0)
1303     {
1304       val[0] = 0;
1305       return 1;
1306     }
1307
1308 #ifdef umul_ppmm
1309   if (sgn == UNSIGNED)
1310     {
1311       /* If the inputs are single HWIs and the output has room for at
1312          least two HWIs, we can use umul_ppmm directly.  */
1313       if (prec >= HOST_BITS_PER_WIDE_INT * 2
1314           && wi::fits_uhwi_p (op1)
1315           && wi::fits_uhwi_p (op2))
1316         {
1317           /* This case never overflows.  */
1318           if (high)
1319             {
1320               val[0] = 0;
1321               return 1;
1322             }
1323           umul_ppmm (val[1], val[0], op1.ulow (), op2.ulow ());
1324           if (val[1] < 0 && prec > HOST_BITS_PER_WIDE_INT * 2)
1325             {
1326               val[2] = 0;
1327               return 3;
1328             }
1329           return 1 + (val[1] != 0 || val[0] < 0);
1330         }
1331       /* Likewise if the output is a full single HWI, except that the
1332          upper HWI of the result is only used for determining overflow.
1333          (We handle this case inline when overflow isn't needed.)  */
1334       else if (prec == HOST_BITS_PER_WIDE_INT)
1335         {
1336           unsigned HOST_WIDE_INT upper;
1337           umul_ppmm (upper, val[0], op1.ulow (), op2.ulow ());
1338           if (needs_overflow)
1339             *overflow = (upper != 0);
1340           if (high)
1341             val[0] = upper;
1342           return 1;
1343         }
1344     }
1345 #endif
1346
1347   /* Handle multiplications by 1.  */
1348   if (op1 == 1)
1349     {
1350       if (high)
1351         {
1352           val[0] = wi::neg_p (op2, sgn) ? -1 : 0;
1353           return 1;
1354         }
1355       for (i = 0; i < op2len; i++)
1356         val[i] = op2val[i];
1357       return op2len;
1358     }
1359   if (op2 == 1)
1360     {
1361       if (high)
1362         {
1363           val[0] = wi::neg_p (op1, sgn) ? -1 : 0;
1364           return 1;
1365         }
1366       for (i = 0; i < op1len; i++)
1367         val[i] = op1val[i];
1368       return op1len;
1369     }
1370
1371   /* If we need to check for overflow, we can only do half wide
1372      multiplies quickly because we need to look at the top bits to
1373      check for the overflow.  */
1374   if ((high || needs_overflow)
1375       && (prec <= HOST_BITS_PER_HALF_WIDE_INT))
1376     {
1377       unsigned HOST_WIDE_INT r;
1378
1379       if (sgn == SIGNED)
1380         {
1381           o0 = op1.to_shwi ();
1382           o1 = op2.to_shwi ();
1383         }
1384       else
1385         {
1386           o0 = op1.to_uhwi ();
1387           o1 = op2.to_uhwi ();
1388         }
1389
1390       r = o0 * o1;
1391       if (needs_overflow)
1392         {
1393           if (sgn == SIGNED)
1394             {
1395               if ((HOST_WIDE_INT) r != sext_hwi (r, prec))
1396                 *overflow = true;
1397             }
1398           else
1399             {
1400               if ((r >> prec) != 0)
1401                 *overflow = true;
1402             }
1403         }
1404       val[0] = high ? r >> prec : r;
1405       return 1;
1406     }
1407
1408   /* We do unsigned mul and then correct it.  */
1409   wi_unpack (u, op1val, op1len, half_blocks_needed, prec, SIGNED);
1410   wi_unpack (v, op2val, op2len, half_blocks_needed, prec, SIGNED);
1411
1412   /* The 2 is for a full mult.  */
1413   memset (r, 0, half_blocks_needed * 2
1414           * HOST_BITS_PER_HALF_WIDE_INT / CHAR_BIT);
1415
1416   for (j = 0; j < half_blocks_needed; j++)
1417     {
1418       k = 0;
1419       for (i = 0; i < half_blocks_needed; i++)
1420         {
1421           t = ((unsigned HOST_WIDE_INT)u[i] * (unsigned HOST_WIDE_INT)v[j]
1422                + r[i + j] + k);
1423           r[i + j] = t & HALF_INT_MASK;
1424           k = t >> HOST_BITS_PER_HALF_WIDE_INT;
1425         }
1426       r[j + half_blocks_needed] = k;
1427     }
1428
1429   /* We did unsigned math above.  For signed we must adjust the
1430      product (assuming we need to see that).  */
1431   if (sgn == SIGNED && (high || needs_overflow))
1432     {
1433       unsigned HOST_WIDE_INT b;
1434       if (wi::neg_p (op1))
1435         {
1436           b = 0;
1437           for (i = 0; i < half_blocks_needed; i++)
1438             {
1439               t = (unsigned HOST_WIDE_INT)r[i + half_blocks_needed]
1440                 - (unsigned HOST_WIDE_INT)v[i] - b;
1441               r[i + half_blocks_needed] = t & HALF_INT_MASK;
1442               b = t >> (HOST_BITS_PER_WIDE_INT - 1);
1443             }
1444         }
1445       if (wi::neg_p (op2))
1446         {
1447           b = 0;
1448           for (i = 0; i < half_blocks_needed; i++)
1449             {
1450               t = (unsigned HOST_WIDE_INT)r[i + half_blocks_needed]
1451                 - (unsigned HOST_WIDE_INT)u[i] - b;
1452               r[i + half_blocks_needed] = t & HALF_INT_MASK;
1453               b = t >> (HOST_BITS_PER_WIDE_INT - 1);
1454             }
1455         }
1456     }
1457
1458   if (needs_overflow)
1459     {
1460       HOST_WIDE_INT top;
1461
1462       /* For unsigned, overflow is true if any of the top bits are set.
1463          For signed, overflow is true if any of the top bits are not equal
1464          to the sign bit.  */
1465       if (sgn == UNSIGNED)
1466         top = 0;
1467       else
1468         {
1469           top = r[(half_blocks_needed) - 1];
1470           top = SIGN_MASK (top << (HOST_BITS_PER_WIDE_INT / 2));
1471           top &= mask;
1472         }
1473
1474       for (i = half_blocks_needed; i < half_blocks_needed * 2; i++)
1475         if (((HOST_WIDE_INT)(r[i] & mask)) != top)
1476           *overflow = true;
1477     }
1478
1479   int r_offset = high ? half_blocks_needed : 0;
1480   return wi_pack (val, &r[r_offset], half_blocks_needed, prec);
1481 }
1482
1483 /* Compute the population count of X.  */
1484 int
1485 wi::popcount (const wide_int_ref &x)
1486 {
1487   unsigned int i;
1488   int count;
1489
1490   /* The high order block is special if it is the last block and the
1491      precision is not an even multiple of HOST_BITS_PER_WIDE_INT.  We
1492      have to clear out any ones above the precision before doing
1493      popcount on this block.  */
1494   count = x.precision - x.len * HOST_BITS_PER_WIDE_INT;
1495   unsigned int stop = x.len;
1496   if (count < 0)
1497     {
1498       count = popcount_hwi (x.uhigh () << -count);
1499       stop -= 1;
1500     }
1501   else
1502     {
1503       if (x.sign_mask () >= 0)
1504         count = 0;
1505     }
1506
1507   for (i = 0; i < stop; ++i)
1508     count += popcount_hwi (x.val[i]);
1509
1510   return count;
1511 }
1512
1513 /* Set VAL to OP0 - OP1.  If OVERFLOW is nonnull, record in *OVERFLOW
1514    whether the result overflows when OP0 and OP1 are treated as having
1515    signedness SGN.  Return the number of blocks in VAL.  */
1516 unsigned int
1517 wi::sub_large (HOST_WIDE_INT *val, const HOST_WIDE_INT *op0,
1518                unsigned int op0len, const HOST_WIDE_INT *op1,
1519                unsigned int op1len, unsigned int prec,
1520                signop sgn, bool *overflow)
1521 {
1522   unsigned HOST_WIDE_INT o0 = 0;
1523   unsigned HOST_WIDE_INT o1 = 0;
1524   unsigned HOST_WIDE_INT x = 0;
1525   /* We implement subtraction as an in place negate and add.  Negation
1526      is just inversion and add 1, so we can do the add of 1 by just
1527      starting the borrow in of the first element at 1.  */
1528   unsigned HOST_WIDE_INT borrow = 0;
1529   unsigned HOST_WIDE_INT old_borrow = 0;
1530
1531   unsigned HOST_WIDE_INT mask0, mask1;
1532   unsigned int i;
1533
1534   unsigned int len = MAX (op0len, op1len);
1535   mask0 = -top_bit_of (op0, op0len, prec);
1536   mask1 = -top_bit_of (op1, op1len, prec);
1537
1538   /* Subtract all of the explicitly defined elements.  */
1539   for (i = 0; i < len; i++)
1540     {
1541       o0 = i < op0len ? (unsigned HOST_WIDE_INT)op0[i] : mask0;
1542       o1 = i < op1len ? (unsigned HOST_WIDE_INT)op1[i] : mask1;
1543       x = o0 - o1 - borrow;
1544       val[i] = x;
1545       old_borrow = borrow;
1546       borrow = borrow == 0 ? o0 < o1 : o0 <= o1;
1547     }
1548
1549   if (len * HOST_BITS_PER_WIDE_INT < prec)
1550     {
1551       val[len] = mask0 - mask1 - borrow;
1552       len++;
1553       if (overflow)
1554         *overflow = false;
1555     }
1556   else if (overflow)
1557     {
1558       unsigned int shift = -prec % HOST_BITS_PER_WIDE_INT;
1559       if (sgn == SIGNED)
1560         {
1561           unsigned HOST_WIDE_INT x = (o0 ^ o1) & (val[len - 1] ^ o0);
1562           *overflow = (HOST_WIDE_INT) (x << shift) < 0;
1563         }
1564       else
1565         {
1566           /* Put the MSB of X and O0 and in the top of the HWI.  */
1567           x <<= shift;
1568           o0 <<= shift;
1569           if (old_borrow)
1570             *overflow = (x >= o0);
1571           else
1572             *overflow = (x > o0);
1573         }
1574     }
1575
1576   return canonize (val, len, prec);
1577 }
1578
1579
1580 /*
1581  * Division and Mod
1582  */
1583
1584 /* Compute B_QUOTIENT and B_REMAINDER from B_DIVIDEND/B_DIVISOR.  The
1585    algorithm is a small modification of the algorithm in Hacker's
1586    Delight by Warren, which itself is a small modification of Knuth's
1587    algorithm.  M is the number of significant elements of U however
1588    there needs to be at least one extra element of B_DIVIDEND
1589    allocated, N is the number of elements of B_DIVISOR.  */
1590 static void
1591 divmod_internal_2 (unsigned HOST_HALF_WIDE_INT *b_quotient,
1592                    unsigned HOST_HALF_WIDE_INT *b_remainder,
1593                    unsigned HOST_HALF_WIDE_INT *b_dividend,
1594                    unsigned HOST_HALF_WIDE_INT *b_divisor,
1595                    int m, int n)
1596 {
1597   /* The "digits" are a HOST_HALF_WIDE_INT which the size of half of a
1598      HOST_WIDE_INT and stored in the lower bits of each word.  This
1599      algorithm should work properly on both 32 and 64 bit
1600      machines.  */
1601   unsigned HOST_WIDE_INT b
1602     = (unsigned HOST_WIDE_INT)1 << HOST_BITS_PER_HALF_WIDE_INT;
1603   unsigned HOST_WIDE_INT qhat;   /* Estimate of quotient digit.  */
1604   unsigned HOST_WIDE_INT rhat;   /* A remainder.  */
1605   unsigned HOST_WIDE_INT p;      /* Product of two digits.  */
1606   HOST_WIDE_INT t, k;
1607   int i, j, s;
1608
1609   /* Single digit divisor.  */
1610   if (n == 1)
1611     {
1612       k = 0;
1613       for (j = m - 1; j >= 0; j--)
1614         {
1615           b_quotient[j] = (k * b + b_dividend[j])/b_divisor[0];
1616           k = ((k * b + b_dividend[j])
1617                - ((unsigned HOST_WIDE_INT)b_quotient[j]
1618                   * (unsigned HOST_WIDE_INT)b_divisor[0]));
1619         }
1620       b_remainder[0] = k;
1621       return;
1622     }
1623
1624   s = clz_hwi (b_divisor[n-1]) - HOST_BITS_PER_HALF_WIDE_INT; /* CHECK clz */
1625
1626   if (s)
1627     {
1628       /* Normalize B_DIVIDEND and B_DIVISOR.  Unlike the published
1629          algorithm, we can overwrite b_dividend and b_divisor, so we do
1630          that.  */
1631       for (i = n - 1; i > 0; i--)
1632         b_divisor[i] = (b_divisor[i] << s)
1633           | (b_divisor[i-1] >> (HOST_BITS_PER_HALF_WIDE_INT - s));
1634       b_divisor[0] = b_divisor[0] << s;
1635
1636       b_dividend[m] = b_dividend[m-1] >> (HOST_BITS_PER_HALF_WIDE_INT - s);
1637       for (i = m - 1; i > 0; i--)
1638         b_dividend[i] = (b_dividend[i] << s)
1639           | (b_dividend[i-1] >> (HOST_BITS_PER_HALF_WIDE_INT - s));
1640       b_dividend[0] = b_dividend[0] << s;
1641     }
1642
1643   /* Main loop.  */
1644   for (j = m - n; j >= 0; j--)
1645     {
1646       qhat = (b_dividend[j+n] * b + b_dividend[j+n-1]) / b_divisor[n-1];
1647       rhat = (b_dividend[j+n] * b + b_dividend[j+n-1]) - qhat * b_divisor[n-1];
1648     again:
1649       if (qhat >= b || qhat * b_divisor[n-2] > b * rhat + b_dividend[j+n-2])
1650         {
1651           qhat -= 1;
1652           rhat += b_divisor[n-1];
1653           if (rhat < b)
1654             goto again;
1655         }
1656
1657       /* Multiply and subtract.  */
1658       k = 0;
1659       for (i = 0; i < n; i++)
1660         {
1661           p = qhat * b_divisor[i];
1662           t = b_dividend[i+j] - k - (p & HALF_INT_MASK);
1663           b_dividend[i + j] = t;
1664           k = ((p >> HOST_BITS_PER_HALF_WIDE_INT)
1665                - (t >> HOST_BITS_PER_HALF_WIDE_INT));
1666         }
1667       t = b_dividend[j+n] - k;
1668       b_dividend[j+n] = t;
1669
1670       b_quotient[j] = qhat;
1671       if (t < 0)
1672         {
1673           b_quotient[j] -= 1;
1674           k = 0;
1675           for (i = 0; i < n; i++)
1676             {
1677               t = (HOST_WIDE_INT)b_dividend[i+j] + b_divisor[i] + k;
1678               b_dividend[i+j] = t;
1679               k = t >> HOST_BITS_PER_HALF_WIDE_INT;
1680             }
1681           b_dividend[j+n] += k;
1682         }
1683     }
1684   if (s)
1685     for (i = 0; i < n; i++)
1686       b_remainder[i] = (b_dividend[i] >> s)
1687         | (b_dividend[i+1] << (HOST_BITS_PER_HALF_WIDE_INT - s));
1688   else
1689     for (i = 0; i < n; i++)
1690       b_remainder[i] = b_dividend[i];
1691 }
1692
1693
1694 /* Divide DIVIDEND by DIVISOR, which have signedness SGN, and truncate
1695    the result.  If QUOTIENT is nonnull, store the value of the quotient
1696    there and return the number of blocks in it.  The return value is
1697    not defined otherwise.  If REMAINDER is nonnull, store the value
1698    of the remainder there and store the number of blocks in
1699    *REMAINDER_LEN.  If OFLOW is not null, store in *OFLOW whether
1700    the division overflowed.  */
1701 unsigned int
1702 wi::divmod_internal (HOST_WIDE_INT *quotient, unsigned int *remainder_len,
1703                      HOST_WIDE_INT *remainder,
1704                      const HOST_WIDE_INT *dividend_val,
1705                      unsigned int dividend_len, unsigned int dividend_prec,
1706                      const HOST_WIDE_INT *divisor_val, unsigned int divisor_len,
1707                      unsigned int divisor_prec, signop sgn,
1708                      bool *oflow)
1709 {
1710   unsigned int dividend_blocks_needed = 2 * BLOCKS_NEEDED (dividend_prec);
1711   unsigned int divisor_blocks_needed = 2 * BLOCKS_NEEDED (divisor_prec);
1712   unsigned HOST_HALF_WIDE_INT
1713     b_quotient[4 * MAX_BITSIZE_MODE_ANY_INT / HOST_BITS_PER_HALF_WIDE_INT];
1714   unsigned HOST_HALF_WIDE_INT
1715     b_remainder[4 * MAX_BITSIZE_MODE_ANY_INT / HOST_BITS_PER_HALF_WIDE_INT];
1716   unsigned HOST_HALF_WIDE_INT
1717     b_dividend[(4 * MAX_BITSIZE_MODE_ANY_INT / HOST_BITS_PER_HALF_WIDE_INT) + 1];
1718   unsigned HOST_HALF_WIDE_INT
1719     b_divisor[4 * MAX_BITSIZE_MODE_ANY_INT / HOST_BITS_PER_HALF_WIDE_INT];
1720   unsigned int m, n;
1721   bool dividend_neg = false;
1722   bool divisor_neg = false;
1723   bool overflow = false;
1724   wide_int neg_dividend, neg_divisor;
1725
1726   wide_int_ref dividend = wi::storage_ref (dividend_val, dividend_len,
1727                                            dividend_prec);
1728   wide_int_ref divisor = wi::storage_ref (divisor_val, divisor_len,
1729                                           divisor_prec);
1730   if (divisor == 0)
1731     overflow = true;
1732
1733   /* The smallest signed number / -1 causes overflow.  The dividend_len
1734      check is for speed rather than correctness.  */
1735   if (sgn == SIGNED
1736       && dividend_len == BLOCKS_NEEDED (dividend_prec)
1737       && divisor == -1
1738       && wi::only_sign_bit_p (dividend))
1739     overflow = true;
1740
1741   /* Handle the overflow cases.  Viewed as unsigned value, the quotient of
1742      (signed min / -1) has the same representation as the orignal dividend.
1743      We have traditionally made division by zero act as division by one,
1744      so there too we use the original dividend.  */
1745   if (overflow)
1746     {
1747       if (remainder)
1748         {
1749           *remainder_len = 1;
1750           remainder[0] = 0;
1751         }
1752       if (oflow != 0)
1753         *oflow = true;
1754       if (quotient)
1755         for (unsigned int i = 0; i < dividend_len; ++i)
1756           quotient[i] = dividend_val[i];
1757       return dividend_len;
1758     }
1759
1760   if (oflow)
1761     *oflow = false;
1762
1763   /* Do it on the host if you can.  */
1764   if (sgn == SIGNED
1765       && wi::fits_shwi_p (dividend)
1766       && wi::fits_shwi_p (divisor))
1767     {
1768       HOST_WIDE_INT o0 = dividend.to_shwi ();
1769       HOST_WIDE_INT o1 = divisor.to_shwi ();
1770
1771       if (o0 == HOST_WIDE_INT_MIN && o1 == -1)
1772         {
1773           gcc_checking_assert (dividend_prec > HOST_BITS_PER_WIDE_INT);
1774           if (quotient)
1775             {
1776               quotient[0] = HOST_WIDE_INT_MIN;
1777               quotient[1] = 0;
1778             }
1779           if (remainder)
1780             {
1781               remainder[0] = 0;
1782               *remainder_len = 1;
1783             }
1784           return 2;
1785         }
1786       else
1787         {
1788           if (quotient)
1789             quotient[0] = o0 / o1;
1790           if (remainder)
1791             {
1792               remainder[0] = o0 % o1;
1793               *remainder_len = 1;
1794             }
1795           return 1;
1796         }
1797     }
1798
1799   if (sgn == UNSIGNED
1800       && wi::fits_uhwi_p (dividend)
1801       && wi::fits_uhwi_p (divisor))
1802     {
1803       unsigned HOST_WIDE_INT o0 = dividend.to_uhwi ();
1804       unsigned HOST_WIDE_INT o1 = divisor.to_uhwi ();
1805       unsigned int quotient_len = 1;
1806
1807       if (quotient)
1808         {
1809           quotient[0] = o0 / o1;
1810           quotient_len = canonize_uhwi (quotient, dividend_prec);
1811         }
1812       if (remainder)
1813         {
1814           remainder[0] = o0 % o1;
1815           *remainder_len = canonize_uhwi (remainder, dividend_prec);
1816         }
1817       return quotient_len;
1818     }
1819
1820   /* Make the divisor and dividend positive and remember what we
1821      did.  */
1822   if (sgn == SIGNED)
1823     {
1824       if (wi::neg_p (dividend))
1825         {
1826           neg_dividend = -dividend;
1827           dividend = neg_dividend;
1828           dividend_neg = true;
1829         }
1830       if (wi::neg_p (divisor))
1831         {
1832           neg_divisor = -divisor;
1833           divisor = neg_divisor;
1834           divisor_neg = true;
1835         }
1836     }
1837
1838   wi_unpack (b_dividend, dividend.get_val (), dividend.get_len (),
1839              dividend_blocks_needed, dividend_prec, sgn);
1840   wi_unpack (b_divisor, divisor.get_val (), divisor.get_len (),
1841              divisor_blocks_needed, divisor_prec, sgn);
1842
1843   m = dividend_blocks_needed;
1844   b_dividend[m] = 0;
1845   while (m > 1 && b_dividend[m - 1] == 0)
1846     m--;
1847
1848   n = divisor_blocks_needed;
1849   while (n > 1 && b_divisor[n - 1] == 0)
1850     n--;
1851
1852   memset (b_quotient, 0, sizeof (b_quotient));
1853
1854   divmod_internal_2 (b_quotient, b_remainder, b_dividend, b_divisor, m, n);
1855
1856   unsigned int quotient_len = 0;
1857   if (quotient)
1858     {
1859       quotient_len = wi_pack (quotient, b_quotient, m, dividend_prec);
1860       /* The quotient is neg if exactly one of the divisor or dividend is
1861          neg.  */
1862       if (dividend_neg != divisor_neg)
1863         quotient_len = wi::sub_large (quotient, zeros, 1, quotient,
1864                                       quotient_len, dividend_prec,
1865                                       UNSIGNED, 0);
1866     }
1867
1868   if (remainder)
1869     {
1870       *remainder_len = wi_pack (remainder, b_remainder, n, dividend_prec);
1871       /* The remainder is always the same sign as the dividend.  */
1872       if (dividend_neg)
1873         *remainder_len = wi::sub_large (remainder, zeros, 1, remainder,
1874                                         *remainder_len, dividend_prec,
1875                                         UNSIGNED, 0);
1876     }
1877
1878   return quotient_len;
1879 }
1880
1881 /*
1882  * Shifting, rotating and extraction.
1883  */
1884
1885 /* Left shift XVAL by SHIFT and store the result in VAL.  Return the
1886    number of blocks in VAL.  Both XVAL and VAL have PRECISION bits.  */
1887 unsigned int
1888 wi::lshift_large (HOST_WIDE_INT *val, const HOST_WIDE_INT *xval,
1889                   unsigned int xlen, unsigned int precision,
1890                   unsigned int shift)
1891 {
1892   /* Split the shift into a whole-block shift and a subblock shift.  */
1893   unsigned int skip = shift / HOST_BITS_PER_WIDE_INT;
1894   unsigned int small_shift = shift % HOST_BITS_PER_WIDE_INT;
1895
1896   /* The whole-block shift fills with zeros.  */
1897   unsigned int len = BLOCKS_NEEDED (precision);
1898   for (unsigned int i = 0; i < skip; ++i)
1899     val[i] = 0;
1900
1901   /* It's easier to handle the simple block case specially.  */
1902   if (small_shift == 0)
1903     for (unsigned int i = skip; i < len; ++i)
1904       val[i] = safe_uhwi (xval, xlen, i - skip);
1905   else
1906     {
1907       /* The first unfilled output block is a left shift of the first
1908          block in XVAL.  The other output blocks contain bits from two
1909          consecutive input blocks.  */
1910       unsigned HOST_WIDE_INT carry = 0;
1911       for (unsigned int i = skip; i < len; ++i)
1912         {
1913           unsigned HOST_WIDE_INT x = safe_uhwi (xval, xlen, i - skip);
1914           val[i] = (x << small_shift) | carry;
1915           carry = x >> (-small_shift % HOST_BITS_PER_WIDE_INT);
1916         }
1917     }
1918   return canonize (val, len, precision);
1919 }
1920
1921 /* Right shift XVAL by SHIFT and store the result in VAL.  Return the
1922    number of blocks in VAL.  The input has XPRECISION bits and the
1923    output has XPRECISION - SHIFT bits.  */
1924 static unsigned int
1925 rshift_large_common (HOST_WIDE_INT *val, const HOST_WIDE_INT *xval,
1926                      unsigned int xlen, unsigned int xprecision,
1927                      unsigned int shift)
1928 {
1929   /* Split the shift into a whole-block shift and a subblock shift.  */
1930   unsigned int skip = shift / HOST_BITS_PER_WIDE_INT;
1931   unsigned int small_shift = shift % HOST_BITS_PER_WIDE_INT;
1932
1933   /* Work out how many blocks are needed to store the significant bits
1934      (excluding the upper zeros or signs).  */
1935   unsigned int len = BLOCKS_NEEDED (xprecision - shift);
1936
1937   /* It's easier to handle the simple block case specially.  */
1938   if (small_shift == 0)
1939     for (unsigned int i = 0; i < len; ++i)
1940       val[i] = safe_uhwi (xval, xlen, i + skip);
1941   else
1942     {
1943       /* Each output block but the last is a combination of two input blocks.
1944          The last block is a right shift of the last block in XVAL.  */
1945       unsigned HOST_WIDE_INT curr = safe_uhwi (xval, xlen, skip);
1946       for (unsigned int i = 0; i < len; ++i)
1947         {
1948           val[i] = curr >> small_shift;
1949           curr = safe_uhwi (xval, xlen, i + skip + 1);
1950           val[i] |= curr << (-small_shift % HOST_BITS_PER_WIDE_INT);
1951         }
1952     }
1953   return len;
1954 }
1955
1956 /* Logically right shift XVAL by SHIFT and store the result in VAL.
1957    Return the number of blocks in VAL.  XVAL has XPRECISION bits and
1958    VAL has PRECISION bits.  */
1959 unsigned int
1960 wi::lrshift_large (HOST_WIDE_INT *val, const HOST_WIDE_INT *xval,
1961                    unsigned int xlen, unsigned int xprecision,
1962                    unsigned int precision, unsigned int shift)
1963 {
1964   unsigned int len = rshift_large_common (val, xval, xlen, xprecision, shift);
1965
1966   /* The value we just created has precision XPRECISION - SHIFT.
1967      Zero-extend it to wider precisions.  */
1968   if (precision > xprecision - shift)
1969     {
1970       unsigned int small_prec = (xprecision - shift) % HOST_BITS_PER_WIDE_INT;
1971       if (small_prec)
1972         val[len - 1] = zext_hwi (val[len - 1], small_prec);
1973       else if (val[len - 1] < 0)
1974         {
1975           /* Add a new block with a zero. */
1976           val[len++] = 0;
1977           return len;
1978         }
1979     }
1980   return canonize (val, len, precision);
1981 }
1982
1983 /* Arithmetically right shift XVAL by SHIFT and store the result in VAL.
1984    Return the number of blocks in VAL.  XVAL has XPRECISION bits and
1985    VAL has PRECISION bits.  */
1986 unsigned int
1987 wi::arshift_large (HOST_WIDE_INT *val, const HOST_WIDE_INT *xval,
1988                    unsigned int xlen, unsigned int xprecision,
1989                    unsigned int precision, unsigned int shift)
1990 {
1991   unsigned int len = rshift_large_common (val, xval, xlen, xprecision, shift);
1992
1993   /* The value we just created has precision XPRECISION - SHIFT.
1994      Sign-extend it to wider types.  */
1995   if (precision > xprecision - shift)
1996     {
1997       unsigned int small_prec = (xprecision - shift) % HOST_BITS_PER_WIDE_INT;
1998       if (small_prec)
1999         val[len - 1] = sext_hwi (val[len - 1], small_prec);
2000     }
2001   return canonize (val, len, precision);
2002 }
2003
2004 /* Return the number of leading (upper) zeros in X.  */
2005 int
2006 wi::clz (const wide_int_ref &x)
2007 {
2008   /* Calculate how many bits there above the highest represented block.  */
2009   int count = x.precision - x.len * HOST_BITS_PER_WIDE_INT;
2010
2011   unsigned HOST_WIDE_INT high = x.uhigh ();
2012   if (count < 0)
2013     /* The upper -COUNT bits of HIGH are not part of the value.
2014        Clear them out.  */
2015     high = (high << -count) >> -count;
2016   else if (x.sign_mask () < 0)
2017     /* The upper bit is set, so there are no leading zeros.  */
2018     return 0;
2019
2020   /* We don't need to look below HIGH.  Either HIGH is nonzero,
2021      or the top bit of the block below is nonzero; clz_hwi is
2022      HOST_BITS_PER_WIDE_INT in the latter case.  */
2023   return count + clz_hwi (high);
2024 }
2025
2026 /* Return the number of redundant sign bits in X.  (That is, the number
2027    of bits immediately below the sign bit that have the same value as
2028    the sign bit.)  */
2029 int
2030 wi::clrsb (const wide_int_ref &x)
2031 {
2032   /* Calculate how many bits there above the highest represented block.  */
2033   int count = x.precision - x.len * HOST_BITS_PER_WIDE_INT;
2034
2035   unsigned HOST_WIDE_INT high = x.uhigh ();
2036   unsigned HOST_WIDE_INT mask = -1;
2037   if (count < 0)
2038     {
2039       /* The upper -COUNT bits of HIGH are not part of the value.
2040          Clear them from both MASK and HIGH.  */
2041       mask >>= -count;
2042       high &= mask;
2043     }
2044
2045   /* If the top bit is 1, count the number of leading 1s.  If the top
2046      bit is zero, count the number of leading zeros.  */
2047   if (high > mask / 2)
2048     high ^= mask;
2049
2050   /* There are no sign bits below the top block, so we don't need to look
2051      beyond HIGH.  Note that clz_hwi is HOST_BITS_PER_WIDE_INT when
2052      HIGH is 0.  */
2053   return count + clz_hwi (high) - 1;
2054 }
2055
2056 /* Return the number of trailing (lower) zeros in X.  */
2057 int
2058 wi::ctz (const wide_int_ref &x)
2059 {
2060   if (x.len == 1 && x.ulow () == 0)
2061     return x.precision;
2062
2063   /* Having dealt with the zero case, there must be a block with a
2064      nonzero bit.  We don't care about the bits above the first 1.  */
2065   unsigned int i = 0;
2066   while (x.val[i] == 0)
2067     ++i;
2068   return i * HOST_BITS_PER_WIDE_INT + ctz_hwi (x.val[i]);
2069 }
2070
2071 /* If X is an exact power of 2, return the base-2 logarithm, otherwise
2072    return -1.  */
2073 int
2074 wi::exact_log2 (const wide_int_ref &x)
2075 {
2076   /* Reject cases where there are implicit -1 blocks above HIGH.  */
2077   if (x.len * HOST_BITS_PER_WIDE_INT < x.precision && x.sign_mask () < 0)
2078     return -1;
2079
2080   /* Set CRUX to the index of the entry that should be nonzero.
2081      If the top block is zero then the next lowest block (if any)
2082      must have the high bit set.  */
2083   unsigned int crux = x.len - 1;
2084   if (crux > 0 && x.val[crux] == 0)
2085     crux -= 1;
2086
2087   /* Check that all lower blocks are zero.  */
2088   for (unsigned int i = 0; i < crux; ++i)
2089     if (x.val[i] != 0)
2090       return -1;
2091
2092   /* Get a zero-extended form of block CRUX.  */
2093   unsigned HOST_WIDE_INT hwi = x.val[crux];
2094   if ((crux + 1) * HOST_BITS_PER_WIDE_INT > x.precision)
2095     hwi = zext_hwi (hwi, x.precision % HOST_BITS_PER_WIDE_INT);
2096
2097   /* Now it's down to whether HWI is a power of 2.  */
2098   int res = ::exact_log2 (hwi);
2099   if (res >= 0)
2100     res += crux * HOST_BITS_PER_WIDE_INT;
2101   return res;
2102 }
2103
2104 /* Return the base-2 logarithm of X, rounding down.  Return -1 if X is 0.  */
2105 int
2106 wi::floor_log2 (const wide_int_ref &x)
2107 {
2108   return x.precision - 1 - clz (x);
2109 }
2110
2111 /* Return the index of the first (lowest) set bit in X, counting from 1.
2112    Return 0 if X is 0.  */
2113 int
2114 wi::ffs (const wide_int_ref &x)
2115 {
2116   return eq_p (x, 0) ? 0 : ctz (x) + 1;
2117 }
2118
2119 /* Return true if sign-extending X to have precision PRECISION would give
2120    the minimum signed value at that precision.  */
2121 bool
2122 wi::only_sign_bit_p (const wide_int_ref &x, unsigned int precision)
2123 {
2124   return ctz (x) + 1 == int (precision);
2125 }
2126
2127 /* Return true if X represents the minimum signed value.  */
2128 bool
2129 wi::only_sign_bit_p (const wide_int_ref &x)
2130 {
2131   return only_sign_bit_p (x, x.precision);
2132 }
2133
2134 /*
2135  * Private utilities.
2136  */
2137
2138 void gt_ggc_mx (widest_int *) { }
2139 void gt_pch_nx (widest_int *, void (*) (void *, void *), void *) { }
2140 void gt_pch_nx (widest_int *) { }
2141
2142 template void wide_int::dump () const;
2143 template void generic_wide_int <wide_int_ref_storage <false> >::dump () const;
2144 template void generic_wide_int <wide_int_ref_storage <true> >::dump () const;
2145 template void offset_int::dump () const;
2146 template void widest_int::dump () const;