author | Tom Henderson <tomh@tomh.org> |
Sun, 22 May 2011 22:28:15 -0700 | |
changeset 7252 | c8200621e252 |
parent 7169 | 358f71a624d8 |
child 7383 | c5e131450339 |
permissions | -rw-r--r-- |
7039 | 1 |
#include "int64x64-128.h" |
7032
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
2 |
#include "ns3/abort.h" |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
3 |
#include "ns3/assert.h" |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
4 |
|
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
5 |
namespace ns3 { |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
6 |
|
7169
358f71a624d8
core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents:
7104
diff
changeset
|
7 |
#define OUTPUT_SIGN(sa,sb,ua,ub) \ |
358f71a624d8
core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents:
7104
diff
changeset
|
8 |
({ bool negA, negB; \ |
358f71a624d8
core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents:
7104
diff
changeset
|
9 |
negA = sa < 0; \ |
358f71a624d8
core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents:
7104
diff
changeset
|
10 |
negB = sb < 0; \ |
358f71a624d8
core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents:
7104
diff
changeset
|
11 |
ua = negA ? -sa : sa; \ |
358f71a624d8
core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents:
7104
diff
changeset
|
12 |
ub = negB ? -sb : sb; \ |
7252
c8200621e252
rerun check-style.py with uncrustify-0.58
Tom Henderson <tomh@tomh.org>
parents:
7169
diff
changeset
|
13 |
(negA && !negB) || (!negA && negB); }) |
7032
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
14 |
|
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
15 |
|
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
16 |
#define MASK_LO ((((int128_t)1)<<64)-1) |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
17 |
#define MASK_HI (~MASK_LO) |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
18 |
|
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
19 |
void |
7039 | 20 |
int64x64_t::Mul (int64x64_t const &o) |
7032
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
21 |
{ |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
22 |
bool negResult; |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
23 |
uint128_t a, b; |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
24 |
negResult = OUTPUT_SIGN (_v, o._v, a, b); |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
25 |
int128_t result = Umul (a, b); |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
26 |
// add the sign to the result |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
27 |
result = negResult ? -result : result; |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
28 |
_v = result; |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
29 |
} |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
30 |
|
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
31 |
uint128_t |
7039 | 32 |
int64x64_t::Umul (uint128_t a, uint128_t b) |
7032
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
33 |
{ |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
34 |
uint128_t aL = a & MASK_LO; |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
35 |
uint128_t bL = b & MASK_LO; |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
36 |
uint128_t aH = (a >> 64) & MASK_LO; |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
37 |
uint128_t bH = (b >> 64) & MASK_LO; |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
38 |
|
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
39 |
uint128_t result; |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
40 |
uint128_t hiPart,loPart,midPart; |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
41 |
|
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
42 |
// Multiplying (a.h 2^64 + a.l) x (b.h 2^64 + b.l) = |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
43 |
// 2^128 a.h b.h + 2^64*(a.h b.l+b.h a.l) + a.l b.l |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
44 |
// get the low part a.l b.l |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
45 |
// multiply the fractional part |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
46 |
loPart = aL * bL; |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
47 |
// compute the middle part 2^64*(a.h b.l+b.h a.l) |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
48 |
midPart = aL * bH + aH * bL; |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
49 |
// truncate the low part |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
50 |
result = (loPart >> 64) + (midPart & MASK_LO); |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
51 |
// compute the high part 2^128 a.h b.h |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
52 |
hiPart = aH * bH; |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
53 |
// truncate the high part and only use the low part |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
54 |
result |= ((hiPart & MASK_LO) << 64) + (midPart & MASK_HI); |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
55 |
// if the high part is not zero, put a warning |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
56 |
NS_ABORT_MSG_IF ((hiPart & MASK_HI) != 0, |
7169
358f71a624d8
core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents:
7104
diff
changeset
|
57 |
"High precision 128 bits multiplication error: multiplication overflow."); |
7032
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
58 |
return result; |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
59 |
} |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
60 |
void |
7039 | 61 |
int64x64_t::Div (int64x64_t const &o) |
7032
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
62 |
{ |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
63 |
bool negResult; |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
64 |
uint128_t a, b; |
7169
358f71a624d8
core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents:
7104
diff
changeset
|
65 |
negResult = OUTPUT_SIGN (_v, o._v, a, b); |
7032
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
66 |
int128_t result = Divu (a, b); |
7169
358f71a624d8
core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents:
7104
diff
changeset
|
67 |
result = negResult ? -result : result; |
7032
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
68 |
_v = result; |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
69 |
} |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
70 |
|
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
71 |
uint128_t |
7039 | 72 |
int64x64_t::Divu (uint128_t a, uint128_t b) |
7032
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
73 |
{ |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
74 |
uint128_t quo = a / b; |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
75 |
uint128_t rem = (a % b); |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
76 |
uint128_t result = quo << 64; |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
77 |
// Now, manage the remainder |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
78 |
uint128_t tmp = rem >> 64; |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
79 |
uint128_t div; |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
80 |
if (tmp == 0) |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
81 |
{ |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
82 |
rem = rem << 64; |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
83 |
div = b; |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
84 |
} |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
85 |
else |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
86 |
{ |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
87 |
rem = rem; |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
88 |
div = b >> 64; |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
89 |
} |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
90 |
quo = rem / div; |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
91 |
result = result + quo; |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
92 |
return result; |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
93 |
} |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
94 |
|
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
95 |
void |
7039 | 96 |
int64x64_t::MulByInvert (const int64x64_t &o) |
7032
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
97 |
{ |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
98 |
bool negResult = _v < 0; |
7169
358f71a624d8
core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents:
7104
diff
changeset
|
99 |
uint128_t a = negResult ? -_v : _v; |
7032
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
100 |
uint128_t result = UmulByInvert (a, o._v); |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
101 |
|
7169
358f71a624d8
core coding style changes
Josh Pelkey <jpelkey@gatech.edu>
parents:
7104
diff
changeset
|
102 |
_v = negResult ? -result : result; |
7032
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
103 |
} |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
104 |
uint128_t |
7039 | 105 |
int64x64_t::UmulByInvert (uint128_t a, uint128_t b) |
7032
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
106 |
{ |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
107 |
uint128_t result, ah, bh, al, bl; |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
108 |
uint128_t hi, mid; |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
109 |
ah = a >> 64; |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
110 |
bh = b >> 64; |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
111 |
al = a & MASK_LO; |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
112 |
bl = b & MASK_LO; |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
113 |
hi = ah * bh; |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
114 |
mid = ah * bl + al * bh; |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
115 |
mid >>= 64; |
7104
875b31cb83e0
typo caught by gcc 4.6.0 reported by John Abraham
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
7045
diff
changeset
|
116 |
result = hi + mid; |
7032
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
117 |
return result; |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
118 |
} |
7039 | 119 |
int64x64_t |
120 |
int64x64_t::Invert (uint64_t v) |
|
7032
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
121 |
{ |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
122 |
NS_ASSERT (v > 1); |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
123 |
uint128_t a; |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
124 |
a = 1; |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
125 |
a <<= 64; |
7039 | 126 |
int64x64_t result; |
7032
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
127 |
result._v = Divu (a, v); |
7039 | 128 |
int64x64_t tmp = int64x64_t (v, false); |
7032
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
129 |
tmp.MulByInvert (result); |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
130 |
if (tmp.GetHigh () != 1) |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
131 |
{ |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
132 |
result._v += 1; |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
133 |
} |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
134 |
return result; |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
135 |
} |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
136 |
|
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
137 |
} // namespace ns3 |
17d4c8f349d6
split out uint64x64 type, optimize
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff
changeset
|
138 |