user: What is the c source code of the assembly code below?

```asm
<test_fetch_and_op>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x70,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  mov    $0xfffffff5,%eax
  lock xadd %al,-0xb(%rbp)
  mov    %al,-0xb(%rbp)
  mov    $0xfffffff5,%eax
  lock xadd %al,-0x9(%rbp)
  mov    %al,-0x9(%rbp)
  mov    $0xfffffff5,%eax
  lock xadd %ax,-0x66(%rbp)
  mov    %ax,-0x66(%rbp)
  mov    $0xfffffff5,%eax
  lock xadd %ax,-0x62(%rbp)
  mov    %ax,-0x62(%rbp)
  mov    $0xfffffff5,%eax
  lock xadd %eax,-0x5c(%rbp)
  mov    %eax,-0x5c(%rbp)
  mov    $0xfffffff5,%eax
  lock xadd %eax,-0x54(%rbp)
  mov    %eax,-0x54(%rbp)
  mov    $0xfffffffffffffff5,%rax
  lock xadd %rax,-0x48(%rbp)
  mov    %rax,-0x48(%rbp)
  mov    $0xfffffffffffffff5,%rax
  lock xadd %rax,-0x38(%rbp)
  mov    %rax,-0x38(%rbp)
  mov    $0xfffffffffffffff5,%rax
  lock xadd %rax,-0x28(%rbp)
  mov    %rax,-0x28(%rbp)
  mov    $0xfffffffffffffff5,%rax
  lock xadd %rax,-0x18(%rbp)
  mov    %rax,-0x18(%rbp)
  mov    $0xfffffff5,%eax
  neg    %eax
  lock xadd %al,-0xb(%rbp)
  mov    %al,-0xb(%rbp)
  mov    $0xfffffff5,%eax
  neg    %eax
  lock xadd %al,-0x9(%rbp)
  mov    %al,-0x9(%rbp)
  mov    $0xfffffff5,%eax
  neg    %eax
  lock xadd %ax,-0x66(%rbp)
  mov    %ax,-0x66(%rbp)
  mov    $0xfffffff5,%eax
  neg    %eax
  lock xadd %ax,-0x62(%rbp)
  mov    %ax,-0x62(%rbp)
  mov    $0xfffffff5,%eax
  neg    %eax
  lock xadd %eax,-0x5c(%rbp)
  mov    %eax,-0x5c(%rbp)
  mov    $0xfffffff5,%eax
  neg    %eax
  lock xadd %eax,-0x54(%rbp)
  mov    %eax,-0x54(%rbp)
  mov    $0xfffffffffffffff5,%rax
  neg    %rax
  lock xadd %rax,-0x48(%rbp)
  mov    %rax,-0x48(%rbp)
  mov    $0xfffffffffffffff5,%rax
  neg    %rax
  lock xadd %rax,-0x38(%rbp)
  mov    %rax,-0x38(%rbp)
  mov    $0xfffffffffffffff5,%rax
  neg    %rax
  lock xadd %rax,-0x28(%rbp)
  mov    %rax,-0x28(%rbp)
  mov    $0xfffffffffffffff5,%rax
  neg    %rax
  lock xadd %rax,-0x18(%rbp)
  mov    %rax,-0x18(%rbp)
  movzbl -0xb(%rbp),%eax
L319:
  mov    %eax,%ecx
  mov    %eax,%edx
  or     $0xfffffff5,%edx
  lock cmpxchg %dl,-0xb(%rbp)
  sete   %dl
  test   %dl,%dl
  je     L319
  mov    %ecx,%eax
  mov    %al,-0xb(%rbp)
  movzbl -0x9(%rbp),%eax
L231:
  mov    %eax,%ecx
  mov    %eax,%edx
  or     $0xfffffff5,%edx
  lock cmpxchg %dl,-0x9(%rbp)
  sete   %dl
  test   %dl,%dl
  je     L231
  mov    %cl,-0x9(%rbp)
  movzwl -0x66(%rbp),%eax
L244:
  mov    %eax,%ecx
  mov    %eax,%edx
  or     $0xfffffff5,%edx
  lock cmpxchg %dx,-0x66(%rbp)
  sete   %dl
  test   %dl,%dl
  je     L244
  mov    %ecx,%eax
  mov    %ax,-0x66(%rbp)
  movzwl -0x62(%rbp),%eax
L337:
  mov    %eax,%ecx
  mov    %eax,%edx
  or     $0xfffffff5,%edx
  lock cmpxchg %dx,-0x62(%rbp)
  sete   %dl
  test   %dl,%dl
  je     L337
  mov    %cx,-0x62(%rbp)
  mov    -0x5c(%rbp),%eax
L236:
  mov    %eax,%ecx
  mov    %eax,%edx
  or     $0xfffffff5,%edx
  lock cmpxchg %edx,-0x5c(%rbp)
  sete   %dl
  test   %dl,%dl
  je     L236
  mov    %ecx,%eax
  mov    %eax,-0x5c(%rbp)
  mov    -0x54(%rbp),%eax
L208:
  mov    %eax,%ecx
  mov    %eax,%edx
  or     $0xfffffff5,%edx
  lock cmpxchg %edx,-0x54(%rbp)
  sete   %dl
  test   %dl,%dl
  je     L208
  mov    %ecx,-0x54(%rbp)
  mov    -0x48(%rbp),%rax
L323:
  mov    %rax,%rcx
  mov    %rax,%rdx
  or     $0xfffffffffffffff5,%rdx
  lock cmpxchg %rdx,-0x48(%rbp)
  sete   %dl
  test   %dl,%dl
  je     L323
  mov    %rcx,%rax
  mov    %rax,-0x48(%rbp)
  mov    -0x38(%rbp),%rax
L147:
  mov    %rax,%rcx
  mov    %rax,%rdx
  or     $0xfffffffffffffff5,%rdx
  lock cmpxchg %rdx,-0x38(%rbp)
  sete   %dl
  test   %dl,%dl
  je     L147
  mov    %rcx,-0x38(%rbp)
  mov    -0x28(%rbp),%rax
L199:
  mov    %rax,%rcx
  mov    %rax,%rdx
  or     $0xfffffffffffffff5,%rdx
  lock cmpxchg %rdx,-0x28(%rbp)
  sete   %dl
  test   %dl,%dl
  je     L199
  mov    %rcx,%rax
  mov    %rax,-0x28(%rbp)
  mov    -0x18(%rbp),%rax
L242:
  mov    %rax,%rcx
  mov    %rax,%rdx
  or     $0xfffffffffffffff5,%rdx
  lock cmpxchg %rdx,-0x18(%rbp)
  sete   %dl
  test   %dl,%dl
  je     L242
  mov    %rcx,-0x18(%rbp)
  movzbl -0xb(%rbp),%eax
L277:
  mov    %eax,%ecx
  mov    %eax,%edx
  xor    $0xfffffff5,%edx
  lock cmpxchg %dl,-0xb(%rbp)
  sete   %dl
  test   %dl,%dl
  je     L277
  mov    %ecx,%eax
  mov    %al,-0xb(%rbp)
  movzbl -0x9(%rbp),%eax
L278:
  mov    %eax,%ecx
  mov    %eax,%edx
  xor    $0xfffffff5,%edx
  lock cmpxchg %dl,-0x9(%rbp)
  sete   %dl
  test   %dl,%dl
  je     L278
  mov    %cl,-0x9(%rbp)
  movzwl -0x66(%rbp),%eax
L354:
  mov    %eax,%ecx
  mov    %eax,%edx
  xor    $0xfffffff5,%edx
  lock cmpxchg %dx,-0x66(%rbp)
  sete   %dl
  test   %dl,%dl
  je     L354
  mov    %ecx,%eax
  mov    %ax,-0x66(%rbp)
  movzwl -0x62(%rbp),%eax
L234:
  mov    %eax,%ecx
  mov    %eax,%edx
  xor    $0xfffffff5,%edx
  lock cmpxchg %dx,-0x62(%rbp)
  sete   %dl
  test   %dl,%dl
  je     L234
  mov    %cx,-0x62(%rbp)
  mov    -0x5c(%rbp),%eax
L129:
  mov    %eax,%ecx
  mov    %eax,%edx
  xor    $0xfffffff5,%edx
  lock cmpxchg %edx,-0x5c(%rbp)
  sete   %dl
  test   %dl,%dl
  je     L129
  mov    %ecx,%eax
  mov    %eax,-0x5c(%rbp)
  mov    -0x54(%rbp),%eax
L362:
  mov    %eax,%ecx
  mov    %eax,%edx
  xor    $0xfffffff5,%edx
  lock cmpxchg %edx,-0x54(%rbp)
  sete   %dl
  test   %dl,%dl
  je     L362
  mov    %ecx,-0x54(%rbp)
  mov    -0x48(%rbp),%rax
L186:
  mov    %rax,%rcx
  mov    %rax,%rdx
  xor    $0xfffffffffffffff5,%rdx
  lock cmpxchg %rdx,-0x48(%rbp)
  sete   %dl
  test   %dl,%dl
  je     L186
  mov    %rcx,%rax
  mov    %rax,-0x48(%rbp)
  mov    -0x38(%rbp),%rax
L225:
  mov    %rax,%rcx
  mov    %rax,%rdx
  xor    $0xfffffffffffffff5,%rdx
  lock cmpxchg %rdx,-0x38(%rbp)
  sete   %dl
  test   %dl,%dl
  je     L225
  mov    %rcx,-0x38(%rbp)
  mov    -0x28(%rbp),%rax
L295:
  mov    %rax,%rcx
  mov    %rax,%rdx
  xor    $0xfffffffffffffff5,%rdx
  lock cmpxchg %rdx,-0x28(%rbp)
  sete   %dl
  test   %dl,%dl
  je     L295
  mov    %rcx,%rax
  mov    %rax,-0x28(%rbp)
  mov    -0x18(%rbp),%rax
L297:
  mov    %rax,%rcx
  mov    %rax,%rdx
  xor    $0xfffffffffffffff5,%rdx
  lock cmpxchg %rdx,-0x18(%rbp)
  sete   %dl
  test   %dl,%dl
  je     L297
  mov    %rcx,-0x18(%rbp)
  movzbl -0xb(%rbp),%eax
L71:
  mov    %eax,%ecx
  mov    %eax,%edx
  and    $0xfffffff5,%edx
  lock cmpxchg %dl,-0xb(%rbp)
  sete   %dl
  test   %dl,%dl
  je     L71
  mov    %ecx,%eax
  mov    %al,-0xb(%rbp)
  movzbl -0x9(%rbp),%eax
L365:
  mov    %eax,%ecx
  mov    %eax,%edx
  and    $0xfffffff5,%edx
  lock cmpxchg %dl,-0x9(%rbp)
  sete   %dl
  test   %dl,%dl
  je     L365
  mov    %cl,-0x9(%rbp)
  movzwl -0x66(%rbp),%eax
L56:
  mov    %eax,%ecx
  mov    %eax,%edx
  and    $0xfffffff5,%edx
  lock cmpxchg %dx,-0x66(%rbp)
  sete   %dl
  test   %dl,%dl
  je     L56
  mov    %ecx,%eax
  mov    %ax,-0x66(%rbp)
  movzwl -0x62(%rbp),%eax
L55:
  mov    %eax,%ecx
  mov    %eax,%edx
  and    $0xfffffff5,%edx
  lock cmpxchg %dx,-0x62(%rbp)
  sete   %dl
  test   %dl,%dl
  je     L55
  mov    %cx,-0x62(%rbp)
  mov    -0x5c(%rbp),%eax
L405:
  mov    %eax,%ecx
  mov    %eax,%edx
  and    $0xfffffff5,%edx
  lock cmpxchg %edx,-0x5c(%rbp)
  sete   %dl
  test   %dl,%dl
  je     L405
  mov    %ecx,%eax
  mov    %eax,-0x5c(%rbp)
  mov    -0x54(%rbp),%eax
L379:
  mov    %eax,%ecx
  mov    %eax,%edx
  and    $0xfffffff5,%edx
  lock cmpxchg %edx,-0x54(%rbp)
  sete   %dl
  test   %dl,%dl
  je     L379
  mov    %ecx,-0x54(%rbp)
  mov    -0x48(%rbp),%rax
L60:
  mov    %rax,%rcx
  mov    %rax,%rdx
  and    $0xfffffffffffffff5,%rdx
  lock cmpxchg %rdx,-0x48(%rbp)
  sete   %dl
  test   %dl,%dl
  je     L60
  mov    %rcx,%rax
  mov    %rax,-0x48(%rbp)
  mov    -0x38(%rbp),%rax
L118:
  mov    %rax,%rcx
  mov    %rax,%rdx
  and    $0xfffffffffffffff5,%rdx
  lock cmpxchg %rdx,-0x38(%rbp)
  sete   %dl
  test   %dl,%dl
  je     L118
  mov    %rcx,-0x38(%rbp)
  mov    -0x28(%rbp),%rax
L162:
  mov    %rax,%rcx
  mov    %rax,%rdx
  and    $0xfffffffffffffff5,%rdx
  lock cmpxchg %rdx,-0x28(%rbp)
  sete   %dl
  test   %dl,%dl
  je     L162
  mov    %rcx,%rax
  mov    %rax,-0x28(%rbp)
  mov    -0x18(%rbp),%rax
L98:
  mov    %rax,%rcx
  mov    %rax,%rdx
  and    $0xfffffffffffffff5,%rdx
  lock cmpxchg %rdx,-0x18(%rbp)
  sete   %dl
  test   %dl,%dl
  je     L98
  mov    %rcx,-0x18(%rbp)
  movzbl -0xb(%rbp),%eax
L133:
  mov    %eax,%ecx
  mov    %eax,%edx
  and    $0xfffffff5,%edx
  not    %edx
  lock cmpxchg %dl,-0xb(%rbp)
  sete   %dl
  test   %dl,%dl
  je     L133
  mov    %ecx,%eax
  mov    %al,-0xb(%rbp)
  movzbl -0x9(%rbp),%eax
L212:
  mov    %eax,%ecx
  mov    %eax,%edx
  and    $0xfffffff5,%edx
  not    %edx
  lock cmpxchg %dl,-0x9(%rbp)
  sete   %dl
  test   %dl,%dl
  je     L212
  mov    %cl,-0x9(%rbp)
  movzwl -0x66(%rbp),%eax
L240:
  mov    %eax,%ecx
  mov    %eax,%edx
  and    $0xfffffff5,%edx
  not    %edx
  lock cmpxchg %dx,-0x66(%rbp)
  sete   %dl
  test   %dl,%dl
  je     L240
  mov    %ecx,%eax
  mov    %ax,-0x66(%rbp)
  movzwl -0x62(%rbp),%eax
L341:
  mov    %eax,%ecx
  mov    %eax,%edx
  and    $0xfffffff5,%edx
  not    %edx
  lock cmpxchg %dx,-0x62(%rbp)
  sete   %dl
  test   %dl,%dl
  je     L341
  mov    %cx,-0x62(%rbp)
  mov    -0x5c(%rbp),%eax
L89:
  mov    %eax,%ecx
  mov    %eax,%edx
  and    $0xfffffff5,%edx
  not    %edx
  lock cmpxchg %edx,-0x5c(%rbp)
  sete   %dl
  test   %dl,%dl
  je     L89
  mov    %ecx,%eax
  mov    %eax,-0x5c(%rbp)
  mov    -0x54(%rbp),%eax
L351:
  mov    %eax,%ecx
  mov    %eax,%edx
  and    $0xfffffff5,%edx
  not    %edx
  lock cmpxchg %edx,-0x54(%rbp)
  sete   %dl
  test   %dl,%dl
  je     L351
  mov    %ecx,-0x54(%rbp)
  mov    -0x48(%rbp),%rax
L6:
  mov    %rax,%rcx
  mov    %rax,%rdx
  and    $0xfffffffffffffff5,%rdx
  not    %rdx
  lock cmpxchg %rdx,-0x48(%rbp)
  sete   %dl
  test   %dl,%dl
  je     L6
  mov    %rcx,%rax
  mov    %rax,-0x48(%rbp)
  mov    -0x38(%rbp),%rax
L140:
  mov    %rax,%rcx
  mov    %rax,%rdx
  and    $0xfffffffffffffff5,%rdx
  not    %rdx
  lock cmpxchg %rdx,-0x38(%rbp)
  sete   %dl
  test   %dl,%dl
  je     L140
  mov    %rcx,-0x38(%rbp)
  mov    -0x28(%rbp),%rax
L112:
  mov    %rax,%rcx
  mov    %rax,%rdx
  and    $0xfffffffffffffff5,%rdx
  not    %rdx
  lock cmpxchg %rdx,-0x28(%rbp)
  sete   %dl
  test   %dl,%dl
  je     L112
  mov    %rcx,%rax
  mov    %rax,-0x28(%rbp)
  mov    -0x18(%rbp),%rax
L195:
  mov    %rax,%rcx
  mov    %rax,%rdx
  and    $0xfffffffffffffff5,%rdx
  not    %rdx
  lock cmpxchg %rdx,-0x18(%rbp)
  sete   %dl
  test   %dl,%dl
  je     L195
  mov    %rcx,-0x18(%rbp)
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L268
  call   <__stack_chk_fail@plt>
L268:
  leave
  ret
```

