nashorn/src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/codegen/types/IntType.java
author mhaupt
Tue, 09 Feb 2016 14:14:06 +0100
changeset 35793 b89ddacf3104
parent 35725 c7a2c18529b1
child 36026 ad5ff5d5459b
permissions -rw-r--r--
8149462: revert changes for 8149186 Reviewed-by: jlaskey, sundar
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
16147
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
     1
/*
35793
b89ddacf3104 8149462: revert changes for 8149186
mhaupt
parents: 35725
diff changeset
     2
 * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
16147
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
     4
 *
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
     7
 * published by the Free Software Foundation.  Oracle designates this
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
     8
 * particular file as subject to the "Classpath" exception as provided
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
     9
 * by Oracle in the LICENSE file that accompanied this code.
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    10
 *
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    11
 * This code is distributed in the hope that it will be useful, but WITHOUT
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    12
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    13
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    14
 * version 2 for more details (a copy is included in the LICENSE file that
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    15
 * accompanied this code).
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    16
 *
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    17
 * You should have received a copy of the GNU General Public License version
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    18
 * 2 along with this work; if not, write to the Free Software Foundation,
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    19
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    20
 *
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    21
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    22
 * or visit www.oracle.com if you need additional information or have any
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    23
 * questions.
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    24
 */
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    25
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    26
package jdk.nashorn.internal.codegen.types;
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    27
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    28
import static jdk.internal.org.objectweb.asm.Opcodes.BIPUSH;
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    29
import static jdk.internal.org.objectweb.asm.Opcodes.I2D;
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    30
import static jdk.internal.org.objectweb.asm.Opcodes.I2L;
24751
ccbd9cd3f720 8042118: Separate types from symbols
attila
parents: 24719
diff changeset
    31
import static jdk.internal.org.objectweb.asm.Opcodes.IADD;
16147
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    32
import static jdk.internal.org.objectweb.asm.Opcodes.IAND;
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    33
import static jdk.internal.org.objectweb.asm.Opcodes.ICONST_0;
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    34
import static jdk.internal.org.objectweb.asm.Opcodes.ICONST_1;
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    35
import static jdk.internal.org.objectweb.asm.Opcodes.ICONST_2;
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    36
import static jdk.internal.org.objectweb.asm.Opcodes.ICONST_3;
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    37
import static jdk.internal.org.objectweb.asm.Opcodes.ICONST_4;
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    38
import static jdk.internal.org.objectweb.asm.Opcodes.ICONST_5;
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    39
import static jdk.internal.org.objectweb.asm.Opcodes.ICONST_M1;
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    40
import static jdk.internal.org.objectweb.asm.Opcodes.ILOAD;
24751
ccbd9cd3f720 8042118: Separate types from symbols
attila
parents: 24719
diff changeset
    41
import static jdk.internal.org.objectweb.asm.Opcodes.IMUL;
ccbd9cd3f720 8042118: Separate types from symbols
attila
parents: 24719
diff changeset
    42
import static jdk.internal.org.objectweb.asm.Opcodes.INEG;
16147
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    43
import static jdk.internal.org.objectweb.asm.Opcodes.IOR;
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    44
import static jdk.internal.org.objectweb.asm.Opcodes.IRETURN;
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    45
import static jdk.internal.org.objectweb.asm.Opcodes.ISHL;
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    46
import static jdk.internal.org.objectweb.asm.Opcodes.ISHR;
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    47
import static jdk.internal.org.objectweb.asm.Opcodes.ISTORE;
24751
ccbd9cd3f720 8042118: Separate types from symbols
attila
parents: 24719
diff changeset
    48
import static jdk.internal.org.objectweb.asm.Opcodes.ISUB;
16147
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    49
import static jdk.internal.org.objectweb.asm.Opcodes.IUSHR;
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    50
import static jdk.internal.org.objectweb.asm.Opcodes.IXOR;
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    51
import static jdk.internal.org.objectweb.asm.Opcodes.SIPUSH;
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    52
import static jdk.nashorn.internal.codegen.CompilerConstants.staticCallNoLookup;
24719
f726e9d67629 8035820: Optimistic recompilation
attila
parents: 17259
diff changeset
    53
import static jdk.nashorn.internal.runtime.JSType.UNDEFINED_INT;
24751
ccbd9cd3f720 8042118: Separate types from symbols
attila
parents: 24719
diff changeset
    54
