long cv_face_to_map_event_n(char mnr) {
  long n;
  if (('0' <= mnr) && (mnr <= '9'))
    n = mnr - '0';
  else if (('a' <= mnr) && (mnr <= 'z'))
    n = mnr - 'a' + 10;
  else
    return -1;
  if (n < 0)
    return -1;
  if (n >= (10 + ('z' - 'a' + 1)))
    return -1;
  return n;
}


x86 assembly (clang, -O0):
<cv_face_to_map_event_n>:
push   %rbp
mov    %rsp,%rbp
mov    %dil,%al
mov    %al,-0x9(%rbp)
movsbl -0x9(%rbp),%ecx
mov    $0x30,%eax
cmp    %ecx,%eax
jg     113a <cv_face_to_map_event_n+0x3a>
movsbl -0x9(%rbp),%eax
cmp    $0x39,%eax
jg     113a <cv_face_to_map_event_n+0x3a>
movsbl -0x9(%rbp),%eax
sub    $0x30,%eax
cltq
mov    %rax,-0x18(%rbp)
jmp    117f <cv_face_to_map_event_n+0x7f>
movsbl -0x9(%rbp),%ecx
mov    $0x61,%eax
cmp    %ecx,%eax
jg     116d <cv_face_to_map_event_n+0x6d>
movsbl -0x9(%rbp),%eax
cmp    $0x7a,%eax
jg     116d <cv_face_to_map_event_n+0x6d>
movsbl -0x9(%rbp),%eax
sub    $0x61,%eax
add    $0xa,%eax
cltq
mov    %rax,-0x18(%rbp)
jmp    117a <cv_face_to_map_event_n+0x7a>
movq   $0xffffffffffffffff,-0x8(%rbp)
ff
jmp    11b7 <cv_face_to_map_event_n+0xb7>
jmp    117f <cv_face_to_map_event_n+0x7f>
cmpq   $0x0,-0x18(%rbp)
jge    1197 <cv_face_to_map_event_n+0x97>
movq   $0xffffffffffffffff,-0x8(%rbp)
ff
jmp    11b7 <cv_face_to_map_event_n+0xb7>
cmpq   $0x24,-0x18(%rbp)
jl     11af <cv_face_to_map_event_n+0xaf>
movq   $0xffffffffffffffff,-0x8(%rbp)
ff
jmp    11b7 <cv_face_to_map_event_n+0xb7>
mov    -0x18(%rbp),%rax
mov    %rax,-0x8(%rbp)
mov    -0x8(%rbp),%rax
pop    %rbp
ret

x86 assembly (clang, -O2):
<cv_face_to_map_event_n>:
mov    $0xffffffa9,%ecx
lea    -0x30(%rdi),%eax
cmp    $0xa,%al
jae    1112 <cv_face_to_map_event_n+0x12>
add    $0x27,%rcx
jmp    1121 <cv_face_to_map_event_n+0x21>
lea    -0x61(%rdi),%edx
mov    $0xffffffffffffffff,%rax
cmp    $0x19,%dl
ja     1126 <cv_face_to_map_event_n+0x26>
add    %edi,%ecx
mov    %rcx,%rax
ret

LLVM IR (-O0):
define i64 @cv_face_to_map_event_n(i8 signext %0) {
%2 = alloca i64
%3 = alloca i8
%4 = alloca i64
store i8 %0, i8* %3
%5 = load i8, i8* %3
%6 = sext i8 %5 to i32
%7 = icmp sle i32 48, %6
br i1 %7, label %8, label %17
8: ; preds = %1
%9 = load i8, i8* %3
%10 = sext i8 %9 to i32
%11 = icmp sle i32 %10, 57
br i1 %11, label %12, label %17
12: ; preds = %8
%13 = load i8, i8* %3
%14 = sext i8 %13 to i32
%15 = sub nsw i32 %14, 48
%16 = sext i32 %15 to i64
store i64 %16, i64* %4
br label %33
17: ; preds = %8, %1
%18 = load i8, i8* %3
%19 = sext i8 %18 to i32
%20 = icmp sle i32 97, %19
br i1 %20, label %21, label %31
21: ; preds = %17
%22 = load i8, i8* %3
%23 = sext i8 %22 to i32
%24 = icmp sle i32 %23, 122
br i1 %24, label %25, label %31
25: ; preds = %21
%26 = load i8, i8* %3
%27 = sext i8 %26 to i32
%28 = sub nsw i32 %27, 97
%29 = add nsw i32 %28, 10
%30 = sext i32 %29 to i64
store i64 %30, i64* %4
br label %32
31: ; preds = %21, %17
store i64 -1, i64* %2
br label %43
32: ; preds = %25
br label %33
33: ; preds = %32, %12
%34 = load i64, i64* %4
%35 = icmp slt i64 %34, 0
br i1 %35, label %36, label %37
36: ; preds = %33
store i64 -1, i64* %2
br label %43
37: ; preds = %33
%38 = load i64, i64* %4
%39 = icmp sge i64 %38, 36
br i1 %39, label %40, label %41
40: ; preds = %37
store i64 -1, i64* %2
br label %43
41: ; preds = %37
%42 = load i64, i64* %4
store i64 %42, i64* %2
br label %43
43: ; preds = %41, %40, %36, %31
%44 = load i64, i64* %2
ret i64 %44
}

LLVM IR (-O2):
define i64 @cv_face_to_map_event_n(i8 signext %0) {
%2 = sext i8 %0 to i64
%3 = add i8 %0, -48
%4 = icmp ult i8 %3, 10
br i1 %4, label %8, label %5
5: ; preds = %1
%6 = add i8 %0, -97
%7 = icmp ult i8 %6, 26
br i1 %7, label %8, label %12
8: ; preds = %5, %1
%9 = phi i64 [ 4294967248, %1 ], [ 4294967209, %5 ]
%10 = add nsw i64 %9, %2
%11 = and i64 %10, 4294967295
br label %12
12: ; preds = %5, %8
%13 = phi i64 [ %11, %8 ], [ -1, %5 ]
ret i64 %13
}