user: 下面的汇编指令对应的C源代码是什么:

```asm
<GetModulationValue>:
  endbr64
  mov    %esi,%eax
  not    %esi
  mov    %edx,%r11d
  mov    0x8(%rsp),%r10
  add    %esi,%esi
  and    $0x3,%eax
  and    $0x4,%esi
  or     %eax,%esi
  mov    %edi,%eax
  movslq %esi,%rdx
  not    %eax
  shl    $0x6,%rdx
  add    %eax,%eax
  add    %rdx,%r8
  test   %r11d,%r11d
  je     L42
  and    $0x7,%edi
  and    $0x8,%eax
  movl   $0x0,(%r10)
  or     %edi,%eax
  movslq %eax,%rdi
  mov    (%r8,%rdi,4),%r8d
  test   %r8d,%r8d
  jne    L2
L85:
  lea    (%rcx,%rdi,4),%rax
  movslq (%rax,%rdx,1),%rdx
  lea    D2(%rip),%rax
  mov    (%rax,%rdx,4),%eax
L59:
  mov    %eax,(%r9)
  ret
L42:
  and    $0x3,%edi
  and    $0x4,%eax
  movl   $0x0,(%r10)
  or     %edi,%eax
  movslq %eax,%rdi
  mov    (%r8,%rdi,4),%eax
  test   %eax,%eax
  je     L85
  lea    (%rcx,%rdi,4),%rax
  movslq (%rax,%rdx,1),%rcx
  lea    D17(%rip),%rax
  cmp    $0x2,%ecx
  mov    (%rax,%rcx,4),%eax
  sete   %dl
  movzbl %dl,%edx
  mov    %edx,(%r10)
  mov    %eax,(%r9)
  ret
  nopl   0x0(%rax)
L2:
  xor    %eax,%esi
  and    $0x1,%esi
  je     L85
  cmp    $0x1,%r8d
  je     L74
  cmp    $0x2,%r8d
  je     L50
  lea    (%rcx,%rdi,4),%rax
  lea    D2(%rip),%rsi
  add    %rdx,%rax
  movslq -0x40(%rax),%rcx
  movslq 0x40(%rax),%rax
L10:
  mov    (%rsi,%rax,4),%edx
  add    (%rsi,%rcx,4),%edx
  add    $0x1,%edx
  mov    %edx,%eax
  shr    $0x1f,%eax
  add    %edx,%eax
  sar    %eax
  jmp    L59
L74:
  shl    $0x2,%rdi
  lea    D2(%rip),%rsi
  lea    (%rdi,%rdx,1),%r8
  add    %rcx,%rdi
  lea    (%rdi,%rdx,1),%rax
  add    %rcx,%r8
  movslq -0x40(%rax),%rcx
  movslq 0x40(%rax),%rax
  mov    (%rsi,%rax,4),%edx
  movslq -0x4(%r8),%rax
  add    (%rsi,%rcx,4),%edx
  add    (%rsi,%rax,4),%edx
  movslq 0x4(%r8),%rax
  add    (%rsi,%rax,4),%edx
  lea    0x5(%rdx),%eax
  add    $0x2,%edx
  cmovns %edx,%eax
  sar    $0x2,%eax
  jmp    L59
  cs nopw 0x0(%rax,%rax,1)
L50:
  add    %rcx,%rdx
  lea    -0x1(%rax),%ecx
  lea    D2(%rip),%rsi
  add    $0x1,%eax
  movslq %ecx,%rcx
  cltq
  movslq (%rdx,%rcx,4),%rcx
  movslq (%rdx,%rax,4),%rax
  jmp    L10
```

tool_calls: name: parse_data
arguments: tag: D2
datatype: string
name: parse_data
arguments: tag: D17
datatype: string

tool: 

tool: 

assistant: ```c
void GetModulationValue(int x, int y, const int Do2bitMode, const int ModulationVals[8][16], const int ModulationModes[8][16], int *Mod, int *DoPT) {
  static const int RepVals0[4] = {0, 3, 5, 8};
  static const int RepVals1[4] = {0, 4, 4, 8};
  int ModVal;
  y = (y & 0x3) | ((~y & 0x2) << 1);
  if (Do2bitMode)
    x = (x & 0x7) | ((~x & 0x4) << 1);
  else
    x = (x & 0x3) | ((~x & 0x2) << 1);
  *DoPT = 0;
  if (ModulationModes[y][x] == 0) {
    ModVal = RepVals0[ModulationVals[y][x]];
  } else if (Do2bitMode) {
    if (((x ^ y) & 1) == 0)
      ModVal = RepVals0[ModulationVals[y][x]];
    else if (ModulationModes[y][x] == 1) {
      ModVal = (RepVals0[ModulationVals[y - 1][x]] + RepVals0[ModulationVals[y + 1][x]] + RepVals0[ModulationVals[y][x - 1]] + RepVals0[ModulationVals[y][x + 1]] + 2) / 4;
    } else if (ModulationModes[y][x] == 2) {
      ModVal = (RepVals0[ModulationVals[y][x - 1]] + RepVals0[ModulationVals[y][x + 1]] + 1) / 2;
    } else {
      ModVal = (RepVals0[ModulationVals[y - 1][x]] + RepVals0[ModulationVals[y + 1][x]] + 1) / 2;
    }
  } else {
    ModVal = RepVals1[ModulationVals[y][x]];
    *DoPT = ModulationVals[y][x] == (2);
  }
  *Mod = ModVal;
}
```