int calc_padding_ccb(int binary_length, int cc_width) {
  int target_bitsize = 0;
  switch (cc_width) {
  case 2:
    if (binary_length <= 336) {
      target_bitsize = 336;
    }
    if (binary_length <= 296) {
      target_bitsize = 296;
    }
    if (binary_length <= 256) {
      target_bitsize = 256;
    }
    if (binary_length <= 208) {
      target_bitsize = 208;
    }
    if (binary_length <= 160) {
      target_bitsize = 160;
    }
    if (binary_length <= 104) {
      target_bitsize = 104;
    }
    if (binary_length <= 56) {
      target_bitsize = 56;
    }
    break;
  case 3:
    if (binary_length <= 768) {
      target_bitsize = 768;
    }
    if (binary_length <= 648) {
      target_bitsize = 648;
    }
    if (binary_length <= 536) {
      target_bitsize = 536;
    }
    if (binary_length <= 416) {
      target_bitsize = 416;
    }
    if (binary_length <= 304) {
      target_bitsize = 304;
    }
    if (binary_length <= 208) {
      target_bitsize = 208;
    }
    if (binary_length <= 152) {
      target_bitsize = 152;
    }
    if (binary_length <= 112) {
      target_bitsize = 112;
    }
    if (binary_length <= 72) {
      target_bitsize = 72;
    }
    if (binary_length <= 32) {
      target_bitsize = 32;
    }
    break;
  case 4:
    if (binary_length <= 1184) {
      target_bitsize = 1184;
    }
    if (binary_length <= 1016) {
      target_bitsize = 1016;
    }
    if (binary_length <= 840) {
      target_bitsize = 840;
    }
    if (binary_length <= 672) {
      target_bitsize = 672;
    }
    if (binary_length <= 496) {
      target_bitsize = 496;
    }
    if (binary_length <= 352) {
      target_bitsize = 352;
    }
    if (binary_length <= 264) {
      target_bitsize = 264;
    }
    if (binary_length <= 208) {
      target_bitsize = 208;
    }
    if (binary_length <= 152) {
      target_bitsize = 152;
    }
    if (binary_length <= 96) {
      target_bitsize = 96;
    }
    if (binary_length <= 56) {
      target_bitsize = 56;
    }
    break;
  }
  return target_bitsize;
}


