unsigned int weightedpixel(unsigned int p1, unsigned int p2, double w,
                           double rw) {
  return ((((((p1 >> 16) & 0xff) * rw + ((p2 >> 16) & 0xff) * w) < 0.5)
               ? (unsigned int)0
           : (((p1 >> 16) & 0xff) * rw + ((p2 >> 16) & 0xff) * w) >= 254.5
               ? (unsigned int)255
               : (unsigned int)((((p1 >> 16) & 0xff) * rw +
                                 ((p2 >> 16) & 0xff) * w) +
                                0.5))
          << 16) |
         ((((((p1 >> 8) & 0xff) * rw + ((p2 >> 8) & 0xff) * w) < 0.5)
               ? (unsigned int)0
           : (((p1 >> 8) & 0xff) * rw + ((p2 >> 8) & 0xff) * w) >= 254.5
               ? (unsigned int)255
               : (unsigned int)((((p1 >> 8) & 0xff) * rw +
                                 ((p2 >> 8) & 0xff) * w) +
                                0.5))
          << 8) |
         ((((p1 & 0xff) * rw + (p2 & 0xff) * w) < 0.5) ? (unsigned int)0
          : ((p1 & 0xff) * rw + (p2 & 0xff) * w) >= 254.5
              ? (unsigned int)255
              : (unsigned int)(((p1 & 0xff) * rw + (p2 & 0xff) * w) + 0.5));
}


