1240 {
1242 {
1243 for (
int i = 0;
i < rightLength;
i++)
1244 {
1245 ulong num = 0uL;
1246 for (int j = 0; j < leftLength; j++)
1247 {
1248 ulong num2 = bits[
i + j] + num + (ulong)((
long)left[j] * (long)right[i]);
1249 bits[
i + j] = (uint)num2;
1250 num = num2 >> 32;
1251 }
1252 bits[
i + leftLength] = (uint)num;
1253 }
1254 return;
1255 }
1256 int num3 = rightLength >> 1;
1257 int num4 = num3 << 1;
1258 int num5 = num3;
1259 uint* left2 = left + num3;
1260 int num6 = leftLength - num3;
1261 int rightLength2 = num3;
1262 uint* ptr = right + num3;
1263 int num7 = rightLength - num3;
1264 int num8 = num4;
1265 uint* ptr2 = bits + num4;
1266 int num9 = bitsLength - num4;
1267 Multiply(left, num5, right, rightLength2, bits, num8);
1268 Multiply(left2, num6, ptr, num7, ptr2, num9);
1269 int num10 = num6 + 1;
1270 int num11 = num7 + 1;
1271 int num12 = num10 + num11;
1273 {
1274 uint* ptr3 = stackalloc uint[num10];
1275 new Span<uint>(ptr3, num10).Clear();
1276 uint* ptr4 = stackalloc uint[num11];
1277 new Span<uint>(ptr4, num11).Clear();
1278 uint* ptr5 = stackalloc uint[num12];
1279 new Span<uint>(ptr5, num12).Clear();
1280 Add(left2, num6, left, num5, ptr3, num10);
1281 Add(ptr, num7, right, rightLength2, ptr4, num11);
1282 Multiply(ptr3, num10, ptr4, num11, ptr5, num12);
1284 AddSelf(bits + num3, bitsLength - num3, ptr5, num12);
1285 return;
1286 }
1287 fixed (uint* ptr6 = new uint[num10])
1288 {
1289 fixed (uint* ptr7 = new uint[num11])
1290 {
1291 fixed (uint* ptr8 = new uint[num12])
1292 {
1293 Add(left2, num6, left, num5, ptr6, num10);
1294 Add(ptr, num7, right, rightLength2, ptr7, num11);
1295 Multiply(ptr6, num10, ptr7, num11, ptr8, num12);
1297 AddSelf(bits + num3, bitsLength - num3, ptr8, num12);
1298 }
1299 }
1300 }
1301 }
static int MultiplyThreshold
static unsafe void SubtractCore(uint *left, int leftLength, uint *right, int rightLength, uint *core, int coreLength)
static int AllocationThreshold
static unsafe void AddSelf(uint *left, int leftLength, uint *right, int rightLength)