void HexToDec(char *hRGB, int *dR, int *dG, int *dB) {
  char tempCh[3];
  int i, j, rgb[3], tempI;
  for (i = 0; i < 3; i++) {
    rgb[i] = 0;
  }
  for (i = 1; i < 7; i += 2) {
    for (j = 0; j < 2; j++)
      tempCh[j] = hRGB[i + j];
    tempCh[2] = '\0';
    for (j = 0; j < 2; j++) {
      switch (tempCh[1 - j]) {
      case '0':
      case '1':
      case '2':
      case '3':
      case '4':
      case '5':
      case '6':
      case '7':
      case '8':
      case '9':
        tempI = tempCh[1 - j] - '0';
        break;
      case 'A':
      case 'a':
        tempI = 10;
        break;
      case 'B':
      case 'b':
        tempI = 11;
        break;
      case 'C':
      case 'c':
        tempI = 12;
        break;
      case 'D':
      case 'd':
        tempI = 13;
        break;
      case 'E':
      case 'e':
        tempI = 14;
        break;
      case 'F':
      case 'f':
        tempI = 15;
        break;
      }
      if (j == 0)
        rgb[(i - 1) / 2] += tempI;
      else
        rgb[(i - 1) / 2] += tempI * 16 * j;
    }
  }
  *dR = rgb[0];
  *dG = rgb[1];
  *dB = rgb[2];
}


