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);
}