user: Please show me the C implementation that matches the assembly code listed below:

```asm
<quantization_and_coding>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x20,%rsp
  mov    %rdi,-0x18(%rbp)
  mov    -0x18(%rbp),%rax
  mov    (%rax),%eax
  mov    %eax,%esi
  mov    $0x5000,%edi
  call   <saturated_mul16@plt>
  mov    %eax,-0x4(%rbp)
  mov    -0x4(%rbp),%eax
  mov    $0x0,%esi
  mov    %eax,%edi
  call   <saturated_add16@plt>
  mov    %eax,-0x4(%rbp)
  mov    -0x4(%rbp),%eax
  mov    $0x100,%esi
  mov    %eax,%edi
  call   <saturated_add16@plt>
  mov    %eax,-0x4(%rbp)
  sarl   $0x9,-0x4(%rbp)
  cmpl   $0x1f,-0x4(%rbp)
  jg     L149
  mov    -0x4(%rbp),%eax
  mov    $0xffffffe0,%edx
  cmp    %edx,%eax
  cmovl  %edx,%eax
  lea    0x20(%rax),%edx
  jmp    L88
L149:
  mov    $0x3f,%edx
L88:
  mov    -0x18(%rbp),%rax
  mov    %edx,(%rax)
  addq   $0x4,-0x18(%rbp)
  mov    -0x18(%rbp),%rax
  mov    (%rax),%eax
  mov    %eax,%esi
  mov    $0x5000,%edi
  call   <saturated_mul16@plt>
  mov    %eax,-0x4(%rbp)
  mov    -0x4(%rbp),%eax
  mov    $0x0,%esi
  mov    %eax,%edi
  call   <saturated_add16@plt>
  mov    %eax,-0x4(%rbp)
  mov    -0x4(%rbp),%eax
  mov    $0x100,%esi
  mov    %eax,%edi
  call   <saturated_add16@plt>
  mov    %eax,-0x4(%rbp)
  sarl   $0x9,-0x4(%rbp)
  cmpl   $0x1f,-0x4(%rbp)
  jg     L84
  mov    -0x4(%rbp),%eax
  mov    $0xffffffe0,%edx
  cmp    %edx,%eax
  cmovl  %edx,%eax
  lea    0x20(%rax),%edx
  jmp    L108
L84:
  mov    $0x3f,%edx
L108:
  mov    -0x18(%rbp),%rax
  mov    %edx,(%rax)
  addq   $0x4,-0x18(%rbp)
  mov    -0x18(%rbp),%rax
  mov    (%rax),%eax
  mov    %eax,%esi
  mov    $0x5000,%edi
  call   <saturated_mul16@plt>
  mov    %eax,-0x4(%rbp)
  mov    -0x4(%rbp),%eax
  mov    $0x800,%esi
  mov    %eax,%edi
  call   <saturated_add16@plt>
  mov    %eax,-0x4(%rbp)
  mov    -0x4(%rbp),%eax
  mov    $0x100,%esi
  mov    %eax,%edi
  call   <saturated_add16@plt>
  mov    %eax,-0x4(%rbp)
  sarl   $0x9,-0x4(%rbp)
  cmpl   $0xf,-0x4(%rbp)
  jg     L154
  mov    -0x4(%rbp),%eax
  mov    $0xfffffff0,%edx
  cmp    %edx,%eax
  cmovl  %edx,%eax
  lea    0x10(%rax),%edx
  jmp    L39
L154:
  mov    $0x1f,%edx
L39:
  mov    -0x18(%rbp),%rax
  mov    %edx,(%rax)
  addq   $0x4,-0x18(%rbp)
  mov    -0x18(%rbp),%rax
  mov    (%rax),%eax
  mov    %eax,%esi
  mov    $0x5000,%edi
  call   <saturated_mul16@plt>
  mov    %eax,-0x4(%rbp)
  mov    -0x4(%rbp),%eax
  mov    $0xfffff600,%esi
  mov    %eax,%edi
  call   <saturated_add16@plt>
  mov    %eax,-0x4(%rbp)
  mov    -0x4(%rbp),%eax
  mov    $0x100,%esi
  mov    %eax,%edi
  call   <saturated_add16@plt>
  mov    %eax,-0x4(%rbp)
  sarl   $0x9,-0x4(%rbp)
  cmpl   $0xf,-0x4(%rbp)
  jg     L28
  mov    -0x4(%rbp),%eax
  mov    $0xfffffff0,%edx
  cmp    %edx,%eax
  cmovl  %edx,%eax
  lea    0x10(%rax),%edx
  jmp    L106
L28:
  mov    $0x1f,%edx
L106:
  mov    -0x18(%rbp),%rax
  mov    %edx,(%rax)
  addq   $0x4,-0x18(%rbp)
  mov    -0x18(%rbp),%rax
  mov    (%rax),%eax
  mov    %eax,%esi
  mov    $0x368c,%edi
  call   <saturated_mul16@plt>
  mov    %eax,-0x4(%rbp)
  mov    -0x4(%rbp),%eax
  mov    $0x5e,%esi
  mov    %eax,%edi
  call   <saturated_add16@plt>
  mov    %eax,-0x4(%rbp)
  mov    -0x4(%rbp),%eax
  mov    $0x100,%esi
  mov    %eax,%edi
  call   <saturated_add16@plt>
  mov    %eax,-0x4(%rbp)
  sarl   $0x9,-0x4(%rbp)
  cmpl   $0x7,-0x4(%rbp)
  jg     L123
  mov    -0x4(%rbp),%eax
  mov    $0xfffffff8,%edx
  cmp    %edx,%eax
  cmovl  %edx,%eax
  lea    0x8(%rax),%edx
  jmp    L159
L123:
  mov    $0xf,%edx
L159:
  mov    -0x18(%rbp),%rax
  mov    %edx,(%rax)
  addq   $0x4,-0x18(%rbp)
  mov    -0x18(%rbp),%rax
  mov    (%rax),%eax
  mov    %eax,%esi
  mov    $0x3c00,%edi
  call   <saturated_mul16@plt>
  mov    %eax,-0x4(%rbp)
  mov    -0x4(%rbp),%eax
  mov    $0xfffff900,%esi
  mov    %eax,%edi
  call   <saturated_add16@plt>
  mov    %eax,-0x4(%rbp)
  mov    -0x4(%rbp),%eax
  mov    $0x100,%esi
  mov    %eax,%edi
  call   <saturated_add16@plt>
  mov    %eax,-0x4(%rbp)
  sarl   $0x9,-0x4(%rbp)
  cmpl   $0x7,-0x4(%rbp)
  jg     L24
  mov    -0x4(%rbp),%eax
  mov    $0xfffffff8,%edx
  cmp    %edx,%eax
  cmovl  %edx,%eax
  lea    0x8(%rax),%edx
  jmp    L130
L24:
  mov    $0xf,%edx
L130:
  mov    -0x18(%rbp),%rax
  mov    %edx,(%rax)
  addq   $0x4,-0x18(%rbp)
  mov    -0x18(%rbp),%rax
  mov    (%rax),%eax
  mov    %eax,%esi
  mov    $0x2156,%edi
  call   <saturated_mul16@plt>
  mov    %eax,-0x4(%rbp)
  mov    -0x4(%rbp),%eax
  mov    $0xfffffeab,%esi
  mov    %eax,%edi
  call   <saturated_add16@plt>
  mov    %eax,-0x4(%rbp)
  mov    -0x4(%rbp),%eax
  mov    $0x100,%esi
  mov    %eax,%edi
  call   <saturated_add16@plt>
  mov    %eax,-0x4(%rbp)
  sarl   $0x9,-0x4(%rbp)
  cmpl   $0x3,-0x4(%rbp)
  jg     L115
  mov    -0x4(%rbp),%eax
  mov    $0xfffffffc,%edx
  cmp    %edx,%eax
  cmovl  %edx,%eax
  lea    0x4(%rax),%edx
  jmp    L26
L115:
  mov    $0x7,%edx
L26:
  mov    -0x18(%rbp),%rax
  mov    %edx,(%rax)
  addq   $0x4,-0x18(%rbp)
  mov    -0x18(%rbp),%rax
  mov    (%rax),%eax
  mov    %eax,%esi
  mov    $0x234c,%edi
  call   <saturated_mul16@plt>
  mov    %eax,-0x4(%rbp)
  mov    -0x4(%rbp),%eax
  mov    $0xfffffb88,%esi
  mov    %eax,%edi
  call   <saturated_add16@plt>
  mov    %eax,-0x4(%rbp)
  mov    -0x4(%rbp),%eax
  mov    $0x100,%esi
  mov    %eax,%edi
  call   <saturated_add16@plt>
  mov    %eax,-0x4(%rbp)
  sarl   $0x9,-0x4(%rbp)
  cmpl   $0x3,-0x4(%rbp)
  jg     L85
  mov    -0x4(%rbp),%eax
  mov    $0xfffffffc,%edx
  cmp    %edx,%eax
  cmovl  %edx,%eax
  lea    0x4(%rax),%edx
  jmp    L10
L85:
  mov    $0x7,%edx
L10:
  mov    -0x18(%rbp),%rax
  mov    %edx,(%rax)
  addq   $0x4,-0x18(%rbp)
  nop
  leave
  ret
```

