user: Translate the below assembly code into C programming language:

```asm
<expandBitMap>:
  endbr64
  mov    %rsi,%r8
  lea    0x500(%rsi),%rsi
  mov    %rdi,%rax
  lea    0xa0(%rdi),%rcx
  cmp    %rsi,%rdi
  jae    L28
  cmp    %rcx,%r8
  jb     L31
L28:
  movdqa D27(%rip),%xmm9
  mov    %rax,%rdx
  mov    %r8,%rax
  movdqa D132(%rip),%xmm15
  movdqa D123(%rip),%xmm14
  movdqa D49(%rip),%xmm13
  movdqa D32(%rip),%xmm12
  movdqa D57(%rip),%xmm11
  movdqa D72(%rip),%xmm10
L21:
  movdqu (%rdx),%xmm0
  add    $0x10,%rdx
  sub    $0xffffffffffffff80,%rax
  movdqa D59(%rip),%xmm7
  movdqa D38(%rip),%xmm6
  movdqa D14(%rip),%xmm5
  movdqa %xmm0,%xmm1
  movdqa %xmm0,%xmm2
  movdqa %xmm0,%xmm4
  pand   %xmm0,%xmm7
  pand   %xmm15,%xmm1
  pand   %xmm9,%xmm2
  movdqa %xmm0,%xmm3
  pand   %xmm0,%xmm6
  pand   %xmm13,%xmm4
  psrlw  $0x1,%xmm1
  psrlw  $0x4,%xmm7
  pand   %xmm0,%xmm5
  pand   %xmm14,%xmm1
  movdqa %xmm2,%xmm8
  pand   %xmm11,%xmm3
  pand   D5(%rip),%xmm7
  pand   D137(%rip),%xmm0
  psrlw  $0x2,%xmm4
  psrlw  $0x5,%xmm6
  pand   D111(%rip),%xmm6
  punpcklbw %xmm7,%xmm8
  punpckhbw %xmm7,%xmm2
  pand   %xmm12,%xmm4
  psrlw  $0x3,%xmm3
  psrlw  $0x6,%xmm5
  movdqa %xmm1,%xmm7
  pand   D36(%rip),%xmm5
  punpcklbw %xmm6,%xmm7
  punpckhbw %xmm6,%xmm1
  pand   %xmm10,%xmm3
  psrlw  $0x7,%xmm0
  movdqa %xmm4,%xmm6
  punpcklbw %xmm5,%xmm6
  punpckhbw %xmm5,%xmm4
  pand   %xmm9,%xmm0
  movdqa %xmm3,%xmm5
  punpckhbw %xmm0,%xmm3
  punpcklbw %xmm0,%xmm5
  movdqa %xmm8,%xmm0
  punpckhbw %xmm6,%xmm8
  punpcklbw %xmm6,%xmm0
  movdqa %xmm2,%xmm6
  punpckhbw %xmm4,%xmm2
  punpcklbw %xmm4,%xmm6
  movdqa %xmm7,%xmm4
  punpckhbw %xmm5,%xmm7
  punpcklbw %xmm5,%xmm4
  movdqa %xmm1,%xmm5
  punpckhbw %xmm3,%xmm1
  punpcklbw %xmm3,%xmm5
  movdqa %xmm0,%xmm3
  punpckhbw %xmm4,%xmm0
  movups %xmm0,-0x70(%rax)
  movdqa %xmm8,%xmm0
  punpcklbw %xmm4,%xmm3
  punpckhbw %xmm7,%xmm8
  punpcklbw %xmm7,%xmm0
  movups %xmm3,-0x80(%rax)
  movups %xmm0,-0x60(%rax)
  movdqa %xmm6,%xmm0
  punpckhbw %xmm5,%xmm6
  punpcklbw %xmm5,%xmm0
  movups %xmm8,-0x50(%rax)
  movups %xmm0,-0x40(%rax)
  movdqa %xmm2,%xmm0
  punpckhbw %xmm1,%xmm2
  punpcklbw %xmm1,%xmm0
  movups %xmm6,-0x30(%rax)
  movups %xmm0,-0x20(%rax)
  movups %xmm2,-0x10(%rax)
  cmp    %rcx,%rdx
  jne    L21
  mov    %r8,%rax
  ret
L31:
  mov    %r8,%rdx
  nopl   (%rax)
L36:
  movzbl (%rax),%ecx
  add    $0x8,%rdx
  add    $0x1,%rax
  and    $0x1,%ecx
  mov    %cl,-0x8(%rdx)
  movzbl -0x1(%rax),%ecx
  and    $0x2,%ecx
  sar    %ecx
  mov    %cl,-0x7(%rdx)
  movzbl -0x1(%rax),%ecx
  and    $0x4,%ecx
  sar    $0x2,%ecx
  mov    %cl,-0x6(%rdx)
  movzbl -0x1(%rax),%ecx
  and    $0x8,%ecx
  sar    $0x3,%ecx
  mov    %cl,-0x5(%rdx)
  movzbl -0x1(%rax),%ecx
  and    $0x10,%ecx
  sar    $0x4,%ecx
  mov    %cl,-0x4(%rdx)
  movzbl -0x1(%rax),%ecx
  and    $0x20,%ecx
  sar    $0x5,%ecx
  mov    %cl,-0x3(%rdx)
  movzbl -0x1(%rax),%ecx
  and    $0x40,%ecx
  sar    $0x6,%ecx
  mov    %cl,-0x2(%rdx)
  movzbl -0x1(%rax),%ecx
  and    $0x80,%ecx
  sar    $0x7,%ecx
  mov    %cl,-0x1(%rdx)
  cmp    %rdx,%rsi
  jne    L36
  mov    %r8,%rax
  ret
```

tool_calls: name: read_data
arguments: label: D27
type: byte[16]
name: read_data
arguments: label: D132
type: byte[16]
name: read_data
arguments: label: D123
type: byte[16]
name: read_data
arguments: label: D49
type: byte[16]
name: read_data
arguments: label: D32
type: byte[16]
name: read_data
arguments: label: D57
type: byte[16]
name: read_data
arguments: label: D72
type: byte[16]
name: read_data
arguments: label: D59
type: byte[16]
name: read_data
arguments: label: D38
type: byte[16]
name: read_data
arguments: label: D14
type: byte[16]
name: read_data
arguments: label: D5
type: byte[16]
name: read_data
arguments: label: D137
type: byte[16]
name: read_data
arguments: label: D111
type: byte[16]
name: read_data
arguments: label: D36
type: byte[16]

tool: {"D27": [0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01]}

tool: {"D132": [0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02]}

tool: {"D123": [0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f]}

tool: {"D49": [0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04]}

tool: {"D32": [0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f]}

tool: {"D57": [0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08]}

tool: {"D72": [0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f]}

tool: {"D59": [0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10]}

tool: {"D38": [0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20]}

tool: {"D14": [0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40]}

tool: {"D5": [0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f]}

tool: {"D137": [0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80]}

tool: {"D111": [0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07]}

tool: {"D36": [0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03]}

assistant: ```c
unsigned char *expandBitMap(unsigned char *bits, unsigned char *display) {
  int i, j;
  for (i = 0; i < (40 * 32 / 8); i++) {
    for (j = 0; j < 8; j++) {
      display[i * 8 + j] = (bits[i] & (1 << j)) >> j;
      if (0 == 1) {
        if (display[i * 8 + j] == 0)
          display[i * 8 + j] = 1;
        else
          display[i * 8 + j] = 0;
      }
    }
  }
  return display;
}
```