Skip to content

Commit 9a468d8

Browse files
committedNov 27, 2020
8256757: Incorrect MachCallRuntimeNode::ret_addr_offset() for CallLeafNoFP on x86_32
Reviewed-by: jiefu, kvn
1 parent 2215e5a commit 9a468d8

File tree

5 files changed

+9
-2
lines changed

5 files changed

+9
-2
lines changed
 

‎src/hotspot/cpu/x86/x86_32.ad

+1-1
Original file line numberDiff line numberDiff line change
@@ -308,7 +308,7 @@ static int sizeof_FFree_Float_Stack_All = -1;
308308

309309
int MachCallRuntimeNode::ret_addr_offset() {
310310
assert(sizeof_FFree_Float_Stack_All != -1, "must have been emitted already");
311-
return sizeof_FFree_Float_Stack_All + 5 + pre_call_resets_size();
311+
return 5 + pre_call_resets_size() + (_leaf_no_fp ? 0 : sizeof_FFree_Float_Stack_All);
312312
}
313313

314314
int MachCallNativeNode::ret_addr_offset() {

‎src/hotspot/share/opto/callnode.hpp

+1
Original file line numberDiff line numberDiff line change
@@ -854,6 +854,7 @@ class CallLeafNoFPNode : public CallLeafNode {
854854
const TypePtr* adr_type)
855855
: CallLeafNode(tf, addr, name, adr_type)
856856
{
857+
init_class_id(Class_CallLeafNoFP);
857858
}
858859
virtual int Opcode() const;
859860
};

‎src/hotspot/share/opto/machnode.hpp

+1
Original file line numberDiff line numberDiff line change
@@ -994,6 +994,7 @@ class MachCallRuntimeNode : public MachCallNode {
994994
virtual uint size_of() const; // Size is bigger
995995
public:
996996
const char *_name; // Printable name, if _method is NULL
997+
bool _leaf_no_fp; // Is this CallLeafNoFP?
997998
MachCallRuntimeNode() : MachCallNode() {
998999
init_class_id(Class_MachCallRuntime);
9991000
}

‎src/hotspot/share/opto/matcher.cpp

+3-1
Original file line numberDiff line numberDiff line change
@@ -1264,7 +1264,9 @@ MachNode *Matcher::match_sfpt( SafePointNode *sfpt ) {
12641264
call_java->as_CallDynamicJava()->_vtable_index;
12651265
}
12661266
else if( mcall->is_MachCallRuntime() ) {
1267-
mcall->as_MachCallRuntime()->_name = call->as_CallRuntime()->_name;
1267+
MachCallRuntimeNode* mach_call_rt = mcall->as_MachCallRuntime();
1268+
mach_call_rt->_name = call->as_CallRuntime()->_name;
1269+
mach_call_rt->_leaf_no_fp = call->is_CallLeafNoFP();
12681270
}
12691271
else if( mcall->is_MachCallNative() ) {
12701272
MachCallNativeNode* mach_call_native = mcall->as_MachCallNative();

‎src/hotspot/share/opto/node.hpp

+3
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ class CMoveNode;
4949
class CallDynamicJavaNode;
5050
class CallJavaNode;
5151
class CallLeafNode;
52+
class CallLeafNoFPNode;
5253
class CallNode;
5354
class CallRuntimeNode;
5455
class CallNativeNode;
@@ -627,6 +628,7 @@ class Node {
627628
DEFINE_CLASS_ID(CallDynamicJava, CallJava, 1)
628629
DEFINE_CLASS_ID(CallRuntime, Call, 1)
629630
DEFINE_CLASS_ID(CallLeaf, CallRuntime, 0)
631+
DEFINE_CLASS_ID(CallLeafNoFP, CallLeaf, 0)
630632
DEFINE_CLASS_ID(Allocate, Call, 2)
631633
DEFINE_CLASS_ID(AllocateArray, Allocate, 0)
632634
DEFINE_CLASS_ID(AbstractLock, Call, 3)
@@ -821,6 +823,7 @@ class Node {
821823
DEFINE_CLASS_QUERY(CallDynamicJava)
822824
DEFINE_CLASS_QUERY(CallJava)
823825
DEFINE_CLASS_QUERY(CallLeaf)
826+
DEFINE_CLASS_QUERY(CallLeafNoFP)
824827
DEFINE_CLASS_QUERY(CallRuntime)
825828
DEFINE_CLASS_QUERY(CallStaticJava)
826829
DEFINE_CLASS_QUERY(Catch)

0 commit comments

Comments
 (0)
Please sign in to comment.