MCPcopy Create free account
hub / github.com/numpy/numpy / mul_64_64

Function mul_64_64

numpy/core/src/common/npy_extint128.h:90–126  ·  view source on GitHub ↗

Long integer multiply */

Source from the content-addressed store, hash-verified

88
89/* Long integer multiply */
90static inline npy_extint128_t
91mul_64_64(npy_int64 a, npy_int64 b)
92{
93 npy_extint128_t x, y, z;
94 npy_uint64 x1, x2, y1, y2, r1, r2, prev;
95
96 x = to_128(a);
97 y = to_128(b);
98
99 x1 = x.lo & 0xffffffff;
100 x2 = x.lo >> 32;
101
102 y1 = y.lo & 0xffffffff;
103 y2 = y.lo >> 32;
104
105 r1 = x1*y2;
106 r2 = x2*y1;
107
108 z.sign = x.sign * y.sign;
109 z.hi = x2*y2 + (r1 >> 32) + (r2 >> 32);
110 z.lo = x1*y1;
111
112 /* Add with carry */
113 prev = z.lo;
114 z.lo += (r1 << 32);
115 if (z.lo < prev) {
116 ++z.hi;
117 }
118
119 prev = z.lo;
120 z.lo += (r2 << 32);
121 if (z.lo < prev) {
122 ++z.hi;
123 }
124
125 return z;
126}
127
128
129/* Long integer add */

Callers 1

diophantine_dfsFunction · 0.85

Calls 1

to_128Function · 0.85

Tested by

no test coverage detected