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 %} |