user: 这段汇编代码用C语言表示是什么样的?

```asm
<avg_422_downsample_first_ag_rb_vectors_n_save_previous_sse2>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x18,%rsp
  mov    %rdi,%r12
  mov    %rsi,%r14
  mov    %rdx,%r15
  mov    $0x8d,%esi
  mov    (%rdi),%rdi
  call   <_mm_shuffle_epi32@plt>
  mov    %rax,%rbp
  lea    0x10(%r12),%rax
  mov    %rax,(%rsp)
  mov    $0x8d,%esi
  mov    0x10(%r12),%rdi
  call   <_mm_shuffle_epi32@plt>
  mov    %rax,%rbx
  mov    %rax,%rsi
  mov    %rbp,%rdi
  call   <_mm_unpacklo_epi64@plt>
  mov    %rax,%r13
  mov    %rbx,%rsi
  mov    %rbp,%rdi
  call   <_mm_unpackhi_epi64@plt>
  mov    %rax,%rbp
  mov    D2(%rip),%rsi
  mov    (%r12),%rdi
  call   <_mm_and_si128@plt>
  mov    %rax,%rbx
  mov    $0x4,%esi
  mov    %r13,%rdi
  call   <_mm_slli_si128@plt>
  mov    %rax,%rsi
  mov    %rbx,%rdi
  call   <_mm_or_si128@plt>
  mov    %r13,%rsi
  mov    %rax,%rdi
  call   <_mm_avg_epu16@plt>
  mov    %rax,%rsi
  mov    %rbp,%rdi
  call   <_mm_avg_epu16@plt>
  mov    %rax,(%r15)
  mov    $0x8d,%esi
  mov    0x8(%r12),%rdi
  call   <_mm_shuffle_epi32@plt>
  mov    %rax,%rbp
  lea    0x18(%r12),%rcx
  mov    %rcx,0x8(%rsp)
  mov    $0x8d,%esi
  mov    0x18(%r12),%rdi
  call   <_mm_shuffle_epi32@plt>
  mov    %rax,%rbx
  mov    %rax,%rsi
  mov    %rbp,%rdi
  call   <_mm_unpacklo_epi64@plt>
  mov    %rax,%r13
  mov    %rbx,%rsi
  mov    %rbp,%rdi
  call   <_mm_unpackhi_epi64@plt>
  mov    %rax,%rbp
  mov    D2(%rip),%rsi
  mov    0x8(%r12),%rdi
  call   <_mm_and_si128@plt>
  mov    %rax,%rbx
  mov    $0x4,%esi
  mov    %r13,%rdi
  call   <_mm_slli_si128@plt>
  mov    %rax,%rsi
  mov    %rbx,%rdi
  call   <_mm_or_si128@plt>
  mov    %r13,%rsi
  mov    %rax,%rdi
  call   <_mm_avg_epu16@plt>
  mov    %rax,%rsi
  mov    %rbp,%rdi
  call   <_mm_avg_epu16@plt>
  mov    %rax,0x8(%r15)
  mov    (%rsp),%rdi
  call   <_mm_load_si128@plt>
  mov    %rax,(%r14)
  mov    0x8(%rsp),%rdi
  call   <_mm_load_si128@plt>
  mov    %rax,0x8(%r14)
  add    $0x18,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
```

tool_calls: name: read_data
arguments: tag: D2
data_type: byte[8]

tool: {"D2": [0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00]}

assistant: ```c
extern void avg_422_downsample_first_ag_rb_vectors_n_save_previous_sse2(__m128i *in_4_v16i_current_ag_rb_vectors, __m128i *previous, __m128i *out_2_v16i_avg_422_ag_rb_vectors) {
  static const __m128i keep_1st = {0x00000000FFFFFFFFLL, 0x0000000000000000LL};
  __m128i scratch1 = {0x0LL, 0x0LL};
  __m128i scratch2 = {0x0LL, 0x0LL};
  __m128i scratch3 = {0x0LL, 0x0LL};
  __m128i scratch4 = {0x0LL, 0x0LL};
  (scratch4) = _mm_shuffle_epi32(in_4_v16i_current_ag_rb_vectors[0], 0x8D);
  (scratch2) = _mm_shuffle_epi32(in_4_v16i_current_ag_rb_vectors[2], 0x8D);
  (scratch1) = _mm_unpacklo_epi64((scratch4), (scratch2));
  (scratch4) = _mm_unpackhi_epi64((scratch4), (scratch2));
  (scratch2) = _mm_and_si128(in_4_v16i_current_ag_rb_vectors[0], (keep_1st));
  (scratch3) = _mm_slli_si128((scratch1), 4);
  (scratch2) = _mm_or_si128((scratch2), (scratch3));
  (scratch2) = _mm_avg_epu16((scratch2), (scratch1));
  out_2_v16i_avg_422_ag_rb_vectors[0] = _mm_avg_epu16((scratch4), (scratch2));
  (scratch4) = _mm_shuffle_epi32(in_4_v16i_current_ag_rb_vectors[1], 0x8D);
  (scratch2) = _mm_shuffle_epi32(in_4_v16i_current_ag_rb_vectors[3], 0x8D);
  (scratch1) = _mm_unpacklo_epi64((scratch4), (scratch2));
  (scratch4) = _mm_unpackhi_epi64((scratch4), (scratch2));
  (scratch2) = _mm_and_si128(in_4_v16i_current_ag_rb_vectors[1], (keep_1st));
  (scratch3) = _mm_slli_si128((scratch1), 4);
  (scratch2) = _mm_or_si128((scratch2), (scratch3));
  (scratch2) = _mm_avg_epu16((scratch2), (scratch1));
  out_2_v16i_avg_422_ag_rb_vectors[1] = _mm_avg_epu16((scratch4), (scratch2));
  previous[0] = _mm_load_si128(&in_4_v16i_current_ag_rb_vectors[2]);
  previous[1] = _mm_load_si128(&in_4_v16i_current_ag_rb_vectors[3]);
}
```