void psnd_get_clipped_viewwin(float *vx1, float *vy1, float *vx2, float *vy2,
                              float *wx1, float *wy1, float *wx2, float *wy2) {
  float nwx1 = *wx1;
  float nwx2 = *wx2;
  float nwy1 = *wy1;
  float nwy2 = *wy2;
  float nvx1 = (((*vx1) < (*vx2)) ? (*vx1) : (*vx2));
  float nvx2 = (((*vx1) > (*vx2)) ? (*vx1) : (*vx2));
  float nvy1 = (((*vy1) < (*vy2)) ? (*vy1) : (*vy2));
  float nvy2 = (((*vy1) > (*vy2)) ? (*vy1) : (*vy2));
  if (nvx1 < 0.0) {
    nvx1 = 0.0;
    nwx1 = (nvx1 - (*vx1)) * (*wx2 - *wx1) / (*vx2 - *vx1) + *wx1;
  }
  if (nvx2 > 1.0) {
    nvx2 = 1.0;
    nwx2 = (nvx2 - (*vx1)) * (*wx2 - *wx1) / (*vx2 - *vx1) + *wx1;
  }
  if (nvy1 < 0.0) {
    nvy1 = 0.0;
    nwy1 = (nvy1 - (*vy1)) * (*wy2 - *wy1) / (*vy2 - *vy1) + *wy1;
  }
  if (nvy2 > 1.0) {
    nvy2 = 1.0;
    nwy2 = (nvy2 - (*vy1)) * (*wy2 - *wy1) / (*vy2 - *vy1) + *wy1;
  }
  *wx1 = nwx1;
  *wx2 = nwx2;
  *wy1 = nwy1;
  *wy2 = nwy2;
  *vx1 = nvx1;
  *vx2 = nvx2;
  *vy1 = nvy1;
  *vy2 = nvy2;
}


x86 assembly (clang, -O0):
<psnd_get_clipped_viewwin>:
push   %rbp
mov    %rsp,%rbp
mov    0x18(%rbp),%rax
mov    0x10(%rbp),%rax
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8,-0x28(%rbp)
mov    %r9,-0x30(%rbp)
mov    -0x28(%rbp),%rax
movss  (%rax),%xmm0
movss  %xmm0,-0x34(%rbp)
mov    0x10(%rbp),%rax
movss  (%rax),%xmm0
movss  %xmm0,-0x38(%rbp)
mov    -0x30(%rbp),%rax
movss  (%rax),%xmm0
movss  %xmm0,-0x3c(%rbp)
mov    0x18(%rbp),%rax
movss  (%rax),%xmm0
movss  %xmm0,-0x40(%rbp)
mov    -0x8(%rbp),%rax
movss  (%rax),%xmm1
mov    -0x18(%rbp),%rax
movss  (%rax),%xmm0
ucomiss %xmm1,%xmm0
jbe    1183 <psnd_get_clipped_viewwin+0x83>
mov    -0x8(%rbp),%rax
movss  (%rax),%xmm0
movss  %xmm0,-0x54(%rbp)
jmp    1190 <psnd_get_clipped_viewwin+0x90>
mov    -0x18(%rbp),%rax
movss  (%rax),%xmm0
movss  %xmm0,-0x54(%rbp)
movss  -0x54(%rbp),%xmm0
movss  %xmm0,-0x44(%rbp)
mov    -0x8(%rbp),%rax
movss  (%rax),%xmm0
mov    -0x18(%rbp),%rax
ucomiss (%rax),%xmm0
jbe    11c1 <psnd_get_clipped_viewwin+0xc1>
mov    -0x8(%rbp),%rax
movss  (%rax),%xmm0
movss  %xmm0,-0x58(%rbp)
jmp    11ce <psnd_get_clipped_viewwin+0xce>
mov    -0x18(%rbp),%rax
movss  (%rax),%xmm0
movss  %xmm0,-0x58(%rbp)
movss  -0x58(%rbp),%xmm0
movss  %xmm0,-0x48(%rbp)
mov    -0x10(%rbp),%rax
movss  (%rax),%xmm1
mov    -0x20(%rbp),%rax
movss  (%rax),%xmm0
ucomiss %xmm1,%xmm0
jbe    1203 <psnd_get_clipped_viewwin+0x103>
mov    -0x10(%rbp),%rax
movss  (%rax),%xmm0
movss  %xmm0,-0x5c(%rbp)
jmp    1210 <psnd_get_clipped_viewwin+0x110>
mov    -0x20(%rbp),%rax
movss  (%rax),%xmm0
movss  %xmm0,-0x5c(%rbp)
movss  -0x5c(%rbp),%xmm0
movss  %xmm0,-0x4c(%rbp)
mov    -0x10(%rbp),%rax
movss  (%rax),%xmm0
mov    -0x20(%rbp),%rax
ucomiss (%rax),%xmm0
jbe    1241 <psnd_get_clipped_viewwin+0x141>
mov    -0x10(%rbp),%rax
movss  (%rax),%xmm0
movss  %xmm0,-0x60(%rbp)
jmp    124e <psnd_get_clipped_viewwin+0x14e>
mov    -0x20(%rbp),%rax
movss  (%rax),%xmm0
movss  %xmm0,-0x60(%rbp)
movss  -0x60(%rbp),%xmm0
movss  %xmm0,-0x50(%rbp)
movss  -0x44(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
xorps  %xmm0,%xmm0
ucomisd %xmm1,%xmm0
jbe    12b8 <psnd_get_clipped_viewwin+0x1b8>
xorps  %xmm0,%xmm0
movss  %xmm0,-0x44(%rbp)
movss  -0x44(%rbp),%xmm0
mov    -0x8(%rbp),%rax
subss  (%rax),%xmm0
mov    0x10(%rbp),%rax
movss  (%rax),%xmm1
mov    -0x28(%rbp),%rax
subss  (%rax),%xmm1
mulss  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
movss  (%rax),%xmm1
mov    -0x8(%rbp),%rax
subss  (%rax),%xmm1
divss  %xmm1,%xmm0
mov    -0x28(%rbp),%rax
addss  (%rax),%xmm0
movss  %xmm0,-0x34(%rbp)
movss  -0x48(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xd37(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    1322 <psnd_get_clipped_viewwin+0x222>
movss  0xd2d(%rip),%xmm0
movss  %xmm0,-0x48(%rbp)
movss  -0x48(%rbp),%xmm0
mov    -0x8(%rbp),%rax
subss  (%rax),%xmm0
mov    0x10(%rbp),%rax
movss  (%rax),%xmm1
mov    -0x28(%rbp),%rax
subss  (%rax),%xmm1
mulss  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
movss  (%rax),%xmm1
mov    -0x8(%rbp),%rax
subss  (%rax),%xmm1
divss  %xmm1,%xmm0
mov    -0x28(%rbp),%rax
addss  (%rax),%xmm0
movss  %xmm0,-0x38(%rbp)
movss  -0x4c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
xorps  %xmm0,%xmm0
ucomisd %xmm1,%xmm0
jbe    1382 <psnd_get_clipped_viewwin+0x282>
xorps  %xmm0,%xmm0
movss  %xmm0,-0x4c(%rbp)
movss  -0x4c(%rbp),%xmm0
mov    -0x10(%rbp),%rax
subss  (%rax),%xmm0
mov    0x18(%rbp),%rax
movss  (%rax),%xmm1
mov    -0x30(%rbp),%rax
subss  (%rax),%xmm1
mulss  %xmm1,%xmm0
mov    -0x20(%rbp),%rax
movss  (%rax),%xmm1
mov    -0x10(%rbp),%rax
subss  (%rax),%xmm1
divss  %xmm1,%xmm0
mov    -0x30(%rbp),%rax
addss  (%rax),%xmm0
movss  %xmm0,-0x3c(%rbp)
movss  -0x50(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xc6d(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    13ec <psnd_get_clipped_viewwin+0x2ec>
movss  0xc63(%rip),%xmm0
movss  %xmm0,-0x50(%rbp)
movss  -0x50(%rbp),%xmm0
mov    -0x10(%rbp),%rax
subss  (%rax),%xmm0
mov    0x18(%rbp),%rax
movss  (%rax),%xmm1
mov    -0x30(%rbp),%rax
subss  (%rax),%xmm1
mulss  %xmm1,%xmm0
mov    -0x20(%rbp),%rax
movss  (%rax),%xmm1
mov    -0x10(%rbp),%rax
subss  (%rax),%xmm1
divss  %xmm1,%xmm0
mov    -0x30(%rbp),%rax
addss  (%rax),%xmm0
movss  %xmm0,-0x40(%rbp)
movss  -0x34(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movss  %xmm0,(%rax)
movss  -0x38(%rbp),%xmm0
mov    0x10(%rbp),%rax
movss  %xmm0,(%rax)
movss  -0x3c(%rbp),%xmm0
mov    -0x30(%rbp),%rax
movss  %xmm0,(%rax)
movss  -0x40(%rbp),%xmm0
mov    0x18(%rbp),%rax
movss  %xmm0,(%rax)
movss  -0x44(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movss  %xmm0,(%rax)
movss  -0x48(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movss  %xmm0,(%rax)
movss  -0x4c(%rbp),%xmm0
mov    -0x10(%rbp),%rax
movss  %xmm0,(%rax)
movss  -0x50(%rbp),%xmm0
mov    -0x20(%rbp),%rax
movss  %xmm0,(%rax)
pop    %rbp
ret

x86 assembly (clang, -O2):
<psnd_get_clipped_viewwin>:
mov    0x8(%rsp),%r10
movss  (%r8),%xmm4
movss  (%r10),%xmm0
movss  (%rdi),%xmm2
movss  (%rdx),%xmm7
movaps %xmm2,%xmm11
minss  %xmm7,%xmm11
movaps %xmm2,%xmm10
maxss  %xmm7,%xmm10
movss  (%rsi),%xmm9
movss  (%rcx),%xmm8
xorps  %xmm1,%xmm1
ucomiss %xmm11,%xmm1
movaps %xmm4,%xmm3
jbe    1161 <psnd_get_clipped_viewwin+0x61>
subss  %xmm2,%xmm1
movaps %xmm0,%xmm3
subss  %xmm4,%xmm3
mulss  %xmm1,%xmm3
movaps %xmm7,%xmm1
subss  %xmm2,%xmm1
divss  %xmm1,%xmm3
addss  %xmm4,%xmm3
xorps  %xmm11,%xmm11
mov    0x10(%rsp),%rax
movaps %xmm9,%xmm6
minss  %xmm8,%xmm6
ucomiss 0xe89(%rip),%xmm10
jbe    119e <psnd_get_clipped_viewwin+0x9e>
movss  0xe7e(%rip),%xmm10
movaps %xmm10,%xmm1
subss  %xmm2,%xmm1
subss  %xmm4,%xmm0
mulss  %xmm1,%xmm0
subss  %xmm2,%xmm7
divss  %xmm7,%xmm0
addss  %xmm4,%xmm0
movss  (%r9),%xmm1
movss  (%rax),%xmm4
movaps %xmm9,%xmm7
maxss  %xmm8,%xmm7
xorps  %xmm5,%xmm5
ucomiss %xmm6,%xmm5
movaps %xmm1,%xmm2
jbe    11df <psnd_get_clipped_viewwin+0xdf>
subss  %xmm9,%xmm5
movaps %xmm4,%xmm2
subss  %xmm1,%xmm2
mulss  %xmm5,%xmm2
movaps %xmm8,%xmm5
subss  %xmm9,%xmm5
divss  %xmm5,%xmm2
addss  %xmm1,%xmm2
xorps  %xmm6,%xmm6
ucomiss 0xe1a(%rip),%xmm7
jbe    120e <psnd_get_clipped_viewwin+0x10e>
movss  0xe10(%rip),%xmm7
movaps %xmm7,%xmm5
subss  %xmm9,%xmm5
subss  %xmm1,%xmm4
mulss  %xmm5,%xmm4
subss  %xmm9,%xmm8
divss  %xmm8,%xmm4
addss  %xmm1,%xmm4
movss  %xmm3,(%r8)
movss  %xmm0,(%r10)
movss  %xmm2,(%r9)
movss  %xmm4,(%rax)
movss  %xmm11,(%rdi)
movss  %xmm10,(%rdx)
movss  %xmm6,(%rsi)
movss  %xmm7,(%rcx)
ret

LLVM IR (-O0):
define void @psnd_get_clipped_viewwin(float* %0, float* %1, float* %2, float* %3, float* %4, float* %5, float* %6, float* %7) {
%9 = alloca float*
%10 = alloca float*
%11 = alloca float*
%12 = alloca float*
%13 = alloca float*
%14 = alloca float*
%15 = alloca float*
%16 = alloca float*
%17 = alloca float
%18 = alloca float
%19 = alloca float
%20 = alloca float
%21 = alloca float
%22 = alloca float
%23 = alloca float
%24 = alloca float
store float* %0, float** %9
store float* %1, float** %10
store float* %2, float** %11
store float* %3, float** %12
store float* %4, float** %13
store float* %5, float** %14
store float* %6, float** %15
store float* %7, float** %16
%25 = load float*, float** %13
%26 = load float, float* %25
store float %26, float* %17
%27 = load float*, float** %15
%28 = load float, float* %27
store float %28, float* %18
%29 = load float*, float** %14
%30 = load float, float* %29
store float %30, float* %19
%31 = load float*, float** %16
%32 = load float, float* %31
store float %32, float* %20
%33 = load float*, float** %9
%34 = load float, float* %33
%35 = load float*, float** %11
%36 = load float, float* %35
%37 = fcmp olt float %34, %36
br i1 %37, label %38, label %41
38: ; preds = %8
%39 = load float*, float** %9
%40 = load float, float* %39
br label %44
41: ; preds = %8
%42 = load float*, float** %11
%43 = load float, float* %42
br label %44
44: ; preds = %41, %38
%45 = phi float [ %40, %38 ], [ %43, %41 ]
store float %45, float* %21
%46 = load float*, float** %9
%47 = load float, float* %46
%48 = load float*, float** %11
%49 = load float, float* %48
%50 = fcmp ogt float %47, %49
br i1 %50, label %51, label %54
51: ; preds = %44
%52 = load float*, float** %9
%53 = load float, float* %52
br label %57
54: ; preds = %44
%55 = load float*, float** %11
%56 = load float, float* %55
br label %57
57: ; preds = %54, %51
%58 = phi float [ %53, %51 ], [ %56, %54 ]
store float %58, float* %22
%59 = load float*, float** %10
%60 = load float, float* %59
%61 = load float*, float** %12
%62 = load float, float* %61
%63 = fcmp olt float %60, %62
br i1 %63, label %64, label %67
64: ; preds = %57
%65 = load float*, float** %10
%66 = load float, float* %65
br label %70
67: ; preds = %57
%68 = load float*, float** %12
%69 = load float, float* %68
br label %70
70: ; preds = %67, %64
%71 = phi float [ %66, %64 ], [ %69, %67 ]
store float %71, float* %23
%72 = load float*, float** %10
%73 = load float, float* %72
%74 = load float*, float** %12
%75 = load float, float* %74
%76 = fcmp ogt float %73, %75
br i1 %76, label %77, label %80
77: ; preds = %70
%78 = load float*, float** %10
%79 = load float, float* %78
br label %83
80: ; preds = %70
%81 = load float*, float** %12
%82 = load float, float* %81
br label %83
83: ; preds = %80, %77
%84 = phi float [ %79, %77 ], [ %82, %80 ]
store float %84, float* %24
%85 = load float, float* %21
%86 = fpext float %85 to double
%87 = fcmp olt double %86, 0.000000e+00
br i1 %87, label %88, label %108
88: ; preds = %83
store float 0.000000e+00, float* %21
%89 = load float, float* %21
%90 = load float*, float** %9
%91 = load float, float* %90
%92 = fsub float %89, %91
%93 = load float*, float** %15
%94 = load float, float* %93
%95 = load float*, float** %13
%96 = load float, float* %95
%97 = fsub float %94, %96
%98 = fmul float %92, %97
%99 = load float*, float** %11
%100 = load float, float* %99
%101 = load float*, float** %9
%102 = load float, float* %101
%103 = fsub float %100, %102
%104 = fdiv float %98, %103
%105 = load float*, float** %13
%106 = load float, float* %105
%107 = fadd float %104, %106
store float %107, float* %17
br label %108
108: ; preds = %88, %83
%109 = load float, float* %22
%110 = fpext float %109 to double
%111 = fcmp ogt double %110, 1.000000e+00
br i1 %111, label %112, label %132
112: ; preds = %108
store float 1.000000e+00, float* %22
%113 = load float, float* %22
%114 = load float*, float** %9
%115 = load float, float* %114
%116 = fsub float %113, %115
%117 = load float*, float** %15
%118 = load float, float* %117
%119 = load float*, float** %13
%120 = load float, float* %119
%121 = fsub float %118, %120
%122 = fmul float %116, %121
%123 = load float*, float** %11
%124 = load float, float* %123
%125 = load float*, float** %9
%126 = load float, float* %125
%127 = fsub float %124, %126
%128 = fdiv float %122, %127
%129 = load float*, float** %13
%130 = load float, float* %129
%131 = fadd float %128, %130
store float %131, float* %18
br label %132
132: ; preds = %112, %108
%133 = load float, float* %23
%134 = fpext float %133 to double
%135 = fcmp olt double %134, 0.000000e+00
br i1 %135, label %136, label %156
136: ; preds = %132
store float 0.000000e+00, float* %23
%137 = load float, float* %23
%138 = load float*, float** %10
%139 = load float, float* %138
%140 = fsub float %137, %139
%141 = load float*, float** %16
%142 = load float, float* %141
%143 = load float*, float** %14
%144 = load float, float* %143
%145 = fsub float %142, %144
%146 = fmul float %140, %145
%147 = load float*, float** %12
%148 = load float, float* %147
%149 = load float*, float** %10
%150 = load float, float* %149
%151 = fsub float %148, %150
%152 = fdiv float %146, %151
%153 = load float*, float** %14
%154 = load float, float* %153
%155 = fadd float %152, %154
store float %155, float* %19
br label %156
156: ; preds = %136, %132
%157 = load float, float* %24
%158 = fpext float %157 to double
%159 = fcmp ogt double %158, 1.000000e+00
br i1 %159, label %160, label %180
160: ; preds = %156
store float 1.000000e+00, float* %24
%161 = load float, float* %24
%162 = load float*, float** %10
%163 = load float, float* %162
%164 = fsub float %161, %163
%165 = load float*, float** %16
%166 = load float, float* %165
%167 = load float*, float** %14
%168 = load float, float* %167
%169 = fsub float %166, %168
%170 = fmul float %164, %169
%171 = load float*, float** %12
%172 = load float, float* %171
%173 = load float*, float** %10
%174 = load float, float* %173
%175 = fsub float %172, %174
%176 = fdiv float %170, %175
%177 = load float*, float** %14
%178 = load float, float* %177
%179 = fadd float %176, %178
store float %179, float* %20
br label %180
180: ; preds = %160, %156
%181 = load float, float* %17
%182 = load float*, float** %13
store float %181, float* %182
%183 = load float, float* %18
%184 = load float*, float** %15
store float %183, float* %184
%185 = load float, float* %19
%186 = load float*, float** %14
store float %185, float* %186
%187 = load float, float* %20
%188 = load float*, float** %16
store float %187, float* %188
%189 = load float, float* %21
%190 = load float*, float** %9
store float %189, float* %190
%191 = load float, float* %22
%192 = load float*, float** %11
store float %191, float* %192
%193 = load float, float* %23
%194 = load float*, float** %10
store float %193, float* %194
%195 = load float, float* %24
%196 = load float*, float** %12
store float %195, float* %196
ret void
}

LLVM IR (-O2):
define void @psnd_get_clipped_viewwin(float* nocapture %0, float* nocapture %1, float* nocapture %2, float* nocapture %3, float* nocapture %4, float* nocapture %5, float* nocapture %6, float* nocapture %7) {
%9 = load float, float* %4
%10 = load float, float* %6
%11 = load float, float* %5
%12 = load float, float* %7
%13 = load float, float* %0
%14 = load float, float* %2
%15 = fcmp olt float %13, %14
%16 = select i1 %15, float %13, float %14
%17 = fcmp ogt float %13, %14
%18 = select i1 %17, float %13, float %14
%19 = load float, float* %1
%20 = load float, float* %3
%21 = fcmp olt float %19, %20
%22 = select i1 %21, float %19, float %20
%23 = fcmp ogt float %19, %20
%24 = select i1 %23, float %19, float %20
%25 = fcmp olt float %16, 0.000000e+00
br i1 %25, label %26, label %33
26: ; preds = %8
%27 = fsub float 0.000000e+00, %13
%28 = fsub float %10, %9
%29 = fmul float %28, %27
%30 = fsub float %14, %13
%31 = fdiv float %29, %30
%32 = fadd float %9, %31
br label %33
33: ; preds = %26, %8
%34 = phi float [ %32, %26 ], [ %9, %8 ]
%35 = phi float [ 0.000000e+00, %26 ], [ %16, %8 ]
%36 = fcmp ogt float %18, 1.000000e+00
br i1 %36, label %37, label %44
37: ; preds = %33
%38 = fsub float 1.000000e+00, %13
%39 = fsub float %10, %9
%40 = fmul float %39, %38
%41 = fsub float %14, %13
%42 = fdiv float %40, %41
%43 = fadd float %9, %42
br label %44
44: ; preds = %37, %33
%45 = phi float [ %43, %37 ], [ %10, %33 ]
%46 = phi float [ 1.000000e+00, %37 ], [ %18, %33 ]
%47 = fcmp olt float %22, 0.000000e+00
br i1 %47, label %48, label %55
48: ; preds = %44
%49 = fsub float 0.000000e+00, %19
%50 = fsub float %12, %11
%51 = fmul float %50, %49
%52 = fsub float %20, %19
%53 = fdiv float %51, %52
%54 = fadd float %11, %53
br label %55
55: ; preds = %48, %44
%56 = phi float [ %54, %48 ], [ %11, %44 ]
%57 = phi float [ 0.000000e+00, %48 ], [ %22, %44 ]
%58 = fcmp ogt float %24, 1.000000e+00
br i1 %58, label %59, label %66
59: ; preds = %55
%60 = fsub float 1.000000e+00, %19
%61 = fsub float %12, %11
%62 = fmul float %61, %60
%63 = fsub float %20, %19
%64 = fdiv float %62, %63
%65 = fadd float %11, %64
br label %66
66: ; preds = %59, %55
%67 = phi float [ %65, %59 ], [ %12, %55 ]
%68 = phi float [ 1.000000e+00, %59 ], [ %24, %55 ]
store float %34, float* %4
store float %45, float* %6
store float %56, float* %5
store float %67, float* %7
store float %35, float* %0
store float %46, float* %2
store float %57, float* %1
store float %68, float* %3
ret void
}