void yuv_to_rgb(int y, int u, int v, int *r, int *g, int *b) {
  int c = y - 16;
  int d = u - 128;
  int e = v - 128;
  *r = (((0)) > ((((255)) < (((298 * c + 409 * e + 128) >> 8))
                      ? ((255))
                      : (((298 * c + 409 * e + 128) >> 8))))
            ? ((0))
            : ((((255)) < (((298 * c + 409 * e + 128) >> 8))
                    ? ((255))
                    : (((298 * c + 409 * e + 128) >> 8)))));
  *g = (((0)) > ((((255)) < (((298 * c - 100 * d - 208 * e + 128) >> 8))
                      ? ((255))
                      : (((298 * c - 100 * d - 208 * e + 128) >> 8))))
            ? ((0))
            : ((((255)) < (((298 * c - 100 * d - 208 * e + 128) >> 8))
                    ? ((255))
                    : (((298 * c - 100 * d - 208 * e + 128) >> 8)))));
  *b = (((0)) > ((((255)) < (((298 * c + 516 * d + 128) >> 8))
                      ? ((255))
                      : (((298 * c + 516 * d + 128) >> 8))))
            ? ((0))
            : ((((255)) < (((298 * c + 516 * d + 128) >> 8))
                    ? ((255))
                    : (((298 * c + 516 * d + 128) >> 8)))));
}


