13589 // use the following format syntax
13590 format %{ "jmp rethrow_stub" %}
13591 ins_encode(enc_rethrow);
13592 ins_pipe(pipe_jmp);
13593 %}
13594
13595 // ============================================================================
13596 // This name is KNOWN by the ADLC and cannot be changed.
13597 // The ADLC forces a 'TypeRawPtr::BOTTOM' output type
13598 // for this guy.
13599 instruct tlsLoadP(r15_RegP dst) %{
13600 match(Set dst (ThreadLocal));
13601 effect(DEF dst);
13602
13603 size(0);
13604 format %{ "# TLS is in R15" %}
13605 ins_encode( /*empty encoding*/ );
13606 ins_pipe(ialu_reg_reg);
13607 %}
13608
13609
13610 //----------PEEPHOLE RULES-----------------------------------------------------
13611 // These must follow all instruction definitions as they use the names
13612 // defined in the instructions definitions.
13613 //
13614 // peeppredicate ( rule_predicate );
13615 // // the predicate unless which the peephole rule will be ignored
13616 //
13617 // peepmatch ( root_instr_name [preceding_instruction]* );
13618 //
13619 // peepprocedure ( procedure_name );
13620 // // provide a procedure name to perform the optimization, the procedure should
13621 // // reside in the architecture dependent peephole file, the method has the
13622 // // signature of MachNode* (Block*, int, PhaseRegAlloc*, (MachNode*)(*)(), int...)
13623 // // with the arguments being the basic block, the current node index inside the
13624 // // block, the register allocator, the functions upon invoked return a new node
13625 // // defined in peepreplace, and the rules of the nodes appearing in the
13626 // // corresponding peepmatch, the function return true if successful, else
13627 // // return false
13628 //
|
13589 // use the following format syntax
13590 format %{ "jmp rethrow_stub" %}
13591 ins_encode(enc_rethrow);
13592 ins_pipe(pipe_jmp);
13593 %}
13594
13595 // ============================================================================
13596 // This name is KNOWN by the ADLC and cannot be changed.
13597 // The ADLC forces a 'TypeRawPtr::BOTTOM' output type
13598 // for this guy.
13599 instruct tlsLoadP(r15_RegP dst) %{
13600 match(Set dst (ThreadLocal));
13601 effect(DEF dst);
13602
13603 size(0);
13604 format %{ "# TLS is in R15" %}
13605 ins_encode( /*empty encoding*/ );
13606 ins_pipe(ialu_reg_reg);
13607 %}
13608
13609 instruct rdtsc(rax_RegL dst, rdx_RegL tmp) %{
13610 match(Set dst (Timestamp));
13611 effect(DEF dst, KILL tmp);
13612
13613 format %{ "RDTSC" %}
13614 ins_encode %{
13615 __ rdtsc();
13616 __ shlptr(rdx, 32);
13617 __ orptr(rax, rdx);
13618 %}
13619 ins_pipe(ialu_reg_reg);
13620 %}
13621
13622 instruct rdtscp(rax_RegL dst, rdx_RegL tmp, rcx_RegL dead) %{
13623 match(Set dst (TimestampSerial));
13624 effect(DEF dst, KILL tmp, KILL dead);
13625
13626 format %{ "RDTSCP" %}
13627 ins_encode %{
13628 __ rdtscp();
13629 __ shlptr(rdx, 32);
13630 __ orptr(rax, rdx);
13631 %}
13632 ins_pipe(ialu_reg_reg);
13633 %}
13634
13635
13636 //----------PEEPHOLE RULES-----------------------------------------------------
13637 // These must follow all instruction definitions as they use the names
13638 // defined in the instructions definitions.
13639 //
13640 // peeppredicate ( rule_predicate );
13641 // // the predicate unless which the peephole rule will be ignored
13642 //
13643 // peepmatch ( root_instr_name [preceding_instruction]* );
13644 //
13645 // peepprocedure ( procedure_name );
13646 // // provide a procedure name to perform the optimization, the procedure should
13647 // // reside in the architecture dependent peephole file, the method has the
13648 // // signature of MachNode* (Block*, int, PhaseRegAlloc*, (MachNode*)(*)(), int...)
13649 // // with the arguments being the basic block, the current node index inside the
13650 // // block, the register allocator, the functions upon invoked return a new node
13651 // // defined in peepreplace, and the rules of the nodes appearing in the
13652 // // corresponding peepmatch, the function return true if successful, else
13653 // // return false
13654 //
|