int precedenta(int codu) {
  switch (codu) {
  case 300:
  case 301:
  case '~':
  case '!':
    return 13 - 4;
    break;
  case '*':
  case '/':
  case '%':
    return 13 - 3;
    break;
  case '+':
  case '-':
    return 13 - 4;
    break;
  case '<':
  case 304:
  case '>':
  case 305:
  case 307:
  case 306:
    return 13 - 6;
    break;
  case '&':
    return 13 - 7;
    break;
  case '^':
    return 13 - 8;
    break;
  case '|':
    return 13 - 9;
    break;
  case 308:
    return 13 - 10;
    break;
  case 309:
    return 13 - 11;
    break;
  case '=':
    return 13 - 12;
    break;
  case ',':
    return 13 - 13;
    break;
  default:
    return -1;
    break;
  }
  return -1;
}


x86 assembly (clang, -O0):
<precedenta>:
push   %rbp
mov    %rsp,%rbp
mov    %edi,-0x8(%rbp)
mov    -0x8(%rbp),%eax
mov    %eax,-0xc(%rbp)
sub    $0x21,%eax
je     124a <precedenta+0x14a>
jmp    111b <precedenta+0x1b>
mov    -0xc(%rbp),%eax
sub    $0x25,%eax
je     1256 <precedenta+0x156>
jmp    112c <precedenta+0x2c>
mov    -0xc(%rbp),%eax
sub    $0x26,%eax
je     127a <precedenta+0x17a>
jmp    113d <precedenta+0x3d>
mov    -0xc(%rbp),%eax
sub    $0x2a,%eax
je     1256 <precedenta+0x156>
jmp    114e <precedenta+0x4e>
mov    -0xc(%rbp),%eax
sub    $0x2b,%eax
je     1262 <precedenta+0x162>
jmp    115f <precedenta+0x5f>
mov    -0xc(%rbp),%eax
sub    $0x2c,%eax
je     12c2 <precedenta+0x1c2>
jmp    1170 <precedenta+0x70>
mov    -0xc(%rbp),%eax
sub    $0x2d,%eax
je     1262 <precedenta+0x162>
jmp    1181 <precedenta+0x81>
mov    -0xc(%rbp),%eax
sub    $0x2f,%eax
je     1256 <precedenta+0x156>
jmp    1192 <precedenta+0x92>
mov    -0xc(%rbp),%eax
sub    $0x3c,%eax
je     126e <precedenta+0x16e>
jmp    11a3 <precedenta+0xa3>
mov    -0xc(%rbp),%eax
sub    $0x3d,%eax
je     12b6 <precedenta+0x1b6>
jmp    11b4 <precedenta+0xb4>
mov    -0xc(%rbp),%eax
sub    $0x3e,%eax
je     126e <precedenta+0x16e>
jmp    11c5 <precedenta+0xc5>
mov    -0xc(%rbp),%eax
sub    $0x5e,%eax
je     1286 <precedenta+0x186>
jmp    11d6 <precedenta+0xd6>
mov    -0xc(%rbp),%eax
sub    $0x7c,%eax
je     1292 <precedenta+0x192>
jmp    11e7 <precedenta+0xe7>
mov    -0xc(%rbp),%eax
sub    $0x7e,%eax
je     124a <precedenta+0x14a>
jmp    11f8 <precedenta+0xf8>
mov    -0xc(%rbp),%eax
add    $0xfffffed4,%eax
sub    $0x2,%eax
jb     124a <precedenta+0x14a>
jmp    120e <precedenta+0x10e>
mov    -0xc(%rbp),%eax
add    $0xfffffed0,%eax
sub    $0x4,%eax
jb     126e <precedenta+0x16e>
jmp    1224 <precedenta+0x124>
mov    -0xc(%rbp),%eax
sub    $0x134,%eax
je     129e <precedenta+0x19e>
jmp    1237 <precedenta+0x137>
mov    -0xc(%rbp),%eax
sub    $0x135,%eax
je     12aa <precedenta+0x1aa>
jmp    12ce <precedenta+0x1ce>
movl   $0x9,-0x4(%rbp)
jmp    12d5 <precedenta+0x1d5>
movl   $0xa,-0x4(%rbp)
jmp    12d5 <precedenta+0x1d5>
movl   $0x9,-0x4(%rbp)
jmp    12d5 <precedenta+0x1d5>
movl   $0x7,-0x4(%rbp)
jmp    12d5 <precedenta+0x1d5>
movl   $0x6,-0x4(%rbp)
jmp    12d5 <precedenta+0x1d5>
movl   $0x5,-0x4(%rbp)
jmp    12d5 <precedenta+0x1d5>
movl   $0x4,-0x4(%rbp)
jmp    12d5 <precedenta+0x1d5>
movl   $0x3,-0x4(%rbp)
jmp    12d5 <precedenta+0x1d5>
movl   $0x2,-0x4(%rbp)
jmp    12d5 <precedenta+0x1d5>
movl   $0x1,-0x4(%rbp)
jmp    12d5 <precedenta+0x1d5>
movl   $0x0,-0x4(%rbp)
jmp    12d5 <precedenta+0x1d5>
movl   $0xffffffff,-0x4(%rbp)
mov    -0x4(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<precedenta>:
mov    $0x9,%eax
lea    -0x21(%rdi),%ecx
cmp    $0x5d,%ecx
ja     111e <precedenta+0x1e>
lea    0xeec(%rip),%rdx
movslq (%rdx,%rcx,4),%rcx
add    %rdx,%rcx
jmp    *%rcx
ret
add    $0xfffffed4,%edi
cmp    $0x9,%edi
ja     1160 <precedenta+0x60>
lea    0x1048(%rip),%rcx
movslq (%rcx,%rdi,4),%rdx
add    %rcx,%rdx
jmp    *%rdx
mov    $0x7,%eax
ret
mov    $0xa,%eax
ret
mov    $0x6,%eax
ret
xor    %eax,%eax
ret
mov    $0x1,%eax
ret
mov    $0x5,%eax
ret
mov    $0x4,%eax
ret
mov    $0xffffffff,%eax
ret
mov    $0x3,%eax
ret
mov    $0x2,%eax
ret

LLVM IR (-O0):
define i32 @precedenta(i32 %0) {
%2 = alloca i32
%3 = alloca i32
store i32 %0, i32* %3
%4 = load i32, i32* %3
switch i32 %4, label %16 [
i32 300, label %5
i32 301, label %5
i32 126, label %5
i32 33, label %5
i32 42, label %6
i32 47, label %6
i32 37, label %6
i32 43, label %7
i32 45, label %7
i32 60, label %8
i32 304, label %8
i32 62, label %8
i32 305, label %8
i32 307, label %8
i32 306, label %8
i32 38, label %9
i32 94, label %10
i32 124, label %11
i32 308, label %12
i32 309, label %13
i32 61, label %14
i32 44, label %15
]
5: ; preds = %1, %1, %1, %1
store i32 9, i32* %2
br label %17
6: ; preds = %1, %1, %1
store i32 10, i32* %2
br label %17
7: ; preds = %1, %1
store i32 9, i32* %2
br label %17
8: ; preds = %1, %1, %1, %1, %1, %1
store i32 7, i32* %2
br label %17
9: ; preds = %1
store i32 6, i32* %2
br label %17
10: ; preds = %1
store i32 5, i32* %2
br label %17
11: ; preds = %1
store i32 4, i32* %2
br label %17
12: ; preds = %1
store i32 3, i32* %2
br label %17
13: ; preds = %1
store i32 2, i32* %2
br label %17
14: ; preds = %1
store i32 1, i32* %2
br label %17
15: ; preds = %1
store i32 0, i32* %2
br label %17
16: ; preds = %1
store i32 -1, 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 @precedenta(i32 %0) {
switch i32 %0, label %11 [
i32 300, label %12
i32 301, label %12
i32 126, label %12
i32 33, label %12
i32 42, label %2
i32 47, label %2
i32 37, label %2
i32 43, label %12
i32 45, label %12
i32 60, label %3
i32 304, label %3
i32 62, label %3
i32 305, label %3
i32 307, label %3
i32 306, label %3
i32 38, label %4
i32 94, label %5
i32 124, label %6
i32 308, label %7
i32 309, label %8
i32 61, label %9
i32 44, label %10
]
2: ; preds = %1, %1, %1
br label %12
3: ; preds = %1, %1, %1, %1, %1, %1
br label %12
4: ; preds = %1
br label %12
5: ; preds = %1
br label %12
6: ; preds = %1
br label %12
7: ; preds = %1
br label %12
8: ; preds = %1
br label %12
9: ; preds = %1
br label %12
10: ; preds = %1
br label %12
11: ; preds = %1
br label %12
12: ; preds = %1, %1, %1, %1, %1, %1, %11, %10, %9, %8, %7, %6, %5, %4, %3, %2
%13 = phi i32 [ -1, %11 ], [ 0, %10 ], [ 1, %9 ], [ 2, %8 ], [ 3, %7 ], [ 4, %6 ], [ 5, %5 ], [ 6, %4 ], [ 7, %3 ], [ 10, %2 ], [ 9, %1 ], [ 9, %1 ], [ 9, %1 ], [ 9, %1 ], [ 9, %1 ], [ 9, %1 ]
ret i32 %13
}