user: Please show me the C implementation that matches the assembly code listed below:

```asm
<aes_enc_128>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x10,%rsp
  mov    %rdi,-0x8(%rbp)
  mov    %rsi,-0x10(%rbp)
  mov    -0x10(%rbp),%rax
  mov    (%rax),%edx
  mov    -0x8(%rbp),%rax
  mov    (%rax),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <_mm_xor_si128@plt>
  mov    -0x8(%rbp),%rdx
  mov    %eax,(%rdx)
  mov    -0x10(%rbp),%rax
  add    $0x4,%rax
  mov    (%rax),%edx
  mov    -0x8(%rbp),%rax
  mov    (%rax),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <_mm_aesenc_si128@plt>
  mov    -0x8(%rbp),%rdx
  mov    %eax,(%rdx)
  mov    -0x10(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%edx
  mov    -0x8(%rbp),%rax
  mov    (%rax),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <_mm_aesenc_si128@plt>
  mov    -0x8(%rbp),%rdx
  mov    %eax,(%rdx)
  mov    -0x10(%rbp),%rax
  add    $0xc,%rax
  mov    (%rax),%edx
  mov    -0x8(%rbp),%rax
  mov    (%rax),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <_mm_aesenc_si128@plt>
  mov    -0x8(%rbp),%rdx
  mov    %eax,(%rdx)
  mov    -0x10(%rbp),%rax
  add    $0x10,%rax
  mov    (%rax),%edx
  mov    -0x8(%rbp),%rax
  mov    (%rax),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <_mm_aesenc_si128@plt>
  mov    -0x8(%rbp),%rdx
  mov    %eax,(%rdx)
  mov    -0x10(%rbp),%rax
  add    $0x14,%rax
  mov    (%rax),%edx
  mov    -0x8(%rbp),%rax
  mov    (%rax),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <_mm_aesenc_si128@plt>
  mov    -0x8(%rbp),%rdx
  mov    %eax,(%rdx)
  mov    -0x10(%rbp),%rax
  add    $0x18,%rax
  mov    (%rax),%edx
  mov    -0x8(%rbp),%rax
  mov    (%rax),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <_mm_aesenc_si128@plt>
  mov    -0x8(%rbp),%rdx
  mov    %eax,(%rdx)
  mov    -0x10(%rbp),%rax
  add    $0x1c,%rax
  mov    (%rax),%edx
  mov    -0x8(%rbp),%rax
  mov    (%rax),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <_mm_aesenc_si128@plt>
  mov    -0x8(%rbp),%rdx
  mov    %eax,(%rdx)
  mov    -0x10(%rbp),%rax
  add    $0x20,%rax
  mov    (%rax),%edx
  mov    -0x8(%rbp),%rax
  mov    (%rax),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <_mm_aesenc_si128@plt>
  mov    -0x8(%rbp),%rdx
  mov    %eax,(%rdx)
  mov    -0x10(%rbp),%rax
  add    $0x24,%rax
  mov    (%rax),%edx
  mov    -0x8(%rbp),%rax
  mov    (%rax),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <_mm_aesenc_si128@plt>
  mov    -0x8(%rbp),%rdx
  mov    %eax,(%rdx)
  mov    -0x10(%rbp),%rax
  add    $0x28,%rax
  mov    (%rax),%edx
  mov    -0x8(%rbp),%rax
  mov    (%rax),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <_mm_aesenclast_si128@plt>
  mov    -0x8(%rbp),%rdx
  mov    %eax,(%rdx)
  nop
  leave
  ret
```

assistant: ```c
void aes_enc_128(__m128i *state, __m128i *key) {
  *state = _mm_xor_si128(*state, key[0]);
  *state = _mm_aesenc_si128(*state, key[1]);
  *state = _mm_aesenc_si128(*state, key[2]);
  *state = _mm_aesenc_si128(*state, key[3]);
  *state = _mm_aesenc_si128(*state, key[4]);
  *state = _mm_aesenc_si128(*state, key[5]);
  *state = _mm_aesenc_si128(*state, key[6]);
  *state = _mm_aesenc_si128(*state, key[7]);
  *state = _mm_aesenc_si128(*state, key[8]);
  *state = _mm_aesenc_si128(*state, key[9]);
  *state = _mm_aesenclast_si128(*state, key[10]);
}
```