Shenandoah WB fastpath and optimizations
Roland Westrelin
rwestrel at redhat.com
Tue Dec 19 15:52:50 UTC 2017
> In fact, I wanted to ask you what would it take to teach C2 to emit C1-style check, e.g. instead of:
>
> movzbl 0x3d8(%rTLS), %rScratch ; read evac-in-progress
> test %rScratch, %rScratch
> jne EVAC-ENABLED-SLOW-PATH
> mov -0x8(%rObj), %rObj ; read barrier
>
> ...do:
>
> cmpb 0x3d8(%TLS), 0 ; read evac-in-progress
> jne EVAC-ENABLED-SLOW-PATH
> mov -0x8(%rObj), %rObj ; read barrier
>
> ...thus freeing up the register?
This?
diff --git a/src/hotspot/cpu/x86/x86_64.ad b/src/hotspot/cpu/x86/x86_64.ad
--- a/src/hotspot/cpu/x86/x86_64.ad
+++ b/src/hotspot/cpu/x86/x86_64.ad
@@ -2966,6 +2966,16 @@
interface(CONST_INTER);
%}
+operand immU8()
+%{
+ predicate(0 <= n->get_int() && (n->get_int() <= 255));
+ match(ConI);
+
+ op_cost(5);
+ format %{ %}
+ interface(CONST_INTER);
+%}
+
operand immI16()
%{
predicate((-32768 <= n->get_int()) && (n->get_int() <= 32767));
@@ -11729,6 +11739,18 @@
ins_pipe(ialu_cr_reg_imm);
%}
+instruct compUB_mem_imm(rFlagsReg cr, memory op1, immU8 op2)
+%{
+ match(Set cr (CmpI (LoadUB op1) op2));
+
+ ins_cost(125);
+ format %{ "cmpb $op1, $op2" %}
+ ins_encode %{
+ __ cmpb($op1$$Address, $op2$$constant);
+ %}
+ ins_pipe(ialu_cr_reg_mem);
+%}
+
//----------Max and Min--------------------------------------------------------
// Min Instructions
More information about the shenandoah-dev
mailing list