< prev index next >
src/cpu/aarch64/vm/interpreterRT_aarch64.cpp
Print this page
rev 6466 : 8165673: AArch64: Fix JNI floating point argument handling
Reviewed-by: aph, adinn
Contributed-by: ningsheng.jian@linaro.org
*** 1,8 ****
/*
* Copyright (c) 2013, Red Hat Inc.
! * Copyright (c) 2003, 2010, Oracle and/or its affiliates.
* All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
--- 1,8 ----
/*
* Copyright (c) 2013, Red Hat Inc.
! * Copyright (c) 2003, 2016, Oracle and/or its affiliates.
* All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
*** 129,140 ****
const Address src(from(), Interpreter::local_offset_in_bytes(offset()));
if (_num_fp_args < Argument::n_float_register_parameters_c) {
__ ldrs(as_FloatRegister(_num_fp_args++), src);
} else {
! __ ldrh(r0, src);
! __ strh(r0, Address(to(), _stack_offset));
_stack_offset += wordSize;
_num_fp_args++;
}
}
--- 129,140 ----
const Address src(from(), Interpreter::local_offset_in_bytes(offset()));
if (_num_fp_args < Argument::n_float_register_parameters_c) {
__ ldrs(as_FloatRegister(_num_fp_args++), src);
} else {
! __ ldrw(r0, src);
! __ strw(r0, Address(to(), _stack_offset));
_stack_offset += wordSize;
_num_fp_args++;
}
}
*** 348,358 ****
if (_num_fp_args < Argument::n_float_register_parameters_c) {
*_fp_args++ = from_obj;
_num_fp_args++;
} else {
*_to++ = from_obj;
! _num_int_args++;
}
}
virtual void pass_double()
{
--- 348,358 ----
if (_num_fp_args < Argument::n_float_register_parameters_c) {
*_fp_args++ = from_obj;
_num_fp_args++;
} else {
*_to++ = from_obj;
! _num_fp_args++;
}
}
virtual void pass_double()
{
*** 363,373 ****
*_fp_args++ = from_obj;
*_fp_identifiers |= (1 << _num_fp_args); // mark as double
_num_fp_args++;
} else {
*_to++ = from_obj;
! _num_int_args++;
}
}
public:
SlowSignatureHandler(methodHandle method, address from, intptr_t* to)
--- 363,373 ----
*_fp_args++ = from_obj;
*_fp_identifiers |= (1 << _num_fp_args); // mark as double
_num_fp_args++;
} else {
*_to++ = from_obj;
! _num_fp_args++;
}
}
public:
SlowSignatureHandler(methodHandle method, address from, intptr_t* to)
< prev index next >