< prev index next >

src/hotspot/cpu/x86/x86_64.ad

Print this page

        

*** 12004,12013 **** --- 12004,12024 ---- opcode(0x85); ins_encode(REX_reg_mem(src, mem), OpcP, reg_mem(src, mem)); ins_pipe(ialu_cr_reg_mem); %} + // Fold array properties check + instruct testI_mem_imm(rFlagsReg cr, memory mem, immI con, immI0 zero) + %{ + match(Set cr (CmpI (AndI (CastN2I (LoadNKlass mem)) con) zero)); + + format %{ "testl $mem, $con" %} + opcode(0xF7, 0x00); + ins_encode(REX_mem(mem), OpcP, RM_opc_mem(0x00, mem), Con32(con)); + ins_pipe(ialu_mem_imm); + %} + // Unsigned compare Instructions; really, same as signed except they // produce an rFlagsRegU instead of rFlagsReg. instruct compU_rReg(rFlagsRegU cr, rRegI op1, rRegI op2) %{ match(Set cr (CmpU op1 op2));
*** 12310,12319 **** --- 12321,12341 ---- format %{ "testq $src, $mem" %} opcode(0x85); ins_encode(REX_reg_mem_wide(src, mem), OpcP, reg_mem(src, mem)); ins_pipe(ialu_cr_reg_mem); + %} + + // Fold array properties check + instruct testL_reg_mem3(rFlagsReg cr, memory mem, rRegL src, immL0 zero) + %{ + match(Set cr (CmpL (AndL (CastP2X (LoadKlass mem)) src) zero)); + + format %{ "testq $src, $mem" %} + opcode(0x85); + ins_encode(REX_reg_mem_wide(src, mem), OpcP, reg_mem(src, mem)); + ins_pipe(ialu_cr_reg_mem); %} // Manifest a CmpL result in an integer register. Very painful. // This is the test to avoid. instruct cmpL3_reg_reg(rRegI dst, rRegL src1, rRegL src2, rFlagsReg flags)
< prev index next >