// File: /workspace/github_cpp_makefile_star2_O2/jkingan[P]ladyheather/heathgps.cpp
// Function: calc_cri(double)
DATA_SIZE calc_cri(DATA_SIZE cct)
{
double bb_r,bb_g,bb_b,d,sum;  // black body values
double R,G,B;                 // sensor values
double y;
double err;

   d = 0.0;

   R = red_uw;
   G = green_uw;
   B = blue_uw;
   sum = R + G + B;
   if(sum == 0.0) return 0.0;

   R /= sum;
   G /= sum;
   B /= sum;

   // calculate the black body energy emitted over the color sensor bands
   if(cri_flag) {
      bb_r = plank(cct, 621.0);  // 640
      bb_g = plank(cct, 500.0);  // 524
      bb_b = plank(cct, 490.0);  // 470
   }
   else if(1) {
      bb_b  = plank(cct, 420.0) * 0.30;
      bb_b += plank(cct, 430.0) * 0.40;
      bb_b += plank(cct, 440.0) * 0.42;
      bb_b += plank(cct, 450.0) * 0.45;
      bb_b += plank(cct, 460.0) * 0.48;
      bb_b += plank(cct, 470.0) * 0.46;
      bb_b += plank(cct, 480.0) * 0.44;
      bb_b += plank(cct, 490.0) * 0.40;
      bb_b += plank(cct, 500.0) * 0.35;
      bb_b += plank(cct, 510.0) * 0.30;
      bb_b += plank(cct, 520.0) * 0.25;
      bb_b += plank(cct, 530.0) * 0.15;
      bb_b += plank(cct, 540.0) * 0.14;
      bb_b += plank(cct, 550.0) * 0.13;
      bb_b += plank(cct, 560.0) * 0.08;
      bb_b /= 15.0;

      bb_g  = plank(cct, 420.0) * 0.05;
      bb_g += plank(cct, 420.0) * 0.06;
      bb_g += plank(cct, 440.0) * 0.07;
      bb_g += plank(cct, 450.0) * 0.08;
      bb_g += plank(cct, 460.0) * 0.10;
      bb_g += plank(cct, 470.0) * 0.18;
      bb_g += plank(cct, 480.0) * 0.20;
      bb_g += plank(cct, 490.0) * 0.23;
      bb_g += plank(cct, 500.0) * 0.28;
      bb_g += plank(cct, 510.0) * 0.32;
      bb_g += plank(cct, 520.0) * 0.38;
      bb_g += plank(cct, 530.0) * 0.50;
      bb_g += plank(cct, 540.0) * 0.55;
      bb_g += plank(cct, 550.0) * 0.54;
      bb_g += plank(cct, 560.0) * 0.50;
      bb_g += plank(cct, 570.0) * 0.40;
      bb_g += plank(cct, 580.0) * 0.39;
      bb_g += plank(cct, 590.0) * 0.20;
      bb_g += plank(cct, 600.0) * 0.15;
      bb_g += plank(cct, 610.0) * 0.06;
      bb_g /= 20.0;

      bb_r  = plank(cct, 510.0) * 0.03;
      bb_r += plank(cct, 520.0) * 0.05;
      bb_r += plank(cct, 530.0) * 0.08;
      bb_r += plank(cct, 540.0) * 0.10;
      bb_r += plank(cct, 550.0) * 0.17;
      bb_r += plank(cct, 560.0) * 0.17;
      bb_r += plank(cct, 570.0) * 0.20;
      bb_r += plank(cct, 580.0) * 0.40;
      bb_r += plank(cct, 590.0) * 0.50;
      bb_r += plank(cct, 600.0) * 0.60;
      bb_r += plank(cct, 610.0) * 0.65;
      bb_r += plank(cct, 620.0) * 0.70;
      bb_r += plank(cct, 630.0) * 0.73;
      bb_r += plank(cct, 640.0) * 0.80;
      bb_r += plank(cct, 650.0) * 0.82;
      bb_r += plank(cct, 660.0) * 0.85;
      bb_r += plank(cct, 670.0) * 0.85;
      bb_r += plank(cct, 680.0) * 0.90;
      bb_r += plank(cct, 690.0) * 0.93;
      bb_r += plank(cct, 700.0) * 0.95;
      bb_r /= 20.0;    
   }
   else {
      bb_r = bb_g = bb_b = 0.0;
      for(y=400.0; y<=520.0; y+=10.0) {
         bb_b += plank(cct, y);
         d += 1.0;
      }
      bb_b /= d;

      for(y=480.0; y<=600.0; y+=10.0) {
         bb_g += plank(cct, y);
         d += 1.0;
      }
      bb_g /= d;

      for(y=550.0; y<=770.0; y+=10.0) {
         bb_r += plank(cct, y);
         d += 1.0;
      }
      bb_r /= d;
   }
   sum = bb_r + bb_g + bb_b;  // normalize black body energy to 0 .. 1
   bb_r /= sum;
   bb_g /= sum;
   bb_b /= sum;


   err = sqrt((((R-bb_r)*(R-bb_r)) + ((G-bb_g)*(G-bb_g)) + ((B-bb_b)*(B-bb_b)))/3.0);
   err = (1.0-err) * (1.0-err);

   return (DATA_SIZE) (err*100.0);
}

