Home | History | Annotate | Download | only in gcc

Lines Matching refs:T2

267 /* The type of result produced by a binary operation on types T1 and T2.
269 #define WI_BINARY_RESULT(T1, T2) \
270 typename wi::binary_traits <T1, T2>::result_type
273 T1 nor T2 is a wide-int-based type. */
274 #define WI_BINARY_OPERATOR_RESULT(T1, T2) \
275 typename wi::binary_traits <T1, T2>::operator_result
277 /* The type of result produced by T1 << T2. Leads to substitution failure
279 #define WI_SIGNED_SHIFT_RESULT(T1, T2) \
280 typename wi::binary_traits <T1, T2>::signed_shift_result_type
283 types T1 and T2. This is bool if wide-int operations make sense for
284 T1 and T2 and leads to substitution failure otherwise. */
285 #define WI_BINARY_PREDICATE_RESULT(T1, T2) \
286 typename wi::binary_traits <T1, T2>::predicate_result
288 /* The type of result produced by a signed binary predicate on types T1 and T2.
289 This is bool if signed comparisons make sense for T1 and T2 and leads to
291 #define WI_SIGNED_BINARY_PREDICATE_RESULT(T1, T2) \
292 typename wi::binary_traits <T1, T2>::signed_predicate_result
299 X and Y, which have types T1 and T2 respectively. Define VAL to
303 #define WI_BINARY_RESULT_VAR(RESULT, VAL, T1, X, T2, Y) \
304 WI_BINARY_RESULT (T1, T2) RESULT = \
305 wi::int_traits <WI_BINARY_RESULT (T1, T2)>::get_binary_result (X, Y); \
407 types T1 and T2. The definition should be symmetric. */
408 template <typename T1, typename T2,
410 enum precision_type P2 = int_traits <T2>::precision_type>
417 template <typename T1, typename T2>
418 struct binary_traits <T1, T2, FLEXIBLE_PRECISION, FLEXIBLE_PRECISION>
424 template <typename T1, typename T2>
425 struct binary_traits <T1, T2, FLEXIBLE_PRECISION, VAR_PRECISION>
432 template <typename T1, typename T2>
433 struct binary_traits <T1, T2, FLEXIBLE_PRECISION, CONST_PRECISION>
438 <int_traits <T2>::precision> > result_type;
445 template <typename T1, typename T2>
446 struct binary_traits <T1, T2, VAR_PRECISION, FLEXIBLE_PRECISION>
453 template <typename T1, typename T2>
454 struct binary_traits <T1, T2, CONST_PRECISION, FLEXIBLE_PRECISION>
466 template <typename T1, typename T2>
467 struct binary_traits <T1, T2, CONST_PRECISION, CONST_PRECISION>
469 STATIC_ASSERT (int_traits <T1>::precision == int_traits <T2>::precision);
480 template <typename T1, typename T2>
481 struct binary_traits <T1, T2, VAR_PRECISION, VAR_PRECISION>
495 template <typename T1, typename T2>
496 unsigned int get_binary_precision (const T1 &, const T2 &);
498 template <typename T1, typename T2>
499 void copy (T1 &, const T2 &);
506 template <typename T1, typename T2> bool
508 template <typename T1, typename T2> WI_BINARY_RESULT (T1, T2)
510 template <typename T1, typename T2> WI_UNARY_RESULT (T1)
519 BINARY_PREDICATE eq_p (const T1 &, const T2 &);
520 BINARY_PREDICATE ne_p (const T1 &, const T2 &);
521 BINARY_PREDICATE lt_p (const T1 &, const T2 &, signop);
522 BINARY_PREDICATE lts_p (const T1 &, const T2 &);
523 BINARY_PREDICATE ltu_p (const T1 &, const T2 &);
524 BINARY_PREDICATE le_p (const T1 &, const T2 &, signop);
525 BINARY_PREDICATE les_p (const T1 &, const T2 &);
526 BINARY_PREDICATE leu_p (const T1 &, const T2 &);
527 BINARY_PREDICATE gt_p (const T1 &, const T2 &, signop);
528 BINARY_PREDICATE gts_p (const T1 &, const T2 &);
529 BINARY_PREDICATE gtu_p (const T1 &, const T2 &);
530 BINARY_PREDICATE ge_p (const T1 &, const T2 &, signop);
531 BINARY_PREDICATE ges_p (const T1 &, const T2 &);
532 BINARY_PREDICATE geu_p (const T1 &, const T2 &);
534 template <typename T1, typename T2>
535 int cmp (const T1 &, const T2 &, signop);
537 template <typename T1, typename T2>
538 int cmps (const T1 &, const T2 &);
540 template <typename T1, typename T2>
541 int cmpu (const T1 &, const T2 &);
552 BINARY_FUNCTION min (const T1 &, const T2 &, signop);
553 BINARY_FUNCTION smin (const T1 &, const T2 &);
554 BINARY_FUNCTION umin (const T1 &, const T2 &);
555 BINARY_FUNCTION max (const T1 &, const T2 &, signop);
556 BINARY_FUNCTION smax (const T1 &, const T2 &);
557 BINARY_FUNCTION umax (const T1 &, const T2 &);
559 BINARY_FUNCTION bit_and (const T1 &, const T2 &);
560 BINARY_FUNCTION bit_and_not (const T1 &, const T2 &);
561 BINARY_FUNCTION bit_or (const T1 &, const T2 &);
562 BINARY_FUNCTION bit_or_not (const T1 &, const T2 &);
563 BINARY_FUNCTION bit_xor (const T1 &, const T2 &);
564 BINARY_FUNCTION add (const T1 &, const T2 &);
565 BINARY_FUNCTION add (const T1 &, const T2 &, signop, overflow_type *);
566 BINARY_FUNCTION sub (const T1 &, const T2 &);
567 BINARY_FUNCTION sub (const T1 &, const T2 &, signop, overflow_type *);
568 BINARY_FUNCTION mul (const T1 &, const T2 &);
569 BINARY_FUNCTION mul (const T1 &, const T2 &, signop, overflow_type *);
570 BINARY_FUNCTION smul (const T1 &, const T2 &, overflow_type *);
571 BINARY_FUNCTION umul (const T1 &, const T2 &, overflow_type *);
572 BINARY_FUNCTION mul_high (const T1 &, const T2 &, signop);
573 BINARY_FUNCTION div_trunc (const T1 &, const T2 &, signop,
575 BINARY_FUNCTION sdiv_trunc (const T1 &, const T2 &);
576 BINARY_FUNCTION udiv_trunc (const T1 &, const T2 &);
577 BINARY_FUNCTION div_floor (const T1 &, const T2 &, signop,
579 BINARY_FUNCTION udiv_floor (const T1 &, const T2 &);
580 BINARY_FUNCTION sdiv_floor (const T1 &, const T2 &);
581 BINARY_FUNCTION div_ceil (const T1 &, const T2 &, signop,
583 BINARY_FUNCTION udiv_ceil (const T1 &, const T2 &);
584 BINARY_FUNCTION div_round (const T1 &, const T2 &, signop,
586 BINARY_FUNCTION divmod_trunc (const T1 &, const T2 &, signop,
587 WI_BINARY_RESULT (T1, T2) *);
588 BINARY_FUNCTION gcd (const T1 &, const T2 &, signop = UNSIGNED);
589 BINARY_FUNCTION mod_trunc (const T1 &, const T2 &, signop,
591 BINARY_FUNCTION smod_trunc (const T1 &, const T2 &);
592 BINARY_FUNCTION umod_trunc (const T1 &, const T2 &);
593 BINARY_FUNCTION mod_floor (const T1 &, const T2 &, signop,
595 BINARY_FUNCTION umod_floor (const T1 &, const T2 &);
596 BINARY_FUNCTION mod_ceil (const T1 &, const T2 &, signop,
598 BINARY_FUNCTION mod_round (const T1 &, const T2 &, signop,
601 template <typename T1, typename T2>
602 bool multiple_of_p (const T1 &, const T2 &, signop);
604 template <typename T1, typename T2>
605 bool multiple_of_p (const T1 &, const T2 &, signop,
606 WI_BINARY_RESULT (T1, T2) *);
608 SHIFT_FUNCTION lshift (const T1 &, const T2 &);
609 SHIFT_FUNCTION lrshift (const T1 &, const T2 &);
610 SHIFT_FUNCTION arshift (const T1 &, const T2 &);
611 SHIFT_FUNCTION rshift (const T1 &, const T2 &, signop sgn);
612 SHIFT_FUNCTION lrotate (const T1 &, const T2 &, unsigned int = 0);
613 SHIFT_FUNCTION rrotate (const T1 &, const T2 &, unsigned int = 0);
1099 template <typename T1, typename T2>
1100 static wide_int get_binary_result (const T1 &, const T2 &);
1199 template <typename T1, typename T2>
1201 wi::int_traits <wide_int_storage>::get_binary_result (const T1 &x, const T2 &y)
1205 || wi::int_traits <T2>::precision_type != FLEXIBLE_PRECISION);
1246 template <typename T1, typename T2>
1247 static FIXED_WIDE_INT (N) get_binary_result (const T1 &, const T2 &);
1329 template <typename T1, typename T2>
1332 get_binary_result (const T1 &, const T2 &)
1783 template <typename T1, typename T2>
1785 wi::get_binary_precision (const T1 &x, const T2 &y)
1787 return get_precision (wi::int_traits <WI_BINARY_RESULT (T1, T2)>::
1792 template <typename T1, typename T2>
1794 wi::copy (T1 &x, const T2 &y)
1851 template <typename T1, typename T2>
1853 wi::eq_p (const T1 &x, const T2 &y)
1857 WIDE_INT_REF_FOR (T2) yi (y, precision);
1890 template <typename T1, typename T2>
1892 wi::ne_p (const T1 &x, const T2 &y)
1898 template <typename T1, typename T2>
1900 wi::lts_p (const T1 &x, const T2 &y)
1904 WIDE_INT_REF_FOR (T2) yi (y, precision);
1931 template <typename T1, typename T2>
1933 wi::ltu_p (const T1 &x, const T2 &y)
1937 WIDE_INT_REF_FOR (T2) yi (y, precision);
1956 template <typename T1, typename T2>
1958 wi::lt_p (const T1 &x, const T2 &y, signop sgn)
1967 template <typename T1, typename T2>
1969 wi::les_p (const T1 &x, const T2 &y)
1975 template <typename T1, typename T2>
1977 wi::leu_p (const T1 &x, const T2 &y)
1983 template <typename T1, typename T2>
1985 wi::le_p (const T1 &x, const T2 &y, signop sgn)
1994 template <typename T1, typename T2>
1996 wi::gts_p (const T1 &x, const T2 &y)
2002 template <typename T1, typename T2>
2004 wi::gtu_p (const T1 &x, const T2 &y)
2010 template <typename T1, typename T2>
2012 wi::gt_p (const T1 &x, const T2 &y, signop sgn)
2021 template <typename T1, typename T2>
2023 wi::ges_p (const T1 &x, const T2 &y)
2029 template <typename T1, typename T2>
2031 wi::geu_p (const T1 &x, const T2 &y)
2037 template <typename T1, typename T2>
2039 wi::ge_p (const T1 &x, const T2 &y, signop sgn)
2049 template <typename T1, typename T2>
2051 wi::cmps (const T1 &x, const T2 &y)
2055 WIDE_INT_REF_FOR (T2) yi (y, precision);
2086 template <typename T1, typename T2>
2088 wi::cmpu (const T1 &x, const T2 &y)
2092 WIDE_INT_REF_FOR (T2) yi (y, precision);
2128 template <typename T1, typename T2>
2130 wi::cmp (const T1 &x, const T2 &y, signop sgn)
2254 template <typename T1, typename T2>
2255 inline WI_BINARY_RESULT (T1, T2)
2256 wi::min (const T1 &x, const T2 &y, signop sgn)
2258 WI_BINARY_RESULT_VAR (result, val ATTRIBUTE_UNUSED, T1, x, T2, y);
2263 wi::copy (result, WIDE_INT_REF_FOR (T2) (y, precision));
2268 template <typename T1, typename T2>
2269 inline WI_BINARY_RESULT (T1, T2)
2270 wi::smin (const T1 &x, const T2 &y)
2276 template <typename T1, typename T2>
2277 inline WI_BINARY_RESULT (T1, T2)
2278 wi::umin (const T1 &x, const T2 &y)
2285 template <typename T1, typename T2>
2286 inline WI_BINARY_RESULT (T1, T2)
2287 wi::max (const T1 &x, const T2 &y, signop sgn)
2289 WI_BINARY_RESULT_VAR (result, val ATTRIBUTE_UNUSED, T1, x, T2, y);
2294 wi::copy (result, WIDE_INT_REF_FOR (T2) (y, precision));
2299 template <typename T1, typename T2>
2300 inline WI_BINARY_RESULT (T1, T2)
2301 wi::smax (const T1 &x, const T2 &y)
2307 template <typename T1, typename T2>
2308 inline WI_BINARY_RESULT (T1, T2)
2309 wi::umax (const T1 &x, const T2 &y)
2315 template <typename T1, typename T2>
2316 inline WI_BINARY_RESULT (T1, T2)
2317 wi::bit_and (const T1 &x, const T2 &y)
2319 WI_BINARY_RESULT_VAR (result, val, T1, x, T2, y);
2322 WIDE_INT_REF_FOR (T2) yi (y, precision);
2336 template <typename T1, typename T2>
2337 inline WI_BINARY_RESULT (T1, T2)
2338 wi::bit_and_not (const T1 &x, const T2 &y)
2340 WI_BINARY_RESULT_VAR (result, val, T1, x, T2, y);
2343 WIDE_INT_REF_FOR (T2) yi (y, precision);
2357 template <typename T1, typename T2>
2358 inline WI_BINARY_RESULT (T1, T2)
2359 wi::bit_or (const T1 &x, const T2 &y)
2361 WI_BINARY_RESULT_VAR (result, val, T1, x, T2, y);
2364 WIDE_INT_REF_FOR (T2) yi (y, precision);
2378 template <typename T1, typename T2>
2379 inline WI_BINARY_RESULT (T1, T2)
2380 wi::bit_or_not (const T1 &x, const T2 &y)
2382 WI_BINARY_RESULT_VAR (result, val, T1, x, T2, y);
2385 WIDE_INT_REF_FOR (T2) yi (y, precision);
2399 template <typename T1, typename T2>
2400 inline WI_BINARY_RESULT (T1, T2)
2401 wi::bit_xor (const T1 &x, const T2 &y)
2403 WI_BINARY_RESULT_VAR (result, val, T1, x, T2, y);
2406 WIDE_INT_REF_FOR (T2) yi (y, precision);
2420 template <typename T1, typename T2>
2421 inline WI_BINARY_RESULT (T1, T2)
2422 wi::add (const T1 &x, const T2 &y)
2424 WI_BINARY_RESULT_VAR (result, val, T1, x, T2, y);
2427 WIDE_INT_REF_FOR (T2) yi (y, precision);
2463 template <typename T1, typename T2>
2464 inline WI_BINARY_RESULT (T1, T2)
2465 wi::add (const T1 &x, const T2 &y, signop sgn, overflow_type *overflow)
2467 WI_BINARY_RESULT_VAR (result, val, T1, x, T2, y);
2470 WIDE_INT_REF_FOR (T2) yi (y, precision);
2506 template <typename T1, typename T2>
2507 inline WI_BINARY_RESULT (T1, T2)
2508 wi::sub (const T1 &x, const T2 &y)
2510 WI_BINARY_RESULT_VAR (result, val, T1, x, T2, y);
2513 WIDE_INT_REF_FOR (T2) yi (y, precision);
2549 template <typename T1, typename T2>
2550 inline WI_BINARY_RESULT (T1, T2)
2551 wi::sub (const T1 &x, const T2 &y, signop sgn, overflow_type *overflow)
2553 WI_BINARY_RESULT_VAR (result, val, T1, x, T2, y);
2556 WIDE_INT_REF_FOR (T2) yi (y, precision);
2591 template <typename T1, typename T2>
2592 inline WI_BINARY_RESULT (T1, T2)
2593 wi::mul (const T1 &x, const T2 &y)
2595 WI_BINARY_RESULT_VAR (result, val, T1, x, T2, y);
2598 WIDE_INT_REF_FOR (T2) yi (y, precision);
2612 template <typename T1, typename T2>
2613 inline WI_BINARY_RESULT (T1, T2)
2614 wi::mul (const T1 &x, const T2 &y, signop sgn, overflow_type *overflow)
2616 WI_BINARY_RESULT_VAR (result, val, T1, x, T2, y);
2619 WIDE_INT_REF_FOR (T2) yi (y, precision);
2628 template <typename T1, typename T2>
2629 inline WI_BINARY_RESULT (T1, T2)
2630 wi::smul (const T1 &x, const T2 &y, overflow_type *overflow)
2637 template <typename T1, typename T2>
2638 inline WI_BINARY_RESULT (T1, T2)
2639 wi::umul (const T1 &x, const T2 &y, overflow_type *overflow)
2646 template <typename T1, typename T2>
2647 inline WI_BINARY_RESULT (T1, T2)
2648 wi::mul_high (const T1 &x, const T2 &y, signop sgn)
2650 WI_BINARY_RESULT_VAR (result, val, T1, x, T2, y);
2653 WIDE_INT_REF_FOR (T2) yi (y, precision);
2663 template <typename T1, typename T2>
2664 inline WI_BINARY_RESULT (T1, T2)
2665 wi::div_trunc (const T1 &x, const T2 &y, signop sgn, overflow_type *overflow)
2667 WI_BINARY_RESULT_VAR (quotient, quotient_val, T1, x, T2, y);
2670 WIDE_INT_REF_FOR (T2) yi (y);
2680 template <typename T1, typename T2>
2681 inline WI_BINARY_RESULT (T1, T2)
2682 wi::sdiv_trunc (const T1 &x, const T2 &y)
2688 template <typename T1, typename T2>
2689 inline WI_BINARY_RESULT (T1, T2)
2690 wi::udiv_trunc (const T1 &x, const T2 &y)
2698 template <typename T1, typename T2>
2699 inline WI_BINARY_RESULT (T1, T2)
2700 wi::div_floor (const T1 &x, const T2 &y, signop sgn, overflow_type *overflow)
2702 WI_BINARY_RESULT_VAR (quotient, quotient_val, T1, x, T2, y);
2703 WI_BINARY_RESULT_VAR (remainder, remainder_val, T1, x, T2, y);
2706 WIDE_INT_REF_FOR (T2) yi (y);
2721 template <typename T1, typename T2>
2722 inline WI_BINARY_RESULT (T1, T2)
2723 wi::sdiv_floor (const T1 &x, const T2 &y)
2730 template <typename T1, typename T2>
2731 inline WI_BINARY_RESULT (T1, T2)
2732 wi::udiv_floor (const T1 &x, const T2 &y)
2740 template <typename T1, typename T2>
2741 inline WI_BINARY_RESULT (T1, T2)
2742 wi::div_ceil (const T1 &x, const T2 &y, signop sgn, overflow_type *overflow)
2744 WI_BINARY_RESULT_VAR (quotient, quotient_val, T1, x, T2, y);
2745 WI_BINARY_RESULT_VAR (remainder, remainder_val, T1, x, T2, y);
2748 WIDE_INT_REF_FOR (T2) yi (y);
2763 template <typename T1, typename T2>
2764 inline WI_BINARY_RESULT (T1, T2)
2765 wi::udiv_ceil (const T1 &x, const T2 &y)
2773 template <typename T1, typename T2>
2774 inline WI_BINARY_RESULT (T1, T2)
2775 wi::div_round (const T1 &x, const T2 &y, signop sgn, overflow_type *overflow)
2777 WI_BINARY_RESULT_VAR (quotient, quotient_val, T1, x, T2, y);
2778 WI_BINARY_RESULT_VAR (remainder, remainder_val, T1, x, T2, y);
2781 WIDE_INT_REF_FOR (T2) yi (y);
2795 WI_BINARY_RESULT (T1, T2) abs_remainder = wi::abs (remainder);
2815 template <typename T1, typename T2>
2816 inline WI_BINARY_RESULT (T1, T2)
2817 wi::divmod_trunc (const T1 &x, const T2 &y, signop sgn,
2818 WI_BINARY_RESULT (T1, T2) *remainder_ptr)
2820 WI_BINARY_RESULT_VAR (quotient, quotient_val, T1, x, T2, y);
2821 WI_BINARY_RESULT_VAR (remainder, remainder_val, T1, x, T2, y);
2824 WIDE_INT_REF_FOR (T2) yi (y);
2839 template <typename T1, typename T2>
2840 inline WI_BINARY_RESULT (T1, T2)
2841 wi::gcd (const T1 &a, const T2 &b, signop sgn)
2861 template <typename T1, typename T2>
2862 inline WI_BINARY_RESULT (T1, T2)
2863 wi::mod_trunc (const T1 &x, const T2 &y, signop sgn, overflow_type *overflow)
2865 WI_BINARY_RESULT_VAR (remainder, remainder_val, T1, x, T2, y);
2868 WIDE_INT_REF_FOR (T2) yi (y);
2881 template <typename T1, typename T2>
2882 inline WI_BINARY_RESULT (T1, T2)
2883 wi::smod_trunc (const T1 &x, const T2 &y)
2890 template <typename T1, typename T2>
2891 inline WI_BINARY_RESULT (T1, T2)
2892 wi::umod_trunc (const T1 &x, const T2 &y)
2900 template <typename T1, typename T2>
2901 inline WI_BINARY_RESULT (T1, T2)
2902 wi::mod_floor (const T1 &x, const T2 &y, signop sgn, overflow_type *overflow)
2904 WI_BINARY_RESULT_VAR (quotient, quotient_val, T1, x, T2, y);
2905 WI_BINARY_RESULT_VAR (remainder, remainder_val, T1, x, T2, y);
2908 WIDE_INT_REF_FOR (T2) yi (y);
2926 template <typename T1, typename T2>
2927 inline WI_BINARY_RESULT (T1, T2)
2928 wi::umod_floor (const T1 &x, const T2 &y)
2936 template <typename T1, typename T2>
2937 inline WI_BINARY_RESULT (T1, T2)
2938 wi::mod_ceil (const T1 &x, const T2 &y, signop sgn, overflow_type *overflow)
2940 WI_BINARY_RESULT_VAR (quotient, quotient_val, T1, x, T2, y);
2941 WI_BINARY_RESULT_VAR (remainder, remainder_val, T1, x, T2, y);
2944 WIDE_INT_REF_FOR (T2) yi (y);
2962 template <typename T1, typename T2>
2963 inline WI_BINARY_RESULT (T1, T2)
2964 wi::mod_round (const T1 &x, const T2 &y, signop sgn, overflow_type *overflow)
2966 WI_BINARY_RESULT_VAR (quotient, quotient_val, T1, x, T2, y);
2967 WI_BINARY_RESULT_VAR (remainder, remainder_val, T1, x, T2, y);
2970 WIDE_INT_REF_FOR (T2) yi (y);
2984 WI_BINARY_RESULT (T1, T2) abs_remainder = wi::abs (remainder);
3004 template <typename T1, typename T2>
3006 wi::multiple_of_p (const T1 &x, const T2 &y, signop sgn)
3013 template <typename T1, typename T2>
3015 wi::multiple_of_p (const T1 &x, const T2 &y, signop sgn,
3016 WI_BINARY_RESULT (T1, T2) *res)
3018 WI_BINARY_RESULT (T1, T2) remainder;
3019 WI_BINARY_RESULT (T1, T2) quotient
3031 template <typename T1, typename T2>
3033 wi::lshift (const T1 &x, const T2 &y)
3038 WIDE_INT_REF_FOR (T2) yi (y);
3074 template <typename T1, typename T2>
3076 wi::lrshift (const T1 &x, const T2 &y)
3082 WIDE_INT_REF_FOR (T2) yi (y);
3118 template <typename T1, typename T2>
3120 wi::arshift (const T1 &x, const T2 &y)
3126 WIDE_INT_REF_FOR (T2) yi (y);
3150 template <typename T1, typename T2>
3152 wi::rshift (const T1 &x, const T2 &y, signop sgn)
3163 template <typename T1, typename T2>
3165 wi::lrotate (const T1 &x, const T2 &y, unsigned int width)
3170 WI_UNARY_RESULT (T2) ymod = umod_trunc (y, width);
3183 template <typename T1, typename T2>
3185 wi::rrotate (const T1 &x, const T2 &y, unsigned int width)
3190 WI_UNARY_RESULT (T2) ymod = umod_trunc (y, width);
3246 template <typename T1, typename T2> \
3247 inline WI_SIGNED_BINARY_PREDICATE_RESULT (T1, T2) \
3248 OP (const T1 &x, const T2 &y) \
3269 template<typename T1, typename T2> \
3270 WI_BINARY_PREDICATE_RESULT (T1, T2) \
3271 OP (const T1 &x, const T2 &y) \
3277 template<typename T1, typename T2> \
3278 WI_BINARY_OPERATOR_RESULT (T1, T2) \
3279 OP (const T1 &x, const T2 &y) \
3285 template<typename T1, typename T2> \
3287 OP (const T1 &x, const T2 &y) \
3309 template <typename T1, typename T2>
3310 inline WI_SIGNED_SHIFT_RESULT (T1, T2)
3311 operator >> (const T1 &x, const T2 &y)
3316 template <typename T1, typename T2>
3317 inline WI_SIGNED_SHIFT_RESULT (T1, T2)
3318 operator / (const T1 &x, const T2 &y)
3323 template <typename T1, typename T2>
3324 inline WI_SIGNED_SHIFT_RESULT (T1, T2)
3325 operator % (const T1 &x, const T2 &y)