x86 assembly (clang, -O0):
<HexToDec>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
movl   $0x0,-0x28(%rbp)
cmpl   $0x3,-0x28(%rbp)
jge    113f <HexToDec+0x3f>
movslq -0x28(%rbp),%rax
movl   $0x0,-0x38(%rbp,%rax,4)
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    111b <HexToDec+0x1b>
movl   $0x1,-0x28(%rbp)
cmpl   $0x7,-0x28(%rbp)
jge    12a2 <HexToDec+0x1a2>
movl   $0x0,-0x2c(%rbp)
cmpl   $0x2,-0x2c(%rbp)
jge    1187 <HexToDec+0x87>
mov    -0x8(%rbp),%rax
mov    -0x28(%rbp),%ecx
add    -0x2c(%rbp),%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,1),%cl
movslq -0x2c(%rbp),%rax
mov    %cl,-0x23(%rbp,%rax,1)
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    1157 <HexToDec+0x57>
movb   $0x0,-0x21(%rbp)
movl   $0x0,-0x2c(%rbp)
cmpl   $0x2,-0x2c(%rbp)
jge    128f <HexToDec+0x18f>
mov    -0x2c(%rbp),%ecx
mov    $0x1,%eax
sub    %ecx,%eax
cltq
movsbl -0x23(%rbp,%rax,1),%eax
add    $0xffffffd0,%eax
mov    %eax,%ecx
mov    %rcx,-0x48(%rbp)
sub    $0x36,%eax
ja     1230 <HexToDec+0x130>
mov    -0x48(%rbp),%rax
lea    0xe36(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
mov    $0x1,%eax
sub    -0x2c(%rbp),%eax
cltq
movsbl -0x23(%rbp,%rax,1),%eax
sub    $0x30,%eax
mov    %eax,-0x3c(%rbp)
jmp    1230 <HexToDec+0x130>
movl   $0xa,-0x3c(%rbp)
jmp    1230 <HexToDec+0x130>
movl   $0xb,-0x3c(%rbp)
jmp    1230 <HexToDec+0x130>
movl   $0xc,-0x3c(%rbp)
jmp    1230 <HexToDec+0x130>
movl   $0xd,-0x3c(%rbp)
jmp    1230 <HexToDec+0x130>
movl   $0xe,-0x3c(%rbp)
jmp    1230 <HexToDec+0x130>
movl   $0xf,-0x3c(%rbp)
cmpl   $0x0,-0x2c(%rbp)
jne    125a <HexToDec+0x15a>
mov    -0x3c(%rbp),%ecx
mov    -0x28(%rbp),%eax
sub    $0x1,%eax
mov    $0x2,%esi
cltd
idiv   %esi
cltq
add    -0x38(%rbp,%rax,4),%ecx
mov    %ecx,-0x38(%rbp,%rax,4)
jmp    127c <HexToDec+0x17c>
mov    -0x3c(%rbp),%ecx
shl    $0x4,%ecx
imul   -0x2c(%rbp),%ecx
mov    -0x28(%rbp),%eax
sub    $0x1,%eax
mov    $0x2,%esi
cltd
idiv   %esi
cltq
add    -0x38(%rbp,%rax,4),%ecx
mov    %ecx,-0x38(%rbp,%rax,4)
jmp    1281 <HexToDec+0x181>
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    1192 <HexToDec+0x92>
jmp    1294 <HexToDec+0x194>
mov    -0x28(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x28(%rbp)
jmp    1146 <HexToDec+0x46>
mov    -0x38(%rbp),%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x34(%rbp),%ecx
mov    -0x18(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x30(%rbp),%ecx
mov    -0x20(%rbp),%rax
mov    %ecx,(%rax)
pop    %rbp
ret

x86 assembly (clang, -O2):
<HexToDec>:
push   %rbp
push   %r14
push   %rbx
movsbq 0x1(%rdi),%r11
movsbl 0x2(%rdi),%ebp
mov    $0xa,%r8d
add    $0xffffffd0,%ebp
cmp    $0x36,%ebp
ja     112e <HexToDec+0x2e>
lea    0xede(%rip),%rbx
movslq (%rbx,%rbp,4),%rax
add    %rbx,%rax
jmp    *%rax
mov    %ebp,%r8d
movabs $0x7e0000007e03ff,%r9
lea    -0x30(%r11),%ebp
mov    %r8d,%r10d
cmp    $0x36,%ebp
ja     115c <HexToDec+0x5c>
bt     %rbp,%r9
mov    %r8d,%r10d
jae    115c <HexToDec+0x5c>
lea    0xf88(%rip),%rax
mov    -0xc0(%rax,%r11,4),%r10d
ff
movsbq 0x3(%rdi),%rbx
movsbl 0x4(%rdi),%eax
lea    -0x30(%rax),%ebp
mov    %r10d,%r11d
cmp    $0x36,%ebp
ja     118a <HexToDec+0x8a>
bt     %rbp,%r9
mov    %r10d,%r11d
jae    118a <HexToDec+0x8a>
cltq
lea    0xf5a(%rip),%rbp
mov    -0xc0(%rbp,%rax,4),%r11d
ff
lea    -0x30(%rbx),%ebp
mov    %r11d,%eax
cmp    $0x36,%ebp
ja     11ac <HexToDec+0xac>
bt     %rbp,%r9
mov    %r11d,%eax
jae    11ac <HexToDec+0xac>
lea    0xf37(%rip),%rax
mov    -0xc0(%rax,%rbx,4),%eax
movsbq 0x5(%rdi),%r14
movsbl 0x6(%rdi),%ebp
lea    -0x30(%rbp),%ebx
mov    %eax,%edi
cmp    $0x36,%ebx
ja     11d8 <HexToDec+0xd8>
bt     %rbx,%r9
mov    %eax,%edi
jae    11d8 <HexToDec+0xd8>
movslq %ebp,%rdi
lea    0xf0b(%rip),%rbx
mov    -0xc0(%rbx,%rdi,4),%edi
lea    -0x30(%r14),%ebx
mov    %edi,%ebp
cmp    $0x36,%ebx
ja     11fa <HexToDec+0xfa>
bt     %rbx,%r9
mov    %edi,%ebp
jae    11fa <HexToDec+0xfa>
lea    0xeea(%rip),%rbp
mov    -0xc0(%rbp,%r14,4),%ebp
ff
shl    $0x4,%eax
add    %eax,%r11d
shl    $0x4,%r10d
add    %r10d,%r8d
shl    $0x4,%ebp
add    %ebp,%edi
mov    %r8d,(%rsi)
mov    %r11d,(%rdx)
mov    %edi,(%rcx)
pop    %rbx
pop    %r14
pop    %rbp
ret
mov    $0xb,%r8d
jmp    112e <HexToDec+0x2e>
mov    $0xc,%r8d
jmp    112e <HexToDec+0x2e>
mov    $0xd,%r8d
jmp    112e <HexToDec+0x2e>
mov    $0xe,%r8d
jmp    112e <HexToDec+0x2e>
mov    $0xf,%r8d
jmp    112e <HexToDec+0x2e>

LLVM IR (-O0):
define void @HexToDec(i8* %0, i32* %1, i32* %2, i32* %3) {
%5 = alloca i8*
%6 = alloca i32*
%7 = alloca i32*
%8 = alloca i32*
%9 = alloca [3 x i8]
%10 = alloca i32
%11 = alloca i32
%12 = alloca [3 x i32]
%13 = alloca i32
store i8* %0, i8** %5
store i32* %1, i32** %6
store i32* %2, i32** %7
store i32* %3, i32** %8
store i32 0, i32* %10
br label %14
14: ; preds = %21, %4
%15 = load i32, i32* %10
%16 = icmp slt i32 %15, 3
br i1 %16, label %17, label %24
17: ; preds = %14
%18 = load i32, i32* %10
%19 = sext i32 %18 to i64
%20 = getelementptr inbounds [3 x i32], [3 x i32]* %12, i64 0, i64 %19
store i32 0, i32* %20
br label %21
21: ; preds = %17
%22 = load i32, i32* %10
%23 = add nsw i32 %22, 1
store i32 %23, i32* %10
br label %14
24: ; preds = %14
store i32 1, i32* %10
br label %25
25: ; preds = %101, %24
%26 = load i32, i32* %10
%27 = icmp slt i32 %26, 7
br i1 %27, label %28, label %104
28: ; preds = %25
store i32 0, i32* %11
br label %29
29: ; preds = %43, %28
%30 = load i32, i32* %11
%31 = icmp slt i32 %30, 2
br i1 %31, label %32, label %46
32: ; preds = %29
%33 = load i8*, i8** %5
%34 = load i32, i32* %10
%35 = load i32, i32* %11
%36 = add nsw i32 %34, %35
%37 = sext i32 %36 to i64
%38 = getelementptr inbounds i8, i8* %33, i64 %37
%39 = load i8, i8* %38
%40 = load i32, i32* %11
%41 = sext i32 %40 to i64
%42 = getelementptr inbounds [3 x i8], [3 x i8]* %9, i64 0, i64 %41
store i8 %39, i8* %42
br label %43
43: ; preds = %32
%44 = load i32, i32* %11
%45 = add nsw i32 %44, 1
store i32 %45, i32* %11
br label %29
46: ; preds = %29
%47 = getelementptr inbounds [3 x i8], [3 x i8]* %9, i64 0, i64 2
store i8 0, i8* %47
store i32 0, i32* %11
br label %48
48: ; preds = %97, %46
%49 = load i32, i32* %11
%50 = icmp slt i32 %49, 2
br i1 %50, label %51, label %100
51: ; preds = %48
%52 = load i32, i32* %11
%53 = sub nsw i32 1, %52
%54 = sext i32 %53 to i64
%55 = getelementptr inbounds [3 x i8], [3 x i8]* %9, i64 0, i64 %54
%56 = load i8, i8* %55
%57 = sext i8 %56 to i32
switch i32 %57, label %72 [
i32 48, label %58
i32 49, label %58
i32 50, label %58
i32 51, label %58
i32 52, label %58
i32 53, label %58
i32 54, label %58
i32 55, label %58
i32 56, label %58
i32 57, label %58
i32 65, label %66
i32 97, label %66
i32 66, label %67
i32 98, label %67
i32 67, label %68
i32 99, label %68
i32 68, label %69
i32 100, label %69
i32 69, label %70
i32 101, label %70
i32 70, label %71
i32 102, label %71
]
58: ; preds = %51, %51, %51, %51, %51, %51, %51, %51, %51, %51
%59 = load i32, i32* %11
%60 = sub nsw i32 1, %59
%61 = sext i32 %60 to i64
%62 = getelementptr inbounds [3 x i8], [3 x i8]* %9, i64 0, i64 %61
%63 = load i8, i8* %62
%64 = sext i8 %63 to i32
%65 = sub nsw i32 %64, 48
store i32 %65, i32* %13
br label %72
66: ; preds = %51, %51
store i32 10, i32* %13
br label %72
67: ; preds = %51, %51
store i32 11, i32* %13
br label %72
68: ; preds = %51, %51
store i32 12, i32* %13
br label %72
69: ; preds = %51, %51
store i32 13, i32* %13
br label %72
70: ; preds = %51, %51
store i32 14, i32* %13
br label %72
71: ; preds = %51, %51
store i32 15, i32* %13
br label %72
72: ; preds = %51, %71, %70, %69, %68, %67, %66, %58
%73 = load i32, i32* %11
%74 = icmp eq i32 %73, 0
br i1 %74, label %75, label %84
75: ; preds = %72
%76 = load i32, i32* %13
%77 = load i32, i32* %10
%78 = sub nsw i32 %77, 1
%79 = sdiv i32 %78, 2
%80 = sext i32 %79 to i64
%81 = getelementptr inbounds [3 x i32], [3 x i32]* %12, i64 0, i64 %80
%82 = load i32, i32* %81
%83 = add nsw i32 %82, %76
store i32 %83, i32* %81
br label %96
84: ; preds = %72
%85 = load i32, i32* %13
%86 = mul nsw i32 %85, 16
%87 = load i32, i32* %11
%88 = mul nsw i32 %86, %87
%89 = load i32, i32* %10
%90 = sub nsw i32 %89, 1
%91 = sdiv i32 %90, 2
%92 = sext i32 %91 to i64
%93 = getelementptr inbounds [3 x i32], [3 x i32]* %12, i64 0, i64 %92
%94 = load i32, i32* %93
%95 = add nsw i32 %94, %88
store i32 %95, i32* %93
br label %96
96: ; preds = %84, %75
br label %97
97: ; preds = %96
%98 = load i32, i32* %11
%99 = add nsw i32 %98, 1
store i32 %99, i32* %11
br label %48
100: ; preds = %48
br label %101
101: ; preds = %100
%102 = load i32, i32* %10
%103 = add nsw i32 %102, 2
store i32 %103, i32* %10
br label %25
104: ; preds = %25
%105 = getelementptr inbounds [3 x i32], [3 x i32]* %12, i64 0, i64 0
%106 = load i32, i32* %105
%107 = load i32*, i32** %6
store i32 %106, i32* %107
%108 = getelementptr inbounds [3 x i32], [3 x i32]* %12, i64 0, i64 1
%109 = load i32, i32* %108
%110 = load i32*, i32** %7
store i32 %109, i32* %110
%111 = getelementptr inbounds [3 x i32], [3 x i32]* %12, i64 0, i64 2
%112 = load i32, i32* %111
%113 = load i32*, i32** %8
store i32 %112, i32* %113
ret void
}

LLVM IR (-O2):
@switch.table.HexToDec.4 = [55 x i32] [i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15]
define void @HexToDec(i8* nocapture %0, i32* nocapture writeonly %1, i32* nocapture writeonly %2, i32* nocapture writeonly %3) {
%5 = getelementptr inbounds i8, i8* %0, i64 1
%6 = load i8, i8* %5
%7 = getelementptr inbounds i8, i8* %0, i64 2
%8 = load i8, i8* %7
%9 = sext i8 %8 to i32
switch i32 %9, label %17 [
i32 48, label %10
i32 49, label %10
i32 50, label %10
i32 51, label %10
i32 52, label %10
i32 53, label %10
i32 54, label %10
i32 55, label %10
i32 56, label %10
i32 57, label %10
i32 102, label %16
i32 70, label %16
i32 66, label %12
i32 98, label %12
i32 67, label %13
i32 99, label %13
i32 68, label %14
i32 100, label %14
i32 69, label %15
i32 101, label %15
]
10: ; preds = %4, %4, %4, %4, %4, %4, %4, %4, %4, %4
%11 = add nsw i32 %9, -48
br label %17
12: ; preds = %4, %4
br label %17
13: ; preds = %4, %4
br label %17
14: ; preds = %4, %4
br label %17
15: ; preds = %4, %4
br label %17
16: ; preds = %4, %4
br label %17
17: ; preds = %4, %16, %15, %14, %13, %12, %10
%18 = phi i32 [ 15, %16 ], [ 14, %15 ], [ 13, %14 ], [ 12, %13 ], [ 11, %12 ], [ %11, %10 ], [ 10, %4 ]
%19 = sext i8 %6 to i32
%20 = add nsw i32 %19, -48
%21 = icmp ult i32 %20, 55
br i1 %21, label %22, label %31
22: ; preds = %17
%23 = zext i32 %20 to i64
%24 = lshr i64 35465847073801215, %23
%25 = and i64 %24, 1
%26 = icmp eq i64 %25, 0
br i1 %26, label %31, label %27
27: ; preds = %22
%28 = sext i32 %20 to i64
%29 = getelementptr inbounds [55 x i32], [55 x i32]* @switch.table.HexToDec.4, i64 0, i64 %28
%30 = load i32, i32* %29
br label %31
31: ; preds = %27, %22, %17
%32 = phi i32 [ %18, %17 ], [ %18, %22 ], [ %30, %27 ]
%33 = getelementptr inbounds i8, i8* %0, i64 3
%34 = load i8, i8* %33
%35 = getelementptr inbounds i8, i8* %0, i64 4
%36 = load i8, i8* %35
%37 = sext i8 %36 to i32
%38 = add nsw i32 %37, -48
%39 = icmp ult i32 %38, 55
br i1 %39, label %40, label %49
40: ; preds = %31
%41 = zext i32 %38 to i64
%42 = lshr i64 35465847073801215, %41
%43 = and i64 %42, 1
%44 = icmp eq i64 %43, 0
br i1 %44, label %49, label %45
45: ; preds = %40
%46 = sext i32 %38 to i64
%47 = getelementptr inbounds [55 x i32], [55 x i32]* @switch.table.HexToDec.4, i64 0, i64 %46
%48 = load i32, i32* %47
br label %49
49: ; preds = %45, %40, %31
%50 = phi i32 [ %32, %31 ], [ %32, %40 ], [ %48, %45 ]
%51 = sext i8 %34 to i32
%52 = add nsw i32 %51, -48
%53 = icmp ult i32 %52, 55
br i1 %53, label %54, label %63
54: ; preds = %49
%55 = zext i32 %52 to i64
%56 = lshr i64 35465847073801215, %55
%57 = and i64 %56, 1
%58 = icmp eq i64 %57, 0
br i1 %58, label %63, label %59
59: ; preds = %54
%60 = sext i32 %52 to i64
%61 = getelementptr inbounds [55 x i32], [55 x i32]* @switch.table.HexToDec.4, i64 0, i64 %60
%62 = load i32, i32* %61
br label %63
63: ; preds = %59, %54, %49
%64 = phi i32 [ %50, %49 ], [ %50, %54 ], [ %62, %59 ]
%65 = getelementptr inbounds i8, i8* %0, i64 5
%66 = load i8, i8* %65
%67 = getelementptr inbounds i8, i8* %0, i64 6
%68 = load i8, i8* %67
%69 = sext i8 %68 to i32
%70 = add nsw i32 %69, -48
%71 = icmp ult i32 %70, 55
br i1 %71, label %72, label %81
72: ; preds = %63
%73 = zext i32 %70 to i64
%74 = lshr i64 35465847073801215, %73
%75 = and i64 %74, 1
%76 = icmp eq i64 %75, 0
br i1 %76, label %81, label %77
77: ; preds = %72
%78 = sext i32 %70 to i64
%79 = getelementptr inbounds [55 x i32], [55 x i32]* @switch.table.HexToDec.4, i64 0, i64 %78
%80 = load i32, i32* %79
br label %81
81: ; preds = %77, %72, %63
%82 = phi i32 [ %64, %63 ], [ %64, %72 ], [ %80, %77 ]
%83 = sext i8 %66 to i32
%84 = add nsw i32 %83, -48
%85 = icmp ult i32 %84, 55
br i1 %85, label %86, label %95
86: ; preds = %81
%87 = zext i32 %84 to i64
%88 = lshr i64 35465847073801215, %87
%89 = and i64 %88, 1
%90 = icmp eq i64 %89, 0
br i1 %90, label %95, label %91
91: ; preds = %86
%92 = sext i32 %84 to i64
%93 = getelementptr inbounds [55 x i32], [55 x i32]* @switch.table.HexToDec.4, i64 0, i64 %92
%94 = load i32, i32* %93
br label %95
95: ; preds = %91, %86, %81
%96 = phi i32 [ %82, %81 ], [ %82, %86 ], [ %94, %91 ]
%97 = shl nuw nsw i32 %64, 4
%98 = add nuw nsw i32 %50, %97
%99 = shl nuw nsw i32 %32, 4
%100 = add nuw nsw i32 %18, %99
%101 = shl nuw nsw i32 %96, 4
%102 = add nuw nsw i32 %82, %101
store i32 %100, i32* %1
store i32 %98, i32* %2
store i32 %102, i32* %3
ret void
}