mirror of
https://github.com/openjdk/jdk.git
synced 2025-09-20 02:54:35 +02:00
6985015: C1 needs to support compressed oops
This change implements compressed oops for C1 for x64 and sparc. The changes are mostly on the codegen level, with a few exceptions when we do access things outside of the heap that are uncompressed from the IR. Compressed oops are now also enabled with tiered. Reviewed-by: twisti, kvn, never, phh
This commit is contained in:
parent
8006fe8f75
commit
d59d7ffc4a
30 changed files with 493 additions and 429 deletions
|
@ -489,7 +489,9 @@ void LIR_Assembler::emit_op1(LIR_Op1* op) {
|
|||
volatile_move_op(op->in_opr(), op->result_opr(), op->type(), op->info());
|
||||
} else {
|
||||
move_op(op->in_opr(), op->result_opr(), op->type(),
|
||||
op->patch_code(), op->info(), op->pop_fpu_stack(), op->move_kind() == lir_move_unaligned);
|
||||
op->patch_code(), op->info(), op->pop_fpu_stack(),
|
||||
op->move_kind() == lir_move_unaligned,
|
||||
op->move_kind() == lir_move_wide);
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -758,7 +760,7 @@ void LIR_Assembler::roundfp_op(LIR_Opr src, LIR_Opr tmp, LIR_Opr dest, bool pop_
|
|||
}
|
||||
|
||||
|
||||
void LIR_Assembler::move_op(LIR_Opr src, LIR_Opr dest, BasicType type, LIR_PatchCode patch_code, CodeEmitInfo* info, bool pop_fpu_stack, bool unaligned) {
|
||||
void LIR_Assembler::move_op(LIR_Opr src, LIR_Opr dest, BasicType type, LIR_PatchCode patch_code, CodeEmitInfo* info, bool pop_fpu_stack, bool unaligned, bool wide) {
|
||||
if (src->is_register()) {
|
||||
if (dest->is_register()) {
|
||||
assert(patch_code == lir_patch_none && info == NULL, "no patching and info allowed here");
|
||||
|
@ -767,7 +769,7 @@ void LIR_Assembler::move_op(LIR_Opr src, LIR_Opr dest, BasicType type, LIR_Patch
|
|||
assert(patch_code == lir_patch_none && info == NULL, "no patching and info allowed here");
|
||||
reg2stack(src, dest, type, pop_fpu_stack);
|
||||
} else if (dest->is_address()) {
|
||||
reg2mem(src, dest, type, patch_code, info, pop_fpu_stack, unaligned);
|
||||
reg2mem(src, dest, type, patch_code, info, pop_fpu_stack, wide, unaligned);
|
||||
} else {
|
||||
ShouldNotReachHere();
|
||||
}
|
||||
|
@ -790,13 +792,13 @@ void LIR_Assembler::move_op(LIR_Opr src, LIR_Opr dest, BasicType type, LIR_Patch
|
|||
const2stack(src, dest);
|
||||
} else if (dest->is_address()) {
|
||||
assert(patch_code == lir_patch_none, "no patching allowed here");
|
||||
const2mem(src, dest, type, info);
|
||||
const2mem(src, dest, type, info, wide);
|
||||
} else {
|
||||
ShouldNotReachHere();
|
||||
}
|
||||
|
||||
} else if (src->is_address()) {
|
||||
mem2reg(src, dest, type, patch_code, info, unaligned);
|
||||
mem2reg(src, dest, type, patch_code, info, wide, unaligned);
|
||||
|
||||
} else {
|
||||
ShouldNotReachHere();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue