#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 */
typedef int uint8_t;

/* Variables and functions */
void palette_rgb_emphasis(uint8_t *palette) {
  int i, j;
  uint8_t emph[8 * 3] = {0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff,
                         0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0xff,
                         0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff};
  for (i = 1; i < 8; i++) {
    for (j = 0; j < 64; j++) {
      palette[(i * 64 * 3) + (j * 3) + 0] = palette[j * 3 + 0] | emph[i + 0];
      palette[(i * 64 * 3) + (j * 3) + 1] = palette[j * 3 + 1] | emph[i + 1];
      palette[(i * 64 * 3) + (j * 3) + 2] = palette[j * 3 + 2] | emph[i + 2];
    }
  }
}


x86 assembly (clang, -O0):
<palette_rgb_emphasis>:
push   %rbp
mov    %rsp,%rbp
sub    $0x70,%rsp
mov    %rdi,-0x8(%rbp)
lea    -0x70(%rbp),%rdi
lea    0xed9(%rip),%rsi
mov    $0x60,%edx
call   1030 <memcpy@plt>
movl   $0x1,-0xc(%rbp)
cmpl   $0x8,-0xc(%rbp)
jge    121f <palette_rgb_emphasis+0x10f>
movl   $0x0,-0x10(%rbp)
cmpl   $0x40,-0x10(%rbp)
jge    120c <palette_rgb_emphasis+0xfc>
mov    -0x8(%rbp),%rax
imul   $0x3,-0x10(%rbp),%ecx
add    $0x0,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%edx
mov    -0xc(%rbp),%eax
add    $0x0,%eax
cltq
or     -0x70(%rbp,%rax,4),%edx
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
shl    $0x6,%ecx
imul   $0x3,%ecx,%ecx
imul   $0x3,-0x10(%rbp),%esi
add    %esi,%ecx
add    $0x0,%ecx
movslq %ecx,%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x8(%rbp),%rax
imul   $0x3,-0x10(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%edx
mov    -0xc(%rbp),%eax
add    $0x1,%eax
cltq
or     -0x70(%rbp,%rax,4),%edx
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
shl    $0x6,%ecx
imul   $0x3,%ecx,%ecx
imul   $0x3,-0x10(%rbp),%esi
add    %esi,%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x8(%rbp),%rax
imul   $0x3,-0x10(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%edx
mov    -0xc(%rbp),%eax
add    $0x2,%eax
cltq
or     -0x70(%rbp,%rax,4),%edx
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
shl    $0x6,%ecx
imul   $0x3,%ecx,%ecx
imul   $0x3,-0x10(%rbp),%esi
add    %esi,%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x10(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x10(%rbp)
jmp    1149 <palette_rgb_emphasis+0x39>
jmp    1211 <palette_rgb_emphasis+0x101>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    1138 <palette_rgb_emphasis+0x28>
add    $0x70,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<palette_rgb_emphasis>:
lea    0x308(%rdi),%rax
mov    $0x1,%r9d
xor    %r10d,%r10d
lea    0xee9(%rip),%r8
xor    %r11d,%r11d
nopw   0x0(%rax,%rax,1)
mov    %r10d,%edx
mov    0x8(%r8,%r9,4),%r10d
add    $0x1,%r9
xor    %esi,%esi
xchg   %ax,%ax
mov    (%rdi,%rsi,1),%ecx
or     %r11d,%ecx
mov    %ecx,-0x8(%rax,%rsi,1)
mov    0x4(%rdi,%rsi,1),%ecx
or     %edx,%ecx
mov    %ecx,-0x4(%rax,%rsi,1)
mov    0x8(%rdi,%rsi,1),%ecx
or     %r10d,%ecx
mov    %ecx,(%rax,%rsi,1)
add    $0xc,%rsi
cmp    $0x300,%rsi
jne    1130 <palette_rgb_emphasis+0x30>
add    $0x300,%rax
mov    %edx,%r11d
cmp    $0x8,%r9
jne    1120 <palette_rgb_emphasis+0x20>
ret

LLVM IR (-O0):
@__const.palette_rgb_emphasis.emph = [24 x i32] [i32 0, i32 0, i32 0, i32 0, i32 0, i32 255, i32 0, i32 255, i32 0, i32 0, i32 255, i32 255, i32 255, i32 0, i32 0, i32 255, i32 0, i32 255, i32 255, i32 255, i32 0, i32 255, i32 255, i32 255]
define void @palette_rgb_emphasis(i32* %0) {
%2 = alloca i32*
%3 = alloca i32
%4 = alloca i32
%5 = alloca [24 x i32]
store i32* %0, i32** %2
%6 = bitcast [24 x i32]* %5 to i8*
store i32 1, i32* %3
br label %7
7: ; preds = %88, %1
%8 = load i32, i32* %3
%9 = icmp slt i32 %8, 8
br i1 %9, label %10, label %91
10: ; preds = %7
store i32 0, i32* %4
br label %11
11: ; preds = %84, %10
%12 = load i32, i32* %4
%13 = icmp slt i32 %12, 64
br i1 %13, label %14, label %87
14: ; preds = %11
%15 = load i32*, i32** %2
%16 = load i32, i32* %4
%17 = mul nsw i32 %16, 3
%18 = add nsw i32 %17, 0
%19 = sext i32 %18 to i64
%20 = getelementptr inbounds i32, i32* %15, i64 %19
%21 = load i32, i32* %20
%22 = load i32, i32* %3
%23 = add nsw i32 %22, 0
%24 = sext i32 %23 to i64
%25 = getelementptr inbounds [24 x i32], [24 x i32]* %5, i64 0, i64 %24
%26 = load i32, i32* %25
%27 = or i32 %21, %26
%28 = load i32*, i32** %2
%29 = load i32, i32* %3
%30 = mul nsw i32 %29, 64
%31 = mul nsw i32 %30, 3
%32 = load i32, i32* %4
%33 = mul nsw i32 %32, 3
%34 = add nsw i32 %31, %33
%35 = add nsw i32 %34, 0
%36 = sext i32 %35 to i64
%37 = getelementptr inbounds i32, i32* %28, i64 %36
store i32 %27, i32* %37
%38 = load i32*, i32** %2
%39 = load i32, i32* %4
%40 = mul nsw i32 %39, 3
%41 = add nsw i32 %40, 1
%42 = sext i32 %41 to i64
%43 = getelementptr inbounds i32, i32* %38, i64 %42
%44 = load i32, i32* %43
%45 = load i32, i32* %3
%46 = add nsw i32 %45, 1
%47 = sext i32 %46 to i64
%48 = getelementptr inbounds [24 x i32], [24 x i32]* %5, i64 0, i64 %47
%49 = load i32, i32* %48
%50 = or i32 %44, %49
%51 = load i32*, i32** %2
%52 = load i32, i32* %3
%53 = mul nsw i32 %52, 64
%54 = mul nsw i32 %53, 3
%55 = load i32, i32* %4
%56 = mul nsw i32 %55, 3
%57 = add nsw i32 %54, %56
%58 = add nsw i32 %57, 1
%59 = sext i32 %58 to i64
%60 = getelementptr inbounds i32, i32* %51, i64 %59
store i32 %50, i32* %60
%61 = load i32*, i32** %2
%62 = load i32, i32* %4
%63 = mul nsw i32 %62, 3
%64 = add nsw i32 %63, 2
%65 = sext i32 %64 to i64
%66 = getelementptr inbounds i32, i32* %61, i64 %65
%67 = load i32, i32* %66
%68 = load i32, i32* %3
%69 = add nsw i32 %68, 2
%70 = sext i32 %69 to i64
%71 = getelementptr inbounds [24 x i32], [24 x i32]* %5, i64 0, i64 %70
%72 = load i32, i32* %71
%73 = or i32 %67, %72
%74 = load i32*, i32** %2
%75 = load i32, i32* %3
%76 = mul nsw i32 %75, 64
%77 = mul nsw i32 %76, 3
%78 = load i32, i32* %4
%79 = mul nsw i32 %78, 3
%80 = add nsw i32 %77, %79
%81 = add nsw i32 %80, 2
%82 = sext i32 %81 to i64
%83 = getelementptr inbounds i32, i32* %74, i64 %82
store i32 %73, i32* %83
br label %84
84: ; preds = %14
%85 = load i32, i32* %4
%86 = add nsw i32 %85, 1
store i32 %86, i32* %4
br label %11
87: ; preds = %11
br label %88
88: ; preds = %87
%89 = load i32, i32* %3
%90 = add nsw i32 %89, 1
store i32 %90, i32* %3
br label %7
91: ; preds = %7
ret void
}

LLVM IR (-O2):
@__const.palette_rgb_emphasis.emph = [24 x i32] [i32 0, i32 0, i32 0, i32 0, i32 0, i32 255, i32 0, i32 255, i32 0, i32 0, i32 255, i32 255, i32 255, i32 0, i32 0, i32 255, i32 0, i32 255, i32 255, i32 255, i32 0, i32 255, i32 255, i32 255]
define void @palette_rgb_emphasis(i32* nocapture %0) {
br label %2
2: ; preds = %1, %33
%3 = phi i32 [ 0, %1 ], [ %10, %33 ]
%4 = phi i32 [ 0, %1 ], [ %3, %33 ]
%5 = phi i64 [ 1, %1 ], [ %7, %33 ]
%6 = mul nuw nsw i64 %5, 192
%7 = add nuw nsw i64 %5, 1
%8 = add nuw nsw i64 %5, 2
%9 = getelementptr inbounds [24 x i32], [24 x i32]* @__const.palette_rgb_emphasis.emph, i64 0, i64 %8
%10 = load i32, i32* %9
br label %11
11: ; preds = %2, %11
%12 = phi i64 [ 0, %2 ], [ %31, %11 ]
%13 = mul nuw nsw i64 %12, 3
%14 = getelementptr inbounds i32, i32* %0, i64 %13
%15 = load i32, i32* %14
%16 = or i32 %4, %15
%17 = add nuw nsw i64 %13, %6
%18 = getelementptr inbounds i32, i32* %0, i64 %17
store i32 %16, i32* %18
%19 = add nuw nsw i64 %13, 1
%20 = getelementptr inbounds i32, i32* %0, i64 %19
%21 = load i32, i32* %20
%22 = or i32 %3, %21
%23 = add nuw nsw i64 %17, 1
%24 = getelementptr inbounds i32, i32* %0, i64 %23
store i32 %22, i32* %24
%25 = add nuw nsw i64 %13, 2
%26 = getelementptr inbounds i32, i32* %0, i64 %25
%27 = load i32, i32* %26
%28 = or i32 %10, %27
%29 = add nuw nsw i64 %17, 2
%30 = getelementptr inbounds i32, i32* %0, i64 %29
store i32 %28, i32* %30
%31 = add nuw nsw i64 %12, 1
%32 = icmp eq i64 %31, 64
br i1 %32, label %33, label %11
33: ; preds = %11
%34 = icmp eq i64 %7, 8
br i1 %34, label %35, label %2
35: ; preds = %33
ret void
}