void RFCNB_NBName_To_AName(char *NBName, char *AName) {
  char c, c1, c2;
  int i;
  for (i = 0; i < 16; i++) {
    c1 = NBName[i * 2];
    c2 = NBName[i * 2 + 1];
    c = (char)(((int)c1 - (int)'A') * 16 + ((int)c2 - (int)'A'));
    AName[i] = c;
  }
  AName[i] = 0;
}


x86 assembly (clang, -O0):
<RFCNB_NBName_To_AName>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
movl   $0x0,-0x18(%rbp)
cmpl   $0x10,-0x18(%rbp)
jge    1178 <RFCNB_NBName_To_AName+0x78>
mov    -0x8(%rbp),%rax
mov    -0x18(%rbp),%ecx
shl    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,1),%al
mov    %al,-0x12(%rbp)
mov    -0x8(%rbp),%rax
mov    -0x18(%rbp),%ecx
shl    $0x1,%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,1),%al
mov    %al,-0x13(%rbp)
movsbl -0x12(%rbp),%eax
sub    $0x41,%eax
shl    $0x4,%eax
movsbl -0x13(%rbp),%ecx
sub    $0x41,%ecx
add    %ecx,%eax
mov    %al,-0x11(%rbp)
mov    -0x11(%rbp),%dl
mov    -0x10(%rbp),%rax
movslq -0x18(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    1113 <RFCNB_NBName_To_AName+0x13>
mov    -0x10(%rbp),%rax
movslq -0x18(%rbp),%rcx
movb   $0x0,(%rax,%rcx,1)
pop    %rbp
ret

x86 assembly (clang, -O2):
<RFCNB_NBName_To_AName>:
lea    0x20(%rdi),%rax
cmp    %rsi,%rax
jbe    1153 <RFCNB_NBName_To_AName+0x53>
lea    0x10(%rsi),%rax
cmp    %rdi,%rax
jbe    1153 <RFCNB_NBName_To_AName+0x53>
mov    $0x1,%eax
nopw   0x0(%rax,%rax,1)
movzbl -0x2(%rdi,%rax,2),%ecx
shl    $0x4,%cl
add    -0x1(%rdi,%rax,2),%cl
add    $0xaf,%cl
mov    %cl,-0x1(%rsi,%rax,1)
movzbl (%rdi,%rax,2),%ecx
shl    $0x4,%cl
add    0x1(%rdi,%rax,2),%cl
add    $0xaf,%cl
mov    %cl,(%rsi,%rax,1)
add    $0x2,%rax
cmp    $0x11,%rax
jne    1120 <RFCNB_NBName_To_AName+0x20>
movb   $0x0,0x10(%rsi)
ret
movdqu (%rdi),%xmm0
movdqu 0x10(%rdi),%xmm1
movdqa 0xe9c(%rip),%xmm2
movdqa %xmm1,%xmm3
pand   %xmm2,%xmm3
pand   %xmm0,%xmm2
packuswb %xmm3,%xmm2
psrlw  $0x8,%xmm1
psrlw  $0x8,%xmm0
packuswb %xmm1,%xmm0
psllw  $0x4,%xmm2
pand   0xe81(%rip),%xmm2
paddb  %xmm0,%xmm2
paddb  0xe85(%rip),%xmm2
movdqu %xmm2,(%rsi)
movb   $0x0,0x10(%rsi)
ret

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

LLVM IR (-O2):
define void @RFCNB_NBName_To_AName(i8* nocapture %0, i8* nocapture writeonly %1) {
%3 = getelementptr i8, i8* %1, i64 16
%4 = getelementptr i8, i8* %0, i64 32
%5 = icmp ugt i8* %4, %1
%6 = icmp ugt i8* %3, %0
%7 = and i1 %5, %6
br i1 %7, label %17, label %8
8: ; preds = %2
%9 = bitcast i8* %0 to <32 x i8>*
%10 = load <32 x i8>, <32 x i8>* %9
%11 = shufflevector <32 x i8> %10, <32 x i8> poison, <16 x i32> <i32 0, i32 2, i32 4, i32 6, i32 8, i32 10, i32 12, i32 14, i32 16, i32 18, i32 20, i32 22, i32 24, i32 26, i32 28, i32 30>
%12 = shufflevector <32 x i8> %10, <32 x i8> poison, <16 x i32> <i32 1, i32 3, i32 5, i32 7, i32 9, i32 11, i32 13, i32 15, i32 17, i32 19, i32 21, i32 23, i32 25, i32 27, i32 29, i32 31>
%13 = shl <16 x i8> %11, <i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4>
%14 = add <16 x i8> %12, <i8 -81, i8 -81, i8 -81, i8 -81, i8 -81, i8 -81, i8 -81, i8 -81, i8 -81, i8 -81, i8 -81, i8 -81, i8 -81, i8 -81, i8 -81, i8 -81>
%15 = add <16 x i8> %14, %13
%16 = bitcast i8* %1 to <16 x i8>*
store <16 x i8> %15, <16 x i8>* %16
br label %42
17: ; preds = %2, %17
%18 = phi i64 [ %40, %17 ], [ 0, %2 ]
%19 = shl nuw nsw i64 %18, 1
%20 = getelementptr inbounds i8, i8* %0, i64 %19
%21 = load i8, i8* %20
%22 = or i64 %19, 1
%23 = getelementptr inbounds i8, i8* %0, i64 %22
%24 = load i8, i8* %23
%25 = shl i8 %21, 4
%26 = add i8 %24, -81
%27 = add i8 %26, %25
%28 = getelementptr inbounds i8, i8* %1, i64 %18
store i8 %27, i8* %28
%29 = or i64 %18, 1
%30 = shl nuw nsw i64 %29, 1
%31 = getelementptr inbounds i8, i8* %0, i64 %30
%32 = load i8, i8* %31
%33 = or i64 %30, 1
%34 = getelementptr inbounds i8, i8* %0, i64 %33
%35 = load i8, i8* %34
%36 = shl i8 %32, 4
%37 = add i8 %35, -81
%38 = add i8 %37, %36
%39 = getelementptr inbounds i8, i8* %1, i64 %29
store i8 %38, i8* %39
%40 = add nuw nsw i64 %18, 2
%41 = icmp eq i64 %40, 16
br i1 %41, label %42, label %17
42: ; preds = %17, %8
%43 = getelementptr inbounds i8, i8* %1, i64 16
store i8 0, i8* %43
ret void
}