#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 */
unsigned long millis();
int sleepTime(float ASpannung, unsigned long beginn) {
  unsigned long sleep;
  if (ASpannung >= 4) {
    sleep = 60;
  }
  if ((ASpannung < 4.0) && (ASpannung >= 3.9)) {
    sleep = 120;
  }
  if ((ASpannung < 3.9) && (ASpannung >= 3.8)) {
    sleep = 180;
  }
  if ((ASpannung < 3.8) && (ASpannung >= 3.7)) {
    sleep = 240;
  }
  if ((ASpannung < 3.7) && (ASpannung >= 3.6)) {
    sleep = 300;
  }
  if ((ASpannung < 3.6) && (ASpannung >= 3.5)) {
    sleep = 360;
  }
  if ((ASpannung < 3.5) && (ASpannung >= 3.4)) {
    sleep = 420;
  }
  if ((ASpannung < 3.4) && (ASpannung >= 3.3)) {
    sleep = 480;
  }
  if ((ASpannung < 3.3) && (ASpannung >= 3.2)) {
    sleep = 600;
  }
  if (ASpannung < 3.2) {
    sleep = 900;
  }
  sleep = (sleep - ((millis() - beginn) / 1000));
  if (sleep <= 10) {
    sleep = 10;
  }
  if (sleep > 900) {
    sleep = 900;
  }
  return (int)sleep;
}