import static jdk.nashorn.internal.runtime.UnwarrantedOptimismException.INVALID_PROGRAM_POINT;
ccbd9cd3f720 8042118: Separate types from symbols
attila
parents: 24719
diff changeset
    55
16147
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    56
import jdk.internal.org.objectweb.asm.MethodVisitor;
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    57
import jdk.nashorn.internal.codegen.CompilerConstants;
27358
8898e06e68c1 8061957: Some arithmetic operations have unnecessary widening
attila
parents: 27204
diff changeset
    58
import jdk.nashorn.internal.runtime.JSType;
16147
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    59
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    60
/**
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    61
 * Type class: INT
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    62
 */
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    63
class IntType extends BitwiseType {
27204
06ec78f29a56 8059843: Make AST serializable
attila
parents: 25865
diff changeset
    64
    private static final long serialVersionUID = 1L;
16147
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    65
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    66
    private static final CompilerConstants.Call TO_STRING = staticCallNoLookup(Integer.class, "toString", String.class, int.class);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    67
    private static final CompilerConstants.Call VALUE_OF  = staticCallNoLookup(Integer.class, "valueOf", Integer.class, int.class);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    68
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    69
    protected IntType() {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    70
        super("int", int.class, 2, 1);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    71
    }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    72
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    73
    @Override
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    74
    public Type nextWider() {
34732
6605efbe8447 8144020: Remove long as an internal numeric type
hannesw
parents: 31549
diff changeset
    75
        return NUMBER;
16147
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    76
    }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    77
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    78
    @Override
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    79
    public Class<?> getBoxedType() {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    80
        return Integer.class;
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    81
    }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    82
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    83
    @Override
24719
f726e9d67629 8035820: Optimistic recompilation
attila
parents: 17259
diff changeset
    84
    public char getBytecodeStackType() {
f726e9d67629 8035820: Optimistic recompilation
attila
parents: 17259
diff changeset
    85
        return 'I';
f726e9d67629 8035820: Optimistic recompilation
attila
parents: 17259
diff changeset
    86
    }
f726e9d67629 8035820: Optimistic recompilation
attila
parents: 17259
diff changeset
    87
f726e9d67629 8035820: Optimistic recompilation
attila
parents: 17259
diff changeset
    88
    @Override
16147
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    89
    public Type ldc(final MethodVisitor method, final Object c) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    90
        assert c instanceof Integer;
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    91
31549
b627094c5649 8130734: Apply transformations found by netbeans Refactor->Inspect and transform menu
sundar
parents: 27358
diff changeset
    92
        final int value = ((Integer) c);
16147
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    93
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
    94
        switch (value) {
24719
f726e9d67629 8035820: Optimistic recompilation
attila
parents: 17259
diff changeset
    95
        case -1:
f726e9d67629 8035820: Optimistic recompilation
attila
parents: 17259
diff changeset
    96
            method.visitInsn(ICONST_M1);
f726e9d67629 8035820: Optimistic recompilation
attila
parents: 17259
diff changeset
    97
            break;
f726e9d67629 8035820: Optimistic recompilation
attila
parents: 17259
diff changeset
    98
        case 0:
f726e9d67629 8035820: Optimistic recompilation
attila
parents: 17259
diff changeset
    99
            method.visitInsn(ICONST_0);
f726e9d67629 8035820: Optimistic recompilation
attila
parents: 17259
diff changeset
   100
            break;
f726e9d67629 8035820: Optimistic recompilation
attila
parents: 17259
diff changeset
   101
        case 1:
f726e9d67629 8035820: Optimistic recompilation
attila
parents: 17259
diff changeset
   102
            method.visitInsn(ICONST_1);
f726e9d67629 8035820: Optimistic recompilation
attila
parents: 17259
diff changeset
   103
            break;
f726e9d67629 8035820: Optimistic recompilation
attila
parents: 17259
diff changeset
   104
        case 2:
f726e9d67629 8035820: Optimistic recompilation
attila
parents: 17259
diff changeset
   105
            method.visitInsn(ICONST_2);
f726e9d67629 8035820: Optimistic recompilation
attila
parents: 17259
diff changeset
   106
            break;
f726e9d67629 8035820: Optimistic recompilation
attila
parents: 17259
diff changeset
   107
        case 3:
f726e9d67629 8035820: Optimistic recompilation
attila
parents: 17259
diff changeset
   108
            method.visitInsn(ICONST_3);
f726e9d67629 8035820: Optimistic recompilation
attila
parents: 17259
diff changeset
   109
            break;
f726e9d67629 8035820: Optimistic recompilation
attila
parents: 17259
diff changeset
   110
        case 4:
f726e9d67629 8035820: Optimistic recompilation
attila
parents: 17259
diff changeset
   111
            method.visitInsn(ICONST_4);
f726e9d67629 8035820: Optimistic recompilation
attila
parents: 17259
diff changeset
   112
            break;
f726e9d67629 8035820: Optimistic recompilation
attila
parents: 17259
diff changeset
   113
        case 5:
f726e9d67629 8035820: Optimistic recompilation
attila
parents: 17259
diff changeset
   114
            method.visitInsn(ICONST_5);
f726e9d67629 8035820: Optimistic recompilation
attila
parents: 17259
diff changeset
   115
            break;
f726e9d67629 8035820: Optimistic recompilation
attila
parents: 17259
diff changeset
   116
        default:
f726e9d67629 8035820: Optimistic recompilation
attila
parents: 17259
diff changeset
   117
            if (value == (byte) value) {
f726e9d67629 8035820: Optimistic recompilation
attila
parents: 17259
diff changeset
   118
                method.visitIntInsn(BIPUSH, value);
f726e9d67629 8035820: Optimistic recompilation
attila
parents: 17259
diff changeset
   119
            } else if (value == (short) value) {
f726e9d67629 8035820: Optimistic recompilation
attila
parents: 17259
diff changeset
   120
                method.visitIntInsn(SIPUSH, value);
f726e9d67629 8035820: Optimistic recompilation
attila
parents: 17259
diff changeset
   121
            } else {
f726e9d67629 8035820: Optimistic recompilation
attila
parents: 17259
diff changeset
   122
                method.visitLdcInsn(c);
f726e9d67629 8035820: Optimistic recompilation
attila
parents: 17259
diff changeset
   123
            }
f726e9d67629 8035820: Optimistic recompilation
attila
parents: 17259
diff changeset
   124
            break;
16147
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   125
        }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   126
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   127
        return Type.INT;
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   128
    }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   129
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   130
    @Override
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   131
    public Type convert(final MethodVisitor method, final Type to) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   132
        if (to.isEquivalentTo(this)) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   133
            return to;
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   134
        }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   135
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   136
        if (to.isNumber()) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   137
            method.visitInsn(I2D);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   138
        } else if (to.isLong()) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   139
            method.visitInsn(I2L);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   140
        } else if (to.isBoolean()) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   141
            //nop
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   142
        } else if (to.isString()) {
24719
f726e9d67629 8035820: Optimistic recompilation
attila
parents: 17259
diff changeset
   143
            invokestatic(method, TO_STRING);
16147
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   144
        } else if (to.isObject()) {
24719
f726e9d67629 8035820: Optimistic recompilation
attila
parents: 17259
diff changeset
   145
            invokestatic(method, VALUE_OF);
16147
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   146
        } else {
24719
f726e9d67629 8035820: Optimistic recompilation
attila
parents: 17259
diff changeset
   147
            throw new UnsupportedOperationException("Illegal conversion " + this + " -> " + to);
16147
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   148
        }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   149
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   150
        return to;
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   151
    }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   152
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   153
    @Override
