< prev index next >

src/hotspot/cpu/x86/x86_64.ad

Print this page
rev 50189 : 8203628: Optimize (masked) byte memory comparisons on x86
Reviewed-by: XXX

*** 2978,2987 **** --- 2978,2997 ---- op_cost(5); format %{ %} 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)); match(ConI);
*** 11595,11604 **** --- 11605,11654 ---- opcode(0x85); ins_encode(REX_reg_reg_wide(src, src), OpcP, reg_reg(src, src)); ins_pipe(ialu_cr_reg_imm); %} + instruct compUB_mem_imm(rFlagsReg cr, memory mem, immU8 imm) + %{ + match(Set cr (CmpI (LoadUB mem) imm)); + + ins_cost(125); + format %{ "cmpb $mem, $imm" %} + ins_encode %{ __ cmpb($mem$$Address, $imm$$constant); %} + ins_pipe(ialu_cr_reg_mem); + %} + + instruct compB_mem_imm(rFlagsReg cr, memory mem, immI8 imm) + %{ + match(Set cr (CmpI (LoadB mem) imm)); + + ins_cost(125); + format %{ "cmpb $mem, $imm" %} + ins_encode %{ __ cmpb($mem$$Address, $imm$$constant); %} + ins_pipe(ialu_cr_reg_mem); + %} + + instruct testUB_mem_imm(rFlagsReg cr, memory mem, immU8 imm, immI0 zero) + %{ + match(Set cr (CmpI (AndI (LoadUB mem) imm) zero)); + + ins_cost(125); + format %{ "testb $mem, $imm" %} + ins_encode %{ __ testb($mem$$Address, $imm$$constant); %} + ins_pipe(ialu_cr_reg_mem); + %} + + instruct testB_mem_imm(rFlagsReg cr, memory mem, immI8 imm, immI0 zero) + %{ + match(Set cr (CmpI (AndI (LoadB mem) imm) zero)); + + ins_cost(125); + format %{ "testb $mem, $imm" %} + ins_encode %{ __ testb($mem$$Address, $imm$$constant); %} + ins_pipe(ialu_cr_reg_mem); + %} + //----------Max and Min-------------------------------------------------------- // Min Instructions instruct cmovI_reg_g(rRegI dst, rRegI src, rFlagsReg cr) %{
< prev index next >