double DEVfetlim(vnew, vold, vto)
double vnew;
double vold;
double vto;
{
  double vtsthi;
  double vtstlo;
  double vtox;
  double delv;
  double vtemp;
  vtsthi =
      (((2 * (vold - vto)) < 0) ? -(2 * (vold - vto)) : (2 * (vold - vto))) + 2;
  vtstlo = vtsthi / 2 + 2;
  vtox = vto + 3.5;
  delv = vnew - vold;
  if (vold >= vto) {
    if (vold >= vtox) {
      if (delv <= 0) {
        if (vnew >= vtox) {
          if (-delv > vtstlo) {
            vnew = vold - vtstlo;
          }
        } else {
          vnew = ((vnew) > (vto + 2) ? (vnew) : (vto + 2));
        }
      } else {
        if (delv >= vtsthi) {
          vnew = vold + vtsthi;
        }
      }
    } else {
      if (delv <= 0) {
        vnew = ((vnew) > (vto - .5) ? (vnew) : (vto - .5));
      } else {
        vnew = ((vnew) < (vto + 4) ? (vnew) : (vto + 4));
      }
    }
  } else {
    if (delv <= 0) {
      if (-delv > vtsthi) {
        vnew = vold - vtsthi;
      }
    } else {
      vtemp = vto + .5;
      if (vnew <= vtemp) {
        if (delv > vtstlo) {
          vnew = vold + vtstlo;
        }
      } else {
        vnew = vtemp;
      }
    }
  }
  return (vnew);
}


