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

```asm
<round_f_inverse>:
  endbr64
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x8,%rsp
  mov    %rdi,%rbx
  mov    %rsi,%rbp
  mov    (%rdi),%r11d
  mov    0x10(%rdi),%ecx
  mov    %ecx,(%rdi)
  mov    0x4(%rdi),%r10d
  mov    0x14(%rdi),%esi
  mov    %esi,0x4(%rdi)
  mov    0x8(%rdi),%r9d
  mov    0x18(%rdi),%edi
  mov    %edi,0x8(%rbx)
  mov    0xc(%rbx),%r8d
  mov    0x1c(%rbx),%edx
  mov    %edx,0xc(%rbx)
  mov    %ecx,%eax
  xor    %esi,%eax
  xor    %edi,%eax
  xor    %edx,%eax
  mov    %eax,%r12d
  shl    $0x8,%r12d
  sar    $0x8,%eax
  or     %r12d,%eax
  xor    %r11d,%edi
  xor    %eax,%edi
  mov    %edi,0x10(%rbx)
  xor    %r10d,%esi
  xor    %eax,%esi
  mov    %esi,0x14(%rbx)
  xor    %r9d,%ecx
  xor    %eax,%ecx
  mov    %ecx,0x18(%rbx)
  xor    %r8d,%edx
  xor    %eax,%edx
  mov    %edx,0x1c(%rbx)
  lea    0x1c(%rbx),%r13
  lea    0x18(%rbx),%r12
  mov    %r13,%rsi
  mov    %r12,%rdi
  call   <speckey_inverse@plt>
  mov    0x7c(%rbp),%edi
  call   <READ_ROUND_KEY_WORD@plt>
  xor    %eax,0x1c(%rbx)
  mov    0x78(%rbp),%edi
  call   <READ_ROUND_KEY_WORD@plt>
  xor    %eax,0x18(%rbx)
  mov    %r13,%rsi
  mov    %r12,%rdi
  call   <speckey_inverse@plt>
  mov    0x74(%rbp),%edi
  call   <READ_ROUND_KEY_WORD@plt>
  xor    %eax,0x1c(%rbx)
  mov    0x70(%rbp),%edi
  call   <READ_ROUND_KEY_WORD@plt>
  xor    %eax,0x18(%rbx)
  mov    %r13,%rsi
  mov    %r12,%rdi
  call   <speckey_inverse@plt>
  mov    0x6c(%rbp),%edi
  call   <READ_ROUND_KEY_WORD@plt>
  xor    %eax,0x1c(%rbx)
  mov    0x68(%rbp),%edi
  call   <READ_ROUND_KEY_WORD@plt>
  xor    %eax,0x18(%rbx)
  mov    %r13,%rsi
  mov    %r12,%rdi
  call   <speckey_inverse@plt>
  mov    0x64(%rbp),%edi
  call   <READ_ROUND_KEY_WORD@plt>
  xor    %eax,0x1c(%rbx)
  mov    0x60(%rbp),%edi
  call   <READ_ROUND_KEY_WORD@plt>
  xor    %eax,0x18(%rbx)
  lea    0x14(%rbx),%r13
  lea    0x10(%rbx),%r12
  mov    %r13,%rsi
  mov    %r12,%rdi
  call   <speckey_inverse@plt>
  mov    0x5c(%rbp),%edi
  call   <READ_ROUND_KEY_WORD@plt>
  xor    %eax,0x14(%rbx)
  mov    0x58(%rbp),%edi
  call   <READ_ROUND_KEY_WORD@plt>
  xor    %eax,0x10(%rbx)
  mov    %r13,%rsi
  mov    %r12,%rdi
  call   <speckey_inverse@plt>
  mov    0x54(%rbp),%edi
  call   <READ_ROUND_KEY_WORD@plt>
  xor    %eax,0x14(%rbx)
  mov    0x50(%rbp),%edi
  call   <READ_ROUND_KEY_WORD@plt>
  xor    %eax,0x10(%rbx)
  mov    %r13,%rsi
  mov    %r12,%rdi
  call   <speckey_inverse@plt>
  mov    0x4c(%rbp),%edi
  call   <READ_ROUND_KEY_WORD@plt>
  xor    %eax,0x14(%rbx)
  mov    0x48(%rbp),%edi
  call   <READ_ROUND_KEY_WORD@plt>
  xor    %eax,0x10(%rbx)
  mov    %r13,%rsi
  mov    %r12,%rdi
  call   <speckey_inverse@plt>
  mov    0x44(%rbp),%edi
  call   <READ_ROUND_KEY_WORD@plt>
  xor    %eax,0x14(%rbx)
  mov    0x40(%rbp),%edi
  call   <READ_ROUND_KEY_WORD@plt>
  xor    %eax,0x10(%rbx)
  lea    0xc(%rbx),%r13
  lea    0x8(%rbx),%r12
  mov    %r13,%rsi
  mov    %r12,%rdi
  call   <speckey_inverse@plt>
  mov    0x3c(%rbp),%edi
  call   <READ_ROUND_KEY_WORD@plt>
  xor    %eax,0xc(%rbx)
  mov    0x38(%rbp),%edi
  call   <READ_ROUND_KEY_WORD@plt>
  xor    %eax,0x8(%rbx)
  mov    %r13,%rsi
  mov    %r12,%rdi
  call   <speckey_inverse@plt>
  mov    0x34(%rbp),%edi
  call   <READ_ROUND_KEY_WORD@plt>
  xor    %eax,0xc(%rbx)
  mov    0x30(%rbp),%edi
  call   <READ_ROUND_KEY_WORD@plt>
  xor    %eax,0x8(%rbx)
  mov    %r13,%rsi
  mov    %r12,%rdi
  call   <speckey_inverse@plt>
  mov    0x2c(%rbp),%edi
  call   <READ_ROUND_KEY_WORD@plt>
  xor    %eax,0xc(%rbx)
  mov    0x28(%rbp),%edi
  call   <READ_ROUND_KEY_WORD@plt>
  xor    %eax,0x8(%rbx)
  mov    %r13,%rsi
  mov    %r12,%rdi
  call   <speckey_inverse@plt>
  mov    0x24(%rbp),%edi
  call   <READ_ROUND_KEY_WORD@plt>
  xor    %eax,0xc(%rbx)
  mov    0x20(%rbp),%edi
  call   <READ_ROUND_KEY_WORD@plt>
  xor    %eax,0x8(%rbx)
  lea    0x4(%rbx),%r12
  mov    %r12,%rsi
  mov    %rbx,%rdi
  call   <speckey_inverse@plt>
  mov    0x1c(%rbp),%edi
  call   <READ_ROUND_KEY_WORD@plt>
  xor    %eax,0x4(%rbx)
  mov    0x18(%rbp),%edi
  call   <READ_ROUND_KEY_WORD@plt>
  xor    %eax,(%rbx)
  mov    %r12,%rsi
  mov    %rbx,%rdi
  call   <speckey_inverse@plt>
  mov    0x14(%rbp),%edi
  call   <READ_ROUND_KEY_WORD@plt>
  xor    %eax,0x4(%rbx)
  mov    0x10(%rbp),%edi
  call   <READ_ROUND_KEY_WORD@plt>
  xor    %eax,(%rbx)
  mov    %r12,%rsi
  mov    %rbx,%rdi
  call   <speckey_inverse@plt>
  mov    0xc(%rbp),%edi
  call   <READ_ROUND_KEY_WORD@plt>
  xor    %eax,0x4(%rbx)
  mov    0x8(%rbp),%edi
  call   <READ_ROUND_KEY_WORD@plt>
  xor    %eax,(%rbx)
  mov    %r12,%rsi
  mov    %rbx,%rdi
  call   <speckey_inverse@plt>
  mov    0x4(%rbp),%edi
  call   <READ_ROUND_KEY_WORD@plt>
  xor    %eax,0x4(%rbx)
  mov    0x0(%rbp),%edi
  call   <READ_ROUND_KEY_WORD@plt>
  xor    %eax,(%rbx)
  add    $0x8,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  ret
```

