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

```asm
<mat4_ortho>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  add    $0xffffffffffffff80,%rsp
  mov    %rdi,-0x68(%rbp)
  movss  %xmm0,-0x6c(%rbp)
  movss  %xmm1,-0x70(%rbp)
  movss  %xmm2,-0x74(%rbp)
  movss  %xmm3,-0x78(%rbp)
  movss  %xmm4,-0x7c(%rbp)
  movss  %xmm5,-0x80(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movss  -0x70(%rbp),%xmm0
  addss  -0x6c(%rbp),%xmm0
  movss  D25(%rip),%xmm1
  xorps  %xmm1,%xmm0
  movss  -0x70(%rbp),%xmm1
  subss  -0x6c(%rbp),%xmm1
  divss  %xmm1,%xmm0
  movss  %xmm0,-0x5c(%rbp)
  movss  -0x78(%rbp),%xmm0
  addss  -0x74(%rbp),%xmm0
  movss  D25(%rip),%xmm1
  xorps  %xmm1,%xmm0
  movss  -0x78(%rbp),%xmm1
  subss  -0x74(%rbp),%xmm1
  divss  %xmm1,%xmm0
  movss  %xmm0,-0x58(%rbp)
  movss  -0x80(%rbp),%xmm0
  addss  -0x7c(%rbp),%xmm0
  movss  D25(%rip),%xmm1
  xorps  %xmm1,%xmm0
  movss  -0x80(%rbp),%xmm1
  subss  -0x7c(%rbp),%xmm1
  divss  %xmm1,%xmm0
  movss  %xmm0,-0x54(%rbp)
  movss  -0x70(%rbp),%xmm0
  movaps %xmm0,%xmm1
  subss  -0x6c(%rbp),%xmm1
  movss  D66(%rip),%xmm0
  divss  %xmm1,%xmm0
  movss  %xmm0,-0x50(%rbp)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x4c(%rbp)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x48(%rbp)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x44(%rbp)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x40(%rbp)
  movss  -0x78(%rbp),%xmm0
  movaps %xmm0,%xmm1
  subss  -0x74(%rbp),%xmm1
  movss  D66(%rip),%xmm0
  divss  %xmm1,%xmm0
  movss  %xmm0,-0x3c(%rbp)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x38(%rbp)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x34(%rbp)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x30(%rbp)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x2c(%rbp)
  movss  -0x80(%rbp),%xmm0
  movaps %xmm0,%xmm1
  subss  -0x7c(%rbp),%xmm1
  movss  D34(%rip),%xmm0
  divss  %xmm1,%xmm0
  movss  %xmm0,-0x28(%rbp)
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x24(%rbp)
  movss  -0x5c(%rbp),%xmm0
  movss  %xmm0,-0x20(%rbp)
  movss  -0x58(%rbp),%xmm0
  movss  %xmm0,-0x1c(%rbp)
  movss  -0x54(%rbp),%xmm0
  movss  %xmm0,-0x18(%rbp)
  movss  D68(%rip),%xmm0
  movss  %xmm0,-0x14(%rbp)
  mov    -0x68(%rbp),%rdx
  lea    -0x50(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <mat4_copy@plt>
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L2
  call   <__stack_chk_fail@plt>
L2:
  leave
  ret
```

tool_calls: name: retrieve_data
arguments: label: D25
type_guessed: byte[4]
name: retrieve_data
arguments: label: D66
type_guessed: byte[4]
name: retrieve_data
arguments: label: D34
type_guessed: byte[4]
name: retrieve_data
arguments: label: D68
type_guessed: byte[4]

tool: {"D25": [0x00,0x00,0x00,0x80]}

tool: {"D66": [0x00,0x00,0x00,0x40]}

tool: {"D34": [0x00,0x00,0x00,0xc0]}

tool: {"D68": [0x00,0x00,0x80,0x3f]}

assistant: ```c
void mat4_ortho(float m[4][4], float left, float right, float bottom, float top, float nearval, float farval) {
  float tx = -(right + left) / (right - left);
  float ty = -(top + bottom) / (top - bottom);
  float tz = -(farval + nearval) / (farval - nearval);
  const float ret[4][4] = {
      {2 / (right - left), 0, 0, 0},
      {0, 2 / (top - bottom), 0, 0},
      {0, 0, -2 / (farval - nearval), 0},
      {tx, ty, tz, 1},
  };
  mat4_copy(ret, m);
}
```