// File: /workspace/github_cpp_makefile_star2_O3/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 0x62365(%rip), %xmm2    # 0x75f94
ucomiss %xmm2, %xmm0
jne 0x13c36
jnp 0x13c4e
xorps %xmm3, %xmm3
ucomiss %xmm3, %xmm1
jne 0x13c40
jnp 0x13c4e
ucomiss 0x6234d(%rip), %xmm1    # 0x75f94
jne 0x13c53
jp 0x13c53
movaps %xmm0, %xmm2
movaps %xmm2, %xmm0
popq %rax
retq
ucomiss %xmm3, %xmm0
jbe 0x13dfc
movss 0x6236c(%rip), %xmm3    # 0x75fd0
ucomiss %xmm1, %xmm3
jb 0x13dfc
ucomiss %xmm0, %xmm3
jb 0x13dfc
ucomiss 0x62357(%rip), %xmm1    # 0x75fd4
jb 0x13dfc
xorps %xmm2, %xmm2
movss 0x62312(%rip), %xmm4    # 0x75fa0
ucomiss %xmm0, %xmm4
movaps %xmm0, %xmm3
jbe 0x13cb6
movss 0x6234a(%rip), %xmm5    # 0x75fe8
movss 0x62346(%rip), %xmm6    # 0x75fec
movaps %xmm0, %xmm3
addss %xmm5, %xmm2
mulss %xmm6, %xmm3
ucomiss %xmm3, %xmm4
ja 0x13ca9
ucomiss 0x6232f(%rip), %xmm3    # 0x75fec
jbe 0x13cdc
movss 0x62329(%rip), %xmm5    # 0x75ff0
movss 0x6231d(%rip), %xmm6    # 0x75fec
addss %xmm5, %xmm2
mulss %xmm4, %xmm3
ucomiss %xmm6, %xmm3
ja 0x13ccf
movss 0x622b0(%rip), %xmm4    # 0x75f94
ucomiss %xmm3, %xmm4
jbe 0x13cfe
movss 0x622f3(%rip), %xmm5    # 0x75fe4
addss %xmm5, %xmm2
addss %xmm3, %xmm3
ucomiss %xmm3, %xmm4
ja 0x13cf1
ucomiss 0x622ef(%rip), %xmm3    # 0x75ff4
jbe 0x13d24
movss 0x622e9(%rip), %xmm5    # 0x75ff8
movss 0x622dd(%rip), %xmm6    # 0x75ff4
addss %xmm4, %xmm2
mulss %xmm5, %xmm3
ucomiss %xmm6, %xmm3
ja 0x13d17
movss 0x622d0(%rip), %xmm6    # 0x75ffc
mulss %xmm3, %xmm6
addss 0x622c8(%rip), %xmm6    # 0x76000
shufps $0x0, %xmm3, %xmm3      # xmm3 = xmm3[0,0,0,0]
movaps 0x6203d(%rip), %xmm5    # 0x75d80
movss %xmm6, %xmm5            # xmm5 = xmm6[0],xmm5[1,2,3]
mulps %xmm3, %xmm5
addps 0x6203f(%rip), %xmm5    # 0x75d90
mulps %xmm3, %xmm5
addps 0x62045(%rip), %xmm5    # 0x75da0
movaps %xmm5, %xmm3
shufps $0x55, %xmm5, %xmm3     # xmm3 = xmm3[1,1],xmm5[1,1]
divss %xmm3, %xmm5
addss %xmm2, %xmm5
mulss %xmm1, %xmm5
movaps 0x61ffb(%rip), %xmm2    # 0x75d70
andps %xmm5, %xmm2
ucomiss 0x62285(%rip), %xmm2    # 0x76004
jae 0x13e2a
cvttss2si %xmm5, %eax
cvttps2dq %xmm5, %xmm0
cvtdq2ps %xmm0, %xmm0
subss %xmm0, %xmm5
movss 0x6226c(%rip), %xmm0    # 0x76008
mulss %xmm5, %xmm0
addss 0x62264(%rip), %xmm0    # 0x7600c
mulss %xmm5, %xmm0
addss 0x6225c(%rip), %xmm0    # 0x76010
mulss %xmm5, %xmm0
movss 0x62254(%rip), %xmm1    # 0x76014
mulss %xmm5, %xmm1
addss 0x6224c(%rip), %xmm1    # 0x76018
addss %xmm4, %xmm0
mulss %xmm5, %xmm1
addss %xmm4, %xmm1
cmpl $-0x1f, %eax
jg 0x13e91
movss 0x62237(%rip), %xmm2    # 0x76020
mulss %xmm2, %xmm0
leal 0x1f(%rax), %ecx
cmpl $-0x3d, %eax
movl %ecx, %eax
jb 0x13de9
jmp 0x13f41
ucomiss %xmm1, %xmm0
jp 0x14048
xorps %xmm3, %xmm3
ucomiss %xmm3, %xmm0
jbe 0x13e5c
ucomiss 0x621bc(%rip), %xmm0    # 0x75fd0
jbe 0x13eb5
xorps %xmm2, %xmm2
cmpnless %xmm2, %xmm1
andps %xmm0, %xmm1
jmp 0x13fde
movss 0x62162(%rip), %xmm3    # 0x75f94
cmpltps %xmm0, %xmm3
xorps %xmm2, %xmm2
xorps %xmm0, %xmm0
cmpnltps %xmm1, %xmm0
xorps %xmm3, %xmm0
movd %xmm0, %eax
testb $0x1, %al
je 0x13c4e
movss 0x62189(%rip), %xmm2    # 0x75fe0
jmp 0x13c4e
movaps 0x61f0d(%rip), %xmm3    # 0x75d70
andps %xmm1, %xmm3
xorl %eax, %eax
ucomiss 0x62169(%rip), %xmm3    # 0x75fd8
jbe 0x13f04
xorps %xmm4, %xmm4
ucomiss %xmm4, %xmm0
jne 0x13f7d
jp 0x13f7d
cmpless %xmm4, %xmm1
jmp 0x13ff5
cmpl $0x1f, %eax
jl 0x13f3f
movss 0x6217a(%rip), %xmm2    # 0x7601c
mulss %xmm2, %xmm0
leal -0x1f(%rax), %ecx
cmpl $0x3d, %eax
movl %ecx, %eax
ja 0x13ea2
jmp 0x13f45
movaps 0x61eb4(%rip), %xmm3    # 0x75d70
andps %xmm1, %xmm3
ucomiss 0x6210a(%rip), %xmm3    # 0x75fd0
jbe 0x13c83
movss 0x620c0(%rip), %xmm2    # 0x75f94
cmpltps %xmm2, %xmm0
xorps %xmm2, %xmm2
xorps %xmm3, %xmm3
cmpnltps %xmm1, %xmm3
xorps %xmm0, %xmm3
movd %xmm3, %eax
testb $0x1, %al
jne 0x13c4e
movaps 0x5e158(%rip), %xmm2    # 0x72050
xorps %xmm1, %xmm2
maxss %xmm1, %xmm2
jmp 0x13c4e
cvttps2dq %xmm1, %xmm4
cvtdq2ps %xmm4, %xmm4
ucomiss %xmm1, %xmm4
jne 0x13f16
jnp 0x13fae
movss 0x620b6(%rip), %xmm2    # 0x75fd4
ucomiss %xmm0, %xmm2
jbe 0x13fe6
xorps %xmm0, %xmm0
cmpltss %xmm0, %xmm1
movss 0x620a9(%rip), %xmm0    # 0x75fe0
andnps %xmm0, %xmm1
jmp 0x13fde
movl %eax, %ecx
testl %ecx, %ecx
js 0x13f60
movl $0x1, %eax
shll %cl, %eax
xorps %xmm2, %xmm2
cvtsi2ss %eax, %xmm2
mulss %xmm0, %xmm2
divss %xmm1, %xmm2
jmp 0x13c4e
negb %cl
movl $0x1, %eax
shll %cl, %eax
xorps %xmm2, %xmm2
cvtsi2ss %eax, %xmm2
mulss %xmm2, %xmm1
divss %xmm1, %xmm0
jmp 0x13c4b
movss 0x6204f(%rip), %xmm4    # 0x75fd4
ucomiss %xmm0, %xmm4
jbe 0x14005
xorps %xmm2, %xmm2
ucomiss %xmm1, %xmm2
jae 0x13c4e
xorl %ecx, %ecx
testb $0x1, %al
sete %cl
leaq 0x62084(%rip), %rax     # 0x76028
movss (%rax,%rcx,4), %xmm2
jmp 0x13c4e
cvttss2si %xmm1, %eax
testb $0x1, %al
je 0x13e75
xorps %xmm2, %xmm2
ucomiss %xmm2, %xmm0
jne 0x1402d
jp 0x1402d
movss 0x61fc8(%rip), %xmm3    # 0x75f94
divss %xmm0, %xmm3
cmpltss %xmm2, %xmm1
andps %xmm1, %xmm3
andnps %xmm0, %xmm1
orps %xmm3, %xmm1
movaps %xmm1, %xmm2
jmp 0x13c4e
xorps %xmm2, %xmm2
ucomiss %xmm2, %xmm0
jne 0x14020
jp 0x14020
cmpltss %xmm2, %xmm1
movss 0x61fe3(%rip), %xmm2    # 0x75fe0
andps %xmm1, %xmm2
jmp 0x13c4e
ucomiss 0x61fd8(%rip), %xmm0    # 0x75fe4
jne 0x14014
jnp 0x13c4e
xorps 0x5e035(%rip), %xmm0    # 0x72050
jmp 0x13ebf
movss 0x61fb4(%rip), %xmm2    # 0x75fdc
jmp 0x13c4e
xorps 0x5e01c(%rip), %xmm0    # 0x72050
callq 0x13c26
movaps %xmm0, %xmm2
xorps 0x5e00d(%rip), %xmm2    # 0x72050
jmp 0x13c4e
addss %xmm1, %xmm0
jmp 0x13c4b