// File: /workspace/github_cpp_makefile_star2_O1/Reputeless[P]PerlinNoise/./PerlinNoise.hpp
// Function: siv::BasicPerlinNoise<double>::noise3D(double, double, double) const
inline typename BasicPerlinNoise<Float>::value_type BasicPerlinNoise<Float>::noise3D(const value_type x, const value_type y, const value_type z) const noexcept
	{
		const value_type _x = std::floor(x);
		const value_type _y = std::floor(y);
		const value_type _z = std::floor(z);

		const std::int32_t ix = static_cast<std::int32_t>(_x) & 255;
		const std::int32_t iy = static_cast<std::int32_t>(_y) & 255;
		const std::int32_t iz = static_cast<std::int32_t>(_z) & 255;

		const value_type fx = (x - _x);
		const value_type fy = (y - _y);
		const value_type fz = (z - _z);

		const value_type u = perlin_detail::Fade(fx);
		const value_type v = perlin_detail::Fade(fy);
		const value_type w = perlin_detail::Fade(fz);

		const std::uint8_t A = (m_permutation[ix & 255] + iy) & 255;
		const std::uint8_t B = (m_permutation[(ix + 1) & 255] + iy) & 255;

		const std::uint8_t AA = (m_permutation[A] + iz) & 255;
		const std::uint8_t AB = (m_permutation[(A + 1) & 255] + iz) & 255;

		const std::uint8_t BA = (m_permutation[B] + iz) & 255;
		const std::uint8_t BB = (m_permutation[(B + 1) & 255] + iz) & 255;

		const value_type p0 = perlin_detail::Grad(m_permutation[AA], fx, fy, fz);
		const value_type p1 = perlin_detail::Grad(m_permutation[BA], fx - 1, fy, fz);
		const value_type p2 = perlin_detail::Grad(m_permutation[AB], fx, fy - 1, fz);
		const value_type p3 = perlin_detail::Grad(m_permutation[BB], fx - 1, fy - 1, fz);
		const value_type p4 = perlin_detail::Grad(m_permutation[(AA + 1) & 255], fx, fy, fz - 1);
		const value_type p5 = perlin_detail::Grad(m_permutation[(BA + 1) & 255], fx - 1, fy, fz - 1);
		const value_type p6 = perlin_detail::Grad(m_permutation[(AB + 1) & 255], fx, fy - 1, fz - 1);
		const value_type p7 = perlin_detail::Grad(m_permutation[(BB + 1) & 255], fx - 1, fy - 1, fz - 1);

		const value_type q0 = perlin_detail::Lerp(p0, p1, u);
		const value_type q1 = perlin_detail::Lerp(p2, p3, u);
		const value_type q2 = perlin_detail::Lerp(p4, p5, u);
		const value_type q3 = perlin_detail::Lerp(p6, p7, u);

		const value_type r0 = perlin_detail::Lerp(q0, q1, v);
		const value_type r1 = perlin_detail::Lerp(q2, q3, v);

		return perlin_detail::Lerp(r0, r1, w);
	}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %rbx
