user: 这段汇编代码用C语言表示是什么样的:

```asm
<fexpand>:
  endbr64
  mov    %rsi,%rax
  mov    0x18(%rsi),%r8
  mov    0x8(%rsi),%edx
  mov    %rdi,%rcx
  mov    0x10(%rsi),%esi
  shl    $0x8,%edx
  shl    $0x10,%esi
  or     %esi,%edx
  mov    %r8d,%esi
  or     (%rax),%edx
  shl    $0x18,%esi
  or     %esi,%edx
  mov    0x28(%rax),%esi
  and    $0x3ffffff,%edx
  mov    %edx,(%rdi)
  mov    0x20(%rax),%edx
  shl    $0x10,%esi
  mov    0x30(%rax),%rdi
  shl    $0x8,%edx
  or     %esi,%edx
  mov    %edi,%esi
  or     %r8d,%edx
  shl    $0x18,%esi
  mov    0x48(%rax),%r8
  or     %esi,%edx
  mov    0x40(%rax),%esi
  sar    $0x2,%edx
  and    $0x1ffffff,%edx
  shl    $0x10,%esi
  mov    %edx,0x4(%rcx)
  mov    0x38(%rax),%edx
  shl    $0x8,%edx
  or     %esi,%edx
  mov    %r8d,%esi
  or     %edi,%edx
  shl    $0x18,%esi
  mov    0x60(%rax),%rdi
  or     %esi,%edx
  mov    0x58(%rax),%esi
  sar    $0x3,%edx
  and    $0x3ffffff,%edx
  shl    $0x10,%esi
  mov    %edx,0x8(%rcx)
  mov    0x50(%rax),%edx
  shl    $0x8,%edx
  or     %esi,%edx
  mov    %edi,%esi
  or     %r8d,%edx
  shl    $0x18,%esi
  mov    0x98(%rax),%r8
  or     %esi,%edx
  mov    0x70(%rax),%esi
  sar    $0x5,%edx
  and    $0x1ffffff,%edx
  mov    %edx,0xc(%rcx)
  mov    0x68(%rax),%edx
  shl    $0x8,%edx
  shl    $0x10,%esi
  or     %esi,%edx
  mov    0x78(%rax),%esi
  or     %edi,%edx
  mov    0xb0(%rax),%rdi
  shl    $0x18,%esi
  or     %esi,%edx
  mov    0x90(%rax),%esi
  shr    $0x6,%edx
  mov    %edx,0x10(%rcx)
  mov    0x88(%rax),%edx
  shl    $0x10,%esi
  shl    $0x8,%edx
  or     %esi,%edx
  mov    %r8d,%esi
  or     0x80(%rax),%edx
  shl    $0x18,%esi
  or     %esi,%edx
  mov    0xa8(%rax),%esi
  and    $0x1ffffff,%edx
  mov    %edx,0x14(%rcx)
  mov    0xa0(%rax),%edx
  shl    $0x10,%esi
  shl    $0x8,%edx
  or     %esi,%edx
  mov    %edi,%esi
  or     %r8d,%edx
  shl    $0x18,%esi
  mov    0xc8(%rax),%r8
  or     %esi,%edx
  sar    %edx
  and    $0x3ffffff,%edx
  mov    %edx,0x18(%rcx)
  mov    0xb8(%rax),%edx
  mov    0xc0(%rax),%esi
  shl    $0x8,%edx
  shl    $0x10,%esi
  or     %esi,%edx
  mov    %r8d,%esi
  or     %edi,%edx
  shl    $0x18,%esi
  mov    0xe0(%rax),%rdi
  or     %esi,%edx
  mov    0xd8(%rax),%esi
  sar    $0x3,%edx
  and    $0x1ffffff,%edx
  shl    $0x10,%esi
  mov    %edx,0x1c(%rcx)
  mov    0xd0(%rax),%edx
  shl    $0x8,%edx
  or     %esi,%edx
  mov    %edi,%esi
  or     %r8d,%edx
  shl    $0x18,%esi
  or     %esi,%edx
  mov    0xf0(%rax),%esi
  sar    $0x4,%edx
  and    $0x3ffffff,%edx
  shl    $0x10,%esi
  mov    %edx,0x20(%rcx)
  mov    0xe8(%rax),%edx
  mov    0xf8(%rax),%rax
  shl    $0x8,%edx
  or     %esi,%edx
  shl    $0x18,%eax
  or     %edi,%edx
  or     %edx,%eax
  sar    $0x6,%eax
  and    $0x1ffffff,%eax
  mov    %eax,0x24(%rcx)
  ret
```

assistant: ```c
void fexpand(int64_t *output, const uint8_t *input) {
  output[0] = ((((int64_t)input[0 + 0]) | ((int64_t)input[0 + 1]) << 8 | ((int64_t)input[0 + 2]) << 16 | ((int64_t)input[0 + 3]) << 24) >> 0) & 0x3ffffff;
  ;
  output[1] = ((((int64_t)input[3 + 0]) | ((int64_t)input[3 + 1]) << 8 | ((int64_t)input[3 + 2]) << 16 | ((int64_t)input[3 + 3]) << 24) >> 2) & 0x1ffffff;
  ;
  output[2] = ((((int64_t)input[6 + 0]) | ((int64_t)input[6 + 1]) << 8 | ((int64_t)input[6 + 2]) << 16 | ((int64_t)input[6 + 3]) << 24) >> 3) & 0x3ffffff;
  ;
  output[3] = ((((int64_t)input[9 + 0]) | ((int64_t)input[9 + 1]) << 8 | ((int64_t)input[9 + 2]) << 16 | ((int64_t)input[9 + 3]) << 24) >> 5) & 0x1ffffff;
  ;
  output[4] = ((((int64_t)input[12 + 0]) | ((int64_t)input[12 + 1]) << 8 | ((int64_t)input[12 + 2]) << 16 | ((int64_t)input[12 + 3]) << 24) >> 6) & 0x3ffffff;
  ;
  output[5] = ((((int64_t)input[16 + 0]) | ((int64_t)input[16 + 1]) << 8 | ((int64_t)input[16 + 2]) << 16 | ((int64_t)input[16 + 3]) << 24) >> 0) & 0x1ffffff;
  ;
  output[6] = ((((int64_t)input[19 + 0]) | ((int64_t)input[19 + 1]) << 8 | ((int64_t)input[19 + 2]) << 16 | ((int64_t)input[19 + 3]) << 24) >> 1) & 0x3ffffff;
  ;
  output[7] = ((((int64_t)input[22 + 0]) | ((int64_t)input[22 + 1]) << 8 | ((int64_t)input[22 + 2]) << 16 | ((int64_t)input[22 + 3]) << 24) >> 3) & 0x1ffffff;
  ;
  output[8] = ((((int64_t)input[25 + 0]) | ((int64_t)input[25 + 1]) << 8 | ((int64_t)input[25 + 2]) << 16 | ((int64_t)input[25 + 3]) << 24) >> 4) & 0x3ffffff;
  ;
  output[9] = ((((int64_t)input[28 + 0]) | ((int64_t)input[28 + 1]) << 8 | ((int64_t)input[28 + 2]) << 16 | ((int64_t)input[28 + 3]) << 24) >> 6) & 0x1ffffff;
  ;
}
```