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

```asm
<sdram_init>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    $0x7e001004,%eax
  movl   $0x4,(%rax)
  mov    $0x7e001010,%eax
  movl   $0x45b,(%rax)
  mov    $0x7e001014,%eax
  movl   $0x6,(%rax)
  mov    $0x7e001018,%eax
  movl   $0x1,(%rax)
  mov    $0x7e00101c,%eax
  movl   $0x2,(%rax)
  mov    $0x7e001020,%eax
  movl   $0x6,(%rax)
  mov    $0x7e001024,%eax
  movl   $0x8,(%rax)
  movl   $0x3,-0xc(%rbp)
  mov    -0xc(%rbp),%eax
  sub    $0x3,%eax
  shl    $0x3,%eax
  mov    $0x7e001028,%edx
  or     -0xc(%rbp),%eax
  mov    %eax,(%rdx)
  movl   $0x12,-0x8(%rbp)
  mov    -0x8(%rbp),%eax
  sub    $0x3,%eax
  shl    $0x5,%eax
  mov    $0x7e00102c,%edx
  or     -0x8(%rbp),%eax
  mov    %eax,(%rdx)
  movl   $0x3,-0x4(%rbp)
  mov    -0x4(%rbp),%eax
  sub    $0x3,%eax
  shl    $0x3,%eax
  mov    $0x7e001030,%edx
  or     -0x4(%rbp),%eax
  mov    %eax,(%rdx)
  mov    $0x7e001034,%eax
  movl   $0x2,(%rax)
  mov    $0x7e001038,%eax
  movl   $0x2,(%rax)
  mov    $0x7e00103c,%eax
  movl   $0x1,(%rax)
  mov    $0x7e001040,%eax
  movl   $0x1,(%rax)
  mov    $0x7e001044,%eax
  movl   $0x12,(%rax)
  mov    $0x7e001048,%eax
  movl   $0x12,(%rax)
  mov    $0x7e00100c,%eax
  mov    (%rax),%eax
  and    $0xfffffff8,%eax
  mov    $0x7e00100c,%edx
  or     $0x2,%eax
  mov    %eax,(%rdx)
  mov    $0x7e00100c,%eax
  mov    (%rax),%eax
  and    $0xffffffc7,%eax
  mov    $0x7e00100c,%edx
  or     $0x18,%eax
  mov    %eax,(%rdx)
  mov    $0x7e00100c,%eax
  mov    (%rax),%eax
  mov    $0x7e00100c,%edx
  and    $0xffffffbf,%eax
  mov    %eax,(%rdx)
  mov    $0x7e00100c,%eax
  mov    (%rax),%eax
  and    $0xfffc7fff,%eax
  mov    $0x7e00100c,%edx
  or     $0x10000,%eax
  mov    %eax,(%rdx)
  mov    $0x7e00104c,%eax
  mov    (%rax),%eax
  and    $0xfffffff0,%eax
  mov    $0x7e00104c,%edx
  or     $0x5,%eax
  mov    %eax,(%rdx)
  mov    $0x7e00104c,%eax
  mov    (%rax),%eax
  mov    $0x7e00104c,%edx
  and    $0x3f,%al
  mov    %eax,(%rdx)
  mov    $0x7e00104c,%edx
  or     $0x40,%eax
  mov    %eax,(%rdx)
  mov    $0x7e00104c,%eax
  mov    (%rax),%eax
  and    $0xf8,%ah
  mov    $0x7e00104c,%edx
  or     $0x3,%ah
  mov    %eax,(%rdx)
  mov    $0x7e00104c,%eax
  mov    (%rax),%eax
  mov    $0x7e00104c,%edx
  and    $0xe7,%ah
  mov    %eax,(%rdx)
  mov    $0x7e00104c,%edx
  or     $0x8,%ah
  mov    %eax,(%rdx)
  mov    $0x7e001200,%eax
  mov    (%rax),%eax
  mov    $0x7e001200,%edx
  or     $0x10000,%eax
  mov    %eax,(%rdx)
  mov    $0x7e001008,%eax
  movl   $0xc0000,(%rax)
  mov    $0x7e001008,%eax
  movl   $0x0,(%rax)
  mov    $0x7e001008,%eax
  movl   $0x40000,(%rax)
  mov    $0x7e001008,%eax
  movl   $0x40000,(%rax)
  mov    $0x7e001008,%eax
  movl   $0xa0000,(%rax)
  mov    $0x7e001008,%eax
  movl   $0x80032,(%rax)
  mov    $0x7e00f120,%eax
  movl   $0x0,(%rax)
  mov    $0x7e001004,%eax
  movl   $0x0,(%rax)
  nop
L5:
  mov    $0x7e001000,%eax
  mov    (%rax),%eax
  and    $0x3,%eax
  cmp    $0x1,%eax
  jne    L5
  nop
  pop    %rbp
  ret
```

assistant: ```c
int sdram_init() {
  ((*(volatile unsigned int *)0x7e001004) = (0x4));
  ((*(volatile unsigned int *)0x7e001010) = (((7800) / (1000000000 / 133000000) + 1)));
  ((*(volatile unsigned int *)0x7e001014) = ((3 << 1)));
  ((*(volatile unsigned int *)0x7e001018) = (0x1));
  ((*(volatile unsigned int *)0x7e00101c) = (0x2));
  ((*(volatile unsigned int *)0x7e001020) = (((40) / (1000000000 / 133000000) + 1)));
  ((*(volatile unsigned int *)0x7e001024) = (((55) / (1000000000 / 133000000) + 1)));
  unsigned int trcd = ((15) / (1000000000 / 133000000) + 1);
  ((*(volatile unsigned int *)0x7e001028) = (trcd | ((trcd - 3) << 3)));
  unsigned int trfc = ((120) / (1000000000 / 133000000) + 1);
  ((*(volatile unsigned int *)0x7e00102c) = (trfc | ((trfc - 3) << 5)));
  unsigned int trp = ((15) / (1000000000 / 133000000) + 1);
  ((*(volatile unsigned int *)0x7e001030) = (trp | ((trp - 3) << 3)));
  ((*(volatile unsigned int *)0x7e001034) = (((10) / (1000000000 / 133000000) + 1)));
  ((*(volatile unsigned int *)0x7e001038) = (((12) / (1000000000 / 133000000) + 1)));
  ((*(volatile unsigned int *)0x7e00103c) = (0x1));
  ((*(volatile unsigned int *)0x7e001040) = (0x1));
  ((*(volatile unsigned int *)0x7e001044) = (((120) / (1000000000 / 133000000) + 1)));
  ((*(volatile unsigned int *)0x7e001048) = (((120) / (1000000000 / 133000000) + 1)));
  ((*(volatile unsigned int *)0x7e00100c) = (((*(volatile unsigned int *)0x7e00100c) & (~(((1 << (3)) - 1) << (0)))) | ((0x2) << (0))));
  ((*(volatile unsigned int *)0x7e00100c) = (((*(volatile unsigned int *)0x7e00100c) & (~(((1 << (3)) - 1) << (3)))) | ((0x3) << (3))));
  ((*(volatile unsigned int *)0x7e00100c) &= (~(1 << (6))));
  ((*(volatile unsigned int *)0x7e00100c) = (((*(volatile unsigned int *)0x7e00100c) & (~(((1 << (3)) - 1) << (15)))) | ((0x2) << (15))));
  ((*(volatile unsigned int *)0X7e00104c) = (((*(volatile unsigned int *)0X7e00104c) & (~(((1 << (4)) - 1) << (0)))) | ((0x5) << (0))));
  ((*(volatile unsigned int *)0X7e00104c) = ((*(volatile unsigned int *)0X7e00104c) &= (~(3 << (6)))) | ((0x1) << (6)));
  ((*(volatile unsigned int *)0X7e00104c) = (((*(volatile unsigned int *)0X7e00104c) & (~(((1 << (3)) - 1) << (8)))) | ((0x3) << (8))));
  ((*(volatile unsigned int *)0X7e00104c) = ((*(volatile unsigned int *)0X7e00104c) &= (~(3 << (11)))) | ((0x1) << (11)));
  ((*(volatile unsigned int *)0x7e001200) |= ((1 << (16))));
  ((*(volatile unsigned int *)0x7e001008) = (0xc0000));
  ((*(volatile unsigned int *)0x7e001008) = (0x00000));
  ((*(volatile unsigned int *)0x7e001008) = (0x40000));
  ((*(volatile unsigned int *)0x7e001008) = (0x40000));
  ((*(volatile unsigned int *)0x7e001008) = (0xa0000));
  ((*(volatile unsigned int *)0x7e001008) = (0x80032));
  ((*(volatile unsigned int *)0x7e00f120) = (0x0));
  ((*(volatile unsigned int *)0x7e001004) = (0x000));
  while (!(((*(volatile unsigned int *)0x7e001000) & 0x3) == 0x1))
    ;
}
```