void ieee2xpt(unsigned char *ieee, unsigned char *xport) {
  register int shift;
  unsigned char misschar;
  int ieee_exp;
  unsigned long xport1, xport2;
  unsigned long ieee1 = 0;
  unsigned long ieee2 = 0;
  char ieee8[8];
  memcpy(ieee8, ieee, 8);
  memcpy(((char *)&ieee1) + sizeof(unsigned long) - 4, ieee8, 4);
  REVERSE(&ieee1, sizeof(unsigned long));
  memcpy(((char *)&ieee2) + sizeof(unsigned long) - 4, ieee8 + 4, 4);
  REVERSE(&ieee2, sizeof(unsigned long));
  memset(xport, 0, 8);
  if (*ieee8 == (char)0xff && ieee8[1] == (char)0xff) {
    misschar = ~ieee8[2];
    *xport = (misschar == 0xD2) ? 0x6D : misschar;
    return;
  }
  xport1 = ieee1 & 0x000fffff;
  if ((!(xport2 = ieee2)) && !ieee1) {
    ieee_exp = 0;
    goto doret;
  }
  shift = (int)(ieee_exp = (int)(((ieee1 >> 16) & 0x7ff0) >> 4) - 1023) & 3;
  xport1 |= 0x00100000;
  if (shift) {
    xport1 = (xport1 << shift) |
             ((unsigned char)(((ieee2 >> 24) & 0xE0) >> (5 + (3 - shift))));
    xport2 <<= shift;
  }
  xport1 |= (((ieee_exp >> 2) + 65) | ((ieee1 >> 24) & 0x80)) << 24;
doret:
  if (-260 <= ieee_exp && ieee_exp <= 248) {
    REVERSE(&xport1, sizeof(unsigned long));
    memcpy(xport, ((char *)&xport1) + sizeof(unsigned long) - 4, 4);
    REVERSE(&xport2, sizeof(unsigned long));
    memcpy(xport + 4, ((char *)&xport2) + sizeof(unsigned long) - 4, 4);
    return;
  }
  memset(xport, 0xFF, 8);
  if (ieee_exp > 248)
    *xport = 0x7f;
  return;
}


