// File: tomfunkhouser[P]gaps/pkgs/R3Utils/R3SurfelViewer.cpp
// Function: gaps::R3SurfelViewer::CreateColor(unsigned char*, double) const
void R3SurfelViewer::
CreateColor(unsigned char *color, double value) const
{
  // Compute rgb based on blue-green-red heatmap
  if (value <= 0) {
    color[0] = 0;
    color[1] = 0;
    color[2] = 255;
  }
  else if (value < 0.1) {
    value *= 10 * 255;
    color[0] = 0;
    color[1] = value;
    color[2] = 255;
  }
  else if (value < 0.5) {
    value = (value - 0.1) * 2.5 * 255;
    color[0] = 0;
    color[1] = 255;
    color[2] = 255 - value;
  }
  else if (value < 0.9) {
    value = (value - 0.5) * 2.5 * 255;
    color[0] = value;
    color[1] = 255;
    color[2] = 0;
  }
  else if (value < 1) {
    value = (value - 0.9) * 10 * 255;
    color[0] = 255;
    color[1] = 255 - value;
    color[2] = 0;
  }
  else {
    color[0] = 255;
    color[1] = 0;
    color[2] = 0;
  }
}

// Assembly:
movq %rdi, -0x8(%rsp)
movq %rsi, -0x10(%rsp)
movsd %xmm0, -0x18(%rsp)
xorps %xmm0, %xmm0
ucomisd -0x18(%rsp), %xmm0
jb 0x30a4a
movq -0x10(%rsp), %rax
movb $0x0, (%rax)
movq -0x10(%rsp), %rax
movb $0x0, 0x1(%rax)
movq -0x10(%rsp), %rax
movb $-0x1, 0x2(%rax)
jmp 0x30bf9
movsd 0x210a96(%rip), %xmm0   # 0x2414e8
ucomisd -0x18(%rsp), %xmm0
jbe 0x30a98
movsd -0x18(%rsp), %xmm0
movsd 0x210ac0(%rip), %xmm1   # 0x241528
mulsd %xmm1, %xmm0
movsd %xmm0, -0x18(%rsp)
movq -0x10(%rsp), %rax
movb $0x0, (%rax)
cvttsd2si -0x18(%rsp), %eax
movb %al, %cl
movq -0x10(%rsp), %rax
movb %cl, 0x1(%rax)
movq -0x10(%rsp), %rax
movb $-0x1, 0x2(%rax)
jmp 0x30bf7
movsd 0x210598(%rip), %xmm0   # 0x241038
ucomisd -0x18(%rsp), %xmm0
jbe 0x30b06
movsd -0x18(%rsp), %xmm1
movsd 0x210a6a(%rip), %xmm0   # 0x241520
addsd %xmm0, %xmm1
movsd 0x210a56(%rip), %xmm0   # 0x241518
mulsd %xmm0, %xmm1
movsd 0x210a3a(%rip), %xmm0   # 0x241508
mulsd %xmm0, %xmm1
movsd %xmm1, -0x18(%rsp)
movq -0x10(%rsp), %rax
movb $0x0, (%rax)
movq -0x10(%rsp), %rax
movb $-0x1, 0x1(%rax)
movsd -0x18(%rsp), %xmm1
subsd %xmm1, %xmm0
cvttsd2si %xmm0, %eax
movb %al, %cl
movq -0x10(%rsp), %rax
movb %cl, 0x2(%rax)
jmp 0x30bf5
movsd 0x2109e2(%rip), %xmm0   # 0x2414f0
ucomisd -0x18(%rsp), %xmm0
jbe 0x30b6c
movsd -0x18(%rsp), %xmm0
movsd 0x2109ec(%rip), %xmm1   # 0x241510
addsd %xmm1, %xmm0
movsd 0x2109e8(%rip), %xmm1   # 0x241518
mulsd %xmm1, %xmm0
movsd 0x2109cc(%rip), %xmm1   # 0x241508
mulsd %xmm1, %xmm0
movsd %xmm0, -0x18(%rsp)
cvttsd2si -0x18(%rsp), %eax
movb %al, %cl
movq -0x10(%rsp), %rax
movb %cl, (%rax)
movq -0x10(%rsp), %rax
movb $-0x1, 0x1(%rax)
movq -0x10(%rsp), %rax
movb $0x0, 0x2(%rax)
jmp 0x30bf3
movsd 0x21049c(%rip), %xmm0   # 0x241010
ucomisd -0x18(%rsp), %xmm0
jbe 0x30bd7
movsd -0x18(%rsp), %xmm1
movsd 0x21096e(%rip), %xmm0   # 0x2414f8
addsd %xmm0, %xmm1
movsd 0x21096a(%rip), %xmm0   # 0x241500
mulsd %xmm0, %xmm1
movsd 0x210966(%rip), %xmm0   # 0x241508
mulsd %xmm0, %xmm1
movsd %xmm1, -0x18(%rsp)
movq -0x10(%rsp), %rax
movb $-0x1, (%rax)
movsd -0x18(%rsp), %xmm1
subsd %xmm1, %xmm0
cvttsd2si %xmm0, %eax
movb %al, %cl
movq -0x10(%rsp), %rax
movb %cl, 0x1(%rax)
movq -0x10(%rsp), %rax
movb $0x0, 0x2(%rax)
jmp 0x30bf1
movq -0x10(%rsp), %rax
movb $-0x1, (%rax)
movq -0x10(%rsp), %rax
movb $0x0, 0x1(%rax)
movq -0x10(%rsp), %rax
movb $0x0, 0x2(%rax)
jmp 0x30bf3
jmp 0x30bf5
jmp 0x30bf7
jmp 0x30bf9
retq
nopw (%rax,%rax)