12625 ins_encode %{
12626 __ jump(RuntimeAddress(OptoRuntime::rethrow_stub()), noreg);
12627 %}
12628 ins_pipe(pipe_jmp);
12629 %}
12630
12631 // ============================================================================
12632 // This name is KNOWN by the ADLC and cannot be changed.
12633 // The ADLC forces a 'TypeRawPtr::BOTTOM' output type
12634 // for this guy.
12635 instruct tlsLoadP(r15_RegP dst) %{
12636 match(Set dst (ThreadLocal));
12637 effect(DEF dst);
12638
12639 size(0);
12640 format %{ "# TLS is in R15" %}
12641 ins_encode( /*empty encoding*/ );
12642 ins_pipe(ialu_reg_reg);
12643 %}
12644
12645
12646 //----------PEEPHOLE RULES-----------------------------------------------------
12647 // These must follow all instruction definitions as they use the names
12648 // defined in the instructions definitions.
12649 //
12650 // peeppredicate ( rule_predicate );
12651 // // the predicate unless which the peephole rule will be ignored
12652 //
12653 // peepmatch ( root_instr_name [preceding_instruction]* );
12654 //
12655 // peepprocedure ( procedure_name );
12656 // // provide a procedure name to perform the optimization, the procedure should
12657 // // reside in the architecture dependent peephole file, the method has the
12658 // // signature of MachNode* (Block*, int, PhaseRegAlloc*, (MachNode*)(*)(), int...)
12659 // // with the arguments being the basic block, the current node index inside the
12660 // // block, the register allocator, the functions upon invoked return a new node
12661 // // defined in peepreplace, and the rules of the nodes appearing in the
12662 // // corresponding peepmatch, the function return true if successful, else
12663 // // return false
12664 //
|
12625 ins_encode %{
12626 __ jump(RuntimeAddress(OptoRuntime::rethrow_stub()), noreg);
12627 %}
12628 ins_pipe(pipe_jmp);
12629 %}
12630
12631 // ============================================================================
12632 // This name is KNOWN by the ADLC and cannot be changed.
12633 // The ADLC forces a 'TypeRawPtr::BOTTOM' output type
12634 // for this guy.
12635 instruct tlsLoadP(r15_RegP dst) %{
12636 match(Set dst (ThreadLocal));
12637 effect(DEF dst);
12638
12639 size(0);
12640 format %{ "# TLS is in R15" %}
12641 ins_encode( /*empty encoding*/ );
12642 ins_pipe(ialu_reg_reg);
12643 %}
12644
12645 instruct rdtsc(rax_RegL dst, rdx_RegL tmp) %{
12646 match(Set dst (Timestamp));
12647 effect(DEF dst, KILL tmp);
12648
12649 format %{ "RDTSC" %}
12650 ins_encode %{
12651 __ rdtsc();
12652 __ shlptr(rdx, 32);
12653 __ orptr(rax, rdx);
12654 %}
12655 ins_pipe(ialu_reg_reg);
12656 %}
12657
12658 instruct rdtscp(rax_RegL dst, rdx_RegL tmp, rcx_RegL dead) %{
12659 match(Set dst (TimestampSerial));
12660 effect(DEF dst, KILL tmp, KILL dead);
12661
12662 format %{ "RDTSCP" %}
12663 ins_encode %{
12664 __ rdtscp();
12665 __ shlptr(rdx, 32);
12666 __ orptr(rax, rdx);
12667 %}
12668 ins_pipe(ialu_reg_reg);
12669 %}
12670
12671
12672 //----------PEEPHOLE RULES-----------------------------------------------------
12673 // These must follow all instruction definitions as they use the names
12674 // defined in the instructions definitions.
12675 //
12676 // peeppredicate ( rule_predicate );
12677 // // the predicate unless which the peephole rule will be ignored
12678 //
12679 // peepmatch ( root_instr_name [preceding_instruction]* );
12680 //
12681 // peepprocedure ( procedure_name );
12682 // // provide a procedure name to perform the optimization, the procedure should
12683 // // reside in the architecture dependent peephole file, the method has the
12684 // // signature of MachNode* (Block*, int, PhaseRegAlloc*, (MachNode*)(*)(), int...)
12685 // // with the arguments being the basic block, the current node index inside the
12686 // // block, the register allocator, the functions upon invoked return a new node
12687 // // defined in peepreplace, and the rules of the nodes appearing in the
12688 // // corresponding peepmatch, the function return true if successful, else
12689 // // return false
12690 //
|