Some compilers (i.e. MSC) also require manual character validation.
A source:
volatile float mixValue; volatile float inputLevel; float u = mixValue*inputLevel; float v = -u; float a[] = { v, u }; mixValue = (mixValue + inputLevel) + a[ (inputLevel<0.0) & (mixValue<0.0) ];
IntelC 11.1:
movss xmm1, DWORD PTR [12+esp] mulss xmm1, DWORD PTR [16+esp] movss xmm6, DWORD PTR [12+esp] movss xmm2, DWORD PTR [16+esp] movss xmm3, DWORD PTR [16+esp] movss xmm5, DWORD PTR [12+esp] xorps xmm4, xmm4 movaps xmm0, xmm4 subss xmm0, xmm1 movss DWORD PTR [esp], xmm0 movss DWORD PTR [4+esp], xmm1 addss xmm6, xmm2 xor eax, eax cmpltss xmm3, xmm4 movd ecx, xmm3 neg ecx cmpltss xmm5, xmm4 movd edx, xmm5 neg edx and ecx, edx addss xmm6, DWORD PTR [esp+ecx*4] movss DWORD PTR [12+esp], xmm6
gcc 4.5:
flds 32(%esp) flds 16(%esp) fmulp %st, %st(1) fld %st(0) fchs fstps (%esp) fstps 4(%esp) flds 32(%esp) flds 16(%esp) flds 16(%esp) flds 32(%esp) fxch %st(2) faddp %st, %st(3) fldz fcomi %st(2), %st fstp %st(2) fxch %st(1) seta %dl xorl %eax, %eax fcomip %st(1), %st fstp %st(0) seta %al andl %edx, %eax fadds (%esp,%eax,4) xorl %eax, %eax fstps 32(%esp)
source share