user: Converte this assembly snippet into its equivalent C code:

```asm
<matrix_multiply3x4>:
  endbr64
  mov    %rdi,%rcx
  lea    0x3c(%rdx),%r11
  mov    %rdx,%rax
  push   %rbp
  lea    0xc(%rcx),%rdx
  lea    0x10(%rdi),%r8
  add    $0x20,%rdi
  push   %rbx
  cmp    %rdx,%rax
  lea    0x4(%rsi),%r9
  lea    0x30(%rcx),%r10
  setae  %dl
  cmp    %rcx,%r11
  setbe  %bl
  or     %ebx,%edx
  mov    %rcx,%rbx
  sub    %r9,%rbx
  cmp    $0x30,%rbx
  seta   %bl
  and    %ebx,%edx
  lea    0x1c(%rcx),%rbx
  cmp    %rbx,%rax
  setae  %bl
  cmp    %r8,%r11
  setbe  %bpl
  or     %ebp,%ebx
  and    %ebx,%edx
  lea    0x2c(%rcx),%rbx
  cmp    %rbx,%rax
  setae  %bl
  cmp    %rdi,%r11
  setbe  %bpl
  or     %ebp,%ebx
  and    %ebx,%edx
  lea    0x3c(%rcx),%rbx
  cmp    %rbx,%rax
  setae  %bl
  cmp    %r10,%r11
  setbe  %r11b
  sub    %r9,%r8
  or     %ebx,%r11d
  and    %r11d,%edx
  cmp    $0x30,%r8
  seta   %r8b
  sub    %r9,%rdi
  and    %r8d,%edx
  cmp    $0x30,%rdi
  seta   %dil
  test   %dil,%dl
  je     L22
  sub    %r9,%r10
  cmp    $0x30,%r10
  jbe    L22
  movq   (%rsi),%xmm10
  movq   0x10(%rsi),%xmm9
  movss  (%rax),%xmm3
  movss  0x4(%rax),%xmm13
  movq   0x20(%rsi),%xmm7
  movss  0x8(%rax),%xmm12
  shufps $0xe0,%xmm3,%xmm3
  shufps $0xe0,%xmm13,%xmm13
  mulps  %xmm10,%xmm3
  movss  0x14(%rax),%xmm15
  mulps  %xmm9,%xmm13
  shufps $0xe0,%xmm12,%xmm12
  movss  0x10(%rax),%xmm2
  movss  0x18(%rax),%xmm14
  mulps  %xmm7,%xmm12
  movss  0x20(%rax),%xmm1
  movss  0x30(%rax),%xmm0
  movss  0x24(%rax),%xmm11
  movss  0x28(%rax),%xmm8
  shufps $0xe0,%xmm2,%xmm2
  mulps  %xmm10,%xmm2
  movss  0x34(%rax),%xmm5
  movss  0x38(%rax),%xmm4
  shufps $0xe0,%xmm1,%xmm1
  mulps  %xmm10,%xmm1
  movq   0x30(%rsi),%xmm6
  shufps $0xe0,%xmm0,%xmm0
  mulps  %xmm10,%xmm0
  addps  %xmm13,%xmm3
  addps  %xmm12,%xmm3
  movlps %xmm3,(%rcx)
  movaps %xmm15,%xmm3
  shufps $0xe0,%xmm3,%xmm3
  mulps  %xmm9,%xmm3
  addps  %xmm3,%xmm2
  movaps %xmm14,%xmm3
  shufps $0xe0,%xmm3,%xmm3
  mulps  %xmm7,%xmm3
  addps  %xmm3,%xmm2
  movlps %xmm2,0x10(%rcx)
  movaps %xmm11,%xmm2
  shufps $0xe0,%xmm2,%xmm2
  mulps  %xmm9,%xmm2
  addps  %xmm2,%xmm1
  movaps %xmm8,%xmm2
  shufps $0xe0,%xmm2,%xmm2
  mulps  %xmm7,%xmm2
  addps  %xmm2,%xmm1
  movlps %xmm1,0x20(%rcx)
  movaps %xmm5,%xmm1
  shufps $0xe0,%xmm1,%xmm1
  mulps  %xmm9,%xmm1
  addps  %xmm1,%xmm0
  movaps %xmm4,%xmm1
  shufps $0xe0,%xmm1,%xmm1
  mulps  %xmm7,%xmm1
  addps  %xmm1,%xmm0
  addps  %xmm6,%xmm0
  movlps %xmm0,0x30(%rcx)
L26:
  movss  0x8(%rsi),%xmm0
  movss  0x18(%rsi),%xmm2
  movss  (%rax),%xmm3
  movss  0x4(%rax),%xmm5
  movss  0x28(%rsi),%xmm1
  movss  0x38(%rsi),%xmm4
  mulss  %xmm2,%xmm5
  pop    %rbx
  pop    %rbp
  mulss  %xmm0,%xmm3
  addss  %xmm5,%xmm3
  movss  0x8(%rax),%xmm5
  mulss  %xmm1,%xmm5
  addss  %xmm5,%xmm3
  movss  %xmm3,0x8(%rcx)
  movss  0x10(%rax),%xmm3
  movss  0x14(%rax),%xmm5
  mulss  %xmm0,%xmm3
  mulss  %xmm2,%xmm5
  addss  %xmm5,%xmm3
  movss  0x18(%rax),%xmm5
  mulss  %xmm1,%xmm5
  addss  %xmm5,%xmm3
  movss  %xmm3,0x18(%rcx)
  movss  0x20(%rax),%xmm3
  movss  0x24(%rax),%xmm5
  mulss  %xmm0,%xmm3
  mulss  %xmm2,%xmm5
  addss  %xmm5,%xmm3
  movss  0x28(%rax),%xmm5
  mulss  %xmm1,%xmm5
  addss  %xmm5,%xmm3
  movss  %xmm3,0x28(%rcx)
  mulss  0x30(%rax),%xmm0
  mulss  0x34(%rax),%xmm2
  mulss  0x38(%rax),%xmm1
  movl   $0x0,0xc(%rcx)
  movl   $0x0,0x1c(%rcx)
  movl   $0x0,0x2c(%rcx)
  movl   $0x3f800000,0x3c(%rcx)
  addss  %xmm2,%xmm0
  addss  %xmm1,%xmm0
  addss  %xmm4,%xmm0
  movss  %xmm0,0x38(%rcx)
  ret
  nopw   0x0(%rax,%rax,1)
L22:
  movss  (%rsi),%xmm0
  movss  0x10(%rsi),%xmm2
  movss  (%rax),%xmm3
  movss  0x4(%rax),%xmm5
  movss  0x20(%rsi),%xmm1
  movss  0x30(%rsi),%xmm4
  mulss  %xmm2,%xmm5
  mulss  %xmm0,%xmm3
  addss  %xmm5,%xmm3
  movss  0x8(%rax),%xmm5
  mulss  %xmm1,%xmm5
  addss  %xmm5,%xmm3
  movss  %xmm3,(%rcx)
  movss  0x10(%rax),%xmm3
  movss  0x14(%rax),%xmm5
  mulss  %xmm0,%xmm3
  mulss  %xmm2,%xmm5
  addss  %xmm5,%xmm3
  movss  0x18(%rax),%xmm5
  mulss  %xmm1,%xmm5
  addss  %xmm5,%xmm3
  movss  %xmm3,0x10(%rcx)
  movss  0x20(%rax),%xmm3
  movss  0x24(%rax),%xmm5
  mulss  %xmm0,%xmm3
  mulss  %xmm2,%xmm5
  addss  %xmm5,%xmm3
  movss  0x28(%rax),%xmm5
  mulss  %xmm1,%xmm5
  addss  %xmm5,%xmm3
  movss  %xmm3,0x20(%rcx)
  mulss  0x34(%rax),%xmm2
  mulss  0x30(%rax),%xmm0
  mulss  0x38(%rax),%xmm1
  addss  %xmm2,%xmm0
  addss  %xmm1,%xmm0
  addss  %xmm4,%xmm0
  movss  %xmm0,0x30(%rcx)
  movss  0x4(%rsi),%xmm0
  movss  0x14(%rsi),%xmm2
  movss  (%rax),%xmm3
  movss  0x4(%rax),%xmm5
  movss  0x24(%rsi),%xmm1
  movss  0x34(%rsi),%xmm4
  mulss  %xmm2,%xmm5
  mulss  %xmm0,%xmm3
  addss  %xmm5,%xmm3
  movss  0x8(%rax),%xmm5
  mulss  %xmm1,%xmm5
  addss  %xmm5,%xmm3
  movss  %xmm3,0x4(%rcx)
  movss  0x10(%rax),%xmm3
  movss  0x14(%rax),%xmm5
  mulss  %xmm0,%xmm3
  mulss  %xmm2,%xmm5
  addss  %xmm5,%xmm3
  movss  0x18(%rax),%xmm5
  mulss  %xmm1,%xmm5
  addss  %xmm5,%xmm3
  movss  %xmm3,0x14(%rcx)
  movss  0x20(%rax),%xmm3
  movss  0x24(%rax),%xmm5
  mulss  %xmm0,%xmm3
  mulss  %xmm2,%xmm5
  addss  %xmm5,%xmm3
  movss  0x28(%rax),%xmm5
  mulss  %xmm1,%xmm5
  addss  %xmm5,%xmm3
  movss  %xmm3,0x24(%rcx)
  mulss  0x30(%rax),%xmm0
  mulss  0x34(%rax),%xmm2
  mulss  0x38(%rax),%xmm1
  addss  %xmm2,%xmm0
  addss  %xmm1,%xmm0
  addss  %xmm4,%xmm0
  movss  %xmm0,0x34(%rcx)
  jmp    L26
```

assistant: ```c
void matrix_multiply3x4(float *result, const float *a, const float *b) {
  int i;
  for (i = 0; i < 3; i++) {
    const float ai0 = a[(0 << 2) + i], ai1 = a[(1 << 2) + i], ai2 = a[(2 << 2) + i], ai3 = a[(3 << 2) + i];
    result[(0 << 2) + i] = ai0 * b[(0 << 2) + 0] + ai1 * b[(0 << 2) + 1] + ai2 * b[(0 << 2) + 2];
    result[(1 << 2) + i] = ai0 * b[(1 << 2) + 0] + ai1 * b[(1 << 2) + 1] + ai2 * b[(1 << 2) + 2];
    result[(2 << 2) + i] = ai0 * b[(2 << 2) + 0] + ai1 * b[(2 << 2) + 1] + ai2 * b[(2 << 2) + 2];
    result[(3 << 2) + i] = ai0 * b[(3 << 2) + 0] + ai1 * b[(3 << 2) + 1] + ai2 * b[(3 << 2) + 2] + ai3;
  }
  result[(0 << 2) + 3] = 0;
  result[(1 << 2) + 3] = 0;
  result[(2 << 2) + 3] = 0;
  result[(3 << 2) + 3] = 1;
}
```