#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 int32_t;

/* Variables and functions */
int32_t utf8proc_open_paren_character(int32_t cclose) {
  switch (cclose) {
  case '"':
    return '"';
  case '\'':
    return '\'';
  case ')':
    return '(';
  case ']':
    return '[';
  case '}':
    return '{';
  case 65289:
    return 65288;
  case 12305:
    return 12304;
  case 12303:
    return 12302;
  case 12301:
    return 12300;
  case 12299:
    return 12298;
  case 12297:
    return 12296;
  }
  return 0;
}


x86 assembly (clang, -O0):
<utf8proc_open_paren_character>:
push   %rbp
mov    %rsp,%rbp
mov    %edi,-0x8(%rbp)
mov    -0x8(%rbp),%eax
mov    %eax,-0xc(%rbp)
sub    $0x22,%eax
je     11d1 <utf8proc_open_paren_character+0xd1>
jmp    111b <utf8proc_open_paren_character+0x1b>
mov    -0xc(%rbp),%eax
sub    $0x27,%eax
je     11dd <utf8proc_open_paren_character+0xdd>
jmp    112c <utf8proc_open_paren_character+0x2c>
mov    -0xc(%rbp),%eax
sub    $0x29,%eax
je     11e9 <utf8proc_open_paren_character+0xe9>
jmp    113d <utf8proc_open_paren_character+0x3d>
mov    -0xc(%rbp),%eax
sub    $0x5d,%eax
je     11f5 <utf8proc_open_paren_character+0xf5>
jmp    114e <utf8proc_open_paren_character+0x4e>
mov    -0xc(%rbp),%eax
sub    $0x7d,%eax
je     1201 <utf8proc_open_paren_character+0x101>
jmp    115f <utf8proc_open_paren_character+0x5f>
mov    -0xc(%rbp),%eax
sub    $0x3009,%eax
je     1249 <utf8proc_open_paren_character+0x149>
jmp    1172 <utf8proc_open_paren_character+0x72>
mov    -0xc(%rbp),%eax
sub    $0x300b,%eax
je     123d <utf8proc_open_paren_character+0x13d>
jmp    1185 <utf8proc_open_paren_character+0x85>
mov    -0xc(%rbp),%eax
sub    $0x300d,%eax
je     1231 <utf8proc_open_paren_character+0x131>
jmp    1198 <utf8proc_open_paren_character+0x98>
mov    -0xc(%rbp),%eax
sub    $0x300f,%eax
je     1225 <utf8proc_open_paren_character+0x125>
jmp    11ab <utf8proc_open_paren_character+0xab>
mov    -0xc(%rbp),%eax
sub    $0x3011,%eax
je     1219 <utf8proc_open_paren_character+0x119>
jmp    11be <utf8proc_open_paren_character+0xbe>
mov    -0xc(%rbp),%eax
sub    $0xff09,%eax
je     120d <utf8proc_open_paren_character+0x10d>
jmp    1255 <utf8proc_open_paren_character+0x155>
movl   $0x22,-0x4(%rbp)
jmp    125c <utf8proc_open_paren_character+0x15c>
movl   $0x27,-0x4(%rbp)
jmp    125c <utf8proc_open_paren_character+0x15c>
movl   $0x28,-0x4(%rbp)
jmp    125c <utf8proc_open_paren_character+0x15c>
movl   $0x5b,-0x4(%rbp)
jmp    125c <utf8proc_open_paren_character+0x15c>
movl   $0x7b,-0x4(%rbp)
jmp    125c <utf8proc_open_paren_character+0x15c>
movl   $0xff08,-0x4(%rbp)
jmp    125c <utf8proc_open_paren_character+0x15c>
movl   $0x3010,-0x4(%rbp)
jmp    125c <utf8proc_open_paren_character+0x15c>
movl   $0x300e,-0x4(%rbp)
jmp    125c <utf8proc_open_paren_character+0x15c>
movl   $0x300c,-0x4(%rbp)
jmp    125c <utf8proc_open_paren_character+0x15c>
movl   $0x300a,-0x4(%rbp)
jmp    125c <utf8proc_open_paren_character+0x15c>
movl   $0x3008,-0x4(%rbp)
jmp    125c <utf8proc_open_paren_character+0x15c>
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<utf8proc_open_paren_character>:
mov    %edi,%eax
cmp    $0x7c,%edi
jle    1128 <utf8proc_open_paren_character+0x28>
lea    -0x3009(%rax),%ecx
cmp    $0x8,%ecx
ja     114d <utf8proc_open_paren_character+0x4d>
lea    0xee7(%rip),%rax
movslq (%rax,%rcx,4),%rcx
add    %rax,%rcx
jmp    *%rcx
mov    $0x3008,%eax
ret
cmp    $0x28,%eax
jg     113d <utf8proc_open_paren_character+0x3d>
cmp    $0x22,%eax
je     1167 <utf8proc_open_paren_character+0x67>
cmp    $0x27,%eax
jne    1165 <utf8proc_open_paren_character+0x65>
mov    $0x27,%eax
ret
cmp    $0x29,%eax
je     115f <utf8proc_open_paren_character+0x5f>
cmp    $0x5d,%eax
jne    1165 <utf8proc_open_paren_character+0x65>
mov    $0x5b,%eax
ret
cmp    $0x7d,%eax
je     1180 <utf8proc_open_paren_character+0x80>
cmp    $0xff09,%eax
jne    1165 <utf8proc_open_paren_character+0x65>
mov    $0xff08,%eax
ret
mov    $0x28,%eax
ret
xor    %eax,%eax
ret
mov    $0x300a,%eax
ret
mov    $0x300c,%eax
ret
mov    $0x300e,%eax
ret
mov    $0x3010,%eax
ret
mov    $0x7b,%eax
ret

