src/cpu/sparc/vm/sparc.ad
Index
Unified diffs
Context diffs
Sdiffs
Wdiffs
Patch
New
Old
Previous File
Next File
7063628 Cdiff src/cpu/sparc/vm/sparc.ad
src/cpu/sparc/vm/sparc.ad
Print this page
*** 1691,1701 ****
}
#endif
void MachUEPNode::emit(CodeBuffer &cbuf, PhaseRegAlloc *ra_) const {
MacroAssembler _masm(&cbuf);
- Label L;
Register G5_ic_reg = reg_to_register_object(Matcher::inline_cache_reg_encode());
Register temp_reg = G3;
assert( G5_ic_reg != temp_reg, "conflicting registers" );
// Load klass from receiver
--- 1691,1700 ----
*** 2313,2379 ****
MacroAssembler _masm(&cbuf);
__ call(StubRoutines::Sparc::partial_subtype_check(), relocInfo::runtime_call_type);
__ delayed()->nop();
%}
! enc_class enc_bp( Label labl, cmpOp cmp, flagsReg cc ) %{
MacroAssembler _masm(&cbuf);
! Label &L = *($labl$$label);
Assembler::Predict predict_taken =
! cbuf.is_backward_branch(L) ? Assembler::pt : Assembler::pn;
! __ bp( (Assembler::Condition)($cmp$$cmpcode), false, Assembler::icc, predict_taken, L);
__ delayed()->nop();
%}
! enc_class enc_bpl( Label labl, cmpOp cmp, flagsRegL cc ) %{
MacroAssembler _masm(&cbuf);
! Label &L = *($labl$$label);
Assembler::Predict predict_taken =
! cbuf.is_backward_branch(L) ? Assembler::pt : Assembler::pn;
! __ bp( (Assembler::Condition)($cmp$$cmpcode), false, Assembler::xcc, predict_taken, L);
__ delayed()->nop();
%}
- enc_class enc_bpx( Label labl, cmpOp cmp, flagsRegP cc ) %{
- MacroAssembler _masm(&cbuf);
- Label &L = *($labl$$label);
- Assembler::Predict predict_taken =
- cbuf.is_backward_branch(L) ? Assembler::pt : Assembler::pn;
-
- __ bp( (Assembler::Condition)($cmp$$cmpcode), false, Assembler::ptr_cc, predict_taken, L);
- __ delayed()->nop();
- %}
-
- enc_class enc_fbp( Label labl, cmpOpF cmp, flagsRegF cc ) %{
- MacroAssembler _masm(&cbuf);
- Label &L = *($labl$$label);
- Assembler::Predict predict_taken =
- cbuf.is_backward_branch(L) ? Assembler::pt : Assembler::pn;
-
- __ fbp( (Assembler::Condition)($cmp$$cmpcode), false, (Assembler::CC)($cc$$reg), predict_taken, L);
- __ delayed()->nop();
- %}
-
- enc_class enc_ba( Label labl ) %{
- MacroAssembler _masm(&cbuf);
- Label &L = *($labl$$label);
- __ ba(false, L);
- __ delayed()->nop();
- %}
-
- enc_class enc_bpr( Label labl, cmpOp_reg cmp, iRegI op1 ) %{
- MacroAssembler _masm(&cbuf);
- Label &L = *$labl$$label;
- Assembler::Predict predict_taken =
- cbuf.is_backward_branch(L) ? Assembler::pt : Assembler::pn;
-
- __ bpr( (Assembler::RCondition)($cmp$$cmpcode), false, predict_taken, as_Register($op1$$reg), L);
- __ delayed()->nop();
- %}
-
enc_class enc_cmov_reg( cmpOp cmp, iRegI dst, iRegI src, immI pcc) %{
int op = (Assembler::arith_op << 30) |
($dst$$reg << 25) |
(Assembler::movcc_op3 << 19) |
(1 << 18) | // cc2 bit for 'icc'
--- 2312,2341 ----
MacroAssembler _masm(&cbuf);
__ call(StubRoutines::Sparc::partial_subtype_check(), relocInfo::runtime_call_type);
__ delayed()->nop();
%}
! enc_class enc_bp( label labl, cmpOp cmp, flagsReg cc ) %{
MacroAssembler _masm(&cbuf);
! Label* L = $labl$$label;
Assembler::Predict predict_taken =
! cbuf.is_backward_branch(*L) ? Assembler::pt : Assembler::pn;
! __ bp( (Assembler::Condition)($cmp$$cmpcode), false, Assembler::icc, predict_taken, *L);
__ delayed()->nop();
%}
! enc_class enc_bpr( label labl, cmpOp_reg cmp, iRegI op1 ) %{
MacroAssembler _masm(&cbuf);
! Label* L = $labl$$label;
Assembler::Predict predict_taken =
! cbuf.is_backward_branch(*L) ? Assembler::pt : Assembler::pn;
! __ bpr( (Assembler::RCondition)($cmp$$cmpcode), false, predict_taken, as_Register($op1$$reg), *L);
__ delayed()->nop();
%}
enc_class enc_cmov_reg( cmpOp cmp, iRegI dst, iRegI src, immI pcc) %{
int op = (Assembler::arith_op << 30) |
($dst$$reg << 25) |
(Assembler::movcc_op3 << 19) |
(1 << 18) | // cc2 bit for 'icc'
*** 2984,2994 ****
__ cmp(str1_reg, str2_reg); //same char[] ?
__ brx(Assembler::equal, true, Assembler::pn, Ldone);
__ delayed()->add(G0, 1, result_reg);
! __ br_on_reg_cond(Assembler::rc_z, true, Assembler::pn, cnt_reg, Ldone);
__ delayed()->add(G0, 1, result_reg); // count == 0
//rename registers
Register limit_reg = cnt_reg;
Register chr1_reg = result_reg;
--- 2946,2956 ----
__ cmp(str1_reg, str2_reg); //same char[] ?
__ brx(Assembler::equal, true, Assembler::pn, Ldone);
__ delayed()->add(G0, 1, result_reg);
! __ bpr(Assembler::rc_z, true, Assembler::pn, cnt_reg, Ldone);
__ delayed()->add(G0, 1, result_reg); // count == 0
//rename registers
Register limit_reg = cnt_reg;
Register chr1_reg = result_reg;
*** 3004,3014 ****
__ delayed()->sll(limit_reg, exact_log2(sizeof(jchar)), limit_reg); // set byte count
// Compare char[] arrays aligned to 4 bytes.
__ char_arrays_equals(str1_reg, str2_reg, limit_reg, result_reg,
chr1_reg, chr2_reg, Ldone);
! __ ba(false,Ldone);
__ delayed()->add(G0, 1, result_reg);
// char by char compare
__ bind(Lchar);
__ add(str1_reg, limit_reg, str1_reg);
--- 2966,2976 ----
__ delayed()->sll(limit_reg, exact_log2(sizeof(jchar)), limit_reg); // set byte count
// Compare char[] arrays aligned to 4 bytes.
__ char_arrays_equals(str1_reg, str2_reg, limit_reg, result_reg,
chr1_reg, chr2_reg, Ldone);
! __ ba(Ldone);
__ delayed()->add(G0, 1, result_reg);
// char by char compare
__ bind(Lchar);
__ add(str1_reg, limit_reg, str1_reg);
*** 3063,3073 ****
// return false if the two arrays are not equal length
__ cmp(tmp1_reg, tmp2_reg);
__ br(Assembler::notEqual, true, Assembler::pn, Ldone);
__ delayed()->mov(G0, result_reg); // not equal
! __ br_on_reg_cond(Assembler::rc_z, true, Assembler::pn, tmp1_reg, Ldone);
__ delayed()->add(G0, 1, result_reg); // zero-length arrays are equal
// load array addresses
__ add(ary1_reg, base_offset, ary1_reg);
__ add(ary2_reg, base_offset, ary2_reg);
--- 3025,3035 ----
// return false if the two arrays are not equal length
__ cmp(tmp1_reg, tmp2_reg);
__ br(Assembler::notEqual, true, Assembler::pn, Ldone);
__ delayed()->mov(G0, result_reg); // not equal
! __ bpr(Assembler::rc_z, true, Assembler::pn, tmp1_reg, Ldone);
__ delayed()->add(G0, 1, result_reg); // zero-length arrays are equal
// load array addresses
__ add(ary1_reg, base_offset, ary1_reg);
__ add(ary2_reg, base_offset, ary2_reg);
*** 9230,9242 ****
effect(USE labl);
size(8);
ins_cost(BRANCH_COST);
format %{ "BA $labl" %}
! // Prim = bits 24-22, Secnd = bits 31-30, Tert = cond
! opcode(Assembler::br_op2, Assembler::branch_op, Assembler::always);
! ins_encode( enc_ba( labl ) );
ins_pc_relative(1);
ins_pipe(br);
%}
// Conditional Direct Branch
--- 9192,9206 ----
effect(USE labl);
size(8);
ins_cost(BRANCH_COST);
format %{ "BA $labl" %}
! ins_encode %{
! Label* L = $labl$$label;
! __ ba(*L);
! __ delayed()->nop();
! %}
ins_pc_relative(1);
ins_pipe(br);
%}
// Conditional Direct Branch
*** 9312,9323 ****
effect(USE labl);
size(8);
ins_cost(BRANCH_COST);
format %{ "BP$cmp $pcc,$labl" %}
! // Prim = bits 24-22, Secnd = bits 31-30
! ins_encode( enc_bpx( labl, cmp, pcc ) );
ins_pc_relative(1);
ins_pipe(br_cc);
%}
instruct branchConF(cmpOpF cmp, flagsRegF fcc, label labl) %{
--- 9276,9293 ----
effect(USE labl);
size(8);
ins_cost(BRANCH_COST);
format %{ "BP$cmp $pcc,$labl" %}
! ins_encode %{
! Label* L = $labl$$label;
! Assembler::Predict predict_taken =
! cbuf.is_backward_branch(*L) ? Assembler::pt : Assembler::pn;
!
! __ bp( (Assembler::Condition)($cmp$$cmpcode), false, Assembler::ptr_cc, predict_taken, *L);
! __ delayed()->nop();
! %}
ins_pc_relative(1);
ins_pipe(br_cc);
%}
instruct branchConF(cmpOpF cmp, flagsRegF fcc, label labl) %{
*** 9325,9336 ****
effect(USE labl);
size(8);
ins_cost(BRANCH_COST);
format %{ "FBP$cmp $fcc,$labl" %}
! // Prim = bits 24-22, Secnd = bits 31-30
! ins_encode( enc_fbp( labl, cmp, fcc ) );
ins_pc_relative(1);
ins_pipe(br_fcc);
%}
instruct branchLoopEnd(cmpOp cmp, flagsReg icc, label labl) %{
--- 9295,9312 ----
effect(USE labl);
size(8);
ins_cost(BRANCH_COST);
format %{ "FBP$cmp $fcc,$labl" %}
! ins_encode %{
! Label* L = $labl$$label;
! Assembler::Predict predict_taken =
! cbuf.is_backward_branch(*L) ? Assembler::pt : Assembler::pn;
!
! __ fbp( (Assembler::Condition)($cmp$$cmpcode), false, (Assembler::CC)($fcc$$reg), predict_taken, *L);
! __ delayed()->nop();
! %}
ins_pc_relative(1);
ins_pipe(br_fcc);
%}
instruct branchLoopEnd(cmpOp cmp, flagsReg icc, label labl) %{
*** 9385,9396 ****
effect(USE labl);
size(8);
ins_cost(BRANCH_COST);
format %{ "BP$cmp $xcc,$labl" %}
! // Prim = bits 24-22, Secnd = bits 31-30
! ins_encode( enc_bpl( labl, cmp, xcc ) );
ins_pc_relative(1);
ins_pipe(br_cc);
%}
// Manifest a CmpL3 result in an integer register. Very painful.
--- 9361,9378 ----
effect(USE labl);
size(8);
ins_cost(BRANCH_COST);
format %{ "BP$cmp $xcc,$labl" %}
! ins_encode %{
! Label* L = $labl$$label;
! Assembler::Predict predict_taken =
! cbuf.is_backward_branch(*L) ? Assembler::pt : Assembler::pn;
!
! __ bp( (Assembler::Condition)($cmp$$cmpcode), false, Assembler::xcc, predict_taken, *L);
! __ delayed()->nop();
! %}
ins_pc_relative(1);
ins_pipe(br_cc);
%}
// Manifest a CmpL3 result in an integer register. Very painful.
*** 9705,9715 ****
match(Set pcc (FastLock object box));
effect(KILL scratch, TEMP scratch2);
ins_cost(100);
- size(4*112); // conservative overestimation ...
format %{ "FASTLOCK $object, $box; KILL $scratch, $scratch2, $box" %}
ins_encode( Fast_Lock(object, box, scratch, scratch2) );
ins_pipe(long_memory_op);
%}
--- 9687,9696 ----
*** 9717,9727 ****
instruct cmpFastUnlock(flagsRegP pcc, iRegP object, iRegP box, iRegP scratch2, o7RegP scratch ) %{
match(Set pcc (FastUnlock object box));
effect(KILL scratch, TEMP scratch2);
ins_cost(100);
- size(4*120); // conservative overestimation ...
format %{ "FASTUNLOCK $object, $box; KILL $scratch, $scratch2, $box" %}
ins_encode( Fast_Unlock(object, box, scratch, scratch2) );
ins_pipe(long_memory_op);
%}
--- 9698,9707 ----
src/cpu/sparc/vm/sparc.ad
Index
Unified diffs
Context diffs
Sdiffs
Wdiffs
Patch
New
Old
Previous File
Next File