// Assembly:
movapd %xmm0, %xmm5
leaq 0x286915(%rip), %rax    # 0x2f6f30
movsd (%rax), %xmm2
leaq 0x286902(%rip), %rax    # 0x2f6f28
movsd (%rax), %xmm4
leaq 0x2868ef(%rip), %rax    # 0x2f6f20
movsd (%rax), %xmm3
movapd %xmm2, %xmm1
addsd %xmm4, %xmm1
addsd %xmm3, %xmm1
xorpd %xmm0, %xmm0
ucomisd %xmm0, %xmm1
jne 0x7064e
jp 0x7064e
retq
pushq %rbp
movq %rsp, %rbp
subq $0x40, %rsp
divsd %xmm1, %xmm2
movsd %xmm2, -0x38(%rbp)
divsd %xmm1, %xmm4
movsd %xmm4, -0x28(%rbp)
divsd %xmm1, %xmm3
movsd %xmm3, -0x30(%rbp)
leaq 0x2868f6(%rip), %rax    # 0x2f6f6e
cmpb $0x0, (%rax)
movsd %xmm5, -0x10(%rbp)
je 0x706cf
movsd 0x97dc6(%rip), %xmm1    # 0x108450
movapd %xmm5, %xmm0
callq 0x7059f
movsd %xmm0, -0x20(%rbp)
movsd 0x85320(%rip), %xmm1    # 0xf59c0
movsd -0x10(%rbp), %xmm0
callq 0x7059f
movsd %xmm0, -0x8(%rbp)
movsd 0x97da1(%rip), %xmm1    # 0x108458
movsd -0x10(%rbp), %xmm0
callq 0x7059f
movsd -0x20(%rbp), %xmm2
movapd %xmm0, %xmm3
jmp 0x70e97
movsd 0x97d89(%rip), %xmm1    # 0x108460
movapd %xmm5, %xmm0
callq 0x7059f
mulsd 0x97d80(%rip), %xmm0    # 0x108468
movsd %xmm0, -0x8(%rbp)
movsd 0x97d7b(%rip), %xmm1    # 0x108470
movsd -0x10(%rbp), %xmm0
callq 0x7059f
mulsd 0x97d71(%rip), %xmm0    # 0x108478
addsd -0x8(%rbp), %xmm0
movsd %xmm0, -0x8(%rbp)
movsd 0x97d67(%rip), %xmm1    # 0x108480
movsd -0x10(%rbp), %xmm0
callq 0x7059f
mulsd 0x97d5d(%rip), %xmm0    # 0x108488
addsd -0x8(%rbp), %xmm0
movsd %xmm0, -0x8(%rbp)
movsd 0x97d53(%rip), %xmm1    # 0x108490
movsd -0x10(%rbp), %xmm0
callq 0x7059f
mulsd 0x97d49(%rip), %xmm0    # 0x108498
addsd -0x8(%rbp), %xmm0
movsd %xmm0, -0x8(%rbp)
movsd 0x97d3f(%rip), %xmm1    # 0x1084a0
movsd -0x10(%rbp), %xmm0
callq 0x7059f
mulsd 0x97d35(%rip), %xmm0    # 0x1084a8
addsd -0x8(%rbp), %xmm0
movsd %xmm0, -0x8(%rbp)
movsd 0x97d2b(%rip), %xmm1    # 0x1084b0
movsd -0x10(%rbp), %xmm0
callq 0x7059f
mulsd 0x97d21(%rip), %xmm0    # 0x1084b8
addsd -0x8(%rbp), %xmm0
movsd %xmm0, -0x8(%rbp)
movsd 0x97d17(%rip), %xmm1    # 0x1084c0
movsd -0x10(%rbp), %xmm0
callq 0x7059f
mulsd 0x97d0d(%rip), %xmm0    # 0x1084c8
addsd -0x8(%rbp), %xmm0
movsd %xmm0, -0x8(%rbp)
movsd 0x97c8b(%rip), %xmm1    # 0x108458
movsd -0x10(%rbp), %xmm0
callq 0x7059f
mulsd 0x97c99(%rip), %xmm0    # 0x108478
addsd -0x8(%rbp), %xmm0
movsd %xmm0, -0x8(%rbp)
movsd 0x851cf(%rip), %xmm1    # 0xf59c0
movsd -0x10(%rbp), %xmm0
callq 0x7059f
mulsd 0x97ccd(%rip), %xmm0    # 0x1084d0
addsd -0x8(%rbp), %xmm0
movsd %xmm0, -0x8(%rbp)
movsd 0x97cc3(%rip), %xmm1    # 0x1084d8
movsd -0x10(%rbp), %xmm0
callq 0x7059f
mulsd 0x97c41(%rip), %xmm0    # 0x108468
addsd -0x8(%rbp), %xmm0
movsd %xmm0, -0x8(%rbp)
movsd 0x97ca7(%rip), %xmm1    # 0x1084e0
movsd -0x10(%rbp), %xmm0
callq 0x7059f
mulsd 0x85195(%rip), %xmm0    # 0xf59e0
addsd -0x8(%rbp), %xmm0
movsd %xmm0, -0x8(%rbp)
movsd 0x97c8b(%rip), %xmm1    # 0x1084e8
movsd -0x10(%rbp), %xmm0
callq 0x7059f
mulsd 0x97c81(%rip), %xmm0    # 0x1084f0
addsd -0x8(%rbp), %xmm0
movsd %xmm0, -0x8(%rbp)
movsd 0x97c77(%rip), %xmm1    # 0x1084f8
movsd -0x10(%rbp), %xmm0
callq 0x7059f
mulsd 0x97c6d(%rip), %xmm0    # 0x108500
addsd -0x8(%rbp), %xmm0
movsd %xmm0, -0x8(%rbp)
movsd 0x97c63(%rip), %xmm1    # 0x108508
movsd -0x10(%rbp), %xmm0
callq 0x7059f
mulsd 0x97c59(%rip), %xmm0    # 0x108510
addsd -0x8(%rbp), %xmm0
movsd %xmm0, -0x8(%rbp)
movsd 0x97c4f(%rip), %xmm1    # 0x108518
movsd -0x10(%rbp), %xmm0
callq 0x7059f
mulsd 0x97c45(%rip), %xmm0    # 0x108520
addsd -0x8(%rbp), %xmm0
divsd 0x97c40(%rip), %xmm0    # 0x108528
movsd %xmm0, -0x20(%rbp)
movsd -0x10(%rbp), %xmm0
movsd 0x97b66(%rip), %xmm1    # 0x108460
callq 0x7059f
mulsd 0x97c29(%rip), %xmm0    # 0x108530
movsd %xmm0, -0x8(%rbp)
movsd -0x10(%rbp), %xmm0
movsd 0x97b47(%rip), %xmm1    # 0x108460
callq 0x7059f
mulsd 0x97c12(%rip), %xmm0    # 0x108538
addsd -0x8(%rbp), %xmm0
movsd %xmm0, -0x8(%rbp)
movsd -0x10(%rbp), %xmm0
movsd 0x97b43(%rip), %xmm1    # 0x108480
callq 0x7059f
mulsd 0x97bf6(%rip), %xmm0    # 0x108540
addsd -0x8(%rbp), %xmm0
movsd %xmm0, -0x8(%rbp)
movsd -0x10(%rbp), %xmm0
movsd 0x97b2f(%rip), %xmm1    # 0x108490
callq 0x7059f
mulsd 0x97bb2(%rip), %xmm0    # 0x108520
addsd -0x8(%rbp), %xmm0
movsd %xmm0, -0x8(%rbp)
movsd -0x10(%rbp), %xmm0
movsd 0x97b1b(%rip), %xmm1    # 0x1084a0
callq 0x7059f
mulsd 0x82776(%rip), %xmm0    # 0xf3108
addsd -0x8(%rbp), %xmm0
movsd %xmm0, -0x8(%rbp)
movsd -0x10(%rbp), %xmm0
movsd 0x97b07(%rip), %xmm1    # 0x1084b0
callq 0x7059f
mulsd 0x97b92(%rip), %xmm0    # 0x108548
addsd -0x8(%rbp), %xmm0
movsd %xmm0, -0x8(%rbp)
movsd -0x10(%rbp), %xmm0
movsd 0x97af3(%rip), %xmm1    # 0x1084c0
callq 0x7059f
mulsd 0x97b76(%rip), %xmm0    # 0x108550
addsd -0x8(%rbp), %xmm0
movsd %xmm0, -0x8(%rbp)
movsd -0x10(%rbp), %xmm0
movsd 0x97a67(%rip), %xmm1    # 0x108458
callq 0x7059f
mulsd 0x97b5a(%rip), %xmm0    # 0x108558
addsd -0x8(%rbp), %xmm0
movsd %xmm0, -0x8(%rbp)
movsd -0x10(%rbp), %xmm0
movsd 0x84fab(%rip), %xmm1    # 0xf59c0
callq 0x7059f
mulsd 0x97b3e(%rip), %xmm0    # 0x108560
addsd -0x8(%rbp), %xmm0
movsd %xmm0, -0x8(%rbp)
movsd -0x10(%rbp), %xmm0
movsd 0x97a9f(%rip), %xmm1    # 0x1084d8
callq 0x7059f
mulsd 0x97b22(%rip), %xmm0    # 0x108568
addsd -0x8(%rbp), %xmm0
movsd %xmm0, -0x8(%rbp)
movsd -0x10(%rbp), %xmm0
movsd 0x97a83(%rip), %xmm1    # 0x1084e0
callq 0x7059f
mulsd 0x97b06(%rip), %xmm0    # 0x108570
addsd -0x8(%rbp), %xmm0
movsd %xmm0, -0x8(%rbp)
movsd -0x10(%rbp), %xmm0
movsd 0x97a67(%rip), %xmm1    # 0x1084e8
callq 0x7059f
mulsd 0x825da(%rip), %xmm0    # 0xf3068
addsd -0x8(%rbp), %xmm0
movsd %xmm0, -0x8(%rbp)
movsd -0x10(%rbp), %xmm0
movsd 0x97a53(%rip), %xmm1    # 0x1084f8
callq 0x7059f
mulsd 0x97ac6(%rip), %xmm0    # 0x108578
addsd -0x8(%rbp), %xmm0
movsd %xmm0, -0x8(%rbp)
movsd -0x10(%rbp), %xmm0
movsd 0x97a3f(%rip), %xmm1    # 0x108508
callq 0x7059f
mulsd 0x97aaa(%rip), %xmm0    # 0x108580
addsd -0x8(%rbp), %xmm0
movsd %xmm0, -0x8(%rbp)
movsd -0x10(%rbp), %xmm0
movsd 0x97a2b(%rip), %xmm1    # 0x108518
callq 0x7059f
mulsd 0x8256e(%rip), %xmm0    # 0xf3068
addsd -0x8(%rbp), %xmm0
movsd %xmm0, -0x8(%rbp)
movsd 0x97a7c(%rip), %xmm1    # 0x108588
movsd -0x10(%rbp), %xmm0
callq 0x7059f
mulsd 0x9795a(%rip), %xmm0    # 0x108478
addsd -0x8(%rbp), %xmm0
movsd %xmm0, -0x8(%rbp)
movsd 0x97a60(%rip), %xmm1    # 0x108590
movsd -0x10(%rbp), %xmm0
callq 0x7059f
mulsd 0x97a56(%rip), %xmm0    # 0x108598
addsd -0x8(%rbp), %xmm0
movsd %xmm0, -0x8(%rbp)
movsd 0x97a4c(%rip), %xmm1    # 0x1085a0
movsd -0x10(%rbp), %xmm0
callq 0x7059f
mulsd 0x979ea(%rip), %xmm0    # 0x108550
addsd -0x8(%rbp), %xmm0
movsd %xmm0, -0x8(%rbp)
movsd 0x84f40(%rip), %xmm1    # 0xf5ab8
movsd -0x10(%rbp), %xmm0
callq 0x7059f
mulsd 0x97966(%rip), %xmm0    # 0x1084f0
addsd -0x8(%rbp), %xmm0
movsd %xmm0, -0x8(%rbp)
movsd 0x97a0c(%rip), %xmm1    # 0x1085a8
movsd -0x10(%rbp), %xmm0
callq 0x7059f
mulsd 0x9798a(%rip), %xmm0    # 0x108538
addsd -0x8(%rbp), %xmm0
divsd 0x84ffd(%rip), %xmm0    # 0xf5bb8
movsd %xmm0, -0x8(%rbp)
movsd -0x10(%rbp), %xmm0
movsd 0x9790b(%rip), %xmm1    # 0x1084d8
callq 0x7059f
mulsd 0x979d6(%rip), %xmm0    # 0x1085b0
movsd %xmm0, -0x18(%rbp)
movsd -0x10(%rbp), %xmm0
movsd 0x978f4(%rip), %xmm1    # 0x1084e0
callq 0x7059f
mulsd 0x97937(%rip), %xmm0    # 0x108530
addsd -0x18(%rbp), %xmm0
movsd %xmm0, -0x18(%rbp)
movsd -0x10(%rbp), %xmm0
movsd 0x978d8(%rip), %xmm1    # 0x1084e8
callq 0x7059f
mulsd 0x97903(%rip), %xmm0    # 0x108520
addsd -0x18(%rbp), %xmm0
movsd %xmm0, -0x18(%rbp)
movsd -0x10(%rbp), %xmm0
movsd 0x978c4(%rip), %xmm1    # 0x1084f8
callq 0x7059f
mulsd 0x824c7(%rip), %xmm0    # 0xf3108
addsd -0x18(%rbp), %xmm0
movsd %xmm0, -0x18(%rbp)
movsd -0x10(%rbp), %xmm0
movsd 0x978b0(%rip), %xmm1    # 0x108508
callq 0x7059f
mulsd 0x97953(%rip), %xmm0    # 0x1085b8
addsd -0x18(%rbp), %xmm0
movsd %xmm0, -0x18(%rbp)
movsd -0x10(%rbp), %xmm0
movsd 0x9789c(%rip), %xmm1    # 0x108518
callq 0x7059f
mulsd 0x9792f(%rip), %xmm0    # 0x1085b8
addsd -0x18(%rbp), %xmm0
movsd %xmm0, -0x18(%rbp)
movsd -0x10(%rbp), %xmm0
movsd 0x978e8(%rip), %xmm1    # 0x108588
callq 0x7059f
mulsd 0x978a3(%rip), %xmm0    # 0x108550
addsd -0x18(%rbp), %xmm0
movsd %xmm0, -0x18(%rbp)
movsd -0x10(%rbp), %xmm0
movsd 0x978cc(%rip), %xmm1    # 0x108590
callq 0x7059f
mulsd 0x977a7(%rip), %xmm0    # 0x108478
addsd -0x18(%rbp), %xmm0
movsd %xmm0, -0x18(%rbp)
movsd -0x10(%rbp), %xmm0
movsd 0x978b8(%rip), %xmm1    # 0x1085a0
callq 0x7059f
mulsd 0x82373(%rip), %xmm0    # 0xf3068
addsd -0x18(%rbp), %xmm0
movsd %xmm0, -0x18(%rbp)
movsd -0x10(%rbp), %xmm0
movsd 0x84dac(%rip), %xmm1    # 0xf5ab8
callq 0x7059f
mulsd 0x84d1f(%rip), %xmm0    # 0xf5a38
addsd -0x18(%rbp), %xmm0
movsd %xmm0, -0x18(%rbp)
movsd -0x10(%rbp), %xmm0
movsd 0x97878(%rip), %xmm1    # 0x1085a8
callq 0x7059f
mulsd 0x97883(%rip), %xmm0    # 0x1085c0
addsd -0x18(%rbp), %xmm0
movsd %xmm0, -0x18(%rbp)
movsd 0x97879(%rip), %xmm1    # 0x1085c8
movsd -0x10(%rbp), %xmm0
callq 0x7059f
mulsd 0x9786f(%rip), %xmm0    # 0x1085d0
addsd -0x18(%rbp), %xmm0
movsd %xmm0, -0x18(%rbp)
movsd 0x97865(%rip), %xmm1    # 0x1085d8
movsd -0x10(%rbp), %xmm0
callq 0x7059f
mulsd 0x9785b(%rip), %xmm0    # 0x1085e0
addsd -0x18(%rbp), %xmm0
movsd %xmm0, -0x18(%rbp)
movsd 0x97851(%rip), %xmm1    # 0x1085e8
movsd -0x10(%rbp), %xmm0
callq 0x7059f
mulsd 0x97847(%rip), %xmm0    # 0x1085f0
addsd -0x18(%rbp), %xmm0
movsd %xmm0, -0x18(%rbp)
movsd 0x9783d(%rip), %xmm1    # 0x1085f8
movsd -0x10(%rbp), %xmm0
callq 0x7059f
mulsd 0x97833(%rip), %xmm0    # 0x108600
addsd -0x18(%rbp), %xmm0
movsd %xmm0, -0x18(%rbp)
movsd 0x97829(%rip), %xmm1    # 0x108608
movsd -0x10(%rbp), %xmm0
callq 0x7059f
mulsd 0x9781f(%rip), %xmm0    # 0x108610
addsd -0x18(%rbp), %xmm0
movsd %xmm0, -0x18(%rbp)
movsd 0x97815(%rip), %xmm1    # 0x108618
movsd -0x10(%rbp), %xmm0
callq 0x7059f
mulsd 0x977fb(%rip), %xmm0    # 0x108610
addsd -0x18(%rbp), %xmm0
movsd %xmm0, -0x18(%rbp)
movsd 0x977f9(%rip), %xmm1    # 0x108620
movsd -0x10(%rbp), %xmm0
callq 0x7059f
mulsd 0x977ef(%rip), %xmm0    # 0x108628
addsd -0x18(%rbp), %xmm0
movsd %xmm0, -0x18(%rbp)
movsd 0x977e5(%rip), %xmm1    # 0x108630
movsd -0x10(%rbp), %xmm0
callq 0x7059f
mulsd 0x977db(%rip), %xmm0    # 0x108638
addsd -0x18(%rbp), %xmm0
movsd %xmm0, -0x18(%rbp)
movsd 0x977d1(%rip), %xmm1    # 0x108640
movsd -0x10(%rbp), %xmm0
callq 0x7059f
movsd -0x20(%rbp), %xmm3
movapd %xmm0, %xmm2
mulsd 0x977be(%rip), %xmm2    # 0x108648
addsd -0x18(%rbp), %xmm2
divsd 0x84d21(%rip), %xmm2    # 0xf5bb8
movsd -0x8(%rbp), %xmm4
movapd %xmm4, %xmm0
addsd %xmm2, %xmm0
addsd %xmm3, %xmm0
divsd %xmm0, %xmm2
movsd -0x38(%rbp), %xmm1
subsd %xmm2, %xmm1
divsd %xmm0, %xmm4
movsd -0x28(%rbp), %xmm2
subsd %xmm4, %xmm2
divsd %xmm0, %xmm3
movsd -0x30(%rbp), %xmm0
subsd %xmm3, %xmm0
mulsd %xmm2, %xmm2
mulsd %xmm1, %xmm1
addsd %xmm2, %xmm1
mulsd %xmm0, %xmm0
addsd %xmm1, %xmm0
divsd 0x84b95(%rip), %xmm0    # 0xf5a80
sqrtsd %xmm0, %xmm1
movsd 0x82179(%rip), %xmm0    # 0xf3070
subsd %xmm1, %xmm0
mulsd %xmm0, %xmm0
mulsd 0x82159(%rip), %xmm0    # 0xf3060
addq $0x40, %rsp
popq %rbp
retq