user: 请显示与下面列出的汇编代码相匹配的C语言实现：

```asm
<import64>:
  endbr64
  test   %edx,%edx
  je     L52
  test   %esi,%esi
  jne    L23
  mov    $0x0,%eax
  mov    0x7(%rdi),%al
  movzbl 0x6(%rdi),%edx
  mov    %dl,%ah
  movzbl 0x5(%rdi),%edx
  shl    $0x10,%rdx
  and    $0xffffffffff00ffff,%rax
  or     %rdx,%rax
  movzbl 0x4(%rdi),%edx
  shl    $0x18,%rdx
  movabs $0xffffffff00ffffff,%rsi
  and    %rsi,%rax
  or     %rdx,%rax
  movzbl 0x3(%rdi),%edx
  shl    $0x20,%rdx
  movabs $0xffffff00ffffffff,%rsi
  and    %rsi,%rax
  or     %rdx,%rax
  movzbl 0x2(%rdi),%edx
  shl    $0x28,%rdx
  movabs $0xffff00ffffffffff,%rsi
  and    %rsi,%rax
  or     %rdx,%rax
  movzbl 0x1(%rdi),%edx
  shl    $0x30,%rdx
  movabs $0xff00ffffffffffff,%rsi
  and    %rsi,%rax
  or     %rdx,%rax
  movzbl (%rdi),%edx
L11:
  shl    $0x38,%rdx
  movabs $0xffffffffffffff,%rcx
  and    %rcx,%rax
  or     %rdx,%rax
  movq   %rax,%xmm0
  ret
L23:
  mov    $0x0,%eax
  mov    (%rdi),%al
  movzbl 0x1(%rdi),%edx
  mov    %dl,%ah
  movzbl 0x2(%rdi),%edx
  shl    $0x10,%rdx
  and    $0xffffffffff00ffff,%rax
  or     %rdx,%rax
  movzbl 0x3(%rdi),%edx
  shl    $0x18,%rdx
  movabs $0xffffffff00ffffff,%rsi
  and    %rsi,%rax
  or     %rdx,%rax
  movzbl 0x4(%rdi),%edx
  shl    $0x20,%rdx
  movabs $0xffffff00ffffffff,%rsi
  and    %rsi,%rax
  or     %rdx,%rax
  movzbl 0x5(%rdi),%edx
  shl    $0x28,%rdx
  movabs $0xffff00ffffffffff,%rsi
  and    %rsi,%rax
  or     %rdx,%rax
  movzbl 0x6(%rdi),%edx
  shl    $0x30,%rdx
  movabs $0xff00ffffffffffff,%rsi
  and    %rsi,%rax
  or     %rdx,%rax
  movzbl 0x7(%rdi),%edx
  jmp    L11
L52:
  test   %esi,%esi
  jne    L13
  mov    $0x0,%eax
  mov    (%rdi),%al
  movzbl 0x1(%rdi),%edx
  mov    %dl,%ah
  movzbl 0x2(%rdi),%edx
  shl    $0x10,%rdx
  and    $0xffffffffff00ffff,%rax
  or     %rdx,%rax
  movzbl 0x3(%rdi),%edx
  shl    $0x18,%rdx
  movabs $0xffffffff00ffffff,%rsi
  and    %rsi,%rax
  or     %rdx,%rax
  movzbl 0x4(%rdi),%edx
  shl    $0x20,%rdx
  movabs $0xffffff00ffffffff,%rsi
  and    %rsi,%rax
  or     %rdx,%rax
  movzbl 0x5(%rdi),%edx
  shl    $0x28,%rdx
  movabs $0xffff00ffffffffff,%rsi
  and    %rsi,%rax
  or     %rdx,%rax
  movzbl 0x6(%rdi),%edx
  shl    $0x30,%rdx
  movabs $0xff00ffffffffffff,%rsi
  and    %rsi,%rax
  or     %rdx,%rax
  movzbl 0x7(%rdi),%edx
  jmp    L11
L13:
  mov    $0x0,%eax
  mov    0x7(%rdi),%al
  movzbl 0x6(%rdi),%edx
  mov    %dl,%ah
  movzbl 0x5(%rdi),%edx
  shl    $0x10,%rdx
  and    $0xffffffffff00ffff,%rax
  or     %rdx,%rax
  movzbl 0x4(%rdi),%edx
  shl    $0x18,%rdx
  movabs $0xffffffff00ffffff,%rsi
  and    %rsi,%rax
  or     %rdx,%rax
  movzbl 0x3(%rdi),%edx
  shl    $0x20,%rdx
  movabs $0xffffff00ffffffff,%rsi
  and    %rsi,%rax
  or     %rdx,%rax
  movzbl 0x2(%rdi),%edx
  shl    $0x28,%rdx
  movabs $0xffff00ffffffffff,%rsi
  and    %rsi,%rax
  or     %rdx,%rax
  movzbl 0x1(%rdi),%edx
  shl    $0x30,%rdx
  movabs $0xff00ffffffffffff,%rsi
  and    %rsi,%rax
  or     %rdx,%rax
  movzbl (%rdi),%edx
  jmp    L11
```

assistant: ```c
double import64(char *p, int little_endian, int little_endian_arch) {
  union cvt {
    unsigned char byte[8];
    double double_value;
  } convert;
  if (little_endian_arch) {
    if (!little_endian) {
      convert.byte[0] = *(p + 7);
      convert.byte[1] = *(p + 6);
      convert.byte[2] = *(p + 5);
      convert.byte[3] = *(p + 4);
      convert.byte[4] = *(p + 3);
      convert.byte[5] = *(p + 2);
      convert.byte[6] = *(p + 1);
      convert.byte[7] = *(p + 0);
    } else {
      convert.byte[0] = *(p + 0);
      convert.byte[1] = *(p + 1);
      convert.byte[2] = *(p + 2);
      convert.byte[3] = *(p + 3);
      convert.byte[4] = *(p + 4);
      convert.byte[5] = *(p + 5);
      convert.byte[6] = *(p + 6);
      convert.byte[7] = *(p + 7);
    }
  } else {
    if (!little_endian) {
      convert.byte[0] = *(p + 0);
      convert.byte[1] = *(p + 1);
      convert.byte[2] = *(p + 2);
      convert.byte[3] = *(p + 3);
      convert.byte[4] = *(p + 4);
      convert.byte[5] = *(p + 5);
      convert.byte[6] = *(p + 6);
      convert.byte[7] = *(p + 7);
    } else {
      convert.byte[0] = *(p + 7);
      convert.byte[1] = *(p + 6);
      convert.byte[2] = *(p + 5);
      convert.byte[3] = *(p + 4);
      convert.byte[4] = *(p + 3);
      convert.byte[5] = *(p + 2);
      convert.byte[6] = *(p + 1);
      convert.byte[7] = *(p + 0);
    }
  }
  return convert.double_value;
}
```