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

src/cpu/x86/vm/assembler_x86.cpp

Print this page

        

*** 180,190 **** } // make this go away someday void Assembler::emit_data(jint data, relocInfo::relocType rtype, int format) { if (rtype == relocInfo::none) ! emit_long(data); else emit_data(data, Relocation::spec_simple(rtype), format); } void Assembler::emit_data(jint data, RelocationHolder const& rspec, int format) { assert(imm_operand == 0, "default format must be immediate in this file"); --- 180,190 ---- } // make this go away someday void Assembler::emit_data(jint data, relocInfo::relocType rtype, int format) { if (rtype == relocInfo::none) ! emit_int32(data); else emit_data(data, Relocation::spec_simple(rtype), format); } void Assembler::emit_data(jint data, RelocationHolder const& rspec, int format) { assert(imm_operand == 0, "default format must be immediate in this file");
*** 200,210 **** if (format == call32_operand) code_section()->relocate(inst_mark(), rspec, disp32_operand); else code_section()->relocate(inst_mark(), rspec, format); } ! emit_long(data); } static int encode(Register r) { int enc = r->encoding(); if (enc >= 8) { --- 200,210 ---- if (format == call32_operand) code_section()->relocate(inst_mark(), rspec, disp32_operand); else code_section()->relocate(inst_mark(), rspec, format); } ! emit_int32(data); } static int encode(Register r) { int enc = r->encoding(); if (enc >= 8) {
*** 241,262 **** emit_int8(op2 | encode(dst)); emit_int8(imm32 & 0xFF); } else { emit_int8(op1); emit_int8(op2 | encode(dst)); ! emit_long(imm32); } } // Force generation of a 4 byte immediate value even if it fits into 8bit void Assembler::emit_arith_imm32(int op1, int op2, Register dst, int32_t imm32) { assert(isByte(op1) && isByte(op2), "wrong opcode"); assert((op1 & 0x01) == 1, "should be 32bit operation"); assert((op1 & 0x02) == 0, "sign-extension bit should not be set"); emit_int8(op1); emit_int8(op2 | encode(dst)); ! emit_long(imm32); } // immediate-to-memory forms void Assembler::emit_arith_operand(int op1, Register rm, Address adr, int32_t imm32) { assert((op1 & 0x01) == 1, "should be 32bit operation"); --- 241,262 ---- emit_int8(op2 | encode(dst)); emit_int8(imm32 & 0xFF); } else { emit_int8(op1); emit_int8(op2 | encode(dst)); ! emit_int32(imm32); } } // Force generation of a 4 byte immediate value even if it fits into 8bit void Assembler::emit_arith_imm32(int op1, int op2, Register dst, int32_t imm32) { assert(isByte(op1) && isByte(op2), "wrong opcode"); assert((op1 & 0x01) == 1, "should be 32bit operation"); assert((op1 & 0x02) == 0, "sign-extension bit should not be set"); emit_int8(op1); emit_int8(op2 | encode(dst)); ! emit_int32(imm32); } // immediate-to-memory forms void Assembler::emit_arith_operand(int op1, Register rm, Address adr, int32_t imm32) { assert((op1 & 0x01) == 1, "should be 32bit operation");
*** 266,276 **** emit_operand(rm, adr, 1); emit_int8(imm32 & 0xFF); } else { emit_int8(op1); emit_operand(rm, adr, 4); ! emit_long(imm32); } } void Assembler::emit_arith(int op1, int op2, Register dst, Register src) { --- 266,276 ---- emit_operand(rm, adr, 1); emit_int8(imm32 & 0xFF); } else { emit_int8(op1); emit_operand(rm, adr, 4); ! emit_int32(imm32); } } void Assembler::emit_arith(int op1, int op2, Register dst, Register src) {
*** 974,995 **** // 7 bytes: NOP DWORD PTR [EAX+0] 32-bits offset emit_int8(0x0F); emit_int8(0x1F); emit_int8((unsigned char)0x80); // emit_rm(cbuf, 0x2, EAX_enc, EAX_enc); ! emit_long(0); // 32-bits offset (4 bytes) } void Assembler::addr_nop_8() { assert(UseAddressNop, "no CPU support"); // 8 bytes: NOP DWORD PTR [EAX+EAX*0+0] 32-bits offset emit_int8(0x0F); emit_int8(0x1F); emit_int8((unsigned char)0x84); // emit_rm(cbuf, 0x2, EAX_enc, 0x4); emit_int8(0x00); // emit_rm(cbuf, 0x0, EAX_enc, EAX_enc); ! emit_long(0); // 32-bits offset (4 bytes) } void Assembler::addsd(XMMRegister dst, XMMRegister src) { NOT_LP64(assert(VM_Version::supports_sse2(), "")); emit_simd_arith(0x58, dst, src, VEX_SIMD_F2); --- 974,995 ---- // 7 bytes: NOP DWORD PTR [EAX+0] 32-bits offset emit_int8(0x0F); emit_int8(0x1F); emit_int8((unsigned char)0x80); // emit_rm(cbuf, 0x2, EAX_enc, EAX_enc); ! emit_int32(0); // 32-bits offset (4 bytes) } void Assembler::addr_nop_8() { assert(UseAddressNop, "no CPU support"); // 8 bytes: NOP DWORD PTR [EAX+EAX*0+0] 32-bits offset emit_int8(0x0F); emit_int8(0x1F); emit_int8((unsigned char)0x84); // emit_rm(cbuf, 0x2, EAX_enc, 0x4); emit_int8(0x00); // emit_rm(cbuf, 0x0, EAX_enc, EAX_enc); ! emit_int32(0); // 32-bits offset (4 bytes) } void Assembler::addsd(XMMRegister dst, XMMRegister src) { NOT_LP64(assert(VM_Version::supports_sse2(), "")); emit_simd_arith(0x58, dst, src, VEX_SIMD_F2);
*** 1074,1084 **** void Assembler::andl(Address dst, int32_t imm32) { InstructionMark im(this); prefix(dst); emit_int8((unsigned char)0x81); emit_operand(rsp, dst, 4); ! emit_long(imm32); } void Assembler::andl(Register dst, int32_t imm32) { prefix(dst); emit_arith(0x81, 0xE0, dst, imm32); --- 1074,1084 ---- void Assembler::andl(Address dst, int32_t imm32) { InstructionMark im(this); prefix(dst); emit_int8((unsigned char)0x81); emit_operand(rsp, dst, 4); ! emit_int32(imm32); } void Assembler::andl(Register dst, int32_t imm32) { prefix(dst); emit_arith(0x81, 0xE0, dst, imm32);
*** 1202,1212 **** void Assembler::cmpl(Address dst, int32_t imm32) { InstructionMark im(this); prefix(dst); emit_int8((unsigned char)0x81); emit_operand(rdi, dst, 4); ! emit_long(imm32); } void Assembler::cmpl(Register dst, int32_t imm32) { prefix(dst); emit_arith(0x81, 0xF8, dst, imm32); --- 1202,1212 ---- void Assembler::cmpl(Address dst, int32_t imm32) { InstructionMark im(this); prefix(dst); emit_int8((unsigned char)0x81); emit_operand(rdi, dst, 4); ! emit_int32(imm32); } void Assembler::cmpl(Register dst, int32_t imm32) { prefix(dst); emit_arith(0x81, 0xF8, dst, imm32);
*** 1406,1416 **** emit_int8((unsigned char)(0xC0 | encode)); emit_int8(value & 0xFF); } else { emit_int8(0x69); emit_int8((unsigned char)(0xC0 | encode)); ! emit_long(value); } } void Assembler::incl(Address dst) { // Don't use it directly. Use MacroAssembler::increment() instead. --- 1406,1416 ---- emit_int8((unsigned char)(0xC0 | encode)); emit_int8(value & 0xFF); } else { emit_int8(0x69); emit_int8((unsigned char)(0xC0 | encode)); ! emit_int32(value); } } void Assembler::incl(Address dst) { // Don't use it directly. Use MacroAssembler::increment() instead.
*** 1438,1458 **** // 0000 1111 1000 tttn #32-bit disp assert(is_simm32(offs - long_size), "must be 32bit offset (call4)"); emit_int8(0x0F); emit_int8((unsigned char)(0x80 | cc)); ! emit_long(offs - long_size); } } else { // Note: could eliminate cond. jumps to this jump if condition // is the same however, seems to be rather unlikely case. // Note: use jccb() if label to be bound is very close to get // an 8-bit displacement L.add_patch_at(code(), locator()); emit_int8(0x0F); emit_int8((unsigned char)(0x80 | cc)); ! emit_long(0); } } void Assembler::jccb(Condition cc, Label& L) { if (L.is_bound()) { --- 1438,1458 ---- // 0000 1111 1000 tttn #32-bit disp assert(is_simm32(offs - long_size), "must be 32bit offset (call4)"); emit_int8(0x0F); emit_int8((unsigned char)(0x80 | cc)); ! emit_int32(offs - long_size); } } else { // Note: could eliminate cond. jumps to this jump if condition // is the same however, seems to be rather unlikely case. // Note: use jccb() if label to be bound is very close to get // an 8-bit displacement L.add_patch_at(code(), locator()); emit_int8(0x0F); emit_int8((unsigned char)(0x80 | cc)); ! emit_int32(0); } } void Assembler::jccb(Condition cc, Label& L) { if (L.is_bound()) {
*** 1496,1516 **** if (maybe_short && is8bit(offs - short_size)) { emit_int8((unsigned char)0xEB); emit_int8((offs - short_size) & 0xFF); } else { emit_int8((unsigned char)0xE9); ! emit_long(offs - long_size); } } else { // By default, forward jumps are always 32-bit displacements, since // we can't yet know where the label will be bound. If you're sure that // the forward jump will not run beyond 256 bytes, use jmpb to // force an 8-bit displacement. InstructionMark im(this); L.add_patch_at(code(), locator()); emit_int8((unsigned char)0xE9); ! emit_long(0); } } void Assembler::jmp(Register entry) { int encode = prefix_and_encode(entry->encoding()); --- 1496,1516 ---- if (maybe_short && is8bit(offs - short_size)) { emit_int8((unsigned char)0xEB); emit_int8((offs - short_size) & 0xFF); } else { emit_int8((unsigned char)0xE9); ! emit_int32(offs - long_size); } } else { // By default, forward jumps are always 32-bit displacements, since // we can't yet know where the label will be bound. If you're sure that // the forward jump will not run beyond 256 bytes, use jmpb to // force an 8-bit displacement. InstructionMark im(this); L.add_patch_at(code(), locator()); emit_int8((unsigned char)0xE9); ! emit_int32(0); } } void Assembler::jmp(Register entry) { int encode = prefix_and_encode(entry->encoding());
*** 1730,1740 **** // Uses zero extension on 64bit void Assembler::movl(Register dst, int32_t imm32) { int encode = prefix_and_encode(dst->encoding()); emit_int8((unsigned char)(0xB8 | encode)); ! emit_long(imm32); } void Assembler::movl(Register dst, Register src) { int encode = prefix_and_encode(dst->encoding(), src->encoding()); emit_int8((unsigned char)0x8B); --- 1730,1740 ---- // Uses zero extension on 64bit void Assembler::movl(Register dst, int32_t imm32) { int encode = prefix_and_encode(dst->encoding()); emit_int8((unsigned char)(0xB8 | encode)); ! emit_int32(imm32); } void Assembler::movl(Register dst, Register src) { int encode = prefix_and_encode(dst->encoding(), src->encoding()); emit_int8((unsigned char)0x8B);
*** 1751,1761 **** void Assembler::movl(Address dst, int32_t imm32) { InstructionMark im(this); prefix(dst); emit_int8((unsigned char)0xC7); emit_operand(rax, dst, 4); ! emit_long(imm32); } void Assembler::movl(Address dst, Register src) { InstructionMark im(this); prefix(dst, src); --- 1751,1761 ---- void Assembler::movl(Address dst, int32_t imm32) { InstructionMark im(this); prefix(dst); emit_int8((unsigned char)0xC7); emit_operand(rax, dst, 4); ! emit_int32(imm32); } void Assembler::movl(Address dst, Register src) { InstructionMark im(this); prefix(dst, src);
*** 2497,2507 **** void Assembler::push(int32_t imm32) { // in 64bits we push 64bits onto the stack but only // take a 32bit immediate emit_int8(0x68); ! emit_long(imm32); } void Assembler::push(Register src) { int encode = prefix_and_encode(src->encoding()); --- 2497,2507 ---- void Assembler::push(int32_t imm32) { // in 64bits we push 64bits onto the stack but only // take a 32bit immediate emit_int8(0x68); ! emit_int32(imm32); } void Assembler::push(Register src) { int encode = prefix_and_encode(src->encoding());
*** 2783,2793 **** } else { encode = prefix_and_encode(encode); emit_int8((unsigned char)0xF7); emit_int8((unsigned char)(0xC0 | encode)); } ! emit_long(imm32); } void Assembler::testl(Register dst, Register src) { (void) prefix_and_encode(dst->encoding(), src->encoding()); emit_arith(0x85, 0xC0, dst, src); --- 2783,2793 ---- } else { encode = prefix_and_encode(encode); emit_int8((unsigned char)0xF7); emit_int8((unsigned char)(0xC0 | encode)); } ! emit_int32(imm32); } void Assembler::testl(Register dst, Register src) { (void) prefix_and_encode(dst->encoding(), src->encoding()); emit_arith(0x85, 0xC0, dst, src);
*** 4718,4728 **** void Assembler::andq(Address dst, int32_t imm32) { InstructionMark im(this); prefixq(dst); emit_int8((unsigned char)0x81); emit_operand(rsp, dst, 4); ! emit_long(imm32); } void Assembler::andq(Register dst, int32_t imm32) { (void) prefixq_and_encode(dst->encoding()); emit_arith(0x81, 0xE0, dst, imm32); --- 4718,4728 ---- void Assembler::andq(Address dst, int32_t imm32) { InstructionMark im(this); prefixq(dst); emit_int8((unsigned char)0x81); emit_operand(rsp, dst, 4); ! emit_int32(imm32); } void Assembler::andq(Register dst, int32_t imm32) { (void) prefixq_and_encode(dst->encoding()); emit_arith(0x81, 0xE0, dst, imm32);
*** 4791,4801 **** void Assembler::cmpq(Address dst, int32_t imm32) { InstructionMark im(this); prefixq(dst); emit_int8((unsigned char)0x81); emit_operand(rdi, dst, 4); ! emit_long(imm32); } void Assembler::cmpq(Register dst, int32_t imm32) { (void) prefixq_and_encode(dst->encoding()); emit_arith(0x81, 0xF8, dst, imm32); --- 4791,4801 ---- void Assembler::cmpq(Address dst, int32_t imm32) { InstructionMark im(this); prefixq(dst); emit_int8((unsigned char)0x81); emit_operand(rdi, dst, 4); ! emit_int32(imm32); } void Assembler::cmpq(Register dst, int32_t imm32) { (void) prefixq_and_encode(dst->encoding()); emit_arith(0x81, 0xF8, dst, imm32);
*** 4930,4940 **** emit_int8((unsigned char)(0xC0 | encode)); emit_int8(value & 0xFF); } else { emit_int8(0x69); emit_int8((unsigned char)(0xC0 | encode)); ! emit_long(value); } } void Assembler::incl(Register dst) { // Don't use it directly. Use MacroAssembler::incrementl() instead. --- 4930,4940 ---- emit_int8((unsigned char)(0xC0 | encode)); emit_int8(value & 0xFF); } else { emit_int8(0x69); emit_int8((unsigned char)(0xC0 | encode)); ! emit_int32(value); } } void Assembler::incl(Register dst) { // Don't use it directly. Use MacroAssembler::incrementl() instead.
*** 5083,5102 **** // as a result we shouldn't use until tested at runtime... ShouldNotReachHere(); InstructionMark im(this); int encode = prefixq_and_encode(dst->encoding()); emit_int8((unsigned char)(0xC7 | encode)); ! emit_long(imm32); } void Assembler::movslq(Address dst, int32_t imm32) { assert(is_simm32(imm32), "lost bits"); InstructionMark im(this); prefixq(dst); emit_int8((unsigned char)0xC7); emit_operand(rax, dst, 4); ! emit_long(imm32); } void Assembler::movslq(Register dst, Address src) { InstructionMark im(this); prefixq(src, dst); --- 5083,5102 ---- // as a result we shouldn't use until tested at runtime... ShouldNotReachHere(); InstructionMark im(this); int encode = prefixq_and_encode(dst->encoding()); emit_int8((unsigned char)(0xC7 | encode)); ! emit_int32(imm32); } void Assembler::movslq(Address dst, int32_t imm32) { assert(is_simm32(imm32), "lost bits"); InstructionMark im(this); prefixq(dst); emit_int8((unsigned char)0xC7); emit_operand(rax, dst, 4); ! emit_int32(imm32); } void Assembler::movslq(Register dst, Address src) { InstructionMark im(this); prefixq(src, dst);
*** 5170,5180 **** void Assembler::orq(Address dst, int32_t imm32) { InstructionMark im(this); prefixq(dst); emit_int8((unsigned char)0x81); emit_operand(rcx, dst, 4); ! emit_long(imm32); } void Assembler::orq(Register dst, int32_t imm32) { (void) prefixq_and_encode(dst->encoding()); emit_arith(0x81, 0xC8, dst, imm32); --- 5170,5180 ---- void Assembler::orq(Address dst, int32_t imm32) { InstructionMark im(this); prefixq(dst); emit_int8((unsigned char)0x81); emit_operand(rcx, dst, 4); ! emit_int32(imm32); } void Assembler::orq(Register dst, int32_t imm32) { (void) prefixq_and_encode(dst->encoding()); emit_arith(0x81, 0xC8, dst, imm32);
*** 5405,5415 **** } else { encode = prefixq_and_encode(encode); emit_int8((unsigned char)0xF7); emit_int8((unsigned char)(0xC0 | encode)); } ! emit_long(imm32); } void Assembler::testq(Register dst, Register src) { (void) prefixq_and_encode(dst->encoding(), src->encoding()); emit_arith(0x85, 0xC0, dst, src); --- 5405,5415 ---- } else { encode = prefixq_and_encode(encode); emit_int8((unsigned char)0xF7); emit_int8((unsigned char)(0xC0 | encode)); } ! emit_int32(imm32); } void Assembler::testq(Register dst, Register src) { (void) prefixq_and_encode(dst->encoding(), src->encoding()); emit_arith(0x85, 0xC0, dst, src);
src/cpu/x86/vm/assembler_x86.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File