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

```asm
<mtxInvert>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %rbx
  sub    $0x98,%rsp
  mov    %rdi,-0x98(%rbp)
  mov    %rsi,-0xa0(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x18(%rbp)
  xor    %eax,%eax
  mov    -0xa0(%rbp),%rdx
  lea    -0x60(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <mtxTranspose@plt>
  mov    -0x98(%rbp),%rax
  mov    %rax,%rdi
  call   <mtxLoadIdentity@plt>
  movl   $0x0,-0x88(%rbp)
  jmp    L1
L88:
  mov    -0x88(%rbp),%eax
  lea    0x0(,%rax,4),%edx
  mov    -0x88(%rbp),%eax
  add    %edx,%eax
  cltq
  movss  -0x60(%rbp,%rax,4),%xmm0
  movss  %xmm0,-0x8c(%rbp)
  mov    -0x88(%rbp),%eax
  mov    %eax,-0x80(%rbp)
  mov    -0x88(%rbp),%eax
  add    $0x4,%eax
  mov    %eax,-0x7c(%rbp)
  mov    -0x88(%rbp),%eax
  add    $0x8,%eax
  mov    %eax,-0x78(%rbp)
  mov    -0x88(%rbp),%eax
  add    $0xc,%eax
  mov    %eax,-0x74(%rbp)
  mov    -0x88(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,-0x84(%rbp)
  jmp    L16
L47:
  mov    -0x88(%rbp),%eax
  lea    0x0(,%rax,4),%edx
  mov    -0x84(%rbp),%eax
  add    %edx,%eax
  cltq
  mov    -0x60(%rbp,%rax,4),%eax
  movd   %eax,%xmm0
  call   <fabsf@plt>
  mov    %rax,%rbx
  mov    -0x8c(%rbp),%eax
  movd   %eax,%xmm0
  call   <fabsf@plt>
  cmp    %rax,%rbx
  jle    L89
  mov    -0x84(%rbp),%eax
  mov    %eax,-0x80(%rbp)
  mov    -0x88(%rbp),%eax
  lea    0x0(,%rax,4),%edx
  mov    -0x84(%rbp),%eax
  add    %edx,%eax
  cltq
  movss  -0x60(%rbp,%rax,4),%xmm0
  movss  %xmm0,-0x8c(%rbp)
L89:
  addl   $0x1,-0x84(%rbp)
L16:
  cmpl   $0x4,-0x84(%rbp)
  jne    L47
  mov    -0x80(%rbp),%eax
  cmp    -0x88(%rbp),%eax
  je     L17
  mov    -0x88(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x98(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  movss  %xmm0,-0x70(%rbp)
  mov    -0x80(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x98(%rbp),%rax
  add    %rax,%rdx
  mov    -0x88(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rcx
  mov    -0x98(%rbp),%rax
  add    %rcx,%rax
  movss  (%rdx),%xmm0
  movss  %xmm0,(%rax)
  mov    -0x80(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x98(%rbp),%rax
  add    %rdx,%rax
  movss  -0x70(%rbp),%xmm0
  movss  %xmm0,(%rax)
  mov    -0x88(%rbp),%eax
  cltq
  movss  -0x60(%rbp,%rax,4),%xmm0
  movss  %xmm0,-0x70(%rbp)
  mov    -0x80(%rbp),%eax
  cltq
  movss  -0x60(%rbp,%rax,4),%xmm0
  mov    -0x88(%rbp),%eax
  cltq
  movss  %xmm0,-0x60(%rbp,%rax,4)
  mov    -0x80(%rbp),%eax
  cltq
  movss  -0x70(%rbp),%xmm0
  movss  %xmm0,-0x60(%rbp,%rax,4)
  addl   $0x4,-0x80(%rbp)
  mov    -0x7c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x98(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  movss  %xmm0,-0x70(%rbp)
  mov    -0x80(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x98(%rbp),%rax
  add    %rax,%rdx
  mov    -0x7c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rcx
  mov    -0x98(%rbp),%rax
  add    %rcx,%rax
  movss  (%rdx),%xmm0
  movss  %xmm0,(%rax)
  mov    -0x80(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x98(%rbp),%rax
  add    %rdx,%rax
  movss  -0x70(%rbp),%xmm0
  movss  %xmm0,(%rax)
  mov    -0x7c(%rbp),%eax
  cltq
  movss  -0x60(%rbp,%rax,4),%xmm0
  movss  %xmm0,-0x70(%rbp)
  mov    -0x80(%rbp),%eax
  cltq
  movss  -0x60(%rbp,%rax,4),%xmm0
  mov    -0x7c(%rbp),%eax
  cltq
  movss  %xmm0,-0x60(%rbp,%rax,4)
  mov    -0x80(%rbp),%eax
  cltq
  movss  -0x70(%rbp),%xmm0
  movss  %xmm0,-0x60(%rbp,%rax,4)
  addl   $0x4,-0x80(%rbp)
  mov    -0x78(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x98(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  movss  %xmm0,-0x70(%rbp)
  mov    -0x80(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x98(%rbp),%rax
  add    %rax,%rdx
  mov    -0x78(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rcx
  mov    -0x98(%rbp),%rax
  add    %rcx,%rax
  movss  (%rdx),%xmm0
  movss  %xmm0,(%rax)
  mov    -0x80(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x98(%rbp),%rax
  add    %rdx,%rax
  movss  -0x70(%rbp),%xmm0
  movss  %xmm0,(%rax)
  mov    -0x78(%rbp),%eax
  cltq
  movss  -0x60(%rbp,%rax,4),%xmm0
  movss  %xmm0,-0x70(%rbp)
  mov    -0x80(%rbp),%eax
  cltq
  movss  -0x60(%rbp,%rax,4),%xmm0
  mov    -0x78(%rbp),%eax
  cltq
  movss  %xmm0,-0x60(%rbp,%rax,4)
  mov    -0x80(%rbp),%eax
  cltq
  movss  -0x70(%rbp),%xmm0
  movss  %xmm0,-0x60(%rbp,%rax,4)
  addl   $0x4,-0x80(%rbp)
  mov    -0x74(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x98(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  movss  %xmm0,-0x70(%rbp)
  mov    -0x80(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x98(%rbp),%rax
  add    %rax,%rdx
  mov    -0x74(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rcx
  mov    -0x98(%rbp),%rax
  add    %rcx,%rax
  movss  (%rdx),%xmm0
  movss  %xmm0,(%rax)
  mov    -0x80(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x98(%rbp),%rax
  add    %rdx,%rax
  movss  -0x70(%rbp),%xmm0
  movss  %xmm0,(%rax)
  mov    -0x74(%rbp),%eax
  cltq
  movss  -0x60(%rbp,%rax,4),%xmm0
  movss  %xmm0,-0x70(%rbp)
  mov    -0x80(%rbp),%eax
  cltq
  movss  -0x60(%rbp,%rax,4),%xmm0
  mov    -0x74(%rbp),%eax
  cltq
  movss  %xmm0,-0x60(%rbp,%rax,4)
  mov    -0x80(%rbp),%eax
  cltq
  movss  -0x70(%rbp),%xmm0
  movss  %xmm0,-0x60(%rbp,%rax,4)
L17:
  movss  -0x8c(%rbp),%xmm0
  ucomiss -0x6c(%rbp),%xmm0
  jp     L85
  movss  -0x8c(%rbp),%xmm0
  ucomiss -0x6c(%rbp),%xmm0
  jne    L85
  mov    -0x98(%rbp),%rax
  mov    %rax,%rdi
  call   <mtxLoadIdentity@plt>
  jmp    L35
L85:
  movss  -0x68(%rbp),%xmm0
  divss  -0x8c(%rbp),%xmm0
  movss  %xmm0,-0x64(%rbp)
  mov    -0x88(%rbp),%eax
  cltq
  movss  -0x60(%rbp,%rax,4),%xmm0
  mulss  -0x64(%rbp),%xmm0
  mov    -0x88(%rbp),%eax
  cltq
  movss  %xmm0,-0x60(%rbp,%rax,4)
  mov    -0x88(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x98(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  mov    -0x88(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x98(%rbp),%rax
  add    %rdx,%rax
  mulss  -0x64(%rbp),%xmm0
  movss  %xmm0,(%rax)
  mov    -0x7c(%rbp),%eax
  cltq
  movss  -0x60(%rbp,%rax,4),%xmm0
  mulss  -0x64(%rbp),%xmm0
  mov    -0x7c(%rbp),%eax
  cltq
  movss  %xmm0,-0x60(%rbp,%rax,4)
  mov    -0x7c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x98(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  mov    -0x7c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x98(%rbp),%rax
  add    %rdx,%rax
  mulss  -0x64(%rbp),%xmm0
  movss  %xmm0,(%rax)
  mov    -0x78(%rbp),%eax
  cltq
  movss  -0x60(%rbp,%rax,4),%xmm0
  mulss  -0x64(%rbp),%xmm0
  mov    -0x78(%rbp),%eax
  cltq
  movss  %xmm0,-0x60(%rbp,%rax,4)
  mov    -0x78(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x98(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  mov    -0x78(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x98(%rbp),%rax
  add    %rdx,%rax
  mulss  -0x64(%rbp),%xmm0
  movss  %xmm0,(%rax)
  mov    -0x74(%rbp),%eax
  cltq
  movss  -0x60(%rbp,%rax,4),%xmm0
  mulss  -0x64(%rbp),%xmm0
  mov    -0x74(%rbp),%eax
  cltq
  movss  %xmm0,-0x60(%rbp,%rax,4)
  mov    -0x74(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x98(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  mov    -0x74(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x98(%rbp),%rax
  add    %rdx,%rax
  mulss  -0x64(%rbp),%xmm0
  movss  %xmm0,(%rax)
  cmpl   $0x0,-0x88(%rbp)
  je     L105
  mov    -0x88(%rbp),%eax
  shl    $0x2,%eax
  cltq
  movss  -0x60(%rbp,%rax,4),%xmm0
  movss  %xmm0,-0x8c(%rbp)
  movss  -0x60(%rbp),%xmm0
  mov    -0x88(%rbp),%eax
  cltq
  movss  -0x60(%rbp,%rax,4),%xmm1
  mulss  -0x8c(%rbp),%xmm1
  subss  %xmm1,%xmm0
  movss  %xmm0,-0x60(%rbp)
  mov    -0x98(%rbp),%rax
  movss  (%rax),%xmm0
  mov    -0x88(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x98(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm1
  mulss  -0x8c(%rbp),%xmm1
  subss  %xmm1,%xmm0
  mov    -0x98(%rbp),%rax
  movss  %xmm0,(%rax)
  movss  -0x50(%rbp),%xmm0
  mov    -0x7c(%rbp),%eax
  cltq
  movss  -0x60(%rbp,%rax,4),%xmm1
  mulss  -0x8c(%rbp),%xmm1
  subss  %xmm1,%xmm0
  movss  %xmm0,-0x50(%rbp)
  mov    -0x98(%rbp),%rax
  add    $0x10,%rax
  movss  (%rax),%xmm0
  mov    -0x7c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x98(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm1
  mulss  -0x8c(%rbp),%xmm1
  mov    -0x98(%rbp),%rax
  add    $0x10,%rax
  subss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
  movss  -0x40(%rbp),%xmm0
  mov    -0x78(%rbp),%eax
  cltq
  movss  -0x60(%rbp,%rax,4),%xmm1
  mulss  -0x8c(%rbp),%xmm1
  subss  %xmm1,%xmm0
  movss  %xmm0,-0x40(%rbp)
  mov    -0x98(%rbp),%rax
  add    $0x20,%rax
  movss  (%rax),%xmm0
  mov    -0x78(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x98(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm1
  mulss  -0x8c(%rbp),%xmm1
  mov    -0x98(%rbp),%rax
  add    $0x20,%rax
  subss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
  movss  -0x30(%rbp),%xmm0
  mov    -0x74(%rbp),%eax
  cltq
  movss  -0x60(%rbp,%rax,4),%xmm1
  mulss  -0x8c(%rbp),%xmm1
  subss  %xmm1,%xmm0
  movss  %xmm0,-0x30(%rbp)
  mov    -0x98(%rbp),%rax
  add    $0x30,%rax
  movss  (%rax),%xmm0
  mov    -0x74(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x98(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm1
  mulss  -0x8c(%rbp),%xmm1
  mov    -0x98(%rbp),%rax
  add    $0x30,%rax
  subss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
L105:
  cmpl   $0x1,-0x88(%rbp)
  je     L132
  mov    -0x88(%rbp),%eax
  shl    $0x2,%eax
  add    $0x1,%eax
  cltq
  movss  -0x60(%rbp,%rax,4),%xmm0
  movss  %xmm0,-0x8c(%rbp)
  movss  -0x5c(%rbp),%xmm0
  mov    -0x88(%rbp),%eax
  cltq
  movss  -0x60(%rbp,%rax,4),%xmm1
  mulss  -0x8c(%rbp),%xmm1
  subss  %xmm1,%xmm0
  movss  %xmm0,-0x5c(%rbp)
  mov    -0x98(%rbp),%rax
  add    $0x4,%rax
  movss  (%rax),%xmm0
  mov    -0x88(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x98(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm1
  mulss  -0x8c(%rbp),%xmm1
  mov    -0x98(%rbp),%rax
  add    $0x4,%rax
  subss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
  movss  -0x4c(%rbp),%xmm0
  mov    -0x7c(%rbp),%eax
  cltq
  movss  -0x60(%rbp,%rax,4),%xmm1
  mulss  -0x8c(%rbp),%xmm1
  subss  %xmm1,%xmm0
  movss  %xmm0,-0x4c(%rbp)
  mov    -0x98(%rbp),%rax
  add    $0x14,%rax
  movss  (%rax),%xmm0
  mov    -0x7c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x98(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm1
  mulss  -0x8c(%rbp),%xmm1
  mov    -0x98(%rbp),%rax
  add    $0x14,%rax
  subss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
  movss  -0x3c(%rbp),%xmm0
  mov    -0x78(%rbp),%eax
  cltq
  movss  -0x60(%rbp,%rax,4),%xmm1
  mulss  -0x8c(%rbp),%xmm1
  subss  %xmm1,%xmm0
  movss  %xmm0,-0x3c(%rbp)
  mov    -0x98(%rbp),%rax
  add    $0x24,%rax
  movss  (%rax),%xmm0
  mov    -0x78(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x98(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm1
  mulss  -0x8c(%rbp),%xmm1
  mov    -0x98(%rbp),%rax
  add    $0x24,%rax
  subss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
  movss  -0x2c(%rbp),%xmm0
  mov    -0x74(%rbp),%eax
  cltq
  movss  -0x60(%rbp,%rax,4),%xmm1
  mulss  -0x8c(%rbp),%xmm1
  subss  %xmm1,%xmm0
  movss  %xmm0,-0x2c(%rbp)
  mov    -0x98(%rbp),%rax
  add    $0x34,%rax
  movss  (%rax),%xmm0
  mov    -0x74(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x98(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm1
  mulss  -0x8c(%rbp),%xmm1
  mov    -0x98(%rbp),%rax
  add    $0x34,%rax
  subss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
L132:
  cmpl   $0x2,-0x88(%rbp)
  je     L81
  mov    -0x88(%rbp),%eax
  shl    $0x2,%eax
  add    $0x2,%eax
  cltq
  movss  -0x60(%rbp,%rax,4),%xmm0
  movss  %xmm0,-0x8c(%rbp)
  movss  -0x58(%rbp),%xmm0
  mov    -0x88(%rbp),%eax
  cltq
  movss  -0x60(%rbp,%rax,4),%xmm1
  mulss  -0x8c(%rbp),%xmm1
  subss  %xmm1,%xmm0
  movss  %xmm0,-0x58(%rbp)
  mov    -0x98(%rbp),%rax
  add    $0x8,%rax
  movss  (%rax),%xmm0
  mov    -0x88(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x98(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm1
  mulss  -0x8c(%rbp),%xmm1
  mov    -0x98(%rbp),%rax
  add    $0x8,%rax
  subss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
  movss  -0x48(%rbp),%xmm0
  mov    -0x7c(%rbp),%eax
  cltq
  movss  -0x60(%rbp,%rax,4),%xmm1
  mulss  -0x8c(%rbp),%xmm1
  subss  %xmm1,%xmm0
  movss  %xmm0,-0x48(%rbp)
  mov    -0x98(%rbp),%rax
  add    $0x18,%rax
  movss  (%rax),%xmm0
  mov    -0x7c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x98(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm1
  mulss  -0x8c(%rbp),%xmm1
  mov    -0x98(%rbp),%rax
  add    $0x18,%rax
  subss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
  movss  -0x38(%rbp),%xmm0
  mov    -0x78(%rbp),%eax
  cltq
  movss  -0x60(%rbp,%rax,4),%xmm1
  mulss  -0x8c(%rbp),%xmm1
  subss  %xmm1,%xmm0
  movss  %xmm0,-0x38(%rbp)
  mov    -0x98(%rbp),%rax
  add    $0x28,%rax
  movss  (%rax),%xmm0
  mov    -0x78(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x98(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm1
  mulss  -0x8c(%rbp),%xmm1
  mov    -0x98(%rbp),%rax
  add    $0x28,%rax
  subss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
  movss  -0x28(%rbp),%xmm0
  mov    -0x74(%rbp),%eax
  cltq
  movss  -0x60(%rbp,%rax,4),%xmm1
  mulss  -0x8c(%rbp),%xmm1
  subss  %xmm1,%xmm0
  movss  %xmm0,-0x28(%rbp)
  mov    -0x98(%rbp),%rax
  add    $0x38,%rax
  movss  (%rax),%xmm0
  mov    -0x74(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x98(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm1
  mulss  -0x8c(%rbp),%xmm1
  mov    -0x98(%rbp),%rax
  add    $0x38,%rax
  subss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
L81:
  cmpl   $0x3,-0x88(%rbp)
  je     L137
  mov    -0x88(%rbp),%eax
  shl    $0x2,%eax
  add    $0x3,%eax
  cltq
  movss  -0x60(%rbp,%rax,4),%xmm0
  movss  %xmm0,-0x8c(%rbp)
  movss  -0x54(%rbp),%xmm0
  mov    -0x88(%rbp),%eax
  cltq
  movss  -0x60(%rbp,%rax,4),%xmm1
  mulss  -0x8c(%rbp),%xmm1
  subss  %xmm1,%xmm0
  movss  %xmm0,-0x54(%rbp)
  mov    -0x98(%rbp),%rax
  add    $0xc,%rax
  movss  (%rax),%xmm0
  mov    -0x88(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x98(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm1
  mulss  -0x8c(%rbp),%xmm1
  mov    -0x98(%rbp),%rax
  add    $0xc,%rax
  subss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
  movss  -0x44(%rbp),%xmm0
  mov    -0x7c(%rbp),%eax
  cltq
  movss  -0x60(%rbp,%rax,4),%xmm1
  mulss  -0x8c(%rbp),%xmm1
  subss  %xmm1,%xmm0
  movss  %xmm0,-0x44(%rbp)
  mov    -0x98(%rbp),%rax
  add    $0x1c,%rax
  movss  (%rax),%xmm0
  mov    -0x7c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x98(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm1
  mulss  -0x8c(%rbp),%xmm1
  mov    -0x98(%rbp),%rax
  add    $0x1c,%rax
  subss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
  movss  -0x34(%rbp),%xmm0
  mov    -0x78(%rbp),%eax
  cltq
  movss  -0x60(%rbp,%rax,4),%xmm1
  mulss  -0x8c(%rbp),%xmm1
  subss  %xmm1,%xmm0
  movss  %xmm0,-0x34(%rbp)
  mov    -0x98(%rbp),%rax
  add    $0x2c,%rax
  movss  (%rax),%xmm0
  mov    -0x78(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x98(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm1
  mulss  -0x8c(%rbp),%xmm1
  mov    -0x98(%rbp),%rax
  add    $0x2c,%rax
  subss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
  movss  -0x24(%rbp),%xmm0
  mov    -0x74(%rbp),%eax
  cltq
  movss  -0x60(%rbp,%rax,4),%xmm1
  mulss  -0x8c(%rbp),%xmm1
  subss  %xmm1,%xmm0
  movss  %xmm0,-0x24(%rbp)
  mov    -0x98(%rbp),%rax
  add    $0x3c,%rax
  movss  (%rax),%xmm0
  mov    -0x74(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x98(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm1
  mulss  -0x8c(%rbp),%xmm1
  mov    -0x98(%rbp),%rax
  add    $0x3c,%rax
  subss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
L137:
  addl   $0x1,-0x88(%rbp)
L1:
  cmpl   $0x4,-0x88(%rbp)
  jne    L88
L35:
  mov    -0x18(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L126
  call   <__stack_chk_fail@plt>
L126:
  mov    -0x8(%rbp),%rbx
  leave
  ret
```