x86 assembly (clang, -O0):
<yuv_to_rgb>:
push   %rbp
mov    %rsp,%rbp
mov    %edi,-0x4(%rbp)
mov    %esi,-0x8(%rbp)
mov    %edx,-0xc(%rbp)
mov    %rcx,-0x18(%rbp)
mov    %r8,-0x20(%rbp)
mov    %r9,-0x28(%rbp)
mov    -0x4(%rbp),%eax
sub    $0x10,%eax
mov    %eax,-0x2c(%rbp)
mov    -0x8(%rbp),%eax
sub    $0x80,%eax
mov    %eax,-0x30(%rbp)
mov    -0xc(%rbp),%eax
sub    $0x80,%eax
mov    %eax,-0x34(%rbp)
imul   $0x12a,-0x2c(%rbp),%ecx
imul   $0x199,-0x34(%rbp),%eax
add    %eax,%ecx
add    $0x80,%ecx
sar    $0x8,%ecx
mov    $0xff,%eax
cmp    %ecx,%eax
jge    116b <yuv_to_rgb+0x6b>
mov    $0xff,%eax
mov    %eax,-0x38(%rbp)
jmp    1186 <yuv_to_rgb+0x86>
imul   $0x12a,-0x2c(%rbp),%eax
imul   $0x199,-0x34(%rbp),%ecx
add    %ecx,%eax
add    $0x80,%eax
sar    $0x8,%eax
mov    %eax,-0x38(%rbp)
mov    -0x38(%rbp),%ecx
xor    %eax,%eax
cmp    %ecx,%eax
jle    119d <yuv_to_rgb+0x9d>
xor    %eax,%eax
mov    %eax,-0x3c(%rbp)
jmp    11f1 <yuv_to_rgb+0xf1>
imul   $0x12a,-0x2c(%rbp),%ecx
imul   $0x199,-0x34(%rbp),%eax
add    %eax,%ecx
add    $0x80,%ecx
sar    $0x8,%ecx
mov    $0xff,%eax
cmp    %ecx,%eax
jge    11d0 <yuv_to_rgb+0xd0>
mov    $0xff,%eax
mov    %eax,-0x40(%rbp)
jmp    11eb <yuv_to_rgb+0xeb>
imul   $0x12a,-0x2c(%rbp),%eax
imul   $0x199,-0x34(%rbp),%ecx
add    %ecx,%eax
add    $0x80,%eax
sar    $0x8,%eax
mov    %eax,-0x40(%rbp)
mov    -0x40(%rbp),%eax
mov    %eax,-0x3c(%rbp)
mov    -0x3c(%rbp),%ecx
mov    -0x18(%rbp),%rax
mov    %ecx,(%rax)
imul   $0x12a,-0x2c(%rbp),%ecx
imul   $0x64,-0x30(%rbp),%eax
sub    %eax,%ecx
imul   $0xd0,-0x34(%rbp),%eax
sub    %eax,%ecx
add    $0x80,%ecx
sar    $0x8,%ecx
mov    $0xff,%eax
cmp    %ecx,%eax
jge    1233 <yuv_to_rgb+0x133>
mov    $0xff,%eax
mov    %eax,-0x44(%rbp)
jmp    1254 <yuv_to_rgb+0x154>
imul   $0x12a,-0x2c(%rbp),%eax
imul   $0x64,-0x30(%rbp),%ecx
sub    %ecx,%eax
imul   $0xd0,-0x34(%rbp),%ecx
sub    %ecx,%eax
add    $0x80,%eax
sar    $0x8,%eax
mov    %eax,-0x44(%rbp)
mov    -0x44(%rbp),%ecx
xor    %eax,%eax
cmp    %ecx,%eax
jle    126b <yuv_to_rgb+0x16b>
xor    %eax,%eax
mov    %eax,-0x48(%rbp)
jmp    12cb <yuv_to_rgb+0x1cb>
imul   $0x12a,-0x2c(%rbp),%ecx
imul   $0x64,-0x30(%rbp),%eax
sub    %eax,%ecx
imul   $0xd0,-0x34(%rbp),%eax
sub    %eax,%ecx
add    $0x80,%ecx
sar    $0x8,%ecx
mov    $0xff,%eax
cmp    %ecx,%eax
jge    12a4 <yuv_to_rgb+0x1a4>
mov    $0xff,%eax
mov    %eax,-0x4c(%rbp)
jmp    12c5 <yuv_to_rgb+0x1c5>
imul   $0x12a,-0x2c(%rbp),%eax
imul   $0x64,-0x30(%rbp),%ecx
sub    %ecx,%eax
imul   $0xd0,-0x34(%rbp),%ecx
sub    %ecx,%eax
add    $0x80,%eax
sar    $0x8,%eax
mov    %eax,-0x4c(%rbp)
mov    -0x4c(%rbp),%eax
mov    %eax,-0x48(%rbp)
mov    -0x48(%rbp),%ecx
mov    -0x20(%rbp),%rax
mov    %ecx,(%rax)
imul   $0x12a,-0x2c(%rbp),%ecx
imul   $0x204,-0x30(%rbp),%eax
add    %eax,%ecx
add    $0x80,%ecx
sar    $0x8,%ecx
mov    $0xff,%eax
cmp    %ecx,%eax
jge    1307 <yuv_to_rgb+0x207>
mov    $0xff,%eax
mov    %eax,-0x50(%rbp)
jmp    1322 <yuv_to_rgb+0x222>
imul   $0x12a,-0x2c(%rbp),%eax
imul   $0x204,-0x30(%rbp),%ecx
add    %ecx,%eax
add    $0x80,%eax
sar    $0x8,%eax
mov    %eax,-0x50(%rbp)
mov    -0x50(%rbp),%ecx
xor    %eax,%eax
cmp    %ecx,%eax
jle    1339 <yuv_to_rgb+0x239>
xor    %eax,%eax
mov    %eax,-0x54(%rbp)
jmp    138d <yuv_to_rgb+0x28d>
imul   $0x12a,-0x2c(%rbp),%ecx
imul   $0x204,-0x30(%rbp),%eax
add    %eax,%ecx
add    $0x80,%ecx
sar    $0x8,%ecx
mov    $0xff,%eax
cmp    %ecx,%eax
jge    136c <yuv_to_rgb+0x26c>
mov    $0xff,%eax
mov    %eax,-0x58(%rbp)
jmp    1387 <yuv_to_rgb+0x287>
imul   $0x12a,-0x2c(%rbp),%eax
imul   $0x204,-0x30(%rbp),%ecx
add    %ecx,%eax
add    $0x80,%eax
sar    $0x8,%eax
mov    %eax,-0x58(%rbp)
mov    -0x58(%rbp),%eax
mov    %eax,-0x54(%rbp)
mov    -0x54(%rbp),%ecx
mov    -0x28(%rbp),%rax
mov    %ecx,(%rax)
pop    %rbp
ret

x86 assembly (clang, -O2):
<yuv_to_rgb>:
push   %rbp
push   %rbx
lea    -0x80(%rsi),%r10d
add    $0xffffff80,%edx
imul   $0x12a,%edi,%eax
imul   $0x199,%edx,%edi
lea    (%rdi,%rax,1),%ebx
add    $0xffffed60,%ebx
lea    (%rdi,%rax,1),%ebp
add    $0xffffede0,%ebp
sar    $0x8,%ebp
cmp    $0xff80,%ebx
mov    $0xff,%edi
cmovge %edi,%ebp
xor    %r11d,%r11d
cmp    $0xffffff80,%ebx
cmovl  %r11d,%ebp
mov    %ebp,(%rcx)
imul   $0xffffff9c,%r10d,%ecx
add    %eax,%ecx
add    $0xffffed60,%ecx
imul   $0xffffff30,%edx,%edx
lea    (%rdx,%rcx,1),%ebx
add    $0x80,%ebx
add    %edx,%ecx
sar    $0x8,%ebx
cmp    $0xff80,%ecx
cmovge %edi,%ebx
cmp    $0xffffff80,%ecx
cmovl  %r11d,%ebx
mov    %ebx,(%r8)
shl    $0x9,%r10d
lea    (%r10,%rsi,4),%ecx
add    $0xfffffe00,%ecx
lea    (%rax,%rcx,1),%edx
add    $0xffffed60,%edx
add    %ecx,%eax
add    $0xffffede0,%eax
sar    $0x8,%eax
cmp    $0xff80,%edx
cmovge %edi,%eax
cmp    $0xffffff80,%edx
cmovl  %r11d,%eax
mov    %eax,(%r9)
pop    %rbx
pop    %rbp
ret

