#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
int /*<<< orphan*/ _cc3_delay_us_4(int);
void _cc3_fifo_reset() {
  (*(volatile unsigned long *)((0xE002800C))) = 0x0008;
  _cc3_delay_us_4(1);
  (*(volatile unsigned long *)((0xE0028004))) = 0x0008;
  (*(volatile unsigned long *)((0xE002800C))) = 0x000400;
  (*(volatile unsigned long *)((0xE002800C))) = 0x2000;
  (*(volatile unsigned long *)((0xE002800C))) = 0x1000;
  (*(volatile unsigned long *)((0xE002800C))) = 0x0800;
  (*(volatile unsigned long *)((0xE0028004))) = 0x0800;
  (*(volatile unsigned long *)((0xE002800C))) = 0x0800;
  _cc3_delay_us_4(1);
  (*(volatile unsigned long *)((0xE0028004))) = 0x2000;
  (*(volatile unsigned long *)((0xE0028004))) = 0x1000;
}


x86 assembly (clang, -O0):
<_cc3_fifo_reset>:
push   %rbp
mov    %rsp,%rbp
mov    $0xe002800c,%eax
movq   $0x8,(%rax)
mov    $0x1,%edi
call   1030 <_cc3_delay_us_4@plt>
mov    $0xe0028004,%eax
movq   $0x8,(%rax)
mov    $0xe002800c,%eax
movq   $0x400,(%rax)
mov    $0xe002800c,%eax
movq   $0x2000,(%rax)
mov    $0xe002800c,%eax
movq   $0x1000,(%rax)
mov    $0xe002800c,%eax
movq   $0x800,(%rax)
mov    $0xe0028004,%eax
movq   $0x800,(%rax)
mov    $0xe002800c,%eax
movq   $0x800,(%rax)
mov    $0x1,%edi
call   1030 <_cc3_delay_us_4@plt>
mov    $0xe0028004,%eax
movq   $0x2000,(%rax)
mov    $0xe0028004,%eax
movq   $0x1000,(%rax)
pop    %rbp
ret

x86 assembly (clang, -O2):
<_cc3_fifo_reset>:
push   %rbx
mov    $0xe002800c,%ebx
movq   $0x8,(%rbx)
mov    $0x1,%edi
call   1030 <_cc3_delay_us_4@plt>
movq   $0x8,-0x8(%rbx)
movq   $0x400,(%rbx)
movq   $0x2000,(%rbx)
movq   $0x1000,(%rbx)
movq   $0x800,(%rbx)
movq   $0x800,-0x8(%rbx)
movq   $0x800,(%rbx)
mov    $0x1,%edi
call   1030 <_cc3_delay_us_4@plt>
movq   $0x2000,-0x8(%rbx)
movq   $0x1000,-0x8(%rbx)
pop    %rbx
ret

LLVM IR (-O0):
define void @_cc3_fifo_reset() {
store volatile i64 8, i64* inttoptr (i64 3758260236 to i64*)
%1 = call i32 @_cc3_delay_us_4(i32 1)
store volatile i64 8, i64* inttoptr (i64 3758260228 to i64*)
store volatile i64 1024, i64* inttoptr (i64 3758260236 to i64*)
store volatile i64 8192, i64* inttoptr (i64 3758260236 to i64*)
store volatile i64 4096, i64* inttoptr (i64 3758260236 to i64*)
store volatile i64 2048, i64* inttoptr (i64 3758260236 to i64*)
store volatile i64 2048, i64* inttoptr (i64 3758260228 to i64*)
store volatile i64 2048, i64* inttoptr (i64 3758260236 to i64*)
%2 = call i32 @_cc3_delay_us_4(i32 1)
store volatile i64 8192, i64* inttoptr (i64 3758260228 to i64*)
store volatile i64 4096, i64* inttoptr (i64 3758260228 to i64*)
ret void
}

LLVM IR (-O2):
define void @_cc3_fifo_reset() {
store volatile i64 8, i64* inttoptr (i64 3758260236 to i64*)
%1 = tail call i32 @_cc3_delay_us_4(i32 1)
store volatile i64 8, i64* inttoptr (i64 3758260228 to i64*)
store volatile i64 1024, i64* inttoptr (i64 3758260236 to i64*)
store volatile i64 8192, i64* inttoptr (i64 3758260236 to i64*)
store volatile i64 4096, i64* inttoptr (i64 3758260236 to i64*)
store volatile i64 2048, i64* inttoptr (i64 3758260236 to i64*)
store volatile i64 2048, i64* inttoptr (i64 3758260228 to i64*)
store volatile i64 2048, i64* inttoptr (i64 3758260236 to i64*)
%2 = tail call i32 @_cc3_delay_us_4(i32 1)
store volatile i64 8192, i64* inttoptr (i64 3758260228 to i64*)
store volatile i64 4096, i64* inttoptr (i64 3758260228 to i64*)
ret void
}