Examples of VmStaticField


Examples of org.jnode.vm.classmgr.VmStaticField

     */
    public final void visit_getstatic(VmConstFieldRef fieldRef) {
        final Label curInstrLabel = getCurInstrLabel();
        fieldRef.resolve(loader);
        final int type = JvmType.SignatureToType(fieldRef.getSignature());
        final VmStaticField sf = (VmStaticField) fieldRef.getResolvedVmField();

        // Initialize if needed
        if (!sf.getDeclaringClass().isAlwaysInitialized()) {
            writeInitializeClass(fieldRef);
        }

        // Get static field object
        if (JvmType.isFloat(type)) {
            final boolean is32bit = !fieldRef.isWide();
            if (sf.isShared()) {
                helper.writeGetStaticsEntryToFPU(curInstrLabel, (VmSharedStaticsEntry) sf, is32bit);
            } else {
                final GPR tmp = (GPR) L1AHelper.requestRegister(eContext,
                    JvmType.REFERENCE, false);
                helper.writeGetStaticsEntryToFPU(curInstrLabel,
                    (VmIsolatedStaticsEntry) sf, is32bit, tmp);
                L1AHelper.releaseRegister(eContext, tmp);
            }
            final Item result = ifac.createFPUStack(type);
            pushFloat(result);
            vstack.push(result);
        } else if (!fieldRef.isWide()) {
            final WordItem result = L1AHelper.requestWordRegister(eContext,
                type, false);
            final GPR resultr = result.getRegister();
            if (os.isCode32() || (type != JvmType.REFERENCE)) {
                if (sf.isShared()) {
                    helper.writeGetStaticsEntry(curInstrLabel, resultr, (VmSharedStaticsEntry) sf);
                } else {
                    final GPR tmp = (GPR) L1AHelper.requestRegister(eContext,
                        JvmType.REFERENCE, false);
                    helper.writeGetStaticsEntry(curInstrLabel, resultr,
                        (VmIsolatedStaticsEntry) sf, tmp);
                    L1AHelper.releaseRegister(eContext, tmp);
                }
            } else {
                if (sf.isShared()) {
                    helper.writeGetStaticsEntry64(curInstrLabel, (GPR64) resultr, (VmSharedStaticsEntry) sf);
                } else {
                    helper.writeGetStaticsEntry64(curInstrLabel, (GPR64) resultr, (VmIsolatedStaticsEntry) sf);
                }
            }
            vstack.push(result);
        } else {
            final DoubleWordItem result = L1AHelper.requestDoubleWordRegisters(
                eContext, type);
            if (os.isCode32()) {
                final GPR lsb = result.getLsbRegister(eContext);
                final GPR msb = result.getMsbRegister(eContext);
                if (sf.isShared()) {
                    helper.writeGetStaticsEntry64(curInstrLabel, lsb, msb, (VmSharedStaticsEntry) sf);
                } else {
                    helper.writeGetStaticsEntry64(curInstrLabel, lsb, msb, (VmIsolatedStaticsEntry) sf);
                }
            } else {
                final GPR64 reg = result.getRegister(eContext);
                if (sf.isShared()) {
                    helper.writeGetStaticsEntry64(curInstrLabel, reg, (VmSharedStaticsEntry) sf);
                } else {
                    helper.writeGetStaticsEntry64(curInstrLabel, reg, (VmIsolatedStaticsEntry) sf);
                }
            }
View Full Code Here

Examples of org.jnode.vm.classmgr.VmStaticField

     * @see org.jnode.vm.bytecode.BytecodeVisitor#visit_putstatic(org.jnode.vm.classmgr.VmConstFieldRef)
     */
    public final void visit_putstatic(VmConstFieldRef fieldRef) {
        final Label curInstrLabel = getCurInstrLabel();
        fieldRef.resolve(loader);
        final VmStaticField sf = (VmStaticField) fieldRef.getResolvedVmField();

        // Initialize class if needed
        if (!sf.getDeclaringClass().isAlwaysInitialized()) {
            writeInitializeClass(fieldRef);
        }

        // Get value
        final Item val = vstack.pop();
        val.load(eContext);

        // Put static field
        if (!fieldRef.isWide()) {
            final WordItem wval = (WordItem) val;
            final GPR valr = wval.getRegister();

            if (os.isCode32() || (wval.getType() != JvmType.REFERENCE)) {
                if (sf.isShared()) {
                    helper.writePutStaticsEntry(curInstrLabel, valr, sf);
                } else {
                    final GPR tmp = (GPR) L1AHelper.requestRegister(eContext,
                        JvmType.REFERENCE, false);
                    helper.writePutStaticsEntry(curInstrLabel, valr, sf, tmp);
                    L1AHelper.releaseRegister(eContext, tmp);
                }
            } else {
                if (sf.isShared()) {
                    helper.writePutStaticsEntry64(curInstrLabel, (GPR64) valr, sf);
                } else {
                    final GPR tmp = (GPR) L1AHelper.requestRegister(eContext, JvmType.REFERENCE, false);
                    helper.writePutStaticsEntry64(curInstrLabel, (GPR64) valr, sf, tmp);
                    L1AHelper.releaseRegister(eContext, tmp);
                }
            }
            if (!sf.isPrimitive() && helper.needsWriteBarrier()) {
                final GPR tmp = (GPR) L1AHelper.requestRegister(eContext, JvmType.INT, false);
                helper.writePutstaticWriteBarrier(sf, valr, tmp);
                L1AHelper.releaseRegister(eContext, tmp);
            }
        } else {
            final DoubleWordItem dval = (DoubleWordItem) val;
            if (os.isCode32()) {
                if (sf.isShared()) {
                    helper.writePutStaticsEntry64(curInstrLabel, dval.getLsbRegister(eContext), dval
                        .getMsbRegister(eContext), sf);
                } else {
                    final GPR tmp = (GPR) L1AHelper.requestRegister(eContext, JvmType.REFERENCE, false);
                    helper.writePutStaticsEntry64(curInstrLabel, dval.getLsbRegister(eContext),
                        dval.getMsbRegister(eContext), sf, tmp);
                    L1AHelper.releaseRegister(eContext, tmp);
                }
            } else {
                if (sf.isShared()) {
                    helper.writePutStaticsEntry64(curInstrLabel, dval.getRegister(eContext), sf);
                } else {
                    final GPR tmp = (GPR) L1AHelper.requestRegister(eContext, JvmType.REFERENCE, false);
                    helper.writePutStaticsEntry64(curInstrLabel, dval.getRegister(eContext), sf, tmp);
                    L1AHelper.releaseRegister(eContext, tmp);
View Full Code Here

Examples of org.jnode.vm.classmgr.VmStaticField

        }

        final Label curInstrLabel = getCurInstrLabel();
        fieldRef.resolve(loader);
        final int type = JvmType.SignatureToType(fieldRef.getSignature());
        final VmStaticField sf = (VmStaticField) fieldRef.getResolvedVmField();

        // Initialize if needed
        if (!sf.getDeclaringClass().isAlwaysInitialized()) {
            writeInitializeClass(fieldRef);
        }

        // Get static field object
        if (JvmType.isFloat(type)) {
            final boolean is32bit = !fieldRef.isWide();
            if (sf.isShared()) {
                helper.writeGetStaticsEntryToFPU(curInstrLabel, (VmSharedStaticsEntry) sf, is32bit);
            } else {
                final GPR tmp = (GPR) L1AHelper.requestRegister(eContext,
                    JvmType.REFERENCE, false);
                helper.writeGetStaticsEntryToFPU(curInstrLabel,
                    (VmIsolatedStaticsEntry) sf, is32bit, tmp);
                L1AHelper.releaseRegister(eContext, tmp);
            }
            final Item result = ifac.createFPUStack(type);
            vstack.fpuStack.push(result);
            vstack.push(result);
        } else if (!fieldRef.isWide()) {
            final WordItem result = L1AHelper.requestWordRegister(eContext,
                type, false);
            final GPR resultr = result.getRegister();
            if (os.isCode32() || (type != JvmType.REFERENCE)) {
                if (sf.isShared()) {
                    helper.writeGetStaticsEntry(curInstrLabel, resultr, (VmSharedStaticsEntry) sf);
                } else {
                    final GPR tmp = (GPR) L1AHelper.requestRegister(eContext,
                        JvmType.REFERENCE, false);
                    helper.writeGetStaticsEntry(curInstrLabel, resultr,
                        (VmIsolatedStaticsEntry) sf, tmp);
                    L1AHelper.releaseRegister(eContext, tmp);
                }
            } else {
                if (sf.isShared()) {
                    helper.writeGetStaticsEntry64(curInstrLabel, (GPR64) resultr, (VmSharedStaticsEntry) sf);
                } else {
                    helper.writeGetStaticsEntry64(curInstrLabel, (GPR64) resultr, (VmIsolatedStaticsEntry) sf);
                }
            }
            vstack.push(result);
        } else {
            final DoubleWordItem result = L1AHelper.requestDoubleWordRegisters(
                eContext, type);
            if (os.isCode32()) {
                final GPR lsb = result.getLsbRegister(eContext);
                final GPR msb = result.getMsbRegister(eContext);
                if (sf.isShared()) {
                    helper.writeGetStaticsEntry64(curInstrLabel, lsb, msb, (VmSharedStaticsEntry) sf);
                } else {
                    helper.writeGetStaticsEntry64(curInstrLabel, lsb, msb, (VmIsolatedStaticsEntry) sf);
                }
            } else {
                final GPR64 reg = result.getRegister(eContext);
                if (sf.isShared()) {
                    helper.writeGetStaticsEntry64(curInstrLabel, reg, (VmSharedStaticsEntry) sf);
                } else {
                    helper.writeGetStaticsEntry64(curInstrLabel, reg, (VmIsolatedStaticsEntry) sf);
                }
            }
View Full Code Here

Examples of org.jnode.vm.classmgr.VmStaticField

            counters.getCounter("putstatic").inc();
        }

        final Label curInstrLabel = getCurInstrLabel();
        fieldRef.resolve(loader);
        final VmStaticField sf = (VmStaticField) fieldRef.getResolvedVmField();

        // Initialize class if needed
        if (!sf.getDeclaringClass().isAlwaysInitialized()) {
            writeInitializeClass(fieldRef);
        }

        // Get value
        final Item val = vstack.pop();
        val.load(eContext);

        // Put static field
        if (!fieldRef.isWide()) {
            final WordItem wval = (WordItem) val;
            final GPR valr = wval.getRegister();

            if (os.isCode32() || (wval.getType() != JvmType.REFERENCE)) {
                if (sf.isShared()) {
                    helper.writePutStaticsEntry(curInstrLabel, valr,
                        (VmSharedStaticsEntry) sf);
                } else {
                    final GPR tmp = (GPR) L1AHelper.requestRegister(eContext,
                        JvmType.REFERENCE, false);
                    helper.writePutStaticsEntry(curInstrLabel, valr,
                        (VmIsolatedStaticsEntry) sf, tmp);
                    L1AHelper.releaseRegister(eContext, tmp);
                }
            } else {
                if (sf.isShared()) {
                    helper.writePutStaticsEntry64(curInstrLabel, (GPR64) valr,
                        (VmSharedStaticsEntry) sf);
                } else {
                    final GPR tmp = (GPR) L1AHelper.requestRegister(eContext,
                        JvmType.REFERENCE, false);
                    helper.writePutStaticsEntry64(curInstrLabel, (GPR64) valr,
                        (VmIsolatedStaticsEntry) sf, tmp);
                    L1AHelper.releaseRegister(eContext, tmp);
                }
            }
            if (!sf.isPrimitive() && helper.needsWriteBarrier()) {
                final GPR tmp = (GPR) L1AHelper.requestRegister(eContext,
                    JvmType.INT, false);
                helper.writePutstaticWriteBarrier(sf, valr, tmp);
                L1AHelper.releaseRegister(eContext, tmp);
            }
        } else {
            final DoubleWordItem dval = (DoubleWordItem) val;
            if (os.isCode32()) {
                if (sf.isShared()) {
                    helper.writePutStaticsEntry64(curInstrLabel, dval
                        .getLsbRegister(eContext), dval
                        .getMsbRegister(eContext),
                        (VmSharedStaticsEntry) sf);
                } else {
                    final GPR tmp = (GPR) L1AHelper.requestRegister(eContext,
                        JvmType.REFERENCE, false);
                    helper.writePutStaticsEntry64(curInstrLabel, dval
                        .getLsbRegister(eContext), dval
                        .getMsbRegister(eContext),
                        (VmIsolatedStaticsEntry) sf, tmp);
                    L1AHelper.releaseRegister(eContext, tmp);
                }
            } else {
                if (sf.isShared()) {
                    helper.writePutStaticsEntry64(curInstrLabel, dval
                        .getRegister(eContext), (VmSharedStaticsEntry) sf);
                } else {
                    final GPR tmp = (GPR) L1AHelper.requestRegister(eContext,
                        JvmType.REFERENCE, false);
View Full Code Here

Examples of org.jnode.vm.classmgr.VmStaticField

    //todo protect this method from arbitrary access
    @PrivilegedActionPragma
    public static void setStaticField(Class<?> clazz, String fieldName,
                                      Object value) {
        final VmStaticField f = (VmStaticField) VmType.fromClass((Class<?>) clazz).getField(
            fieldName);
        final Object staticsTable;
        final Offset offset;
        if (f.isShared()) {
            staticsTable = VmMagic.currentProcessor().getSharedStaticsTable();
            offset = Offset.fromIntZeroExtend(f.getSharedStaticsIndex() << 2);
        } else {
            staticsTable = VmMagic.currentProcessor().getIsolatedStaticsTable();
            offset = Offset.fromIntZeroExtend(f.getIsolatedStaticsIndex() << 2);
        }
        final Address ptr = VmMagic.getArrayData(staticsTable);
        ptr.store(ObjectReference.fromObject(value), offset);
    }
View Full Code Here

Examples of org.jnode.vm.classmgr.VmStaticField

        throws IllegalAccessException, JNodeClassNotFoundException {
        jf.setAccessible(true);
        final Object val = jf.get(null);
        final int fType = JvmType.SignatureToType(f.getSignature());
        final int idx;
        final VmStaticField sf = (VmStaticField) f;
        final VmStatics statics;
        if (sf.isShared()) {
            idx = sf.getSharedStaticsIndex();
            statics = sharedStatics;
        } else {
            idx = sf.getIsolatedStaticsIndex();
            statics = isolatedStatics;
        }

        if (f.isPrimitive()) {
            if (f.isWide()) {
View Full Code Here

Examples of org.jnode.vm.classmgr.VmStaticField

     */
    protected void initVm(X86BinaryAssembler os, Vm vm) throws BuildException,
        ClassNotFoundException {
        os.setObjectRef(new Label("$$Initialize Vm"));
        VmType<?> vmClass = loadClass(VmUtils.class);
        VmStaticField vmField = (VmStaticField) vmClass.getField("VM_INSTANCE");

        final GPR abx = os.isCode32() ? (GPR) X86Register.EBX : X86Register.RBX;
        final GPR adi = os.isCode32() ? (GPR) X86Register.EDI : X86Register.RDI;
        final int slotSize = os.isCode32() ? 4 : 8;

        // Setup STATICS register (EDI/RDI)
        os.writeMOV_Const(adi, sharedStatics.getTable());

        /* Set Vm.instance */
        os.writeMOV_Const(abx, vm);
        final int vmOffset = (VmArray.DATA_OFFSET * slotSize)
            + (vmField.getSharedStaticsIndex() << 2);
        log("vmOffset " + NumberUtils.hex(vmOffset), Project.MSG_VERBOSE);
        os.writeMOV(abx.getSize(), adi, vmOffset, abx);
    }
View Full Code Here

Examples of org.jnode.vm.classmgr.VmStaticField

     */
    protected void initMain(X86BinaryAssembler os, PluginRegistry registry)
        throws BuildException, ClassNotFoundException {
        os.setObjectRef(new Label("$$Initialize Main"));
        final VmType<?> mainClass = loadClass(Main.class);
        final VmStaticField registryField = (VmStaticField) mainClass
            .getField(Main.REGISTRY_FIELD_NAME);

        final GPR abx = os.isCode32() ? (GPR) X86Register.EBX : X86Register.RBX;
        final GPR adi = os.isCode32() ? (GPR) X86Register.EDI : X86Register.RDI;
        final int slotSize = os.isCode32() ? 4 : 8;

        // Setup STATICS register (EDI/RDI)
        os.writeMOV_Const(adi, sharedStatics.getTable());

        /* Set Main.pluginRegistry */
        os.writeMOV_Const(abx, registry);
        final int rfOffset = (VmArray.DATA_OFFSET * slotSize)
            + (registryField.getSharedStaticsIndex() << 2);
        log("rfOffset " + NumberUtils.hex(rfOffset), Project.MSG_VERBOSE);
        os.writeMOV(abx.getSize(), adi, rfOffset, abx);
    }
View Full Code Here

Examples of org.jnode.vm.classmgr.VmStaticField

@MagicPermission
public final class VmReflection {

    public static Object getObject(VmField field, Object o) {
        if (field.isStatic()) {
            final VmStaticField sf = (VmStaticField) field;
            initialize(sf);
            Object obj = getStaticFieldAddress(sf).loadObjectReference().toObject();
            //handles the reflective access to static final String fields, which didn't work.
            if (obj != null && sf.isFinal() && field.getSignature().equals("Ljava/lang/String;")) {
                if (obj instanceof VmConstString) {
                    VmConstString cs = (VmConstString) obj;
                    obj = VmUtils.getVm().getSharedStatics().getStringEntry(cs.getSharedStaticsIndex());
                }
            }
View Full Code Here

Examples of org.jnode.vm.classmgr.VmStaticField

        }
    }

    public static boolean getBoolean(VmField field, Object o) {
        if (field.isStatic()) {
            final VmStaticField sf = (VmStaticField) field;
            initialize(sf);
            return (getStaticFieldAddress(sf).loadInt() != 0);
        } else {
            final VmInstanceField inf = (VmInstanceField) field;
            return (getInstanceFieldAddress(o, inf).loadByte() != 0);
View Full Code Here
TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.