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

```asm
<fiat_p384_from_bytes>:
  endbr64
  push   %r15
  mov    %rdi,%rdx
  mov    %rsi,%rax
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  mov    0x28(%rsi),%r13d
  mov    0x30(%rsi),%ecx
  mov    0x48(%rsi),%r12d
  shl    $0x8,%r13d
  add    0x20(%rsi),%r13d
  mov    0x68(%rsi),%ebp
  shl    $0x10,%ecx
  shl    $0x8,%r12d
  add    0x40(%rsi),%r12d
  mov    0x88(%rsi),%ebx
  add    %ecx,%r13d
  mov    0x38(%rsi),%ecx
  shl    $0x8,%ebp
  add    0x60(%rsi),%ebp
  shl    $0x8,%ebx
  add    0x80(%rsi),%ebx
  mov    0xa8(%rsi),%r11d
  shl    $0x18,%ecx
  mov    0xc8(%rsi),%r10d
  mov    0xe8(%rsi),%r9d
  add    %ecx,%r13d
  mov    0x50(%rsi),%ecx
  shl    $0x8,%r11d
  add    0xa0(%rsi),%r11d
  shl    $0x8,%r10d
  add    0xc0(%rsi),%r10d
  shl    $0x10,%ecx
  add    %ecx,%r12d
  mov    0x58(%rsi),%ecx
  shl    $0x18,%ecx
  add    %ecx,%r12d
  mov    0x70(%rsi),%ecx
  shl    $0x10,%ecx
  add    %ecx,%ebp
  mov    0x78(%rsi),%ecx
  shl    $0x18,%ecx
  add    %ecx,%ebp
  mov    0x90(%rsi),%ecx
  shl    $0x10,%ecx
  add    %ecx,%ebx
  mov    0x98(%rsi),%ecx
  shl    $0x18,%ecx
  add    %ecx,%ebx
  mov    0xb0(%rsi),%ecx
  shl    $0x10,%ecx
  add    %ecx,%r11d
  mov    0xb8(%rsi),%ecx
  shl    $0x18,%ecx
  add    %ecx,%r11d
  mov    0xd0(%rsi),%ecx
  shl    $0x10,%ecx
  shl    $0x8,%r9d
  add    0xe0(%rsi),%r9d
  add    %ecx,%r10d
  mov    0xd8(%rsi),%ecx
  shl    $0x18,%ecx
  add    %ecx,%r10d
  mov    0xf0(%rsi),%ecx
  mov    0x108(%rsi),%r8d
  mov    0x128(%rsi),%edi
  mov    0x170(%rax),%r14d
  shl    $0x10,%ecx
  shl    $0x8,%r8d
  add    0x100(%rsi),%r8d
  mov    0x10(%rax),%r15d
  shl    $0x8,%edi
  add    %ecx,%r9d
  mov    0xf8(%rsi),%ecx
  shl    $0x10,%r14d
  add    0x120(%rsi),%edi
  shl    $0x18,%ecx
  add    %ecx,%r9d
  mov    0x110(%rsi),%ecx
  shl    $0x10,%ecx
  add    %ecx,%r8d
  mov    0x118(%rsi),%ecx
  shl    $0x18,%ecx
  add    %ecx,%r8d
  mov    0x130(%rsi),%ecx
  shl    $0x10,%ecx
  add    %ecx,%edi
  mov    0x138(%rsi),%ecx
  mov    0x148(%rsi),%esi
  shl    $0x18,%ecx
  shl    $0x8,%esi
  add    0x140(%rax),%esi
  add    %ecx,%edi
  mov    0x150(%rax),%ecx
  shl    $0x10,%ecx
  add    %ecx,%esi
  mov    0x158(%rax),%ecx
  shl    $0x18,%ecx
  add    %ecx,%esi
  mov    0x168(%rax),%ecx
  shl    $0x8,%ecx
  add    0x160(%rax),%ecx
  add    %r14d,%ecx
  mov    0x178(%rax),%r14d
  shl    $0x18,%r14d
  shl    $0x10,%r15d
  add    %r14d,%ecx
  mov    0x8(%rax),%r14d
  shl    $0x8,%r14d
  add    (%rax),%r14d
  mov    0x18(%rax),%rax
  mov    %r13d,0x4(%rdx)
  add    %r15d,%r14d
  mov    %r12d,0x8(%rdx)
  shl    $0x18,%eax
  mov    %ebp,0xc(%rdx)
  add    %eax,%r14d
  mov    %ebx,0x10(%rdx)
  mov    %r14d,(%rdx)
  mov    %r11d,0x14(%rdx)
  mov    %r10d,0x18(%rdx)
  mov    %r9d,0x1c(%rdx)
  mov    %r8d,0x20(%rdx)
  mov    %edi,0x24(%rdx)
  mov    %esi,0x28(%rdx)
  pop    %rbx
  mov    %ecx,0x2c(%rdx)
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
```

