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     L59
  mov    -0x4(%rbp),%eax
  mov    $0xffffffe0,%edx
  cmp    %edx,%eax
  cmovl  %edx,%eax
  lea    0x20(%rax),%edx
  jmp    L38
L59:
  mov    $0x3f,%edx
L38:
  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     L114
  mov    -0x4(%rbp),%eax
  mov    $0xffffffe0,%edx
  cmp    %edx,%eax
  cmovl  %edx,%eax
  lea    0x20(%rax),%edx
  jmp    L5
L114:
  mov    $0x3f,%edx
L5:
  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     L42
  mov    -0x4(%rbp),%eax
  mov    $0xfffffff0,%edx
  cmp    %edx,%eax
  cmovl  %edx,%eax
  lea    0x10(%rax),%edx
  jmp    L142
L42:
  mov    $0x1f,%edx
L142:
  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     L2
  mov    -0x4(%rbp),%eax
  mov    $0xfffffff0,%edx
  cmp    %edx,%eax
  cmovl  %edx,%eax
  lea    0x10(%rax),%edx
  jmp    L112
L2:
  mov    $0x1f,%edx
L112:
  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     L19
  mov    -0x4(%rbp),%eax
  mov    $0xfffffff8,%edx
  cmp    %edx,%eax
  cmovl  %edx,%eax
  lea    0x8(%rax),%edx
  jmp    L92
L19:
  mov    $0xf,%edx
L92:
  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     L46
  mov    -0x4(%rbp),%eax
  mov    $0xfffffff8,%edx
  cmp    %edx,%eax
  cmovl  %edx,%eax
  lea    0x8(%rax),%edx
  jmp    L83
L46:
  mov    $0xf,%edx
L83:
  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     L64
  mov    -0x4(%rbp),%eax
  mov    $0xfffffffc,%edx
  cmp    %edx,%eax
  cmovl  %edx,%eax
  lea    0x4(%rax),%edx
  jmp    L136
L64:
  mov    $0x7,%edx
L136:
  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     L131
  mov    -0x4(%rbp),%eax
  mov    $0xfffffffc,%edx
  cmp    %edx,%eax
  cmovl  %edx,%eax
  lea    0x4(%rax),%edx
  jmp    L14
L131:
  mov    $0x7,%edx
L14:
  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++;
  ;
}
```