< prev index next >

src/hotspot/cpu/aarch64/assembler_aarch64.cpp

Print this page
8248238: Adding Windows support to OpenJDK on AArch64

Summary: LP64 vs LLP64 changes to add Windows support

Contributed-by: Monica Beckwith <monica.beckwith@microsoft.com>, Ludovic Henry <luhenry@microsoft.com>
Reviewed-by:
8248238: Adding Windows support to OpenJDK on AArch64

Summary: Adding Windows support for AArch64

Contributed-by: Ludovic Henry <luhenry@microsoft.com>, Monica Beckwith <monica.beckwith@microsoft.com>
Reviewed-by:

*** 29,39 **** #include "asm/assembler.hpp" #include "asm/assembler.inline.hpp" #include "interpreter/interpreter.hpp" #ifndef PRODUCT ! const unsigned long Assembler::asm_bp = 0x00007fffee09ac88; #endif #include "compiler/disassembler.hpp" #include "memory/resourceArea.hpp" #include "runtime/interfaceSupport.inline.hpp" --- 29,39 ---- #include "asm/assembler.hpp" #include "asm/assembler.inline.hpp" #include "interpreter/interpreter.hpp" #ifndef PRODUCT ! const uint64_t Assembler::asm_bp = 0x00007fffee09ac88; #endif #include "compiler/disassembler.hpp" #include "memory/resourceArea.hpp" #include "runtime/interfaceSupport.inline.hpp"
*** 1491,1501 **** Disassembler::decode((address)start + len, (address)start); else Disassembler::decode((address)start, (address)start + len); } ! JNIEXPORT void das1(unsigned long insn) { das(insn, 1); } } #define gas_assert(ARG1) assert(ARG1, #ARG1) --- 1491,1501 ---- Disassembler::decode((address)start + len, (address)start); else Disassembler::decode((address)start, (address)start + len); } ! JNIEXPORT void das1(uint64_t insn) { das(insn, 1); } } #define gas_assert(ARG1) assert(ARG1, #ARG1)
*** 1515,1525 **** else __ sub(r, _base, -_offset); break; } case base_plus_offset_reg: { ! __ add(r, _base, _index, _ext.op(), MAX(_ext.shift(), 0)); break; } case literal: { if (rtype == relocInfo::none) __ mov(r, target()); --- 1515,1525 ---- else __ sub(r, _base, -_offset); break; } case base_plus_offset_reg: { ! __ add(r, _base, _index, _ext.op(), MAX2(_ext.shift(), 0)); break; } case literal: { if (rtype == relocInfo::none) __ mov(r, target());
*** 1530,1560 **** default: ShouldNotReachHere(); } } ! void Assembler::adrp(Register reg1, const Address &dest, unsigned long &byte_offset) { ShouldNotReachHere(); } #undef __ #define starti Instruction_aarch64 do_not_use(this); set_current(&do_not_use) void Assembler::adr(Register Rd, address adr) { ! long offset = adr - pc(); int offset_lo = offset & 3; offset >>= 2; starti; f(0, 31), f(offset_lo, 30, 29), f(0b10000, 28, 24), sf(offset, 23, 5); rf(Rd, 0); } void Assembler::_adrp(Register Rd, address adr) { uint64_t pc_page = (uint64_t)pc() >> 12; uint64_t adr_page = (uint64_t)adr >> 12; ! long offset = adr_page - pc_page; int offset_lo = offset & 3; offset >>= 2; starti; f(1, 31), f(offset_lo, 30, 29), f(0b10000, 28, 24), sf(offset, 23, 5); rf(Rd, 0); --- 1530,1560 ---- default: ShouldNotReachHere(); } } ! void Assembler::adrp(Register reg1, const Address &dest, uint64_t &byte_offset) { ShouldNotReachHere(); } #undef __ #define starti Instruction_aarch64 do_not_use(this); set_current(&do_not_use) void Assembler::adr(Register Rd, address adr) { ! int64_t offset = adr - pc(); int offset_lo = offset & 3; offset >>= 2; starti; f(0, 31), f(offset_lo, 30, 29), f(0b10000, 28, 24), sf(offset, 23, 5); rf(Rd, 0); } void Assembler::_adrp(Register Rd, address adr) { uint64_t pc_page = (uint64_t)pc() >> 12; uint64_t adr_page = (uint64_t)adr >> 12; ! int64_t offset = adr_page - pc_page; int offset_lo = offset & 3; offset >>= 2; starti; f(1, 31), f(offset_lo, 30, 29), f(0b10000, 28, 24), sf(offset, 23, 5); rf(Rd, 0);
*** 1699,1711 **** srf(Rd, 0); srf(Rn, 5); } ! bool Assembler::operand_valid_for_add_sub_immediate(long imm) { bool shift = false; ! unsigned long uimm = uabs(imm); if (uimm < (1 << 12)) return true; if (uimm < (1 << 24) && ((uimm >> 12) << 12 == uimm)) { return true; --- 1699,1711 ---- srf(Rd, 0); srf(Rn, 5); } ! bool Assembler::operand_valid_for_add_sub_immediate(int64_t imm) { bool shift = false; ! uint64_t uimm = uabs(imm); if (uimm < (1 << 12)) return true; if (uimm < (1 << 24) && ((uimm >> 12) << 12 == uimm)) { return true;
*** 1782,1786 **** --- 1782,1790 ---- float val; }; ival = fp_immediate_for_encoding(value, 0); return val; } + + address Assembler::locate_next_instruction(address inst) { + return inst + Assembler::instruction_size; + }
< prev index next >