user: 请将以下的汇编代码转换成C语言代码：

```asm
<kernel_strsv_lt_inv_3_lib4>:
  endbr64
  mov    %edi,%eax
  push   %r15
  mov    %rsi,%rdi
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  mov    %rcx,%rbp
  push   %rbx
  mov    0x38(%rsp),%r15
  cmp    $0x4,%eax
  jle    L70
  movss  0xc(%r8),%xmm2
  movss  0xc(%rsi),%xmm1
  pxor   %xmm0,%xmm0
  lea    0x0(,%rdx,4),%r10d
  movss  0x1c(%rsi),%xmm4
  movaps %xmm0,%xmm3
  movslq %r10d,%r10
  mulss  %xmm2,%xmm1
  shl    $0x2,%r10
  mulss  %xmm2,%xmm4
  lea    (%rsi,%r10,1),%rdx
  mulss  0x2c(%rsi),%xmm2
  lea    0x10(%r8),%rsi
  subss  %xmm1,%xmm3
  movaps %xmm0,%xmm1
  subss  %xmm4,%xmm1
  subss  %xmm2,%xmm0
  cmp    $0x7,%eax
  jle    L156
  lea    -0x8(%rax),%ebx
  shr    $0x2,%ebx
  mov    %ebx,%r11d
  lea    0x2(%r11),%rcx
  shl    $0x4,%rcx
  add    %rcx,%r8
  mov    %rdx,%rcx
  xchg   %ax,%ax
L26:
  movss  (%rsi),%xmm7
  movss  (%rcx),%xmm8
  add    $0x10,%rsi
  movss  -0xc(%rsi),%xmm6
  movss  -0x8(%rsi),%xmm5
  mulss  %xmm7,%xmm8
  movss  -0x4(%rsi),%xmm4
  subss  %xmm8,%xmm3
  movaps %xmm3,%xmm2
  movss  0x10(%rcx),%xmm3
  mulss  %xmm7,%xmm3
  mulss  0x20(%rcx),%xmm7
  subss  %xmm3,%xmm1
  movss  0x4(%rcx),%xmm3
  subss  %xmm7,%xmm0
  mulss  %xmm6,%xmm3
  subss  %xmm3,%xmm2
  movss  0x14(%rcx),%xmm3
  mulss  %xmm6,%xmm3
  mulss  0x24(%rcx),%xmm6
  subss  %xmm3,%xmm1
  movss  0x8(%rcx),%xmm3
  subss  %xmm6,%xmm0
  mulss  %xmm5,%xmm3
  subss  %xmm3,%xmm2
  movss  0x18(%rcx),%xmm3
  mulss  %xmm5,%xmm3
  mulss  0x28(%rcx),%xmm5
  subss  %xmm3,%xmm1
  movaps %xmm2,%xmm3
  movss  0x1c(%rcx),%xmm2
  subss  %xmm5,%xmm0
  movss  0xc(%rcx),%xmm5
  mulss  %xmm4,%xmm2
  mulss  %xmm4,%xmm5
  mulss  0x2c(%rcx),%xmm4
  add    %r10,%rcx
  subss  %xmm2,%xmm1
  subss  %xmm5,%xmm3
  subss  %xmm4,%xmm0
  cmp    %r8,%rsi
  jne    L26
  add    $0x1,%r11
  lea    0x8(,%rbx,4),%ecx
  imul   %r10,%r11
  add    %r11,%rdx
  cmp    %ecx,%eax
  jg     L152
L109:
  addss  0x8(%r9),%xmm0
  mulss  0x8(%rbp),%xmm0
  addss  (%r9),%xmm3
  addss  0x4(%r9),%xmm1
  movaps %xmm3,%xmm2
  movss  %xmm0,0x8(%r15)
  movss  0x8(%rdi),%xmm3
  mulss  %xmm0,%xmm3
  mulss  0x18(%rdi),%xmm0
  subss  %xmm3,%xmm2
  subss  %xmm0,%xmm1
  mulss  0x4(%rbp),%xmm1
  movaps %xmm2,%xmm0
  movss  %xmm1,0x4(%r15)
  mulss  0x4(%rdi),%xmm1
  subss  %xmm1,%xmm0
  mulss  0x0(%rbp),%xmm0
  movss  %xmm0,(%r15)
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  xchg   %ax,%ax
L70:
  pxor   %xmm0,%xmm0
  mov    $0x3,%ecx
  lea    0xc(%rsi),%rdx
  add    $0x4,%r8
  movaps %xmm0,%xmm1
  movaps %xmm0,%xmm3
  cmp    %ecx,%eax
  jle    L109
L152:
  mov    %eax,%r10d
  mov    $0x1,%esi
  sub    %ecx,%r10d
  cmp    %eax,%ecx
  cmovl  %r10d,%esi
  sub    $0x1,%r10d
  cmp    $0x2,%r10d
  jbe    L151
  cmp    %eax,%ecx
  jge    L151
  mov    %esi,%r11d
  lea    0x10(%rdx),%rbx
  lea    0x20(%rdx),%rcx
  shr    $0x2,%r11d
  lea    -0x1(%r11),%eax
  cmp    $0x1,%eax
  jbe    L28
  lea    -0x3(%r11),%r13d
  movups 0x10(%rdx),%xmm6
  movups (%rdx),%xmm4
  mov    %r8,%r10
  and    $0xfffffffe,%r13d
  xor    %r14d,%r14d
  mov    %r8,%rbx
  lea    0x2(%r13),%eax
L58:
  movups (%r10),%xmm5
  lea    0x10(%rcx),%r8
  mov    %rcx,%r12
  add    $0x20,%r10
  mov    %r8,-0x10(%rsp)
  mov    %r14d,%r8d
  add    $0x20,%rcx
  add    $0x2,%r14d
  mulps  %xmm5,%xmm4
  subss  %xmm4,%xmm3
  movaps %xmm3,%xmm2
  movaps %xmm4,%xmm3
  shufps $0x55,%xmm4,%xmm3
  subss  %xmm3,%xmm2
  movaps %xmm4,%xmm3
  unpckhps %xmm4,%xmm3
  shufps $0xff,%xmm4,%xmm4
  subss  %xmm3,%xmm2
  subss  %xmm4,%xmm2
  movaps %xmm5,%xmm4
  mulps  %xmm6,%xmm4
  subss  %xmm4,%xmm1
  movaps %xmm4,%xmm3
  shufps $0x55,%xmm4,%xmm3
  subss  %xmm3,%xmm1
  movaps %xmm4,%xmm3
  unpckhps %xmm4,%xmm3
  shufps $0xff,%xmm4,%xmm4
  subss  %xmm3,%xmm1
  subss  %xmm4,%xmm1
  movups -0x20(%rcx),%xmm4
  mulps  %xmm4,%xmm5
  subss  %xmm5,%xmm0
  movaps %xmm5,%xmm3
  shufps $0x55,%xmm5,%xmm3
  subss  %xmm3,%xmm0
  movaps %xmm5,%xmm3
  unpckhps %xmm5,%xmm3
  shufps $0xff,%xmm5,%xmm5
  subss  %xmm3,%xmm0
  subss  %xmm5,%xmm0
  movups -0x10(%r10),%xmm5
  mulps  %xmm5,%xmm6
  subss  %xmm6,%xmm2
  movaps %xmm6,%xmm3
  shufps $0x55,%xmm6,%xmm3
  subss  %xmm3,%xmm2
  movaps %xmm6,%xmm3
  unpckhps %xmm6,%xmm3
  shufps $0xff,%xmm6,%xmm6
  subss  %xmm3,%xmm2
  movaps %xmm2,%xmm3
  movaps %xmm4,%xmm2
  mulps  %xmm5,%xmm2
  subss  %xmm6,%xmm3
  subss  %xmm2,%xmm1
  movaps %xmm2,%xmm6
  shufps $0x55,%xmm2,%xmm6
  subss  %xmm6,%xmm1
  movaps %xmm2,%xmm6
  unpckhps %xmm2,%xmm6
  shufps $0xff,%xmm2,%xmm2
  subss  %xmm6,%xmm1
  movups -0x10(%rcx),%xmm6
  mulps  %xmm6,%xmm5
  subss  %xmm2,%xmm1
  subss  %xmm5,%xmm0
  movaps %xmm5,%xmm2
  shufps $0x55,%xmm5,%xmm5
  subss  %xmm5,%xmm0
  movaps %xmm2,%xmm5
  unpckhps %xmm2,%xmm5
  shufps $0xff,%xmm2,%xmm2
  subss  %xmm5,%xmm0
  subss  %xmm2,%xmm0
  cmp    %r13d,%r8d
  jne    L58
  mov    %rbx,%r8
  mov    -0x10(%rsp),%rbx
L149:
  xor    %r13d,%r13d
  xchg   %ax,%ax
L46:
  movups (%r10,%r13,1),%xmm4
  movups (%r12,%r13,1),%xmm2
  add    $0x1,%eax
  mulps  %xmm4,%xmm2
  subss  %xmm2,%xmm3
  movaps %xmm2,%xmm5
  shufps $0x55,%xmm2,%xmm5
  subss  %xmm5,%xmm3
  movaps %xmm2,%xmm5
  unpckhps %xmm2,%xmm5
  shufps $0xff,%xmm2,%xmm2
  subss  %xmm5,%xmm3
  subss  %xmm2,%xmm3
  movups (%rbx,%r13,1),%xmm2
  mulps  %xmm4,%xmm2
  subss  %xmm2,%xmm1
  movaps %xmm2,%xmm5
  shufps $0x55,%xmm2,%xmm5
  subss  %xmm5,%xmm1
  movaps %xmm2,%xmm5
  unpckhps %xmm2,%xmm5
  shufps $0xff,%xmm2,%xmm2
  subss  %xmm5,%xmm1
  subss  %xmm2,%xmm1
  movups (%rcx,%r13,1),%xmm2
  add    $0x10,%r13
  mulps  %xmm4,%xmm2
  subss  %xmm2,%xmm0
  movaps %xmm2,%xmm4
  shufps $0x55,%xmm2,%xmm4
  subss  %xmm4,%xmm0
  movaps %xmm2,%xmm4
  unpckhps %xmm2,%xmm4
  shufps $0xff,%xmm2,%xmm2
  subss  %xmm4,%xmm0
  subss  %xmm2,%xmm0
  cmp    %eax,%r11d
  ja     L46
  mov    %esi,%r10d
  and    $0xfffffffc,%r10d
  mov    %r10d,%ecx
  shl    $0x2,%rcx
  lea    (%rdx,%rcx,1),%rax
  add    %r8,%rcx
  cmp    %esi,%r10d
  je     L109
L102:
  sub    %r10d,%esi
  cmp    $0x1,%esi
  je     L167
  lea    0x0(,%r10,4),%r11
  movq   (%r8,%r10,4),%xmm5
  mov    %esi,%r8d
  movq   (%rdx,%r10,4),%xmm4
  movq   0x10(%rdx,%r11,1),%xmm2
  and    $0xfffffffe,%r8d
  mulps  %xmm5,%xmm4
  mulps  %xmm5,%xmm2
  subss  %xmm4,%xmm3
  shufps $0xe5,%xmm4,%xmm4
  subss  %xmm2,%xmm1
  shufps $0xe5,%xmm2,%xmm2
  subss  %xmm4,%xmm3
  subss  %xmm2,%xmm1
  movq   0x20(%rdx,%r11,1),%xmm2
  mov    %r8d,%edx
  shl    $0x2,%rdx
  mulps  %xmm5,%xmm2
  add    %rdx,%rax
  add    %rdx,%rcx
  subss  %xmm2,%xmm0
  shufps $0xe5,%xmm2,%xmm2
  subss  %xmm2,%xmm0
  cmp    %r8d,%esi
  je     L109
L167:
  movss  (%rcx),%xmm2
  movss  (%rax),%xmm4
  mulss  %xmm2,%xmm4
  subss  %xmm4,%xmm3
  movss  0x10(%rax),%xmm4
  mulss  %xmm2,%xmm4
  mulss  0x20(%rax),%xmm2
  subss  %xmm4,%xmm1
  subss  %xmm2,%xmm0
  jmp    L109
L156:
  mov    %rsi,%r8
  mov    $0x4,%ecx
  jmp    L152
L151:
  mov    %r8,%rcx
  mov    %rdx,%rax
  xor    %r10d,%r10d
  jmp    L102
L28:
  mov    %rdx,%r12
  mov    %r8,%r10
  xor    %eax,%eax
  jmp    L149
```

