#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
double Det3x3(double, double, double, double, double, double, double, double,
              double);
void Adjoint44(double a[4][4], double b[4][4]) {
  double a1, a2, a3, a4, b1, b2, b3, b4;
  double c1, c2, c3, c4, d1, d2, d3, d4;
  a1 = a[0][0];
  b1 = a[0][1];
  c1 = a[0][2];
  d1 = a[0][3];
  a2 = a[1][0];
  b2 = a[1][1];
  c2 = a[1][2];
  d2 = a[1][3];
  a3 = a[2][0];
  b3 = a[2][1];
  c3 = a[2][2];
  d3 = a[2][3];
  a4 = a[3][0];
  b4 = a[3][1];
  c4 = a[3][2];
  d4 = a[3][3];
  b[0][0] = Det3x3(b2, b3, b4, c2, c3, c4, d2, d3, d4);
  b[1][0] = -Det3x3(a2, a3, a4, c2, c3, c4, d2, d3, d4);
  b[2][0] = Det3x3(a2, a3, a4, b2, b3, b4, d2, d3, d4);
  b[3][0] = -Det3x3(a2, a3, a4, b2, b3, b4, c2, c3, c4);
  b[0][1] = -Det3x3(b1, b3, b4, c1, c3, c4, d1, d3, d4);
  b[1][1] = Det3x3(a1, a3, a4, c1, c3, c4, d1, d3, d4);
  b[2][1] = -Det3x3(a1, a3, a4, b1, b3, b4, d1, d3, d4);
  b[3][1] = Det3x3(a1, a3, a4, b1, b3, b4, c1, c3, c4);
  b[0][2] = Det3x3(b1, b2, b4, c1, c2, c4, d1, d2, d4);
  b[1][2] = -Det3x3(a1, a2, a4, c1, c2, c4, d1, d2, d4);
  b[2][2] = Det3x3(a1, a2, a4, b1, b2, b4, d1, d2, d4);
  b[3][2] = -Det3x3(a1, a2, a4, b1, b2, b4, c1, c2, c4);
  b[0][3] = -Det3x3(b1, b2, b3, c1, c2, c3, d1, d2, d3);
  b[1][3] = Det3x3(a1, a2, a3, c1, c2, c3, d1, d2, d3);
  b[2][3] = -Det3x3(a1, a2, a3, b1, b2, b3, d1, d2, d3);
  b[3][3] = Det3x3(a1, a2, a3, b1, b2, b3, c1, c2, c3);
}