LLVM IR (-O0):
define void @yuv_to_rgb(i32 %0, i32 %1, i32 %2, i32* %3, i32* %4, i32* %5) {
%7 = alloca i32
%8 = alloca i32
%9 = alloca i32
%10 = alloca i32*
%11 = alloca i32*
%12 = alloca i32*
%13 = alloca i32
%14 = alloca i32
%15 = alloca i32
store i32 %0, i32* %7
store i32 %1, i32* %8
store i32 %2, i32* %9
store i32* %3, i32** %10
store i32* %4, i32** %11
store i32* %5, i32** %12
%16 = load i32, i32* %7
%17 = sub nsw i32 %16, 16
store i32 %17, i32* %13
%18 = load i32, i32* %8
%19 = sub nsw i32 %18, 128
store i32 %19, i32* %14
%20 = load i32, i32* %9
%21 = sub nsw i32 %20, 128
store i32 %21, i32* %15
%22 = load i32, i32* %13
%23 = mul nsw i32 298, %22
%24 = load i32, i32* %15
%25 = mul nsw i32 409, %24
%26 = add nsw i32 %23, %25
%27 = add nsw i32 %26, 128
%28 = ashr i32 %27, 8
%29 = icmp slt i32 255, %28
br i1 %29, label %30, label %31
30: ; preds = %6
br label %39
31: ; preds = %6
%32 = load i32, i32* %13
%33 = mul nsw i32 298, %32
%34 = load i32, i32* %15
%35 = mul nsw i32 409, %34
%36 = add nsw i32 %33, %35
%37 = add nsw i32 %36, 128
%38 = ashr i32 %37, 8
br label %39
39: ; preds = %31, %30
%40 = phi i32 [ 255, %30 ], [ %38, %31 ]
%41 = icmp sgt i32 0, %40
br i1 %41, label %42, label %43
42: ; preds = %39
br label %63
43: ; preds = %39
%44 = load i32, i32* %13
%45 = mul nsw i32 298, %44
%46 = load i32, i32* %15
%47 = mul nsw i32 409, %46
%48 = add nsw i32 %45, %47
%49 = add nsw i32 %48, 128
%50 = ashr i32 %49, 8
%51 = icmp slt i32 255, %50
br i1 %51, label %52, label %53
52: ; preds = %43
br label %61
53: ; preds = %43
%54 = load i32, i32* %13
%55 = mul nsw i32 298, %54
%56 = load i32, i32* %15
%57 = mul nsw i32 409, %56
%58 = add nsw i32 %55, %57
%59 = add nsw i32 %58, 128
%60 = ashr i32 %59, 8
br label %61
61: ; preds = %53, %52
%62 = phi i32 [ 255, %52 ], [ %60, %53 ]
br label %63
63: ; preds = %61, %42
%64 = phi i32 [ 0, %42 ], [ %62, %61 ]
%65 = load i32*, i32** %10
store i32 %64, i32* %65
%66 = load i32, i32* %13
%67 = mul nsw i32 298, %66
%68 = load i32, i32* %14
%69 = mul nsw i32 100, %68
%70 = sub nsw i32 %67, %69
%71 = load i32, i32* %15
%72 = mul nsw i32 208, %71
%73 = sub nsw i32 %70, %72
%74 = add nsw i32 %73, 128
%75 = ashr i32 %74, 8
%76 = icmp slt i32 255, %75
br i1 %76, label %77, label %78
77: ; preds = %63
br label %89
78: ; preds = %63
%79 = load i32, i32* %13
%80 = mul nsw i32 298, %79
%81 = load i32, i32* %14
%82 = mul nsw i32 100, %81
%83 = sub nsw i32 %80, %82
%84 = load i32, i32* %15
%85 = mul nsw i32 208, %84
%86 = sub nsw i32 %83, %85
%87 = add nsw i32 %86, 128
%88 = ashr i32 %87, 8
br label %89
89: ; preds = %78, %77
%90 = phi i32 [ 255, %77 ], [ %88, %78 ]
%91 = icmp sgt i32 0, %90
br i1 %91, label %92, label %93
92: ; preds = %89
br label %119
93: ; preds = %89
%94 = load i32, i32* %13
%95 = mul nsw i32 298, %94
%96 = load i32, i32* %14
%97 = mul nsw i32 100, %96
%98 = sub nsw i32 %95, %97
%99 = load i32, i32* %15
%100 = mul nsw i32 208, %99
%101 = sub nsw i32 %98, %100
%102 = add nsw i32 %101, 128
%103 = ashr i32 %102, 8
%104 = icmp slt i32 255, %103
br i1 %104, label %105, label %106
105: ; preds = %93
br label %117
106: ; preds = %93
%107 = load i32, i32* %13
%108 = mul nsw i32 298, %107
%109 = load i32, i32* %14
%110 = mul nsw i32 100, %109
%111 = sub nsw i32 %108, %110
%112 = load i32, i32* %15
%113 = mul nsw i32 208, %112
%114 = sub nsw i32 %111, %113
%115 = add nsw i32 %114, 128
%116 = ashr i32 %115, 8
br label %117
117: ; preds = %106, %105
%118 = phi i32 [ 255, %105 ], [ %116, %106 ]
br label %119
119: ; preds = %117, %92
%120 = phi i32 [ 0, %92 ], [ %118, %117 ]
%121 = load i32*, i32** %11
store i32 %120, i32* %121
%122 = load i32, i32* %13
%123 = mul nsw i32 298, %122
%124 = load i32, i32* %14
%125 = mul nsw i32 516, %124
%126 = add nsw i32 %123, %125
%127 = add nsw i32 %126, 128
%128 = ashr i32 %127, 8
%129 = icmp slt i32 255, %128
br i1 %129, label %130, label %131
130: ; preds = %119
br label %139
131: ; preds = %119
%132 = load i32, i32* %13
%133 = mul nsw i32 298, %132
%134 = load i32, i32* %14
%135 = mul nsw i32 516, %134
%136 = add nsw i32 %133, %135
%137 = add nsw i32 %136, 128
%138 = ashr i32 %137, 8
br label %139
139: ; preds = %131, %130
%140 = phi i32 [ 255, %130 ], [ %138, %131 ]
%141 = icmp sgt i32 0, %140
br i1 %141, label %142, label %143
142: ; preds = %139
br label %163
143: ; preds = %139
%144 = load i32, i32* %13
%145 = mul nsw i32 298, %144
%146 = load i32, i32* %14
%147 = mul nsw i32 516, %146
%148 = add nsw i32 %145, %147
%149 = add nsw i32 %148, 128
%150 = ashr i32 %149, 8
%151 = icmp slt i32 255, %150
br i1 %151, label %152, label %153
152: ; preds = %143
br label %161
153: ; preds = %143
%154 = load i32, i32* %13
%155 = mul nsw i32 298, %154
%156 = load i32, i32* %14
%157 = mul nsw i32 516, %156
%158 = add nsw i32 %155, %157
%159 = add nsw i32 %158, 128
%160 = ashr i32 %159, 8
br label %161
161: ; preds = %153, %152
%162 = phi i32 [ 255, %152 ], [ %160, %153 ]
br label %163
163: ; preds = %161, %142
%164 = phi i32 [ 0, %142 ], [ %162, %161 ]
%165 = load i32*, i32** %12
store i32 %164, i32* %165
ret void
}

