#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 */
int floor(double);
void groj_palette_abc(double nval, unsigned char *rgb, char diffout) {
  if (nval < 0.0 || nval > 1.0) {
    if (diffout) {
      rgb[0] = 128;
      rgb[1] = 128;
      rgb[2] = 128;
      return;
    } else {
      if (nval < 0.0)
        nval = 0.0;
      else
        nval = 1.0;
    }
  }
  if (nval < 0.2) {
    double v = 2.5 * nval;
    rgb[0] = 255 - floor(255.99 * v);
    rgb[1] = 255;
    rgb[2] = 255 - floor(255.99 * v);
    return;
  }
  if (nval < 0.4) {
    double v = 2.5 * (nval - 0.2);
    rgb[0] = 128 + floor(255.99 * v);
    rgb[1] = 255;
    rgb[2] = 128;
    return;
  }
  if (nval < 0.6) {
    double v = 2.5 * (nval - 0.4);
    rgb[0] = 255;
    rgb[1] = 255 - floor(255.99 * v);
    rgb[2] = 128 - floor(255.99 * v);
    return;
  }
  if (nval < 0.7) {
    double v = 5 * (nval - 0.6);
    rgb[0] = 255;
    rgb[1] = 128 - floor(255.99 * v);
    rgb[2] = 0;
    return;
  }
  if (nval < 0.8) {
    double v = 5 * (nval - 0.7);
    rgb[0] = 255 - floor(255.99 * v);
    rgb[1] = 0;
    rgb[2] = floor(0.5 * 255.99 * v);
    return;
  }
  if (nval < 0.9) {
    double v = 2.5 * (nval - 0.8);
    rgb[0] = 128 - floor(2 * 255.99 * v);
    rgb[1] = 0;
    rgb[2] = 64 + floor(255.99 * v);
    return;
  }
  double v = 5 * (nval - 0.9);
  rgb[0] = 0;
  rgb[1] = 0;
  rgb[2] = 128 - floor(255.99 * v);
}