x86 assembly (clang, -O0):
<DEVfetlim>:
push   %rbp
mov    %rsp,%rbp
movsd  %xmm0,-0x8(%rbp)
movsd  %xmm1,-0x10(%rbp)
movsd  %xmm2,-0x18(%rbp)
movsd  -0x10(%rbp),%xmm0
subsd  -0x18(%rbp),%xmm0
movsd  0xedb(%rip),%xmm1
mulsd  %xmm0,%xmm1
xorps  %xmm0,%xmm0
ucomisd %xmm1,%xmm0
jbe    116d <DEVfetlim+0x6d>
movsd  -0x10(%rbp),%xmm1
subsd  -0x18(%rbp),%xmm1
movsd  0xeb8(%rip),%xmm0
mulsd  %xmm1,%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x48(%rbp)
jmp    1188 <DEVfetlim+0x88>
movsd  -0x10(%rbp),%xmm1
subsd  -0x18(%rbp),%xmm1
movsd  0xe81(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  0xe6b(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x20(%rbp)
movsd  -0x20(%rbp),%xmm0
movsd  0xe55(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  0xe49(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x28(%rbp)
movsd  0xe40(%rip),%xmm0
addsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  -0x8(%rbp),%xmm0
subsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x10(%rbp),%xmm0
ucomisd -0x18(%rbp),%xmm0
jb     1382 <DEVfetlim+0x282>
movsd  -0x10(%rbp),%xmm0
ucomisd -0x30(%rbp),%xmm0
jb     12cf <DEVfetlim+0x1cf>
xorps  %xmm0,%xmm0
ucomisd -0x38(%rbp),%xmm0
jb     12a6 <DEVfetlim+0x1a6>
movsd  -0x8(%rbp),%xmm0
ucomisd -0x30(%rbp),%xmm0
jb     125a <DEVfetlim+0x15a>
movsd  -0x38(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
ucomisd -0x28(%rbp),%xmm0
jbe    1255 <DEVfetlim+0x155>
movsd  -0x10(%rbp),%xmm0
subsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    12a1 <DEVfetlim+0x1a1>
movsd  -0x8(%rbp),%xmm0
movsd  0xd99(%rip),%xmm1
addsd  -0x18(%rbp),%xmm1
ucomisd %xmm1,%xmm0
jbe    1285 <DEVfetlim+0x185>
movsd  -0x8(%rbp),%xmm0
movsd  %xmm0,-0x50(%rbp)
jmp    1297 <DEVfetlim+0x197>
movsd  0xd73(%rip),%xmm0
addsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    12ca <DEVfetlim+0x1ca>
movsd  -0x38(%rbp),%xmm0
ucomisd -0x20(%rbp),%xmm0
jb     12c5 <DEVfetlim+0x1c5>
movsd  -0x10(%rbp),%xmm0
addsd  -0x20(%rbp),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    12ca <DEVfetlim+0x1ca>
jmp    137d <DEVfetlim+0x27d>
xorps  %xmm0,%xmm0
ucomisd -0x38(%rbp),%xmm0
jb     1331 <DEVfetlim+0x231>
movsd  -0x8(%rbp),%xmm0
movsd  -0x18(%rbp),%xmm1
movsd  0xd21(%rip),%xmm2
subsd  %xmm2,%xmm1
ucomisd %xmm1,%xmm0
jbe    130c <DEVfetlim+0x20c>
movsd  -0x8(%rbp),%xmm0
movsd  %xmm0,-0x58(%rbp)
jmp    1322 <DEVfetlim+0x222>
movsd  -0x18(%rbp),%xmm0
movsd  0xcf7(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    1378 <DEVfetlim+0x278>
movsd  -0x8(%rbp),%xmm1
movsd  0xcda(%rip),%xmm0
addsd  -0x18(%rbp),%xmm0
ucomisd %xmm1,%xmm0
jbe    135c <DEVfetlim+0x25c>
movsd  -0x8(%rbp),%xmm0
movsd  %xmm0,-0x60(%rbp)
jmp    136e <DEVfetlim+0x26e>
movsd  0xcb4(%rip),%xmm0
addsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    137d <DEVfetlim+0x27d>
jmp    1429 <DEVfetlim+0x329>
xorps  %xmm0,%xmm0
ucomisd -0x38(%rbp),%xmm0
jb     13cb <DEVfetlim+0x2cb>
movsd  -0x38(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
ucomisd -0x20(%rbp),%xmm0
jbe    13c6 <DEVfetlim+0x2c6>
movsd  -0x10(%rbp),%xmm0
subsd  -0x20(%rbp),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    1424 <DEVfetlim+0x324>
movsd  0xc3d(%rip),%xmm0
addsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x8(%rbp),%xmm1
movsd  -0x40(%rbp),%xmm0
ucomisd %xmm1,%xmm0
jb     1415 <DEVfetlim+0x315>
movsd  -0x38(%rbp),%xmm0
ucomisd -0x28(%rbp),%xmm0
jbe    1410 <DEVfetlim+0x310>
movsd  -0x10(%rbp),%xmm0
addsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    141f <DEVfetlim+0x31f>
movsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    1424 <DEVfetlim+0x324>
jmp    1429 <DEVfetlim+0x329>
movsd  -0x8(%rbp),%xmm0
pop    %rbp
ret

x86 assembly (clang, -O2):
<DEVfetlim>:
movapd %xmm1,%xmm4
subsd  %xmm2,%xmm4
addsd  %xmm4,%xmm4
movapd 0xeec(%rip),%xmm5
xorpd  %xmm4,%xmm5
xorpd  %xmm6,%xmm6
movapd %xmm4,%xmm3
cmpltsd %xmm6,%xmm3
andpd  %xmm3,%xmm5
andnpd %xmm4,%xmm3
orpd   %xmm5,%xmm3
movsd  0xed7(%rip),%xmm5
addsd  %xmm5,%xmm3
movsd  0xed3(%rip),%xmm4
mulsd  %xmm3,%xmm4
addsd  %xmm5,%xmm4
movapd %xmm0,%xmm5
subsd  %xmm1,%xmm5
ucomisd %xmm2,%xmm1
jae    118e <DEVfetlim+0x8e>
ucomisd %xmm5,%xmm6
jae    11b7 <DEVfetlim+0xb7>
addsd  0xeaf(%rip),%xmm2
ucomisd %xmm0,%xmm2
jb     122a <DEVfetlim+0x12a>
ucomisd %xmm4,%xmm5
movapd %xmm0,%xmm2
jbe    122a <DEVfetlim+0x12a>
addsd  %xmm1,%xmm4
movapd %xmm4,%xmm2
jmp    122a <DEVfetlim+0x12a>
movsd  0xe8a(%rip),%xmm6
addsd  %xmm2,%xmm6
ucomisd %xmm6,%xmm1
jae    11d2 <DEVfetlim+0xd2>
xorpd  %xmm1,%xmm1
ucomisd %xmm5,%xmm1
jae    11ef <DEVfetlim+0xef>
addsd  0xe7e(%rip),%xmm2
minsd  %xmm2,%xmm0
ret
xorpd  0xe41(%rip),%xmm5
ucomisd %xmm3,%xmm5
movapd %xmm0,%xmm2
jbe    122a <DEVfetlim+0x12a>
subsd  %xmm3,%xmm1
movapd %xmm1,%xmm0
ret
xorpd  %xmm7,%xmm7
ucomisd %xmm5,%xmm7
jae    11fc <DEVfetlim+0xfc>
ucomisd %xmm3,%xmm5
movapd %xmm0,%xmm2
jb     122a <DEVfetlim+0x12a>
addsd  %xmm1,%xmm3
movapd %xmm3,%xmm0
ret
addsd  0xe31(%rip),%xmm2
maxsd  %xmm2,%xmm0
ret
ucomisd %xmm6,%xmm0
jae    120f <DEVfetlim+0x10f>
addsd  0xe06(%rip),%xmm2
maxsd  %xmm2,%xmm0
ret
xorpd  0xde9(%rip),%xmm5
ucomisd %xmm4,%xmm5
movapd %xmm0,%xmm2
jbe    122a <DEVfetlim+0x12a>
subsd  %xmm4,%xmm1
movapd %xmm1,%xmm0
ret
movapd %xmm2,%xmm0
ret

LLVM IR (-O0):
define double @DEVfetlim(double %0, double %1, double %2) {
%4 = alloca double
%5 = alloca double
%6 = alloca double
%7 = alloca double
%8 = alloca double
%9 = alloca double
%10 = alloca double
%11 = alloca double
store double %0, double* %4
store double %1, double* %5
store double %2, double* %6
%12 = load double, double* %5
%13 = load double, double* %6
%14 = fsub double %12, %13
%15 = fmul double 2.000000e+00, %14
%16 = fcmp olt double %15, 0.000000e+00
br i1 %16, label %17, label %23
17: ; preds = %3
%18 = load double, double* %5
%19 = load double, double* %6
%20 = fsub double %18, %19
%21 = fmul double 2.000000e+00, %20
%22 = fneg double %21
br label %28
23: ; preds = %3
%24 = load double, double* %5
%25 = load double, double* %6
%26 = fsub double %24, %25
%27 = fmul double 2.000000e+00, %26
br label %28
28: ; preds = %23, %17
%29 = phi double [ %22, %17 ], [ %27, %23 ]
%30 = fadd double %29, 2.000000e+00
store double %30, double* %7
%31 = load double, double* %7
%32 = fdiv double %31, 2.000000e+00
%33 = fadd double %32, 2.000000e+00
store double %33, double* %8
%34 = load double, double* %6
%35 = fadd double %34, 3.500000e+00
store double %35, double* %9
%36 = load double, double* %4
%37 = load double, double* %5
%38 = fsub double %36, %37
store double %38, double* %10
%39 = load double, double* %5
%40 = load double, double* %6
%41 = fcmp oge double %39, %40
br i1 %41, label %42, label %115
42: ; preds = %28
%43 = load double, double* %5
%44 = load double, double* %9
%45 = fcmp oge double %43, %44
br i1 %45, label %46, label %86
46: ; preds = %42
%47 = load double, double* %10
%48 = fcmp ole double %47, 0.000000e+00
br i1 %48, label %49, label %76
49: ; preds = %46
%50 = load double, double* %4
%51 = load double, double* %9
%52 = fcmp oge double %50, %51
br i1 %52, label %53, label %63
53: ; preds = %49
%54 = load double, double* %10
%55 = fneg double %54
%56 = load double, double* %8
%57 = fcmp ogt double %55, %56
br i1 %57, label %58, label %62
58: ; preds = %53
%59 = load double, double* %5
%60 = load double, double* %8
%61 = fsub double %59, %60
store double %61, double* %4
br label %62
62: ; preds = %58, %53
br label %75
63: ; preds = %49
%64 = load double, double* %4
%65 = load double, double* %6
%66 = fadd double %65, 2.000000e+00
%67 = fcmp ogt double %64, %66
br i1 %67, label %68, label %70
68: ; preds = %63
%69 = load double, double* %4
br label %73
70: ; preds = %63
%71 = load double, double* %6
%72 = fadd double %71, 2.000000e+00
br label %73
73: ; preds = %70, %68
%74 = phi double [ %69, %68 ], [ %72, %70 ]
store double %74, double* %4
br label %75
75: ; preds = %73, %62
br label %85
76: ; preds = %46
%77 = load double, double* %10
%78 = load double, double* %7
%79 = fcmp oge double %77, %78
br i1 %79, label %80, label %84
80: ; preds = %76
%81 = load double, double* %5
%82 = load double, double* %7
%83 = fadd double %81, %82
store double %83, double* %4
br label %84
84: ; preds = %80, %76
br label %85
85: ; preds = %84, %75
br label %114
86: ; preds = %42
%87 = load double, double* %10
%88 = fcmp ole double %87, 0.000000e+00
br i1 %88, label %89, label %101
89: ; preds = %86
%90 = load double, double* %4
%91 = load double, double* %6
%92 = fsub double %91, 5.000000e-01
%93 = fcmp ogt double %90, %92
br i1 %93, label %94, label %96
94: ; preds = %89
%95 = load double, double* %4
br label %99
96: ; preds = %89
%97 = load double, double* %6
%98 = fsub double %97, 5.000000e-01
br label %99
99: ; preds = %96, %94
%100 = phi double [ %95, %94 ], [ %98, %96 ]
store double %100, double* %4
br label %113
101: ; preds = %86
%102 = load double, double* %4
%103 = load double, double* %6
%104 = fadd double %103, 4.000000e+00
%105 = fcmp olt double %102, %104
br i1 %105, label %106, label %108
106: ; preds = %101
%107 = load double, double* %4
br label %111
108: ; preds = %101
%109 = load double, double* %6
%110 = fadd double %109, 4.000000e+00
br label %111
111: ; preds = %108, %106
%112 = phi double [ %107, %106 ], [ %110, %108 ]
store double %112, double* %4
br label %113
113: ; preds = %111, %99
br label %114
114: ; preds = %113, %85
br label %147
115: ; preds = %28
%116 = load double, double* %10
%117 = fcmp ole double %116, 0.000000e+00
br i1 %117, label %118, label %128
118: ; preds = %115
%119 = load double, double* %10
%120 = fneg double %119
%121 = load double, double* %7
%122 = fcmp ogt double %120, %121
br i1 %122, label %123, label %127
123: ; preds = %118
%124 = load double, double* %5
%125 = load double, double* %7
%126 = fsub double %124, %125
store double %126, double* %4
br label %127
127: ; preds = %123, %118
br label %146
128: ; preds = %115
%129 = load double, double* %6
%130 = fadd double %129, 5.000000e-01
store double %130, double* %11
%131 = load double, double* %4
%132 = load double, double* %11
%133 = fcmp ole double %131, %132
br i1 %133, label %134, label %143
134: ; preds = %128
%135 = load double, double* %10
%136 = load double, double* %8
%137 = fcmp ogt double %135, %136
br i1 %137, label %138, label %142
138: ; preds = %134
%139 = load double, double* %5
%140 = load double, double* %8
%141 = fadd double %139, %140
store double %141, double* %4
br label %142
142: ; preds = %138, %134
br label %145
143: ; preds = %128
%144 = load double, double* %11
store double %144, double* %4
br label %145
145: ; preds = %143, %142
br label %146
146: ; preds = %145, %127
br label %147
147: ; preds = %146, %114
%148 = load double, double* %4
ret double %148
}

LLVM IR (-O2):
define double @DEVfetlim(double %0, double %1, double %2) {
%4 = fsub double %1, %2
%5 = fmul double %4, 2.000000e+00
%6 = fcmp olt double %5, 0.000000e+00
%7 = fneg double %5
%8 = select i1 %6, double %7, double %5
%9 = fadd double %8, 2.000000e+00
%10 = fmul double %9, 5.000000e-01
%11 = fadd double %10, 2.000000e+00
%12 = fadd double %2, 3.500000e+00
%13 = fsub double %0, %1
%14 = fcmp ult double %1, %2
br i1 %14, label %43, label %15
15: ; preds = %3
%16 = fcmp ugt double %12, %1
%17 = fcmp ugt double %13, 0.000000e+00
br i1 %16, label %34, label %18
18: ; preds = %15
br i1 %17, label %30, label %19
19: ; preds = %18
%20 = fcmp ugt double %12, %0
br i1 %20, label %26, label %21
21: ; preds = %19
%22 = fneg double %13
%23 = fcmp olt double %11, %22
br i1 %23, label %24, label %57
24: ; preds = %21
%25 = fsub double %1, %11
br label %57
26: ; preds = %19
%27 = fadd double %2, 2.000000e+00
%28 = fcmp olt double %27, %0
%29 = select i1 %28, double %0, double %27
br label %57
30: ; preds = %18
%31 = fcmp ult double %13, %9
br i1 %31, label %57, label %32
32: ; preds = %30
%33 = fadd double %9, %1
br label %57
34: ; preds = %15
br i1 %17, label %39, label %35
35: ; preds = %34
%36 = fadd double %2, -5.000000e-01
%37 = fcmp olt double %36, %0
%38 = select i1 %37, double %0, double %36
br label %57
39: ; preds = %34
%40 = fadd double %2, 4.000000e+00
%41 = fcmp ogt double %40, %0
%42 = select i1 %41, double %0, double %40
br label %57
43: ; preds = %3
%44 = fcmp ugt double %13, 0.000000e+00
br i1 %44, label %50, label %45
45: ; preds = %43
%46 = fneg double %13
%47 = fcmp olt double %9, %46
br i1 %47, label %48, label %57
48: ; preds = %45
%49 = fsub double %1, %9
br label %57
50: ; preds = %43
%51 = fadd double %2, 5.000000e-01
%52 = fcmp ult double %51, %0
br i1 %52, label %57, label %53
53: ; preds = %50
%54 = fcmp ogt double %13, %11
br i1 %54, label %55, label %57
55: ; preds = %53
%56 = fadd double %11, %1
br label %57
57: ; preds = %50, %48, %45, %53, %55, %30, %32, %26, %24, %21, %39, %35
%58 = phi double [ %25, %24 ], [ %0, %21 ], [ %29, %26 ], [ %33, %32 ], [ %0, %30 ], [ %38, %35 ], [ %42, %39 ], [ %49, %48 ], [ %0, %45 ], [ %56, %55 ], [ %0, %53 ], [ %51, %50 ]
ret double %58
}