assistant: ```c
void mtxInvert(float *mtx, const float *src) {
  float tmp[16];
  float val, val2, val_inv, zero, one;
  int i, j, i4, i8, i12, ind;
  mtxTranspose(tmp, src);
  mtxLoadIdentity(mtx);
  for (i = 0; i != 4; i++) {
    val = tmp[(i << 2) + i];
    ind = i;
    i4 = i + 4;
    i8 = i + 8;
    i12 = i + 12;
    for (j = i + 1; j != 4; j++) {
      if (fabsf(tmp[(i << 2) + j]) > fabsf(val)) {
        ind = j;
        val = tmp[(i << 2) + j];
      }
    }
    if (ind != i) {
      val2 = mtx[i];
      mtx[i] = mtx[ind];
      mtx[ind] = val2;
      val2 = tmp[i];
      tmp[i] = tmp[ind];
      tmp[ind] = val2;
      ind += 4;
      val2 = mtx[i4];
      mtx[i4] = mtx[ind];
      mtx[ind] = val2;
      val2 = tmp[i4];
      tmp[i4] = tmp[ind];
      tmp[ind] = val2;
      ind += 4;
      val2 = mtx[i8];
      mtx[i8] = mtx[ind];
      mtx[ind] = val2;
      val2 = tmp[i8];
      tmp[i8] = tmp[ind];
      tmp[ind] = val2;
      ind += 4;
      val2 = mtx[i12];
      mtx[i12] = mtx[ind];
      mtx[ind] = val2;
      val2 = tmp[i12];
      tmp[i12] = tmp[ind];
      tmp[ind] = val2;
    }
    if (val == zero) {
      mtxLoadIdentity(mtx);
      return;
    }
    val_inv = one / val;
    tmp[i] *= val_inv;
    mtx[i] *= val_inv;
    tmp[i4] *= val_inv;
    mtx[i4] *= val_inv;
    tmp[i8] *= val_inv;
    mtx[i8] *= val_inv;
    tmp[i12] *= val_inv;
    mtx[i12] *= val_inv;
    if (i != 0) {
      val = tmp[i << 2];
      tmp[0] -= tmp[i] * val;
      mtx[0] -= mtx[i] * val;
      tmp[4] -= tmp[i4] * val;
      mtx[4] -= mtx[i4] * val;
      tmp[8] -= tmp[i8] * val;
      mtx[8] -= mtx[i8] * val;
      tmp[12] -= tmp[i12] * val;
      mtx[12] -= mtx[i12] * val;
    }
    if (i != 1) {
      val = tmp[(i << 2) + 1];
      tmp[1] -= tmp[i] * val;
      mtx[1] -= mtx[i] * val;
      tmp[5] -= tmp[i4] * val;
      mtx[5] -= mtx[i4] * val;
      tmp[9] -= tmp[i8] * val;
      mtx[9] -= mtx[i8] * val;
      tmp[13] -= tmp[i12] * val;
      mtx[13] -= mtx[i12] * val;
    }
    if (i != 2) {
      val = tmp[(i << 2) + 2];
      tmp[2] -= tmp[i] * val;
      mtx[2] -= mtx[i] * val;
      tmp[6] -= tmp[i4] * val;
      mtx[6] -= mtx[i4] * val;
      tmp[10] -= tmp[i8] * val;
      mtx[10] -= mtx[i8] * val;
      tmp[14] -= tmp[i12] * val;
      mtx[14] -= mtx[i12] * val;
    }
    if (i != 3) {
      val = tmp[(i << 2) + 3];
      tmp[3] -= tmp[i] * val;
      mtx[3] -= mtx[i] * val;
      tmp[7] -= tmp[i4] * val;
      mtx[7] -= mtx[i4] * val;
      tmp[11] -= tmp[i8] * val;
      mtx[11] -= mtx[i8] * val;
      tmp[15] -= tmp[i12] * val;
      mtx[15] -= mtx[i12] * val;
    }
  }
}
```