int hexValidos(char car1, char car2) {
  int valided;
  if (('0' <= car1 && car1 <= '9') || ('a' <= car1 && car1 <= 'f') ||
      ('A' <= car1 && car1 <= 'F')) {
    valided = 1;
    if (('0' <= car2 && car2 <= '9') || ('a' <= car2 && car2 <= 'f') ||
        ('A' <= car2 && car2 <= 'F')) {
      valided = 1;
    } else {
      valided = 0;
    }
  } else {
    valided = 0;
  }
  return (valided);
}


x86 assembly (clang, -O0):
<hexValidos>:
push   %rbp
mov    %rsp,%rbp
mov    %sil,%al
mov    %dil,%cl
mov    %cl,-0x1(%rbp)
mov    %al,-0x2(%rbp)
movsbl -0x1(%rbp),%ecx
mov    $0x30,%eax
cmp    %ecx,%eax
jg     112e <hexValidos+0x2e>
movsbl -0x1(%rbp),%eax
cmp    $0x39,%eax
jle    116a <hexValidos+0x6a>
movsbl -0x1(%rbp),%ecx
mov    $0x61,%eax
cmp    %ecx,%eax
jg     114c <hexValidos+0x4c>
movsbl -0x1(%rbp),%eax
cmp    $0x66,%eax
jle    116a <hexValidos+0x6a>
movsbl -0x1(%rbp),%ecx
mov    $0x41,%eax
cmp    %ecx,%eax
jg     11e3 <hexValidos+0xe3>
movsbl -0x1(%rbp),%eax
cmp    $0x46,%eax
jg     11e3 <hexValidos+0xe3>
movl   $0x1,-0x8(%rbp)
movsbl -0x2(%rbp),%ecx
mov    $0x30,%eax
cmp    %ecx,%eax
jg     118f <hexValidos+0x8f>
movsbl -0x2(%rbp),%eax
cmp    $0x39,%eax
jle    11cb <hexValidos+0xcb>
movsbl -0x2(%rbp),%ecx
mov    $0x61,%eax
cmp    %ecx,%eax
jg     11ad <hexValidos+0xad>
movsbl -0x2(%rbp),%eax
cmp    $0x66,%eax
jle    11cb <hexValidos+0xcb>
movsbl -0x2(%rbp),%ecx
mov    $0x41,%eax
cmp    %ecx,%eax
jg     11d7 <hexValidos+0xd7>
movsbl -0x2(%rbp),%eax
cmp    $0x46,%eax
jg     11d7 <hexValidos+0xd7>
movl   $0x1,-0x8(%rbp)
jmp    11de <hexValidos+0xde>
movl   $0x0,-0x8(%rbp)
jmp    11ea <hexValidos+0xea>
movl   $0x0,-0x8(%rbp)
mov    -0x8(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<hexValidos>:
lea    -0x30(%rdi),%eax
cmp    $0xa,%al
jb     1127 <hexValidos+0x27>
xor    %eax,%eax
add    $0xbf,%dil
cmp    $0x25,%dil
ja     1152 <hexValidos+0x52>
movzbl %dil,%ecx
movabs $0x3f0000003f,%rdx
bt     %rcx,%rdx
jae    1152 <hexValidos+0x52>
lea    -0x30(%rsi),%ecx
mov    $0x1,%eax
cmp    $0xa,%cl
jb     1152 <hexValidos+0x52>
add    $0xbf,%sil
cmp    $0x25,%sil
ja     1153 <hexValidos+0x53>
movzbl %sil,%ecx
movabs $0x3f0000003f,%rdx
bt     %rcx,%rdx
jae    1153 <hexValidos+0x53>
ret
xor    %eax,%eax
ret

LLVM IR (-O0):
define i32 @hexValidos(i8 signext %0, i8 signext %1) {
%3 = alloca i8
%4 = alloca i8
%5 = alloca i32
store i8 %0, i8* %3
store i8 %1, i8* %4
%6 = load i8, i8* %3
%7 = sext i8 %6 to i32
%8 = icmp sle i32 48, %7
br i1 %8, label %9, label %13
9: ; preds = %2
%10 = load i8, i8* %3
%11 = sext i8 %10 to i32
%12 = icmp sle i32 %11, 57
br i1 %12, label %29, label %13
13: ; preds = %9, %2
%14 = load i8, i8* %3
%15 = sext i8 %14 to i32
%16 = icmp sle i32 97, %15
br i1 %16, label %17, label %21
17: ; preds = %13
%18 = load i8, i8* %3
%19 = sext i8 %18 to i32
%20 = icmp sle i32 %19, 102
br i1 %20, label %29, label %21
21: ; preds = %17, %13
%22 = load i8, i8* %3
%23 = sext i8 %22 to i32
%24 = icmp sle i32 65, %23
br i1 %24, label %25, label %56
25: ; preds = %21
%26 = load i8, i8* %3
%27 = sext i8 %26 to i32
%28 = icmp sle i32 %27, 70
br i1 %28, label %29, label %56
29: ; preds = %25, %17, %9
store i32 1, i32* %5
%30 = load i8, i8* %4
%31 = sext i8 %30 to i32
%32 = icmp sle i32 48, %31
br i1 %32, label %33, label %37
33: ; preds = %29
%34 = load i8, i8* %4
%35 = sext i8 %34 to i32
%36 = icmp sle i32 %35, 57
br i1 %36, label %53, label %37
37: ; preds = %33, %29
%38 = load i8, i8* %4
%39 = sext i8 %38 to i32
%40 = icmp sle i32 97, %39
br i1 %40, label %41, label %45
41: ; preds = %37
%42 = load i8, i8* %4
%43 = sext i8 %42 to i32
%44 = icmp sle i32 %43, 102
br i1 %44, label %53, label %45
45: ; preds = %41, %37
%46 = load i8, i8* %4
%47 = sext i8 %46 to i32
%48 = icmp sle i32 65, %47
br i1 %48, label %49, label %54
49: ; preds = %45
%50 = load i8, i8* %4
%51 = sext i8 %50 to i32
%52 = icmp sle i32 %51, 70
br i1 %52, label %53, label %54
53: ; preds = %49, %41, %33
store i32 1, i32* %5
br label %55
54: ; preds = %49, %45
store i32 0, i32* %5
br label %55
55: ; preds = %54, %53
br label %57
56: ; preds = %25, %21
store i32 0, i32* %5
br label %57
57: ; preds = %56, %55
%58 = load i32, i32* %5
ret i32 %58
}

LLVM IR (-O2):
define i32 @hexValidos(i8 signext %0, i8 signext %1) {
%3 = add i8 %0, -48
%4 = icmp ult i8 %3, 10
br i1 %4, label %6, label %5
5: ; preds = %2
switch i8 %0, label %11 [
i8 102, label %6
i8 101, label %6
i8 100, label %6
i8 99, label %6
i8 98, label %6
i8 97, label %6
i8 70, label %6
i8 69, label %6
i8 68, label %6
i8 67, label %6
i8 66, label %6
i8 65, label %6
]
6: ; preds = %5, %5, %5, %5, %5, %5, %5, %5, %5, %5, %5, %5, %2
%7 = add i8 %1, -48
%8 = icmp ult i8 %7, 10
br i1 %8, label %11, label %9
9: ; preds = %6
switch i8 %1, label %10 [
i8 102, label %11
i8 101, label %11
i8 100, label %11
i8 99, label %11
i8 98, label %11
i8 97, label %11
i8 70, label %11
i8 69, label %11
i8 68, label %11
i8 67, label %11
i8 66, label %11
i8 65, label %11
]
10: ; preds = %9
br label %11
11: ; preds = %9, %9, %9, %9, %9, %9, %9, %9, %9, %9, %9, %9, %6, %5, %10
%12 = phi i32 [ 0, %10 ], [ 1, %9 ], [ 0, %5 ], [ 1, %6 ], [ 1, %9 ], [ 1, %9 ], [ 1, %9 ], [ 1, %9 ], [ 1, %9 ], [ 1, %9 ], [ 1, %9 ], [ 1, %9 ], [ 1, %9 ], [ 1, %9 ], [ 1, %9 ]
ret i32 %12
}