x86 assembly (clang, -O0):
<Adjoint44>:
push   %rbp
mov    %rsp,%rbp
sub    $0xa0,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    -0x8(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x18(%rbp)
mov    -0x8(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x8(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x8(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x8(%rbp),%rax
movsd  0x20(%rax),%xmm0
movsd  %xmm0,-0x20(%rbp)
mov    -0x8(%rbp),%rax
movsd  0x28(%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x8(%rbp),%rax
movsd  0x30(%rax),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x8(%rbp),%rax
movsd  0x38(%rax),%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x8(%rbp),%rax
movsd  0x40(%rax),%xmm0
movsd  %xmm0,-0x28(%rbp)
mov    -0x8(%rbp),%rax
movsd  0x48(%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x8(%rbp),%rax
movsd  0x50(%rax),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x8(%rbp),%rax
movsd  0x58(%rax),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
mov    -0x8(%rbp),%rax
movsd  0x60(%rax),%xmm0
movsd  %xmm0,-0x30(%rbp)
mov    -0x8(%rbp),%rax
movsd  0x68(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x8(%rbp),%rax
movsd  0x70(%rax),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x8(%rbp),%rax
movsd  0x78(%rax),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x40(%rbp),%xmm0
movsd  -0x48(%rbp),%xmm1
movsd  -0x50(%rbp),%xmm2
movsd  -0x60(%rbp),%xmm3
movsd  -0x68(%rbp),%xmm4
movsd  -0x70(%rbp),%xmm5
movsd  -0x80(%rbp),%xmm6
movsd  -0x88(%rbp),%xmm7
ff
movsd  -0x90(%rbp),%xmm8
ff ff
movsd  %xmm8,(%rsp)
call   1030 <Det3x3@plt>
mov    -0x10(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x20(%rbp),%xmm0
movsd  -0x28(%rbp),%xmm1
movsd  -0x30(%rbp),%xmm2
movsd  -0x60(%rbp),%xmm3
movsd  -0x68(%rbp),%xmm4
movsd  -0x70(%rbp),%xmm5
movsd  -0x80(%rbp),%xmm6
movsd  -0x88(%rbp),%xmm7
ff
movsd  -0x90(%rbp),%xmm8
ff ff
movsd  %xmm8,(%rsp)
call   1030 <Det3x3@plt>
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,0x20(%rax)
movsd  -0x20(%rbp),%xmm0
movsd  -0x28(%rbp),%xmm1
movsd  -0x30(%rbp),%xmm2
movsd  -0x40(%rbp),%xmm3
movsd  -0x48(%rbp),%xmm4
movsd  -0x50(%rbp),%xmm5
movsd  -0x80(%rbp),%xmm6
movsd  -0x88(%rbp),%xmm7
ff
movsd  -0x90(%rbp),%xmm8
ff ff
movsd  %xmm8,(%rsp)
call   1030 <Det3x3@plt>
mov    -0x10(%rbp),%rax
movsd  %xmm0,0x40(%rax)
movsd  -0x20(%rbp),%xmm0
movsd  -0x28(%rbp),%xmm1
movsd  -0x30(%rbp),%xmm2
movsd  -0x40(%rbp),%xmm3
movsd  -0x48(%rbp),%xmm4
movsd  -0x50(%rbp),%xmm5
movsd  -0x60(%rbp),%xmm6
movsd  -0x68(%rbp),%xmm7
movsd  -0x70(%rbp),%xmm8
movsd  %xmm8,(%rsp)
call   1030 <Det3x3@plt>
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,0x60(%rax)
movsd  -0x38(%rbp),%xmm0
movsd  -0x48(%rbp),%xmm1
movsd  -0x50(%rbp),%xmm2
movsd  -0x58(%rbp),%xmm3
movsd  -0x68(%rbp),%xmm4
movsd  -0x70(%rbp),%xmm5
movsd  -0x78(%rbp),%xmm6
movsd  -0x88(%rbp),%xmm7
ff
movsd  -0x90(%rbp),%xmm8
ff ff
movsd  %xmm8,(%rsp)
call   1030 <Det3x3@plt>
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,0x8(%rax)
movsd  -0x18(%rbp),%xmm0
movsd  -0x28(%rbp),%xmm1
movsd  -0x30(%rbp),%xmm2
movsd  -0x58(%rbp),%xmm3
movsd  -0x68(%rbp),%xmm4
movsd  -0x70(%rbp),%xmm5
movsd  -0x78(%rbp),%xmm6
movsd  -0x88(%rbp),%xmm7
ff
movsd  -0x90(%rbp),%xmm8
ff ff
movsd  %xmm8,(%rsp)
call   1030 <Det3x3@plt>
mov    -0x10(%rbp),%rax
movsd  %xmm0,0x28(%rax)
movsd  -0x18(%rbp),%xmm0
movsd  -0x28(%rbp),%xmm1
movsd  -0x30(%rbp),%xmm2
movsd  -0x38(%rbp),%xmm3
movsd  -0x48(%rbp),%xmm4
movsd  -0x50(%rbp),%xmm5
movsd  -0x78(%rbp),%xmm6
movsd  -0x88(%rbp),%xmm7
ff
movsd  -0x90(%rbp),%xmm8
ff ff
movsd  %xmm8,(%rsp)
call   1030 <Det3x3@plt>
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,0x48(%rax)
movsd  -0x18(%rbp),%xmm0
movsd  -0x28(%rbp),%xmm1
movsd  -0x30(%rbp),%xmm2
movsd  -0x38(%rbp),%xmm3
movsd  -0x48(%rbp),%xmm4
movsd  -0x50(%rbp),%xmm5
movsd  -0x58(%rbp),%xmm6
movsd  -0x68(%rbp),%xmm7
movsd  -0x70(%rbp),%xmm8
movsd  %xmm8,(%rsp)
call   1030 <Det3x3@plt>
mov    -0x10(%rbp),%rax
movsd  %xmm0,0x68(%rax)
movsd  -0x38(%rbp),%xmm0
movsd  -0x40(%rbp),%xmm1
movsd  -0x50(%rbp),%xmm2
movsd  -0x58(%rbp),%xmm3
movsd  -0x60(%rbp),%xmm4
movsd  -0x70(%rbp),%xmm5
movsd  -0x78(%rbp),%xmm6
movsd  -0x80(%rbp),%xmm7
movsd  -0x90(%rbp),%xmm8
ff ff
movsd  %xmm8,(%rsp)
call   1030 <Det3x3@plt>
mov    -0x10(%rbp),%rax
movsd  %xmm0,0x10(%rax)
movsd  -0x18(%rbp),%xmm0
movsd  -0x20(%rbp),%xmm1
movsd  -0x30(%rbp),%xmm2
movsd  -0x58(%rbp),%xmm3
movsd  -0x60(%rbp),%xmm4
movsd  -0x70(%rbp),%xmm5
movsd  -0x78(%rbp),%xmm6
movsd  -0x80(%rbp),%xmm7
movsd  -0x90(%rbp),%xmm8
ff ff
movsd  %xmm8,(%rsp)
call   1030 <Det3x3@plt>
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,0x30(%rax)
movsd  -0x18(%rbp),%xmm0
movsd  -0x20(%rbp),%xmm1
movsd  -0x30(%rbp),%xmm2
movsd  -0x38(%rbp),%xmm3
movsd  -0x40(%rbp),%xmm4
movsd  -0x50(%rbp),%xmm5
movsd  -0x78(%rbp),%xmm6
movsd  -0x80(%rbp),%xmm7
movsd  -0x90(%rbp),%xmm8
ff ff
movsd  %xmm8,(%rsp)
call   1030 <Det3x3@plt>
mov    -0x10(%rbp),%rax
movsd  %xmm0,0x50(%rax)
movsd  -0x18(%rbp),%xmm0
movsd  -0x20(%rbp),%xmm1
movsd  -0x30(%rbp),%xmm2
movsd  -0x38(%rbp),%xmm3
movsd  -0x40(%rbp),%xmm4
movsd  -0x50(%rbp),%xmm5
movsd  -0x58(%rbp),%xmm6
movsd  -0x60(%rbp),%xmm7
movsd  -0x70(%rbp),%xmm8
movsd  %xmm8,(%rsp)
call   1030 <Det3x3@plt>
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,0x70(%rax)
movsd  -0x38(%rbp),%xmm0
movsd  -0x40(%rbp),%xmm1
movsd  -0x48(%rbp),%xmm2
movsd  -0x58(%rbp),%xmm3
movsd  -0x60(%rbp),%xmm4
movsd  -0x68(%rbp),%xmm5
movsd  -0x78(%rbp),%xmm6
movsd  -0x80(%rbp),%xmm7
movsd  -0x88(%rbp),%xmm8
ff ff
movsd  %xmm8,(%rsp)
call   1030 <Det3x3@plt>
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,0x18(%rax)
movsd  -0x18(%rbp),%xmm0
movsd  -0x20(%rbp),%xmm1
movsd  -0x28(%rbp),%xmm2
movsd  -0x58(%rbp),%xmm3
movsd  -0x60(%rbp),%xmm4
movsd  -0x68(%rbp),%xmm5
movsd  -0x78(%rbp),%xmm6
movsd  -0x80(%rbp),%xmm7
movsd  -0x88(%rbp),%xmm8
ff ff
movsd  %xmm8,(%rsp)
call   1030 <Det3x3@plt>
mov    -0x10(%rbp),%rax
movsd  %xmm0,0x38(%rax)
movsd  -0x18(%rbp),%xmm0
movsd  -0x20(%rbp),%xmm1
movsd  -0x28(%rbp),%xmm2
movsd  -0x38(%rbp),%xmm3
movsd  -0x40(%rbp),%xmm4
movsd  -0x48(%rbp),%xmm5
movsd  -0x78(%rbp),%xmm6
movsd  -0x80(%rbp),%xmm7
movsd  -0x88(%rbp),%xmm8
ff ff
movsd  %xmm8,(%rsp)
call   1030 <Det3x3@plt>
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,0x58(%rax)
movsd  -0x18(%rbp),%xmm0
movsd  -0x20(%rbp),%xmm1
movsd  -0x28(%rbp),%xmm2
movsd  -0x38(%rbp),%xmm3
movsd  -0x40(%rbp),%xmm4
movsd  -0x48(%rbp),%xmm5
movsd  -0x58(%rbp),%xmm6
movsd  -0x60(%rbp),%xmm7
movsd  -0x68(%rbp),%xmm8
movsd  %xmm8,(%rsp)
call   1030 <Det3x3@plt>
mov    -0x10(%rbp),%rax
movsd  %xmm0,0x78(%rax)
add    $0xa0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<Adjoint44>:
push   %rbx
sub    $0x90,%rsp
mov    %rsi,%rbx
movsd  (%rdi),%xmm0
movsd  %xmm0,0x30(%rsp)
movsd  0x8(%rdi),%xmm0
movsd  %xmm0,0x38(%rsp)
movsd  0x10(%rdi),%xmm0
movsd  %xmm0,0x40(%rsp)
movsd  0x18(%rdi),%xmm0
movsd  %xmm0,0x18(%rsp)
movsd  0x20(%rdi),%xmm0
movsd  %xmm0,0x28(%rsp)
movsd  0x28(%rdi),%xmm0
movsd  %xmm0,0x80(%rsp)
movsd  0x30(%rdi),%xmm3
movsd  %xmm3,0x88(%rsp)
movsd  0x38(%rdi),%xmm6
movsd  %xmm6,0x68(%rsp)
movsd  0x40(%rdi),%xmm1
movsd  %xmm1,0x20(%rsp)
movsd  0x48(%rdi),%xmm1
movsd  %xmm1,0x78(%rsp)
movsd  0x50(%rdi),%xmm4
movsd  %xmm4,0x70(%rsp)
movsd  0x58(%rdi),%xmm7
movsd  %xmm7,0x60(%rsp)
movsd  0x60(%rdi),%xmm2
movsd  %xmm2,0x10(%rsp)
movsd  0x68(%rdi),%xmm2
movsd  %xmm2,0x58(%rsp)
movsd  0x70(%rdi),%xmm5
movsd  %xmm5,0x50(%rsp)
movsd  0x78(%rdi),%xmm8
movsd  %xmm8,0x48(%rsp)
movsd  %xmm8,(%rsp)
call   1030 <Det3x3@plt>
movsd  %xmm0,(%rbx)
movsd  0x48(%rsp),%xmm0
movsd  %xmm0,(%rsp)
movsd  0x28(%rsp),%xmm0
movsd  0x20(%rsp),%xmm1
movsd  0x10(%rsp),%xmm2
movsd  0x88(%rsp),%xmm3
movsd  0x70(%rsp),%xmm4
movsd  0x50(%rsp),%xmm5
movsd  0x68(%rsp),%xmm6
movsd  0x60(%rsp),%xmm7
call   1030 <Det3x3@plt>
xorps  0xdd5(%rip),%xmm0
movlps %xmm0,0x20(%rbx)
movsd  0x48(%rsp),%xmm0
movsd  %xmm0,(%rsp)
movsd  0x28(%rsp),%xmm0
movsd  0x20(%rsp),%xmm1
movsd  0x10(%rsp),%xmm2
movsd  0x80(%rsp),%xmm3
movsd  0x78(%rsp),%xmm4
movsd  0x58(%rsp),%xmm5
movsd  0x68(%rsp),%xmm6
movsd  0x60(%rsp),%xmm7
call   1030 <Det3x3@plt>
movsd  %xmm0,0x40(%rbx)
movsd  0x50(%rsp),%xmm0
movsd  %xmm0,(%rsp)
movsd  0x28(%rsp),%xmm0
movsd  0x20(%rsp),%xmm1
movsd  0x10(%rsp),%xmm2
movsd  0x80(%rsp),%xmm3
movsd  0x78(%rsp),%xmm4
movsd  0x58(%rsp),%xmm5
movsd  0x88(%rsp),%xmm6
movsd  0x70(%rsp),%xmm7
call   1030 <Det3x3@plt>
xorps  0xd3c(%rip),%xmm0
movlps %xmm0,0x60(%rbx)
movsd  0x48(%rsp),%xmm0
movsd  %xmm0,(%rsp)
movsd  0x38(%rsp),%xmm0
movsd  0x78(%rsp),%xmm1
movsd  0x58(%rsp),%xmm2
movsd  0x40(%rsp),%xmm3
movsd  0x70(%rsp),%xmm4
movsd  0x50(%rsp),%xmm5
movsd  0x18(%rsp),%xmm6
movsd  0x60(%rsp),%xmm7
call   1030 <Det3x3@plt>
xorps  0xcf1(%rip),%xmm0
movlps %xmm0,0x8(%rbx)
movsd  0x48(%rsp),%xmm0
movsd  %xmm0,(%rsp)
movsd  0x30(%rsp),%xmm0
movsd  0x20(%rsp),%xmm1
movsd  0x10(%rsp),%xmm2
movsd  0x40(%rsp),%xmm3
movsd  0x70(%rsp),%xmm4
movsd  0x50(%rsp),%xmm5
movsd  0x18(%rsp),%xmm6
movsd  0x60(%rsp),%xmm7
call   1030 <Det3x3@plt>
movsd  %xmm0,0x28(%rbx)
movsd  0x48(%rsp),%xmm0
movsd  %xmm0,(%rsp)
movsd  0x30(%rsp),%xmm0
movsd  0x20(%rsp),%xmm1
movsd  0x10(%rsp),%xmm2
movsd  0x38(%rsp),%xmm3
movsd  0x78(%rsp),%xmm4
movsd  0x58(%rsp),%xmm5
movsd  0x18(%rsp),%xmm6
movsd  0x60(%rsp),%xmm7
call   1030 <Det3x3@plt>
xorps  0xc61(%rip),%xmm0
movlps %xmm0,0x48(%rbx)
movsd  0x50(%rsp),%xmm0
movsd  %xmm0,(%rsp)
movsd  0x30(%rsp),%xmm0
movsd  0x20(%rsp),%xmm1
movsd  0x10(%rsp),%xmm2
movsd  0x38(%rsp),%xmm3
movsd  0x78(%rsp),%xmm4
movsd  0x58(%rsp),%xmm5
movsd  0x40(%rsp),%xmm6
movsd  0x70(%rsp),%xmm7
call   1030 <Det3x3@plt>
movsd  %xmm0,0x68(%rbx)
movsd  0x48(%rsp),%xmm0
movsd  %xmm0,(%rsp)
movsd  0x38(%rsp),%xmm0
movsd  0x80(%rsp),%xmm1
movsd  0x58(%rsp),%xmm2
movsd  0x40(%rsp),%xmm3
movsd  0x88(%rsp),%xmm4
movsd  0x50(%rsp),%xmm5
movsd  0x18(%rsp),%xmm6
movsd  0x68(%rsp),%xmm7
call   1030 <Det3x3@plt>
movsd  %xmm0,0x10(%rbx)
movsd  0x48(%rsp),%xmm0
movsd  %xmm0,(%rsp)
movsd  0x30(%rsp),%xmm0
movsd  0x28(%rsp),%xmm1
movsd  0x10(%rsp),%xmm2
movsd  0x40(%rsp),%xmm3
movsd  0x88(%rsp),%xmm4
movsd  0x50(%rsp),%xmm5
movsd  0x18(%rsp),%xmm6
movsd  0x68(%rsp),%xmm7
call   1030 <Det3x3@plt>
xorps  0xb83(%rip),%xmm0
movlps %xmm0,0x30(%rbx)
movsd  0x48(%rsp),%xmm0
movsd  %xmm0,(%rsp)
movsd  0x30(%rsp),%xmm0
movsd  0x28(%rsp),%xmm1
movsd  0x10(%rsp),%xmm2
movsd  0x38(%rsp),%xmm3
movsd  0x80(%rsp),%xmm4
movsd  0x58(%rsp),%xmm5
movsd  0x18(%rsp),%xmm6
movsd  0x68(%rsp),%xmm7
call   1030 <Det3x3@plt>
movsd  %xmm0,0x50(%rbx)
movsd  0x50(%rsp),%xmm0
movsd  %xmm0,(%rsp)
movsd  0x30(%rsp),%xmm0
movsd  0x28(%rsp),%xmm1
movsd  0x10(%rsp),%xmm2
movsd  0x38(%rsp),%xmm3
movsd  0x80(%rsp),%xmm4
movsd  0x58(%rsp),%xmm5
movsd  0x40(%rsp),%xmm6
movsd  0x88(%rsp),%xmm7
call   1030 <Det3x3@plt>
xorps  0xaea(%rip),%xmm0
movlps %xmm0,0x70(%rbx)
movsd  0x60(%rsp),%xmm0
movsd  %xmm0,(%rsp)
movsd  0x38(%rsp),%xmm0
movsd  0x80(%rsp),%xmm1
movsd  0x78(%rsp),%xmm2
movsd  0x40(%rsp),%xmm3
movsd  0x88(%rsp),%xmm4
movsd  0x70(%rsp),%xmm5
movsd  0x18(%rsp),%xmm6
movsd  0x68(%rsp),%xmm7
call   1030 <Det3x3@plt>
xorps  0xa99(%rip),%xmm0
movlps %xmm0,0x18(%rbx)
movsd  0x60(%rsp),%xmm0
movsd  %xmm0,(%rsp)
movsd  0x30(%rsp),%xmm0
movsd  0x28(%rsp),%xmm1
movsd  0x20(%rsp),%xmm2
movsd  0x40(%rsp),%xmm3
movsd  0x88(%rsp),%xmm4
movsd  0x70(%rsp),%xmm5
movsd  0x18(%rsp),%xmm6
movsd  0x68(%rsp),%xmm7
call   1030 <Det3x3@plt>
movsd  %xmm0,0x38(%rbx)
movsd  0x60(%rsp),%xmm0
movsd  %xmm0,(%rsp)
movsd  0x30(%rsp),%xmm0
movsd  0x28(%rsp),%xmm1
movsd  0x20(%rsp),%xmm2
movsd  0x38(%rsp),%xmm3
movsd  0x80(%rsp),%xmm4
movsd  0x78(%rsp),%xmm5
movsd  0x18(%rsp),%xmm6
movsd  0x68(%rsp),%xmm7
call   1030 <Det3x3@plt>
xorps  0xa03(%rip),%xmm0
movlps %xmm0,0x58(%rbx)
movsd  0x70(%rsp),%xmm0
movsd  %xmm0,(%rsp)
movsd  0x30(%rsp),%xmm0
movsd  0x28(%rsp),%xmm1
movsd  0x20(%rsp),%xmm2
movsd  0x38(%rsp),%xmm3
movsd  0x80(%rsp),%xmm4
movsd  0x78(%rsp),%xmm5
movsd  0x40(%rsp),%xmm6
movsd  0x88(%rsp),%xmm7
call   1030 <Det3x3@plt>
movsd  %xmm0,0x78(%rbx)
add    $0x90,%rsp
pop    %rbx
ret

LLVM IR (-O0):
define void @Adjoint44([4 x double]* %0, [4 x double]* %1) {
%3 = alloca [4 x double]*
%4 = alloca [4 x double]*
%5 = alloca double
%6 = alloca double
%7 = alloca double
%8 = alloca double
%9 = alloca double
%10 = alloca double
%11 = alloca double
%12 = alloca double
%13 = alloca double
%14 = alloca double
%15 = alloca double
%16 = alloca double
%17 = alloca double
%18 = alloca double
%19 = alloca double
%20 = alloca double
store [4 x double]* %0, [4 x double]** %3
store [4 x double]* %1, [4 x double]** %4
%21 = load [4 x double]*, [4 x double]** %3
%22 = getelementptr inbounds [4 x double], [4 x double]* %21, i64 0
%23 = getelementptr inbounds [4 x double], [4 x double]* %22, i64 0, i64 0
%24 = load double, double* %23
store double %24, double* %5
%25 = load [4 x double]*, [4 x double]** %3
%26 = getelementptr inbounds [4 x double], [4 x double]* %25, i64 0
%27 = getelementptr inbounds [4 x double], [4 x double]* %26, i64 0, i64 1
%28 = load double, double* %27
store double %28, double* %9
%29 = load [4 x double]*, [4 x double]** %3
%30 = getelementptr inbounds [4 x double], [4 x double]* %29, i64 0
%31 = getelementptr inbounds [4 x double], [4 x double]* %30, i64 0, i64 2
%32 = load double, double* %31
store double %32, double* %13
%33 = load [4 x double]*, [4 x double]** %3
%34 = getelementptr inbounds [4 x double], [4 x double]* %33, i64 0
%35 = getelementptr inbounds [4 x double], [4 x double]* %34, i64 0, i64 3
%36 = load double, double* %35
store double %36, double* %17
%37 = load [4 x double]*, [4 x double]** %3
%38 = getelementptr inbounds [4 x double], [4 x double]* %37, i64 1
%39 = getelementptr inbounds [4 x double], [4 x double]* %38, i64 0, i64 0
%40 = load double, double* %39
store double %40, double* %6
%41 = load [4 x double]*, [4 x double]** %3
%42 = getelementptr inbounds [4 x double], [4 x double]* %41, i64 1
%43 = getelementptr inbounds [4 x double], [4 x double]* %42, i64 0, i64 1
%44 = load double, double* %43
store double %44, double* %10
%45 = load [4 x double]*, [4 x double]** %3
%46 = getelementptr inbounds [4 x double], [4 x double]* %45, i64 1
%47 = getelementptr inbounds [4 x double], [4 x double]* %46, i64 0, i64 2
%48 = load double, double* %47
store double %48, double* %14
%49 = load [4 x double]*, [4 x double]** %3
%50 = getelementptr inbounds [4 x double], [4 x double]* %49, i64 1
%51 = getelementptr inbounds [4 x double], [4 x double]* %50, i64 0, i64 3
%52 = load double, double* %51
store double %52, double* %18
%53 = load [4 x double]*, [4 x double]** %3
%54 = getelementptr inbounds [4 x double], [4 x double]* %53, i64 2
%55 = getelementptr inbounds [4 x double], [4 x double]* %54, i64 0, i64 0
%56 = load double, double* %55
store double %56, double* %7
%57 = load [4 x double]*, [4 x double]** %3
%58 = getelementptr inbounds [4 x double], [4 x double]* %57, i64 2
%59 = getelementptr inbounds [4 x double], [4 x double]* %58, i64 0, i64 1
%60 = load double, double* %59
store double %60, double* %11
%61 = load [4 x double]*, [4 x double]** %3
%62 = getelementptr inbounds [4 x double], [4 x double]* %61, i64 2
%63 = getelementptr inbounds [4 x double], [4 x double]* %62, i64 0, i64 2
%64 = load double, double* %63
store double %64, double* %15
%65 = load [4 x double]*, [4 x double]** %3
%66 = getelementptr inbounds [4 x double], [4 x double]* %65, i64 2
%67 = getelementptr inbounds [4 x double], [4 x double]* %66, i64 0, i64 3
%68 = load double, double* %67
store double %68, double* %19
%69 = load [4 x double]*, [4 x double]** %3
%70 = getelementptr inbounds [4 x double], [4 x double]* %69, i64 3
%71 = getelementptr inbounds [4 x double], [4 x double]* %70, i64 0, i64 0
%72 = load double, double* %71
store double %72, double* %8
%73 = load [4 x double]*, [4 x double]** %3
%74 = getelementptr inbounds [4 x double], [4 x double]* %73, i64 3
%75 = getelementptr inbounds [4 x double], [4 x double]* %74, i64 0, i64 1
%76 = load double, double* %75
store double %76, double* %12
%77 = load [4 x double]*, [4 x double]** %3
%78 = getelementptr inbounds [4 x double], [4 x double]* %77, i64 3
%79 = getelementptr inbounds [4 x double], [4 x double]* %78, i64 0, i64 2
%80 = load double, double* %79
store double %80, double* %16
%81 = load [4 x double]*, [4 x double]** %3
%82 = getelementptr inbounds [4 x double], [4 x double]* %81, i64 3
%83 = getelementptr inbounds [4 x double], [4 x double]* %82, i64 0, i64 3
%84 = load double, double* %83
store double %84, double* %20
%85 = load double, double* %10
%86 = load double, double* %11
%87 = load double, double* %12
%88 = load double, double* %14
%89 = load double, double* %15
%90 = load double, double* %16
%91 = load double, double* %18
%92 = load double, double* %19
%93 = load double, double* %20
%94 = call double @Det3x3(double %85, double %86, double %87, double %88, double %89, double %90, double %91, double %92, double %93)
%95 = load [4 x double]*, [4 x double]** %4
%96 = getelementptr inbounds [4 x double], [4 x double]* %95, i64 0
%97 = getelementptr inbounds [4 x double], [4 x double]* %96, i64 0, i64 0
store double %94, double* %97
%98 = load double, double* %6
%99 = load double, double* %7
%100 = load double, double* %8
%101 = load double, double* %14
%102 = load double, double* %15
%103 = load double, double* %16
%104 = load double, double* %18
%105 = load double, double* %19
%106 = load double, double* %20
%107 = call double @Det3x3(double %98, double %99, double %100, double %101, double %102, double %103, double %104, double %105, double %106)
%108 = fneg double %107
%109 = load [4 x double]*, [4 x double]** %4
%110 = getelementptr inbounds [4 x double], [4 x double]* %109, i64 1
%111 = getelementptr inbounds [4 x double], [4 x double]* %110, i64 0, i64 0
store double %108, double* %111
%112 = load double, double* %6
%113 = load double, double* %7
%114 = load double, double* %8
%115 = load double, double* %10
%116 = load double, double* %11
%117 = load double, double* %12
%118 = load double, double* %18
%119 = load double, double* %19
%120 = load double, double* %20
%121 = call double @Det3x3(double %112, double %113, double %114, double %115, double %116, double %117, double %118, double %119, double %120)
%122 = load [4 x double]*, [4 x double]** %4
%123 = getelementptr inbounds [4 x double], [4 x double]* %122, i64 2
%124 = getelementptr inbounds [4 x double], [4 x double]* %123, i64 0, i64 0
store double %121, double* %124
%125 = load double, double* %6
%126 = load double, double* %7
%127 = load double, double* %8
%128 = load double, double* %10
%129 = load double, double* %11
%130 = load double, double* %12
%131 = load double, double* %14
%132 = load double, double* %15
%133 = load double, double* %16
%134 = call double @Det3x3(double %125, double %126, double %127, double %128, double %129, double %130, double %131, double %132, double %133)
%135 = fneg double %134
%136 = load [4 x double]*, [4 x double]** %4
%137 = getelementptr inbounds [4 x double], [4 x double]* %136, i64 3
%138 = getelementptr inbounds [4 x double], [4 x double]* %137, i64 0, i64 0
store double %135, double* %138
%139 = load double, double* %9
%140 = load double, double* %11
%141 = load double, double* %12
%142 = load double, double* %13
%143 = load double, double* %15
%144 = load double, double* %16
%145 = load double, double* %17
%146 = load double, double* %19
%147 = load double, double* %20
%148 = call double @Det3x3(double %139, double %140, double %141, double %142, double %143, double %144, double %145, double %146, double %147)
%149 = fneg double %148
%150 = load [4 x double]*, [4 x double]** %4
%151 = getelementptr inbounds [4 x double], [4 x double]* %150, i64 0
%152 = getelementptr inbounds [4 x double], [4 x double]* %151, i64 0, i64 1
store double %149, double* %152
%153 = load double, double* %5
%154 = load double, double* %7
%155 = load double, double* %8
%156 = load double, double* %13
%157 = load double, double* %15
%158 = load double, double* %16
%159 = load double, double* %17
%160 = load double, double* %19
%161 = load double, double* %20
%162 = call double @Det3x3(double %153, double %154, double %155, double %156, double %157, double %158, double %159, double %160, double %161)
%163 = load [4 x double]*, [4 x double]** %4
%164 = getelementptr inbounds [4 x double], [4 x double]* %163, i64 1
%165 = getelementptr inbounds [4 x double], [4 x double]* %164, i64 0, i64 1
store double %162, double* %165
%166 = load double, double* %5
%167 = load double, double* %7
%168 = load double, double* %8
%169 = load double, double* %9
%170 = load double, double* %11
%171 = load double, double* %12
%172 = load double, double* %17
%173 = load double, double* %19
%174 = load double, double* %20
%175 = call double @Det3x3(double %166, double %167, double %168, double %169, double %170, double %171, double %172, double %173, double %174)
%176 = fneg double %175
%177 = load [4 x double]*, [4 x double]** %4
%178 = getelementptr inbounds [4 x double], [4 x double]* %177, i64 2
%179 = getelementptr inbounds [4 x double], [4 x double]* %178, i64 0, i64 1
store double %176, double* %179
%180 = load double, double* %5
%181 = load double, double* %7
%182 = load double, double* %8
%183 = load double, double* %9
%184 = load double, double* %11
%185 = load double, double* %12
%186 = load double, double* %13
%187 = load double, double* %15
%188 = load double, double* %16
%189 = call double @Det3x3(double %180, double %181, double %182, double %183, double %184, double %185, double %186, double %187, double %188)
%190 = load [4 x double]*, [4 x double]** %4
%191 = getelementptr inbounds [4 x double], [4 x double]* %190, i64 3
%192 = getelementptr inbounds [4 x double], [4 x double]* %191, i64 0, i64 1
store double %189, double* %192
%193 = load double, double* %9
%194 = load double, double* %10
%195 = load double, double* %12
%196 = load double, double* %13
%197 = load double, double* %14
%198 = load double, double* %16
%199 = load double, double* %17
%200 = load double, double* %18
%201 = load double, double* %20
%202 = call double @Det3x3(double %193, double %194, double %195, double %196, double %197, double %198, double %199, double %200, double %201)
%203 = load [4 x double]*, [4 x double]** %4
%204 = getelementptr inbounds [4 x double], [4 x double]* %203, i64 0
%205 = getelementptr inbounds [4 x double], [4 x double]* %204, i64 0, i64 2
store double %202, double* %205
%206 = load double, double* %5
%207 = load double, double* %6
%208 = load double, double* %8
%209 = load double, double* %13
%210 = load double, double* %14
%211 = load double, double* %16
%212 = load double, double* %17
%213 = load double, double* %18
%214 = load double, double* %20
%215 = call double @Det3x3(double %206, double %207, double %208, double %209, double %210, double %211, double %212, double %213, double %214)
%216 = fneg double %215
%217 = load [4 x double]*, [4 x double]** %4
%218 = getelementptr inbounds [4 x double], [4 x double]* %217, i64 1
%219 = getelementptr inbounds [4 x double], [4 x double]* %218, i64 0, i64 2
store double %216, double* %219
%220 = load double, double* %5
%221 = load double, double* %6
%222 = load double, double* %8
%223 = load double, double* %9
%224 = load double, double* %10
%225 = load double, double* %12
%226 = load double, double* %17
%227 = load double, double* %18
%228 = load double, double* %20
%229 = call double @Det3x3(double %220, double %221, double %222, double %223, double %224, double %225, double %226, double %227, double %228)
%230 = load [4 x double]*, [4 x double]** %4
%231 = getelementptr inbounds [4 x double], [4 x double]* %230, i64 2
%232 = getelementptr inbounds [4 x double], [4 x double]* %231, i64 0, i64 2
store double %229, double* %232
%233 = load double, double* %5
%234 = load double, double* %6
%235 = load double, double* %8
%236 = load double, double* %9
%237 = load double, double* %10
%238 = load double, double* %12
%239 = load double, double* %13
%240 = load double, double* %14
%241 = load double, double* %16
%242 = call double @Det3x3(double %233, double %234, double %235, double %236, double %237, double %238, double %239, double %240, double %241)
%243 = fneg double %242
%244 = load [4 x double]*, [4 x double]** %4
%245 = getelementptr inbounds [4 x double], [4 x double]* %244, i64 3
%246 = getelementptr inbounds [4 x double], [4 x double]* %245, i64 0, i64 2
store double %243, double* %246
%247 = load double, double* %9
%248 = load double, double* %10
%249 = load double, double* %11
%250 = load double, double* %13
%251 = load double, double* %14
%252 = load double, double* %15
%253 = load double, double* %17
%254 = load double, double* %18
%255 = load double, double* %19
%256 = call double @Det3x3(double %247, double %248, double %249, double %250, double %251, double %252, double %253, double %254, double %255)
%257 = fneg double %256
%258 = load [4 x double]*, [4 x double]** %4
%259 = getelementptr inbounds [4 x double], [4 x double]* %258, i64 0
%260 = getelementptr inbounds [4 x double], [4 x double]* %259, i64 0, i64 3
store double %257, double* %260
%261 = load double, double* %5
%262 = load double, double* %6
%263 = load double, double* %7
%264 = load double, double* %13
%265 = load double, double* %14
%266 = load double, double* %15
%267 = load double, double* %17
%268 = load double, double* %18
%269 = load double, double* %19
%270 = call double @Det3x3(double %261, double %262, double %263, double %264, double %265, double %266, double %267, double %268, double %269)
%271 = load [4 x double]*, [4 x double]** %4
%272 = getelementptr inbounds [4 x double], [4 x double]* %271, i64 1
%273 = getelementptr inbounds [4 x double], [4 x double]* %272, i64 0, i64 3
store double %270, double* %273
%274 = load double, double* %5
%275 = load double, double* %6
%276 = load double, double* %7
%277 = load double, double* %9
%278 = load double, double* %10
%279 = load double, double* %11
%280 = load double, double* %17
%281 = load double, double* %18
%282 = load double, double* %19
%283 = call double @Det3x3(double %274, double %275, double %276, double %277, double %278, double %279, double %280, double %281, double %282)
%284 = fneg double %283
%285 = load [4 x double]*, [4 x double]** %4
%286 = getelementptr inbounds [4 x double], [4 x double]* %285, i64 2
%287 = getelementptr inbounds [4 x double], [4 x double]* %286, i64 0, i64 3
store double %284, double* %287
%288 = load double, double* %5
%289 = load double, double* %6
%290 = load double, double* %7
%291 = load double, double* %9
%292 = load double, double* %10
%293 = load double, double* %11
%294 = load double, double* %13
%295 = load double, double* %14
%296 = load double, double* %15
%297 = call double @Det3x3(double %288, double %289, double %290, double %291, double %292, double %293, double %294, double %295, double %296)
%298 = load [4 x double]*, [4 x double]** %4
%299 = getelementptr inbounds [4 x double], [4 x double]* %298, i64 3
%300 = getelementptr inbounds [4 x double], [4 x double]* %299, i64 0, i64 3
store double %297, double* %300
ret void
}

LLVM IR (-O2):
define void @Adjoint44([4 x double]* nocapture %0, [4 x double]* nocapture writeonly %1) {
%3 = getelementptr inbounds [4 x double], [4 x double]* %0, i64 0, i64 0
%4 = load double, double* %3
%5 = getelementptr inbounds [4 x double], [4 x double]* %0, i64 0, i64 1
%6 = load double, double* %5
%7 = getelementptr inbounds [4 x double], [4 x double]* %0, i64 0, i64 2
%8 = load double, double* %7
%9 = getelementptr inbounds [4 x double], [4 x double]* %0, i64 0, i64 3
%10 = load double, double* %9
%11 = getelementptr inbounds [4 x double], [4 x double]* %0, i64 1, i64 0
%12 = load double, double* %11
%13 = getelementptr inbounds [4 x double], [4 x double]* %0, i64 1, i64 1
%14 = load double, double* %13
%15 = getelementptr inbounds [4 x double], [4 x double]* %0, i64 1, i64 2
%16 = load double, double* %15
%17 = getelementptr inbounds [4 x double], [4 x double]* %0, i64 1, i64 3
%18 = load double, double* %17
%19 = getelementptr inbounds [4 x double], [4 x double]* %0, i64 2, i64 0
%20 = load double, double* %19
%21 = getelementptr inbounds [4 x double], [4 x double]* %0, i64 2, i64 1
%22 = load double, double* %21
%23 = getelementptr inbounds [4 x double], [4 x double]* %0, i64 2, i64 2
%24 = load double, double* %23
%25 = getelementptr inbounds [4 x double], [4 x double]* %0, i64 2, i64 3
%26 = load double, double* %25
%27 = getelementptr inbounds [4 x double], [4 x double]* %0, i64 3, i64 0
%28 = load double, double* %27
%29 = getelementptr inbounds [4 x double], [4 x double]* %0, i64 3, i64 1
%30 = load double, double* %29
%31 = getelementptr inbounds [4 x double], [4 x double]* %0, i64 3, i64 2
%32 = load double, double* %31
%33 = getelementptr inbounds [4 x double], [4 x double]* %0, i64 3, i64 3
%34 = load double, double* %33
%35 = tail call double @Det3x3(double %14, double %22, double %30, double %16, double %24, double %32, double %18, double %26, double %34)
%36 = getelementptr inbounds [4 x double], [4 x double]* %1, i64 0, i64 0
store double %35, double* %36
%37 = tail call double @Det3x3(double %12, double %20, double %28, double %16, double %24, double %32, double %18, double %26, double %34)
%38 = fneg double %37
%39 = getelementptr inbounds [4 x double], [4 x double]* %1, i64 1, i64 0
store double %38, double* %39
%40 = tail call double @Det3x3(double %12, double %20, double %28, double %14, double %22, double %30, double %18, double %26, double %34)
%41 = getelementptr inbounds [4 x double], [4 x double]* %1, i64 2, i64 0
store double %40, double* %41
%42 = tail call double @Det3x3(double %12, double %20, double %28, double %14, double %22, double %30, double %16, double %24, double %32)
%43 = fneg double %42
%44 = getelementptr inbounds [4 x double], [4 x double]* %1, i64 3, i64 0
store double %43, double* %44
%45 = tail call double @Det3x3(double %6, double %22, double %30, double %8, double %24, double %32, double %10, double %26, double %34)
%46 = fneg double %45
%47 = getelementptr inbounds [4 x double], [4 x double]* %1, i64 0, i64 1
store double %46, double* %47
%48 = tail call double @Det3x3(double %4, double %20, double %28, double %8, double %24, double %32, double %10, double %26, double %34)
%49 = getelementptr inbounds [4 x double], [4 x double]* %1, i64 1, i64 1
store double %48, double* %49
%50 = tail call double @Det3x3(double %4, double %20, double %28, double %6, double %22, double %30, double %10, double %26, double %34)
%51 = fneg double %50
%52 = getelementptr inbounds [4 x double], [4 x double]* %1, i64 2, i64 1
store double %51, double* %52
%53 = tail call double @Det3x3(double %4, double %20, double %28, double %6, double %22, double %30, double %8, double %24, double %32)
%54 = getelementptr inbounds [4 x double], [4 x double]* %1, i64 3, i64 1
store double %53, double* %54
%55 = tail call double @Det3x3(double %6, double %14, double %30, double %8, double %16, double %32, double %10, double %18, double %34)
%56 = getelementptr inbounds [4 x double], [4 x double]* %1, i64 0, i64 2
store double %55, double* %56
%57 = tail call double @Det3x3(double %4, double %12, double %28, double %8, double %16, double %32, double %10, double %18, double %34)
%58 = fneg double %57
%59 = getelementptr inbounds [4 x double], [4 x double]* %1, i64 1, i64 2
store double %58, double* %59
%60 = tail call double @Det3x3(double %4, double %12, double %28, double %6, double %14, double %30, double %10, double %18, double %34)
%61 = getelementptr inbounds [4 x double], [4 x double]* %1, i64 2, i64 2
store double %60, double* %61
%62 = tail call double @Det3x3(double %4, double %12, double %28, double %6, double %14, double %30, double %8, double %16, double %32)
%63 = fneg double %62
%64 = getelementptr inbounds [4 x double], [4 x double]* %1, i64 3, i64 2
store double %63, double* %64
%65 = tail call double @Det3x3(double %6, double %14, double %22, double %8, double %16, double %24, double %10, double %18, double %26)
%66 = fneg double %65
%67 = getelementptr inbounds [4 x double], [4 x double]* %1, i64 0, i64 3
store double %66, double* %67
%68 = tail call double @Det3x3(double %4, double %12, double %20, double %8, double %16, double %24, double %10, double %18, double %26)
%69 = getelementptr inbounds [4 x double], [4 x double]* %1, i64 1, i64 3
store double %68, double* %69
%70 = tail call double @Det3x3(double %4, double %12, double %20, double %6, double %14, double %22, double %10, double %18, double %26)
%71 = fneg double %70
%72 = getelementptr inbounds [4 x double], [4 x double]* %1, i64 2, i64 3
store double %71, double* %72
%73 = tail call double @Det3x3(double %4, double %12, double %20, double %6, double %14, double %22, double %8, double %16, double %24)
%74 = getelementptr inbounds [4 x double], [4 x double]* %1, i64 3, i64 3
store double %73, double* %74
ret void
}