// File: /workspace/github_c_makefile_star2_O1/k0n10pl4tr[P]minimal_crafter/./stb_perlin.h
// Function: stb_perlin_noise3_internal
float stb_perlin_noise3_internal(float x, float y, float z, int x_wrap, int y_wrap, int z_wrap, unsigned char seed)
{
   float u,v,w;
   float n000,n001,n010,n011,n100,n101,n110,n111;
   float n00,n01,n10,n11;
   float n0,n1;

   unsigned int x_mask = (x_wrap-1) & 255;
   unsigned int y_mask = (y_wrap-1) & 255;
   unsigned int z_mask = (z_wrap-1) & 255;
   int px = stb__perlin_fastfloor(x);
   int py = stb__perlin_fastfloor(y);
   int pz = stb__perlin_fastfloor(z);
   int x0 = px & x_mask, x1 = (px+1) & x_mask;
   int y0 = py & y_mask, y1 = (py+1) & y_mask;
   int z0 = pz & z_mask, z1 = (pz+1) & z_mask;
   int r0,r1, r00,r01,r10,r11;

   #define stb__perlin_ease(a)   (((a*6-15)*a + 10) * a * a * a)

   x -= px; u = stb__perlin_ease(x);
   y -= py; v = stb__perlin_ease(y);
   z -= pz; w = stb__perlin_ease(z);

   r0 = stb__perlin_randtab[x0+seed];
   r1 = stb__perlin_randtab[x1+seed];

   r00 = stb__perlin_randtab[r0+y0];
   r01 = stb__perlin_randtab[r0+y1];
   r10 = stb__perlin_randtab[r1+y0];
   r11 = stb__perlin_randtab[r1+y1];

   n000 = stb__perlin_grad(stb__perlin_randtab_grad_idx[r00+z0], x  , y  , z   );
   n001 = stb__perlin_grad(stb__perlin_randtab_grad_idx[r00+z1], x  , y  , z-1 );
   n010 = stb__perlin_grad(stb__perlin_randtab_grad_idx[r01+z0], x  , y-1, z   );
   n011 = stb__perlin_grad(stb__perlin_randtab_grad_idx[r01+z1], x  , y-1, z-1 );
   n100 = stb__perlin_grad(stb__perlin_randtab_grad_idx[r10+z0], x-1, y  , z   );
   n101 = stb__perlin_grad(stb__perlin_randtab_grad_idx[r10+z1], x-1, y  , z-1 );
   n110 = stb__perlin_grad(stb__perlin_randtab_grad_idx[r11+z0], x-1, y-1, z   );
   n111 = stb__perlin_grad(stb__perlin_randtab_grad_idx[r11+z1], x-1, y-1, z-1 );

   n00 = stb__perlin_lerp(n000,n001,w);
   n01 = stb__perlin_lerp(n010,n011,w);
   n10 = stb__perlin_lerp(n100,n101,w);
   n11 = stb__perlin_lerp(n110,n111,w);

   n0 = stb__perlin_lerp(n00,n01,v);
   n1 = stb__perlin_lerp(n10,n11,v);

   return stb__perlin_lerp(n0,n1,u);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
decl %edi
movl $0xff, %eax
andl %eax, %edi
decl %esi
andl %eax, %esi
decl %edx
cvttss2si %xmm0, %r9d
andl %eax, %edx
cvttps2dq %xmm0, %xmm3
cvtdq2ps %xmm3, %xmm3
xorl %eax, %eax
ucomiss %xmm0, %xmm3
seta %al
subl %eax, %r9d
cvttss2si %xmm1, %r11d
cvttps2dq %xmm1, %xmm3
cvtdq2ps %xmm3, %xmm3
xorl %eax, %eax
ucomiss %xmm1, %xmm3
seta %al
cvttss2si %xmm2, %r10d
subl %eax, %r11d
cvttps2dq %xmm2, %xmm3
cvtdq2ps %xmm3, %xmm3
xorl %eax, %eax
ucomiss %xmm2, %xmm3
seta %al
xorps %xmm3, %xmm3
cvtsi2ss %r9d, %xmm3
subl %eax, %r10d
leal 0x1(%r9), %r8d
andl %edi, %r9d
andl %edi, %r8d
cvtsi2ss %r11d, %xmm4
leal 0x1(%r11), %edi
andl %esi, %r11d
andl %esi, %edi
leal 0x1(%r10), %eax
cvtsi2ss %r10d, %xmm6
movl %r10d, %esi
andl %edx, %esi
andl %edx, %eax
subss %xmm3, %xmm0
movss 0x30f6(%rip), %xmm5     # 0x8fe0
movaps %xmm0, %xmm3
mulss %xmm5, %xmm3
movss 0x30eb(%rip), %xmm7     # 0x8fe4
addss %xmm7, %xmm3
mulss %xmm0, %xmm3
movss 0x30de(%rip), %xmm8     # 0x8fe8
addss %xmm8, %xmm3
mulss %xmm0, %xmm3
mulss %xmm0, %xmm3
mulss %xmm0, %xmm3
subss %xmm4, %xmm1
movaps %xmm1, %xmm4
mulss %xmm5, %xmm4
addss %xmm7, %xmm4
mulss %xmm1, %xmm4
addss %xmm8, %xmm4
mulss %xmm1, %xmm4
mulss %xmm1, %xmm4
mulss %xmm1, %xmm4
subss %xmm6, %xmm2
mulss %xmm2, %xmm5
addss %xmm7, %xmm5
mulss %xmm2, %xmm5
addss %xmm8, %xmm5
mulss %xmm2, %xmm5
mulss %xmm2, %xmm5
mulss %xmm2, %xmm5
movl %ecx, %ecx
addq %rcx, %r9
leaq 0x30c4(%rip), %rdx      # 0x9030
movzbl (%rdx,%r9), %r9d
addq %rcx, %r8
movzbl (%rdx,%r8), %ecx
leaq (%r11,%r9), %r8
movzbl (%rdx,%r8), %r10d
addq %rdi, %r9
movzbl (%rdx,%r9), %r9d
addq %rcx, %r11
movzbl (%rdx,%r11), %r8d
addq %rcx, %rdi
movzbl (%rdx,%rdi), %edx
leaq (%rsi,%r10), %rcx
leaq 0x328c(%rip), %rdi      # 0x9230
movzbl (%rdi,%rcx), %r11d
shll $0x4, %r11d
leaq 0x347c(%rip), %rcx      # 0x9430
movss 0x4(%r11,%rcx), %xmm6
mulss %xmm1, %xmm6
movss (%r11,%rcx), %xmm8
mulss %xmm0, %xmm8
addss %xmm6, %xmm8
movss 0x8(%r11,%rcx), %xmm7
mulss %xmm2, %xmm7
addss %xmm8, %xmm7
addq %rax, %r10
movzbl (%rdi,%r10), %r10d
movss 0x2ffc(%rip), %xmm12    # 0x8fec
movaps %xmm2, %xmm8
addss %xmm12, %xmm8
shll $0x4, %r10d
movss 0x4(%r10,%rcx), %xmm6
mulss %xmm1, %xmm6
movss (%r10,%rcx), %xmm9
mulss %xmm0, %xmm9
addss %xmm6, %xmm9
movss 0x8(%r10,%rcx), %xmm6
mulss %xmm8, %xmm6
addss %xmm9, %xmm6
leaq (%rsi,%r9), %r10
movzbl (%rdi,%r10), %r10d
movaps %xmm1, %xmm11
addss %xmm12, %xmm11
shll $0x4, %r10d
movss 0x4(%r10,%rcx), %xmm9
mulss %xmm11, %xmm9
movss (%r10,%rcx), %xmm13
mulss %xmm0, %xmm13
addss %xmm9, %xmm13
movss 0x8(%r10,%rcx), %xmm10
mulss %xmm2, %xmm10
addss %xmm13, %xmm10
addq %rax, %r9
movzbl (%rdi,%r9), %r9d
shll $0x4, %r9d
movss 0x4(%r9,%rcx), %xmm9
mulss %xmm11, %xmm9
movss (%r9,%rcx), %xmm13
mulss %xmm0, %xmm13
addss %xmm9, %xmm13
movss 0x8(%r9,%rcx), %xmm9
mulss %xmm8, %xmm9
addss %xmm13, %xmm9
leaq (%rsi,%r8), %r9
movzbl (%rdi,%r9), %r9d
addss %xmm12, %xmm0
shll $0x4, %r9d
movss 0x4(%r9,%rcx), %xmm12
mulss %xmm1, %xmm12
movss (%r9,%rcx), %xmm13
mulss %xmm0, %xmm13
addss %xmm12, %xmm13
movss 0x8(%r9,%rcx), %xmm12
mulss %xmm2, %xmm12
addss %xmm13, %xmm12
addq %rax, %r8
movzbl (%rdi,%r8), %r8d
shll $0x4, %r8d
mulss 0x4(%r8,%rcx), %xmm1
movss (%r8,%rcx), %xmm13
mulss %xmm0, %xmm13
addss %xmm1, %xmm13
movss 0x8(%r8,%rcx), %xmm1
mulss %xmm8, %xmm1
addss %xmm13, %xmm1
addq %rdx, %rsi
movzbl (%rdi,%rsi), %esi
shll $0x4, %esi
movss 0x4(%rsi,%rcx), %xmm14
mulss %xmm11, %xmm14
movss (%rsi,%rcx), %xmm13
mulss %xmm0, %xmm13
addss %xmm14, %xmm13
mulss 0x8(%rsi,%rcx), %xmm2
addss %xmm2, %xmm13
addq %rdx, %rax
movzbl (%rdi,%rax), %eax
shll $0x4, %eax
mulss 0x4(%rax,%rcx), %xmm11
mulss (%rax,%rcx), %xmm0
mulss 0x8(%rax,%rcx), %xmm8
addss %xmm11, %xmm0
addss %xmm8, %xmm0
subss %xmm7, %xmm6
mulss %xmm5, %xmm6
addss %xmm7, %xmm6
subss %xmm10, %xmm9
mulss %xmm5, %xmm9
addss %xmm10, %xmm9
subss %xmm12, %xmm1
mulss %xmm5, %xmm1
addss %xmm12, %xmm1
subss %xmm13, %xmm0
mulss %xmm5, %xmm0
addss %xmm13, %xmm0
subss %xmm6, %xmm9
mulss %xmm4, %xmm9
addss %xmm6, %xmm9
subss %xmm1, %xmm0
mulss %xmm4, %xmm0
addss %xmm1, %xmm0
subss %xmm9, %xmm0
mulss %xmm3, %xmm0
addss %xmm9, %xmm0
popq %rbp
retq