24719
f726e9d67629 8035820: Optimistic recompilation
attila
parents: 17259
diff changeset
   154
    public Type add(final MethodVisitor method, final int programPoint) {
24751
ccbd9cd3f720 8042118: Separate types from symbols
attila
parents: 24719
diff changeset
   155
        if(programPoint == INVALID_PROGRAM_POINT) {
ccbd9cd3f720 8042118: Separate types from symbols
attila
parents: 24719
diff changeset
   156
            method.visitInsn(IADD);
ccbd9cd3f720 8042118: Separate types from symbols
attila
parents: 24719
diff changeset
   157
        } else {
35793
b89ddacf3104 8149462: revert changes for 8149186
mhaupt
parents: 35725
diff changeset
   158
            method.visitInvokeDynamicInsn("iadd", "(II)I", MATHBOOTSTRAP, programPoint);
24751
ccbd9cd3f720 8042118: Separate types from symbols
attila
parents: 24719
diff changeset
   159
        }
16147
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   160
        return INT;
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   161
    }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   162
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   163
    @Override
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   164
    public Type shr(final MethodVisitor method) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   165
        method.visitInsn(IUSHR);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   166
        return INT;
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   167
    }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   168
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   169
    @Override
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   170
    public Type sar(final MethodVisitor method) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   171
        method.visitInsn(ISHR);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   172
        return INT;
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   173
    }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   174
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   175
    @Override
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   176
    public Type shl(final MethodVisitor method) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   177
        method.visitInsn(ISHL);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   178
        return INT;
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   179
    }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   180
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   181
    @Override
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   182
    public Type and(final MethodVisitor method) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   183
        method.visitInsn(IAND);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   184
        return INT;
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   185
    }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   186
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   187
    @Override
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   188
    public Type or(final MethodVisitor method) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   189
        method.visitInsn(IOR);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   190
        return INT;
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   191
    }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   192
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   193
    @Override
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   194
    public Type xor(final MethodVisitor method) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   195
        method.visitInsn(IXOR);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   196
        return INT;
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   197
    }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   198
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   199
    @Override
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   200
    public Type load(final MethodVisitor method, final int slot) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   201
        assert slot != -1;
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   202
        method.visitVarInsn(ILOAD, slot);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   203
        return INT;
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   204
    }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   205
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   206
    @Override
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   207
    public void store(final MethodVisitor method, final int slot) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   208
        assert slot != -1;
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   209
        method.visitVarInsn(ISTORE, slot);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   210
    }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   211
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   212
    @Override