x86 assembly (clang, -O0):
<ieee2xpt>:
push   %rbp
mov    %rsp,%rbp
sub    $0x50,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
movq   $0x0,-0x38(%rbp)
movq   $0x0,-0x40(%rbp)
mov    -0x8(%rbp),%rax
mov    (%rax),%rax
mov    %rax,-0x48(%rbp)
mov    -0x48(%rbp),%eax
mov    %eax,-0x34(%rbp)
lea    -0x38(%rbp),%rdi
mov    $0x8,%esi
mov    $0x0,%al
call   1040 <REVERSE@plt>
mov    -0x44(%rbp),%eax
mov    %eax,-0x3c(%rbp)
lea    -0x40(%rbp),%rdi
mov    $0x8,%esi
mov    $0x0,%al
call   1040 <REVERSE@plt>
mov    -0x10(%rbp),%rdi
xor    %esi,%esi
mov    $0x8,%edx
call   1030 <memset@plt>
movsbl -0x48(%rbp),%eax
cmp    $0xffffffff,%eax
jne    11de <ieee2xpt+0xbe>
movsbl -0x47(%rbp),%eax
cmp    $0xffffffff,%eax
jne    11de <ieee2xpt+0xbe>
movsbl -0x46(%rbp),%eax
xor    $0xffffffff,%eax
mov    %al,-0x15(%rbp)
movzbl -0x15(%rbp),%eax
cmp    $0xd2,%eax
jne    11c7 <ieee2xpt+0xa7>
mov    $0x6d,%eax
mov    %eax,-0x4c(%rbp)
jmp    11ce <ieee2xpt+0xae>
movzbl -0x15(%rbp),%eax
mov    %eax,-0x4c(%rbp)
mov    -0x4c(%rbp),%eax
mov    %al,%cl
mov    -0x10(%rbp),%rax
mov    %cl,(%rax)
jmp    133b <ieee2xpt+0x21b>
mov    -0x38(%rbp),%rax
and    $0xfffff,%rax
mov    %rax,-0x28(%rbp)
mov    -0x40(%rbp),%rax
mov    %rax,-0x30(%rbp)
cmp    $0x0,%rax
jne    1215 <ieee2xpt+0xf5>
cmpq   $0x0,-0x38(%rbp)
jne    1215 <ieee2xpt+0xf5>
movl   $0x0,-0x1c(%rbp)
jmp    12bc <ieee2xpt+0x19c>
mov    -0x38(%rbp),%rax
shr    $0x10,%rax
and    $0x7ff0,%rax
shr    $0x4,%rax
sub    $0x3ff,%eax
mov    %eax,-0x1c(%rbp)
and    $0x3,%eax
mov    %eax,-0x14(%rbp)
mov    -0x28(%rbp),%rax
or     $0x100000,%rax
mov    %rax,-0x28(%rbp)
cmpl   $0x0,-0x14(%rbp)
je     1293 <ieee2xpt+0x173>
mov    -0x28(%rbp),%rax
mov    -0x14(%rbp),%ecx
shl    %cl,%rax
mov    -0x40(%rbp),%rdx
shr    $0x18,%rdx
and    $0xe0,%rdx
mov    $0x3,%ecx
sub    -0x14(%rbp),%ecx
add    $0x5,%ecx
mov    %ecx,%ecx
shr    %cl,%rdx
mov    %rdx,%rcx
movzbl %cl,%ecx
or     %rcx,%rax
mov    %rax,-0x28(%rbp)
mov    -0x14(%rbp),%ecx
mov    -0x30(%rbp),%rax
mov    %ecx,%ecx
shl    %cl,%rax
mov    %rax,-0x30(%rbp)
mov    -0x1c(%rbp),%eax
sar    $0x2,%eax
add    $0x41,%eax
cltq
mov    -0x38(%rbp),%rcx
shr    $0x18,%rcx
and    $0x80,%rcx
or     %rcx,%rax
shl    $0x18,%rax
or     -0x28(%rbp),%rax
mov    %rax,-0x28(%rbp)
mov    $0xfffffefc,%eax
cmp    -0x1c(%rbp),%eax
jg     130f <ieee2xpt+0x1ef>
cmpl   $0xf8,-0x1c(%rbp)
jg     130f <ieee2xpt+0x1ef>
lea    -0x28(%rbp),%rdi
mov    $0x8,%esi
mov    $0x0,%al
call   1040 <REVERSE@plt>
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
mov    %ecx,(%rax)
lea    -0x30(%rbp),%rdi
mov    $0x8,%esi
mov    $0x0,%al
call   1040 <REVERSE@plt>
mov    -0x10(%rbp),%rax
mov    -0x2c(%rbp),%ecx
mov    %ecx,0x4(%rax)
jmp    133b <ieee2xpt+0x21b>
mov    -0x10(%rbp),%rdi
mov    $0xff,%esi
mov    $0x8,%edx
call   1030 <memset@plt>
cmpl   $0xf8,-0x1c(%rbp)
jle    1336 <ieee2xpt+0x216>
mov    -0x10(%rbp),%rax
movb   $0x7f,(%rax)
jmp    133b <ieee2xpt+0x21b>
add    $0x50,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<ieee2xpt>:
push   %rbp
push   %r15
push   %r14
push   %r12
push   %rbx
sub    $0x20,%rsp
mov    %rsi,%r14
movq   $0x0,(%rsp)
movq   $0x0,0x8(%rsp)
mov    (%rdi),%r15b
mov    0x1(%rdi),%r12b
mov    0x2(%rdi),%bl
mov    0x3(%rdi),%al
mov    0x4(%rdi),%ebp
mov    %r15b,0x4(%rsp)
mov    %r12b,0x5(%rsp)
mov    %bl,0x6(%rsp)
mov    %al,0x7(%rsp)
mov    %rsp,%rdi
mov    $0x8,%esi
xor    %eax,%eax
call   1030 <REVERSE@plt>
mov    %ebp,0xc(%rsp)
lea    0x8(%rsp),%rdi
mov    $0x8,%esi
xor    %eax,%eax
call   1030 <REVERSE@plt>
movq   $0x0,(%r14)
cmp    $0xff,%r15b
jne    11a1 <ieee2xpt+0x91>
cmp    $0xff,%r12b
jne    11a1 <ieee2xpt+0x91>
cmp    $0x2d,%bl
not    %bl
movzbl %bl,%eax
mov    $0x6d,%ecx
cmovne %eax,%ecx
mov    %cl,(%r14)
jmp    126b <ieee2xpt+0x15b>
mov    (%rsp),%rdx
mov    %edx,%esi
and    $0xfffff,%esi
mov    %rsi,0x18(%rsp)
mov    0x8(%rsp),%rbp
mov    %rbp,0x10(%rsp)
mov    %rbp,%rax
or     %rdx,%rax
je     123a <ieee2xpt+0x12a>
mov    %edx,%edi
shr    $0x14,%edi
and    $0x7ff,%edi
lea    -0x3ff(%rdi),%r8d
or     $0x100000,%rsi
mov    %r8d,%eax
and    $0x3,%eax
je     120b <ieee2xpt+0xfb>
mov    %eax,%ecx
shl    %cl,%rsi
mov    %rbp,%rbx
shr    $0x18,%rbx
and    $0xe0,%ebx
mov    $0x8,%cl
sub    %al,%cl
shr    %cl,%rbx
or     %rbx,%rsi
mov    %eax,%ecx
shl    %cl,%rbp
mov    %rbp,0x10(%rsp)
sar    $0x2,%r8d
movslq %r8d,%rax
shl    $0x18,%rax
add    $0x41000000,%rax
and    $0x80000000,%edx
or     %rsi,%rdx
or     %rax,%rdx
mov    %rdx,0x18(%rsp)
lea    -0x2fb(%rdi),%eax
cmp    $0x1fc,%eax
ja     1278 <ieee2xpt+0x168>
lea    0x18(%rsp),%rdi
mov    $0x8,%esi
xor    %eax,%eax
call   1030 <REVERSE@plt>
mov    0x1c(%rsp),%eax
mov    %eax,(%r14)
lea    0x10(%rsp),%rdi
mov    $0x8,%esi
xor    %eax,%eax
call   1030 <REVERSE@plt>
mov    0x14(%rsp),%eax
mov    %eax,0x4(%r14)
add    $0x20,%rsp
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
pop    %rbp
ret
movq   $0xffffffffffffffff,(%r14)
cmp    $0x4f8,%edi
jb     126b <ieee2xpt+0x15b>
movb   $0x7f,(%r14)
jmp    126b <ieee2xpt+0x15b>