x86 assembly (clang, -O0):
<sleepTime>:
push   %rbp
mov    %rsp,%rbp
sub    $0x20,%rsp
movss  %xmm0,-0x4(%rbp)
mov    %rdi,-0x10(%rbp)
movss  -0x4(%rbp),%xmm0
movss  0xed2(%rip),%xmm1
ucomiss %xmm1,%xmm0
jb     113f <sleepTime+0x2f>
movq   $0x3c,-0x18(%rbp)
movss  -0x4(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xeb8(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    117d <sleepTime+0x6d>
movss  -0x4(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xea5(%rip),%xmm1
ucomisd %xmm1,%xmm0
jb     117d <sleepTime+0x6d>
movq   $0x78,-0x18(%rbp)
movss  -0x4(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xe82(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    11bb <sleepTime+0xab>
movss  -0x4(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xe6f(%rip),%xmm1
ucomisd %xmm1,%xmm0
jb     11bb <sleepTime+0xab>
movq   $0xb4,-0x18(%rbp)
movss  -0x4(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xe4c(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    11f9 <sleepTime+0xe9>
movss  -0x4(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xe39(%rip),%xmm1
ucomisd %xmm1,%xmm0
jb     11f9 <sleepTime+0xe9>
movq   $0xf0,-0x18(%rbp)
movss  -0x4(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xe16(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    1237 <sleepTime+0x127>
movss  -0x4(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xe03(%rip),%xmm1
ucomisd %xmm1,%xmm0
jb     1237 <sleepTime+0x127>
movq   $0x12c,-0x18(%rbp)
movss  -0x4(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xde0(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    1275 <sleepTime+0x165>
movss  -0x4(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xdcd(%rip),%xmm1
ucomisd %xmm1,%xmm0
jb     1275 <sleepTime+0x165>
movq   $0x168,-0x18(%rbp)
movss  -0x4(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xdaa(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    12b3 <sleepTime+0x1a3>
movss  -0x4(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xd97(%rip),%xmm1
ucomisd %xmm1,%xmm0
jb     12b3 <sleepTime+0x1a3>
movq   $0x1a4,-0x18(%rbp)
movss  -0x4(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xd74(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    12f1 <sleepTime+0x1e1>
movss  -0x4(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xd61(%rip),%xmm1
ucomisd %xmm1,%xmm0
jb     12f1 <sleepTime+0x1e1>
movq   $0x1e0,-0x18(%rbp)
movss  -0x4(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xd3e(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    132f <sleepTime+0x21f>
movss  -0x4(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xd2b(%rip),%xmm1
ucomisd %xmm1,%xmm0
jb     132f <sleepTime+0x21f>
movq   $0x258,-0x18(%rbp)
movss  -0x4(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xd08(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    1352 <sleepTime+0x242>
movq   $0x384,-0x18(%rbp)
mov    -0x18(%rbp),%rax
mov    %rax,-0x20(%rbp)
mov    $0x0,%al
call   1030 <millis@plt>
sub    -0x10(%rbp),%rax
mov    $0x3e8,%ecx
xor    %edx,%edx
div    %rcx
mov    %rax,%rcx
mov    -0x20(%rbp),%rax
sub    %rcx,%rax
mov    %rax,-0x18(%rbp)
cmpq   $0xa,-0x18(%rbp)
ja     1390 <sleepTime+0x280>
movq   $0xa,-0x18(%rbp)
cmpq   $0x384,-0x18(%rbp)
jbe    13a6 <sleepTime+0x296>
movq   $0x384,-0x18(%rbp)
mov    -0x18(%rbp),%rax
add    $0x20,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<sleepTime>:
push   %r14
push   %rbx
push   %rax
cvtss2sd %xmm0,%xmm1
movsd  0xee0(%rip),%xmm2
ucomisd %xmm2,%xmm1
mov    $0x3c,%eax
mov    $0x78,%ecx
cmovb  %rax,%rcx
movss  0xefe(%rip),%xmm3
ucomiss %xmm0,%xmm3
cmovbe %rax,%rcx
movsd  0xebf(%rip),%xmm3
ucomisd %xmm3,%xmm1
mov    $0xb4,%eax
cmovb  %rcx,%rax
ucomisd %xmm1,%xmm2
cmovbe %rcx,%rax
movsd  0xeaa(%rip),%xmm2
ucomisd %xmm2,%xmm1
mov    $0xf0,%ecx
cmovb  %rax,%rcx
ucomisd %xmm1,%xmm3
cmovbe %rax,%rcx
movsd  0xe95(%rip),%xmm3
ucomisd %xmm3,%xmm1
mov    $0x12c,%eax
cmovb  %rcx,%rax
ucomisd %xmm1,%xmm2
cmovbe %rcx,%rax
ucomisd %xmm1,%xmm3
mov    $0x168,%ecx
cmovbe %rax,%rcx
movss  0xe8f(%rip),%xmm2
ucomiss %xmm2,%xmm0
cmovb  %rax,%rcx
movsd  0xe64(%rip),%xmm3
ucomisd %xmm3,%xmm1
mov    $0x1a4,%eax
cmovb  %rcx,%rax
ucomiss %xmm0,%xmm2
cmovbe %rcx,%rax
movsd  0xe50(%rip),%xmm0
ucomisd %xmm0,%xmm1
mov    $0x1e0,%ecx
cmovb  %rax,%rcx
ucomisd %xmm1,%xmm3
cmovbe %rax,%rcx
movsd  0xe3b(%rip),%xmm2
ucomisd %xmm2,%xmm1
mov    $0x258,%eax
cmovb  %rcx,%rax
ucomisd %xmm1,%xmm0
cmovbe %rcx,%rax
mov    %rdi,%r14
ucomisd %xmm1,%xmm2
mov    $0x384,%ebx
cmovbe %rax,%rbx
xor    %eax,%eax
call   1030 <millis@plt>
sub    %r14,%rax
shr    $0x3,%rax
movabs $0x20c49ba5e353f7cf,%rcx
9b c4 20
mul    %rcx
shr    $0x4,%rdx
sub    %rdx,%rbx
cmp    $0xb,%rbx
mov    $0xa,%ecx
cmovae %rbx,%rcx
cmp    $0x384,%rcx
mov    $0x384,%eax
cmovb  %ecx,%eax
add    $0x8,%rsp
pop    %rbx
pop    %r14
ret

LLVM IR (-O0):
define i32 @sleepTime(float %0, i64 %1) {
%3 = alloca float
%4 = alloca i64
%5 = alloca i64
store float %0, float* %3
store i64 %1, i64* %4
%6 = load float, float* %3
%7 = fcmp oge float %6, 4.000000e+00
br i1 %7, label %8, label %9
8: ; preds = %2
store i64 60, i64* %5
br label %9
9: ; preds = %8, %2
%10 = load float, float* %3
%11 = fpext float %10 to double
%12 = fcmp olt double %11, 4.000000e+00
br i1 %12, label %13, label %18
13: ; preds = %9
%14 = load float, float* %3
%15 = fpext float %14 to double
%16 = fcmp oge double %15, 3.900000e+00
br i1 %16, label %17, label %18
17: ; preds = %13
store i64 120, i64* %5
br label %18
18: ; preds = %17, %13, %9
%19 = load float, float* %3
%20 = fpext float %19 to double
%21 = fcmp olt double %20, 3.900000e+00
br i1 %21, label %22, label %27
22: ; preds = %18
%23 = load float, float* %3
%24 = fpext float %23 to double
%25 = fcmp oge double %24, 3.800000e+00
br i1 %25, label %26, label %27
26: ; preds = %22
store i64 180, i64* %5
br label %27
27: ; preds = %26, %22, %18
%28 = load float, float* %3
%29 = fpext float %28 to double
%30 = fcmp olt double %29, 3.800000e+00
br i1 %30, label %31, label %36
31: ; preds = %27
%32 = load float, float* %3
%33 = fpext float %32 to double
%34 = fcmp oge double %33, 3.700000e+00
br i1 %34, label %35, label %36
35: ; preds = %31
store i64 240, i64* %5
br label %36
36: ; preds = %35, %31, %27
%37 = load float, float* %3
%38 = fpext float %37 to double
%39 = fcmp olt double %38, 3.700000e+00
br i1 %39, label %40, label %45
40: ; preds = %36
%41 = load float, float* %3
%42 = fpext float %41 to double
%43 = fcmp oge double %42, 3.600000e+00
br i1 %43, label %44, label %45
44: ; preds = %40
store i64 300, i64* %5
br label %45
45: ; preds = %44, %40, %36
%46 = load float, float* %3
%47 = fpext float %46 to double
%48 = fcmp olt double %47, 3.600000e+00
br i1 %48, label %49, label %54
49: ; preds = %45
%50 = load float, float* %3
%51 = fpext float %50 to double
%52 = fcmp oge double %51, 3.500000e+00
br i1 %52, label %53, label %54
53: ; preds = %49
store i64 360, i64* %5
br label %54
54: ; preds = %53, %49, %45
%55 = load float, float* %3
%56 = fpext float %55 to double
%57 = fcmp olt double %56, 3.500000e+00
br i1 %57, label %58, label %63
58: ; preds = %54
%59 = load float, float* %3
%60 = fpext float %59 to double
%61 = fcmp oge double %60, 3.400000e+00
br i1 %61, label %62, label %63
62: ; preds = %58
store i64 420, i64* %5
br label %63
63: ; preds = %62, %58, %54
%64 = load float, float* %3
%65 = fpext float %64 to double
%66 = fcmp olt double %65, 3.400000e+00
br i1 %66, label %67, label %72
67: ; preds = %63
%68 = load float, float* %3
%69 = fpext float %68 to double
%70 = fcmp oge double %69, 3.300000e+00
br i1 %70, label %71, label %72
71: ; preds = %67
store i64 480, i64* %5
br label %72
72: ; preds = %71, %67, %63
%73 = load float, float* %3
%74 = fpext float %73 to double
%75 = fcmp olt double %74, 3.300000e+00
br i1 %75, label %76, label %81
76: ; preds = %72
%77 = load float, float* %3
%78 = fpext float %77 to double
%79 = fcmp oge double %78, 3.200000e+00
br i1 %79, label %80, label %81
80: ; preds = %76
store i64 600, i64* %5
br label %81
81: ; preds = %80, %76, %72
%82 = load float, float* %3
%83 = fpext float %82 to double
%84 = fcmp olt double %83, 3.200000e+00
br i1 %84, label %85, label %86
85: ; preds = %81
store i64 900, i64* %5
br label %86
86: ; preds = %85, %81
%87 = load i64, i64* %5
%88 = call i64 (...) @millis()
%89 = load i64, i64* %4
%90 = sub i64 %88, %89
%91 = udiv i64 %90, 1000
%92 = sub i64 %87, %91
store i64 %92, i64* %5
%93 = load i64, i64* %5
%94 = icmp ule i64 %93, 10
br i1 %94, label %95, label %96
95: ; preds = %86
store i64 10, i64* %5
br label %96
96: ; preds = %95, %86
%97 = load i64, i64* %5
%98 = icmp ugt i64 %97, 900
br i1 %98, label %99, label %100
99: ; preds = %96
store i64 900, i64* %5
br label %100
100: ; preds = %99, %96
%101 = load i64, i64* %5
%102 = trunc i64 %101 to i32
ret i32 %102
}

LLVM IR (-O2):
define i32 @sleepTime(float %0, i64 %1) {
%3 = fpext float %0 to double
%4 = fcmp uge float %0, 4.000000e+00
%5 = fcmp ult double %3, 3.900000e+00
%6 = or i1 %4, %5
%7 = select i1 %6, i64 60, i64 120
%8 = fcmp uge double %3, 3.900000e+00
%9 = fcmp ult double %3, 3.800000e+00
%10 = or i1 %8, %9
%11 = select i1 %10, i64 %7, i64 180
%12 = fcmp uge double %3, 3.800000e+00
%13 = fcmp ult double %3, 3.700000e+00
%14 = or i1 %12, %13
%15 = select i1 %14, i64 %11, i64 240
%16 = fcmp uge double %3, 3.700000e+00
%17 = fcmp ult double %3, 3.600000e+00
%18 = or i1 %16, %17
%19 = select i1 %18, i64 %15, i64 300
%20 = fcmp uge double %3, 3.600000e+00
%21 = fcmp ult float %0, 3.500000e+00
%22 = or i1 %21, %20
%23 = select i1 %22, i64 %19, i64 360
%24 = fcmp uge float %0, 3.500000e+00
%25 = fcmp ult double %3, 3.400000e+00
%26 = or i1 %24, %25
%27 = select i1 %26, i64 %23, i64 420
%28 = fcmp uge double %3, 3.400000e+00
%29 = fcmp ult double %3, 3.300000e+00
%30 = or i1 %28, %29
%31 = select i1 %30, i64 %27, i64 480
%32 = fcmp uge double %3, 3.300000e+00
%33 = fcmp ult double %3, 3.200000e+00
%34 = or i1 %32, %33
%35 = select i1 %34, i64 %31, i64 600
%36 = fcmp olt double %3, 3.200000e+00
%37 = select i1 %36, i64 900, i64 %35
%38 = tail call i64 (...) @millis()
%39 = sub i64 %38, %1
%40 = udiv i64 %39, 1000
%41 = sub nsw i64 %37, %40
%42 = icmp ugt i64 %41, 10
%43 = select i1 %42, i64 %41, i64 10
%44 = icmp ult i64 %43, 900
%45 = select i1 %44, i64 %43, i64 900
%46 = trunc i64 %45 to i32
ret i32 %46
}