13634 // use the following format syntax
13635 format %{ "jmp rethrow_stub" %}
13636 ins_encode(enc_rethrow);
13637 ins_pipe(pipe_jmp);
13638 %}
13639
13640 // ============================================================================
13641 // This name is KNOWN by the ADLC and cannot be changed.
13642 // The ADLC forces a 'TypeRawPtr::BOTTOM' output type
13643 // for this guy.
13644 instruct tlsLoadP(r15_RegP dst) %{
13645 match(Set dst (ThreadLocal));
13646 effect(DEF dst);
13647
13648 size(0);
13649 format %{ "# TLS is in R15" %}
13650 ins_encode( /*empty encoding*/ );
13651 ins_pipe(ialu_reg_reg);
13652 %}
13653
13654
13655 //----------PEEPHOLE RULES-----------------------------------------------------
13656 // These must follow all instruction definitions as they use the names
13657 // defined in the instructions definitions.
13658 //
13659 // peeppredicate ( rule_predicate );
13660 // // the predicate unless which the peephole rule will be ignored
13661 //
13662 // peepmatch ( root_instr_name [preceding_instruction]* );
13663 //
13664 // peepprocedure ( procedure_name );
13665 // // provide a procedure name to perform the optimization, the procedure should
13666 // // reside in the architecture dependent peephole file, the method has the
13667 // // signature of MachNode* (Block*, int, PhaseRegAlloc*, (MachNode*)(*)(), int...)
13668 // // with the arguments being the basic block, the current node index inside the
13669 // // block, the register allocator, the functions upon invoked return a new node
13670 // // defined in peepreplace, and the rules of the nodes appearing in the
13671 // // corresponding peepmatch, the function return true if successful, else
13672 // // return false
13673 //
|
13634 // use the following format syntax
13635 format %{ "jmp rethrow_stub" %}
13636 ins_encode(enc_rethrow);
13637 ins_pipe(pipe_jmp);
13638 %}
13639
13640 // ============================================================================
13641 // This name is KNOWN by the ADLC and cannot be changed.
13642 // The ADLC forces a 'TypeRawPtr::BOTTOM' output type
13643 // for this guy.
13644 instruct tlsLoadP(r15_RegP dst) %{
13645 match(Set dst (ThreadLocal));
13646 effect(DEF dst);
13647
13648 size(0);
13649 format %{ "# TLS is in R15" %}
13650 ins_encode( /*empty encoding*/ );
13651 ins_pipe(ialu_reg_reg);
13652 %}
13653
13654 instruct rdtsc(rax_RegL dst, rdx_RegL tmp) %{
13655 match(Set dst (Timestamp));
13656 effect(DEF dst, KILL tmp);
13657
13658 format %{ "RDTSC" %}
13659 ins_encode %{
13660 __ rdtsc();
13661 __ shlptr(rdx, 32);
13662 __ orptr(rax, rdx);
13663 %}
13664 ins_pipe(ialu_reg_reg);
13665 %}
13666
13667 instruct rdtscp(rax_RegL dst, rdx_RegL tmp, rcx_RegL dead) %{
13668 match(Set dst (TimestampSerial));
13669 effect(DEF dst, KILL tmp, KILL dead);
13670
13671 format %{ "RDTSCP" %}
13672 ins_encode %{
13673 __ rdtscp();
13674 __ shlptr(rdx, 32);
13675 __ orptr(rax, rdx);
13676 %}
13677 ins_pipe(ialu_reg_reg);
13678 %}
13679
13680
13681 //----------PEEPHOLE RULES-----------------------------------------------------
13682 // These must follow all instruction definitions as they use the names
13683 // defined in the instructions definitions.
13684 //
13685 // peeppredicate ( rule_predicate );
13686 // // the predicate unless which the peephole rule will be ignored
13687 //
13688 // peepmatch ( root_instr_name [preceding_instruction]* );
13689 //
13690 // peepprocedure ( procedure_name );
13691 // // provide a procedure name to perform the optimization, the procedure should
13692 // // reside in the architecture dependent peephole file, the method has the
13693 // // signature of MachNode* (Block*, int, PhaseRegAlloc*, (MachNode*)(*)(), int...)
13694 // // with the arguments being the basic block, the current node index inside the
13695 // // block, the register allocator, the functions upon invoked return a new node
13696 // // defined in peepreplace, and the rules of the nodes appearing in the
13697 // // corresponding peepmatch, the function return true if successful, else
13698 // // return false
13699 //
|