hotspot/src/cpu/x86/vm/x86_64.ad
changeset 40648 5c87a5420f46
parent 39419 cc993a4ab581
child 41673 e8b3ccb2cfcf
equal deleted inserted replaced
40647:cd5e1372ad44 40648:5c87a5420f46
   984 
   984 
   985   // popq rbp
   985   // popq rbp
   986   emit_opcode(cbuf, 0x58 | RBP_enc);
   986   emit_opcode(cbuf, 0x58 | RBP_enc);
   987 
   987 
   988   if (StackReservedPages > 0 && C->has_reserved_stack_access()) {
   988   if (StackReservedPages > 0 && C->has_reserved_stack_access()) {
   989     __ reserved_stack_check(); 
   989     __ reserved_stack_check();
   990   }
   990   }
   991 
   991 
   992   if (do_polling() && C->is_method_compilation()) {
   992   if (do_polling() && C->is_method_compilation()) {
   993     MacroAssembler _masm(&cbuf);
   993     MacroAssembler _masm(&cbuf);
   994     AddressLiteral polling_page(os::get_polling_page(), relocInfo::poll_return_type);
   994     AddressLiteral polling_page(os::get_polling_page(), relocInfo::poll_return_type);
  7353             "If rax == $mem_ptr then store $newval into $mem_ptr\n\t"
  7353             "If rax == $mem_ptr then store $newval into $mem_ptr\n\t"
  7354             "sete    $res\n\t"
  7354             "sete    $res\n\t"
  7355             "movzbl  $res, $res" %}
  7355             "movzbl  $res, $res" %}
  7356   opcode(0x0F, 0xB0);
  7356   opcode(0x0F, 0xB0);
  7357   ins_encode(lock_prefix,
  7357   ins_encode(lock_prefix,
  7358              REX_reg_mem(newval, mem_ptr),
  7358              REX_breg_mem(newval, mem_ptr),
  7359              OpcP, OpcS,
  7359              OpcP, OpcS,
  7360              reg_mem(newval, mem_ptr),
  7360              reg_mem(newval, mem_ptr),
  7361              REX_breg(res), Opcode(0x0F), Opcode(0x94), reg(res), // sete
  7361              REX_breg(res), Opcode(0x0F), Opcode(0x94), reg(res), // sete
  7362              REX_reg_breg(res, res), // movzbl
  7362              REX_reg_breg(res, res), // movzbl
  7363              Opcode(0xF), Opcode(0xB6), reg_reg(res, res));
  7363              Opcode(0xF), Opcode(0xB6), reg_reg(res, res));
  7378             "sete    $res\n\t"
  7378             "sete    $res\n\t"
  7379             "movzbl  $res, $res" %}
  7379             "movzbl  $res, $res" %}
  7380   opcode(0x0F, 0xB1);
  7380   opcode(0x0F, 0xB1);
  7381   ins_encode(lock_prefix,
  7381   ins_encode(lock_prefix,
  7382              SizePrefix,
  7382              SizePrefix,
  7383              REX_reg_mem(newval, mem_ptr),          
  7383              REX_reg_mem(newval, mem_ptr),
  7384              OpcP, OpcS,
  7384              OpcP, OpcS,
  7385              reg_mem(newval, mem_ptr),
  7385              reg_mem(newval, mem_ptr),
  7386              REX_breg(res), Opcode(0x0F), Opcode(0x94), reg(res), // sete
  7386              REX_breg(res), Opcode(0x0F), Opcode(0x94), reg(res), // sete
  7387              REX_reg_breg(res, res), // movzbl
  7387              REX_reg_breg(res, res), // movzbl
  7388              Opcode(0xF), Opcode(0xB6), reg_reg(res, res));
  7388              Opcode(0xF), Opcode(0xB6), reg_reg(res, res));
  7422 
  7422 
  7423   format %{ "cmpxchgb $mem_ptr,$newval\t# "
  7423   format %{ "cmpxchgb $mem_ptr,$newval\t# "
  7424             "If rax == $mem_ptr then store $newval into $mem_ptr\n\t"  %}
  7424             "If rax == $mem_ptr then store $newval into $mem_ptr\n\t"  %}
  7425   opcode(0x0F, 0xB0);
  7425   opcode(0x0F, 0xB0);
  7426   ins_encode(lock_prefix,
  7426   ins_encode(lock_prefix,
  7427              REX_reg_mem(newval, mem_ptr),
  7427              REX_breg_mem(newval, mem_ptr),
  7428              OpcP, OpcS,
  7428              OpcP, OpcS,
  7429              reg_mem(newval, mem_ptr) // lock cmpxchg
  7429              reg_mem(newval, mem_ptr) // lock cmpxchg
  7430              );
  7430              );
  7431   ins_pipe( pipe_cmpxchg );
  7431   ins_pipe( pipe_cmpxchg );
  7432 %}
  7432 %}