329 {
330
331 const u64 F4 = 331804471;
332 const u64 G4 = 593549882;
333
334
335
337 fl::u32 i = ((
x>>2) + s) >> 10;
338 fl::u32 j = ((
y>>2) + s) >> 10;
339 fl::u32 k = ((
z>>2) + s) >> 10;
340 fl::u32 l = ((w>>2) + s) >> 10;
341
347 fl::i32 x0 = ((
u64)
x<<2) - X0;
348 fl::i32 y0 = ((
u64)
y<<2) - Y0;
349 fl::i32 z0 = ((
u64)
z<<2) - Z0;
350 fl::i32 w0 = ((
u64)w<<2) -
W0;
351
352
353
354
355
356
357
358
359
360 int c = 0;
361 if (x0 > y0) {
362 c += 32;
363 }
364 if (x0 > z0) {
365 c += 16;
366 }
367 if (y0 > z0) {
368 c += 8;
369 }
370 if (x0 > w0) {
371 c += 4;
372 }
373 if (y0 > w0) {
374 c += 2;
375 }
376 if (z0 > w0) {
377 c += 1;
378 }
379
380
381
382
383
384
385
390
391
396
397
402
403
404 fl::i32 x1 = x0 - ((fl::i32)i1<<14) + (fl::i32)(G4>>18);
405 fl::i32 y1 = y0 - ((fl::i32)j1<<14) + (fl::i32)(G4>>18);
406 fl::i32 z1 = z0 - ((fl::i32)k1<<14) + (fl::i32)(G4>>18);
407 fl::i32 w1 = w0 - ((fl::i32)l1<<14) + (fl::i32)(G4>>18);
408 fl::i32 x2 = x0 - ((fl::i32)i2<<14) + (fl::i32)(2*G4>>18);
409 fl::i32 y2 = y0 - ((fl::i32)j2<<14) + (fl::i32)(2*G4>>18);
410 fl::i32 z2 = z0 - ((fl::i32)k2<<14) + (fl::i32)(2*G4>>18);
411 fl::i32 w2 = w0 - ((fl::i32)l2<<14) + (fl::i32)(2*G4>>18);
412 fl::i32 x3 = x0 - ((fl::i32)i3<<14) + (fl::i32)(3*G4>>18);
413 fl::i32 y3 = y0 - ((fl::i32)j3<<14) + (fl::i32)(3*G4>>18);
414 fl::i32 z3 = z0 - ((fl::i32)k3<<14) + (fl::i32)(3*G4>>18);
415 fl::i32 w3 = w0 - ((fl::i32)l3<<14) + (fl::i32)(3*G4>>18);
416 fl::i32 x4 = x0 - (1 << 14) + (fl::i32)(4*G4>>18);
417 fl::i32 y4 = y0 - (1 << 14) + (fl::i32)(4*G4>>18);
418 fl::i32 z4 = z0 - (1 << 14) + (fl::i32)(4*G4>>18);
419 fl::i32 w4 = w0 - (1 << 14) + (fl::i32)(4*G4>>18);
420
421 fl::i32 n0 = 0, n1 = 0, n2 = 0, n3 = 0, n4 = 0;
422 const fl::i32 fix0_6 = 161061274;
423
424
425 fl::i32 t0 = (fix0_6 - x0*x0 - y0*y0 - z0*z0 - w0*w0) >> 12;
426 if (t0 > 0) {
427 t0 = (t0 * t0) >> 16;
428 t0 = (t0 * t0) >> 16;
429
431 }
432
433 fl::i32 t1 = (fix0_6 - x1*x1 - y1*y1 - z1*z1 - w1*w1) >> 12;
434 if (t1 > 0) {
435 t1 = (t1 * t1) >> 16;
436 t1 = (t1 * t1) >> 16;
437
439 }
440
441 fl::i32 t2 = (fix0_6 - x2*x2 - y2*y2 - z2*z2 - w2*w2) >> 12;
442 if (t2 > 0) {
443 t2 = (t2 * t2) >> 16;
444 t2 = (t2 * t2) >> 16;
445
447 }
448
449 fl::i32 t3 = (fix0_6 - x3*x3 - y3*y3 - z3*z3 - w3*w3) >> 12;
450 if (t3 > 0) {
451 t3 = (t3 * t3) >> 16;
452 t3 = (t3 * t3) >> 16;
453
455 }
456
457 fl::i32 t4 = (fix0_6 - x4*x4 - y4*y4 - z4*z4 - w4*w4) >> 12;
458 if (t4 > 0) {
459 t4 = (t4 * t4) >> 16;
460 t4 = (t4 * t4) >> 16;
461
463 }
464
465 fl::i32 n = n0 + n1 + n2 + n3 + n4;
466 n = ((n >> 8) * 13832) >> 16;
467 return fl::u16(n) + 0x8000;
468}
static fl::u8 const simplex[64][4]
static fl::i32 grad(fl::u8 hash, fl::i32 x) FL_NO_EXCEPT