[aarch64-port-dev ] C1: Correct types for double-double stack move.
Andrew Haley
aph at redhat.com
Mon Sep 22 09:20:07 UTC 2014
Sometimes we have to copy floating-point values from stack to stack.
We don't have a dedicated floating-point scratch register, so it's
easiest to use an integer register instead. Unfortunately we got the
type of the integer register we use wrong; fixed thusly.
Andrew.
# HG changeset patch
# User aph
# Date 1410941098 14400
# Wed Sep 17 04:04:58 2014 -0400
# Node ID 07ecc743c580a14fd483417e1f21bac3aff71931
# Parent 9200b9e93039412a3bcc2552575ae6a4d311daf9
C1: Correct types for double-double stack move.
diff -r 9200b9e93039 -r 07ecc743c580 src/cpu/aarch64/vm/c1_LIRAssembler_aarch64.cpp
--- a/src/cpu/aarch64/vm/c1_LIRAssembler_aarch64.cpp Wed Sep 17 04:02:47 2014 -0400
+++ b/src/cpu/aarch64/vm/c1_LIRAssembler_aarch64.cpp Wed Sep 17 04:04:58 2014 -0400
@@ -906,7 +906,7 @@
if (type == T_ARRAY || type == T_OBJECT) {
__ ldr(dest->as_register(), frame_map()->address_for_slot(src->single_stack_ix()));
__ verify_oop(dest->as_register());
- } else if (type == T_METADATA || type == T_DOUBLE) {
+ } else if (type == T_METADATA) {
__ ldr(dest->as_register(), frame_map()->address_for_slot(src->single_stack_ix()));
} else {
__ ldrw(dest->as_register(), frame_map()->address_for_slot(src->single_stack_ix()));
@@ -959,8 +959,9 @@
}
void LIR_Assembler::stack2stack(LIR_Opr src, LIR_Opr dest, BasicType type) {
+
LIR_Opr temp;
- if (type == T_LONG)
+ if (type == T_LONG || type == T_DOUBLE)
temp = FrameMap::rscratch1_long_opr;
else
temp = FrameMap::rscratch1_opr;
More information about the aarch64-port-dev
mailing list