x86 assembly (clang, -O0):
<weightedpixel>:
push   %rbp
mov    %rsp,%rbp
mov    %edi,-0x4(%rbp)
mov    %esi,-0x8(%rbp)
movsd  %xmm0,-0x10(%rbp)
movsd  %xmm1,-0x18(%rbp)
movzbl -0x2(%rbp),%eax
cvtsi2sd %eax,%xmm1
movsd  -0x18(%rbp),%xmm2
movzbl -0x6(%rbp),%eax
cvtsi2sd %eax,%xmm0
mulsd  -0x10(%rbp),%xmm0
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  0xec2(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    1152 <weightedpixel+0x52>
xor    %eax,%eax
mov    %eax,-0x1c(%rbp)
jmp    11d3 <weightedpixel+0xd3>
movzbl -0x2(%rbp),%eax
cvtsi2sd %eax,%xmm0
movsd  -0x18(%rbp),%xmm2
movzbl -0x6(%rbp),%eax
cvtsi2sd %eax,%xmm1
mulsd  -0x10(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  0xe8c(%rip),%xmm1
ucomisd %xmm1,%xmm0
jb     1193 <weightedpixel+0x93>
mov    $0xff,%eax
mov    %eax,-0x20(%rbp)
jmp    11cd <weightedpixel+0xcd>
movzbl -0x2(%rbp),%eax
cvtsi2sd %eax,%xmm0
movsd  -0x18(%rbp),%xmm2
movzbl -0x6(%rbp),%eax
cvtsi2sd %eax,%xmm1
movsd  -0x10(%rbp),%xmm3
mulsd  %xmm3,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  0xe3f(%rip),%xmm1
addsd  %xmm1,%xmm0
cvttsd2si %xmm0,%rax
mov    %eax,-0x20(%rbp)
mov    -0x20(%rbp),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
shl    $0x10,%eax
mov    %eax,-0x24(%rbp)
movzbl -0x3(%rbp),%eax
cvtsi2sd %eax,%xmm1
movsd  -0x18(%rbp),%xmm2
movzbl -0x7(%rbp),%eax
cvtsi2sd %eax,%xmm0
mulsd  -0x10(%rbp),%xmm0
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  0xdfa(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    121a <weightedpixel+0x11a>
xor    %eax,%eax
mov    %eax,-0x28(%rbp)
jmp    129b <weightedpixel+0x19b>
movzbl -0x3(%rbp),%eax
cvtsi2sd %eax,%xmm0
movsd  -0x18(%rbp),%xmm2
movzbl -0x7(%rbp),%eax
cvtsi2sd %eax,%xmm1
mulsd  -0x10(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  0xdc4(%rip),%xmm1
ucomisd %xmm1,%xmm0
jb     125b <weightedpixel+0x15b>
mov    $0xff,%eax
mov    %eax,-0x2c(%rbp)
jmp    1295 <weightedpixel+0x195>
movzbl -0x3(%rbp),%eax
cvtsi2sd %eax,%xmm0
movsd  -0x18(%rbp),%xmm2
movzbl -0x7(%rbp),%eax
cvtsi2sd %eax,%xmm1
movsd  -0x10(%rbp),%xmm3
mulsd  %xmm3,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  0xd77(%rip),%xmm1
addsd  %xmm1,%xmm0
cvttsd2si %xmm0,%rax
mov    %eax,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
mov    %eax,-0x28(%rbp)
mov    -0x24(%rbp),%eax
mov    -0x28(%rbp),%ecx
shl    $0x8,%ecx
or     %ecx,%eax
mov    %eax,-0x30(%rbp)
movzbl -0x4(%rbp),%eax
cvtsi2sd %eax,%xmm1
movsd  -0x18(%rbp),%xmm2
movzbl -0x8(%rbp),%eax
cvtsi2sd %eax,%xmm0
mulsd  -0x10(%rbp),%xmm0
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  0xd2d(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    12e7 <weightedpixel+0x1e7>
xor    %eax,%eax
mov    %eax,-0x34(%rbp)
jmp    1368 <weightedpixel+0x268>
movzbl -0x4(%rbp),%eax
cvtsi2sd %eax,%xmm0
movsd  -0x18(%rbp),%xmm2
movzbl -0x8(%rbp),%eax
cvtsi2sd %eax,%xmm1
mulsd  -0x10(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  0xcf7(%rip),%xmm1
ucomisd %xmm1,%xmm0
jb     1328 <weightedpixel+0x228>
mov    $0xff,%eax
mov    %eax,-0x38(%rbp)
jmp    1362 <weightedpixel+0x262>
movzbl -0x4(%rbp),%eax
cvtsi2sd %eax,%xmm0
movsd  -0x18(%rbp),%xmm2
movzbl -0x8(%rbp),%eax
cvtsi2sd %eax,%xmm1
movsd  -0x10(%rbp),%xmm3
mulsd  %xmm3,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  0xcaa(%rip),%xmm1
addsd  %xmm1,%xmm0
cvttsd2si %xmm0,%rax
mov    %eax,-0x38(%rbp)
mov    -0x38(%rbp),%eax
mov    %eax,-0x34(%rbp)
mov    -0x30(%rbp),%eax
mov    -0x34(%rbp),%ecx
or     %ecx,%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<weightedpixel>:
push   %rbx
mov    %esi,%edx
mov    %edi,%ebx
mov    %edi,%eax
shr    $0x10,%eax
movzbl %al,%eax
cvtsi2sd %eax,%xmm3
mov    %esi,%eax
shr    $0x10,%eax
movzbl %al,%eax
cvtsi2sd %eax,%xmm2
mulsd  %xmm0,%xmm2
mulsd  %xmm1,%xmm3
addsd  %xmm2,%xmm3
xor    %eax,%eax
movsd  0xecd(%rip),%xmm2
ucomisd %xmm3,%xmm2
mov    $0x0,%ecx
ja     115d <weightedpixel+0x5d>
mov    $0xff0000,%ecx
ucomisd 0xebd(%rip),%xmm3
jae    115d <weightedpixel+0x5d>
addsd  0xeab(%rip),%xmm3
cvttsd2si %xmm3,%rcx
shl    $0x10,%ecx
movzbl %bh,%esi
xorps  %xmm3,%xmm3
cvtsi2sd %esi,%xmm3
movzbl %dh,%esi
cvtsi2sd %esi,%xmm4
mulsd  %xmm0,%xmm4
mulsd  %xmm1,%xmm3
addsd  %xmm4,%xmm3
ucomisd %xmm3,%xmm2
ja     119f <weightedpixel+0x9f>
mov    $0xff00,%eax
ucomisd 0xe7b(%rip),%xmm3
jae    119f <weightedpixel+0x9f>
addsd  0xe69(%rip),%xmm3
cvttsd2si %xmm3,%rax
shl    $0x8,%eax
movzbl %bl,%esi
xorps  %xmm3,%xmm3
cvtsi2sd %esi,%xmm3
movzbl %dl,%edx
xorps  %xmm4,%xmm4
cvtsi2sd %edx,%xmm4
mulsd  %xmm0,%xmm4
mulsd  %xmm1,%xmm3
addsd  %xmm4,%xmm3
xor    %edx,%edx
ucomisd %xmm3,%xmm2
ja     11e3 <weightedpixel+0xe3>
mov    $0xff,%edx
ucomisd 0xe34(%rip),%xmm3
jae    11e3 <weightedpixel+0xe3>
addsd  0xe22(%rip),%xmm3
cvttsd2si %xmm3,%rdx
or     %ecx,%eax
or     %edx,%eax
pop    %rbx
ret

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

LLVM IR (-O2):
define i32 @weightedpixel(i32 %0, i32 %1, double %2, double %3) {
%5 = lshr i32 %0, 16
%6 = and i32 %5, 255
%7 = uitofp i32 %6 to double
%8 = lshr i32 %1, 16
%9 = and i32 %8, 255
%10 = uitofp i32 %9 to double
%11 = fmul double %10, %2
%12 = tail call double @llvm.fmuladd.f64(double %7, double %3, double %11)
%13 = fcmp olt double %12, 5.000000e-01
br i1 %13, label %20, label %14
14: ; preds = %4
%15 = fcmp ult double %12, 2.545000e+02
br i1 %15, label %16, label %20
16: ; preds = %14
%17 = fadd double %12, 5.000000e-01
%18 = fptoui double %17 to i32
%19 = shl i32 %18, 16
br label %20
20: ; preds = %16, %14, %4
%21 = phi i32 [ 0, %4 ], [ %19, %16 ], [ 16711680, %14 ]
%22 = lshr i32 %0, 8
%23 = and i32 %22, 255
%24 = uitofp i32 %23 to double
%25 = lshr i32 %1, 8
%26 = and i32 %25, 255
%27 = uitofp i32 %26 to double
%28 = fmul double %27, %2
%29 = tail call double @llvm.fmuladd.f64(double %24, double %3, double %28)
%30 = fcmp olt double %29, 5.000000e-01
br i1 %30, label %37, label %31
31: ; preds = %20
%32 = fcmp ult double %29, 2.545000e+02
br i1 %32, label %33, label %37
33: ; preds = %31
%34 = fadd double %29, 5.000000e-01
%35 = fptoui double %34 to i32
%36 = shl i32 %35, 8
br label %37
37: ; preds = %33, %31, %20
%38 = phi i32 [ 0, %20 ], [ %36, %33 ], [ 65280, %31 ]
%39 = and i32 %0, 255
%40 = uitofp i32 %39 to double
%41 = and i32 %1, 255
%42 = uitofp i32 %41 to double
%43 = fmul double %42, %2
%44 = tail call double @llvm.fmuladd.f64(double %40, double %3, double %43)
%45 = fcmp olt double %44, 5.000000e-01
br i1 %45, label %51, label %46
46: ; preds = %37
%47 = fcmp ult double %44, 2.545000e+02
br i1 %47, label %48, label %51
48: ; preds = %46
%49 = fadd double %44, 5.000000e-01
%50 = fptoui double %49 to i32
br label %51
51: ; preds = %48, %46, %37
%52 = phi i32 [ 0, %37 ], [ %50, %48 ], [ 255, %46 ]
%53 = or i32 %38, %21
%54 = or i32 %53, %52
ret i32 %54
}