LLVM IR (-O0):
define i32 @utf8proc_open_paren_character(i32 %0) {
%2 = alloca i32
%3 = alloca i32
store i32 %0, i32* %3
%4 = load i32, i32* %3
switch i32 %4, label %16 [
i32 34, label %5
i32 39, label %6
i32 41, label %7
i32 93, label %8
i32 125, label %9
i32 65289, label %10
i32 12305, label %11
i32 12303, label %12
i32 12301, label %13
i32 12299, label %14
i32 12297, label %15
]
5: ; preds = %1
store i32 34, i32* %2
br label %17
6: ; preds = %1
store i32 39, i32* %2
br label %17
7: ; preds = %1
store i32 40, i32* %2
br label %17
8: ; preds = %1
store i32 91, i32* %2
br label %17
9: ; preds = %1
store i32 123, i32* %2
br label %17
10: ; preds = %1
store i32 65288, i32* %2
br label %17
11: ; preds = %1
store i32 12304, i32* %2
br label %17
12: ; preds = %1
store i32 12302, i32* %2
br label %17
13: ; preds = %1
store i32 12300, i32* %2
br label %17
14: ; preds = %1
store i32 12298, i32* %2
br label %17
15: ; preds = %1
store i32 12296, i32* %2
br label %17
16: ; preds = %1
store i32 0, i32* %2
br label %17
17: ; preds = %16, %15, %14, %13, %12, %11, %10, %9, %8, %7, %6, %5
%18 = load i32, i32* %2
ret i32 %18
}

LLVM IR (-O2):
define i32 @utf8proc_open_paren_character(i32 %0) {
switch i32 %0, label %12 [
i32 34, label %13
i32 39, label %2
i32 41, label %3
i32 93, label %4
i32 125, label %5
i32 65289, label %6
i32 12305, label %7
i32 12303, label %8
i32 12301, label %9
i32 12299, label %10
i32 12297, label %11
]
2: ; preds = %1
br label %13
3: ; preds = %1
br label %13
4: ; preds = %1
br label %13
5: ; preds = %1
br label %13
6: ; preds = %1
br label %13
7: ; preds = %1
br label %13
8: ; preds = %1
br label %13
9: ; preds = %1
br label %13
10: ; preds = %1
br label %13
11: ; preds = %1
br label %13
12: ; preds = %1
br label %13
13: ; preds = %1, %12, %11, %10, %9, %8, %7, %6, %5, %4, %3, %2
%14 = phi i32 [ 0, %12 ], [ 12296, %11 ], [ 12298, %10 ], [ 12300, %9 ], [ 12302, %8 ], [ 12304, %7 ], [ 65288, %6 ], [ 123, %5 ], [ 91, %4 ], [ 40, %3 ], [ 39, %2 ], [ %0, %1 ]
ret i32 %14
}