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

```asm
<test_lshift>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x190,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0x7,-0x158(%rbp)
  movzbl D150(%rip),%eax
  mov    %al,-0x188(%rbp)
L870:
  movzbl -0x188(%rbp),%eax
  movzbl %al,%edx
  mov    -0x158(%rbp),%eax
  mov    %eax,%ecx
  shl    %cl,%edx
  mov    %edx,%eax
  test   %eax,%eax
  setne  %al
  mov    %al,-0x187(%rbp)
  movzbl -0x187(%rbp),%eax
  movzbl %al,%ecx
  lea    -0x188(%rbp),%rdx
  movzbl (%rdx),%eax
  lock cmpxchg %cl,0x2e85(%rip)        # 4030 <a.23>
  mov    %eax,%ecx
  sete   %al
  test   %al,%al
  jne    L777
  mov    %cl,(%rdx)
L777:
  test   %al,%al
  jne    L687
  jmp    L870
L687:
  movzbl -0x187(%rbp),%eax
  xor    $0x1,%eax
  test   %al,%al
  je     L456
  call   <abort@plt>
L456:
  movzbl D150(%rip),%eax
  mov    %al,-0x186(%rbp)
  movzbl -0x186(%rbp),%eax
  xor    $0x1,%eax
  test   %al,%al
  je     L1029
  call   <abort@plt>
L1029:
  movl   $0x7,-0x154(%rbp)
  movzbl D335(%rip),%eax
  mov    %al,-0x185(%rbp)
L962:
  movzbl -0x185(%rbp),%eax
  movsbl %al,%edx
  mov    -0x154(%rbp),%eax
  mov    %eax,%ecx
  shl    %cl,%edx
  mov    %edx,%eax
  mov    %al,-0x184(%rbp)
  movzbl -0x184(%rbp),%eax
  movzbl %al,%ecx
  lea    -0x185(%rbp),%rdx
  movzbl (%rdx),%eax
  lock cmpxchg %cl,0x2df3(%rip)        # 4031 <a.22>
  mov    %eax,%ecx
  sete   %al
  test   %al,%al
  jne    L435
  mov    %cl,(%rdx)
L435:
  test   %al,%al
  jne    L511
  jmp    L962
L511:
  movzbl -0x184(%rbp),%eax
  cmp    $0x80,%al
  je     L168
  call   <abort@plt>
L168:
  movzbl D335(%rip),%eax
  mov    %al,-0x183(%rbp)
  movzbl -0x183(%rbp),%eax
  cmp    $0x80,%al
  je     L581
  call   <abort@plt>
L581:
  movl   $0x7,-0x150(%rbp)
  movzbl D461(%rip),%eax
  mov    %al,-0x182(%rbp)
L853:
  movzbl -0x182(%rbp),%eax
  movsbl %al,%edx
  mov    -0x150(%rbp),%eax
  mov    %eax,%ecx
  shl    %cl,%edx
  mov    %edx,%eax
  mov    %al,-0x181(%rbp)
  movzbl -0x181(%rbp),%eax
  movzbl %al,%ecx
  lea    -0x182(%rbp),%rdx
  movzbl (%rdx),%eax
  lock cmpxchg %cl,0x2d67(%rip)        # 4032 <a.21>
  mov    %eax,%ecx
  sete   %al
  test   %al,%al
  jne    L590
  mov    %cl,(%rdx)
L590:
  test   %al,%al
  jne    L21
  jmp    L853
L21:
  movzbl -0x181(%rbp),%eax
  cmp    $0x80,%al
  je     L702
  call   <abort@plt>
L702:
  movzbl D461(%rip),%eax
  mov    %al,-0x180(%rbp)
  movzbl -0x180(%rbp),%eax
  cmp    $0x80,%al
  je     L490
  call   <abort@plt>
L490:
  movl   $0x7,-0x14c(%rbp)
  movzbl D313(%rip),%eax
  mov    %al,-0x17f(%rbp)
L76:
  movzbl -0x17f(%rbp),%eax
  movzbl %al,%edx
  mov    -0x14c(%rbp),%eax
  mov    %eax,%ecx
  shl    %cl,%edx
  mov    %edx,%eax
  mov    %al,-0x17e(%rbp)
  movzbl -0x17e(%rbp),%eax
  movzbl %al,%ecx
  lea    -0x17f(%rbp),%rdx
  movzbl (%rdx),%eax
  lock cmpxchg %cl,0x2cdb(%rip)        # 4033 <a.20>
  mov    %eax,%ecx
  sete   %al
  test   %al,%al
  jne    L574
  mov    %cl,(%rdx)
L574:
  test   %al,%al
  jne    L244
  jmp    L76
L244:
  movzbl -0x17e(%rbp),%eax
  cmp    $0x80,%al
  je     L895
  call   <abort@plt>
L895:
  movzbl D313(%rip),%eax
  mov    %al,-0x17d(%rbp)
  movzbl -0x17d(%rbp),%eax
  cmp    $0x80,%al
  je     L429
  call   <abort@plt>
L429:
  movl   $0x7,-0x148(%rbp)
  movzwl D197(%rip),%eax
  mov    %ax,-0x170(%rbp)
L289:
  movzwl -0x170(%rbp),%eax
  movswl %ax,%edx
  mov    -0x148(%rbp),%eax
  mov    %eax,%ecx
  shl    %cl,%edx
  mov    %edx,%eax
  mov    %ax,-0x16e(%rbp)
  movzwl -0x16e(%rbp),%eax
  movzwl %ax,%ecx
  lea    -0x170(%rbp),%rdx
  movzwl (%rdx),%eax
  lock cmpxchg %cx,0x2c4c(%rip)        # 4034 <a.19>
  mov    %eax,%ecx
  sete   %al
  test   %al,%al
  jne    L478
  mov    %cx,(%rdx)
L478:
  test   %al,%al
  jne    L578
  jmp    L289
L578:
  movzwl -0x16e(%rbp),%eax
  cmp    $0x80,%ax
  je     L534
  call   <abort@plt>
L534:
  movzwl D197(%rip),%eax
  mov    %ax,-0x16c(%rbp)
  movzwl -0x16c(%rbp),%eax
  cmp    $0x80,%ax
  je     L66
  call   <abort@plt>
L66:
  movl   $0x7,-0x144(%rbp)
  movzwl D671(%rip),%eax
  mov    %ax,-0x16a(%rbp)
L945:
  movzwl -0x16a(%rbp),%eax
  movzwl %ax,%edx
  mov    -0x144(%rbp),%eax
  mov    %eax,%ecx
  shl    %cl,%edx
  mov    %edx,%eax
  mov    %ax,-0x168(%rbp)
  movzwl -0x168(%rbp),%eax
  movzwl %ax,%ecx
  lea    -0x16a(%rbp),%rdx
  movzwl (%rdx),%eax
  lock cmpxchg %cx,0x2bb8(%rip)        # 4036 <a.18>
  mov    %eax,%ecx
  sete   %al
  test   %al,%al
  jne    L557
  mov    %cx,(%rdx)
L557:
  test   %al,%al
  jne    L371
  jmp    L945
L371:
  movzwl -0x168(%rbp),%eax
  cmp    $0x80,%ax
  je     L1069
  call   <abort@plt>
L1069:
  movzwl D671(%rip),%eax
  mov    %ax,-0x166(%rbp)
  movzwl -0x166(%rbp),%eax
  cmp    $0x80,%ax
  je     L267
  call   <abort@plt>
L267:
  movl   $0x7,-0x140(%rbp)
  mov    D555(%rip),%eax
  mov    %eax,-0x13c(%rbp)
L105:
  mov    -0x13c(%rbp),%edx
  mov    -0x140(%rbp),%eax
  mov    %eax,%ecx
  shl    %cl,%edx
  mov    %edx,%eax
  mov    %eax,-0x138(%rbp)
  mov    -0x138(%rbp),%eax
  mov    %eax,%ecx
  lea    -0x13c(%rbp),%rdx
  mov    (%rdx),%eax
  lock cmpxchg %ecx,0x2b2f(%rip)        # 4038 <a.17>
  mov    %eax,%ecx
  sete   %al
  test   %al,%al
  jne    L910
  mov    %ecx,(%rdx)
L910:
  test   %al,%al
  jne    L325
  jmp    L105
L325:
  mov    -0x138(%rbp),%eax
  cmp    $0x80,%eax
  je     L520
  call   <abort@plt>
L520:
  mov    D555(%rip),%eax
  mov    %eax,-0x134(%rbp)
  mov    -0x134(%rbp),%eax
  cmp    $0x80,%eax
  je     L946
  call   <abort@plt>
L946:
  movl   $0x7,-0x130(%rbp)
  mov    D144(%rip),%eax
  mov    %eax,-0x12c(%rbp)
L253:
  mov    -0x12c(%rbp),%edx
  mov    -0x130(%rbp),%eax
  mov    %eax,%ecx
  shl    %cl,%edx
  mov    %edx,%eax
  mov    %eax,-0x128(%rbp)
  mov    -0x128(%rbp),%ecx
  lea    -0x12c(%rbp),%rdx
  mov    (%rdx),%eax
  lock cmpxchg %ecx,0x2aad(%rip)        # 403c <a.16>
  mov    %eax,%ecx
  sete   %al
  test   %al,%al
  jne    L7
  mov    %ecx,(%rdx)
L7:
  test   %al,%al
  jne    L1028
  jmp    L253
L1028:
  mov    -0x128(%rbp),%eax
  cmp    $0x80,%eax
  je     L769
  call   <abort@plt>
L769:
  mov    D144(%rip),%eax
  mov    %eax,-0x124(%rbp)
  mov    -0x124(%rbp),%eax
  cmp    $0x80,%eax
  je     L324
  call   <abort@plt>
L324:
  movl   $0x7,-0x120(%rbp)
  mov    D572(%rip),%rax
  mov    %rax,-0xc8(%rbp)
L370:
  mov    -0xc8(%rbp),%rdx
  mov    -0x120(%rbp),%eax
  mov    %eax,%ecx
  shl    %cl,%rdx
  mov    %rdx,%rax
  mov    %rax,-0xc0(%rbp)
  mov    -0xc0(%rbp),%rax
  mov    %rax,%rcx
  lea    -0xc8(%rbp),%rdx
  mov    (%rdx),%rax
  lock cmpxchg %rcx,0x2a1f(%rip)        # 4040 <a.15>
  mov    %rax,%rcx
  sete   %al
  test   %al,%al
  jne    L1026
  mov    %rcx,(%rdx)
L1026:
  test   %al,%al
  jne    L970
  jmp    L370
L970:
  mov    -0xc0(%rbp),%rax
  cmp    $0x80,%rax
  je     L229
  call   <abort@plt>
L229:
  mov    D572(%rip),%rax
  mov    %rax,-0xb8(%rbp)
  mov    -0xb8(%rbp),%rax
  cmp    $0x80,%rax
  je     L418
  call   <abort@plt>
L418:
  movl   $0x7,-0x11c(%rbp)
  mov    D707(%rip),%rax
  mov    %rax,-0xb0(%rbp)
L157:
  mov    -0xb0(%rbp),%rdx
  mov    -0x11c(%rbp),%eax
  mov    %eax,%ecx
  shl    %cl,%rdx
  mov    %rdx,%rax
  mov    %rax,-0xa8(%rbp)
  mov    -0xa8(%rbp),%rcx
  lea    -0xb0(%rbp),%rdx
  mov    (%rdx),%rax
  lock cmpxchg %rcx,0x2990(%rip)        # 4048 <a.14>
  mov    %rax,%rcx
  sete   %al
  test   %al,%al
  jne    L1154
  mov    %rcx,(%rdx)
L1154:
  test   %al,%al
  jne    L508
  jmp    L157
L508:
  mov    -0xa8(%rbp),%rax
  cmp    $0x80,%rax
  je     L889
  call   <abort@plt>
L889:
  mov    D707(%rip),%rax
  mov    %rax,-0xa0(%rbp)
  mov    -0xa0(%rbp),%rax
  cmp    $0x80,%rax
  je     L384
  call   <abort@plt>
L384:
  movl   $0x7,-0x118(%rbp)
  mov    D167(%rip),%rax
  mov    %rax,-0x98(%rbp)
L197:
  mov    -0x98(%rbp),%rdx
  mov    -0x118(%rbp),%eax
  mov    %eax,%ecx
  shl    %cl,%rdx
  mov    %rdx,%rax
  mov    %rax,-0x90(%rbp)
  mov    -0x90(%rbp),%rax
  mov    %rax,%rcx
  lea    -0x98(%rbp),%rdx
  mov    (%rdx),%rax
  lock cmpxchg %rcx,0x28fe(%rip)        # 4050 <a.13>
  mov    %rax,%rcx
  sete   %al
  test   %al,%al
  jne    L438
  mov    %rcx,(%rdx)
L438:
  test   %al,%al
  jne    L775
  jmp    L197
L775:
  mov    -0x90(%rbp),%rax
  cmp    $0x80,%rax
  je     L114
  call   <abort@plt>
L114:
  mov    D167(%rip),%rax
  mov    %rax,-0x88(%rbp)
  mov    -0x88(%rbp),%rax
  cmp    $0x80,%rax
  je     L1155
  call   <abort@plt>
L1155:
  movl   $0x7,-0x114(%rbp)
  mov    D78(%rip),%rax
  mov    %rax,-0x80(%rbp)
L560:
  mov    -0x80(%rbp),%rdx
  mov    -0x114(%rbp),%eax
  mov    %eax,%ecx
  shl    %cl,%rdx
  mov    %rdx,%rax
  mov    %rax,-0x78(%rbp)
  mov    -0x78(%rbp),%rcx
  lea    -0x80(%rbp),%rdx
  mov    (%rdx),%rax
  lock cmpxchg %rcx,0x287e(%rip)        # 4058 <a.12>
  mov    %rax,%rcx
  sete   %al
  test   %al,%al
  jne    L178
  mov    %rcx,(%rdx)
L178:
  test   %al,%al
  jne    L125
  jmp    L560
L125:
  mov    -0x78(%rbp),%rax
  cmp    $0x80,%rax
  je     L537
  call   <abort@plt>
L537:
  mov    D78(%rip),%rax
  mov    %rax,-0x70(%rbp)
  mov    -0x70(%rbp),%rax
  cmp    $0x80,%rax
  je     L564
  call   <abort@plt>
L564:
  movl   $0x3,-0x110(%rbp)
  movzbl D611(%rip),%eax
  mov    %al,-0x17c(%rbp)
L95:
  movzbl -0x17c(%rbp),%eax
  movzbl %al,%edx
  mov    -0x110(%rbp),%eax
  mov    %eax,%ecx
  shl    %cl,%edx
  mov    %edx,%eax
  test   %eax,%eax
  setne  %al
  mov    %al,-0x17b(%rbp)
  movzbl -0x17b(%rbp),%eax
  movzbl %al,%ecx
  lea    -0x17c(%rbp),%rdx
  movzbl (%rdx),%eax
  lock cmpxchg %cl,0x27f2(%rip)        # 4060 <a.11>
  mov    %eax,%ecx
  sete   %al
  test   %al,%al
  jne    L793
  mov    %cl,(%rdx)
L793:
  test   %al,%al
  jne    L922
  jmp    L95
L922:
  movzbl -0x17b(%rbp),%eax
  xor    $0x1,%eax
  test   %al,%al
  je     L1084
  call   <abort@plt>
L1084:
  movzbl D611(%rip),%eax
  mov    %al,-0x17a(%rbp)
  movzbl -0x17a(%rbp),%eax
  xor    $0x1,%eax
  test   %al,%al
  je     L376
  call   <abort@plt>
L376:
  movl   $0x3,-0x10c(%rbp)
  movzbl D57(%rip),%eax
  mov    %al,-0x179(%rbp)
L15:
  movzbl -0x179(%rbp),%eax
  movsbl %al,%edx
  mov    -0x10c(%rbp),%eax
  mov    %eax,%ecx
  shl    %cl,%edx
  mov    %edx,%eax
  mov    %al,-0x178(%rbp)
  movzbl -0x178(%rbp),%eax
  movzbl %al,%ecx
  lea    -0x179(%rbp),%rdx
  movzbl (%rdx),%eax
  lock cmpxchg %cl,0x2760(%rip)        # 4061 <a.10>
  mov    %eax,%ecx
  sete   %al
  test   %al,%al
  jne    L348
  mov    %cl,(%rdx)
L348:
  test   %al,%al
  jne    L1042
  jmp    L15
L1042:
  movzbl -0x178(%rbp),%eax
  cmp    $0x78,%al
  je     L69
  call   <abort@plt>
L69:
  movzbl D57(%rip),%eax
  mov    %al,-0x177(%rbp)
  movzbl -0x177(%rbp),%eax
  cmp    $0x78,%al
  je     L1180
  call   <abort@plt>
L1180:
  movl   $0x3,-0x108(%rbp)
  movzbl D5(%rip),%eax
  mov    %al,-0x176(%rbp)
L949:
  movzbl -0x176(%rbp),%eax
  movsbl %al,%edx
  mov    -0x108(%rbp),%eax
  mov    %eax,%ecx
  shl    %cl,%edx
  mov    %edx,%eax
  mov    %al,-0x175(%rbp)
  movzbl -0x175(%rbp),%eax
  movzbl %al,%ecx
  lea    -0x176(%rbp),%rdx
  movzbl (%rdx),%eax
  lock cmpxchg %cl,0x26d4(%rip)        # 4062 <a.9>
  mov    %eax,%ecx
  sete   %al
  test   %al,%al
  jne    L1000
  mov    %cl,(%rdx)
L1000:
  test   %al,%al
  jne    L488
  jmp    L949
L488:
  movzbl -0x175(%rbp),%eax
  cmp    $0x78,%al
  je     L362
  call   <abort@plt>
L362:
  movzbl D5(%rip),%eax
  mov    %al,-0x174(%rbp)
  movzbl -0x174(%rbp),%eax
  cmp    $0x78,%al
  je     L116
  call   <abort@plt>
L116:
  movl   $0x3,-0x104(%rbp)
  movzbl D159(%rip),%eax
  mov    %al,-0x173(%rbp)
L13:
  movzbl -0x173(%rbp),%eax
  movzbl %al,%edx
  mov    -0x104(%rbp),%eax
  mov    %eax,%ecx
  shl    %cl,%edx
  mov    %edx,%eax
  mov    %al,-0x172(%rbp)
  movzbl -0x172(%rbp),%eax
  movzbl %al,%ecx
  lea    -0x173(%rbp),%rdx
  movzbl (%rdx),%eax
  lock cmpxchg %cl,0x2648(%rip)        # 4063 <a.8>
  mov    %eax,%ecx
  sete   %al
  test   %al,%al
  jne    L556
  mov    %cl,(%rdx)
L556:
  test   %al,%al
  jne    L528
  jmp    L13
L528:
  movzbl -0x172(%rbp),%eax
  cmp    $0x78,%al
  je     L1071
  call   <abort@plt>
L1071:
  movzbl D159(%rip),%eax
  mov    %al,-0x171(%rbp)
  movzbl -0x171(%rbp),%eax
  cmp    $0x78,%al
  je     L860
  call   <abort@plt>
L860:
  movl   $0x3,-0x100(%rbp)
  movzwl D706(%rip),%eax
  mov    %ax,-0x164(%rbp)
L912:
  movzwl -0x164(%rbp),%eax
  movswl %ax,%edx
  mov    -0x100(%rbp),%eax
  mov    %eax,%ecx
  shl    %cl,%edx
  mov    %edx,%eax
  mov    %ax,-0x162(%rbp)
  movzwl -0x162(%rbp),%eax
  movzwl %ax,%ecx
  lea    -0x164(%rbp),%rdx
  movzwl (%rdx),%eax
  lock cmpxchg %cx,0x25b9(%rip)        # 4064 <a.7>
  mov    %eax,%ecx
  sete   %al
  test   %al,%al
  jne    L479
  mov    %cx,(%rdx)
L479:
  test   %al,%al
  jne    L185
  jmp    L912
L185:
  movzwl -0x162(%rbp),%eax
  cmp    $0x78,%ax
  je     L1083
  call   <abort@plt>
L1083:
  movzwl D706(%rip),%eax
  mov    %ax,-0x160(%rbp)
  movzwl -0x160(%rbp),%eax
  cmp    $0x78,%ax
  je     L261
  call   <abort@plt>
L261:
  movl   $0x3,-0xfc(%rbp)
  movzwl D653(%rip),%eax
  mov    %ax,-0x15e(%rbp)
L1204:
  movzwl -0x15e(%rbp),%eax
  movzwl %ax,%edx
  mov    -0xfc(%rbp),%eax
  mov    %eax,%ecx
  shl    %cl,%edx
  mov    %edx,%eax
  mov    %ax,-0x15c(%rbp)
  movzwl -0x15c(%rbp),%eax
  movzwl %ax,%ecx
  lea    -0x15e(%rbp),%rdx
  movzwl (%rdx),%eax
  lock cmpxchg %cx,0x2525(%rip)        # 4066 <a.6>
  mov    %eax,%ecx
  sete   %al
  test   %al,%al
  jne    L249
  mov    %cx,(%rdx)
L249:
  test   %al,%al
  jne    L746
  jmp    L1204
L746:
  movzwl -0x15c(%rbp),%eax
  cmp    $0x78,%ax
  je     L143
  call   <abort@plt>
L143:
  movzwl D653(%rip),%eax
  mov    %ax,-0x15a(%rbp)
  movzwl -0x15a(%rbp),%eax
  cmp    $0x78,%ax
  je     L336
  call   <abort@plt>
L336:
  movl   $0x3,-0xf8(%rbp)
  mov    D314(%rip),%eax
  mov    %eax,-0xf4(%rbp)
L1080:
  mov    -0xf4(%rbp),%edx
  mov    -0xf8(%rbp),%eax
  mov    %eax,%ecx
  shl    %cl,%edx
  mov    %edx,%eax
  mov    %eax,-0xf0(%rbp)
  mov    -0xf0(%rbp),%eax
  mov    %eax,%ecx
  lea    -0xf4(%rbp),%rdx
  mov    (%rdx),%eax
  lock cmpxchg %ecx,0x249c(%rip)        # 4068 <a.5>
  mov    %eax,%ecx
  sete   %al
  test   %al,%al
  jne    L1138
  mov    %ecx,(%rdx)
L1138:
  test   %al,%al
  jne    L188
  jmp    L1080
L188:
  mov    -0xf0(%rbp),%eax
  cmp    $0x78,%eax
  je     L600
  call   <abort@plt>
L600:
  mov    D314(%rip),%eax
  mov    %eax,-0xec(%rbp)
  mov    -0xec(%rbp),%eax
  cmp    $0x78,%eax
  je     L510
  call   <abort@plt>
L510:
  movl   $0x3,-0xe8(%rbp)
  mov    D463(%rip),%eax
  mov    %eax,-0xe4(%rbp)
L1144:
  mov    -0xe4(%rbp),%edx
  mov    -0xe8(%rbp),%eax
  mov    %eax,%ecx
  shl    %cl,%edx
  mov    %edx,%eax
  mov    %eax,-0xe0(%rbp)
  mov    -0xe0(%rbp),%ecx
  lea    -0xe4(%rbp),%rdx
  mov    (%rdx),%eax
  lock cmpxchg %ecx,0x241e(%rip)        # 406c <a.4>
  mov    %eax,%ecx
  sete   %al
  test   %al,%al
  jne    L312
  mov    %ecx,(%rdx)
L312:
  test   %al,%al
  jne    L73
  jmp    L1144
L73:
  mov    -0xe0(%rbp),%eax
  cmp    $0x78,%eax
  je     L820
  call   <abort@plt>
L820:
  mov    D463(%rip),%eax
  mov    %eax,-0xdc(%rbp)
  mov    -0xdc(%rbp),%eax
  cmp    $0x78,%eax
  je     L982
  call   <abort@plt>
L982:
  movl   $0x3,-0xd8(%rbp)
  mov    D18(%rip),%rax
  mov    %rax,-0x68(%rbp)
L44:
  mov    -0x68(%rbp),%rdx
  mov    -0xd8(%rbp),%eax
  mov    %eax,%ecx
  shl    %cl,%rdx
  mov    %rdx,%rax
  mov    %rax,-0x60(%rbp)
  mov    -0x60(%rbp),%rax
  mov    %rax,%rcx
  lea    -0x68(%rbp),%rdx
  mov    (%rdx),%rax
  lock cmpxchg %rcx,0x23a3(%rip)        # 4070 <a.3>
  mov    %rax,%rcx
  sete   %al
  test   %al,%al
  jne    L598
  mov    %rcx,(%rdx)
L598:
  test   %al,%al
  jne    L841
  jmp    L44
L841:
  mov    -0x60(%rbp),%rax
  cmp    $0x78,%rax
  je     L408
  call   <abort@plt>
L408:
  mov    D18(%rip),%rax
  mov    %rax,-0x58(%rbp)
  mov    -0x58(%rbp),%rax
  cmp    $0x78,%rax
  je     L620
  call   <abort@plt>
L620:
  movl   $0x3,-0xd4(%rbp)
  mov    D422(%rip),%rax
  mov    %rax,-0x50(%rbp)
L513:
  mov    -0x50(%rbp),%rdx
  mov    -0xd4(%rbp),%eax
  mov    %eax,%ecx
  shl    %cl,%rdx
  mov    %rdx,%rax
  mov    %rax,-0x48(%rbp)
  mov    -0x48(%rbp),%rcx
  lea    -0x50(%rbp),%rdx
  mov    (%rdx),%rax
  lock cmpxchg %rcx,0x2330(%rip)        # 4078 <a.2>
  mov    %rax,%rcx
  sete   %al
  test   %al,%al
  jne    L658
  mov    %rcx,(%rdx)
L658:
  test   %al,%al
  jne    L1175
  jmp    L513
L1175:
  mov    -0x48(%rbp),%rax
  cmp    $0x78,%rax
  je     L1188
  call   <abort@plt>
L1188:
  mov    D422(%rip),%rax
  mov    %rax,-0x40(%rbp)
  mov    -0x40(%rbp),%rax
  cmp    $0x78,%rax
  je     L360
  call   <abort@plt>
L360:
  movl   $0x3,-0xd0(%rbp)
  mov    D690(%rip),%rax
  mov    %rax,-0x38(%rbp)
L177:
  mov    -0x38(%rbp),%rdx
  mov    -0xd0(%rbp),%eax
  mov    %eax,%ecx
  shl    %cl,%rdx
  mov    %rdx,%rax
  mov    %rax,-0x30(%rbp)
  mov    -0x30(%rbp),%rax
  mov    %rax,%rcx
  lea    -0x38(%rbp),%rdx
  mov    (%rdx),%rax
  lock cmpxchg %rcx,0x22ba(%rip)        # 4080 <a.1>
  mov    %rax,%rcx
  sete   %al
  test   %al,%al
  jne    L1197
  mov    %rcx,(%rdx)
L1197:
  test   %al,%al
  jne    L72
  jmp    L177
L72:
  mov    -0x30(%rbp),%rax
  cmp    $0x78,%rax
  je     L618
  call   <abort@plt>
L618:
  mov    D690(%rip),%rax
  mov    %rax,-0x28(%rbp)
  mov    -0x28(%rbp),%rax
  cmp    $0x78,%rax
  je     L1205
  call   <abort@plt>
L1205:
  movl   $0x3,-0xcc(%rbp)
  mov    D483(%rip),%rax
  mov    %rax,-0x20(%rbp)
L859:
  mov    -0x20(%rbp),%rdx
  mov    -0xcc(%rbp),%eax
  mov    %eax,%ecx
  shl    %cl,%rdx
  mov    %rdx,%rax
  mov    %rax,-0x18(%rbp)
  mov    -0x18(%rbp),%rcx
  lea    -0x20(%rbp),%rdx
  mov    (%rdx),%rax
  lock cmpxchg %rcx,0x2247(%rip)        # 4088 <a.0>
  mov    %rax,%rcx
  sete   %al
  test   %al,%al
  jne    L668
  mov    %rcx,(%rdx)
L668:
  test   %al,%al
  jne    L108
  jmp    L859
L108:
  mov    -0x18(%rbp),%rax
  cmp    $0x78,%rax
  je     L1131
  call   <abort@plt>
L1131:
  mov    D483(%rip),%rax
  mov    %rax,-0x10(%rbp)
  mov    -0x10(%rbp),%rax
  cmp    $0x78,%rax
  je     L1135
  call   <abort@plt>
L1135:
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L1019
  call   <__stack_chk_fail@plt>
L1019:
  leave
  ret
```