assistant: ```c
void kernel_strsv_lt_inv_3_lib4(int kmax, float *A, int sda, float *inv_diag_A, float *x, float *y, float *z) {
  const int bs = 4;
  int k;
  float *tA, *tx;
  tA = A;
  tx = x;
  float x_0, x_1, x_2, x_3, y_0 = 0, y_1 = 0, y_2 = 0;
  k = 3;
  if (kmax > 4) {
    x_3 = x[3];
    y_0 -= A[3 + bs * 0] * x_3;
    y_1 -= A[3 + bs * 1] * x_3;
    y_2 -= A[3 + bs * 2] * x_3;
    k = 4;
    A += 4 + (sda - 1) * bs;
    x += 4;
    for (; k < kmax - 3; k += 4) {
      x_0 = x[0];
      x_1 = x[1];
      x_2 = x[2];
      x_3 = x[3];
      y_0 -= A[0 + bs * 0] * x_0;
      y_1 -= A[0 + bs * 1] * x_0;
      y_2 -= A[0 + bs * 2] * x_0;
      y_0 -= A[1 + bs * 0] * x_1;
      y_1 -= A[1 + bs * 1] * x_1;
      y_2 -= A[1 + bs * 2] * x_1;
      y_0 -= A[2 + bs * 0] * x_2;
      y_1 -= A[2 + bs * 1] * x_2;
      y_2 -= A[2 + bs * 2] * x_2;
      y_0 -= A[3 + bs * 0] * x_3;
      y_1 -= A[3 + bs * 1] * x_3;
      y_2 -= A[3 + bs * 2] * x_3;
      A += sda * bs;
      x += 4;
    }
  } else {
    A += 3;
    x += 1;
  }
  for (; k < kmax; k++) {
    x_0 = x[0];
    y_0 -= A[0 + bs * 0] * x_0;
    y_1 -= A[0 + bs * 1] * x_0;
    y_2 -= A[0 + bs * 2] * x_0;
    A += 1;
    x += 1;
  }
  y_0 = y[0] + y_0;
  y_1 = y[1] + y_1;
  y_2 = y[2] + y_2;
  A = tA;
  x = tx;
  y_2 *= inv_diag_A[2];
  z[2] = y_2;
  y_0 -= A[2 + bs * 0] * y_2;
  y_1 -= A[2 + bs * 1] * y_2;
  y_1 *= inv_diag_A[1];
  z[1] = y_1;
  y_0 -= A[1 + bs * 0] * y_1;
  y_0 *= inv_diag_A[0];
  z[0] = y_0;
}
```