user: What would the C source look like for the assembly code provided here:

```asm
<ICCITTQuantize>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    %rdi,-0x18(%rbp)
  mov    %esi,-0x1c(%rbp)
  mov    %edx,-0x20(%rbp)
  mov    -0x1c(%rbp),%eax
  and    $0x1,%eax
  test   %eax,%eax
  je     L176
  mov    -0x18(%rbp),%rax
  mov    (%rax),%eax
  test   %eax,%eax
  jle    L142
  mov    -0x18(%rbp),%rax
  mov    (%rax),%eax
  add    %eax,%eax
  add    $0x1,%eax
  imul   -0x1c(%rbp),%eax
  mov    %eax,%edx
  mov    -0x18(%rbp),%rax
  mov    %edx,(%rax)
  jmp    L193
L142:
  mov    -0x18(%rbp),%rax
  mov    (%rax),%eax
  test   %eax,%eax
  jns    L193
  mov    -0x18(%rbp),%rax
  mov    (%rax),%eax
  add    %eax,%eax
  sub    $0x1,%eax
  imul   -0x1c(%rbp),%eax
  mov    %eax,%edx
  mov    -0x18(%rbp),%rax
  mov    %edx,(%rax)
  jmp    L193
L176:
  mov    -0x18(%rbp),%rax
  mov    (%rax),%eax
  test   %eax,%eax
  jle    L116
  mov    -0x18(%rbp),%rax
  mov    (%rax),%eax
  add    %eax,%eax
  add    $0x1,%eax
  imul   -0x1c(%rbp),%eax
  lea    -0x1(%rax),%edx
  mov    -0x18(%rbp),%rax
  mov    %edx,(%rax)
  jmp    L193
L116:
  mov    -0x18(%rbp),%rax
  mov    (%rax),%eax
  test   %eax,%eax
  jns    L193
  mov    -0x18(%rbp),%rax
  mov    (%rax),%eax
  add    %eax,%eax
  sub    $0x1,%eax
  imul   -0x1c(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    -0x18(%rbp),%rax
  mov    %edx,(%rax)
L193:
  mov    -0x20(%rbp),%eax
  and    $0x1,%eax
  test   %eax,%eax
  je     L99
  mov    -0x18(%rbp),%rax
  add    $0x4,%rax
  mov    %rax,-0x8(%rbp)
  jmp    L118
L91:
  mov    -0x8(%rbp),%rax
  mov    (%rax),%eax
  test   %eax,%eax
  jle    L22
  mov    -0x8(%rbp),%rax
  mov    (%rax),%eax
  add    %eax,%eax
  add    $0x1,%eax
  imul   -0x20(%rbp),%eax
  mov    %eax,%edx
  mov    -0x8(%rbp),%rax
  mov    %edx,(%rax)
  jmp    L148
L22:
  mov    -0x8(%rbp),%rax
  mov    (%rax),%eax
  test   %eax,%eax
  jns    L148
  mov    -0x8(%rbp),%rax
  mov    (%rax),%eax
  add    %eax,%eax
  sub    $0x1,%eax
  imul   -0x20(%rbp),%eax
  mov    %eax,%edx
  mov    -0x8(%rbp),%rax
  mov    %edx,(%rax)
L148:
  addq   $0x4,-0x8(%rbp)
L118:
  mov    -0x18(%rbp),%rax
  add    $0x100,%rax
  cmp    %rax,-0x8(%rbp)
  jb     L91
  jmp    L105
L99:
  mov    -0x18(%rbp),%rax
  add    $0x4,%rax
  mov    %rax,-0x8(%rbp)
  jmp    L129
L158:
  mov    -0x8(%rbp),%rax
  mov    (%rax),%eax
  test   %eax,%eax
  jle    L130
  mov    -0x8(%rbp),%rax
  mov    (%rax),%eax
  add    %eax,%eax
  add    $0x1,%eax
  imul   -0x20(%rbp),%eax
  lea    -0x1(%rax),%edx
  mov    -0x8(%rbp),%rax
  mov    %edx,(%rax)
  jmp    L170
L130:
  mov    -0x8(%rbp),%rax
  mov    (%rax),%eax
  test   %eax,%eax
  jns    L170
  mov    -0x8(%rbp),%rax
  mov    (%rax),%eax
  add    %eax,%eax
  sub    $0x1,%eax
  imul   -0x20(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    -0x8(%rbp),%rax
  mov    %edx,(%rax)
L170:
  addq   $0x4,-0x8(%rbp)
L129:
  mov    -0x18(%rbp),%rax
  add    $0x100,%rax
  cmp    %rax,-0x8(%rbp)
  jb     L158
L105:
  nop
  pop    %rbp
  ret
```

assistant: ```c
void ICCITTQuantize(int *matrix, int dcqfact, int acqfact) {
  static char RoutineName[] = "ICCITTQuantize";
  int *mptr;
  if (dcqfact & 1) {
    if (*matrix > 0) {
      *matrix = ((*matrix << 1) + 1) * dcqfact;
    } else if (*matrix < 0) {
      *matrix = ((*matrix << 1) - 1) * dcqfact;
    }
  } else {
    if (*matrix > 0) {
      *matrix = (((*matrix << 1) + 1) * dcqfact) - 1;
    } else if (*matrix < 0) {
      *matrix = (((*matrix << 1) - 1) * dcqfact) + 1;
    }
  }
  if (acqfact & 1) {
    for (mptr = matrix + 1; mptr < matrix + 64; mptr++) {
      if (*mptr > 0) {
        *mptr = ((*mptr << 1) + 1) * acqfact;
      } else if (*mptr < 0) {
        *mptr = ((*mptr << 1) - 1) * acqfact;
      }
    }
  } else {
    for (mptr = matrix + 1; mptr < matrix + 64; mptr++) {
      if (*mptr > 0) {
        *mptr = (((*mptr << 1) + 1) * acqfact) - 1;
      } else if (*mptr < 0) {
        *mptr = (((*mptr << 1) - 1) * acqfact) + 1;
      }
    }
  }
}
```