LLVM IR (-O2):
define void @yuv_to_rgb(i32 %0, i32 %1, i32 %2, i32* nocapture writeonly %3, i32* nocapture writeonly %4, i32* nocapture writeonly %5) {
%7 = add nsw i32 %1, -128
%8 = add nsw i32 %2, -128
%9 = mul i32 %0, 298
%10 = add i32 %9, -4768
%11 = mul nsw i32 %8, 409
%12 = add nsw i32 %11, %10
%13 = add nsw i32 %12, 128
%14 = ashr i32 %13, 8
%15 = icmp sgt i32 %12, 65407
%16 = icmp slt i32 %12, -128
%17 = select i1 %15, i32 255, i32 %14
%18 = select i1 %16, i32 0, i32 %17
store i32 %18, i32* %3
%19 = mul i32 %7, -100
%20 = add i32 %19, %10
%21 = mul i32 %8, -208
%22 = add i32 %20, %21
%23 = add nsw i32 %22, 128
%24 = ashr i32 %23, 8
%25 = icmp sgt i32 %22, 65407
%26 = icmp slt i32 %22, -128
%27 = select i1 %25, i32 255, i32 %24
%28 = select i1 %26, i32 0, i32 %27
store i32 %28, i32* %4
%29 = mul nsw i32 %7, 516
%30 = add nsw i32 %29, %10
%31 = add nsw i32 %30, 128
%32 = ashr i32 %31, 8
%33 = icmp sgt i32 %30, 65407
%34 = icmp slt i32 %30, -128
%35 = select i1 %33, i32 255, i32 %32
%36 = select i1 %34, i32 0, i32 %35
store i32 %36, i32* %5
ret void
}