< 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:
*** 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)
*** 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;
< prev index next >