assistant: ```c
void test_fetch_and_op(void) {
  signed char sc[2];
  unsigned char uc[2];
  signed short ss[2];
  unsigned short us[2];
  signed int si[2];
  unsigned int ui[2];
  signed long sl[2];
  unsigned long ul[2];
  signed long long sll[2];
  unsigned long long ull[2];
  sc[1] = __sync_fetch_and_add(&sc[1], -11);
  uc[1] = __sync_fetch_and_add(&uc[1], -11);
  ss[1] = __sync_fetch_and_add(&ss[1], -11);
  us[1] = __sync_fetch_and_add(&us[1], -11);
  si[1] = __sync_fetch_and_add(&si[1], -11);
  ui[1] = __sync_fetch_and_add(&ui[1], -11);
  sl[1] = __sync_fetch_and_add(&sl[1], -11);
  ul[1] = __sync_fetch_and_add(&ul[1], -11);
  sll[1] = __sync_fetch_and_add(&sll[1], -11);
  ull[1] = __sync_fetch_and_add(&ull[1], -11);
  sc[1] = __sync_fetch_and_sub(&sc[1], -11);
  uc[1] = __sync_fetch_and_sub(&uc[1], -11);
  ss[1] = __sync_fetch_and_sub(&ss[1], -11);
  us[1] = __sync_fetch_and_sub(&us[1], -11);
  si[1] = __sync_fetch_and_sub(&si[1], -11);
  ui[1] = __sync_fetch_and_sub(&ui[1], -11);
  sl[1] = __sync_fetch_and_sub(&sl[1], -11);
  ul[1] = __sync_fetch_and_sub(&ul[1], -11);
  sll[1] = __sync_fetch_and_sub(&sll[1], -11);
  ull[1] = __sync_fetch_and_sub(&ull[1], -11);
  sc[1] = __sync_fetch_and_or(&sc[1], -11);
  uc[1] = __sync_fetch_and_or(&uc[1], -11);
  ss[1] = __sync_fetch_and_or(&ss[1], -11);
  us[1] = __sync_fetch_and_or(&us[1], -11);
  si[1] = __sync_fetch_and_or(&si[1], -11);
  ui[1] = __sync_fetch_and_or(&ui[1], -11);
  sl[1] = __sync_fetch_and_or(&sl[1], -11);
  ul[1] = __sync_fetch_and_or(&ul[1], -11);
  sll[1] = __sync_fetch_and_or(&sll[1], -11);
  ull[1] = __sync_fetch_and_or(&ull[1], -11);
  sc[1] = __sync_fetch_and_xor(&sc[1], -11);
  uc[1] = __sync_fetch_and_xor(&uc[1], -11);
  ss[1] = __sync_fetch_and_xor(&ss[1], -11);
  us[1] = __sync_fetch_and_xor(&us[1], -11);
  si[1] = __sync_fetch_and_xor(&si[1], -11);
  ui[1] = __sync_fetch_and_xor(&ui[1], -11);
  sl[1] = __sync_fetch_and_xor(&sl[1], -11);
  ul[1] = __sync_fetch_and_xor(&ul[1], -11);
  sll[1] = __sync_fetch_and_xor(&sll[1], -11);
  ull[1] = __sync_fetch_and_xor(&ull[1], -11);
  sc[1] = __sync_fetch_and_and(&sc[1], -11);
  uc[1] = __sync_fetch_and_and(&uc[1], -11);
  ss[1] = __sync_fetch_and_and(&ss[1], -11);
  us[1] = __sync_fetch_and_and(&us[1], -11);
  si[1] = __sync_fetch_and_and(&si[1], -11);
  ui[1] = __sync_fetch_and_and(&ui[1], -11);
  sl[1] = __sync_fetch_and_and(&sl[1], -11);
  ul[1] = __sync_fetch_and_and(&ul[1], -11);
  sll[1] = __sync_fetch_and_and(&sll[1], -11);
  ull[1] = __sync_fetch_and_and(&ull[1], -11);
  sc[1] = __sync_fetch_and_nand(&sc[1], -11);
  uc[1] = __sync_fetch_and_nand(&uc[1], -11);
  ss[1] = __sync_fetch_and_nand(&ss[1], -11);
  us[1] = __sync_fetch_and_nand(&us[1], -11);
  si[1] = __sync_fetch_and_nand(&si[1], -11);
  ui[1] = __sync_fetch_and_nand(&ui[1], -11);
  sl[1] = __sync_fetch_and_nand(&sl[1], -11);
  ul[1] = __sync_fetch_and_nand(&ul[1], -11);
  sll[1] = __sync_fetch_and_nand(&sll[1], -11);
  ull[1] = __sync_fetch_and_nand(&ull[1], -11);
}
```