src/cpu/x86/vm/assembler_x86.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File
*** old/src/cpu/x86/vm/assembler_x86.cpp	Mon Mar 24 16:31:31 2014
--- new/src/cpu/x86/vm/assembler_x86.cpp	Mon Mar 24 16:31:31 2014

*** 2341,2350 **** --- 2341,2355 ---- emit_int8(0x00); emit_int8(0xC0 | encode); emit_int8(imm8); } + void Assembler::pause() { + emit_int8((unsigned char)0xF3); + emit_int8((unsigned char)0x90); + } + void Assembler::pcmpestri(XMMRegister dst, Address src, int imm8) { assert(VM_Version::supports_sse4_2(), ""); InstructionMark im(this); simd_prefix(dst, src, VEX_SIMD_66, VEX_OPCODE_0F_3A); emit_int8(0x61);
*** 2665,2674 **** --- 2670,2684 ---- emit_int8((unsigned char)0xD0 | encode); emit_int8(imm8); } } + void Assembler::rdtsc() { + emit_int8((unsigned char)0x0F); + emit_int8((unsigned char)0x31); + } + // copies data from [esi] to [edi] using rcx pointer sized words // generic void Assembler::rep_mov() { emit_int8((unsigned char)0xF3); // MOVSQ
*** 2974,2992 **** --- 2984,3025 ---- void Assembler::ucomiss(XMMRegister dst, XMMRegister src) { NOT_LP64(assert(VM_Version::supports_sse(), "")); emit_simd_arith_nonds(0x2E, dst, src, VEX_SIMD_NONE); } + void Assembler::xabort(int8_t imm8) { + emit_int8((unsigned char)0xC6); + emit_int8((unsigned char)0xF8); + emit_int8((unsigned char)(imm8 & 0xFF)); + } void Assembler::xaddl(Address dst, Register src) { InstructionMark im(this); prefix(dst, src); emit_int8(0x0F); emit_int8((unsigned char)0xC1); emit_operand(src, dst); } + void Assembler::xbegin(Label& abort, relocInfo::relocType rtype) { + InstructionMark im(this); + relocate(rtype); + if (abort.is_bound()) { + address entry = target(abort); + assert(entry != NULL, "abort entry NULL"); + intptr_t offset = entry - pc(); + emit_int8((unsigned char)0xC7); + emit_int8((unsigned char)0xF8); + emit_int32(offset - 6); // 2 opcode + 4 address + } else { + abort.add_patch_at(code(), locator()); + emit_int8((unsigned char)0xC7); + emit_int8((unsigned char)0xF8); + emit_int32(0); + } + } + void Assembler::xchgl(Register dst, Address src) { // xchg InstructionMark im(this); prefix(src, dst); emit_int8((unsigned char)0x87); emit_operand(dst, src);
*** 2996,3005 **** --- 3029,3044 ---- int encode = prefix_and_encode(dst->encoding(), src->encoding()); emit_int8((unsigned char)0x87); emit_int8((unsigned char)(0xC0 | encode)); } + void Assembler::xend() { + emit_int8((unsigned char)0x0F); + emit_int8((unsigned char)0x01); + emit_int8((unsigned char)0xD5); + } + void Assembler::xgetbv() { emit_int8(0x0F); emit_int8(0x01); emit_int8((unsigned char)0xD0); }

src/cpu/x86/vm/assembler_x86.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File