From 8ed9f83e8261cae7494405d2150bba26d4b9591d Mon Sep 17 00:00:00 2001 From: Aleksey Shipilev Date: Fri, 25 Nov 2022 10:24:40 +0000 Subject: [PATCH] 8270086: ARM32-softfp: Do not load CONSTANT_double using the condy helper methods in the interpreter Backport-of: a066c7bed0f9aa45fb9384f75ae84943548cd859 --- src/hotspot/cpu/arm/templateTable_arm.cpp | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/src/hotspot/cpu/arm/templateTable_arm.cpp b/src/hotspot/cpu/arm/templateTable_arm.cpp index 30649a5e104..1e3d12e219c 100644 --- a/src/hotspot/cpu/arm/templateTable_arm.cpp +++ b/src/hotspot/cpu/arm/templateTable_arm.cpp @@ -490,29 +490,30 @@ void TemplateTable::ldc2_w() { __ add(Rtemp, Rtags, tags_offset); __ ldrb(Rtemp, Address(Rtemp, Rindex)); - Label Condy, exit; -#ifdef __ABI_HARD__ - Label NotDouble; + Label Done, NotLong, NotDouble; __ cmp(Rtemp, JVM_CONSTANT_Double); __ b(NotDouble, ne); +#ifdef __SOFTFP__ + __ ldr(R0_tos_lo, Address(Rbase, base_offset + 0 * wordSize)); + __ ldr(R1_tos_hi, Address(Rbase, base_offset + 1 * wordSize)); +#else // !__SOFTFP__ __ ldr_double(D0_tos, Address(Rbase, base_offset)); - +#endif // __SOFTFP__ __ push(dtos); - __ b(exit); + __ b(Done); __ bind(NotDouble); -#endif __ cmp(Rtemp, JVM_CONSTANT_Long); - __ b(Condy, ne); + __ b(NotLong, ne); __ ldr(R0_tos_lo, Address(Rbase, base_offset + 0 * wordSize)); __ ldr(R1_tos_hi, Address(Rbase, base_offset + 1 * wordSize)); __ push(ltos); - __ b(exit); + __ b(Done); + __ bind(NotLong); - __ bind(Condy); - condy_helper(exit); + condy_helper(Done); - __ bind(exit); + __ bind(Done); }