x86 assembly (clang, -O0):
<groj_palette_abc>:
push   %rbp
mov    %rsp,%rbp
sub    $0x50,%rsp
mov    %sil,%al
movsd  %xmm0,-0x8(%rbp)
mov    %rdi,-0x10(%rbp)
mov    %al,-0x11(%rbp)
xorps  %xmm0,%xmm0
ucomisd -0x8(%rbp),%xmm0
ja     114c <groj_palette_abc+0x3c>
movsd  -0x8(%rbp),%xmm0
movsd  0xebe(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    11a4 <groj_palette_abc+0x94>
cmpb   $0x0,-0x11(%rbp)
je     1172 <groj_palette_abc+0x62>
mov    -0x10(%rbp),%rax
movb   $0x80,(%rax)
mov    -0x10(%rbp),%rax
movb   $0x80,0x1(%rax)
mov    -0x10(%rbp),%rax
movb   $0x80,0x2(%rax)
jmp    14d4 <groj_palette_abc+0x3c4>
xorps  %xmm0,%xmm0
ucomisd -0x8(%rbp),%xmm0
jbe    118d <groj_palette_abc+0x7d>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    119a <groj_palette_abc+0x8a>
movsd  0xe6b(%rip),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    119f <groj_palette_abc+0x8f>
jmp    11a4 <groj_palette_abc+0x94>
movsd  0xe5c(%rip),%xmm0
ucomisd -0x8(%rbp),%xmm0
jbe    121d <groj_palette_abc+0x10d>
movsd  0xe91(%rip),%xmm0
mulsd  -0x8(%rbp),%xmm0
movsd  %xmm0,-0x20(%rbp)
movsd  0xe67(%rip),%xmm0
mulsd  -0x20(%rbp),%xmm0
call   1030 <floor@plt>
mov    %eax,%ecx
mov    $0xff,%eax
sub    %ecx,%eax
mov    %al,%cl
mov    -0x10(%rbp),%rax
mov    %cl,(%rax)
mov    -0x10(%rbp),%rax
movb   $0xff,0x1(%rax)
movsd  0xe3c(%rip),%xmm0
mulsd  -0x20(%rbp),%xmm0
call   1030 <floor@plt>
mov    %eax,%ecx
mov    $0xff,%eax
sub    %ecx,%eax
mov    %al,%cl
mov    -0x10(%rbp),%rax
mov    %cl,0x2(%rax)
jmp    14d4 <groj_palette_abc+0x3c4>
movsd  0xdeb(%rip),%xmm0
ucomisd -0x8(%rbp),%xmm0
jbe    1286 <groj_palette_abc+0x176>
movsd  -0x8(%rbp),%xmm1
movsd  0xdcb(%rip),%xmm0
subsd  %xmm0,%xmm1
movsd  0xe07(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x28(%rbp)
movsd  0xdde(%rip),%xmm0
mulsd  -0x28(%rbp),%xmm0
call   1030 <floor@plt>
add    $0x80,%eax
mov    %al,%cl
mov    -0x10(%rbp),%rax
mov    %cl,(%rax)
mov    -0x10(%rbp),%rax
movb   $0xff,0x1(%rax)
mov    -0x10(%rbp),%rax
movb   $0x80,0x2(%rax)
jmp    14d4 <groj_palette_abc+0x3c4>
movsd  0xd8a(%rip),%xmm0
ucomisd -0x8(%rbp),%xmm0
jbe    130f <groj_palette_abc+0x1ff>
movsd  -0x8(%rbp),%xmm1
movsd  0xd6a(%rip),%xmm0
subsd  %xmm0,%xmm1
movsd  0xd9e(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x30(%rbp)
mov    -0x10(%rbp),%rax
movb   $0xff,(%rax)
movsd  0xd6e(%rip),%xmm0
mulsd  -0x30(%rbp),%xmm0
call   1030 <floor@plt>
mov    %eax,%ecx
mov    $0xff,%eax
sub    %ecx,%eax
mov    %al,%cl
mov    -0x10(%rbp),%rax
mov    %cl,0x1(%rax)
movsd  0xd4a(%rip),%xmm0
mulsd  -0x30(%rbp),%xmm0
call   1030 <floor@plt>
mov    %eax,%ecx
mov    $0x80,%eax
sub    %ecx,%eax
mov    %al,%cl
mov    -0x10(%rbp),%rax
mov    %cl,0x2(%rax)
jmp    14d4 <groj_palette_abc+0x3c4>
movsd  0xd09(%rip),%xmm0
ucomisd -0x8(%rbp),%xmm0
jbe    137c <groj_palette_abc+0x26c>
movsd  -0x8(%rbp),%xmm1
movsd  0xce9(%rip),%xmm0
subsd  %xmm0,%xmm1
movsd  0xd05(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x10(%rbp),%rax
movb   $0xff,(%rax)
movsd  0xce5(%rip),%xmm0
mulsd  -0x38(%rbp),%xmm0
call   1030 <floor@plt>
mov    %eax,%ecx
mov    $0x80,%eax
sub    %ecx,%eax
mov    %al,%cl
mov    -0x10(%rbp),%rax
mov    %cl,0x1(%rax)
mov    -0x10(%rbp),%rax
movb   $0x0,0x2(%rax)
jmp    14d4 <groj_palette_abc+0x3c4>
movsd  0xca4(%rip),%xmm0
ucomisd -0x8(%rbp),%xmm0
jbe    13fc <groj_palette_abc+0x2ec>
movsd  -0x8(%rbp),%xmm1
movsd  0xc84(%rip),%xmm0
subsd  %xmm0,%xmm1
movsd  0xc98(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  0xc7f(%rip),%xmm0
mulsd  -0x40(%rbp),%xmm0
call   1030 <floor@plt>
mov    %eax,%ecx
mov    $0xff,%eax
sub    %ecx,%eax
mov    %al,%cl
mov    -0x10(%rbp),%rax
mov    %cl,(%rax)
mov    -0x10(%rbp),%rax
movb   $0x0,0x1(%rax)
movsd  0xc74(%rip),%xmm0
mulsd  -0x40(%rbp),%xmm0
call   1030 <floor@plt>
mov    %al,%cl
mov    -0x10(%rbp),%rax
mov    %cl,0x2(%rax)
jmp    14d4 <groj_palette_abc+0x3c4>
movsd  0xc2c(%rip),%xmm0
ucomisd -0x8(%rbp),%xmm0
jbe    147f <groj_palette_abc+0x36f>
movsd  -0x8(%rbp),%xmm1
movsd  0xc0c(%rip),%xmm0
subsd  %xmm0,%xmm1
movsd  0xc28(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  0xc0f(%rip),%xmm0
mulsd  -0x48(%rbp),%xmm0
call   1030 <floor@plt>
mov    %eax,%ecx
mov    $0x80,%eax
sub    %ecx,%eax
mov    %al,%cl
mov    -0x10(%rbp),%rax
mov    %cl,(%rax)
mov    -0x10(%rbp),%rax
movb   $0x0,0x1(%rax)
movsd  0xbd4(%rip),%xmm0
mulsd  -0x48(%rbp),%xmm0
call   1030 <floor@plt>
add    $0x40,%eax
mov    %al,%cl
mov    -0x10(%rbp),%rax
mov    %cl,0x2(%rax)
jmp    14d4 <groj_palette_abc+0x3c4>
movsd  -0x8(%rbp),%xmm1
movsd  0xba4(%rip),%xmm0
subsd  %xmm0,%xmm1
movsd  0xba8(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x10(%rbp),%rax
movb   $0x0,(%rax)
mov    -0x10(%rbp),%rax
movb   $0x0,0x1(%rax)
movsd  0xb80(%rip),%xmm0
mulsd  -0x50(%rbp),%xmm0
call   1030 <floor@plt>
mov    %eax,%ecx
mov    $0x80,%eax
sub    %ecx,%eax
mov    %al,%cl
mov    -0x10(%rbp),%rax
mov    %cl,0x2(%rax)
add    $0x50,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<groj_palette_abc>:
push   %rbx
sub    $0x10,%rsp
mov    %rdi,%rbx
movapd %xmm0,%xmm1
xorpd  %xmm0,%xmm0
ucomisd %xmm1,%xmm0
ja     1180 <groj_palette_abc+0x70>
ucomisd 0xed2(%rip),%xmm1
ja     1180 <groj_palette_abc+0x70>
movsd  0xed0(%rip),%xmm0
ucomisd %xmm1,%xmm0
ja     119f <groj_palette_abc+0x8f>
movsd  0xeca(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    11d5 <groj_palette_abc+0xc5>
addsd  0xf28(%rip),%xmm1
mulsd  0xee0(%rip),%xmm1
mulsd  0xee8(%rip),%xmm1
movapd %xmm1,%xmm0
call   1030 <floor@plt>
xor    $0x80,%al
mov    %al,(%rbx)
movb   $0xff,0x1(%rbx)
mov    $0x80,%al
jmp    124e <groj_palette_abc+0x13e>
test   %sil,%sil
je     1191 <groj_palette_abc+0x81>
movw   $0x8080,(%rbx)
mov    $0x80,%al
jmp    124e <groj_palette_abc+0x13e>
xorpd  %xmm0,%xmm0
ucomisd %xmm1,%xmm0
xorpd  %xmm1,%xmm1
jbe    121a <groj_palette_abc+0x10a>
mulsd  0xe99(%rip),%xmm1
mulsd  0xea1(%rip),%xmm1
movsd  %xmm1,0x8(%rsp)
movapd %xmm1,%xmm0
call   1030 <floor@plt>
not    %al
mov    %al,(%rbx)
movb   $0xff,0x1(%rbx)
movsd  0x8(%rsp),%xmm0
call   1030 <floor@plt>
not    %al
jmp    124e <groj_palette_abc+0x13e>
movsd  0xe3b(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    1257 <groj_palette_abc+0x147>
addsd  0xe8d(%rip),%xmm1
mulsd  0xe4d(%rip),%xmm1
movb   $0xff,(%rbx)
mulsd  0xe52(%rip),%xmm1
movsd  %xmm1,0x8(%rsp)
movapd %xmm1,%xmm0
call   1030 <floor@plt>
not    %al
mov    %al,0x1(%rbx)
movsd  0x8(%rsp),%xmm0
jmp    1243 <groj_palette_abc+0x133>
movsd  0xdde(%rip),%xmm1
addsd  0xe5e(%rip),%xmm1
mulsd  0xe2e(%rip),%xmm1
movw   $0x0,(%rbx)
mulsd  0xe11(%rip),%xmm1
movapd %xmm1,%xmm0
call   1030 <floor@plt>
mov    %eax,%ecx
mov    $0x80,%al
sub    %cl,%al
mov    %al,0x2(%rbx)
add    $0x10,%rsp
pop    %rbx
ret
movsd  0xdc1(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    1294 <groj_palette_abc+0x184>
addsd  0xe03(%rip),%xmm1
mulsd  0xdeb(%rip),%xmm1
movb   $0xff,(%rbx)
mulsd  0xdd0(%rip),%xmm1
movapd %xmm1,%xmm0
call   1030 <floor@plt>
mov    $0x80,%cl
sub    %al,%cl
mov    %cl,0x1(%rbx)
xor    %eax,%eax
jmp    124e <groj_palette_abc+0x13e>
movsd  0xd8c(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    12e9 <groj_palette_abc+0x1d9>
addsd  0xdae(%rip),%xmm1
mulsd  0xdae(%rip),%xmm1
movsd  %xmm1,0x8(%rsp)
movsd  0xd90(%rip),%xmm0
mulsd  %xmm1,%xmm0
call   1030 <floor@plt>
not    %al
mov    %al,(%rbx)
movb   $0x0,0x1(%rbx)
movsd  0x8(%rsp),%xmm0
mulsd  0xd89(%rip),%xmm0
call   1030 <floor@plt>
jmp    124e <groj_palette_abc+0x13e>
movsd  0xd3f(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    1222 <groj_palette_abc+0x112>
addsd  0xd35(%rip),%xmm1
mulsd  0xd35(%rip),%xmm1
movsd  %xmm1,0x8(%rsp)
movsd  0xd2f(%rip),%xmm0
mulsd  %xmm1,%xmm0
call   1030 <floor@plt>
mov    $0x80,%cl
sub    %al,%cl
mov    %cl,(%rbx)
movb   $0x0,0x1(%rbx)
movsd  0x8(%rsp),%xmm0
mulsd  0xd16(%rip),%xmm0
call   1030 <floor@plt>
add    $0x40,%al
jmp    124e <groj_palette_abc+0x13e>

LLVM IR (-O0):
define void @groj_palette_abc(double %0, i8* %1, i8 signext %2) {
%4 = alloca double
%5 = alloca i8*
%6 = alloca i8
%7 = alloca double
%8 = alloca double
%9 = alloca double
%10 = alloca double
%11 = alloca double
%12 = alloca double
%13 = alloca double
store double %0, double* %4
store i8* %1, i8** %5
store i8 %2, i8* %6
%14 = load double, double* %4
%15 = fcmp olt double %14, 0.000000e+00
br i1 %15, label %19, label %16
16: ; preds = %3
%17 = load double, double* %4
%18 = fcmp ogt double %17, 1.000000e+00
br i1 %18, label %19, label %36
19: ; preds = %16, %3
%20 = load i8, i8* %6
%21 = icmp ne i8 %20, 0
br i1 %21, label %22, label %29
22: ; preds = %19
%23 = load i8*, i8** %5
%24 = getelementptr inbounds i8, i8* %23, i64 0
store i8 -128, i8* %24
%25 = load i8*, i8** %5
%26 = getelementptr inbounds i8, i8* %25, i64 1
store i8 -128, i8* %26
%27 = load i8*, i8** %5
%28 = getelementptr inbounds i8, i8* %27, i64 2
store i8 -128, i8* %28
br label %177
29: ; preds = %19
%30 = load double, double* %4
%31 = fcmp olt double %30, 0.000000e+00
br i1 %31, label %32, label %33
32: ; preds = %29
store double 0.000000e+00, double* %4
br label %34
33: ; preds = %29
store double 1.000000e+00, double* %4
br label %34
34: ; preds = %33, %32
br label %35
35: ; preds = %34
br label %36
36: ; preds = %35, %16
%37 = load double, double* %4
%38 = fcmp olt double %37, 2.000000e-01
br i1 %38, label %39, label %58
39: ; preds = %36
%40 = load double, double* %4
%41 = fmul double 2.500000e+00, %40
store double %41, double* %7
%42 = load double, double* %7
%43 = fmul double 2.559900e+02, %42
%44 = call i32 @floor(double %43)
%45 = sub nsw i32 255, %44
%46 = trunc i32 %45 to i8
%47 = load i8*, i8** %5
%48 = getelementptr inbounds i8, i8* %47, i64 0
store i8 %46, i8* %48
%49 = load i8*, i8** %5
%50 = getelementptr inbounds i8, i8* %49, i64 1
store i8 -1, i8* %50
%51 = load double, double* %7
%52 = fmul double 2.559900e+02, %51
%53 = call i32 @floor(double %52)
%54 = sub nsw i32 255, %53
%55 = trunc i32 %54 to i8
%56 = load i8*, i8** %5
%57 = getelementptr inbounds i8, i8* %56, i64 2
store i8 %55, i8* %57
br label %177
58: ; preds = %36
%59 = load double, double* %4
%60 = fcmp olt double %59, 4.000000e-01
br i1 %60, label %61, label %76
61: ; preds = %58
%62 = load double, double* %4
%63 = fsub double %62, 2.000000e-01
%64 = fmul double 2.500000e+00, %63
store double %64, double* %8
%65 = load double, double* %8
%66 = fmul double 2.559900e+02, %65
%67 = call i32 @floor(double %66)
%68 = add nsw i32 128, %67
%69 = trunc i32 %68 to i8
%70 = load i8*, i8** %5
%71 = getelementptr inbounds i8, i8* %70, i64 0
store i8 %69, i8* %71
%72 = load i8*, i8** %5
%73 = getelementptr inbounds i8, i8* %72, i64 1
store i8 -1, i8* %73
%74 = load i8*, i8** %5
%75 = getelementptr inbounds i8, i8* %74, i64 2
store i8 -128, i8* %75
br label %177
76: ; preds = %58
%77 = load double, double* %4
%78 = fcmp olt double %77, 6.000000e-01
br i1 %78, label %79, label %99
79: ; preds = %76
%80 = load double, double* %4
%81 = fsub double %80, 4.000000e-01
%82 = fmul double 2.500000e+00, %81
store double %82, double* %9
%83 = load i8*, i8** %5
%84 = getelementptr inbounds i8, i8* %83, i64 0
store i8 -1, i8* %84
%85 = load double, double* %9
%86 = fmul double 2.559900e+02, %85
%87 = call i32 @floor(double %86)
%88 = sub nsw i32 255, %87
%89 = trunc i32 %88 to i8
%90 = load i8*, i8** %5
%91 = getelementptr inbounds i8, i8* %90, i64 1
store i8 %89, i8* %91
%92 = load double, double* %9
%93 = fmul double 2.559900e+02, %92
%94 = call i32 @floor(double %93)
%95 = sub nsw i32 128, %94
%96 = trunc i32 %95 to i8
%97 = load i8*, i8** %5
%98 = getelementptr inbounds i8, i8* %97, i64 2
store i8 %96, i8* %98
br label %177
99: ; preds = %76
%100 = load double, double* %4
%101 = fcmp olt double %100, 0x3FE6666666666666
br i1 %101, label %102, label %117
102: ; preds = %99
%103 = load double, double* %4
%104 = fsub double %103, 6.000000e-01
%105 = fmul double 5.000000e+00, %104
store double %105, double* %10
%106 = load i8*, i8** %5
%107 = getelementptr inbounds i8, i8* %106, i64 0
store i8 -1, i8* %107
%108 = load double, double* %10
%109 = fmul double 2.559900e+02, %108
%110 = call i32 @floor(double %109)
%111 = sub nsw i32 128, %110
%112 = trunc i32 %111 to i8
%113 = load i8*, i8** %5
%114 = getelementptr inbounds i8, i8* %113, i64 1
store i8 %112, i8* %114
%115 = load i8*, i8** %5
%116 = getelementptr inbounds i8, i8* %115, i64 2
store i8 0, i8* %116
br label %177
117: ; preds = %99
%118 = load double, double* %4
%119 = fcmp olt double %118, 8.000000e-01
br i1 %119, label %120, label %139
120: ; preds = %117
%121 = load double, double* %4
%122 = fsub double %121, 0x3FE6666666666666
%123 = fmul double 5.000000e+00, %122
store double %123, double* %11
%124 = load double, double* %11
%125 = fmul double 2.559900e+02, %124
%126 = call i32 @floor(double %125)
%127 = sub nsw i32 255, %126
%128 = trunc i32 %127 to i8
%129 = load i8*, i8** %5
%130 = getelementptr inbounds i8, i8* %129, i64 0
store i8 %128, i8* %130
%131 = load i8*, i8** %5
%132 = getelementptr inbounds i8, i8* %131, i64 1
store i8 0, i8* %132
%133 = load double, double* %11
%134 = fmul double 1.279950e+02, %133
%135 = call i32 @floor(double %134)
%136 = trunc i32 %135 to i8
%137 = load i8*, i8** %5
%138 = getelementptr inbounds i8, i8* %137, i64 2
store i8 %136, i8* %138
br label %177
139: ; preds = %117
%140 = load double, double* %4
%141 = fcmp olt double %140, 9.000000e-01
br i1 %141, label %142, label %162
142: ; preds = %139
%143 = load double, double* %4
%144 = fsub double %143, 8.000000e-01
%145 = fmul double 2.500000e+00, %144
store double %145, double* %12
%146 = load double, double* %12
%147 = fmul double 5.119800e+02, %146
%148 = call i32 @floor(double %147)
%149 = sub nsw i32 128, %148
%150 = trunc i32 %149 to i8
%151 = load i8*, i8** %5
%152 = getelementptr inbounds i8, i8* %151, i64 0
store i8 %150, i8* %152
%153 = load i8*, i8** %5
%154 = getelementptr inbounds i8, i8* %153, i64 1
store i8 0, i8* %154
%155 = load double, double* %12
%156 = fmul double 2.559900e+02, %155
%157 = call i32 @floor(double %156)
%158 = add nsw i32 64, %157
%159 = trunc i32 %158 to i8
%160 = load i8*, i8** %5
%161 = getelementptr inbounds i8, i8* %160, i64 2
store i8 %159, i8* %161
br label %177
162: ; preds = %139
%163 = load double, double* %4
%164 = fsub double %163, 9.000000e-01
%165 = fmul double 5.000000e+00, %164
store double %165, double* %13
%166 = load i8*, i8** %5
%167 = getelementptr inbounds i8, i8* %166, i64 0
store i8 0, i8* %167
%168 = load i8*, i8** %5
%169 = getelementptr inbounds i8, i8* %168, i64 1
store i8 0, i8* %169
%170 = load double, double* %13
%171 = fmul double 2.559900e+02, %170
%172 = call i32 @floor(double %171)
%173 = sub nsw i32 128, %172
%174 = trunc i32 %173 to i8
%175 = load i8*, i8** %5
%176 = getelementptr inbounds i8, i8* %175, i64 2
store i8 %174, i8* %176
br label %177
177: ; preds = %162, %142, %120, %102, %79, %61, %39, %22
ret void
}

LLVM IR (-O2):
define void @groj_palette_abc(double %0, i8* writeonly %1, i8 signext %2) {
%4 = fcmp olt double %0, 0.000000e+00
%5 = fcmp ogt double %0, 1.000000e+00
%6 = or i1 %4, %5
br i1 %6, label %7, label %12
7: ; preds = %3
%8 = icmp eq i8 %2, 0
br i1 %8, label %11, label %9
9: ; preds = %7
store i8 -128, i8* %1
%10 = getelementptr inbounds i8, i8* %1, i64 1
store i8 -128, i8* %10
br label %94
11: ; preds = %7
br i1 %4, label %14, label %85
12: ; preds = %3
%13 = fcmp olt double %0, 2.000000e-01
br i1 %13, label %14, label %25
14: ; preds = %11, %12
%15 = phi double [ %0, %12 ], [ 0.000000e+00, %11 ]
%16 = fmul double %15, 2.500000e+00
%17 = fmul double %16, 2.559900e+02
%18 = tail call i32 @floor(double %17)
%19 = trunc i32 %18 to i8
%20 = xor i8 %19, -1
store i8 %20, i8* %1
%21 = getelementptr inbounds i8, i8* %1, i64 1
store i8 -1, i8* %21
%22 = tail call i32 @floor(double %17)
%23 = trunc i32 %22 to i8
%24 = xor i8 %23, -1
br label %94
25: ; preds = %12
%26 = fcmp olt double %0, 4.000000e-01
br i1 %26, label %27, label %35
27: ; preds = %25
%28 = fadd double %0, -2.000000e-01
%29 = fmul double %28, 2.500000e+00
%30 = fmul double %29, 2.559900e+02
%31 = tail call i32 @floor(double %30)
%32 = trunc i32 %31 to i8
%33 = xor i8 %32, -128
store i8 %33, i8* %1
%34 = getelementptr inbounds i8, i8* %1, i64 1
store i8 -1, i8* %34
br label %94
35: ; preds = %25
%36 = fcmp olt double %0, 6.000000e-01
br i1 %36, label %37, label %48
37: ; preds = %35
%38 = fadd double %0, -4.000000e-01
%39 = fmul double %38, 2.500000e+00
store i8 -1, i8* %1
%40 = fmul double %39, 2.559900e+02
%41 = tail call i32 @floor(double %40)
%42 = trunc i32 %41 to i8
%43 = xor i8 %42, -1
%44 = getelementptr inbounds i8, i8* %1, i64 1
store i8 %43, i8* %44
%45 = tail call i32 @floor(double %40)
%46 = trunc i32 %45 to i8
%47 = sub i8 -128, %46
br label %94
48: ; preds = %35
%49 = fcmp olt double %0, 0x3FE6666666666666
br i1 %49, label %50, label %58
50: ; preds = %48
%51 = fadd double %0, -6.000000e-01
%52 = fmul double %51, 5.000000e+00
store i8 -1, i8* %1
%53 = fmul double %52, 2.559900e+02
%54 = tail call i32 @floor(double %53)
%55 = trunc i32 %54 to i8
%56 = sub i8 -128, %55
%57 = getelementptr inbounds i8, i8* %1, i64 1
store i8 %56, i8* %57
br label %94
58: ; preds = %48
%59 = fcmp olt double %0, 8.000000e-01
br i1 %59, label %60, label %71
60: ; preds = %58
%61 = fadd double %0, 0xBFE6666666666666
%62 = fmul double %61, 5.000000e+00
%63 = fmul double %62, 2.559900e+02
%64 = tail call i32 @floor(double %63)
%65 = trunc i32 %64 to i8
%66 = xor i8 %65, -1
store i8 %66, i8* %1
%67 = getelementptr inbounds i8, i8* %1, i64 1
store i8 0, i8* %67
%68 = fmul double %62, 1.279950e+02
%69 = tail call i32 @floor(double %68)
%70 = trunc i32 %69 to i8
br label %94
71: ; preds = %58
%72 = fcmp olt double %0, 9.000000e-01
br i1 %72, label %73, label %85
73: ; preds = %71
%74 = fadd double %0, -8.000000e-01
%75 = fmul double %74, 2.500000e+00
%76 = fmul double %75, 5.119800e+02
%77 = tail call i32 @floor(double %76)
%78 = trunc i32 %77 to i8
%79 = sub i8 -128, %78
store i8 %79, i8* %1
%80 = getelementptr inbounds i8, i8* %1, i64 1
store i8 0, i8* %80
%81 = fmul double %75, 2.559900e+02
%82 = tail call i32 @floor(double %81)
%83 = trunc i32 %82 to i8
%84 = add i8 %83, 64
br label %94
85: ; preds = %11, %71
%86 = phi double [ %0, %71 ], [ 1.000000e+00, %11 ]
%87 = fadd double %86, -9.000000e-01
%88 = fmul double %87, 5.000000e+00
store i8 0, i8* %1
%89 = getelementptr inbounds i8, i8* %1, i64 1
store i8 0, i8* %89
%90 = fmul double %88, 2.559900e+02
%91 = tail call i32 @floor(double %90)
%92 = trunc i32 %91 to i8
%93 = sub i8 -128, %92
br label %94
94: ; preds = %85, %73, %60, %50, %37, %27, %14, %9
%95 = phi i8 [ %93, %85 ], [ %84, %73 ], [ %70, %60 ], [ 0, %50 ], [ %47, %37 ], [ -128, %27 ], [ %24, %14 ], [ -128, %9 ]
%96 = getelementptr inbounds i8, i8* %1, i64 2
store i8 %95, i8* %96
ret void
}