Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ Mul()

void System.Xml.Xsl.XPathConvert.BigNumber.Mul ( ref BigNumber numOp)
inlineprivate

Definition at line 301 of file XPathConvert.cs.

302 {
303 uint num = 0u;
304 uint u = 0u;
305 uint u2 = 0u;
306 uint u3 = 0u;
307 uint u4 = 0u;
308 uint u5 = 0u;
309 uint uHi;
310 uint u6;
311 uint num2;
312 uint num3;
313 if ((u6 = _u0) != 0)
314 {
315 num2 = MulU(u6, numOp._u0, out uHi);
316 num = num2;
317 u = uHi;
318 num2 = MulU(u6, numOp._u1, out uHi);
319 num3 = AddU(ref u, num2);
320 AddU(ref u2, uHi + num3);
321 num2 = MulU(u6, numOp._u2, out uHi);
322 num3 = AddU(ref u2, num2);
323 AddU(ref u3, uHi + num3);
324 }
325 if ((u6 = _u1) != 0)
326 {
327 num2 = MulU(u6, numOp._u0, out uHi);
328 num3 = AddU(ref u, num2);
329 if (AddU(ref u2, uHi + num3) != 0 && AddU(ref u3, 1u) != 0)
330 {
331 AddU(ref u4, 1u);
332 }
333 num2 = MulU(u6, numOp._u1, out uHi);
334 num3 = AddU(ref u2, num2);
335 if (AddU(ref u3, uHi + num3) != 0)
336 {
337 AddU(ref u4, 1u);
338 }
339 num2 = MulU(u6, numOp._u2, out uHi);
340 num3 = AddU(ref u3, num2);
341 AddU(ref u4, uHi + num3);
342 }
343 u6 = _u2;
344 num2 = MulU(u6, numOp._u0, out uHi);
345 num3 = AddU(ref u2, num2);
346 if (AddU(ref u3, uHi + num3) != 0 && AddU(ref u4, 1u) != 0)
347 {
348 AddU(ref u5, 1u);
349 }
350 num2 = MulU(u6, numOp._u1, out uHi);
351 num3 = AddU(ref u3, num2);
352 if (AddU(ref u4, uHi + num3) != 0)
353 {
354 AddU(ref u5, 1u);
355 }
356 num2 = MulU(u6, numOp._u2, out uHi);
357 num3 = AddU(ref u4, num2);
358 AddU(ref u5, uHi + num3);
359 _exp += numOp._exp;
360 _error += numOp._error;
361 if ((u5 & 0x80000000u) == 0)
362 {
363 if ((u2 & 0x40000000u) != 0 && ((u2 & 0xBFFFFFFFu) != 0 || u != 0 || num != 0) && AddU(ref u2, 1073741824u) != 0 && AddU(ref u3, 1u) != 0 && AddU(ref u4, 1u) != 0)
364 {
365 AddU(ref u5, 1u);
366 if ((u5 & 0x80000000u) != 0)
367 {
368 goto IL_0314;
369 }
370 }
371 _u2 = (u5 << 1) | (u4 >> 31);
372 _u1 = (u4 << 1) | (u3 >> 31);
373 _u0 = (u3 << 1) | (u2 >> 31);
374 _exp--;
375 _error <<= 1;
376 if ((u2 & 0x7FFFFFFFu) != 0 || u != 0 || num != 0)
377 {
378 _error++;
379 }
380 return;
381 }
382 if ((u2 & 0x80000000u) != 0 && ((u3 & (true ? 1u : 0u)) != 0 || (u2 & 0x7FFFFFFFu) != 0 || u != 0 || num != 0) && AddU(ref u3, 1u) != 0 && AddU(ref u4, 1u) != 0 && AddU(ref u5, 1u) != 0)
383 {
384 u5 = 2147483648u;
385 _exp++;
386 }
387 goto IL_0314;
388 IL_0314:
389 _u2 = u5;
390 _u1 = u4;
391 _u0 = u3;
392 if (u2 != 0 || u != 0 || num != 0)
393 {
394 _error++;
395 }
396 }
static uint MulU(uint u1, uint u2, out uint uHi)
static uint AddU(ref uint u1, uint u2)

References System.Xml.Xsl.XPathConvert.BigNumber._error, System.Xml.Xsl.XPathConvert.BigNumber._exp, System.Xml.Xsl.XPathConvert.BigNumber._u0, System.Xml.Xsl.XPathConvert.BigNumber._u1, System.Xml.Xsl.XPathConvert.BigNumber._u2, System.Xml.Xsl.XPathConvert.AddU(), System.Xml.Dictionary, and System.Xml.Xsl.XPathConvert.MulU().

Referenced by System.Xml.Xsl.XPathConvert.BigNumber.BigNumber().