// File: /workspace/github_cpp_makefile_star2_O2/lvandeve[P]lodepng/lodepng_util.cpp
// Function: lodepng::lodepng_powf(float, float)
static float lodepng_powf(float x, float y) {
  float j, t0, t1, l;
  int i = 0;
  /* handle all the special floating point rules */
  if(x == 1 || y == 0) return 1; /*these cases return 1 even if the other value is NaN, as specified*/
  if(y == 1) return x; /* preserves negative-0 */
  if(!(x > 0 && x <= lodepng_flt_max && y >= -lodepng_flt_max && y <= lodepng_flt_max)) { /*all special cases*/
    if(x != x || y != y) return x + y; /* nan */
    if(x > 0) {
      if(x > lodepng_flt_max) return y <= 0 ? (y == 0 ? 1 : 0) : x; /* x = +infinity */
    } else {
      if(!(y < -1073741824.0f || y > 1073741824.0f)) { /* large y always even integer, but cast would overflow */
        i = (int)y; /* not using floor: not using math lib */
        if(i != y) {
          return (x < -lodepng_flt_max) ? (y < 0 ? 0 : lodepng_flt_inf) :
              (x == 0 ? (y < 0 ? lodepng_flt_inf : 0) : lodepng_flt_nan);
        }
        if(i & 1) return x == 0 ? (y < 0 ? (1 / x) : x) : -lodepng_powf(-x, y);
      }
      if(x == 0) return y <= 0 ? lodepng_flt_inf : 0;
      if(x < -lodepng_flt_max) { /* x == -infinity */
        return y <= 0 ? (y == 0 ? 1 : 0) : ((i & 1) ?
            -lodepng_flt_inf : lodepng_flt_inf);
      }
      x = -x;
      if(x == 1) return 1; /* under the C++ rules, pow(-1, +/- infinity) also returns 1 */
    }
    if(y < -lodepng_flt_max || y > lodepng_flt_max) return ((x < 1) != (y > 0)) ? (y < 0 ? -y : y) : 0;
  }

  l = x;
  j = 0;
  while(l < (1.0f / 65536)) { j -= 16; l *= 65536.0f; }
  while(l > 65536) { j += 16; l *= (1.0f / 65536); }
  while(l < 1) { j--; l *= 2.0f; }
  while(l > 2) { j++; l *= 0.5f; }
  /* polynomial to approximate log2(x) with x in range 1..2 */
  t0 = -0.393118410458557f + l * (-0.0883639468229365f + l * (0.466142650227994f + l * 0.0153397331014276f));
  t1 = 0.0907447971403586f + l * (0.388892024755479f + l * 0.137228280305862f);
  l = t0 / t1 + j;

  l *= y; /* using the formula exp2(y * log2(x)) */

  /* prevent int shift overflow, 0 or inf result are ok to return since exp will be taken, 127 is max float exponent */
  if(l <= -128.0f || l >= 128.0f) return ((x > 1) == (y > 0)) ? lodepng_flt_inf : 0;
  i = (int)l;
  l -= i;
  /* polynomial to approximate exp2(x) with x in range -1..1 */
  t0 = 1.0f + l * (0.41777833582744256f + l * (0.0728482595347711f + l * 0.005635023478609625f));
  t1 = 1.0f + l * (-0.27537016151408167f + l * 0.023501446055084033f);
  while(i <= -31) { t0 *= (1.0f / 2147483648.0f); i += 31; }
  while(i >= 31) { t0 *= 2147483648.0f; i -= 31; }
  return (i < 0) ? (t0 / (t1 * (1 << -i))) : ((t0 * (1 << i)) / t1);
}

