void tetorthocenter(a, b, c, d, orthocenter, cnum) double a[4];
double b[4];
double c[4];
double d[4];
double orthocenter[3];
double *cnum;
{
  double xba, yba, zba, xca, yca, zca, xda, yda, zda, wba, wca, wda;
  double balength, calength, dalength;
  double xcrosscd, ycrosscd, zcrosscd;
  double xcrossdb, ycrossdb, zcrossdb;
  double xcrossbc, ycrossbc, zcrossbc;
  double denominator;
  double xcirca, ycirca, zcirca;
  double wa, wb, wc, wd;
  wa = a[0] * a[0] + a[1] * a[1] + a[2] * a[2] - a[3];
  wb = b[0] * b[0] + b[1] * b[1] + b[2] * b[2] - b[3];
  wc = c[0] * c[0] + c[1] * c[1] + c[2] * c[2] - c[3];
  wd = d[0] * d[0] + d[1] * d[1] + d[2] * d[2] - d[3];
  xba = b[0] - a[0];
  yba = b[1] - a[1];
  zba = b[2] - a[2];
  wba = wb - wa;
  xca = c[0] - a[0];
  yca = c[1] - a[1];
  zca = c[2] - a[2];
  wca = wc - wa;
  xda = d[0] - a[0];
  yda = d[1] - a[1];
  zda = d[2] - a[2];
  wda = wd - wa;
  balength = xba * xba + yba * yba + zba * zba - wba;
  calength = xca * xca + yca * yca + zca * zca - wca;
  dalength = xda * xda + yda * yda + zda * zda - wda;
  xcrosscd = yca * zda - yda * zca;
  ycrosscd = zca * xda - zda * xca;
  zcrosscd = xca * yda - xda * yca;
  xcrossdb = yda * zba - yba * zda;
  ycrossdb = zda * xba - zba * xda;
  zcrossdb = xda * yba - xba * yda;
  xcrossbc = yba * zca - yca * zba;
  ycrossbc = zba * xca - zca * xba;
  zcrossbc = xba * yca - xca * yba;
  *cnum = orient3d(b, c, d, a);
  denominator = 0.5 / (*cnum);
  xcirca = (balength * xcrosscd + calength * xcrossdb + dalength * xcrossbc) *
           denominator;
  ycirca = (balength * ycrosscd + calength * ycrossdb + dalength * ycrossbc) *
           denominator;
  zcirca = (balength * zcrosscd + calength * zcrossdb + dalength * zcrossbc) *
           denominator;
  orthocenter[0] = xcirca;
  orthocenter[1] = ycirca;
  orthocenter[2] = zcirca;
}