assistant: ```c
void fiat_p384_from_bytes(uint32_t out1[12], const uint8_t arg1[48]) {
  uint32_t x1;
  uint32_t x2;
  uint32_t x3;
  uint8_t x4;
  uint32_t x5;
  uint32_t x6;
  uint32_t x7;
  uint8_t x8;
  uint32_t x9;
  uint32_t x10;
  uint32_t x11;
  uint8_t x12;
  uint32_t x13;
  uint32_t x14;
  uint32_t x15;
  uint8_t x16;
  uint32_t x17;
  uint32_t x18;
  uint32_t x19;
  uint8_t x20;
  uint32_t x21;
  uint32_t x22;
  uint32_t x23;
  uint8_t x24;
  uint32_t x25;
  uint32_t x26;
  uint32_t x27;
  uint8_t x28;
  uint32_t x29;
  uint32_t x30;
  uint32_t x31;
  uint8_t x32;
  uint32_t x33;
  uint32_t x34;
  uint32_t x35;
  uint8_t x36;
  uint32_t x37;
  uint32_t x38;
  uint32_t x39;
  uint8_t x40;
  uint32_t x41;
  uint32_t x42;
  uint32_t x43;
  uint8_t x44;
  uint32_t x45;
  uint32_t x46;
  uint32_t x47;
  uint8_t x48;
  uint32_t x49;
  uint32_t x50;
  uint32_t x51;
  uint32_t x52;
  uint32_t x53;
  uint32_t x54;
  uint32_t x55;
  uint32_t x56;
  uint32_t x57;
  uint32_t x58;
  uint32_t x59;
  uint32_t x60;
  uint32_t x61;
  uint32_t x62;
  uint32_t x63;
  uint32_t x64;
  uint32_t x65;
  uint32_t x66;
  uint32_t x67;
  uint32_t x68;
  uint32_t x69;
  uint32_t x70;
  uint32_t x71;
  uint32_t x72;
  uint32_t x73;
  uint32_t x74;
  uint32_t x75;
  uint32_t x76;
  uint32_t x77;
  uint32_t x78;
  uint32_t x79;
  uint32_t x80;
  uint32_t x81;
  uint32_t x82;
  uint32_t x83;
  uint32_t x84;
  x1 = ((uint32_t)(arg1[47]) << 24);
  x2 = ((uint32_t)(arg1[46]) << 16);
  x3 = ((uint32_t)(arg1[45]) << 8);
  x4 = (arg1[44]);
  x5 = ((uint32_t)(arg1[43]) << 24);
  x6 = ((uint32_t)(arg1[42]) << 16);
  x7 = ((uint32_t)(arg1[41]) << 8);
  x8 = (arg1[40]);
  x9 = ((uint32_t)(arg1[39]) << 24);
  x10 = ((uint32_t)(arg1[38]) << 16);
  x11 = ((uint32_t)(arg1[37]) << 8);
  x12 = (arg1[36]);
  x13 = ((uint32_t)(arg1[35]) << 24);
  x14 = ((uint32_t)(arg1[34]) << 16);
  x15 = ((uint32_t)(arg1[33]) << 8);
  x16 = (arg1[32]);
  x17 = ((uint32_t)(arg1[31]) << 24);
  x18 = ((uint32_t)(arg1[30]) << 16);
  x19 = ((uint32_t)(arg1[29]) << 8);
  x20 = (arg1[28]);
  x21 = ((uint32_t)(arg1[27]) << 24);
  x22 = ((uint32_t)(arg1[26]) << 16);
  x23 = ((uint32_t)(arg1[25]) << 8);
  x24 = (arg1[24]);
  x25 = ((uint32_t)(arg1[23]) << 24);
  x26 = ((uint32_t)(arg1[22]) << 16);
  x27 = ((uint32_t)(arg1[21]) << 8);
  x28 = (arg1[20]);
  x29 = ((uint32_t)(arg1[19]) << 24);
  x30 = ((uint32_t)(arg1[18]) << 16);
  x31 = ((uint32_t)(arg1[17]) << 8);
  x32 = (arg1[16]);
  x33 = ((uint32_t)(arg1[15]) << 24);
  x34 = ((uint32_t)(arg1[14]) << 16);
  x35 = ((uint32_t)(arg1[13]) << 8);
  x36 = (arg1[12]);
  x37 = ((uint32_t)(arg1[11]) << 24);
  x38 = ((uint32_t)(arg1[10]) << 16);
  x39 = ((uint32_t)(arg1[9]) << 8);
  x40 = (arg1[8]);
  x41 = ((uint32_t)(arg1[7]) << 24);
  x42 = ((uint32_t)(arg1[6]) << 16);
  x43 = ((uint32_t)(arg1[5]) << 8);
  x44 = (arg1[4]);
  x45 = ((uint32_t)(arg1[3]) << 24);
  x46 = ((uint32_t)(arg1[2]) << 16);
  x47 = ((uint32_t)(arg1[1]) << 8);
  x48 = (arg1[0]);
  x49 = (x47 + (uint32_t)x48);
  x50 = (x46 + x49);
  x51 = (x45 + x50);
  x52 = (x43 + (uint32_t)x44);
  x53 = (x42 + x52);
  x54 = (x41 + x53);
  x55 = (x39 + (uint32_t)x40);
  x56 = (x38 + x55);
  x57 = (x37 + x56);
  x58 = (x35 + (uint32_t)x36);
  x59 = (x34 + x58);
  x60 = (x33 + x59);
  x61 = (x31 + (uint32_t)x32);
  x62 = (x30 + x61);
  x63 = (x29 + x62);
  x64 = (x27 + (uint32_t)x28);
  x65 = (x26 + x64);
  x66 = (x25 + x65);
  x67 = (x23 + (uint32_t)x24);
  x68 = (x22 + x67);
  x69 = (x21 + x68);
  x70 = (x19 + (uint32_t)x20);
  x71 = (x18 + x70);
  x72 = (x17 + x71);
  x73 = (x15 + (uint32_t)x16);
  x74 = (x14 + x73);
  x75 = (x13 + x74);
  x76 = (x11 + (uint32_t)x12);
  x77 = (x10 + x76);
  x78 = (x9 + x77);
  x79 = (x7 + (uint32_t)x8);
  x80 = (x6 + x79);
  x81 = (x5 + x80);
  x82 = (x3 + (uint32_t)x4);
  x83 = (x2 + x82);
  x84 = (x1 + x83);
  out1[0] = x51;
  out1[1] = x54;
  out1[2] = x57;
  out1[3] = x60;
  out1[4] = x63;
  out1[5] = x66;
  out1[6] = x69;
  out1[7] = x72;
  out1[8] = x75;
  out1[9] = x78;
  out1[10] = x81;
  out1[11] = x84;
}
```