24719
f726e9d67629 8035820: Optimistic recompilation
attila
parents: 17259
diff changeset
   213
    public Type sub(final MethodVisitor method, final int programPoint) {
24751
ccbd9cd3f720 8042118: Separate types from symbols
attila
parents: 24719
diff changeset
   214
        if(programPoint == INVALID_PROGRAM_POINT) {
ccbd9cd3f720 8042118: Separate types from symbols
attila
parents: 24719
diff changeset
   215
            method.visitInsn(ISUB);
ccbd9cd3f720 8042118: Separate types from symbols
attila
parents: 24719
diff changeset
   216
        } else {
35793
b89ddacf3104 8149462: revert changes for 8149186
mhaupt
parents: 35725
diff changeset
   217
            method.visitInvokeDynamicInsn("isub", "(II)I", MATHBOOTSTRAP, programPoint);
24751
ccbd9cd3f720 8042118: Separate types from symbols
attila
parents: 24719
diff changeset
   218
        }
16147
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   219
        return INT;
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   220
    }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   221
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   222
    @Override
24719
f726e9d67629 8035820: Optimistic recompilation
attila
parents: 17259
diff changeset
   223
    public Type mul(final MethodVisitor method, final int programPoint) {
24751
ccbd9cd3f720 8042118: Separate types from symbols
attila
parents: 24719
diff changeset
   224
        if(programPoint == INVALID_PROGRAM_POINT) {
ccbd9cd3f720 8042118: Separate types from symbols
attila
parents: 24719
diff changeset
   225
            method.visitInsn(IMUL);
ccbd9cd3f720 8042118: Separate types from symbols
attila
parents: 24719
diff changeset
   226
        } else {
35793
b89ddacf3104 8149462: revert changes for 8149186
mhaupt
parents: 35725
diff changeset
   227
            method.visitInvokeDynamicInsn("imul", "(II)I", MATHBOOTSTRAP, programPoint);
24751
ccbd9cd3f720 8042118: Separate types from symbols
attila
parents: 24719
diff changeset
   228
        }
16147
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   229
        return INT;
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   230
    }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   231
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   232
    @Override
24719
f726e9d67629 8035820: Optimistic recompilation
attila
parents: 17259
diff changeset
   233
    public Type div(final MethodVisitor method, final int programPoint) {
27358
8898e06e68c1 8061957: Some arithmetic operations have unnecessary widening
attila
parents: 27204
diff changeset
   234
        if (programPoint == INVALID_PROGRAM_POINT) {
8898e06e68c1 8061957: Some arithmetic operations have unnecessary widening
attila
parents: 27204
diff changeset
   235
            JSType.DIV_ZERO.invoke(method);
8898e06e68c1 8061957: Some arithmetic operations have unnecessary widening
attila
parents: 27204
diff changeset
   236
        } else {
35793
b89ddacf3104 8149462: revert changes for 8149186
mhaupt
parents: 35725
diff changeset
   237
            method.visitInvokeDynamicInsn("idiv", "(II)I", MATHBOOTSTRAP, programPoint);
27358
8898e06e68c1 8061957: Some arithmetic operations have unnecessary widening
attila
parents: 27204
diff changeset
   238
        }
16147
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   239
        return INT;
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   240
    }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   241
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   242
    @Override