x86 assembly (clang, -O0):
<tetorthocenter>:
push   %rbp
mov    %rsp,%rbp
sub    $0x130,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8,-0x28(%rbp)
mov    %r9,-0x30(%rbp)
mov    -0x8(%rbp),%rax
movsd  (%rax),%xmm1
mov    -0x8(%rbp),%rax
movsd  (%rax),%xmm2
mov    -0x8(%rbp),%rax
movsd  0x8(%rax),%xmm0
mov    -0x8(%rbp),%rax
mulsd  0x8(%rax),%xmm0
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
mov    -0x8(%rbp),%rax
movsd  0x10(%rax),%xmm0
mov    -0x8(%rbp),%rax
movsd  0x10(%rax),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
subsd  0x18(%rax),%xmm0
movsd  %xmm0,-0x118(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm1
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm2
mov    -0x10(%rbp),%rax
movsd  0x8(%rax),%xmm0
mov    -0x10(%rbp),%rax
mulsd  0x8(%rax),%xmm0
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
mov    -0x10(%rbp),%rax
movsd  0x10(%rax),%xmm0
mov    -0x10(%rbp),%rax
movsd  0x10(%rax),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
subsd  0x18(%rax),%xmm0
movsd  %xmm0,-0x120(%rbp)
ff
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm1
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm2
mov    -0x18(%rbp),%rax
movsd  0x8(%rax),%xmm0
mov    -0x18(%rbp),%rax
mulsd  0x8(%rax),%xmm0
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
mov    -0x18(%rbp),%rax
movsd  0x10(%rax),%xmm0
mov    -0x18(%rbp),%rax
movsd  0x10(%rax),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
subsd  0x18(%rax),%xmm0
movsd  %xmm0,-0x128(%rbp)
ff
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm1
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm2
mov    -0x20(%rbp),%rax
movsd  0x8(%rax),%xmm0
mov    -0x20(%rbp),%rax
mulsd  0x8(%rax),%xmm0
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
mov    -0x20(%rbp),%rax
movsd  0x10(%rax),%xmm0
mov    -0x20(%rbp),%rax
movsd  0x10(%rax),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x20(%rbp),%rax
subsd  0x18(%rax),%xmm0
movsd  %xmm0,-0x130(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x8(%rbp),%rax
subsd  (%rax),%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x8(%rax),%xmm0
mov    -0x8(%rbp),%rax
subsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x10(%rax),%xmm0
mov    -0x8(%rbp),%rax
subsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  -0x120(%rbp),%xmm0
ff
subsd  -0x118(%rbp),%xmm0
ff
movsd  %xmm0,-0x80(%rbp)
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x8(%rbp),%rax
subsd  (%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x8(%rax),%xmm0
mov    -0x8(%rbp),%rax
subsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x10(%rax),%xmm0
mov    -0x8(%rbp),%rax
subsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x128(%rbp),%xmm0
ff
subsd  -0x118(%rbp),%xmm0
ff
movsd  %xmm0,-0x88(%rbp)
ff
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x8(%rbp),%rax
subsd  (%rax),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x8(%rax),%xmm0
mov    -0x8(%rbp),%rax
subsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x10(%rax),%xmm0
mov    -0x8(%rbp),%rax
subsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x130(%rbp),%xmm0
ff
subsd  -0x118(%rbp),%xmm0
ff
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x38(%rbp),%xmm1
movsd  -0x38(%rbp),%xmm2
movsd  -0x40(%rbp),%xmm0
mulsd  -0x40(%rbp),%xmm0
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  -0x48(%rbp),%xmm0
movsd  -0x48(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
subsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x50(%rbp),%xmm1
movsd  -0x50(%rbp),%xmm2
movsd  -0x58(%rbp),%xmm0
mulsd  -0x58(%rbp),%xmm0
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  -0x60(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
subsd  -0x88(%rbp),%xmm0
ff
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0x68(%rbp),%xmm1
movsd  -0x68(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm0
mulsd  -0x70(%rbp),%xmm0
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  -0x78(%rbp),%xmm0
movsd  -0x78(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
subsd  -0x90(%rbp),%xmm0
ff
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0x58(%rbp),%xmm0
movsd  -0x78(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
mulsd  -0x60(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0x60(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0x78(%rbp),%xmm1
mulsd  -0x50(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm1
mulsd  -0x58(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0x70(%rbp),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0x40(%rbp),%xmm1
mulsd  -0x78(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  -0x78(%rbp),%xmm0
movsd  -0x38(%rbp),%xmm2
movsd  -0x48(%rbp),%xmm1
mulsd  -0x68(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0x68(%rbp),%xmm0
movsd  -0x40(%rbp),%xmm2
movsd  -0x38(%rbp),%xmm1
mulsd  -0x70(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0x40(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x58(%rbp),%xmm1
mulsd  -0x48(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xe0(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  -0x38(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xe8(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x50(%rbp),%xmm1
mulsd  -0x40(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xf0(%rbp)
ff
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
mov    -0x20(%rbp),%rdx
mov    -0x8(%rbp),%rcx
mov    $0x0,%al
call   1030 <orient3d@plt>
cvtsi2sd %eax,%xmm0
mov    -0x30(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x30(%rbp),%rax
movsd  0x972(%rip),%xmm0
divsd  (%rax),%xmm0
movsd  %xmm0,-0xf8(%rbp)
ff
movsd  -0x98(%rbp),%xmm1
ff
movsd  -0xb0(%rbp),%xmm2
ff
movsd  -0xa0(%rbp),%xmm0
ff
mulsd  -0xc8(%rbp),%xmm0
ff
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  -0xa8(%rbp),%xmm0
ff
movsd  -0xe0(%rbp),%xmm2
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mulsd  -0xf8(%rbp),%xmm0
ff
movsd  %xmm0,-0x100(%rbp)
ff
movsd  -0x98(%rbp),%xmm1
ff
movsd  -0xb8(%rbp),%xmm2
ff
movsd  -0xa0(%rbp),%xmm0
ff
mulsd  -0xd0(%rbp),%xmm0
ff
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  -0xa8(%rbp),%xmm0
ff
movsd  -0xe8(%rbp),%xmm2
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mulsd  -0xf8(%rbp),%xmm0
ff
movsd  %xmm0,-0x108(%rbp)
ff
movsd  -0x98(%rbp),%xmm1
ff
movsd  -0xc0(%rbp),%xmm2
ff
movsd  -0xa0(%rbp),%xmm0
ff
mulsd  -0xd8(%rbp),%xmm0
ff
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  -0xa8(%rbp),%xmm0
ff
movsd  -0xf0(%rbp),%xmm2
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mulsd  -0xf8(%rbp),%xmm0
ff
movsd  %xmm0,-0x110(%rbp)
ff
movsd  -0x100(%rbp),%xmm0
ff
mov    -0x28(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x108(%rbp),%xmm0
ff
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x8(%rax)
movsd  -0x110(%rbp),%xmm0
ff
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x10(%rax)
add    $0x130,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<tetorthocenter>:
push   %r14
push   %rbx
sub    $0x98,%rsp
mov    %r9,%r14
mov    %r8,%rbx
mov    %rdi,%rax
movsd  (%rdi),%xmm4
movupd 0x8(%rdi),%xmm1
movapd %xmm1,%xmm2
mulsd  %xmm1,%xmm2
movsd  (%rsi),%xmm8
movapd %xmm8,%xmm5
subsd  %xmm4,%xmm8
movapd %xmm4,%xmm0
mulsd  %xmm4,%xmm0
addsd  %xmm2,%xmm0
movapd %xmm1,%xmm7
unpckhpd %xmm1,%xmm7
mulsd  %xmm7,%xmm7
addsd  %xmm0,%xmm7
subsd  0x18(%rdi),%xmm7
movupd 0x8(%rsi),%xmm9
movapd %xmm9,%xmm0
mulsd  %xmm9,%xmm0
mulsd  %xmm5,%xmm5
addsd  %xmm0,%xmm5
movapd %xmm9,%xmm3
unpckhpd %xmm9,%xmm3
mulsd  %xmm3,%xmm3
addsd  %xmm5,%xmm3
subsd  0x18(%rsi),%xmm3
movsd  0x8(%rdx),%xmm2
movapd %xmm2,%xmm0
movsd  0x8(%rcx),%xmm11
movapd %xmm11,%xmm5
subpd  %xmm1,%xmm9
subsd  %xmm1,%xmm2
subsd  %xmm1,%xmm11
shufpd $0x1,%xmm4,%xmm1
movsd  (%rdx),%xmm6
mulsd  %xmm0,%xmm0
movsd  0x10(%rdx),%xmm15
movapd %xmm15,%xmm12
unpcklpd %xmm6,%xmm15
mulsd  %xmm6,%xmm6
addsd  %xmm0,%xmm6
mulsd  %xmm12,%xmm12
addsd  %xmm6,%xmm12
subsd  0x18(%rdx),%xmm12
movsd  (%rcx),%xmm4
mulsd  %xmm5,%xmm5
movapd %xmm4,%xmm0
mulsd  %xmm4,%xmm0
addsd  %xmm5,%xmm0
movsd  0x10(%rcx),%xmm5
movapd %xmm5,%xmm14
mulsd  %xmm5,%xmm14
addsd  %xmm0,%xmm14
subsd  0x18(%rcx),%xmm14
unpcklpd %xmm4,%xmm5
subsd  %xmm7,%xmm3
subpd  %xmm1,%xmm15
subsd  %xmm7,%xmm12
subpd  %xmm1,%xmm5
subsd  %xmm7,%xmm14
movapd %xmm9,%xmm7
movapd %xmm9,%xmm1
mulsd  %xmm9,%xmm1
movapd %xmm2,%xmm0
movapd %xmm2,%xmm10
movapd %xmm15,%xmm6
unpckhpd %xmm15,%xmm6
movapd %xmm11,(%rsp)
movapd %xmm11,%xmm2
movapd %xmm6,%xmm4
mulsd  %xmm11,%xmm4
movapd %xmm4,0x60(%rsp)
shufpd $0x1,%xmm8,%xmm7
mulsd  %xmm8,%xmm11
movapd %xmm0,%xmm4
movapd %xmm0,%xmm13
mulsd  %xmm8,%xmm0
movapd %xmm0,0x50(%rsp)
mulsd  %xmm8,%xmm8
addsd  %xmm1,%xmm8
movapd %xmm2,%xmm0
unpcklpd %xmm5,%xmm0
movapd %xmm15,%xmm2
mulpd  %xmm0,%xmm2
unpcklpd %xmm15,%xmm4
mulpd  %xmm7,%xmm0
movapd %xmm0,0x40(%rsp)
mulpd  %xmm4,%xmm7
mulpd  %xmm5,%xmm4
movapd %xmm4,0x30(%rsp)
movapd %xmm5,%xmm1
movapd %xmm5,0x20(%rsp)
mulpd  %xmm9,%xmm5
unpckhpd %xmm1,%xmm1
mulsd  %xmm1,%xmm13
movapd %xmm1,%xmm4
mulsd  %xmm9,%xmm1
movapd %xmm15,0x10(%rsp)
mulpd  %xmm9,%xmm15
movapd %xmm6,%xmm0
mulsd  %xmm9,%xmm6
unpckhpd %xmm9,%xmm9
mulsd  %xmm9,%xmm9
addsd  %xmm8,%xmm9
subsd  %xmm3,%xmm9
movapd %xmm9,0x80(%rsp)
mulsd  %xmm10,%xmm10
mulsd  %xmm0,%xmm0
addsd  %xmm10,%xmm0
movapd 0x10(%rsp),%xmm3
mulsd  %xmm3,%xmm3
addsd  %xmm0,%xmm3
subsd  %xmm12,%xmm3
movapd %xmm3,0x10(%rsp)
movapd (%rsp),%xmm0
mulsd  %xmm0,%xmm0
mulsd  %xmm4,%xmm4
addsd  %xmm0,%xmm4
movapd 0x20(%rsp),%xmm0
mulsd  %xmm0,%xmm0
addsd  %xmm4,%xmm0
subsd  %xmm14,%xmm0
movapd %xmm0,0x20(%rsp)
movapd 0x30(%rsp),%xmm0
subpd  %xmm2,%xmm0
movapd %xmm0,0x30(%rsp)
movapd 0x60(%rsp),%xmm0
subsd  %xmm13,%xmm0
movapd %xmm0,0x60(%rsp)
movapd 0x40(%rsp),%xmm0
subpd  %xmm5,%xmm0
movapd %xmm0,0x40(%rsp)
subsd  %xmm11,%xmm1
movapd %xmm1,(%rsp)
subpd  %xmm7,%xmm15
movapd %xmm15,0x70(%rsp)
movapd 0x50(%rsp),%xmm0
subsd  %xmm6,%xmm0
movapd %xmm0,0x50(%rsp)
mov    %rsi,%rdi
mov    %rdx,%rsi
mov    %rcx,%rdx
mov    %rax,%rcx
xor    %eax,%eax
call   1030 <orient3d@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movsd  %xmm0,(%r14)
movsd  0xc17(%rip),%xmm1
divsd  %xmm0,%xmm1
movapd 0x10(%rsp),%xmm5
movapd %xmm5,%xmm0
unpcklpd %xmm5,%xmm0
mulpd  0x40(%rsp),%xmm0
movapd 0x80(%rsp),%xmm4
movapd %xmm4,%xmm2
unpcklpd %xmm4,%xmm2
mulpd  0x30(%rsp),%xmm2
addpd  %xmm0,%xmm2
movapd 0x20(%rsp),%xmm6
movapd %xmm6,%xmm0
unpcklpd %xmm6,%xmm0
mulpd  0x70(%rsp),%xmm0
addpd  %xmm2,%xmm0
movapd (%rsp),%xmm3
mulsd  %xmm5,%xmm3
movapd 0x60(%rsp),%xmm2
mulsd  %xmm4,%xmm2
addsd  %xmm3,%xmm2
movapd %xmm2,%xmm3
movapd 0x50(%rsp),%xmm2
mulsd  %xmm6,%xmm2
addsd  %xmm3,%xmm2
mulsd  %xmm1,%xmm2
unpcklpd %xmm1,%xmm1
mulpd  %xmm0,%xmm1
movupd %xmm1,(%rbx)
movsd  %xmm2,0x10(%rbx)
add    $0x98,%rsp
pop    %rbx
pop    %r14
ret

LLVM IR (-O0):
define void @tetorthocenter(double* %0, double* %1, double* %2, double* %3, double* %4, double* %5) {
%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
%21 = alloca double
%22 = alloca double
%23 = alloca double
%24 = alloca double
%25 = alloca double
%26 = alloca double
%27 = alloca double
%28 = alloca double
%29 = alloca double
%30 = alloca double
%31 = alloca double
%32 = alloca double
%33 = alloca double
%34 = alloca double
%35 = alloca double
%36 = alloca double
%37 = alloca double
%38 = alloca double
%39 = alloca double
%40 = alloca double
%41 = alloca double
%42 = alloca double
%43 = alloca double
%44 = alloca double
store double* %0, double** %7
store double* %1, double** %8
store double* %2, double** %9
store double* %3, double** %10
store double* %4, double** %11
store double* %5, double** %12
%45 = load double*, double** %7
%46 = getelementptr inbounds double, double* %45, i64 0
%47 = load double, double* %46
%48 = load double*, double** %7
%49 = getelementptr inbounds double, double* %48, i64 0
%50 = load double, double* %49
%51 = load double*, double** %7
%52 = getelementptr inbounds double, double* %51, i64 1
%53 = load double, double* %52
%54 = load double*, double** %7
%55 = getelementptr inbounds double, double* %54, i64 1
%56 = load double, double* %55
%57 = fmul double %53, %56
%58 = call double @llvm.fmuladd.f64(double %47, double %50, double %57)
%59 = load double*, double** %7
%60 = getelementptr inbounds double, double* %59, i64 2
%61 = load double, double* %60
%62 = load double*, double** %7
%63 = getelementptr inbounds double, double* %62, i64 2
%64 = load double, double* %63
%65 = call double @llvm.fmuladd.f64(double %61, double %64, double %58)
%66 = load double*, double** %7
%67 = getelementptr inbounds double, double* %66, i64 3
%68 = load double, double* %67
%69 = fsub double %65, %68
store double %69, double* %41
%70 = load double*, double** %8
%71 = getelementptr inbounds double, double* %70, i64 0
%72 = load double, double* %71
%73 = load double*, double** %8
%74 = getelementptr inbounds double, double* %73, i64 0
%75 = load double, double* %74
%76 = load double*, double** %8
%77 = getelementptr inbounds double, double* %76, i64 1
%78 = load double, double* %77
%79 = load double*, double** %8
%80 = getelementptr inbounds double, double* %79, i64 1
%81 = load double, double* %80
%82 = fmul double %78, %81
%83 = call double @llvm.fmuladd.f64(double %72, double %75, double %82)
%84 = load double*, double** %8
%85 = getelementptr inbounds double, double* %84, i64 2
%86 = load double, double* %85
%87 = load double*, double** %8
%88 = getelementptr inbounds double, double* %87, i64 2
%89 = load double, double* %88
%90 = call double @llvm.fmuladd.f64(double %86, double %89, double %83)
%91 = load double*, double** %8
%92 = getelementptr inbounds double, double* %91, i64 3
%93 = load double, double* %92
%94 = fsub double %90, %93
store double %94, double* %42
%95 = load double*, double** %9
%96 = getelementptr inbounds double, double* %95, i64 0
%97 = load double, double* %96
%98 = load double*, double** %9
%99 = getelementptr inbounds double, double* %98, i64 0
%100 = load double, double* %99
%101 = load double*, double** %9
%102 = getelementptr inbounds double, double* %101, i64 1
%103 = load double, double* %102
%104 = load double*, double** %9
%105 = getelementptr inbounds double, double* %104, i64 1
%106 = load double, double* %105
%107 = fmul double %103, %106
%108 = call double @llvm.fmuladd.f64(double %97, double %100, double %107)
%109 = load double*, double** %9
%110 = getelementptr inbounds double, double* %109, i64 2
%111 = load double, double* %110
%112 = load double*, double** %9
%113 = getelementptr inbounds double, double* %112, i64 2
%114 = load double, double* %113
%115 = call double @llvm.fmuladd.f64(double %111, double %114, double %108)
%116 = load double*, double** %9
%117 = getelementptr inbounds double, double* %116, i64 3
%118 = load double, double* %117
%119 = fsub double %115, %118
store double %119, double* %43
%120 = load double*, double** %10
%121 = getelementptr inbounds double, double* %120, i64 0
%122 = load double, double* %121
%123 = load double*, double** %10
%124 = getelementptr inbounds double, double* %123, i64 0
%125 = load double, double* %124
%126 = load double*, double** %10
%127 = getelementptr inbounds double, double* %126, i64 1
%128 = load double, double* %127
%129 = load double*, double** %10
%130 = getelementptr inbounds double, double* %129, i64 1
%131 = load double, double* %130
%132 = fmul double %128, %131
%133 = call double @llvm.fmuladd.f64(double %122, double %125, double %132)
%134 = load double*, double** %10
%135 = getelementptr inbounds double, double* %134, i64 2
%136 = load double, double* %135
%137 = load double*, double** %10
%138 = getelementptr inbounds double, double* %137, i64 2
%139 = load double, double* %138
%140 = call double @llvm.fmuladd.f64(double %136, double %139, double %133)
%141 = load double*, double** %10
%142 = getelementptr inbounds double, double* %141, i64 3
%143 = load double, double* %142
%144 = fsub double %140, %143
store double %144, double* %44
%145 = load double*, double** %8
%146 = getelementptr inbounds double, double* %145, i64 0
%147 = load double, double* %146
%148 = load double*, double** %7
%149 = getelementptr inbounds double, double* %148, i64 0
%150 = load double, double* %149
%151 = fsub double %147, %150
store double %151, double* %13
%152 = load double*, double** %8
%153 = getelementptr inbounds double, double* %152, i64 1
%154 = load double, double* %153
%155 = load double*, double** %7
%156 = getelementptr inbounds double, double* %155, i64 1
%157 = load double, double* %156
%158 = fsub double %154, %157
store double %158, double* %14
%159 = load double*, double** %8
%160 = getelementptr inbounds double, double* %159, i64 2
%161 = load double, double* %160
%162 = load double*, double** %7
%163 = getelementptr inbounds double, double* %162, i64 2
%164 = load double, double* %163
%165 = fsub double %161, %164
store double %165, double* %15
%166 = load double, double* %42
%167 = load double, double* %41
%168 = fsub double %166, %167
store double %168, double* %22
%169 = load double*, double** %9
%170 = getelementptr inbounds double, double* %169, i64 0
%171 = load double, double* %170
%172 = load double*, double** %7
%173 = getelementptr inbounds double, double* %172, i64 0
%174 = load double, double* %173
%175 = fsub double %171, %174
store double %175, double* %16
%176 = load double*, double** %9
%177 = getelementptr inbounds double, double* %176, i64 1
%178 = load double, double* %177
%179 = load double*, double** %7
%180 = getelementptr inbounds double, double* %179, i64 1
%181 = load double, double* %180
%182 = fsub double %178, %181
store double %182, double* %17
%183 = load double*, double** %9
%184 = getelementptr inbounds double, double* %183, i64 2
%185 = load double, double* %184
%186 = load double*, double** %7
%187 = getelementptr inbounds double, double* %186, i64 2
%188 = load double, double* %187
%189 = fsub double %185, %188
store double %189, double* %18
%190 = load double, double* %43
%191 = load double, double* %41
%192 = fsub double %190, %191
store double %192, double* %23
%193 = load double*, double** %10
%194 = getelementptr inbounds double, double* %193, i64 0
%195 = load double, double* %194
%196 = load double*, double** %7
%197 = getelementptr inbounds double, double* %196, i64 0
%198 = load double, double* %197
%199 = fsub double %195, %198
store double %199, double* %19
%200 = load double*, double** %10
%201 = getelementptr inbounds double, double* %200, i64 1
%202 = load double, double* %201
%203 = load double*, double** %7
%204 = getelementptr inbounds double, double* %203, i64 1
%205 = load double, double* %204
%206 = fsub double %202, %205
store double %206, double* %20
%207 = load double*, double** %10
%208 = getelementptr inbounds double, double* %207, i64 2
%209 = load double, double* %208
%210 = load double*, double** %7
%211 = getelementptr inbounds double, double* %210, i64 2
%212 = load double, double* %211
%213 = fsub double %209, %212
store double %213, double* %21
%214 = load double, double* %44
%215 = load double, double* %41
%216 = fsub double %214, %215
store double %216, double* %24
%217 = load double, double* %13
%218 = load double, double* %13
%219 = load double, double* %14
%220 = load double, double* %14
%221 = fmul double %219, %220
%222 = call double @llvm.fmuladd.f64(double %217, double %218, double %221)
%223 = load double, double* %15
%224 = load double, double* %15
%225 = call double @llvm.fmuladd.f64(double %223, double %224, double %222)
%226 = load double, double* %22
%227 = fsub double %225, %226
store double %227, double* %25
%228 = load double, double* %16
%229 = load double, double* %16
%230 = load double, double* %17
%231 = load double, double* %17
%232 = fmul double %230, %231
%233 = call double @llvm.fmuladd.f64(double %228, double %229, double %232)
%234 = load double, double* %18
%235 = load double, double* %18
%236 = call double @llvm.fmuladd.f64(double %234, double %235, double %233)
%237 = load double, double* %23
%238 = fsub double %236, %237
store double %238, double* %26
%239 = load double, double* %19
%240 = load double, double* %19
%241 = load double, double* %20
%242 = load double, double* %20
%243 = fmul double %241, %242
%244 = call double @llvm.fmuladd.f64(double %239, double %240, double %243)
%245 = load double, double* %21
%246 = load double, double* %21
%247 = call double @llvm.fmuladd.f64(double %245, double %246, double %244)
%248 = load double, double* %24
%249 = fsub double %247, %248
store double %249, double* %27
%250 = load double, double* %17
%251 = load double, double* %21
%252 = load double, double* %20
%253 = load double, double* %18
%254 = fmul double %252, %253
%255 = fneg double %254
%256 = call double @llvm.fmuladd.f64(double %250, double %251, double %255)
store double %256, double* %28
%257 = load double, double* %18
%258 = load double, double* %19
%259 = load double, double* %21
%260 = load double, double* %16
%261 = fmul double %259, %260
%262 = fneg double %261
%263 = call double @llvm.fmuladd.f64(double %257, double %258, double %262)
store double %263, double* %29
%264 = load double, double* %16
%265 = load double, double* %20
%266 = load double, double* %19
%267 = load double, double* %17
%268 = fmul double %266, %267
%269 = fneg double %268
%270 = call double @llvm.fmuladd.f64(double %264, double %265, double %269)
store double %270, double* %30
%271 = load double, double* %20
%272 = load double, double* %15
%273 = load double, double* %14
%274 = load double, double* %21
%275 = fmul double %273, %274
%276 = fneg double %275
%277 = call double @llvm.fmuladd.f64(double %271, double %272, double %276)
store double %277, double* %31
%278 = load double, double* %21
%279 = load double, double* %13
%280 = load double, double* %15
%281 = load double, double* %19
%282 = fmul double %280, %281
%283 = fneg double %282
%284 = call double @llvm.fmuladd.f64(double %278, double %279, double %283)
store double %284, double* %32
%285 = load double, double* %19
%286 = load double, double* %14
%287 = load double, double* %13
%288 = load double, double* %20
%289 = fmul double %287, %288
%290 = fneg double %289
%291 = call double @llvm.fmuladd.f64(double %285, double %286, double %290)
store double %291, double* %33
%292 = load double, double* %14
%293 = load double, double* %18
%294 = load double, double* %17
%295 = load double, double* %15
%296 = fmul double %294, %295
%297 = fneg double %296
%298 = call double @llvm.fmuladd.f64(double %292, double %293, double %297)
store double %298, double* %34
%299 = load double, double* %15
%300 = load double, double* %16
%301 = load double, double* %18
%302 = load double, double* %13
%303 = fmul double %301, %302
%304 = fneg double %303
%305 = call double @llvm.fmuladd.f64(double %299, double %300, double %304)
store double %305, double* %35
%306 = load double, double* %13
%307 = load double, double* %17
%308 = load double, double* %16
%309 = load double, double* %14
%310 = fmul double %308, %309
%311 = fneg double %310
%312 = call double @llvm.fmuladd.f64(double %306, double %307, double %311)
store double %312, double* %36
%313 = load double*, double** %8
%314 = load double*, double** %9
%315 = load double*, double** %10
%316 = load double*, double** %7
%317 = call i32 (double*, double*, double*, double*, ...) bitcast (i32 (...)* @orient3d to i32 (double*, double*, double*, double*, ...)*)(double* %313, double* %314, double* %315, double* %316)
%318 = sitofp i32 %317 to double
%319 = load double*, double** %12
store double %318, double* %319
%320 = load double*, double** %12
%321 = load double, double* %320
%322 = fdiv double 5.000000e-01, %321
store double %322, double* %37
%323 = load double, double* %25
%324 = load double, double* %28
%325 = load double, double* %26
%326 = load double, double* %31
%327 = fmul double %325, %326
%328 = call double @llvm.fmuladd.f64(double %323, double %324, double %327)
%329 = load double, double* %27
%330 = load double, double* %34
%331 = call double @llvm.fmuladd.f64(double %329, double %330, double %328)
%332 = load double, double* %37
%333 = fmul double %331, %332
store double %333, double* %38
%334 = load double, double* %25
%335 = load double, double* %29
%336 = load double, double* %26
%337 = load double, double* %32
%338 = fmul double %336, %337
%339 = call double @llvm.fmuladd.f64(double %334, double %335, double %338)
%340 = load double, double* %27
%341 = load double, double* %35
%342 = call double @llvm.fmuladd.f64(double %340, double %341, double %339)
%343 = load double, double* %37
%344 = fmul double %342, %343
store double %344, double* %39
%345 = load double, double* %25
%346 = load double, double* %30
%347 = load double, double* %26
%348 = load double, double* %33
%349 = fmul double %347, %348
%350 = call double @llvm.fmuladd.f64(double %345, double %346, double %349)
%351 = load double, double* %27
%352 = load double, double* %36
%353 = call double @llvm.fmuladd.f64(double %351, double %352, double %350)
%354 = load double, double* %37
%355 = fmul double %353, %354
store double %355, double* %40
%356 = load double, double* %38
%357 = load double*, double** %11
%358 = getelementptr inbounds double, double* %357, i64 0
store double %356, double* %358
%359 = load double, double* %39
%360 = load double*, double** %11
%361 = getelementptr inbounds double, double* %360, i64 1
store double %359, double* %361
%362 = load double, double* %40
%363 = load double*, double** %11
%364 = getelementptr inbounds double, double* %363, i64 2
store double %362, double* %364
ret void
}

LLVM IR (-O2):
define void @tetorthocenter(double* %0, double* %1, double* %2, double* %3, double* nocapture writeonly %4, double* nocapture writeonly %5) {
%7 = load double, double* %0
%8 = getelementptr inbounds double, double* %0, i64 1
%9 = bitcast double* %8 to <2 x double>*
%10 = load <2 x double>, <2 x double>* %9
%11 = extractelement <2 x double> %10, i64 0
%12 = fmul <2 x double> %10, %10
%13 = extractelement <2 x double> %12, i64 0
%14 = tail call double @llvm.fmuladd.f64(double %7, double %7, double %13)
%15 = extractelement <2 x double> %10, i64 1
%16 = tail call double @llvm.fmuladd.f64(double %15, double %15, double %14)
%17 = getelementptr inbounds double, double* %0, i64 3
%18 = load double, double* %17
%19 = fsub double %16, %18
%20 = load double, double* %1
%21 = getelementptr inbounds double, double* %1, i64 1
%22 = bitcast double* %21 to <2 x double>*
%23 = load <2 x double>, <2 x double>* %22
%24 = fmul <2 x double> %23, %23
%25 = extractelement <2 x double> %24, i64 0
%26 = tail call double @llvm.fmuladd.f64(double %20, double %20, double %25)
%27 = extractelement <2 x double> %23, i64 1
%28 = tail call double @llvm.fmuladd.f64(double %27, double %27, double %26)
%29 = getelementptr inbounds double, double* %1, i64 3
%30 = load double, double* %29
%31 = fsub double %28, %30
%32 = load double, double* %2
%33 = getelementptr inbounds double, double* %2, i64 1
%34 = load double, double* %33
%35 = fmul double %34, %34
%36 = tail call double @llvm.fmuladd.f64(double %32, double %32, double %35)
%37 = getelementptr inbounds double, double* %2, i64 2
%38 = load double, double* %37
%39 = tail call double @llvm.fmuladd.f64(double %38, double %38, double %36)
%40 = getelementptr inbounds double, double* %2, i64 3
%41 = load double, double* %40
%42 = fsub double %39, %41
%43 = load double, double* %3
%44 = getelementptr inbounds double, double* %3, i64 1
%45 = load double, double* %44
%46 = fmul double %45, %45
%47 = tail call double @llvm.fmuladd.f64(double %43, double %43, double %46)
%48 = getelementptr inbounds double, double* %3, i64 2
%49 = load double, double* %48
%50 = tail call double @llvm.fmuladd.f64(double %49, double %49, double %47)
%51 = getelementptr inbounds double, double* %3, i64 3
%52 = load double, double* %51
%53 = fsub double %50, %52
%54 = fsub double %20, %7
%55 = fsub <2 x double> %23, %10
%56 = fsub double %31, %19
%57 = fsub double %34, %11
%58 = insertelement <2 x double> poison, double %38, i64 0
%59 = insertelement <2 x double> %58, double %32, i64 1
%60 = insertelement <2 x double> poison, double %15, i64 0
%61 = insertelement <2 x double> %60, double %7, i64 1
%62 = fsub <2 x double> %59, %61
%63 = fsub double %42, %19
%64 = fsub double %45, %11
%65 = insertelement <2 x double> poison, double %49, i64 0
%66 = insertelement <2 x double> %65, double %43, i64 1
%67 = fsub <2 x double> %66, %61
%68 = fsub double %53, %19
%69 = extractelement <2 x double> %55, i64 0
%70 = fmul <2 x double> %55, %55
%71 = extractelement <2 x double> %70, i64 0
%72 = tail call double @llvm.fmuladd.f64(double %54, double %54, double %71)
%73 = extractelement <2 x double> %55, i64 1
%74 = tail call double @llvm.fmuladd.f64(double %73, double %73, double %72)
%75 = fsub double %74, %56
%76 = fmul double %57, %57
%77 = extractelement <2 x double> %62, i64 1
%78 = tail call double @llvm.fmuladd.f64(double %77, double %77, double %76)
%79 = extractelement <2 x double> %62, i64 0
%80 = tail call double @llvm.fmuladd.f64(double %79, double %79, double %78)
%81 = fsub double %80, %63
%82 = fmul double %64, %64
%83 = extractelement <2 x double> %67, i64 1
%84 = tail call double @llvm.fmuladd.f64(double %83, double %83, double %82)
%85 = extractelement <2 x double> %67, i64 0
%86 = tail call double @llvm.fmuladd.f64(double %85, double %85, double %84)
%87 = fsub double %86, %68
%88 = insertelement <2 x double> poison, double %64, i64 0
%89 = shufflevector <2 x double> %88, <2 x double> %67, <2 x i32> <i32 0, i32 2>
%90 = fneg <2 x double> %89
%91 = fmul <2 x double> %62, %90
%92 = insertelement <2 x double> poison, double %57, i64 0
%93 = shufflevector <2 x double> %92, <2 x double> %62, <2 x i32> <i32 0, i32 2>
%94 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %93, <2 x double> %67, <2 x double> %91)
%95 = fneg double %83
%96 = fmul double %57, %95
%97 = tail call double @llvm.fmuladd.f64(double %77, double %64, double %96)
%98 = fneg <2 x double> %55
%99 = fmul <2 x double> %67, %98
%100 = insertelement <2 x double> poison, double %73, i64 0
%101 = insertelement <2 x double> %100, double %54, i64 1
%102 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %89, <2 x double> %101, <2 x double> %99)
%103 = fneg double %54
%104 = fmul double %64, %103
%105 = tail call double @llvm.fmuladd.f64(double %83, double %69, double %104)
%106 = fneg <2 x double> %93
%107 = fmul <2 x double> %101, %106
%108 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %55, <2 x double> %62, <2 x double> %107)
%109 = fneg double %77
%110 = fmul double %69, %109
%111 = tail call double @llvm.fmuladd.f64(double %54, double %57, double %110)
%112 = tail call i32 (double*, double*, double*, double*, ...) bitcast (i32 (...)* @orient3d to i32 (double*, double*, double*, double*, ...)*)(double* %1, double* %2, double* %3, double* %0)
%113 = sitofp i32 %112 to double
store double %113, double* %5
%114 = fdiv double 5.000000e-01, %113
%115 = insertelement <2 x double> poison, double %81, i64 0
%116 = shufflevector <2 x double> %115, <2 x double> poison, <2 x i32> zeroinitializer
%117 = fmul <2 x double> %116, %102
%118 = insertelement <2 x double> poison, double %75, i64 0
%119 = shufflevector <2 x double> %118, <2 x double> poison, <2 x i32> zeroinitializer
%120 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %119, <2 x double> %94, <2 x double> %117)
%121 = insertelement <2 x double> poison, double %87, i64 0
%122 = shufflevector <2 x double> %121, <2 x double> poison, <2 x i32> zeroinitializer
%123 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %122, <2 x double> %108, <2 x double> %120)
%124 = insertelement <2 x double> poison, double %114, i64 0
%125 = shufflevector <2 x double> %124, <2 x double> poison, <2 x i32> zeroinitializer
%126 = fmul <2 x double> %125, %123
%127 = fmul double %81, %105
%128 = tail call double @llvm.fmuladd.f64(double %75, double %97, double %127)
%129 = tail call double @llvm.fmuladd.f64(double %87, double %111, double %128)
%130 = fmul double %114, %129
%131 = bitcast double* %4 to <2 x double>*
store <2 x double> %126, <2 x double>* %131
%132 = getelementptr inbounds double, double* %4, i64 2
store double %130, double* %132
ret void
}