1.1 --- a/src/cpu/x86/vm/assembler_x86.cpp Sat Mar 22 00:26:48 2014 +0400 1.2 +++ b/src/cpu/x86/vm/assembler_x86.cpp Thu Mar 20 17:49:27 2014 -0700 1.3 @@ -2343,6 +2343,11 @@ 1.4 emit_int8(imm8); 1.5 } 1.6 1.7 +void Assembler::pause() { 1.8 + emit_int8((unsigned char)0xF3); 1.9 + emit_int8((unsigned char)0x90); 1.10 +} 1.11 + 1.12 void Assembler::pcmpestri(XMMRegister dst, Address src, int imm8) { 1.13 assert(VM_Version::supports_sse4_2(), ""); 1.14 InstructionMark im(this); 1.15 @@ -2667,6 +2672,11 @@ 1.16 } 1.17 } 1.18 1.19 +void Assembler::rdtsc() { 1.20 + emit_int8((unsigned char)0x0F); 1.21 + emit_int8((unsigned char)0x31); 1.22 +} 1.23 + 1.24 // copies data from [esi] to [edi] using rcx pointer sized words 1.25 // generic 1.26 void Assembler::rep_mov() { 1.27 @@ -2976,6 +2986,11 @@ 1.28 emit_simd_arith_nonds(0x2E, dst, src, VEX_SIMD_NONE); 1.29 } 1.30 1.31 +void Assembler::xabort(int8_t imm8) { 1.32 + emit_int8((unsigned char)0xC6); 1.33 + emit_int8((unsigned char)0xF8); 1.34 + emit_int8((unsigned char)(imm8 & 0xFF)); 1.35 +} 1.36 1.37 void Assembler::xaddl(Address dst, Register src) { 1.38 InstructionMark im(this); 1.39 @@ -2985,6 +3000,24 @@ 1.40 emit_operand(src, dst); 1.41 } 1.42 1.43 +void Assembler::xbegin(Label& abort, relocInfo::relocType rtype) { 1.44 + InstructionMark im(this); 1.45 + relocate(rtype); 1.46 + if (abort.is_bound()) { 1.47 + address entry = target(abort); 1.48 + assert(entry != NULL, "abort entry NULL"); 1.49 + intptr_t offset = entry - pc(); 1.50 + emit_int8((unsigned char)0xC7); 1.51 + emit_int8((unsigned char)0xF8); 1.52 + emit_int32(offset - 6); // 2 opcode + 4 address 1.53 + } else { 1.54 + abort.add_patch_at(code(), locator()); 1.55 + emit_int8((unsigned char)0xC7); 1.56 + emit_int8((unsigned char)0xF8); 1.57 + emit_int32(0); 1.58 + } 1.59 +} 1.60 + 1.61 void Assembler::xchgl(Register dst, Address src) { // xchg 1.62 InstructionMark im(this); 1.63 prefix(src, dst); 1.64 @@ -2998,6 +3031,12 @@ 1.65 emit_int8((unsigned char)(0xC0 | encode)); 1.66 } 1.67 1.68 +void Assembler::xend() { 1.69 + emit_int8((unsigned char)0x0F); 1.70 + emit_int8((unsigned char)0x01); 1.71 + emit_int8((unsigned char)0xD5); 1.72 +} 1.73 + 1.74 void Assembler::xgetbv() { 1.75 emit_int8(0x0F); 1.76 emit_int8(0x01);