Mercurial > hg > graal-jvmci-8
comparison src/cpu/x86/vm/assembler_x86.cpp @ 1060:323bd24c6520
6769124: various 64-bit fixes for c1
Reviewed-by: never
author | roland |
---|---|
date | Mon, 02 Nov 2009 11:17:55 +0100 |
parents | d40f03b57795 |
children | 2f1ec89b9995 |
comparison
equal
deleted
inserted
replaced
1059:389049f3f393 | 1060:323bd24c6520 |
---|---|
2249 | 2249 |
2250 void Assembler::popf() { | 2250 void Assembler::popf() { |
2251 emit_byte(0x9D); | 2251 emit_byte(0x9D); |
2252 } | 2252 } |
2253 | 2253 |
2254 #ifndef _LP64 // no 32bit push/pop on amd64 | |
2254 void Assembler::popl(Address dst) { | 2255 void Assembler::popl(Address dst) { |
2255 // NOTE: this will adjust stack by 8byte on 64bits | 2256 // NOTE: this will adjust stack by 8byte on 64bits |
2256 InstructionMark im(this); | 2257 InstructionMark im(this); |
2257 prefix(dst); | 2258 prefix(dst); |
2258 emit_byte(0x8F); | 2259 emit_byte(0x8F); |
2259 emit_operand(rax, dst); | 2260 emit_operand(rax, dst); |
2260 } | 2261 } |
2262 #endif | |
2261 | 2263 |
2262 void Assembler::prefetch_prefix(Address src) { | 2264 void Assembler::prefetch_prefix(Address src) { |
2263 prefix(src); | 2265 prefix(src); |
2264 emit_byte(0x0F); | 2266 emit_byte(0x0F); |
2265 } | 2267 } |
2426 | 2428 |
2427 void Assembler::pushf() { | 2429 void Assembler::pushf() { |
2428 emit_byte(0x9C); | 2430 emit_byte(0x9C); |
2429 } | 2431 } |
2430 | 2432 |
2433 #ifndef _LP64 // no 32bit push/pop on amd64 | |
2431 void Assembler::pushl(Address src) { | 2434 void Assembler::pushl(Address src) { |
2432 // Note this will push 64bit on 64bit | 2435 // Note this will push 64bit on 64bit |
2433 InstructionMark im(this); | 2436 InstructionMark im(this); |
2434 prefix(src); | 2437 prefix(src); |
2435 emit_byte(0xFF); | 2438 emit_byte(0xFF); |
2436 emit_operand(rsi, src); | 2439 emit_operand(rsi, src); |
2437 } | 2440 } |
2441 #endif | |
2438 | 2442 |
2439 void Assembler::pxor(XMMRegister dst, Address src) { | 2443 void Assembler::pxor(XMMRegister dst, Address src) { |
2440 NOT_LP64(assert(VM_Version::supports_sse2(), "")); | 2444 NOT_LP64(assert(VM_Version::supports_sse2(), "")); |
2441 InstructionMark im(this); | 2445 InstructionMark im(this); |
2442 emit_byte(0x66); | 2446 emit_byte(0x66); |
5589 nop(modulus - (offset() % modulus)); | 5593 nop(modulus - (offset() % modulus)); |
5590 } | 5594 } |
5591 } | 5595 } |
5592 | 5596 |
5593 void MacroAssembler::andpd(XMMRegister dst, AddressLiteral src) { | 5597 void MacroAssembler::andpd(XMMRegister dst, AddressLiteral src) { |
5594 andpd(dst, as_Address(src)); | 5598 if (reachable(src)) { |
5599 andpd(dst, as_Address(src)); | |
5600 } else { | |
5601 lea(rscratch1, src); | |
5602 andpd(dst, Address(rscratch1, 0)); | |
5603 } | |
5595 } | 5604 } |
5596 | 5605 |
5597 void MacroAssembler::andptr(Register dst, int32_t imm32) { | 5606 void MacroAssembler::andptr(Register dst, int32_t imm32) { |
5598 LP64_ONLY(andq(dst, imm32)) NOT_LP64(andl(dst, imm32)); | 5607 LP64_ONLY(andq(dst, imm32)) NOT_LP64(andl(dst, imm32)); |
5599 } | 5608 } |
6076 void MacroAssembler::cmpxchgptr(Register reg, Address adr) { | 6085 void MacroAssembler::cmpxchgptr(Register reg, Address adr) { |
6077 LP64_ONLY(cmpxchgq(reg, adr)) NOT_LP64(cmpxchgl(reg, adr)); | 6086 LP64_ONLY(cmpxchgq(reg, adr)) NOT_LP64(cmpxchgl(reg, adr)); |
6078 } | 6087 } |
6079 | 6088 |
6080 void MacroAssembler::comisd(XMMRegister dst, AddressLiteral src) { | 6089 void MacroAssembler::comisd(XMMRegister dst, AddressLiteral src) { |
6081 comisd(dst, as_Address(src)); | 6090 if (reachable(src)) { |
6091 comisd(dst, as_Address(src)); | |
6092 } else { | |
6093 lea(rscratch1, src); | |
6094 comisd(dst, Address(rscratch1, 0)); | |
6095 } | |
6082 } | 6096 } |
6083 | 6097 |
6084 void MacroAssembler::comiss(XMMRegister dst, AddressLiteral src) { | 6098 void MacroAssembler::comiss(XMMRegister dst, AddressLiteral src) { |
6085 comiss(dst, as_Address(src)); | 6099 if (reachable(src)) { |
6100 comiss(dst, as_Address(src)); | |
6101 } else { | |
6102 lea(rscratch1, src); | |
6103 comiss(dst, Address(rscratch1, 0)); | |
6104 } | |
6086 } | 6105 } |
6087 | 6106 |
6088 | 6107 |
6089 void MacroAssembler::cond_inc32(Condition cond, AddressLiteral counter_addr) { | 6108 void MacroAssembler::cond_inc32(Condition cond, AddressLiteral counter_addr) { |
6090 Condition negated_cond = negate_condition(cond); | 6109 Condition negated_cond = negate_condition(cond); |