16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 *
25 */
26
27 #include <stdio.h>
28 #include <sys/types.h>
29
30 #include "precompiled.hpp"
31 #include "asm/assembler.hpp"
32 #include "asm/assembler.inline.hpp"
33 #include "interpreter/interpreter.hpp"
34
35 #ifndef PRODUCT
36 const unsigned long Assembler::asm_bp = 0x00007fffee09ac88;
37 #endif
38
39 #include "compiler/disassembler.hpp"
40 #include "memory/resourceArea.hpp"
41 #include "runtime/interfaceSupport.hpp"
42 #include "runtime/sharedRuntime.hpp"
43 #include "immediate_aarch64.hpp"
44
45 // #include "gc_interface/collectedHeap.inline.hpp"
46 // #include "interpreter/interpreter.hpp"
47 // #include "memory/cardTableModRefBS.hpp"
48 // #include "prims/methodHandles.hpp"
49 // #include "runtime/biasedLocking.hpp"
50 // #include "runtime/interfaceSupport.hpp"
51 // #include "runtime/objectMonitor.hpp"
52 // #include "runtime/os.hpp"
53 // #include "runtime/sharedRuntime.hpp"
54 // #include "runtime/stubRoutines.hpp"
55 // #if INCLUDE_ALL_GCS
56 // #include "gc_implementation/g1/g1CollectedHeap.inline.hpp"
1247
1248 switch(_mode) {
1249 case base_plus_offset: {
1250 if (_offset == 0 && _base == r) // it's a nop
1251 break;
1252 if (_offset > 0)
1253 __ add(r, _base, _offset);
1254 else
1255 __ sub(r, _base, -_offset);
1256 break;
1257 }
1258 case base_plus_offset_reg: {
1259 __ add(r, _base, _index, _ext.op(), MAX(_ext.shift(), 0));
1260 break;
1261 }
1262 case literal: {
1263 if (rtype == relocInfo::none)
1264 __ mov(r, target());
1265 else
1266 __ movptr(r, (uint64_t)target());
1267 break;
1268 }
1269 default:
1270 ShouldNotReachHere();
1271 }
1272 }
1273
1274 void Assembler::adrp(Register reg1, const Address &dest, unsigned long &byte_offset) {
1275 ShouldNotReachHere();
1276 }
1277
1278 #undef __
1279
1280 #define starti Instruction_aarch64 do_not_use(this); set_current(&do_not_use)
1281
1282 void Assembler::adr(Register Rd, address adr) {
1283 long offset = adr - pc();
1284 int offset_lo = offset & 3;
1285 offset >>= 2;
1286 starti;
|
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 *
25 */
26
27 #include <stdio.h>
28 #include <sys/types.h>
29
30 #include "precompiled.hpp"
31 #include "asm/assembler.hpp"
32 #include "asm/assembler.inline.hpp"
33 #include "interpreter/interpreter.hpp"
34
35 #ifndef PRODUCT
36 const unsigned long Assembler::asm_bp = 0x0000007fa8092b5c;
37 #endif
38
39 #include "compiler/disassembler.hpp"
40 #include "memory/resourceArea.hpp"
41 #include "runtime/interfaceSupport.hpp"
42 #include "runtime/sharedRuntime.hpp"
43 #include "immediate_aarch64.hpp"
44
45 // #include "gc_interface/collectedHeap.inline.hpp"
46 // #include "interpreter/interpreter.hpp"
47 // #include "memory/cardTableModRefBS.hpp"
48 // #include "prims/methodHandles.hpp"
49 // #include "runtime/biasedLocking.hpp"
50 // #include "runtime/interfaceSupport.hpp"
51 // #include "runtime/objectMonitor.hpp"
52 // #include "runtime/os.hpp"
53 // #include "runtime/sharedRuntime.hpp"
54 // #include "runtime/stubRoutines.hpp"
55 // #if INCLUDE_ALL_GCS
56 // #include "gc_implementation/g1/g1CollectedHeap.inline.hpp"
1247
1248 switch(_mode) {
1249 case base_plus_offset: {
1250 if (_offset == 0 && _base == r) // it's a nop
1251 break;
1252 if (_offset > 0)
1253 __ add(r, _base, _offset);
1254 else
1255 __ sub(r, _base, -_offset);
1256 break;
1257 }
1258 case base_plus_offset_reg: {
1259 __ add(r, _base, _index, _ext.op(), MAX(_ext.shift(), 0));
1260 break;
1261 }
1262 case literal: {
1263 if (rtype == relocInfo::none)
1264 __ mov(r, target());
1265 else
1266 __ movptr(r, (uint64_t)target());
1267 break;
1268 }
1269 case post: {
1270 __ mov(r, _base);
1271 break;
1272 }
1273 default:
1274 ShouldNotReachHere();
1275 }
1276 }
1277
1278 void Assembler::adrp(Register reg1, const Address &dest, unsigned long &byte_offset) {
1279 ShouldNotReachHere();
1280 }
1281
1282 #undef __
1283
1284 #define starti Instruction_aarch64 do_not_use(this); set_current(&do_not_use)
1285
1286 void Assembler::adr(Register Rd, address adr) {
1287 long offset = adr - pc();
1288 int offset_lo = offset & 3;
1289 offset >>= 2;
1290 starti;
|