assistant: ```c
void round_f_inverse(uint16_t *block, uint16_t *roundKeys) {
  uint16_t temp;
  temp = block[0];
  block[0] = block[4];
  block[4] = temp;
  temp = block[1];
  block[1] = block[5];
  block[5] = temp;
  temp = block[2];
  block[2] = block[6];
  block[6] = temp;
  temp = block[3];
  block[3] = block[7];
  block[7] = temp;
  temp = block[0] ^ block[1] ^ block[2] ^ block[3];
  temp = (((temp) << (8)) | ((temp) >> (16 - 8)));
  block[4] ^= block[2] ^ temp;
  block[5] ^= block[1] ^ temp;
  block[6] ^= block[0] ^ temp;
  block[7] ^= block[3] ^ temp;
  speckey_inverse(&block[6], &block[7]);
  block[7] ^= READ_ROUND_KEY_WORD(roundKeys[31]);
  block[6] ^= READ_ROUND_KEY_WORD(roundKeys[30]);
  speckey_inverse(&block[6], &block[7]);
  block[7] ^= READ_ROUND_KEY_WORD(roundKeys[29]);
  block[6] ^= READ_ROUND_KEY_WORD(roundKeys[28]);
  speckey_inverse(&block[6], &block[7]);
  block[7] ^= READ_ROUND_KEY_WORD(roundKeys[27]);
  block[6] ^= READ_ROUND_KEY_WORD(roundKeys[26]);
  speckey_inverse(&block[6], &block[7]);
  block[7] ^= READ_ROUND_KEY_WORD(roundKeys[25]);
  block[6] ^= READ_ROUND_KEY_WORD(roundKeys[24]);
  speckey_inverse(&block[4], &block[5]);
  block[5] ^= READ_ROUND_KEY_WORD(roundKeys[23]);
  block[4] ^= READ_ROUND_KEY_WORD(roundKeys[22]);
  speckey_inverse(&block[4], &block[5]);
  block[5] ^= READ_ROUND_KEY_WORD(roundKeys[21]);
  block[4] ^= READ_ROUND_KEY_WORD(roundKeys[20]);
  speckey_inverse(&block[4], &block[5]);
  block[5] ^= READ_ROUND_KEY_WORD(roundKeys[19]);
  block[4] ^= READ_ROUND_KEY_WORD(roundKeys[18]);
  speckey_inverse(&block[4], &block[5]);
  block[5] ^= READ_ROUND_KEY_WORD(roundKeys[17]);
  block[4] ^= READ_ROUND_KEY_WORD(roundKeys[16]);
  speckey_inverse(&block[2], &block[3]);
  block[3] ^= READ_ROUND_KEY_WORD(roundKeys[15]);
  block[2] ^= READ_ROUND_KEY_WORD(roundKeys[14]);
  speckey_inverse(&block[2], &block[3]);
  block[3] ^= READ_ROUND_KEY_WORD(roundKeys[13]);
  block[2] ^= READ_ROUND_KEY_WORD(roundKeys[12]);
  speckey_inverse(&block[2], &block[3]);
  block[3] ^= READ_ROUND_KEY_WORD(roundKeys[11]);
  block[2] ^= READ_ROUND_KEY_WORD(roundKeys[10]);
  speckey_inverse(&block[2], &block[3]);
  block[3] ^= READ_ROUND_KEY_WORD(roundKeys[9]);
  block[2] ^= READ_ROUND_KEY_WORD(roundKeys[8]);
  speckey_inverse(&block[0], &block[1]);
  block[1] ^= READ_ROUND_KEY_WORD(roundKeys[7]);
  block[0] ^= READ_ROUND_KEY_WORD(roundKeys[6]);
  speckey_inverse(&block[0], &block[1]);
  block[1] ^= READ_ROUND_KEY_WORD(roundKeys[5]);
  block[0] ^= READ_ROUND_KEY_WORD(roundKeys[4]);
  speckey_inverse(&block[0], &block[1]);
  block[1] ^= READ_ROUND_KEY_WORD(roundKeys[3]);
  block[0] ^= READ_ROUND_KEY_WORD(roundKeys[2]);
  speckey_inverse(&block[0], &block[1]);
  block[1] ^= READ_ROUND_KEY_WORD(roundKeys[1]);
  block[0] ^= READ_ROUND_KEY_WORD(roundKeys[0]);
}
```