// Assembly:
pushq %rax
movss 0x4ea5f(%rip), %xmm2    # 0x5fd90
ucomiss %xmm2, %xmm0
jne 0x11338
jnp 0x11350
xorps %xmm3, %xmm3
ucomiss %xmm3, %xmm1
jne 0x11342
jnp 0x11350
ucomiss 0x4ea47(%rip), %xmm1    # 0x5fd90
jne 0x11355
jp 0x11355
movaps %xmm0, %xmm2
movaps %xmm2, %xmm0
popq %rax
retq
ucomiss %xmm3, %xmm0
jbe 0x114cd
movss 0x4ea66(%rip), %xmm3    # 0x5fdcc
ucomiss %xmm1, %xmm3
jb 0x114cd
ucomiss %xmm0, %xmm3
jb 0x114cd
ucomiss 0x4ea51(%rip), %xmm1    # 0x5fdd0
jb 0x114cd
xorps %xmm3, %xmm3
movss 0x4ea34(%rip), %xmm4    # 0x5fdc4
movss 0x4ea80(%rip), %xmm6    # 0x5fe18
movss 0x4ea44(%rip), %xmm5    # 0x5fde4
movaps %xmm0, %xmm2
ucomiss %xmm2, %xmm4
jbe 0x113b2
addss %xmm6, %xmm3
mulss %xmm5, %xmm2
jmp 0x113a3
movss 0x4ea5a(%rip), %xmm6    # 0x5fe14
ucomiss %xmm5, %xmm2
jbe 0x113c9
addss %xmm6, %xmm3
mulss %xmm4, %xmm2
jmp 0x113ba
movss 0x4e9bf(%rip), %xmm4    # 0x5fd90
movss 0x4ea07(%rip), %xmm5    # 0x5fde0
ucomiss %xmm2, %xmm4
jbe 0x113e8
addss %xmm5, %xmm3
addss %xmm2, %xmm2
jmp 0x113d9
movss 0x4e9f8(%rip), %xmm5    # 0x5fde8
movss 0x4e9b8(%rip), %xmm6    # 0x5fdb0
ucomiss %xmm5, %xmm2
jbe 0x11407
addss %xmm4, %xmm3
mulss %xmm6, %xmm2
jmp 0x113f8
movss 0x4e9dd(%rip), %xmm4    # 0x5fdec
mulss %xmm2, %xmm4
addss 0x4e9d5(%rip), %xmm4    # 0x5fdf0
shufps $0x0, %xmm2, %xmm2      # xmm2 = xmm2[0,0,0,0]
movaps 0x4ea1a(%rip), %xmm5    # 0x5fe40
movss %xmm4, %xmm5            # xmm5 = xmm4[0],xmm5[1,2,3]
mulps %xmm2, %xmm5
addps 0x4ea1c(%rip), %xmm5    # 0x5fe50
mulps %xmm2, %xmm5
addps 0x4ea22(%rip), %xmm5    # 0x5fe60
movaps %xmm5, %xmm2
shufps $0x55, %xmm5, %xmm2     # xmm2 = xmm2[1,1],xmm5[1,1]
divss %xmm2, %xmm5
addss %xmm5, %xmm3
mulss %xmm1, %xmm3
movaps 0x4e9d8(%rip), %xmm2    # 0x5fe30
andps %xmm3, %xmm2
ucomiss 0x4e992(%rip), %xmm2    # 0x5fdf4
jae 0x1153b
cvttss2si %xmm3, %ecx
cvttps2dq %xmm3, %xmm0
cvtdq2ps %xmm0, %xmm0
subss %xmm0, %xmm3
movss 0x4e979(%rip), %xmm2    # 0x5fdf8
mulss %xmm3, %xmm2
addss 0x4e971(%rip), %xmm2    # 0x5fdfc
mulss %xmm3, %xmm2
addss 0x4e969(%rip), %xmm2    # 0x5fe00
mulss %xmm3, %xmm2
addss 0x4e8ed(%rip), %xmm2    # 0x5fd90
movss 0x4e959(%rip), %xmm0    # 0x5fe04
mulss %xmm3, %xmm0
addss 0x4e951(%rip), %xmm0    # 0x5fe08
movss 0x4e951(%rip), %xmm1    # 0x5fe10
cmpl $-0x1e, %ecx
jge 0x114ff
mulss %xmm1, %xmm2
addl $0x1f, %ecx
jmp 0x114bf
ucomiss %xmm1, %xmm0
jp 0x11704
xorps %xmm3, %xmm3
ucomiss %xmm3, %xmm0
jbe 0x1156d
ucomiss 0x4e8e3(%rip), %xmm0    # 0x5fdcc
jbe 0x1159e
xorps %xmm2, %xmm2
cmpnless %xmm2, %xmm1
andps %xmm0, %xmm1
jmp 0x1169a
movss 0x4e905(%rip), %xmm1    # 0x5fe0c
cmpl $0x1f, %ecx
jl 0x11515
mulss %xmm1, %xmm2
addl $-0x1f, %ecx
jmp 0x11507
mulss %xmm0, %xmm3
addss 0x4e86f(%rip), %xmm3    # 0x5fd90
testl %ecx, %ecx
js 0x11621
pushq $0x1
popq %rax
shll %cl, %eax
cvtsi2ss %eax, %xmm0
mulss %xmm0, %xmm2
jmp 0x11630
movss 0x4e84d(%rip), %xmm3    # 0x5fd90
cmpltps %xmm0, %xmm3
xorps %xmm2, %xmm2
xorps %xmm0, %xmm0
cmpnltps %xmm1, %xmm0
xorps %xmm3, %xmm0
movd %xmm0, %eax
testb $0x1, %al
je 0x11350
movss 0x4e874(%rip), %xmm2    # 0x5fddc
jmp 0x11350
movaps 0x4e8bc(%rip), %xmm3    # 0x5fe30
andps %xmm1, %xmm3
xorl %eax, %eax
ucomiss 0x4e854(%rip), %xmm3    # 0x5fdd4
jbe 0x115ed
xorps %xmm4, %xmm4
ucomiss %xmm4, %xmm0
jne 0x11639
jp 0x11639
cmpless %xmm4, %xmm1
jmp 0x116b1
movaps 0x4e88b(%rip), %xmm3    # 0x5fe30
andps %xmm1, %xmm3
ucomiss 0x4e81d(%rip), %xmm3    # 0x5fdcc
jbe 0x11385
movss 0x4e7d3(%rip), %xmm2    # 0x5fd90
cmpltps %xmm2, %xmm0
xorps %xmm2, %xmm2
xorps %xmm3, %xmm3
cmpnltps %xmm1, %xmm3
xorps %xmm0, %xmm3
movd %xmm3, %eax
testb $0x1, %al
jne 0x11350
movaps 0x4e83f(%rip), %xmm2    # 0x5fe20
xorps %xmm1, %xmm2
maxss %xmm1, %xmm2
jmp 0x11350
cvttps2dq %xmm1, %xmm4
cvtdq2ps %xmm4, %xmm4
ucomiss %xmm1, %xmm4
jne 0x115fb
jnp 0x1166a
movss 0x4e7cd(%rip), %xmm2    # 0x5fdd0
ucomiss %xmm0, %xmm2
jbe 0x116a2
xorps %xmm0, %xmm0
cmpltss %xmm0, %xmm1
movss 0x4e7c0(%rip), %xmm0    # 0x5fddc
andnps %xmm0, %xmm1
jmp 0x1169a
negb %cl
pushq $0x1
popq %rax
shll %cl, %eax
cvtsi2ss %eax, %xmm0
mulss %xmm0, %xmm3
divss %xmm3, %xmm2
jmp 0x11350
movss 0x4e78f(%rip), %xmm4    # 0x5fdd0
ucomiss %xmm0, %xmm4
jbe 0x116c1
xorps %xmm2, %xmm2
ucomiss %xmm1, %xmm2
jae 0x11350
xorl %ecx, %ecx
testb $0x1, %al
sete %cl
leaq 0x4e890(%rip), %rax     # 0x5fef0
movss (%rax,%rcx,4), %xmm2
jmp 0x11350
cvttss2si %xmm1, %eax
testb $0x1, %al
je 0x11582
xorps %xmm2, %xmm2
ucomiss %xmm2, %xmm0
jne 0x116e9
jp 0x116e9
movss 0x4e708(%rip), %xmm3    # 0x5fd90
divss %xmm0, %xmm3
cmpltss %xmm2, %xmm1
andps %xmm1, %xmm3
andnps %xmm0, %xmm1
orps %xmm3, %xmm1
movaps %xmm1, %xmm2
jmp 0x11350
xorps %xmm2, %xmm2
ucomiss %xmm2, %xmm0
jne 0x116dc
jp 0x116dc
cmpltss %xmm2, %xmm1
movss 0x4e723(%rip), %xmm2    # 0x5fddc
andps %xmm1, %xmm2
jmp 0x11350
ucomiss 0x4e718(%rip), %xmm0    # 0x5fde0
jne 0x116d0
jnp 0x11350
xorps 0x4e749(%rip), %xmm0    # 0x5fe20
jmp 0x115a8
movss 0x4e6f4(%rip), %xmm2    # 0x5fdd8
jmp 0x11350
xorps 0x4e730(%rip), %xmm0    # 0x5fe20
callq 0x11328
movaps %xmm0, %xmm2
xorps 0x4e721(%rip), %xmm2    # 0x5fe20
jmp 0x11350
addss %xmm1, %xmm0
jmp 0x1134d