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

◆ BigMul() [3/3]

static unsafe ulong System.Math.BigMul ( ulong a,
ulong b,
out ulong low )
inlinestatic

Definition at line 235 of file Math.cs.

236 {
237 if (Bmi2.X64.IsSupported)
238 {
239 System.Runtime.CompilerServices.Unsafe.SkipInit(out ulong num);
240 ulong result = Bmi2.X64.MultiplyNoFlags(a, b, &num);
241 low = num;
242 return result;
243 }
245 {
246 }
247 return SoftwareFallback(a, b, out low);
248 static ulong SoftwareFallback(ulong a, ulong b, out ulong low)
249 {
250 uint num2 = (uint)a;
251 uint num3 = (uint)(a >> 32);
252 uint num4 = (uint)b;
253 uint num5 = (uint)(b >> 32);
254 ulong num6 = (ulong)num2 * (ulong)num4;
255 ulong num7 = (ulong)((long)num3 * (long)num4) + (num6 >> 32);
256 ulong num8 = (ulong)((long)num2 * (long)num5 + (uint)num7);
257 low = (num8 << 32) | (uint)num6;
258 return (ulong)((long)num3 * (long)num5 + (long)(num7 >> 32)) + (num8 >> 32);
259 }
260 }
static ulong MultiplyNoFlags(ulong left, ulong right)
Definition Bmi2.cs:19

References System.Runtime.Intrinsics.Arm.ArmBase.Arm64.IsSupported, System.Runtime.Intrinsics.X86.Bmi2.X64.IsSupported, and System.Runtime.Intrinsics.X86.Bmi2.X64.MultiplyNoFlags().