Add entrypoint type information.
For some of the runtime calls we do not need to generate stack maps. For
example, the Optimizing compiler implements HRem Floating Point by
calling libm's fmod().
Since this is a leaf method that does not suspend the execution, we do
not need to treat the fmod() invoke as a possible suspend point and thus
we do not need to create a stack map for the particular PC.
For now conservatively only tag the maths runtime entrypoints with this
information.
Test: m test-art-target
Change-Id: Iab73dcf8047d2edaa7a570113ee792e46ccbc464
diff --git a/runtime/entrypoints/quick/quick_entrypoints_enum.cc b/runtime/entrypoints/quick/quick_entrypoints_enum.cc
new file mode 100644
index 0000000..5153f0f
--- /dev/null
+++ b/runtime/entrypoints/quick/quick_entrypoints_enum.cc
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "quick_entrypoints_enum.h"
+
+namespace art {
+
+bool EntrypointRequiresStackMap(QuickEntrypointEnum trampoline) {
+ // Entrypoints that do not require a stackmap. In general leaf methods
+ // outside of the VM that are not safepoints.
+ switch (trampoline) {
+ // Listed in the same order as in quick_entrypoints_list.h.
+ case kQuickCmpgDouble:
+ case kQuickCmpgFloat:
+ case kQuickCmplDouble:
+ case kQuickCmplFloat:
+ case kQuickCos:
+ case kQuickSin:
+ case kQuickAcos:
+ case kQuickAsin:
+ case kQuickAtan:
+ case kQuickAtan2:
+ case kQuickCbrt:
+ case kQuickCosh:
+ case kQuickExp:
+ case kQuickExpm1:
+ case kQuickHypot:
+ case kQuickLog:
+ case kQuickLog10:
+ case kQuickNextAfter:
+ case kQuickSinh:
+ case kQuickTan:
+ case kQuickTanh:
+ case kQuickFmod:
+ case kQuickL2d:
+ case kQuickFmodf:
+ case kQuickL2f:
+ case kQuickD2iz:
+ case kQuickF2iz:
+ case kQuickIdivmod:
+ case kQuickD2l:
+ case kQuickF2l:
+ case kQuickLdiv:
+ case kQuickLmod:
+ case kQuickLmul:
+ case kQuickShlLong:
+ case kQuickShrLong:
+ case kQuickUshrLong:
+ return false;
+
+ default:
+ return true;
+ }
+}
+
+} // namespace art