Mercurial > hg > graal-compiler
diff src/cpu/x86/vm/x86_32.ad @ 14726:92aa6797d639
Backed out merge changeset: b51e29501f30
Backed out merge revision to its first parent (8f483e200405)
author | Doug Simon <doug.simon@oracle.com> |
---|---|
date | Mon, 24 Mar 2014 21:30:43 +0100 |
parents | 9e9af3aa4278 |
children |
line wrap: on
line diff
--- a/src/cpu/x86/vm/x86_32.ad Fri Mar 21 16:36:59 2014 -0700 +++ b/src/cpu/x86/vm/x86_32.ad Mon Mar 24 21:30:43 2014 +0100 @@ -5163,19 +5163,6 @@ %} instruct countTrailingZerosI(rRegI dst, rRegI src, eFlagsReg cr) %{ - predicate(UseCountTrailingZerosInstruction); - match(Set dst (CountTrailingZerosI src)); - effect(KILL cr); - - format %{ "TZCNT $dst, $src\t# count trailing zeros (int)" %} - ins_encode %{ - __ tzcntl($dst$$Register, $src$$Register); - %} - ins_pipe(ialu_reg); -%} - -instruct countTrailingZerosI_bsf(rRegI dst, rRegI src, eFlagsReg cr) %{ - predicate(!UseCountTrailingZerosInstruction); match(Set dst (CountTrailingZerosI src)); effect(KILL cr); @@ -5195,30 +5182,6 @@ %} instruct countTrailingZerosL(rRegI dst, eRegL src, eFlagsReg cr) %{ - predicate(UseCountTrailingZerosInstruction); - match(Set dst (CountTrailingZerosL src)); - effect(TEMP dst, KILL cr); - - format %{ "TZCNT $dst, $src.lo\t# count trailing zeros (long) \n\t" - "JNC done\n\t" - "TZCNT $dst, $src.hi\n\t" - "ADD $dst, 32\n" - "done:" %} - ins_encode %{ - Register Rdst = $dst$$Register; - Register Rsrc = $src$$Register; - Label done; - __ tzcntl(Rdst, Rsrc); - __ jccb(Assembler::carryClear, done); - __ tzcntl(Rdst, HIGH_FROM_LOW(Rsrc)); - __ addl(Rdst, BitsPerInt); - __ bind(done); - %} - ins_pipe(ialu_reg); -%} - -instruct countTrailingZerosL_bsf(rRegI dst, eRegL src, eFlagsReg cr) %{ - predicate(!UseCountTrailingZerosInstruction); match(Set dst (CountTrailingZerosL src)); effect(TEMP dst, KILL cr); @@ -8064,123 +8027,6 @@ ins_pipe( ialu_mem_imm ); %} -// BMI1 instructions -instruct andnI_rReg_rReg_rReg(rRegI dst, rRegI src1, rRegI src2, immI_M1 minus_1, eFlagsReg cr) %{ - match(Set dst (AndI (XorI src1 minus_1) src2)); - predicate(UseBMI1Instructions); - effect(KILL cr); - - format %{ "ANDNL $dst, $src1, $src2" %} - - ins_encode %{ - __ andnl($dst$$Register, $src1$$Register, $src2$$Register); - %} - ins_pipe(ialu_reg); -%} - -instruct andnI_rReg_rReg_mem(rRegI dst, rRegI src1, memory src2, immI_M1 minus_1, eFlagsReg cr) %{ - match(Set dst (AndI (XorI src1 minus_1) (LoadI src2) )); - predicate(UseBMI1Instructions); - effect(KILL cr); - - ins_cost(125); - format %{ "ANDNL $dst, $src1, $src2" %} - - ins_encode %{ - __ andnl($dst$$Register, $src1$$Register, $src2$$Address); - %} - ins_pipe(ialu_reg_mem); -%} - -instruct blsiI_rReg_rReg(rRegI dst, rRegI src, immI0 imm_zero, eFlagsReg cr) %{ - match(Set dst (AndI (SubI imm_zero src) src)); - predicate(UseBMI1Instructions); - effect(KILL cr); - - format %{ "BLSIL $dst, $src" %} - - ins_encode %{ - __ blsil($dst$$Register, $src$$Register); - %} - ins_pipe(ialu_reg); -%} - -instruct blsiI_rReg_mem(rRegI dst, memory src, immI0 imm_zero, eFlagsReg cr) %{ - match(Set dst (AndI (SubI imm_zero (LoadI src) ) (LoadI src) )); - predicate(UseBMI1Instructions); - effect(KILL cr); - - ins_cost(125); - format %{ "BLSIL $dst, $src" %} - - ins_encode %{ - __ blsil($dst$$Register, $src$$Address); - %} - ins_pipe(ialu_reg_mem); -%} - -instruct blsmskI_rReg_rReg(rRegI dst, rRegI src, immI_M1 minus_1, eFlagsReg cr) -%{ - match(Set dst (XorI (AddI src minus_1) src)); - predicate(UseBMI1Instructions); - effect(KILL cr); - - format %{ "BLSMSKL $dst, $src" %} - - ins_encode %{ - __ blsmskl($dst$$Register, $src$$Register); - %} - - ins_pipe(ialu_reg); -%} - -instruct blsmskI_rReg_mem(rRegI dst, memory src, immI_M1 minus_1, eFlagsReg cr) -%{ - match(Set dst (XorI (AddI (LoadI src) minus_1) (LoadI src) )); - predicate(UseBMI1Instructions); - effect(KILL cr); - - ins_cost(125); - format %{ "BLSMSKL $dst, $src" %} - - ins_encode %{ - __ blsmskl($dst$$Register, $src$$Address); - %} - - ins_pipe(ialu_reg_mem); -%} - -instruct blsrI_rReg_rReg(rRegI dst, rRegI src, immI_M1 minus_1, eFlagsReg cr) -%{ - match(Set dst (AndI (AddI src minus_1) src) ); - predicate(UseBMI1Instructions); - effect(KILL cr); - - format %{ "BLSRL $dst, $src" %} - - ins_encode %{ - __ blsrl($dst$$Register, $src$$Register); - %} - - ins_pipe(ialu_reg); -%} - -instruct blsrI_rReg_mem(rRegI dst, memory src, immI_M1 minus_1, eFlagsReg cr) -%{ - match(Set dst (AndI (AddI (LoadI src) minus_1) (LoadI src) )); - predicate(UseBMI1Instructions); - effect(KILL cr); - - ins_cost(125); - format %{ "BLSRL $dst, $src" %} - - ins_encode %{ - __ blsrl($dst$$Register, $src$$Address); - %} - - ins_pipe(ialu_reg_mem); -%} - // Or Instructions // Or Register with Register instruct orI_eReg(rRegI dst, rRegI src, eFlagsReg cr) %{ @@ -8803,210 +8649,6 @@ ins_pipe( ialu_reg_long_mem ); %} -// BMI1 instructions -instruct andnL_eReg_eReg_eReg(eRegL dst, eRegL src1, eRegL src2, immL_M1 minus_1, eFlagsReg cr) %{ - match(Set dst (AndL (XorL src1 minus_1) src2)); - predicate(UseBMI1Instructions); - effect(KILL cr, TEMP dst); - - format %{ "ANDNL $dst.lo, $src1.lo, $src2.lo\n\t" - "ANDNL $dst.hi, $src1.hi, $src2.hi" - %} - - ins_encode %{ - Register Rdst = $dst$$Register; - Register Rsrc1 = $src1$$Register; - Register Rsrc2 = $src2$$Register; - __ andnl(Rdst, Rsrc1, Rsrc2); - __ andnl(HIGH_FROM_LOW(Rdst), HIGH_FROM_LOW(Rsrc1), HIGH_FROM_LOW(Rsrc2)); - %} - ins_pipe(ialu_reg_reg_long); -%} - -instruct andnL_eReg_eReg_mem(eRegL dst, eRegL src1, memory src2, immL_M1 minus_1, eFlagsReg cr) %{ - match(Set dst (AndL (XorL src1 minus_1) (LoadL src2) )); - predicate(UseBMI1Instructions); - effect(KILL cr, TEMP dst); - - ins_cost(125); - format %{ "ANDNL $dst.lo, $src1.lo, $src2\n\t" - "ANDNL $dst.hi, $src1.hi, $src2+4" - %} - - ins_encode %{ - Register Rdst = $dst$$Register; - Register Rsrc1 = $src1$$Register; - Address src2_hi = Address::make_raw($src2$$base, $src2$$index, $src2$$scale, $src2$$disp + 4, relocInfo::none); - - __ andnl(Rdst, Rsrc1, $src2$$Address); - __ andnl(HIGH_FROM_LOW(Rdst), HIGH_FROM_LOW(Rsrc1), src2_hi); - %} - ins_pipe(ialu_reg_mem); -%} - -instruct blsiL_eReg_eReg(eRegL dst, eRegL src, immL0 imm_zero, eFlagsReg cr) %{ - match(Set dst (AndL (SubL imm_zero src) src)); - predicate(UseBMI1Instructions); - effect(KILL cr, TEMP dst); - - format %{ "MOVL $dst.hi, 0\n\t" - "BLSIL $dst.lo, $src.lo\n\t" - "JNZ done\n\t" - "BLSIL $dst.hi, $src.hi\n" - "done:" - %} - - ins_encode %{ - Label done; - Register Rdst = $dst$$Register; - Register Rsrc = $src$$Register; - __ movl(HIGH_FROM_LOW(Rdst), 0); - __ blsil(Rdst, Rsrc); - __ jccb(Assembler::notZero, done); - __ blsil(HIGH_FROM_LOW(Rdst), HIGH_FROM_LOW(Rsrc)); - __ bind(done); - %} - ins_pipe(ialu_reg); -%} - -instruct blsiL_eReg_mem(eRegL dst, memory src, immL0 imm_zero, eFlagsReg cr) %{ - match(Set dst (AndL (SubL imm_zero (LoadL src) ) (LoadL src) )); - predicate(UseBMI1Instructions); - effect(KILL cr, TEMP dst); - - ins_cost(125); - format %{ "MOVL $dst.hi, 0\n\t" - "BLSIL $dst.lo, $src\n\t" - "JNZ done\n\t" - "BLSIL $dst.hi, $src+4\n" - "done:" - %} - - ins_encode %{ - Label done; - Register Rdst = $dst$$Register; - Address src_hi = Address::make_raw($src$$base, $src$$index, $src$$scale, $src$$disp + 4, relocInfo::none); - - __ movl(HIGH_FROM_LOW(Rdst), 0); - __ blsil(Rdst, $src$$Address); - __ jccb(Assembler::notZero, done); - __ blsil(HIGH_FROM_LOW(Rdst), src_hi); - __ bind(done); - %} - ins_pipe(ialu_reg_mem); -%} - -instruct blsmskL_eReg_eReg(eRegL dst, eRegL src, immL_M1 minus_1, eFlagsReg cr) -%{ - match(Set dst (XorL (AddL src minus_1) src)); - predicate(UseBMI1Instructions); - effect(KILL cr, TEMP dst); - - format %{ "MOVL $dst.hi, 0\n\t" - "BLSMSKL $dst.lo, $src.lo\n\t" - "JNC done\n\t" - "BLSMSKL $dst.hi, $src.hi\n" - "done:" - %} - - ins_encode %{ - Label done; - Register Rdst = $dst$$Register; - Register Rsrc = $src$$Register; - __ movl(HIGH_FROM_LOW(Rdst), 0); - __ blsmskl(Rdst, Rsrc); - __ jccb(Assembler::carryClear, done); - __ blsmskl(HIGH_FROM_LOW(Rdst), HIGH_FROM_LOW(Rsrc)); - __ bind(done); - %} - - ins_pipe(ialu_reg); -%} - -instruct blsmskL_eReg_mem(eRegL dst, memory src, immL_M1 minus_1, eFlagsReg cr) -%{ - match(Set dst (XorL (AddL (LoadL src) minus_1) (LoadL src) )); - predicate(UseBMI1Instructions); - effect(KILL cr, TEMP dst); - - ins_cost(125); - format %{ "MOVL $dst.hi, 0\n\t" - "BLSMSKL $dst.lo, $src\n\t" - "JNC done\n\t" - "BLSMSKL $dst.hi, $src+4\n" - "done:" - %} - - ins_encode %{ - Label done; - Register Rdst = $dst$$Register; - Address src_hi = Address::make_raw($src$$base, $src$$index, $src$$scale, $src$$disp + 4, relocInfo::none); - - __ movl(HIGH_FROM_LOW(Rdst), 0); - __ blsmskl(Rdst, $src$$Address); - __ jccb(Assembler::carryClear, done); - __ blsmskl(HIGH_FROM_LOW(Rdst), src_hi); - __ bind(done); - %} - - ins_pipe(ialu_reg_mem); -%} - -instruct blsrL_eReg_eReg(eRegL dst, eRegL src, immL_M1 minus_1, eFlagsReg cr) -%{ - match(Set dst (AndL (AddL src minus_1) src) ); - predicate(UseBMI1Instructions); - effect(KILL cr, TEMP dst); - - format %{ "MOVL $dst.hi, $src.hi\n\t" - "BLSRL $dst.lo, $src.lo\n\t" - "JNC done\n\t" - "BLSRL $dst.hi, $src.hi\n" - "done:" - %} - - ins_encode %{ - Label done; - Register Rdst = $dst$$Register; - Register Rsrc = $src$$Register; - __ movl(HIGH_FROM_LOW(Rdst), HIGH_FROM_LOW(Rsrc)); - __ blsrl(Rdst, Rsrc); - __ jccb(Assembler::carryClear, done); - __ blsrl(HIGH_FROM_LOW(Rdst), HIGH_FROM_LOW(Rsrc)); - __ bind(done); - %} - - ins_pipe(ialu_reg); -%} - -instruct blsrL_eReg_mem(eRegL dst, memory src, immL_M1 minus_1, eFlagsReg cr) -%{ - match(Set dst (AndL (AddL (LoadL src) minus_1) (LoadL src) )); - predicate(UseBMI1Instructions); - effect(KILL cr, TEMP dst); - - ins_cost(125); - format %{ "MOVL $dst.hi, $src+4\n\t" - "BLSRL $dst.lo, $src\n\t" - "JNC done\n\t" - "BLSRL $dst.hi, $src+4\n" - "done:" - %} - - ins_encode %{ - Label done; - Register Rdst = $dst$$Register; - Address src_hi = Address::make_raw($src$$base, $src$$index, $src$$scale, $src$$disp + 4, relocInfo::none); - __ movl(HIGH_FROM_LOW(Rdst), src_hi); - __ blsrl(Rdst, $src$$Address); - __ jccb(Assembler::carryClear, done); - __ blsrl(HIGH_FROM_LOW(Rdst), src_hi); - __ bind(done); - %} - - ins_pipe(ialu_reg_mem); -%} - // Or Long Register with Register instruct orl_eReg(eRegL dst, eRegL src, eFlagsReg cr) %{ match(Set dst (OrL dst src));