assistant: ```c
void quantization_and_coding(int16_t LAR[8]) {
  int16_t temp;
  temp = saturated_mul16(20480, *LAR);
  temp = saturated_add16(temp, 0);
  temp = saturated_add16(temp, 256);
  temp >>= 9;
  *LAR = (int16_t)((temp > 31) ? 31 - -32 : ((temp < -32) ? 0 : temp - -32));
  LAR++;
  ;
  temp = saturated_mul16(20480, *LAR);
  temp = saturated_add16(temp, 0);
  temp = saturated_add16(temp, 256);
  temp >>= 9;
  *LAR = (int16_t)((temp > 31) ? 31 - -32 : ((temp < -32) ? 0 : temp - -32));
  LAR++;
  ;
  temp = saturated_mul16(20480, *LAR);
  temp = saturated_add16(temp, 2048);
  temp = saturated_add16(temp, 256);
  temp >>= 9;
  *LAR = (int16_t)((temp > 15) ? 15 - -16 : ((temp < -16) ? 0 : temp - -16));
  LAR++;
  ;
  temp = saturated_mul16(20480, *LAR);
  temp = saturated_add16(temp, -2560);
  temp = saturated_add16(temp, 256);
  temp >>= 9;
  *LAR = (int16_t)((temp > 15) ? 15 - -16 : ((temp < -16) ? 0 : temp - -16));
  LAR++;
  ;
  temp = saturated_mul16(13964, *LAR);
  temp = saturated_add16(temp, 94);
  temp = saturated_add16(temp, 256);
  temp >>= 9;
  *LAR = (int16_t)((temp > 7) ? 7 - -8 : ((temp < -8) ? 0 : temp - -8));
  LAR++;
  ;
  temp = saturated_mul16(15360, *LAR);
  temp = saturated_add16(temp, -1792);
  temp = saturated_add16(temp, 256);
  temp >>= 9;
  *LAR = (int16_t)((temp > 7) ? 7 - -8 : ((temp < -8) ? 0 : temp - -8));
  LAR++;
  ;
  temp = saturated_mul16(8534, *LAR);
  temp = saturated_add16(temp, -341);
  temp = saturated_add16(temp, 256);
  temp >>= 9;
  *LAR = (int16_t)((temp > 3) ? 3 - -4 : ((temp < -4) ? 0 : temp - -4));
  LAR++;
  ;
  temp = saturated_mul16(9036, *LAR);
  temp = saturated_add16(temp, -1144);
  temp = saturated_add16(temp, 256);
  temp >>= 9;
  *LAR = (int16_t)((temp > 3) ? 3 - -4 : ((temp < -4) ? 0 : temp - -4));
  LAR++;
  ;
}
```