assistant: ```c
void test_lshift(void) {
  do {
    do {
      static volatile _Atomic(_Bool) a = (_Bool)((1));
      if ((a <<= ((7))) != (_Bool)((_Bool)((1)) << ((7))))
        abort();
      if (a != (_Bool)((_Bool)((1)) << ((7))))
        abort();
    } while (0);
    do {
      static volatile _Atomic(char) a = (char)((1));
      if ((a <<= ((7))) != (char)((char)((1)) << ((7))))
        abort();
      if (a != (char)((char)((1)) << ((7))))
        abort();
    } while (0);
    do {
      static volatile _Atomic(signed char) a = (signed char)((1));
      if ((a <<= ((7))) != (signed char)((signed char)((1)) << ((7))))
        abort();
      if (a != (signed char)((signed char)((1)) << ((7))))
        abort();
    } while (0);
    do {
      static volatile _Atomic(unsigned char) a = (unsigned char)((1));
      if ((a <<= ((7))) != (unsigned char)((unsigned char)((1)) << ((7))))
        abort();
      if (a != (unsigned char)((unsigned char)((1)) << ((7))))
        abort();
    } while (0);
    do {
      static volatile _Atomic(signed short) a = (signed short)((1));
      if ((a <<= ((7))) != (signed short)((signed short)((1)) << ((7))))
        abort();
      if (a != (signed short)((signed short)((1)) << ((7))))
        abort();
    } while (0);
    do {
      static volatile _Atomic(unsigned short) a = (unsigned short)((1));
      if ((a <<= ((7))) != (unsigned short)((unsigned short)((1)) << ((7))))
        abort();
      if (a != (unsigned short)((unsigned short)((1)) << ((7))))
        abort();
    } while (0);
    do {
      static volatile _Atomic(signed int) a = (signed int)((1));
      if ((a <<= ((7))) != (signed int)((signed int)((1)) << ((7))))
        abort();
      if (a != (signed int)((signed int)((1)) << ((7))))
        abort();
    } while (0);
    do {
      static volatile _Atomic(unsigned int) a = (unsigned int)((1));
      if ((a <<= ((7))) != (unsigned int)((unsigned int)((1)) << ((7))))
        abort();
      if (a != (unsigned int)((unsigned int)((1)) << ((7))))
        abort();
    } while (0);
    do {
      static volatile _Atomic(signed long) a = (signed long)((1));
      if ((a <<= ((7))) != (signed long)((signed long)((1)) << ((7))))
        abort();
      if (a != (signed long)((signed long)((1)) << ((7))))
        abort();
    } while (0);
    do {
      static volatile _Atomic(unsigned long) a = (unsigned long)((1));
      if ((a <<= ((7))) != (unsigned long)((unsigned long)((1)) << ((7))))
        abort();
      if (a != (unsigned long)((unsigned long)((1)) << ((7))))
        abort();
    } while (0);
    do {
      static volatile _Atomic(signed long long) a = (signed long long)((1));
      if ((a <<= ((7))) != (signed long long)((signed long long)((1)) << ((7))))
        abort();
      if (a != (signed long long)((signed long long)((1)) << ((7))))
        abort();
    } while (0);
    do {
      static volatile _Atomic(unsigned long long) a = (unsigned long long)((1));
      if ((a <<= ((7))) != (unsigned long long)((unsigned long long)((1)) << ((7))))
        abort();
      if (a != (unsigned long long)((unsigned long long)((1)) << ((7))))
        abort();
    } while (0);
  } while (0);
  do {
    do {
      static volatile _Atomic(_Bool) a = (_Bool)((15));
      if ((a <<= ((3))) != (_Bool)((_Bool)((15)) << ((3))))
        abort();
      if (a != (_Bool)((_Bool)((15)) << ((3))))
        abort();
    } while (0);
    do {
      static volatile _Atomic(char) a = (char)((15));
      if ((a <<= ((3))) != (char)((char)((15)) << ((3))))
        abort();
      if (a != (char)((char)((15)) << ((3))))
        abort();
    } while (0);
    do {
      static volatile _Atomic(signed char) a = (signed char)((15));
      if ((a <<= ((3))) != (signed char)((signed char)((15)) << ((3))))
        abort();
      if (a != (signed char)((signed char)((15)) << ((3))))
        abort();
    } while (0);
    do {
      static volatile _Atomic(unsigned char) a = (unsigned char)((15));
      if ((a <<= ((3))) != (unsigned char)((unsigned char)((15)) << ((3))))
        abort();
      if (a != (unsigned char)((unsigned char)((15)) << ((3))))
        abort();
    } while (0);
    do {
      static volatile _Atomic(signed short) a = (signed short)((15));
      if ((a <<= ((3))) != (signed short)((signed short)((15)) << ((3))))
        abort();
      if (a != (signed short)((signed short)((15)) << ((3))))
        abort();
    } while (0);
    do {
      static volatile _Atomic(unsigned short) a = (unsigned short)((15));
      if ((a <<= ((3))) != (unsigned short)((unsigned short)((15)) << ((3))))
        abort();
      if (a != (unsigned short)((unsigned short)((15)) << ((3))))
        abort();
    } while (0);
    do {
      static volatile _Atomic(signed int) a = (signed int)((15));
      if ((a <<= ((3))) != (signed int)((signed int)((15)) << ((3))))
        abort();
      if (a != (signed int)((signed int)((15)) << ((3))))
        abort();
    } while (0);
    do {
      static volatile _Atomic(unsigned int) a = (unsigned int)((15));
      if ((a <<= ((3))) != (unsigned int)((unsigned int)((15)) << ((3))))
        abort();
      if (a != (unsigned int)((unsigned int)((15)) << ((3))))
        abort();
    } while (0);
    do {
      static volatile _Atomic(signed long) a = (signed long)((15));
      if ((a <<= ((3))) != (signed long)((signed long)((15)) << ((3))))
        abort();
      if (a != (signed long)((signed long)((15)) << ((3))))
        abort();
    } while (0);
    do {
      static volatile _Atomic(unsigned long) a = (unsigned long)((15));
      if ((a <<= ((3))) != (unsigned long)((unsigned long)((15)) << ((3))))
        abort();
      if (a != (unsigned long)((unsigned long)((15)) << ((3))))
        abort();
    } while (0);
    do {
      static volatile _Atomic(signed long long) a = (signed long long)((15));
      if ((a <<= ((3))) != (signed long long)((signed long long)((15)) << ((3))))
        abort();
      if (a != (signed long long)((signed long long)((15)) << ((3))))
        abort();
    } while (0);
    do {
      static volatile _Atomic(unsigned long long) a = (unsigned long long)((15));
      if ((a <<= ((3))) != (unsigned long long)((unsigned long long)((15)) << ((3))))
        abort();
      if (a != (unsigned long long)((unsigned long long)((15)) << ((3))))
        abort();
    } while (0);
  } while (0);
}
```