public abstract class com.oracle.truffle.js.builtins.math.PowNode extends com.oracle.truffle.js.builtins.math.MathOperation
  minor version: 0
  major version: 59
  flags: flags: (0x0421) ACC_PUBLIC, ACC_SUPER, ACC_ABSTRACT
  this_class: com.oracle.truffle.js.builtins.math.PowNode
  super_class: com.oracle.truffle.js.builtins.math.MathOperation
{
  private boolean hasSeenOne;
    descriptor: Z
    flags: (0x0002) ACC_PRIVATE
    RuntimeVisibleAnnotations: 
      com.oracle.truffle.api.CompilerDirectives$CompilationFinal()

  private boolean hasSeenTwo;
    descriptor: Z
    flags: (0x0002) ACC_PRIVATE
    RuntimeVisibleAnnotations: 
      com.oracle.truffle.api.CompilerDirectives$CompilationFinal()

  private boolean hasSeenThree;
    descriptor: Z
    flags: (0x0002) ACC_PRIVATE
    RuntimeVisibleAnnotations: 
      com.oracle.truffle.api.CompilerDirectives$CompilationFinal()

  private boolean hasSeenZeroPointFive;
    descriptor: Z
    flags: (0x0002) ACC_PRIVATE
    RuntimeVisibleAnnotations: 
      com.oracle.truffle.api.CompilerDirectives$CompilationFinal()

  private boolean hasSeenOnePointFive;
    descriptor: Z
    flags: (0x0002) ACC_PRIVATE
    RuntimeVisibleAnnotations: 
      com.oracle.truffle.api.CompilerDirectives$CompilationFinal()

  private boolean hasSeenTwoPointFive;
    descriptor: Z
    flags: (0x0002) ACC_PRIVATE
    RuntimeVisibleAnnotations: 
      com.oracle.truffle.api.CompilerDirectives$CompilationFinal()

  public void <init>(com.oracle.truffle.js.runtime.JSContext, com.oracle.truffle.js.nodes.function.JSBuiltin);
    descriptor: (Lcom/oracle/truffle/js/runtime/JSContext;Lcom/oracle/truffle/js/nodes/function/JSBuiltin;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=3, args_size=3
        start local 0 // com.oracle.truffle.js.builtins.math.PowNode this
        start local 1 // com.oracle.truffle.js.runtime.JSContext context
        start local 2 // com.oracle.truffle.js.nodes.function.JSBuiltin builtin
         0: .line 59
            aload 0 /* this */
            aload 1 /* context */
            aload 2 /* builtin */
            invokespecial com.oracle.truffle.js.builtins.math.MathOperation.<init>:(Lcom/oracle/truffle/js/runtime/JSContext;Lcom/oracle/truffle/js/nodes/function/JSBuiltin;)V
         1: .line 68
            aload 0 /* this */
            iconst_0
            putfield com.oracle.truffle.js.builtins.math.PowNode.hasSeenOne:Z
         2: .line 69
            aload 0 /* this */
            iconst_0
            putfield com.oracle.truffle.js.builtins.math.PowNode.hasSeenTwo:Z
         3: .line 70
            aload 0 /* this */
            iconst_0
            putfield com.oracle.truffle.js.builtins.math.PowNode.hasSeenThree:Z
         4: .line 71
            aload 0 /* this */
            iconst_0
            putfield com.oracle.truffle.js.builtins.math.PowNode.hasSeenZeroPointFive:Z
         5: .line 72
            aload 0 /* this */
            iconst_0
            putfield com.oracle.truffle.js.builtins.math.PowNode.hasSeenOnePointFive:Z
         6: .line 73
            aload 0 /* this */
            iconst_0
            putfield com.oracle.truffle.js.builtins.math.PowNode.hasSeenTwoPointFive:Z
         7: .line 60
            return
        end local 2 // com.oracle.truffle.js.nodes.function.JSBuiltin builtin
        end local 1 // com.oracle.truffle.js.runtime.JSContext context
        end local 0 // com.oracle.truffle.js.builtins.math.PowNode this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    8     0     this  Lcom/oracle/truffle/js/builtins/math/PowNode;
            0    8     1  context  Lcom/oracle/truffle/js/runtime/JSContext;
            0    8     2  builtin  Lcom/oracle/truffle/js/nodes/function/JSBuiltin;
    MethodParameters:
         Name  Flags
      context  
      builtin  

  public abstract double execute(java.lang.Object, java.lang.Object);
    descriptor: (Ljava/lang/Object;Ljava/lang/Object;)D
    flags: (0x0401) ACC_PUBLIC, ACC_ABSTRACT
    MethodParameters:
      Name  Flags
      a     
      b     

  protected com.oracle.truffle.js.builtins.math.PowNode create(com.oracle.truffle.js.runtime.JSContext);
    descriptor: (Lcom/oracle/truffle/js/runtime/JSContext;)Lcom/oracle/truffle/js/builtins/math/PowNode;
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=3, locals=2, args_size=2
        start local 0 // com.oracle.truffle.js.builtins.math.PowNode this
         0: .line 65
            new java.lang.Error
            dup
            ldc "Unresolved compilation problem: \n\tPowNodeGen cannot be resolved\n"
            invokespecial java.lang.Error.<init>:(Ljava/lang/String;)V
            athrow
        end local 0 // com.oracle.truffle.js.builtins.math.PowNode this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/oracle/truffle/js/builtins/math/PowNode;
    MethodParameters:
         Name  Flags
      context  

  protected double pow(double, double);
    descriptor: (DD)D
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=5, locals=5, args_size=3
        start local 0 // com.oracle.truffle.js.builtins.math.PowNode this
        start local 1 // double a
        start local 3 // double b
         0: .line 77
            aload 0 /* this */
            getfield com.oracle.truffle.js.builtins.math.PowNode.hasSeenOne:Z
            ifeq 2
            dload 3 /* b */
            dconst_1
            dcmpl
            ifne 2
         1: .line 78
            dload 1 /* a */
            dreturn
         2: .line 79
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.oracle.truffle.js.builtins.math.PowNode.hasSeenTwo:Z
            ifeq 4
            dload 3 /* b */
            ldc 2.0
            dcmpl
            ifne 4
         3: .line 80
            dload 1 /* a */
            dload 1 /* a */
            dmul
            dreturn
         4: .line 81
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.oracle.truffle.js.builtins.math.PowNode.hasSeenThree:Z
            ifeq 6
            dload 3 /* b */
            ldc 3.0
            dcmpl
            ifne 6
         5: .line 82
            dload 1 /* a */
            dload 1 /* a */
            dmul
            dload 1 /* a */
            dmul
            dreturn
         6: .line 83
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.oracle.truffle.js.builtins.math.PowNode.hasSeenZeroPointFive:Z
            ifne 7
            aload 0 /* this */
            getfield com.oracle.truffle.js.builtins.math.PowNode.hasSeenOnePointFive:Z
            ifne 7
            aload 0 /* this */
            getfield com.oracle.truffle.js.builtins.math.PowNode.hasSeenTwoPointFive:Z
            ifeq 9
      StackMap locals:
      StackMap stack:
         7: dload 1 /* a */
            dconst_0
            dcmpg
            iflt 8
            dload 1 /* a */
            ldc -0.0
            dcmpl
            ifne 9
         8: .line 85
      StackMap locals:
      StackMap stack:
            dload 1 /* a */
            dload 3 /* b */
            invokestatic com.oracle.truffle.js.builtins.math.PowNode.powIntl:(DD)D
            dreturn
         9: .line 86
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.oracle.truffle.js.builtins.math.PowNode.hasSeenZeroPointFive:Z
            ifeq 11
            dload 3 /* b */
            ldc 0.5
            dcmpl
            ifne 11
        10: .line 87
            dload 1 /* a */
            invokestatic java.lang.Math.sqrt:(D)D
            dreturn
        11: .line 88
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.oracle.truffle.js.builtins.math.PowNode.hasSeenOnePointFive:Z
            ifeq 13
            dload 3 /* b */
            ldc 1.5
            dcmpl
            ifne 13
        12: .line 89
            dload 1 /* a */
            dload 1 /* a */
            invokestatic java.lang.Math.sqrt:(D)D
            dmul
            dreturn
        13: .line 90
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.oracle.truffle.js.builtins.math.PowNode.hasSeenTwoPointFive:Z
            ifeq 15
            dload 3 /* b */
            ldc 2.5
            dcmpl
            ifne 15
        14: .line 91
            dload 1 /* a */
            dload 1 /* a */
            dmul
            dload 1 /* a */
            invokestatic java.lang.Math.sqrt:(D)D
            dmul
            dreturn
        15: .line 93
      StackMap locals:
      StackMap stack:
            invokestatic com.oracle.truffle.api.CompilerDirectives.transferToInterpreterAndInvalidate:()V
        16: .line 94
            dload 3 /* b */
            dconst_1
            dcmpl
            ifne 19
        17: .line 95
            aload 0 /* this */
            iconst_1
            putfield com.oracle.truffle.js.builtins.math.PowNode.hasSeenOne:Z
        18: .line 96
            goto 35
      StackMap locals:
      StackMap stack:
        19: dload 3 /* b */
            ldc 2.0
            dcmpl
            ifne 22
        20: .line 97
            aload 0 /* this */
            iconst_1
            putfield com.oracle.truffle.js.builtins.math.PowNode.hasSeenTwo:Z
        21: .line 98
            goto 35
      StackMap locals:
      StackMap stack:
        22: dload 3 /* b */
            ldc 3.0
            dcmpl
            ifne 25
        23: .line 99
            aload 0 /* this */
            iconst_1
            putfield com.oracle.truffle.js.builtins.math.PowNode.hasSeenThree:Z
        24: .line 100
            goto 35
      StackMap locals:
      StackMap stack:
        25: dload 3 /* b */
            ldc 0.5
            dcmpl
            ifne 28
        26: .line 101
            aload 0 /* this */
            iconst_1
            putfield com.oracle.truffle.js.builtins.math.PowNode.hasSeenZeroPointFive:Z
        27: .line 102
            goto 35
      StackMap locals:
      StackMap stack:
        28: dload 3 /* b */
            ldc 1.5
            dcmpl
            ifne 31
        29: .line 103
            aload 0 /* this */
            iconst_1
            putfield com.oracle.truffle.js.builtins.math.PowNode.hasSeenOnePointFive:Z
        30: .line 104
            goto 35
      StackMap locals:
      StackMap stack:
        31: dload 3 /* b */
            ldc 2.5
            dcmpl
            ifne 34
        32: .line 105
            aload 0 /* this */
            iconst_1
            putfield com.oracle.truffle.js.builtins.math.PowNode.hasSeenTwoPointFive:Z
        33: .line 106
            goto 35
        34: .line 107
      StackMap locals:
      StackMap stack:
            invokestatic com.oracle.truffle.js.nodes.JSNodeUtil.slowPathException:()Lcom/oracle/truffle/api/nodes/SlowPathException;
            athrow
        35: .line 109
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            dload 1 /* a */
            dload 3 /* b */
            invokevirtual com.oracle.truffle.js.builtins.math.PowNode.pow:(DD)D
            dreturn
        end local 3 // double b
        end local 1 // double a
        end local 0 // com.oracle.truffle.js.builtins.math.PowNode this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0   36     0  this  Lcom/oracle/truffle/js/builtins/math/PowNode;
            0   36     1     a  D
            0   36     3     b  D
    Exceptions:
      throws com.oracle.truffle.api.nodes.SlowPathException
    RuntimeVisibleAnnotations: 
      com.oracle.truffle.api.dsl.Specialization(rewriteOn = {Lcom/oracle/truffle/api/nodes/SlowPathException;})
    MethodParameters:
      Name  Flags
      a     
      b     

  private static double positivePow(double, int);
    descriptor: (DI)D
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=4, locals=8, args_size=2
        start local 0 // double operand
        start local 2 // int castExponent
         0: .line 114
            iload 2 /* castExponent */
            istore 3 /* exponent */
        start local 3 // int exponent
         1: .line 115
            dconst_1
            dstore 4 /* result */
        start local 4 // double result
         2: .line 116
            dload 0 /* operand */
            dstore 6 /* base */
        start local 6 // double base
         3: .line 117
            goto 8
         4: .line 118
      StackMap locals: int double double
      StackMap stack:
            iload 3 /* exponent */
            iconst_1
            iand
            iconst_1
            if_icmpne 6
         5: .line 119
            dload 4 /* result */
            dload 6 /* base */
            dmul
            dstore 4 /* result */
         6: .line 121
      StackMap locals:
      StackMap stack:
            iload 3 /* exponent */
            iconst_1
            ishr
            istore 3 /* exponent */
         7: .line 122
            dload 6 /* base */
            dload 6 /* base */
            dmul
            dstore 6 /* base */
         8: .line 117
      StackMap locals:
      StackMap stack:
            iload 3 /* exponent */
            ifgt 4
         9: .line 124
            dload 4 /* result */
            dreturn
        end local 6 // double base
        end local 4 // double result
        end local 3 // int exponent
        end local 2 // int castExponent
        end local 0 // double operand
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0   10     0       operand  D
            0   10     2  castExponent  I
            1   10     3      exponent  I
            2   10     4        result  D
            3   10     6          base  D
    MethodParameters:
              Name  Flags
      operand       
      castExponent  

  protected double pow2(double, double);
    descriptor: (DD)D
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=4, locals=5, args_size=3
        start local 0 // com.oracle.truffle.js.builtins.math.PowNode this
        start local 1 // double a
        start local 3 // double b
         0: .line 129
            dload 3 /* b */
            iconst_1
            invokestatic com.oracle.truffle.js.runtime.JSRuntime.doubleIsRepresentableAsInt:(DZ)Z
            ifeq 2
            dload 3 /* b */
            dconst_0
            dcmpl
            ifle 2
         1: .line 130
            dload 1 /* a */
            dload 3 /* b */
            d2i
            invokestatic com.oracle.truffle.js.builtins.math.PowNode.positivePow:(DI)D
            dreturn
         2: .line 132
      StackMap locals:
      StackMap stack:
            invokestatic com.oracle.truffle.js.nodes.JSNodeUtil.slowPathException:()Lcom/oracle/truffle/api/nodes/SlowPathException;
            athrow
        end local 3 // double b
        end local 1 // double a
        end local 0 // com.oracle.truffle.js.builtins.math.PowNode this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    3     0  this  Lcom/oracle/truffle/js/builtins/math/PowNode;
            0    3     1     a  D
            0    3     3     b  D
    Exceptions:
      throws com.oracle.truffle.api.nodes.SlowPathException
    RuntimeVisibleAnnotations: 
      com.oracle.truffle.api.dsl.Specialization(rewriteOn = {Lcom/oracle/truffle/api/nodes/SlowPathException;})
    MethodParameters:
      Name  Flags
      a     
      b     

  protected double pow3(double, double, com.oracle.truffle.api.profiles.ConditionProfile, com.oracle.truffle.api.profiles.ConditionProfile);
    descriptor: (DDLcom/oracle/truffle/api/profiles/ConditionProfile;Lcom/oracle/truffle/api/profiles/ConditionProfile;)D
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=5, locals=8, args_size=5
        start local 0 // com.oracle.truffle.js.builtins.math.PowNode this
        start local 1 // double a
        start local 3 // double b
        start local 5 // com.oracle.truffle.api.profiles.ConditionProfile branch1
        start local 6 // com.oracle.truffle.api.profiles.ConditionProfile branch2
         0: .line 141
            dload 3 /* b */
            d2i
            istore 7 /* ib */
        start local 7 // int ib
         1: .line 142
            aload 5 /* branch1 */
            dload 3 /* b */
            iconst_1
            invokestatic com.oracle.truffle.js.runtime.JSRuntime.doubleIsRepresentableAsInt:(DZ)Z
            ifeq 2
            dload 3 /* b */
            dconst_0
            dcmpl
            ifle 2
            iconst_1
            goto 3
      StackMap locals: com.oracle.truffle.js.builtins.math.PowNode double double com.oracle.truffle.api.profiles.ConditionProfile com.oracle.truffle.api.profiles.ConditionProfile int
      StackMap stack: com.oracle.truffle.api.profiles.ConditionProfile
         2: iconst_0
      StackMap locals: com.oracle.truffle.js.builtins.math.PowNode double double com.oracle.truffle.api.profiles.ConditionProfile com.oracle.truffle.api.profiles.ConditionProfile int
      StackMap stack: com.oracle.truffle.api.profiles.ConditionProfile int
         3: invokevirtual com.oracle.truffle.api.profiles.ConditionProfile.profile:(Z)Z
            ifeq 5
         4: .line 143
            dload 1 /* a */
            iload 7 /* ib */
            invokestatic com.oracle.truffle.js.builtins.math.PowNode.positivePow:(DI)D
            dreturn
         5: .line 144
      StackMap locals:
      StackMap stack:
            aload 6 /* branch2 */
            iload 7 /* ib */
            i2d
            ldc 0.5
            dadd
            dload 3 /* b */
            dcmpl
            ifne 6
            dload 3 /* b */
            dconst_0
            dcmpl
            ifle 6
            dload 1 /* a */
            dconst_0
            dcmpl
            ifle 6
            dload 1 /* a */
            ldc -0.0
            dcmpl
            ifeq 6
            iconst_1
            goto 7
      StackMap locals:
      StackMap stack: com.oracle.truffle.api.profiles.ConditionProfile
         6: iconst_0
      StackMap locals: com.oracle.truffle.js.builtins.math.PowNode double double com.oracle.truffle.api.profiles.ConditionProfile com.oracle.truffle.api.profiles.ConditionProfile int
      StackMap stack: com.oracle.truffle.api.profiles.ConditionProfile int
         7: invokevirtual com.oracle.truffle.api.profiles.ConditionProfile.profile:(Z)Z
            ifeq 9
         8: .line 145
            dload 1 /* a */
            iload 7 /* ib */
            invokestatic com.oracle.truffle.js.builtins.math.PowNode.positivePow:(DI)D
            dload 1 /* a */
            invokestatic java.lang.Math.sqrt:(D)D
            dmul
            dreturn
         9: .line 147
      StackMap locals:
      StackMap stack:
            dload 1 /* a */
            dload 3 /* b */
            invokestatic com.oracle.truffle.js.builtins.math.PowNode.powIntl:(DD)D
            dreturn
        end local 7 // int ib
        end local 6 // com.oracle.truffle.api.profiles.ConditionProfile branch2
        end local 5 // com.oracle.truffle.api.profiles.ConditionProfile branch1
        end local 3 // double b
        end local 1 // double a
        end local 0 // com.oracle.truffle.js.builtins.math.PowNode this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0   10     0     this  Lcom/oracle/truffle/js/builtins/math/PowNode;
            0   10     1        a  D
            0   10     3        b  D
            0   10     5  branch1  Lcom/oracle/truffle/api/profiles/ConditionProfile;
            0   10     6  branch2  Lcom/oracle/truffle/api/profiles/ConditionProfile;
            1   10     7       ib  I
    RuntimeVisibleAnnotations: 
      com.oracle.truffle.api.dsl.Specialization()
    RuntimeInvisibleAnnotations: 
      com.oracle.truffle.js.runtime.SuppressFBWarnings(value = {"FE_FLOATING_POINT_EQUALITY"}, justification = "not necessary in this case")
    RuntimeInvisibleTypeAnnotations: 
      METHOD_RETURN
        com.oracle.truffle.js.runtime.SuppressFBWarnings(value = {"FE_FLOATING_POINT_EQUALITY"}, justification = "not necessary in this case")
    RuntimeInvisibleParameterAnnotations: 
      0:
      1:
      2:
        com.oracle.truffle.api.dsl.Cached(value = "createBinaryProfile()")
      3:
        com.oracle.truffle.api.dsl.Cached(value = "createBinaryProfile()")
    MethodParameters:
         Name  Flags
      a        
      b        
      branch1  
      branch2  

  protected java.lang.Object pow(java.lang.Object, java.lang.Object, com.oracle.truffle.js.builtins.math.PowNode);
    descriptor: (Ljava/lang/Object;Ljava/lang/Object;Lcom/oracle/truffle/js/builtins/math/PowNode;)Ljava/lang/Object;
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=4, locals=4, args_size=4
        start local 0 // com.oracle.truffle.js.builtins.math.PowNode this
        start local 1 // java.lang.Object a
        start local 2 // java.lang.Object b
        start local 3 // com.oracle.truffle.js.builtins.math.PowNode powNode
         0: .line 154
            aload 3 /* powNode */
            aload 0 /* this */
            aload 1 /* a */
            invokevirtual com.oracle.truffle.js.builtins.math.PowNode.toDouble:(Ljava/lang/Object;)D
            invokestatic java.lang.Double.valueOf:(D)Ljava/lang/Double;
            aload 0 /* this */
            aload 2 /* b */
            invokevirtual com.oracle.truffle.js.builtins.math.PowNode.toDouble:(Ljava/lang/Object;)D
            invokestatic java.lang.Double.valueOf:(D)Ljava/lang/Double;
            invokevirtual com.oracle.truffle.js.builtins.math.PowNode.execute:(Ljava/lang/Object;Ljava/lang/Object;)D
            invokestatic com.oracle.truffle.js.runtime.JSRuntime.doubleToNarrowestNumber:(D)Ljava/lang/Number;
            areturn
        end local 3 // com.oracle.truffle.js.builtins.math.PowNode powNode
        end local 2 // java.lang.Object b
        end local 1 // java.lang.Object a
        end local 0 // com.oracle.truffle.js.builtins.math.PowNode this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    1     0     this  Lcom/oracle/truffle/js/builtins/math/PowNode;
            0    1     1        a  Ljava/lang/Object;
            0    1     2        b  Ljava/lang/Object;
            0    1     3  powNode  Lcom/oracle/truffle/js/builtins/math/PowNode;
    RuntimeVisibleAnnotations: 
      com.oracle.truffle.api.dsl.Specialization()
    RuntimeInvisibleParameterAnnotations: 
      0:
      1:
      2:
        com.oracle.truffle.api.dsl.Cached(value = "create(getContext())")
    MethodParameters:
         Name  Flags
      a        
      b        
      powNode  

  private static double powIntl(double, double);
    descriptor: (DD)D
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=4, locals=4, args_size=2
        start local 0 // double a
        start local 2 // double b
         0: .line 159
            dload 0 /* a */
            dload 2 /* b */
            invokestatic java.lang.Math.pow:(DD)D
            dreturn
        end local 2 // double b
        end local 0 // double a
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0     a  D
            0    1     2     b  D
    RuntimeVisibleAnnotations: 
      com.oracle.truffle.api.CompilerDirectives$TruffleBoundary()
    MethodParameters:
      Name  Flags
      a     
      b     
}
SourceFile: "PowNode.java"
InnerClasses:
  public abstract CompilationFinal = com.oracle.truffle.api.CompilerDirectives$CompilationFinal of com.oracle.truffle.api.CompilerDirectives
  public abstract TruffleBoundary = com.oracle.truffle.api.CompilerDirectives$TruffleBoundary of com.oracle.truffle.api.CompilerDirectives