x86 assembly (clang, -O0):
<calc_padding_ccb>:
push   %rbp
mov    %rsp,%rbp
mov    %edi,-0x4(%rbp)
mov    %esi,-0x8(%rbp)
movl   $0x0,-0xc(%rbp)
mov    -0x8(%rbp),%eax
mov    %eax,-0x10(%rbp)
sub    $0x2,%eax
je     1147 <calc_padding_ccb+0x47>
jmp    1125 <calc_padding_ccb+0x25>
mov    -0x10(%rbp),%eax
sub    $0x3,%eax
je     11d2 <calc_padding_ccb+0xd2>
jmp    1136 <calc_padding_ccb+0x36>
mov    -0x10(%rbp),%eax
sub    $0x4,%eax
je     1296 <calc_padding_ccb+0x196>
jmp    1371 <calc_padding_ccb+0x271>
cmpl   $0x150,-0x4(%rbp)
jg     115b <calc_padding_ccb+0x5b>
movl   $0x150,-0xc(%rbp)
cmpl   $0x128,-0x4(%rbp)
jg     116f <calc_padding_ccb+0x6f>
movl   $0x128,-0xc(%rbp)
cmpl   $0x100,-0x4(%rbp)
jg     1183 <calc_padding_ccb+0x83>
movl   $0x100,-0xc(%rbp)
cmpl   $0xd0,-0x4(%rbp)
jg     1197 <calc_padding_ccb+0x97>
movl   $0xd0,-0xc(%rbp)
cmpl   $0xa0,-0x4(%rbp)
jg     11ab <calc_padding_ccb+0xab>
movl   $0xa0,-0xc(%rbp)
cmpl   $0x68,-0x4(%rbp)
jg     11bc <calc_padding_ccb+0xbc>
movl   $0x68,-0xc(%rbp)
cmpl   $0x38,-0x4(%rbp)
jg     11cd <calc_padding_ccb+0xcd>
movl   $0x38,-0xc(%rbp)
jmp    1371 <calc_padding_ccb+0x271>
cmpl   $0x300,-0x4(%rbp)
jg     11e6 <calc_padding_ccb+0xe6>
movl   $0x300,-0xc(%rbp)
cmpl   $0x288,-0x4(%rbp)
jg     11fa <calc_padding_ccb+0xfa>
movl   $0x288,-0xc(%rbp)
cmpl   $0x218,-0x4(%rbp)
jg     120e <calc_padding_ccb+0x10e>
movl   $0x218,-0xc(%rbp)
cmpl   $0x1a0,-0x4(%rbp)
jg     1222 <calc_padding_ccb+0x122>
movl   $0x1a0,-0xc(%rbp)
cmpl   $0x130,-0x4(%rbp)
jg     1236 <calc_padding_ccb+0x136>
movl   $0x130,-0xc(%rbp)
cmpl   $0xd0,-0x4(%rbp)
jg     124a <calc_padding_ccb+0x14a>
movl   $0xd0,-0xc(%rbp)
cmpl   $0x98,-0x4(%rbp)
jg     125e <calc_padding_ccb+0x15e>
movl   $0x98,-0xc(%rbp)
cmpl   $0x70,-0x4(%rbp)
jg     126f <calc_padding_ccb+0x16f>
movl   $0x70,-0xc(%rbp)
cmpl   $0x48,-0x4(%rbp)
jg     1280 <calc_padding_ccb+0x180>
movl   $0x48,-0xc(%rbp)
cmpl   $0x20,-0x4(%rbp)
jg     1291 <calc_padding_ccb+0x191>
movl   $0x20,-0xc(%rbp)
jmp    1371 <calc_padding_ccb+0x271>
cmpl   $0x4a0,-0x4(%rbp)
jg     12aa <calc_padding_ccb+0x1aa>
movl   $0x4a0,-0xc(%rbp)
cmpl   $0x3f8,-0x4(%rbp)
jg     12be <calc_padding_ccb+0x1be>
movl   $0x3f8,-0xc(%rbp)
cmpl   $0x348,-0x4(%rbp)
jg     12d2 <calc_padding_ccb+0x1d2>
movl   $0x348,-0xc(%rbp)
cmpl   $0x2a0,-0x4(%rbp)
jg     12e6 <calc_padding_ccb+0x1e6>
movl   $0x2a0,-0xc(%rbp)
cmpl   $0x1f0,-0x4(%rbp)
jg     12fa <calc_padding_ccb+0x1fa>
movl   $0x1f0,-0xc(%rbp)
cmpl   $0x160,-0x4(%rbp)
jg     130e <calc_padding_ccb+0x20e>
movl   $0x160,-0xc(%rbp)
cmpl   $0x108,-0x4(%rbp)
jg     1322 <calc_padding_ccb+0x222>
movl   $0x108,-0xc(%rbp)
cmpl   $0xd0,-0x4(%rbp)
jg     1336 <calc_padding_ccb+0x236>
movl   $0xd0,-0xc(%rbp)
cmpl   $0x98,-0x4(%rbp)
jg     134a <calc_padding_ccb+0x24a>
movl   $0x98,-0xc(%rbp)
cmpl   $0x60,-0x4(%rbp)
jg     135b <calc_padding_ccb+0x25b>
movl   $0x60,-0xc(%rbp)
cmpl   $0x38,-0x4(%rbp)
jg     136c <calc_padding_ccb+0x26c>
movl   $0x38,-0xc(%rbp)
jmp    1371 <calc_padding_ccb+0x271>
mov    -0xc(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<calc_padding_ccb>:
xor    %eax,%eax
cmp    $0x4,%esi
je     116e <calc_padding_ccb+0x6e>
cmp    $0x3,%esi
je     1203 <calc_padding_ccb+0x103>
cmp    $0x2,%esi
jne    1202 <calc_padding_ccb+0x102>
xor    %eax,%eax
cmp    $0x151,%edi
mov    $0x150,%ecx
cmovge %eax,%ecx
cmp    $0x129,%edi
mov    $0x128,%eax
cmovge %ecx,%eax
cmp    $0x101,%edi
mov    $0x100,%ecx
cmovge %eax,%ecx
cmp    $0xd1,%edi
mov    $0xd0,%eax
cmovge %ecx,%eax
cmp    $0xa1,%edi
mov    $0xa0,%ecx
cmovge %eax,%ecx
cmp    $0x69,%edi
mov    $0x68,%edx
jmp    11f4 <calc_padding_ccb+0xf4>
cmp    $0x4a1,%edi
mov    $0x4a0,%ecx
cmovge %eax,%ecx
cmp    $0x3f9,%edi
mov    $0x3f8,%eax
cmovge %ecx,%eax
cmp    $0x349,%edi
mov    $0x348,%ecx
cmovge %eax,%ecx
cmp    $0x2a1,%edi
mov    $0x2a0,%eax
cmovge %ecx,%eax
cmp    $0x1f1,%edi
mov    $0x1f0,%ecx
cmovge %eax,%ecx
cmp    $0x161,%edi
mov    $0x160,%eax
cmovge %ecx,%eax
cmp    $0x109,%edi
mov    $0x108,%ecx
cmovge %eax,%ecx
cmp    $0xd1,%edi
mov    $0xd0,%eax
cmovge %ecx,%eax
cmp    $0x99,%edi
mov    $0x98,%ecx
cmovge %eax,%ecx
cmp    $0x61,%edi
mov    $0x60,%edx
cmovge %ecx,%edx
cmp    $0x39,%edi
mov    $0x38,%eax
cmovge %edx,%eax
ret
cmp    $0x301,%edi
mov    $0x300,%ecx
cmovge %eax,%ecx
cmp    $0x289,%edi
mov    $0x288,%eax
cmovge %ecx,%eax
cmp    $0x219,%edi
mov    $0x218,%ecx
cmovge %eax,%ecx
cmp    $0x1a1,%edi
mov    $0x1a0,%eax
cmovge %ecx,%eax
cmp    $0x131,%edi
mov    $0x130,%ecx
cmovge %eax,%ecx
cmp    $0xd1,%edi
mov    $0xd0,%eax
cmovge %ecx,%eax
cmp    $0x99,%edi
mov    $0x98,%ecx
cmovge %eax,%ecx
cmp    $0x71,%edi
mov    $0x70,%eax
cmovge %ecx,%eax
cmp    $0x49,%edi
mov    $0x48,%ecx
cmovge %eax,%ecx
cmp    $0x21,%edi
mov    $0x20,%eax
cmovge %ecx,%eax
ret

LLVM IR (-O0):
define i32 @calc_padding_ccb(i32 %0, i32 %1) {
%3 = alloca i32
%4 = alloca i32
%5 = alloca i32
store i32 %0, i32* %3
store i32 %1, i32* %4
store i32 0, i32* %5
%6 = load i32, i32* %4
switch i32 %6, label %122 [
i32 2, label %7
i32 3, label %36
i32 4, label %77
]
7: ; preds = %2
%8 = load i32, i32* %3
%9 = icmp sle i32 %8, 336
br i1 %9, label %10, label %11
10: ; preds = %7
store i32 336, i32* %5
br label %11
11: ; preds = %10, %7
%12 = load i32, i32* %3
%13 = icmp sle i32 %12, 296
br i1 %13, label %14, label %15
14: ; preds = %11
store i32 296, i32* %5
br label %15
15: ; preds = %14, %11
%16 = load i32, i32* %3
%17 = icmp sle i32 %16, 256
br i1 %17, label %18, label %19
18: ; preds = %15
store i32 256, i32* %5
br label %19
19: ; preds = %18, %15
%20 = load i32, i32* %3
%21 = icmp sle i32 %20, 208
br i1 %21, label %22, label %23
22: ; preds = %19
store i32 208, i32* %5
br label %23
23: ; preds = %22, %19
%24 = load i32, i32* %3
%25 = icmp sle i32 %24, 160
br i1 %25, label %26, label %27
26: ; preds = %23
store i32 160, i32* %5
br label %27
27: ; preds = %26, %23
%28 = load i32, i32* %3
%29 = icmp sle i32 %28, 104
br i1 %29, label %30, label %31
30: ; preds = %27
store i32 104, i32* %5
br label %31
31: ; preds = %30, %27
%32 = load i32, i32* %3
%33 = icmp sle i32 %32, 56
br i1 %33, label %34, label %35
34: ; preds = %31
store i32 56, i32* %5
br label %35
35: ; preds = %34, %31
br label %122
36: ; preds = %2
%37 = load i32, i32* %3
%38 = icmp sle i32 %37, 768
br i1 %38, label %39, label %40
39: ; preds = %36
store i32 768, i32* %5
br label %40
40: ; preds = %39, %36
%41 = load i32, i32* %3
%42 = icmp sle i32 %41, 648
br i1 %42, label %43, label %44
43: ; preds = %40
store i32 648, i32* %5
br label %44
44: ; preds = %43, %40
%45 = load i32, i32* %3
%46 = icmp sle i32 %45, 536
br i1 %46, label %47, label %48
47: ; preds = %44
store i32 536, i32* %5
br label %48
48: ; preds = %47, %44
%49 = load i32, i32* %3
%50 = icmp sle i32 %49, 416
br i1 %50, label %51, label %52
51: ; preds = %48
store i32 416, i32* %5
br label %52
52: ; preds = %51, %48
%53 = load i32, i32* %3
%54 = icmp sle i32 %53, 304
br i1 %54, label %55, label %56
55: ; preds = %52
store i32 304, i32* %5
br label %56
56: ; preds = %55, %52
%57 = load i32, i32* %3
%58 = icmp sle i32 %57, 208
br i1 %58, label %59, label %60
59: ; preds = %56
store i32 208, i32* %5
br label %60
60: ; preds = %59, %56
%61 = load i32, i32* %3
%62 = icmp sle i32 %61, 152
br i1 %62, label %63, label %64
63: ; preds = %60
store i32 152, i32* %5
br label %64
64: ; preds = %63, %60
%65 = load i32, i32* %3
%66 = icmp sle i32 %65, 112
br i1 %66, label %67, label %68
67: ; preds = %64
store i32 112, i32* %5
br label %68
68: ; preds = %67, %64
%69 = load i32, i32* %3
%70 = icmp sle i32 %69, 72
br i1 %70, label %71, label %72
71: ; preds = %68
store i32 72, i32* %5
br label %72
72: ; preds = %71, %68
%73 = load i32, i32* %3
%74 = icmp sle i32 %73, 32
br i1 %74, label %75, label %76
75: ; preds = %72
store i32 32, i32* %5
br label %76
76: ; preds = %75, %72
br label %122
77: ; preds = %2
%78 = load i32, i32* %3
%79 = icmp sle i32 %78, 1184
br i1 %79, label %80, label %81
80: ; preds = %77
store i32 1184, i32* %5
br label %81
81: ; preds = %80, %77
%82 = load i32, i32* %3
%83 = icmp sle i32 %82, 1016
br i1 %83, label %84, label %85
84: ; preds = %81
store i32 1016, i32* %5
br label %85
85: ; preds = %84, %81
%86 = load i32, i32* %3
%87 = icmp sle i32 %86, 840
br i1 %87, label %88, label %89
88: ; preds = %85
store i32 840, i32* %5
br label %89
89: ; preds = %88, %85
%90 = load i32, i32* %3
%91 = icmp sle i32 %90, 672
br i1 %91, label %92, label %93
92: ; preds = %89
store i32 672, i32* %5
br label %93
93: ; preds = %92, %89
%94 = load i32, i32* %3
%95 = icmp sle i32 %94, 496
br i1 %95, label %96, label %97
96: ; preds = %93
store i32 496, i32* %5
br label %97
97: ; preds = %96, %93
%98 = load i32, i32* %3
%99 = icmp sle i32 %98, 352
br i1 %99, label %100, label %101
100: ; preds = %97
store i32 352, i32* %5
br label %101
101: ; preds = %100, %97
%102 = load i32, i32* %3
%103 = icmp sle i32 %102, 264
br i1 %103, label %104, label %105
104: ; preds = %101
store i32 264, i32* %5
br label %105
105: ; preds = %104, %101
%106 = load i32, i32* %3
%107 = icmp sle i32 %106, 208
br i1 %107, label %108, label %109
108: ; preds = %105
store i32 208, i32* %5
br label %109
109: ; preds = %108, %105
%110 = load i32, i32* %3
%111 = icmp sle i32 %110, 152
br i1 %111, label %112, label %113
112: ; preds = %109
store i32 152, i32* %5
br label %113
113: ; preds = %112, %109
%114 = load i32, i32* %3
%115 = icmp sle i32 %114, 96
br i1 %115, label %116, label %117
116: ; preds = %113
store i32 96, i32* %5
br label %117
117: ; preds = %116, %113
%118 = load i32, i32* %3
%119 = icmp sle i32 %118, 56
br i1 %119, label %120, label %121
120: ; preds = %117
store i32 56, i32* %5
br label %121
121: ; preds = %120, %117
br label %122
122: ; preds = %2, %121, %76, %35
%123 = load i32, i32* %5
ret i32 %123
}

LLVM IR (-O2):
define i32 @calc_padding_ccb(i32 %0, i32 %1) {
switch i32 %1, label %62 [
i32 2, label %3
i32 3, label %18
i32 4, label %39
]
3: ; preds = %2
%4 = icmp sgt i32 %0, 336
%5 = select i1 %4, i32 0, i32 336
%6 = icmp sgt i32 %0, 296
%7 = select i1 %6, i32 %5, i32 296
%8 = icmp sgt i32 %0, 256
%9 = select i1 %8, i32 %7, i32 256
%10 = icmp sgt i32 %0, 208
%11 = select i1 %10, i32 %9, i32 208
%12 = icmp sgt i32 %0, 160
%13 = select i1 %12, i32 %11, i32 160
%14 = icmp sgt i32 %0, 104
%15 = select i1 %14, i32 %13, i32 104
%16 = icmp sgt i32 %0, 56
%17 = select i1 %16, i32 %15, i32 56
br label %62
18: ; preds = %2
%19 = icmp sgt i32 %0, 768
%20 = select i1 %19, i32 0, i32 768
%21 = icmp sgt i32 %0, 648
%22 = select i1 %21, i32 %20, i32 648
%23 = icmp sgt i32 %0, 536
%24 = select i1 %23, i32 %22, i32 536
%25 = icmp sgt i32 %0, 416
%26 = select i1 %25, i32 %24, i32 416
%27 = icmp sgt i32 %0, 304
%28 = select i1 %27, i32 %26, i32 304
%29 = icmp sgt i32 %0, 208
%30 = select i1 %29, i32 %28, i32 208
%31 = icmp sgt i32 %0, 152
%32 = select i1 %31, i32 %30, i32 152
%33 = icmp sgt i32 %0, 112
%34 = select i1 %33, i32 %32, i32 112
%35 = icmp sgt i32 %0, 72
%36 = select i1 %35, i32 %34, i32 72
%37 = icmp sgt i32 %0, 32
%38 = select i1 %37, i32 %36, i32 32
br label %62
39: ; preds = %2
%40 = icmp sgt i32 %0, 1184
%41 = select i1 %40, i32 0, i32 1184
%42 = icmp sgt i32 %0, 1016
%43 = select i1 %42, i32 %41, i32 1016
%44 = icmp sgt i32 %0, 840
%45 = select i1 %44, i32 %43, i32 840
%46 = icmp sgt i32 %0, 672
%47 = select i1 %46, i32 %45, i32 672
%48 = icmp sgt i32 %0, 496
%49 = select i1 %48, i32 %47, i32 496
%50 = icmp sgt i32 %0, 352
%51 = select i1 %50, i32 %49, i32 352
%52 = icmp sgt i32 %0, 264
%53 = select i1 %52, i32 %51, i32 264
%54 = icmp sgt i32 %0, 208
%55 = select i1 %54, i32 %53, i32 208
%56 = icmp sgt i32 %0, 152
%57 = select i1 %56, i32 %55, i32 152
%58 = icmp sgt i32 %0, 96
%59 = select i1 %58, i32 %57, i32 96
%60 = icmp sgt i32 %0, 56
%61 = select i1 %60, i32 %59, i32 56
br label %62
62: ; preds = %39, %18, %3, %2
%63 = phi i32 [ 0, %2 ], [ %17, %3 ], [ %38, %18 ], [ %61, %39 ]
ret i32 %63
}