< prev index next >
src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.amd64/src/org/graalvm/compiler/hotspot/amd64/AMD64HotSpotCounterOp.java
Print this page
rev 52509 : [mq]: graal2
*** 22,43 ****
*/
package org.graalvm.compiler.hotspot.amd64;
- import static org.graalvm.compiler.lir.LIRValueUtil.asJavaConstant;
- import static org.graalvm.compiler.lir.LIRValueUtil.isJavaConstant;
import static jdk.vm.ci.amd64.AMD64.rax;
import static jdk.vm.ci.amd64.AMD64.rbx;
import static jdk.vm.ci.code.ValueUtil.asRegister;
import static jdk.vm.ci.code.ValueUtil.isRegister;
import org.graalvm.compiler.asm.amd64.AMD64Address;
import org.graalvm.compiler.asm.amd64.AMD64MacroAssembler;
import org.graalvm.compiler.debug.GraalError;
- import org.graalvm.compiler.hotspot.HotSpotCounterOp;
import org.graalvm.compiler.hotspot.GraalHotSpotVMConfig;
import org.graalvm.compiler.hotspot.meta.HotSpotRegistersProvider;
import org.graalvm.compiler.lir.LIRInstructionClass;
import org.graalvm.compiler.lir.Opcode;
import org.graalvm.compiler.lir.asm.CompilationResultBuilder;
--- 22,46 ----
*/
package org.graalvm.compiler.hotspot.amd64;
import static jdk.vm.ci.amd64.AMD64.rax;
import static jdk.vm.ci.amd64.AMD64.rbx;
import static jdk.vm.ci.code.ValueUtil.asRegister;
import static jdk.vm.ci.code.ValueUtil.isRegister;
+ import static org.graalvm.compiler.lir.LIRValueUtil.asJavaConstant;
+ import static org.graalvm.compiler.lir.LIRValueUtil.isJavaConstant;
+ import org.graalvm.compiler.asm.Label;
import org.graalvm.compiler.asm.amd64.AMD64Address;
+ import org.graalvm.compiler.asm.amd64.AMD64Assembler;
import org.graalvm.compiler.asm.amd64.AMD64MacroAssembler;
import org.graalvm.compiler.debug.GraalError;
import org.graalvm.compiler.hotspot.GraalHotSpotVMConfig;
+ import org.graalvm.compiler.hotspot.HotSpotCounterOp;
+ import org.graalvm.compiler.hotspot.debug.BenchmarkCounters;
import org.graalvm.compiler.hotspot.meta.HotSpotRegistersProvider;
import org.graalvm.compiler.lir.LIRInstructionClass;
import org.graalvm.compiler.lir.Opcode;
import org.graalvm.compiler.lir.asm.CompilationResultBuilder;
*** 88,98 ****
// backup scratch register
masm.movq((AMD64Address) crb.asAddress(backupSlot), scratch);
// load counters array
masm.movptr(countersArrayReg, countersArrayAddr);
! CounterProcedure emitProcedure = (counterIndex, increment, displacement) -> emitIncrement(masm, countersArrayReg, increment, displacement);
forEachCounter(emitProcedure, target);
// restore scratch register
masm.movq(scratch, (AMD64Address) crb.asAddress(backupSlot));
}
--- 91,101 ----
// backup scratch register
masm.movq((AMD64Address) crb.asAddress(backupSlot), scratch);
// load counters array
masm.movptr(countersArrayReg, countersArrayAddr);
! CounterProcedure emitProcedure = (counterIndex, increment, displacement) -> emitIncrement(crb, masm, countersArrayReg, increment, displacement);
forEachCounter(emitProcedure, target);
// restore scratch register
masm.movq(scratch, (AMD64Address) crb.asAddress(backupSlot));
}
*** 107,124 ****
}
}
return false;
}
! private static void emitIncrement(AMD64MacroAssembler masm, Register countersArrayReg, Value incrementValue, int displacement) {
// address for counter value
AMD64Address counterAddr = new AMD64Address(countersArrayReg, displacement);
// increment counter (in memory)
if (isJavaConstant(incrementValue)) {
int increment = asInt(asJavaConstant(incrementValue));
masm.incrementq(counterAddr, increment);
} else {
masm.addq(counterAddr, asRegister(incrementValue));
}
!
}
}
--- 110,133 ----
}
}
return false;
}
! private static void emitIncrement(CompilationResultBuilder crb, AMD64MacroAssembler masm, Register countersArrayReg, Value incrementValue, int displacement) {
// address for counter value
AMD64Address counterAddr = new AMD64Address(countersArrayReg, displacement);
// increment counter (in memory)
if (isJavaConstant(incrementValue)) {
int increment = asInt(asJavaConstant(incrementValue));
masm.incrementq(counterAddr, increment);
} else {
masm.addq(counterAddr, asRegister(incrementValue));
}
! if (BenchmarkCounters.Options.AbortOnBenchmarkCounterOverflow.getValue(crb.getOptions())) {
! Label target = new Label();
! masm.jccb(AMD64Assembler.ConditionFlag.NoOverflow, target);
! crb.blockComment("[BENCHMARK COUNTER OVERFLOW]");
! masm.illegal();
! masm.bind(target);
! }
}
}
< prev index next >