14390 ins_encode %{
14391 __ jump(RuntimeAddress(OptoRuntime::rethrow_stub()), noreg);
14392 %}
14393 ins_pipe(pipe_jmp);
14394 %}
14395
14396 // ============================================================================
14397 // This name is KNOWN by the ADLC and cannot be changed.
14398 // The ADLC forces a 'TypeRawPtr::BOTTOM' output type
14399 // for this guy.
14400 instruct tlsLoadP(r15_RegP dst) %{
14401 match(Set dst (ThreadLocal));
14402 effect(DEF dst);
14403
14404 size(0);
14405 format %{ "# TLS is in R15" %}
14406 ins_encode( /*empty encoding*/ );
14407 ins_pipe(ialu_reg_reg);
14408 %}
14409
14410
14411 //----------PEEPHOLE RULES-----------------------------------------------------
14412 // These must follow all instruction definitions as they use the names
14413 // defined in the instructions definitions.
14414 //
14415 // peeppredicate ( rule_predicate );
14416 // // the predicate unless which the peephole rule will be ignored
14417 //
14418 // peepmatch ( root_instr_name [preceding_instruction]* );
14419 //
14420 // peepprocedure ( procedure_name );
14421 // // provide a procedure name to perform the optimization, the procedure should
14422 // // reside in the architecture dependent peephole file, the method has the
14423 // // signature of MachNode* (Block*, int, PhaseRegAlloc*, (MachNode*)(*)(), int...)
14424 // // with the arguments being the basic block, the current node index inside the
14425 // // block, the register allocator, the functions upon invoked return a new node
14426 // // defined in peepreplace, and the rules of the nodes appearing in the
14427 // // corresponding peepmatch, the function return true if successful, else
14428 // // return false
14429 //
|
14390 ins_encode %{
14391 __ jump(RuntimeAddress(OptoRuntime::rethrow_stub()), noreg);
14392 %}
14393 ins_pipe(pipe_jmp);
14394 %}
14395
14396 // ============================================================================
14397 // This name is KNOWN by the ADLC and cannot be changed.
14398 // The ADLC forces a 'TypeRawPtr::BOTTOM' output type
14399 // for this guy.
14400 instruct tlsLoadP(r15_RegP dst) %{
14401 match(Set dst (ThreadLocal));
14402 effect(DEF dst);
14403
14404 size(0);
14405 format %{ "# TLS is in R15" %}
14406 ins_encode( /*empty encoding*/ );
14407 ins_pipe(ialu_reg_reg);
14408 %}
14409
14410 instruct rdtsc(rax_RegL dst, rdx_RegL tmp) %{
14411 match(Set dst (Timestamp));
14412 effect(DEF dst, KILL tmp);
14413
14414 format %{ "RDTSC" %}
14415 ins_encode %{
14416 __ rdtsc();
14417 __ shlptr(rdx, 32);
14418 __ orptr(rax, rdx);
14419 %}
14420 ins_pipe(ialu_reg_reg);
14421 %}
14422
14423 instruct rdtscp(rax_RegL dst, rdx_RegL tmp, rcx_RegL dead) %{
14424 match(Set dst (TimestampSerial));
14425 effect(DEF dst, KILL tmp, KILL dead);
14426
14427 format %{ "RDTSCP" %}
14428 ins_encode %{
14429 __ rdtscp();
14430 __ shlptr(rdx, 32);
14431 __ orptr(rax, rdx);
14432 %}
14433 ins_pipe(ialu_reg_reg);
14434 %}
14435
14436
14437 //----------PEEPHOLE RULES-----------------------------------------------------
14438 // These must follow all instruction definitions as they use the names
14439 // defined in the instructions definitions.
14440 //
14441 // peeppredicate ( rule_predicate );
14442 // // the predicate unless which the peephole rule will be ignored
14443 //
14444 // peepmatch ( root_instr_name [preceding_instruction]* );
14445 //
14446 // peepprocedure ( procedure_name );
14447 // // provide a procedure name to perform the optimization, the procedure should
14448 // // reside in the architecture dependent peephole file, the method has the
14449 // // signature of MachNode* (Block*, int, PhaseRegAlloc*, (MachNode*)(*)(), int...)
14450 // // with the arguments being the basic block, the current node index inside the
14451 // // block, the register allocator, the functions upon invoked return a new node
14452 // // defined in peepreplace, and the rules of the nodes appearing in the
14453 // // corresponding peepmatch, the function return true if successful, else
14454 // // return false
14455 //
|