24751
ccbd9cd3f720 8042118: Separate types from symbols
attila
parents: 24719
diff changeset
   243
    public Type rem(final MethodVisitor method, final int programPoint) {
27358
8898e06e68c1 8061957: Some arithmetic operations have unnecessary widening
attila
parents: 27204
diff changeset
   244
        if (programPoint == INVALID_PROGRAM_POINT) {
8898e06e68c1 8061957: Some arithmetic operations have unnecessary widening
attila
parents: 27204
diff changeset
   245
            JSType.REM_ZERO.invoke(method);
8898e06e68c1 8061957: Some arithmetic operations have unnecessary widening
attila
parents: 27204
diff changeset
   246
        } else {
35793
b89ddacf3104 8149462: revert changes for 8149186
mhaupt
parents: 35725
diff changeset
   247
            method.visitInvokeDynamicInsn("irem", "(II)I", MATHBOOTSTRAP, programPoint);
27358
8898e06e68c1 8061957: Some arithmetic operations have unnecessary widening
attila
parents: 27204
diff changeset
   248
        }
16147
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   249
        return INT;
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   250
    }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   251
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   252
    @Override
24719
f726e9d67629 8035820: Optimistic recompilation
attila
parents: 17259
diff changeset
   253
    public Type neg(final MethodVisitor method, final int programPoint) {
24751
ccbd9cd3f720 8042118: Separate types from symbols
attila
parents: 24719
diff changeset
   254
        if(programPoint == INVALID_PROGRAM_POINT) {
ccbd9cd3f720 8042118: Separate types from symbols
attila
parents: 24719
diff changeset
   255
            method.visitInsn(INEG);
ccbd9cd3f720 8042118: Separate types from symbols
attila
parents: 24719
diff changeset
   256
        } else {
35793
b89ddacf3104 8149462: revert changes for 8149186
mhaupt
parents: 35725
diff changeset
   257
            method.visitInvokeDynamicInsn("ineg", "(I)I", MATHBOOTSTRAP, programPoint);
24751
ccbd9cd3f720 8042118: Separate types from symbols
attila
parents: 24719
diff changeset
   258
        }
16147
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   259
        return INT;
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   260
    }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   261
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   262
    @Override
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   263
    public void _return(final MethodVisitor method) {
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   264
        method.visitInsn(IRETURN);
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   265
    }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   266
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   267
    @Override
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   268
    public Type loadUndefined(final MethodVisitor method) {
24719
f726e9d67629 8035820: Optimistic recompilation
attila
parents: 17259
diff changeset
   269
        method.visitLdcInsn(UNDEFINED_INT);
f726e9d67629 8035820: Optimistic recompilation
attila
parents: 17259
diff changeset
   270
        return INT;
f726e9d67629 8035820: Optimistic recompilation
attila
parents: 17259
diff changeset
   271
    }
f726e9d67629 8035820: Optimistic recompilation
attila
parents: 17259
diff changeset
   272
f726e9d67629 8035820: Optimistic recompilation
attila
parents: 17259
diff changeset
   273
    @Override
24778
2ff5d7041566 8044638: Tidy up Nashorn codebase for code standards
attila
parents: 24751
diff changeset
   274
    public Type loadForcedInitializer(final MethodVisitor method) {
24719
f726e9d67629 8035820: Optimistic recompilation
attila
parents: 17259
diff changeset
   275
        method.visitInsn(ICONST_0);
16147
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   276
        return INT;
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   277
    }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   278
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   279
    @Override
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   280
    public Type cmp(final MethodVisitor method, final boolean isCmpG) {
24719
f726e9d67629 8035820: Optimistic recompilation
attila
parents: 17259
diff changeset
   281
        throw new UnsupportedOperationException("cmp" + (isCmpG ? 'g' : 'l'));
16147
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   282
    }
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   283
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   284
    @Override
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   285
    public Type cmp(final MethodVisitor method) {
24719
f726e9d67629 8035820: Optimistic recompilation
attila
parents: 17259
diff changeset
   286
        throw new UnsupportedOperationException("cmp");
16147
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   287
    }
24719
f726e9d67629 8035820: Optimistic recompilation
attila
parents: 17259
diff changeset
   288
16147
e63b63819133 8005403: Open-source Nashorn
jlaskey
parents:
diff changeset
   289
}