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

```asm
<garble>:
  endbr64
  mov    %rdi,%r9
  lea    0xff(%rdi),%r8
  push   %rbx
  movslq %edx,%r11
  mov    %esi,%r10d
  mov    %ecx,%ebx
  lea    0x7f(%rdi),%rdi
  mov    %r8,%rax
  mov    %r9,%rdx
  nopl   0x0(%rax)
L129:
  movzbl (%rdx),%ecx
  movzbl (%rax),%esi
  sub    $0x1,%rax
  add    $0x1,%rdx
  mov    %sil,-0x1(%rdx)
  mov    %cl,0x1(%rax)
  cmp    %rdi,%rax
  jne    L129
  test   %r11d,%r11d
  js     L101
  movslq %r10d,%rcx
  lea    0x2(%rcx),%rax
  neg    %rax
  cmp    $0xe,%rax
  jbe    L31
  cmp    $0x6,%r11d
  jbe    L31
  lea    0x1(%r11),%esi
  cmp    $0xe,%r11d
  jbe    L125
  mov    %esi,%edx
  lea    0x1(%r9,%rcx,1),%rdi
  xor    %eax,%eax
  shr    $0x4,%edx
  shl    $0x4,%rdx
  nopw   0x0(%rax,%rax,1)
L85:
  movdqu (%rdi,%rax,1),%xmm0
  movdqu (%r9,%rax,1),%xmm2
  pxor   %xmm2,%xmm0
  movups %xmm0,(%r9,%rax,1)
  add    $0x10,%rax
  cmp    %rax,%rdx
  jne    L85
  mov    %esi,%eax
  and    $0xfffffff0,%eax
  add    %eax,%r10d
  lea    -0x1(%rax),%edx
  cmp    %eax,%esi
  je     L101
  mov    %r11d,%edi
  sub    %eax,%edi
  lea    0x1(%rdi),%esi
  cmp    $0x6,%edi
  jbe    L149
L105:
  lea    (%r9,%rax,1),%rdi
  add    %r9,%rcx
  movq   0x1(%rax,%rcx,1),%xmm0
  movq   (%rdi),%xmm1
  mov    %esi,%eax
  and    $0xfffffff8,%eax
  pxor   %xmm1,%xmm0
  add    %eax,%r10d
  add    %eax,%edx
  movq   %xmm0,(%rdi)
  cmp    %eax,%esi
  je     L101
L149:
  lea    0x1(%rdx),%ecx
  lea    0x1(%r10),%eax
  movslq %ecx,%rsi
  cltq
  movzbl (%r9,%rax,1),%eax
  xor    %al,(%r9,%rsi,1)
  cmp    %r11d,%ecx
  jge    L101
  lea    0x2(%rdx),%ecx
  lea    0x2(%r10),%eax
  movslq %ecx,%rsi
  cltq
  movzbl (%r9,%rax,1),%eax
  xor    %al,(%r9,%rsi,1)
  cmp    %r11d,%ecx
  jge    L101
  lea    0x3(%rdx),%ecx
  lea    0x3(%r10),%eax
  movslq %ecx,%rsi
  cltq
  movzbl (%r9,%rax,1),%eax
  xor    %al,(%r9,%rsi,1)
  cmp    %ecx,%r11d
  jle    L101
  lea    0x4(%rdx),%ecx
  lea    0x4(%r10),%eax
  movslq %ecx,%rsi
  cltq
  movzbl (%r9,%rax,1),%eax
  xor    %al,(%r9,%rsi,1)
  cmp    %ecx,%r11d
  jle    L101
  lea    0x5(%rdx),%ecx
  lea    0x5(%r10),%eax
  movslq %ecx,%rsi
  cltq
  movzbl (%r9,%rax,1),%eax
  xor    %al,(%r9,%rsi,1)
  cmp    %ecx,%r11d
  jle    L101
  lea    0x6(%rdx),%ecx
  lea    0x6(%r10),%eax
  movslq %ecx,%rsi
  cltq
  movzbl (%r9,%rax,1),%eax
  xor    %al,(%r9,%rsi,1)
  cmp    %ecx,%r11d
  jle    L101
  lea    0x7(%rdx),%eax
  lea    0x7(%r10),%edx
  cltq
  movslq %edx,%rdx
  movzbl (%r9,%rdx,1),%edx
  xor    %dl,(%r9,%rax,1)
L101:
  cmp    $0xfe,%ebx
  jg     L61
  movslq %ebx,%rdx
  mov    $0xfe,%eax
  add    %r9,%rdx
  sub    %ebx,%eax
  add    $0xfe,%r9
  sub    %rax,%r9
  nopl   0x0(%rax)
L58:
  movzbl (%rdx),%eax
  xor    %al,(%r8)
  sub    $0x1,%r8
  cmp    %r9,%r8
  jne    L58
L61:
  pop    %rbx
  ret
L31:
  lea    0x1(%r9,%r11,1),%rsi
  mov    %r9,%rax
  nopl   0x0(%rax)
L106:
  movzbl 0x1(%rax,%rcx,1),%edx
  xor    %dl,(%rax)
  add    $0x1,%rax
  cmp    %rsi,%rax
  jne    L106
  jmp    L101
L125:
  xor    %eax,%eax
  mov    $0xffffffff,%edx
  jmp    L105
```

assistant: ```c
void garble(unsigned char *block, int i1, int j1, int i2) {
  unsigned char d;
  int i, j;
  for (i = 0; i < 128; i++) {
    d = block[i];
    block[i] = block[255 - i];
    block[255 - i] = d;
  }
  i = i1;
  j = -1;
  while (j < j1)
    block[++j] ^= block[++i];
  i = i2;
  j = 0x100;
  while (j > i2 + 1)
    block[--j] ^= block[i];
}
```