summaryrefslogtreecommitdiff
path: root/compiler/optimizing/optimization.h
diff options
context:
space:
mode:
authorVladimir Marko <vmarko@google.com>2020-08-05 12:20:28 +0100
committerTreehugger Robot <treehugger-gerrit@google.com>2020-08-10 09:17:34 +0000
commitd3e9c62976780e830da79ae32be4192dee196db2 (patch)
treebf7855545f49ea039c6824d340ce2a162ad40ebd /compiler/optimizing/optimization.h
parent60ef3997cbcd866c505e51ecde7f06a0535110a0 (diff)
ARM: Allow FP args in core regs for @CriticalNative.
If a float or double argument needs to be passed in core register to a @CriticalNative method due to soft-float native ABI, insert a fake call to Float.floatToRawIntBits() or Double.doubleToRawLongBits() to satisfy type checks in the compiler. We cannot do that for intrinsics that expect those inputs in actual FP registers, so we still prevent such intrinsics from using `kCallCriticalNative`. This should be irrelevant if an actual intrinsic implementation is emitted. There are currently two unimplemented intrinsics that are affected by the carve-out, namely MathRoundDouble and FP16ToHalf, and four intrinsics implemented only when ARMv8A is supported, namely MathRint, MathRoundFloat, MathCeil and MathFloor. Test: testrunner.py --target --32 -t 178-app-image-native-method Bug: 112189621 Change-Id: Id14ef4f49f8a0e6489f97dc9588c0e6a5c122632
Diffstat (limited to 'compiler/optimizing/optimization.h')
-rw-r--r--compiler/optimizing/optimization.h1
1 files changed, 1 insertions, 0 deletions
diff --git a/compiler/optimizing/optimization.h b/compiler/optimizing/optimization.h
index f8aea9680d..2113df0c81 100644
--- a/compiler/optimizing/optimization.h
+++ b/compiler/optimizing/optimization.h
@@ -85,6 +85,7 @@ enum class OptimizationPass {
kSideEffectsAnalysis,
#ifdef ART_ENABLE_CODEGEN_arm
kInstructionSimplifierArm,
+ kCriticalNativeAbiFixupArm,
#endif
#ifdef ART_ENABLE_CODEGEN_arm64
kInstructionSimplifierArm64,