LLVM IR (-O0):
define void @ieee2xpt(i8* %0, i8* %1) {
%3 = alloca i8*
%4 = alloca i8*
%5 = alloca i32
%6 = alloca i8
%7 = alloca i32
%8 = alloca i64
%9 = alloca i64
%10 = alloca i64
%11 = alloca i64
%12 = alloca [8 x i8]
store i8* %0, i8** %3
store i8* %1, i8** %4
store i64 0, i64* %10
store i64 0, i64* %11
%13 = getelementptr inbounds [8 x i8], [8 x i8]* %12, i64 0, i64 0
%14 = load i8*, i8** %3
%15 = bitcast i64* %10 to i8*
%16 = getelementptr inbounds i8, i8* %15, i64 8
%17 = getelementptr inbounds i8, i8* %16, i64 -4
%18 = getelementptr inbounds [8 x i8], [8 x i8]* %12, i64 0, i64 0
%19 = call i32 (i64*, i64, ...) bitcast (i32 (...)* @REVERSE to i32 (i64*, i64, ...)*)(i64* %10, i64 8)
%20 = bitcast i64* %11 to i8*
%21 = getelementptr inbounds i8, i8* %20, i64 8
%22 = getelementptr inbounds i8, i8* %21, i64 -4
%23 = getelementptr inbounds [8 x i8], [8 x i8]* %12, i64 0, i64 0
%24 = getelementptr inbounds i8, i8* %23, i64 4
%25 = call i32 (i64*, i64, ...) bitcast (i32 (...)* @REVERSE to i32 (i64*, i64, ...)*)(i64* %11, i64 8)
%26 = load i8*, i8** %4
%27 = getelementptr inbounds [8 x i8], [8 x i8]* %12, i64 0, i64 0
%28 = load i8, i8* %27
%29 = sext i8 %28 to i32
%30 = icmp eq i32 %29, -1
br i1 %30, label %31, label %53
31: ; preds = %2
%32 = getelementptr inbounds [8 x i8], [8 x i8]* %12, i64 0, i64 1
%33 = load i8, i8* %32
%34 = sext i8 %33 to i32
%35 = icmp eq i32 %34, -1
br i1 %35, label %36, label %53
36: ; preds = %31
%37 = getelementptr inbounds [8 x i8], [8 x i8]* %12, i64 0, i64 2
%38 = load i8, i8* %37
%39 = sext i8 %38 to i32
%40 = xor i32 %39, -1
%41 = trunc i32 %40 to i8
store i8 %41, i8* %6
%42 = load i8, i8* %6
%43 = zext i8 %42 to i32
%44 = icmp eq i32 %43, 210
br i1 %44, label %45, label %46
45: ; preds = %36
br label %49
46: ; preds = %36
%47 = load i8, i8* %6
%48 = zext i8 %47 to i32
br label %49
49: ; preds = %46, %45
%50 = phi i32 [ 109, %45 ], [ %48, %46 ]
%51 = trunc i32 %50 to i8
%52 = load i8*, i8** %4
store i8 %51, i8* %52
br label %131
53: ; preds = %31, %2
%54 = load i64, i64* %10
%55 = and i64 %54, 1048575
store i64 %55, i64* %8
%56 = load i64, i64* %11
store i64 %56, i64* %9
%57 = icmp ne i64 %56, 0
br i1 %57, label %62, label %58
58: ; preds = %53
%59 = load i64, i64* %10
%60 = icmp ne i64 %59, 0
br i1 %60, label %62, label %61
61: ; preds = %58
store i32 0, i32* %7
br label %106
62: ; preds = %58, %53
%63 = load i64, i64* %10
%64 = lshr i64 %63, 16
%65 = and i64 %64, 32752
%66 = lshr i64 %65, 4
%67 = trunc i64 %66 to i32
%68 = sub nsw i32 %67, 1023
store i32 %68, i32* %7
%69 = and i32 %68, 3
store i32 %69, i32* %5
%70 = load i64, i64* %8
%71 = or i64 %70, 1048576
store i64 %71, i64* %8
%72 = load i32, i32* %5
%73 = icmp ne i32 %72, 0
br i1 %73, label %74, label %94
74: ; preds = %62
%75 = load i64, i64* %8
%76 = load i32, i32* %5
%77 = zext i32 %76 to i64
%78 = shl i64 %75, %77
%79 = load i64, i64* %11
%80 = lshr i64 %79, 24
%81 = and i64 %80, 224
%82 = load i32, i32* %5
%83 = sub nsw i32 3, %82
%84 = add nsw i32 5, %83
%85 = zext i32 %84 to i64
%86 = lshr i64 %81, %85
%87 = trunc i64 %86 to i8
%88 = zext i8 %87 to i64
%89 = or i64 %78, %88
store i64 %89, i64* %8
%90 = load i32, i32* %5
%91 = load i64, i64* %9
%92 = zext i32 %90 to i64
%93 = shl i64 %91, %92
store i64 %93, i64* %9
br label %94
94: ; preds = %74, %62
%95 = load i32, i32* %7
%96 = ashr i32 %95, 2
%97 = add nsw i32 %96, 65
%98 = sext i32 %97 to i64
%99 = load i64, i64* %10
%100 = lshr i64 %99, 24
%101 = and i64 %100, 128
%102 = or i64 %98, %101
%103 = shl i64 %102, 24
%104 = load i64, i64* %8
%105 = or i64 %104, %103
store i64 %105, i64* %8
br label %106
106: ; preds = %94, %61
%107 = load i32, i32* %7
%108 = icmp sle i32 -260, %107
br i1 %108, label %109, label %124
109: ; preds = %106
%110 = load i32, i32* %7
%111 = icmp sle i32 %110, 248
br i1 %111, label %112, label %124
112: ; preds = %109
%113 = call i32 (i64*, i64, ...) bitcast (i32 (...)* @REVERSE to i32 (i64*, i64, ...)*)(i64* %8, i64 8)
%114 = load i8*, i8** %4
%115 = bitcast i64* %8 to i8*
%116 = getelementptr inbounds i8, i8* %115, i64 8
%117 = getelementptr inbounds i8, i8* %116, i64 -4
%118 = call i32 (i64*, i64, ...) bitcast (i32 (...)* @REVERSE to i32 (i64*, i64, ...)*)(i64* %9, i64 8)
%119 = load i8*, i8** %4
%120 = getelementptr inbounds i8, i8* %119, i64 4
%121 = bitcast i64* %9 to i8*
%122 = getelementptr inbounds i8, i8* %121, i64 8
%123 = getelementptr inbounds i8, i8* %122, i64 -4
br label %131
124: ; preds = %109, %106
%125 = load i8*, i8** %4
%126 = load i32, i32* %7
%127 = icmp sgt i32 %126, 248
br i1 %127, label %128, label %130
128: ; preds = %124
%129 = load i8*, i8** %4
store i8 127, i8* %129
br label %130
130: ; preds = %128, %124
br label %131
131: ; preds = %130, %112, %49
ret void
}

