src/cpu/x86/vm/x86_64.ad
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File
*** old/src/cpu/x86/vm/x86_64.ad	Tue Jul 26 19:26:42 2011
--- new/src/cpu/x86/vm/x86_64.ad	Tue Jul 26 19:26:41 2011

*** 4011,4021 **** --- 4011,4020 ---- op_attrib op_cost(0); // Required cost attribute //----------Instruction Attributes--------------------------------------------- ins_attrib ins_cost(100); // Required cost attribute ins_attrib ins_size(8); // Required size attribute (in bits) ins_attrib ins_pc_relative(0); // Required PC Relative flag ins_attrib ins_short_branch(0); // Required flag: is this instruction // a non-matching short branch variant // of some long branch? ins_attrib ins_alignment(1); // Required alignment attribute (must // be a power of 2) specifies the
*** 7545,7555 **** --- 7544,7553 ---- Address dispatch($dest$$Register, $switch_val$$Register, (Address::ScaleFactor) $shift$$constant); __ lea($dest$$Register, $constantaddress); __ jmp(dispatch); %} ins_pipe(pipe_jmp); ins_pc_relative(1); %} instruct jumpXtnd_addr(rRegL switch_val, immI2 shift, immL32 offset, rRegI dest) %{ match(Jump (AddL (LShiftL switch_val shift) offset)); ins_cost(350);
*** 7566,7576 **** --- 7564,7573 ---- Address dispatch($dest$$Register, $switch_val$$Register, (Address::ScaleFactor) $shift$$constant, (int) $offset$$constant); __ lea($dest$$Register, $constantaddress); __ jmp(dispatch); %} ins_pipe(pipe_jmp); ins_pc_relative(1); %} instruct jumpXtnd(rRegL switch_val, rRegI dest) %{ match(Jump switch_val); ins_cost(350);
*** 7587,7597 **** --- 7584,7593 ---- Address dispatch($dest$$Register, $switch_val$$Register, Address::times_1); __ lea($dest$$Register, $constantaddress); __ jmp(dispatch); %} ins_pipe(pipe_jmp); ins_pc_relative(1); %} // Conditional move instruct cmovI_reg(rRegI dst, rRegI src, rFlagsReg cr, cmpOp cop) %{
*** 12018,12028 **** --- 12014,12023 ---- format %{ "jmp $labl" %} size(5); opcode(0xE9); ins_encode(OpcP, Lbl(labl)); ins_pipe(pipe_jmp); ins_pc_relative(1); %} // Jump Direct Conditional - Label defines a relative address from Jcc+1 instruct jmpCon(cmpOp cop, rFlagsReg cr, label labl) %{
*** 12033,12043 **** --- 12028,12037 ---- format %{ "j$cop $labl" %} size(6); opcode(0x0F, 0x80); ins_encode(Jcc(cop, labl)); ins_pipe(pipe_jcc); ins_pc_relative(1); %} // Jump Direct Conditional - Label defines a relative address from Jcc+1 instruct jmpLoopEnd(cmpOp cop, rFlagsReg cr, label labl) %{
*** 12048,12058 **** --- 12042,12051 ---- format %{ "j$cop $labl\t# loop end" %} size(6); opcode(0x0F, 0x80); ins_encode(Jcc(cop, labl)); ins_pipe(pipe_jcc); ins_pc_relative(1); %} // Jump Direct Conditional - Label defines a relative address from Jcc+1 instruct jmpLoopEndU(cmpOpU cop, rFlagsRegU cmp, label labl) %{ match(CountedLoopEnd cop cmp);
*** 12062,12072 **** --- 12055,12064 ---- format %{ "j$cop,u $labl\t# loop end" %} size(6); opcode(0x0F, 0x80); ins_encode(Jcc(cop, labl)); ins_pipe(pipe_jcc); ins_pc_relative(1); %} instruct jmpLoopEndUCF(cmpOpUCF cop, rFlagsRegUCF cmp, label labl) %{ match(CountedLoopEnd cop cmp); effect(USE labl);
*** 12075,12085 **** --- 12067,12076 ---- format %{ "j$cop,u $labl\t# loop end" %} size(6); opcode(0x0F, 0x80); ins_encode(Jcc(cop, labl)); ins_pipe(pipe_jcc); ins_pc_relative(1); %} // Jump Direct Conditional - using unsigned comparison instruct jmpConU(cmpOpU cop, rFlagsRegU cmp, label labl) %{ match(If cop cmp);
*** 12089,12099 **** --- 12080,12089 ---- format %{ "j$cop,u $labl" %} size(6); opcode(0x0F, 0x80); ins_encode(Jcc(cop, labl)); ins_pipe(pipe_jcc); ins_pc_relative(1); %} instruct jmpConUCF(cmpOpUCF cop, rFlagsRegUCF cmp, label labl) %{ match(If cop cmp); effect(USE labl);
*** 12102,12112 **** --- 12092,12101 ---- format %{ "j$cop,u $labl" %} size(6); opcode(0x0F, 0x80); ins_encode(Jcc(cop, labl)); ins_pipe(pipe_jcc); ins_pc_relative(1); %} instruct jmpConUCF2(cmpOpUCF2 cop, rFlagsRegUCF cmp, label labl) %{ match(If cop cmp); effect(USE labl);
*** 12142,12152 **** --- 12131,12140 ---- emit_cc(cbuf, $secondary, $cop$$cmpcode); int disp = l->loc_pos() - (cbuf.insts_size() + 4); emit_d32(cbuf, disp); %} ins_pipe(pipe_jcc); ins_pc_relative(1); %} // ============================================================================ // The 2nd slow-half of a subtype check. Scan the subklass's 2ndary // superklass array for an instance of the superklass. Set a hidden
*** 12219,12229 **** --- 12207,12216 ---- format %{ "jmp,s $labl" %} size(2); opcode(0xEB); ins_encode(OpcP, LblShort(labl)); ins_pipe(pipe_jmp); ins_pc_relative(1); ins_short_branch(1); %} // Jump Direct Conditional - Label defines a relative address from Jcc+1 instruct jmpCon_short(cmpOp cop, rFlagsReg cr, label labl) %{
*** 12234,12244 **** --- 12221,12230 ---- format %{ "j$cop,s $labl" %} size(2); opcode(0x70); ins_encode(JccShort(cop, labl)); ins_pipe(pipe_jcc); ins_pc_relative(1); ins_short_branch(1); %} // Jump Direct Conditional - Label defines a relative address from Jcc+1 instruct jmpLoopEnd_short(cmpOp cop, rFlagsReg cr, label labl) %{
*** 12249,12259 **** --- 12235,12244 ---- format %{ "j$cop,s $labl\t# loop end" %} size(2); opcode(0x70); ins_encode(JccShort(cop, labl)); ins_pipe(pipe_jcc); ins_pc_relative(1); ins_short_branch(1); %} // Jump Direct Conditional - Label defines a relative address from Jcc+1 instruct jmpLoopEndU_short(cmpOpU cop, rFlagsRegU cmp, label labl) %{
*** 12264,12274 **** --- 12249,12258 ---- format %{ "j$cop,us $labl\t# loop end" %} size(2); opcode(0x70); ins_encode(JccShort(cop, labl)); ins_pipe(pipe_jcc); ins_pc_relative(1); ins_short_branch(1); %} instruct jmpLoopEndUCF_short(cmpOpUCF cop, rFlagsRegUCF cmp, label labl) %{ match(CountedLoopEnd cop cmp);
*** 12278,12288 **** --- 12262,12271 ---- format %{ "j$cop,us $labl\t# loop end" %} size(2); opcode(0x70); ins_encode(JccShort(cop, labl)); ins_pipe(pipe_jcc); ins_pc_relative(1); ins_short_branch(1); %} // Jump Direct Conditional - using unsigned comparison instruct jmpConU_short(cmpOpU cop, rFlagsRegU cmp, label labl) %{
*** 12293,12303 **** --- 12276,12285 ---- format %{ "j$cop,us $labl" %} size(2); opcode(0x70); ins_encode(JccShort(cop, labl)); ins_pipe(pipe_jcc); ins_pc_relative(1); ins_short_branch(1); %} instruct jmpConUCF_short(cmpOpUCF cop, rFlagsRegUCF cmp, label labl) %{ match(If cop cmp);
*** 12307,12317 **** --- 12289,12298 ---- format %{ "j$cop,us $labl" %} size(2); opcode(0x70); ins_encode(JccShort(cop, labl)); ins_pipe(pipe_jcc); ins_pc_relative(1); ins_short_branch(1); %} instruct jmpConUCF2_short(cmpOpUCF2 cop, rFlagsRegUCF cmp, label labl) %{ match(If cop cmp);
*** 12347,12357 **** --- 12328,12337 ---- emit_d8(cbuf, disp); assert(-128 <= disp && disp <= 127, "Displacement too large for short jmp"); assert(-128 <= parity_disp && parity_disp <= 127, "Displacement too large for short jmp"); %} ins_pipe(pipe_jcc); ins_pc_relative(1); ins_short_branch(1); %} // ============================================================================ // inlined locking and unlocking
*** 12364,12374 **** --- 12344,12353 ---- ins_cost(300); format %{ "fastlock $object,$box,$tmp,$scr" %} ins_encode(Fast_Lock(object, box, tmp, scr)); ins_pipe(pipe_slow); ins_pc_relative(1); %} instruct cmpFastUnlock(rFlagsReg cr, rRegP object, rax_RegP box, rRegP tmp) %{
*** 12377,12387 **** --- 12356,12365 ---- ins_cost(300); format %{ "fastunlock $object, $box, $tmp" %} ins_encode(Fast_Unlock(object, box, tmp)); ins_pipe(pipe_slow); ins_pc_relative(1); %} // ============================================================================ // Safepoint Instructions
*** 12430,12440 **** --- 12408,12417 ---- ins_cost(300); format %{ "call,static " %} opcode(0xE8); /* E8 cd */ ins_encode(Java_Static_Call(meth), call_epilog); ins_pipe(pipe_slow); ins_pc_relative(1); ins_alignment(4); %} // Call Java Static Instruction (method handle version) // Note: If this code changes, the corresponding ret_addr_offset() and
*** 12452,12462 **** --- 12429,12438 ---- ins_encode(preserve_SP, Java_Static_Call(meth), restore_SP, call_epilog); ins_pipe(pipe_slow); ins_pc_relative(1); ins_alignment(4); %} // Call Java Dynamic Instruction // Note: If this code changes, the corresponding ret_addr_offset() and
*** 12470,12480 **** --- 12446,12455 ---- format %{ "movq rax, #Universe::non_oop_word()\n\t" "call,dynamic " %} opcode(0xE8); /* E8 cd */ ins_encode(Java_Dynamic_Call(meth), call_epilog); ins_pipe(pipe_slow); ins_pc_relative(1); ins_alignment(4); %} // Call Runtime Instruction instruct CallRuntimeDirect(method meth)
*** 12485,12495 **** --- 12460,12469 ---- ins_cost(300); format %{ "call,runtime " %} opcode(0xE8); /* E8 cd */ ins_encode(Java_To_Runtime(meth)); ins_pipe(pipe_slow); ins_pc_relative(1); %} // Call runtime without safepoint instruct CallLeafDirect(method meth) %{
*** 12499,12509 **** --- 12473,12482 ---- ins_cost(300); format %{ "call_leaf,runtime " %} opcode(0xE8); /* E8 cd */ ins_encode(Java_To_Runtime(meth)); ins_pipe(pipe_slow); ins_pc_relative(1); %} // Call runtime without safepoint instruct CallLeafNoFPDirect(method meth) %{
*** 12513,12523 **** --- 12486,12495 ---- ins_cost(300); format %{ "call_leaf_nofp,runtime " %} opcode(0xE8); /* E8 cd */ ins_encode(Java_To_Runtime(meth)); ins_pipe(pipe_slow); ins_pc_relative(1); %} // Return Instruction // Remove the return address & jump to it. // Notice: We always emit a nop after a ret to make sure there is room

src/cpu/x86/vm/x86_64.ad
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File