Mercurial > hg > graal-jvmci-8
comparison src/cpu/x86/vm/assembler_x86.hpp @ 2404:b40d4fa697bf
6964776: c2 should ensure the polling page is reachable on 64 bit
Summary: Materialize the pointer to the polling page in a register instead of using rip-relative addressing when the distance from the code cache is larger than disp32.
Reviewed-by: never, kvn
author | iveresov |
---|---|
date | Sun, 27 Mar 2011 13:17:37 -0700 |
parents | 41d4973cf100 |
children | 09f96c3ff1ad |
comparison
equal
deleted
inserted
replaced
2403:1927db75dd85 | 2404:b40d4fa697bf |
---|---|
578 void emit_data(jint data, relocInfo::relocType rtype, int format); | 578 void emit_data(jint data, relocInfo::relocType rtype, int format); |
579 void emit_data(jint data, RelocationHolder const& rspec, int format); | 579 void emit_data(jint data, RelocationHolder const& rspec, int format); |
580 void emit_data64(jlong data, relocInfo::relocType rtype, int format = 0); | 580 void emit_data64(jlong data, relocInfo::relocType rtype, int format = 0); |
581 void emit_data64(jlong data, RelocationHolder const& rspec, int format = 0); | 581 void emit_data64(jlong data, RelocationHolder const& rspec, int format = 0); |
582 | 582 |
583 | |
584 bool reachable(AddressLiteral adr) NOT_LP64({ return true;}); | 583 bool reachable(AddressLiteral adr) NOT_LP64({ return true;}); |
585 | 584 |
586 // These are all easily abused and hence protected | 585 // These are all easily abused and hence protected |
587 | 586 |
588 // 32BIT ONLY SECTION | 587 // 32BIT ONLY SECTION |
680 #else | 679 #else |
681 static bool is_simm(int32_t x, int nbits) { return -(1 << (nbits-1)) <= x && | 680 static bool is_simm(int32_t x, int nbits) { return -(1 << (nbits-1)) <= x && |
682 x < (1 << (nbits-1)); } | 681 x < (1 << (nbits-1)); } |
683 static bool is_simm32(int32_t x) { return true; } | 682 static bool is_simm32(int32_t x) { return true; } |
684 #endif // _LP64 | 683 #endif // _LP64 |
684 | |
685 static bool is_polling_page_far() NOT_LP64({ return false;}); | |
685 | 686 |
686 // Generic instructions | 687 // Generic instructions |
687 // Does 32bit or 64bit as needed for the platform. In some sense these | 688 // Does 32bit or 64bit as needed for the platform. In some sense these |
688 // belong in macro assembler but there is no need for both varieties to exist | 689 // belong in macro assembler but there is no need for both varieties to exist |
689 | 690 |
2092 void lea(Address dst, AddressLiteral adr); | 2093 void lea(Address dst, AddressLiteral adr); |
2093 void lea(Register dst, Address adr) { Assembler::lea(dst, adr); } | 2094 void lea(Register dst, Address adr) { Assembler::lea(dst, adr); } |
2094 | 2095 |
2095 void leal32(Register dst, Address src) { leal(dst, src); } | 2096 void leal32(Register dst, Address src) { leal(dst, src); } |
2096 | 2097 |
2097 void test32(Register src1, AddressLiteral src2); | 2098 // Import other testl() methods from the parent class or else |
2099 // they will be hidden by the following overriding declaration. | |
2100 using Assembler::testl; | |
2101 void testl(Register dst, AddressLiteral src); | |
2098 | 2102 |
2099 void orptr(Register dst, Address src) { LP64_ONLY(orq(dst, src)) NOT_LP64(orl(dst, src)); } | 2103 void orptr(Register dst, Address src) { LP64_ONLY(orq(dst, src)) NOT_LP64(orl(dst, src)); } |
2100 void orptr(Register dst, Register src) { LP64_ONLY(orq(dst, src)) NOT_LP64(orl(dst, src)); } | 2104 void orptr(Register dst, Register src) { LP64_ONLY(orq(dst, src)) NOT_LP64(orl(dst, src)); } |
2101 void orptr(Register dst, int32_t src) { LP64_ONLY(orq(dst, src)) NOT_LP64(orl(dst, src)); } | 2105 void orptr(Register dst, int32_t src) { LP64_ONLY(orq(dst, src)) NOT_LP64(orl(dst, src)); } |
2102 | 2106 |