subq $0xc8, %rsp
movsd %xmm2, -0x30(%rbp)
movsd %xmm1, -0x20(%rbp)
movsd %xmm0, -0x40(%rbp)
movq %rdi, %rbx
callq 0x21e0
movsd %xmm0, -0x50(%rbp)
movsd -0x20(%rbp), %xmm0
callq 0x21e0
movsd %xmm0, -0x60(%rbp)
movsd -0x30(%rbp), %xmm0
callq 0x21e0
movsd -0x40(%rbp), %xmm3
movsd -0x20(%rbp), %xmm12
movsd -0x30(%rbp), %xmm6
movsd -0x50(%rbp), %xmm1
cvttsd2si %xmm1, %ecx
movl $0xff, %esi
movl %ecx, %edi
movsd -0x60(%rbp), %xmm2
cvttsd2si %xmm2, %eax
andl %esi, %edi
cvttsd2si %xmm0, %edx
subsd %xmm1, %xmm3
subsd %xmm2, %xmm12
subsd %xmm0, %xmm6
movb (%rbx,%rdi), %dil
addb %al, %dil
incl %ecx
andl %esi, %ecx
addb (%rbx,%rcx), %al
movzbl %dil, %ecx
movb (%rbx,%rcx), %r8b
addb %dl, %r8b
incb %cl
movzbl %cl, %ecx
movzbl %al, %eax
movb (%rbx,%rax), %r9b
addb %dl, %r9b
incb %al
movzbl %al, %esi
movzbl %r8b, %eax
movzbl (%rbx,%rax), %edi
movl %edi, %eax
andl $0xf, %eax
movapd %xmm12, %xmm0
cmpb $0x4, %al
jb 0x37ee
andb $0xd, %dil
movapd %xmm3, %xmm0
cmpb $0xc, %dil
je 0x37ee
movapd %xmm6, %xmm0
movb (%rbx,%rcx), %r10b
addb %dl, %r10b
movzbl %r9b, %ecx
movzbl (%rbx,%rcx), %edi
movsd 0x832(%rip), %xmm11     # 0x4038
addsd %xmm3, %xmm11
movl %edi, %ecx
andl $0xf, %ecx
movapd %xmm12, %xmm2
cmpb $0x4, %cl
jb 0x382d
andb $0xd, %dil
movapd %xmm11, %xmm2
cmpb $0xc, %dil
je 0x382d
movapd %xmm6, %xmm2
addb (%rbx,%rsi), %dl
movzbl %r10b, %esi
movzbl (%rbx,%rsi), %edi
movsd 0x7f8(%rip), %xmm5      # 0x4038
addsd %xmm12, %xmm5
movl %edi, %esi
andl $0xf, %esi
movapd %xmm5, %xmm4
cmpb $0x4, %sil
jb 0x3866
andb $0xd, %dil
movapd %xmm3, %xmm4
cmpb $0xc, %dil
je 0x3866
movapd %xmm6, %xmm4
movzbl %dl, %edi
movzbl (%rbx,%rdi), %r11d
movl %r11d, %edi
andl $0xf, %edi
movapd %xmm5, %xmm8
cmpb $0x4, %dil
jb 0x3893
andb $0xd, %r11b
movapd %xmm11, %xmm8
cmpb $0xc, %r11b
je 0x3893
movapd %xmm6, %xmm8
movapd %xmm0, -0x40(%rbp)
incb %r8b
movzbl %r8b, %r8d
movzbl (%rbx,%r8), %r11d
movsd 0x78c(%rip), %xmm0      # 0x4038
addsd %xmm6, %xmm0
movl %r11d, %r8d
andl $0xf, %r8d
movapd %xmm12, %xmm9
cmpb $0x4, %r8b
jb 0x38d6
andb $0xd, %r11b
movapd %xmm3, %xmm9
cmpb $0xc, %r11b
je 0x38d6
movapd %xmm0, %xmm9
incb %r9b
movzbl %r9b, %r9d
movzbl (%rbx,%r9), %r11d
movl %r11d, %r9d
andl $0xf, %r9d
movapd %xmm12, %xmm10
cmpb $0x4, %r9b
jb 0x3908
andb $0xd, %r11b
movapd %xmm11, %xmm10
cmpb $0xc, %r11b
je 0x3908
movapd %xmm0, %xmm10
incb %r10b
movzbl %r10b, %r10d
movzbl (%rbx,%r10), %r11d
movl %r11d, %r10d
andl $0xf, %r10d
movapd %xmm5, %xmm1
cmpb $0x4, %r10b
jb 0x3937
andb $0xd, %r11b
movapd %xmm3, %xmm1
cmpb $0xc, %r11b
je 0x3937
movapd %xmm0, %xmm1
incb %dl
movzbl %dl, %edx
movzbl (%rbx,%rdx), %r11d
movl %r11d, %edx
andl $0xf, %edx
movapd %xmm5, %xmm15
cmpb $0x4, %dl
jb 0x3965
andb $0xd, %r11b
movapd %xmm11, %xmm15
cmpb $0xc, %r11b
je 0x3965
movapd %xmm0, %xmm15
movapd %xmm3, %xmm13
cmpb $0x8, %r10b
jb 0x3975
movapd %xmm5, %xmm13
movapd 0x6f3(%rip), %xmm0      # 0x4070
testb $0x1, %r10b
je 0x3988
xorpd %xmm0, %xmm13
testb $0x2, %r10b
je 0x3992
xorpd %xmm0, %xmm1
movapd %xmm1, -0x80(%rbp)
movapd %xmm11, %xmm1
cmpb $0x8, %r9b
jb 0x39a7
movapd %xmm12, %xmm1
testb $0x1, %r9b
je 0x39b1
xorpd %xmm0, %xmm1
testb $0x2, %r9b
je 0x39bc
xorpd %xmm0, %xmm10
movapd %xmm3, -0x30(%rbp)
cmpb $0x8, %r8b
jb 0x39cd
movapd %xmm12, -0x30(%rbp)
testb $0x1, %r8b
je 0x39e4
movapd -0x30(%rbp), %xmm14
xorpd %xmm0, %xmm14
movapd %xmm14, -0x30(%rbp)
testb $0x2, %r8b
je 0x39ef
xorpd %xmm0, %xmm9
movapd %xmm11, %xmm14
cmpb $0x8, %dil
jb 0x39ff
movapd %xmm5, %xmm14
testb $0x1, %dil
je 0x3a0a
xorpd %xmm0, %xmm14
testb $0x2, %dil
je 0x3a15
xorpd %xmm0, %xmm8
movapd %xmm3, -0x20(%rbp)
cmpb $0x8, %sil
jb 0x3a25
movapd %xmm5, -0x20(%rbp)
testb $0x1, %sil
je 0x3a39
movapd -0x20(%rbp), %xmm7
xorpd %xmm0, %xmm7
movapd %xmm7, -0x20(%rbp)
testb $0x2, %sil
je 0x3a43
xorpd %xmm0, %xmm4
movapd %xmm11, %xmm0
cmpb $0x8, %cl
jb 0x3a52
movapd %xmm12, %xmm0
testb $0x1, %cl
je 0x3a5f
xorpd 0x611(%rip), %xmm0      # 0x4070
testb $0x2, %cl
je 0x3a6c
xorpd 0x604(%rip), %xmm2      # 0x4070
movapd %xmm2, -0x50(%rbp)
movapd %xmm3, %xmm2
cmpb $0x8, %al
jb 0x3a7e
movapd %xmm12, %xmm2
testb $0x1, %al
je 0x3a8a
xorpd 0x5e6(%rip), %xmm2      # 0x4070
movapd %xmm15, -0x90(%rbp)
testb $0x2, %al
movapd %xmm4, -0x60(%rbp)
movsd %xmm5, -0x68(%rbp)
movapd %xmm8, -0xd0(%rbp)
movapd %xmm9, -0xc0(%rbp)
movapd %xmm10, -0xb0(%rbp)
movapd %xmm13, -0xa0(%rbp)
movapd %xmm3, %xmm15
je 0x3adc
movapd -0x40(%rbp), %xmm3
xorpd 0x599(%rip), %xmm3      # 0x4070
movapd %xmm3, -0x40(%rbp)
movapd %xmm6, %xmm7
mulsd %xmm6, %xmm7
movsd 0x574(%rip), %xmm3      # 0x4060
movapd %xmm6, %xmm5
mulsd %xmm3, %xmm5
movsd 0x56b(%rip), %xmm8      # 0x4068
addsd %xmm8, %xmm5
movapd %xmm6, %xmm4
mulsd %xmm6, %xmm5
movsd 0x52d(%rip), %xmm9      # 0x4040
movapd %xmm12, %xmm10
mulsd %xmm12, %xmm10
movapd %xmm12, %xmm6
mulsd %xmm3, %xmm6
addsd %xmm8, %xmm6
movapd %xmm12, %xmm13
mulsd %xmm12, %xmm6
movapd %xmm15, %xmm12
mulsd %xmm15, %xmm15
mulsd %xmm12, %xmm3
addsd %xmm8, %xmm3
mulsd %xmm12, %xmm3
cmpb $0x8, %dl
jb 0x3b59
movsd -0x68(%rbp), %xmm11
mulsd %xmm7, %xmm4
addsd %xmm9, %xmm5
mulsd %xmm10, %xmm13
movapd %xmm13, %xmm7
addsd %xmm9, %xmm6
mulsd %xmm15, %xmm12
addsd %xmm9, %xmm3
testb $0x1, %dl
movapd -0xd0(%rbp), %xmm8
je 0x3b92
xorpd 0x4de(%rip), %xmm11     # 0x4070
movapd -0xc0(%rbp), %xmm9
movapd -0xb0(%rbp), %xmm10
movapd -0xa0(%rbp), %xmm13
movapd -0x90(%rbp), %xmm15
addsd -0x80(%rbp), %xmm13
addsd %xmm10, %xmm1
movapd -0x30(%rbp), %xmm10
addsd %xmm9, %xmm10
movapd %xmm10, %xmm9
addsd %xmm8, %xmm14
movapd -0x20(%rbp), %xmm8
addsd -0x60(%rbp), %xmm8
addsd -0x50(%rbp), %xmm0
addsd -0x40(%rbp), %xmm2
mulsd %xmm5, %xmm4
mulsd %xmm6, %xmm7
mulsd %xmm3, %xmm12
testb $0x2, %dl
je 0x3c07
xorpd 0x469(%rip), %xmm15     # 0x4070
addsd %xmm15, %xmm11
subsd %xmm2, %xmm0
mulsd %xmm12, %xmm0
addsd %xmm2, %xmm0
subsd %xmm8, %xmm14
mulsd %xmm12, %xmm14
addsd %xmm8, %xmm14
subsd %xmm9, %xmm1
mulsd %xmm12, %xmm1
addsd %xmm9, %xmm1
subsd %xmm13, %xmm11
mulsd %xmm12, %xmm11
addsd %xmm13, %xmm11
subsd %xmm0, %xmm14
mulsd %xmm7, %xmm14
addsd %xmm0, %xmm14
subsd %xmm1, %xmm11
mulsd %xmm7, %xmm11
addsd %xmm1, %xmm11
subsd %xmm14, %xmm11
mulsd %xmm4, %xmm11
addsd %xmm14, %xmm11
movapd %xmm11, %xmm0
addq $0xc8, %rsp
popq %rbx
popq %rbp
retq