LLVM IR (-O2):
define void @ieee2xpt(i8* nocapture %0, i8* nocapture writeonly %1) {
%3 = alloca i64
%4 = alloca i64
%5 = alloca i64
%6 = alloca i64
%7 = bitcast i64* %3 to i8*
%8 = bitcast i64* %4 to i8*
%9 = bitcast i64* %5 to i8*
store i64 0, i64* %5
%10 = bitcast i64* %6 to i8*
store i64 0, i64* %6
%11 = load i8, i8* %0
%12 = getelementptr inbounds i8, i8* %0, i64 1
%13 = load i8, i8* %12
%14 = getelementptr inbounds i8, i8* %0, i64 2
%15 = load i8, i8* %14
%16 = getelementptr inbounds i8, i8* %0, i64 3
%17 = load i8, i8* %16
%18 = getelementptr inbounds i8, i8* %0, i64 4
%19 = bitcast i8* %18 to i32*
%20 = load i32, i32* %19
%21 = getelementptr inbounds i8, i8* %9, i64 4
store i8 %11, i8* %21
%22 = getelementptr inbounds i8, i8* %9, i64 5
store i8 %13, i8* %22
%23 = getelementptr inbounds i8, i8* %9, i64 6
store i8 %15, i8* %23
%24 = getelementptr inbounds i8, i8* %9, i64 7
store i8 %17, i8* %24
%25 = call i32 (i64*, i64, ...) bitcast (i32 (...)* @REVERSE to i32 (i64*, i64, ...)*)(i64* %5, i64 8)
%26 = getelementptr inbounds i8, i8* %10, i64 4
%27 = bitcast i8* %26 to i32*
store i32 %20, i32* %27
%28 = call i32 (i64*, i64, ...) bitcast (i32 (...)* @REVERSE to i32 (i64*, i64, ...)*)(i64* %6, i64 8)
%29 = bitcast i8* %1 to i64*
store i64 0, i64* %29
%30 = icmp eq i8 %11, -1
%31 = icmp eq i8 %13, -1
%32 = select i1 %30, i1 %31, i1 false
br i1 %32, label %33, label %37
33: ; preds = %2
%34 = xor i8 %15, -1
%35 = icmp eq i8 %15, 45
%36 = select i1 %35, i8 109, i8 %34
store i8 %36, i8* %1
br label %92
37: ; preds = %2
%38 = load i64, i64* %5
%39 = and i64 %38, 1048575
store i64 %39, i64* %3
%40 = load i64, i64* %6
store i64 %40, i64* %4
%41 = icmp ne i64 %40, 0
%42 = icmp ne i64 %38, 0
%43 = select i1 %41, i1 true, i1 %42
br i1 %43, label %44, label %73
44: ; preds = %37
%45 = trunc i64 %38 to i32
%46 = lshr i32 %45, 20
%47 = and i32 %46, 2047
%48 = add nsw i32 %47, -1023
%49 = and i32 %48, 3
%50 = or i64 %39, 1048576
%51 = icmp eq i32 %49, 0
br i1 %51, label %62, label %52
52: ; preds = %44
%53 = zext i32 %49 to i64
%54 = shl i64 %50, %53
%55 = lshr i64 %40, 24
%56 = and i64 %55, 224
%57 = sub nuw nsw i32 8, %49
%58 = zext i32 %57 to i64
%59 = lshr i64 %56, %58
%60 = or i64 %59, %54
%61 = shl i64 %40, %53
store i64 %61, i64* %4
br label %62
62: ; preds = %44, %52
%63 = phi i64 [ %50, %44 ], [ %60, %52 ]
%64 = ashr i32 %48, 2
%65 = add nsw i32 %64, 65
%66 = sext i32 %65 to i64
%67 = shl nsw i64 %66, 24
%68 = and i64 %38, 2147483648
%69 = or i64 %67, %68
%70 = or i64 %69, %63
store i64 %70, i64* %3
%71 = add nsw i32 %47, -763
%72 = icmp ult i32 %71, 509
br i1 %72, label %73, label %89
73: ; preds = %37, %62
%74 = call i32 (i64*, i64, ...) bitcast (i32 (...)* @REVERSE to i32 (i64*, i64, ...)*)(i64* %3, i64 8)
%75 = getelementptr inbounds i64, i64* %3, i64 1
%76 = bitcast i64* %75 to i8*
%77 = getelementptr inbounds i8, i8* %76, i64 -4
%78 = bitcast i8* %77 to i32*
%79 = bitcast i8* %1 to i32*
%80 = load i32, i32* %78
store i32 %80, i32* %79
%81 = call i32 (i64*, i64, ...) bitcast (i32 (...)* @REVERSE to i32 (i64*, i64, ...)*)(i64* %4, i64 8)
%82 = getelementptr inbounds i8, i8* %1, i64 4
%83 = getelementptr inbounds i64, i64* %4, i64 1
%84 = bitcast i64* %83 to i8*
%85 = getelementptr inbounds i8, i8* %84, i64 -4
%86 = bitcast i8* %85 to i32*
%87 = bitcast i8* %82 to i32*
%88 = load i32, i32* %86
store i32 %88, i32* %87
br label %92
89: ; preds = %62
store i64 -1, i64* %29
%90 = icmp ugt i32 %47, 1271
br i1 %90, label %91, label %92
91: ; preds = %89
store i8 127, i8* %1
br label %92
92: ; preds = %89, %91, %73, %33
ret void
}