From 2f9fcc999fab4ba6cd86c30e664325b47b9618e5 Mon Sep 17 00:00:00 2001 From: Aart Bik Date: Tue, 1 Mar 2016 15:16:54 -0800 Subject: [PATCH] Simplified intrinsic macro mechanism. Rationale: Reduces boiler-plate code in all intrinsics code generators. Also, the newly introduced "unreachable" macro provides a static verifier that we do not have unreachable and thus redundant code in the generators. In fact, this change exposes that the MIPS32 and MIPS64 rotation intrinsics (IntegerRotateRight, LongRotateRight, IntegerRotateLeft, LongRotateLeft) are unreachable, since they are handled as HIR constructs for all architectures. Thus the code can be removed. Change-Id: I0309799a0db580232137ded72bb8a7bbd45440a8 --- compiler/optimizing/intrinsics.h | 40 ++++ compiler/optimizing/intrinsics_arm.cc | 72 +++---- compiler/optimizing/intrinsics_arm64.cc | 50 ++--- compiler/optimizing/intrinsics_list.h | 2 +- compiler/optimizing/intrinsics_mips.cc | 346 ++++++------------------------- compiler/optimizing/intrinsics_mips64.cc | 218 ++++--------------- compiler/optimizing/intrinsics_x86.cc | 46 +--- compiler/optimizing/intrinsics_x86_64.cc | 33 +-- 8 files changed, 198 insertions(+), 609 deletions(-) diff --git a/compiler/optimizing/intrinsics.h b/compiler/optimizing/intrinsics.h index 2ab50bb43..0cec5ccfd 100644 --- a/compiler/optimizing/intrinsics.h +++ b/compiler/optimizing/intrinsics.h @@ -193,6 +193,46 @@ class SystemArrayCopyOptimizations : public IntrinsicOptimizations { #undef INTRISIC_OPTIMIZATION +// +// Macros for use in the intrinsics code generators. +// + +// Defines an unimplemented intrinsic: that is, a method call that is recognized as an +// intrinsic to exploit e.g. no side-effects or exceptions, but otherwise not handled +// by this architecture-specific intrinsics code generator. Eventually it is implemented +// as a true method call. +#define UNIMPLEMENTED_INTRINSIC(Arch, Name) \ +void IntrinsicLocationsBuilder ## Arch::Visit ## Name(HInvoke* invoke ATTRIBUTE_UNUSED) { \ +} \ +void IntrinsicCodeGenerator ## Arch::Visit ## Name(HInvoke* invoke ATTRIBUTE_UNUSED) { \ +} + +// Defines a list of unreached intrinsics: that is, method calls that are recognized as +// an intrinsic, and then always converted into HIR instructions before they reach any +// architecture-specific intrinsics code generator. +#define UNREACHABLE_INTRINSIC(Arch, Name) \ +void IntrinsicLocationsBuilder ## Arch::Visit ## Name(HInvoke* invoke) { \ + LOG(FATAL) << "Unreachable: intrinsic " << invoke->GetIntrinsic() \ + << " should have been converted to HIR"; \ +} \ +void IntrinsicCodeGenerator ## Arch::Visit ## Name(HInvoke* invoke) { \ + LOG(FATAL) << "Unreachable: intrinsic " << invoke->GetIntrinsic() \ + << " should have been converted to HIR"; \ +} +#define UNREACHABLE_INTRINSICS(Arch) \ +UNREACHABLE_INTRINSIC(Arch, FloatFloatToIntBits) \ +UNREACHABLE_INTRINSIC(Arch, DoubleDoubleToLongBits) \ +UNREACHABLE_INTRINSIC(Arch, FloatIsNaN) \ +UNREACHABLE_INTRINSIC(Arch, DoubleIsNaN) \ +UNREACHABLE_INTRINSIC(Arch, IntegerRotateLeft) \ +UNREACHABLE_INTRINSIC(Arch, LongRotateLeft) \ +UNREACHABLE_INTRINSIC(Arch, IntegerRotateRight) \ +UNREACHABLE_INTRINSIC(Arch, LongRotateRight) \ +UNREACHABLE_INTRINSIC(Arch, IntegerCompare) \ +UNREACHABLE_INTRINSIC(Arch, LongCompare) \ +UNREACHABLE_INTRINSIC(Arch, IntegerSignum) \ +UNREACHABLE_INTRINSIC(Arch, LongSignum) + } // namespace art #endif // ART_COMPILER_OPTIMIZING_INTRINSICS_H_ diff --git a/compiler/optimizing/intrinsics_arm.cc b/compiler/optimizing/intrinsics_arm.cc index 276085ef3..69c970852 100644 --- a/compiler/optimizing/intrinsics_arm.cc +++ b/compiler/optimizing/intrinsics_arm.cc @@ -1979,54 +1979,30 @@ void IntrinsicCodeGeneratorARM::VisitStringGetCharsNoCheck(HInvoke* invoke) { __ Bind(&done); } -// Unimplemented intrinsics. - -#define UNIMPLEMENTED_INTRINSIC(Name) \ -void IntrinsicLocationsBuilderARM::Visit ## Name(HInvoke* invoke ATTRIBUTE_UNUSED) { \ -} \ -void IntrinsicCodeGeneratorARM::Visit ## Name(HInvoke* invoke ATTRIBUTE_UNUSED) { \ -} - -UNIMPLEMENTED_INTRINSIC(IntegerBitCount) -UNIMPLEMENTED_INTRINSIC(LongBitCount) -UNIMPLEMENTED_INTRINSIC(MathMinDoubleDouble) -UNIMPLEMENTED_INTRINSIC(MathMinFloatFloat) -UNIMPLEMENTED_INTRINSIC(MathMaxDoubleDouble) -UNIMPLEMENTED_INTRINSIC(MathMaxFloatFloat) -UNIMPLEMENTED_INTRINSIC(MathMinLongLong) -UNIMPLEMENTED_INTRINSIC(MathMaxLongLong) -UNIMPLEMENTED_INTRINSIC(MathCeil) // Could be done by changing rounding mode, maybe? -UNIMPLEMENTED_INTRINSIC(MathFloor) // Could be done by changing rounding mode, maybe? -UNIMPLEMENTED_INTRINSIC(MathRint) -UNIMPLEMENTED_INTRINSIC(MathRoundDouble) // Could be done by changing rounding mode, maybe? -UNIMPLEMENTED_INTRINSIC(MathRoundFloat) // Could be done by changing rounding mode, maybe? -UNIMPLEMENTED_INTRINSIC(UnsafeCASLong) // High register pressure. -UNIMPLEMENTED_INTRINSIC(SystemArrayCopyChar) -UNIMPLEMENTED_INTRINSIC(ReferenceGetReferent) - -UNIMPLEMENTED_INTRINSIC(FloatIsInfinite) -UNIMPLEMENTED_INTRINSIC(DoubleIsInfinite) - -UNIMPLEMENTED_INTRINSIC(IntegerHighestOneBit) -UNIMPLEMENTED_INTRINSIC(LongHighestOneBit) -UNIMPLEMENTED_INTRINSIC(IntegerLowestOneBit) -UNIMPLEMENTED_INTRINSIC(LongLowestOneBit) - -// Handled as HIR instructions. -UNIMPLEMENTED_INTRINSIC(FloatFloatToIntBits) -UNIMPLEMENTED_INTRINSIC(DoubleDoubleToLongBits) -UNIMPLEMENTED_INTRINSIC(FloatIsNaN) -UNIMPLEMENTED_INTRINSIC(DoubleIsNaN) -UNIMPLEMENTED_INTRINSIC(IntegerRotateLeft) -UNIMPLEMENTED_INTRINSIC(LongRotateLeft) -UNIMPLEMENTED_INTRINSIC(IntegerRotateRight) -UNIMPLEMENTED_INTRINSIC(LongRotateRight) -UNIMPLEMENTED_INTRINSIC(IntegerCompare) -UNIMPLEMENTED_INTRINSIC(LongCompare) -UNIMPLEMENTED_INTRINSIC(IntegerSignum) -UNIMPLEMENTED_INTRINSIC(LongSignum) - -#undef UNIMPLEMENTED_INTRINSIC +UNIMPLEMENTED_INTRINSIC(ARM, IntegerBitCount) +UNIMPLEMENTED_INTRINSIC(ARM, LongBitCount) +UNIMPLEMENTED_INTRINSIC(ARM, MathMinDoubleDouble) +UNIMPLEMENTED_INTRINSIC(ARM, MathMinFloatFloat) +UNIMPLEMENTED_INTRINSIC(ARM, MathMaxDoubleDouble) +UNIMPLEMENTED_INTRINSIC(ARM, MathMaxFloatFloat) +UNIMPLEMENTED_INTRINSIC(ARM, MathMinLongLong) +UNIMPLEMENTED_INTRINSIC(ARM, MathMaxLongLong) +UNIMPLEMENTED_INTRINSIC(ARM, MathCeil) // Could be done by changing rounding mode, maybe? +UNIMPLEMENTED_INTRINSIC(ARM, MathFloor) // Could be done by changing rounding mode, maybe? +UNIMPLEMENTED_INTRINSIC(ARM, MathRint) +UNIMPLEMENTED_INTRINSIC(ARM, MathRoundDouble) // Could be done by changing rounding mode, maybe? +UNIMPLEMENTED_INTRINSIC(ARM, MathRoundFloat) // Could be done by changing rounding mode, maybe? +UNIMPLEMENTED_INTRINSIC(ARM, UnsafeCASLong) // High register pressure. +UNIMPLEMENTED_INTRINSIC(ARM, SystemArrayCopyChar) +UNIMPLEMENTED_INTRINSIC(ARM, ReferenceGetReferent) +UNIMPLEMENTED_INTRINSIC(ARM, FloatIsInfinite) +UNIMPLEMENTED_INTRINSIC(ARM, DoubleIsInfinite) +UNIMPLEMENTED_INTRINSIC(ARM, IntegerHighestOneBit) +UNIMPLEMENTED_INTRINSIC(ARM, LongHighestOneBit) +UNIMPLEMENTED_INTRINSIC(ARM, IntegerLowestOneBit) +UNIMPLEMENTED_INTRINSIC(ARM, LongLowestOneBit) + +UNREACHABLE_INTRINSICS(ARM) #undef __ diff --git a/compiler/optimizing/intrinsics_arm64.cc b/compiler/optimizing/intrinsics_arm64.cc index 9f9d8c493..7a4a6ef26 100644 --- a/compiler/optimizing/intrinsics_arm64.cc +++ b/compiler/optimizing/intrinsics_arm64.cc @@ -1672,43 +1672,19 @@ void IntrinsicCodeGeneratorARM64::VisitStringGetCharsNoCheck(HInvoke* invoke) { __ Bind(&done); } -// Unimplemented intrinsics. - -#define UNIMPLEMENTED_INTRINSIC(Name) \ -void IntrinsicLocationsBuilderARM64::Visit ## Name(HInvoke* invoke ATTRIBUTE_UNUSED) { \ -} \ -void IntrinsicCodeGeneratorARM64::Visit ## Name(HInvoke* invoke ATTRIBUTE_UNUSED) { \ -} - -UNIMPLEMENTED_INTRINSIC(IntegerBitCount) -UNIMPLEMENTED_INTRINSIC(LongBitCount) -UNIMPLEMENTED_INTRINSIC(SystemArrayCopyChar) -UNIMPLEMENTED_INTRINSIC(SystemArrayCopy) -UNIMPLEMENTED_INTRINSIC(ReferenceGetReferent) - -UNIMPLEMENTED_INTRINSIC(FloatIsInfinite) -UNIMPLEMENTED_INTRINSIC(DoubleIsInfinite) - -UNIMPLEMENTED_INTRINSIC(IntegerHighestOneBit) -UNIMPLEMENTED_INTRINSIC(LongHighestOneBit) -UNIMPLEMENTED_INTRINSIC(IntegerLowestOneBit) -UNIMPLEMENTED_INTRINSIC(LongLowestOneBit) - -// Handled as HIR instructions. -UNIMPLEMENTED_INTRINSIC(FloatFloatToIntBits) -UNIMPLEMENTED_INTRINSIC(DoubleDoubleToLongBits) -UNIMPLEMENTED_INTRINSIC(FloatIsNaN) -UNIMPLEMENTED_INTRINSIC(DoubleIsNaN) -UNIMPLEMENTED_INTRINSIC(IntegerRotateLeft) -UNIMPLEMENTED_INTRINSIC(LongRotateLeft) -UNIMPLEMENTED_INTRINSIC(IntegerRotateRight) -UNIMPLEMENTED_INTRINSIC(LongRotateRight) -UNIMPLEMENTED_INTRINSIC(IntegerCompare) -UNIMPLEMENTED_INTRINSIC(LongCompare) -UNIMPLEMENTED_INTRINSIC(IntegerSignum) -UNIMPLEMENTED_INTRINSIC(LongSignum) - -#undef UNIMPLEMENTED_INTRINSIC +UNIMPLEMENTED_INTRINSIC(ARM64, IntegerBitCount) +UNIMPLEMENTED_INTRINSIC(ARM64, LongBitCount) +UNIMPLEMENTED_INTRINSIC(ARM64, SystemArrayCopyChar) +UNIMPLEMENTED_INTRINSIC(ARM64, SystemArrayCopy) +UNIMPLEMENTED_INTRINSIC(ARM64, ReferenceGetReferent) +UNIMPLEMENTED_INTRINSIC(ARM64, FloatIsInfinite) +UNIMPLEMENTED_INTRINSIC(ARM64, DoubleIsInfinite) +UNIMPLEMENTED_INTRINSIC(ARM64, IntegerHighestOneBit) +UNIMPLEMENTED_INTRINSIC(ARM64, LongHighestOneBit) +UNIMPLEMENTED_INTRINSIC(ARM64, IntegerLowestOneBit) +UNIMPLEMENTED_INTRINSIC(ARM64, LongLowestOneBit) + +UNREACHABLE_INTRINSICS(ARM64) #undef __ diff --git a/compiler/optimizing/intrinsics_list.h b/compiler/optimizing/intrinsics_list.h index e1aea924c..b8933e168 100644 --- a/compiler/optimizing/intrinsics_list.h +++ b/compiler/optimizing/intrinsics_list.h @@ -19,7 +19,7 @@ // All intrinsics supported by the optimizing compiler. Format is name, then whether it is expected // to be a HInvokeStaticOrDirect node (compared to HInvokeVirtual), then whether it requires an -// environment. +// environment, may have side effects, or may throw exceptions. #define INTRINSICS_LIST(V) \ V(DoubleDoubleToRawLongBits, kStatic, kNeedsEnvironmentOrCache, kNoSideEffects, kNoThrow) \ diff --git a/compiler/optimizing/intrinsics_mips.cc b/compiler/optimizing/intrinsics_mips.cc index a737d8100..5a35dd57a 100644 --- a/compiler/optimizing/intrinsics_mips.cc +++ b/compiler/optimizing/intrinsics_mips.cc @@ -607,202 +607,6 @@ void IntrinsicCodeGeneratorMIPS::VisitLongNumberOfTrailingZeros(HInvoke* invoke) GetAssembler()); } -enum RotationDirection { - kRotateRight, - kRotateLeft, -}; - -static void GenRotate(HInvoke* invoke, - Primitive::Type type, - bool isR2OrNewer, - RotationDirection direction, - MipsAssembler* assembler) { - DCHECK(type == Primitive::kPrimInt || type == Primitive::kPrimLong); - - LocationSummary* locations = invoke->GetLocations(); - if (invoke->InputAt(1)->IsIntConstant()) { - int32_t shift = static_cast(invoke->InputAt(1)->AsIntConstant()->GetValue()); - if (type == Primitive::kPrimInt) { - Register in = locations->InAt(0).AsRegister(); - Register out = locations->Out().AsRegister(); - - shift &= 0x1f; - if (direction == kRotateLeft) { - shift = (32 - shift) & 0x1F; - } - - if (isR2OrNewer) { - if ((shift != 0) || (out != in)) { - __ Rotr(out, in, shift); - } - } else { - if (shift == 0) { - if (out != in) { - __ Move(out, in); - } - } else { - __ Srl(AT, in, shift); - __ Sll(out, in, 32 - shift); - __ Or(out, out, AT); - } - } - } else { // Primitive::kPrimLong - Register in_lo = locations->InAt(0).AsRegisterPairLow(); - Register in_hi = locations->InAt(0).AsRegisterPairHigh(); - Register out_lo = locations->Out().AsRegisterPairLow(); - Register out_hi = locations->Out().AsRegisterPairHigh(); - - shift &= 0x3f; - if (direction == kRotateLeft) { - shift = (64 - shift) & 0x3F; - } - - if (shift == 0) { - __ Move(out_lo, in_lo); - __ Move(out_hi, in_hi); - } else if (shift == 32) { - __ Move(out_lo, in_hi); - __ Move(out_hi, in_lo); - } else if (shift < 32) { - __ Srl(AT, in_lo, shift); - __ Sll(out_lo, in_hi, 32 - shift); - __ Or(out_lo, out_lo, AT); - __ Srl(AT, in_hi, shift); - __ Sll(out_hi, in_lo, 32 - shift); - __ Or(out_hi, out_hi, AT); - } else { - __ Sll(AT, in_lo, 64 - shift); - __ Srl(out_lo, in_hi, shift - 32); - __ Or(out_lo, out_lo, AT); - __ Sll(AT, in_hi, 64 - shift); - __ Srl(out_hi, in_lo, shift - 32); - __ Or(out_hi, out_hi, AT); - } - } - } else { // !invoke->InputAt(1)->IsIntConstant() - Register shamt = locations->InAt(1).AsRegister(); - if (type == Primitive::kPrimInt) { - Register in = locations->InAt(0).AsRegister(); - Register out = locations->Out().AsRegister(); - - if (isR2OrNewer) { - if (direction == kRotateRight) { - __ Rotrv(out, in, shamt); - } else { - // negu tmp, shamt - __ Subu(TMP, ZERO, shamt); - __ Rotrv(out, in, TMP); - } - } else { - if (direction == kRotateRight) { - __ Srlv(AT, in, shamt); - __ Subu(TMP, ZERO, shamt); - __ Sllv(out, in, TMP); - __ Or(out, out, AT); - } else { - __ Sllv(AT, in, shamt); - __ Subu(TMP, ZERO, shamt); - __ Srlv(out, in, TMP); - __ Or(out, out, AT); - } - } - } else { // Primitive::kPrimLong - Register in_lo = locations->InAt(0).AsRegisterPairLow(); - Register in_hi = locations->InAt(0).AsRegisterPairHigh(); - Register out_lo = locations->Out().AsRegisterPairLow(); - Register out_hi = locations->Out().AsRegisterPairHigh(); - - MipsLabel done; - - if (direction == kRotateRight) { - __ Nor(TMP, ZERO, shamt); - __ Srlv(AT, in_lo, shamt); - __ Sll(out_lo, in_hi, 1); - __ Sllv(out_lo, out_lo, TMP); - __ Or(out_lo, out_lo, AT); - __ Srlv(AT, in_hi, shamt); - __ Sll(out_hi, in_lo, 1); - __ Sllv(out_hi, out_hi, TMP); - __ Or(out_hi, out_hi, AT); - } else { - __ Nor(TMP, ZERO, shamt); - __ Sllv(AT, in_lo, shamt); - __ Srl(out_lo, in_hi, 1); - __ Srlv(out_lo, out_lo, TMP); - __ Or(out_lo, out_lo, AT); - __ Sllv(AT, in_hi, shamt); - __ Srl(out_hi, in_lo, 1); - __ Srlv(out_hi, out_hi, TMP); - __ Or(out_hi, out_hi, AT); - } - - __ Andi(TMP, shamt, 32); - __ Beqz(TMP, &done); - __ Move(TMP, out_hi); - __ Move(out_hi, out_lo); - __ Move(out_lo, TMP); - - __ Bind(&done); - } - } -} - -// int java.lang.Integer.rotateRight(int i, int distance) -void IntrinsicLocationsBuilderMIPS::VisitIntegerRotateRight(HInvoke* invoke) { - LocationSummary* locations = new (arena_) LocationSummary(invoke, - LocationSummary::kNoCall, - kIntrinsified); - locations->SetInAt(0, Location::RequiresRegister()); - locations->SetInAt(1, Location::RegisterOrConstant(invoke->InputAt(1))); - locations->SetOut(Location::RequiresRegister(), Location::kNoOutputOverlap); -} - -void IntrinsicCodeGeneratorMIPS::VisitIntegerRotateRight(HInvoke* invoke) { - GenRotate(invoke, Primitive::kPrimInt, IsR2OrNewer(), kRotateRight, GetAssembler()); -} - -// long java.lang.Long.rotateRight(long i, int distance) -void IntrinsicLocationsBuilderMIPS::VisitLongRotateRight(HInvoke* invoke) { - LocationSummary* locations = new (arena_) LocationSummary(invoke, - LocationSummary::kNoCall, - kIntrinsified); - locations->SetInAt(0, Location::RequiresRegister()); - locations->SetInAt(1, Location::RegisterOrConstant(invoke->InputAt(1))); - locations->SetOut(Location::RequiresRegister(), Location::kOutputOverlap); -} - -void IntrinsicCodeGeneratorMIPS::VisitLongRotateRight(HInvoke* invoke) { - GenRotate(invoke, Primitive::kPrimLong, IsR2OrNewer(), kRotateRight, GetAssembler()); -} - -// int java.lang.Integer.rotateLeft(int i, int distance) -void IntrinsicLocationsBuilderMIPS::VisitIntegerRotateLeft(HInvoke* invoke) { - LocationSummary* locations = new (arena_) LocationSummary(invoke, - LocationSummary::kNoCall, - kIntrinsified); - locations->SetInAt(0, Location::RequiresRegister()); - locations->SetInAt(1, Location::RegisterOrConstant(invoke->InputAt(1))); - locations->SetOut(Location::RequiresRegister(), Location::kNoOutputOverlap); -} - -void IntrinsicCodeGeneratorMIPS::VisitIntegerRotateLeft(HInvoke* invoke) { - GenRotate(invoke, Primitive::kPrimInt, IsR2OrNewer(), kRotateLeft, GetAssembler()); -} - -// long java.lang.Long.rotateLeft(long i, int distance) -void IntrinsicLocationsBuilderMIPS::VisitLongRotateLeft(HInvoke* invoke) { - LocationSummary* locations = new (arena_) LocationSummary(invoke, - LocationSummary::kNoCall, - kIntrinsified); - locations->SetInAt(0, Location::RequiresRegister()); - locations->SetInAt(1, Location::RegisterOrConstant(invoke->InputAt(1))); - locations->SetOut(Location::RequiresRegister(), Location::kOutputOverlap); -} - -void IntrinsicCodeGeneratorMIPS::VisitLongRotateLeft(HInvoke* invoke) { - GenRotate(invoke, Primitive::kPrimLong, IsR2OrNewer(), kRotateLeft, GetAssembler()); -} - // int java.lang.Integer.reverse(int) void IntrinsicLocationsBuilderMIPS::VisitIntegerReverse(HInvoke* invoke) { CreateIntToIntLocations(arena_, invoke); @@ -1698,90 +1502,72 @@ void IntrinsicCodeGeneratorMIPS::VisitStringEquals(HInvoke* invoke) { __ Bind(&end); } -// Unimplemented intrinsics. - -#define UNIMPLEMENTED_INTRINSIC(Name) \ -void IntrinsicLocationsBuilderMIPS::Visit ## Name(HInvoke* invoke ATTRIBUTE_UNUSED) { \ -} \ -void IntrinsicCodeGeneratorMIPS::Visit ## Name(HInvoke* invoke ATTRIBUTE_UNUSED) { \ -} - -UNIMPLEMENTED_INTRINSIC(IntegerBitCount) -UNIMPLEMENTED_INTRINSIC(LongBitCount) - -UNIMPLEMENTED_INTRINSIC(MathCeil) -UNIMPLEMENTED_INTRINSIC(MathFloor) -UNIMPLEMENTED_INTRINSIC(MathRint) -UNIMPLEMENTED_INTRINSIC(MathRoundDouble) -UNIMPLEMENTED_INTRINSIC(MathRoundFloat) -UNIMPLEMENTED_INTRINSIC(ThreadCurrentThread) -UNIMPLEMENTED_INTRINSIC(UnsafeGet) -UNIMPLEMENTED_INTRINSIC(UnsafeGetVolatile) -UNIMPLEMENTED_INTRINSIC(UnsafeGetLong) -UNIMPLEMENTED_INTRINSIC(UnsafeGetLongVolatile) -UNIMPLEMENTED_INTRINSIC(UnsafeGetObject) -UNIMPLEMENTED_INTRINSIC(UnsafeGetObjectVolatile) -UNIMPLEMENTED_INTRINSIC(UnsafePut) -UNIMPLEMENTED_INTRINSIC(UnsafePutOrdered) -UNIMPLEMENTED_INTRINSIC(UnsafePutVolatile) -UNIMPLEMENTED_INTRINSIC(UnsafePutObject) -UNIMPLEMENTED_INTRINSIC(UnsafePutObjectOrdered) -UNIMPLEMENTED_INTRINSIC(UnsafePutObjectVolatile) -UNIMPLEMENTED_INTRINSIC(UnsafePutLong) -UNIMPLEMENTED_INTRINSIC(UnsafePutLongOrdered) -UNIMPLEMENTED_INTRINSIC(UnsafePutLongVolatile) -UNIMPLEMENTED_INTRINSIC(UnsafeCASInt) -UNIMPLEMENTED_INTRINSIC(UnsafeCASLong) -UNIMPLEMENTED_INTRINSIC(UnsafeCASObject) -UNIMPLEMENTED_INTRINSIC(StringCompareTo) -UNIMPLEMENTED_INTRINSIC(StringIndexOf) -UNIMPLEMENTED_INTRINSIC(StringIndexOfAfter) -UNIMPLEMENTED_INTRINSIC(StringNewStringFromBytes) -UNIMPLEMENTED_INTRINSIC(StringNewStringFromChars) -UNIMPLEMENTED_INTRINSIC(StringNewStringFromString) - -UNIMPLEMENTED_INTRINSIC(ReferenceGetReferent) -UNIMPLEMENTED_INTRINSIC(StringGetCharsNoCheck) -UNIMPLEMENTED_INTRINSIC(SystemArrayCopyChar) -UNIMPLEMENTED_INTRINSIC(SystemArrayCopy) - -UNIMPLEMENTED_INTRINSIC(MathCos) -UNIMPLEMENTED_INTRINSIC(MathSin) -UNIMPLEMENTED_INTRINSIC(MathAcos) -UNIMPLEMENTED_INTRINSIC(MathAsin) -UNIMPLEMENTED_INTRINSIC(MathAtan) -UNIMPLEMENTED_INTRINSIC(MathAtan2) -UNIMPLEMENTED_INTRINSIC(MathCbrt) -UNIMPLEMENTED_INTRINSIC(MathCosh) -UNIMPLEMENTED_INTRINSIC(MathExp) -UNIMPLEMENTED_INTRINSIC(MathExpm1) -UNIMPLEMENTED_INTRINSIC(MathHypot) -UNIMPLEMENTED_INTRINSIC(MathLog) -UNIMPLEMENTED_INTRINSIC(MathLog10) -UNIMPLEMENTED_INTRINSIC(MathNextAfter) -UNIMPLEMENTED_INTRINSIC(MathSinh) -UNIMPLEMENTED_INTRINSIC(MathTan) -UNIMPLEMENTED_INTRINSIC(MathTanh) - -UNIMPLEMENTED_INTRINSIC(FloatIsInfinite) -UNIMPLEMENTED_INTRINSIC(DoubleIsInfinite) - -UNIMPLEMENTED_INTRINSIC(IntegerHighestOneBit) -UNIMPLEMENTED_INTRINSIC(LongHighestOneBit) -UNIMPLEMENTED_INTRINSIC(IntegerLowestOneBit) -UNIMPLEMENTED_INTRINSIC(LongLowestOneBit) - -// Handled as HIR instructions. -UNIMPLEMENTED_INTRINSIC(FloatFloatToIntBits) -UNIMPLEMENTED_INTRINSIC(DoubleDoubleToLongBits) -UNIMPLEMENTED_INTRINSIC(FloatIsNaN) -UNIMPLEMENTED_INTRINSIC(DoubleIsNaN) -UNIMPLEMENTED_INTRINSIC(IntegerCompare) -UNIMPLEMENTED_INTRINSIC(LongCompare) -UNIMPLEMENTED_INTRINSIC(IntegerSignum) -UNIMPLEMENTED_INTRINSIC(LongSignum) - -#undef UNIMPLEMENTED_INTRINSIC +UNIMPLEMENTED_INTRINSIC(MIPS, IntegerBitCount) +UNIMPLEMENTED_INTRINSIC(MIPS, LongBitCount) + +UNIMPLEMENTED_INTRINSIC(MIPS, MathCeil) +UNIMPLEMENTED_INTRINSIC(MIPS, MathFloor) +UNIMPLEMENTED_INTRINSIC(MIPS, MathRint) +UNIMPLEMENTED_INTRINSIC(MIPS, MathRoundDouble) +UNIMPLEMENTED_INTRINSIC(MIPS, MathRoundFloat) +UNIMPLEMENTED_INTRINSIC(MIPS, ThreadCurrentThread) +UNIMPLEMENTED_INTRINSIC(MIPS, UnsafeGet) +UNIMPLEMENTED_INTRINSIC(MIPS, UnsafeGetVolatile) +UNIMPLEMENTED_INTRINSIC(MIPS, UnsafeGetLong) +UNIMPLEMENTED_INTRINSIC(MIPS, UnsafeGetLongVolatile) +UNIMPLEMENTED_INTRINSIC(MIPS, UnsafeGetObject) +UNIMPLEMENTED_INTRINSIC(MIPS, UnsafeGetObjectVolatile) +UNIMPLEMENTED_INTRINSIC(MIPS, UnsafePut) +UNIMPLEMENTED_INTRINSIC(MIPS, UnsafePutOrdered) +UNIMPLEMENTED_INTRINSIC(MIPS, UnsafePutVolatile) +UNIMPLEMENTED_INTRINSIC(MIPS, UnsafePutObject) +UNIMPLEMENTED_INTRINSIC(MIPS, UnsafePutObjectOrdered) +UNIMPLEMENTED_INTRINSIC(MIPS, UnsafePutObjectVolatile) +UNIMPLEMENTED_INTRINSIC(MIPS, UnsafePutLong) +UNIMPLEMENTED_INTRINSIC(MIPS, UnsafePutLongOrdered) +UNIMPLEMENTED_INTRINSIC(MIPS, UnsafePutLongVolatile) +UNIMPLEMENTED_INTRINSIC(MIPS, UnsafeCASInt) +UNIMPLEMENTED_INTRINSIC(MIPS, UnsafeCASLong) +UNIMPLEMENTED_INTRINSIC(MIPS, UnsafeCASObject) +UNIMPLEMENTED_INTRINSIC(MIPS, StringCompareTo) +UNIMPLEMENTED_INTRINSIC(MIPS, StringIndexOf) +UNIMPLEMENTED_INTRINSIC(MIPS, StringIndexOfAfter) +UNIMPLEMENTED_INTRINSIC(MIPS, StringNewStringFromBytes) +UNIMPLEMENTED_INTRINSIC(MIPS, StringNewStringFromChars) +UNIMPLEMENTED_INTRINSIC(MIPS, StringNewStringFromString) + +UNIMPLEMENTED_INTRINSIC(MIPS, ReferenceGetReferent) +UNIMPLEMENTED_INTRINSIC(MIPS, StringGetCharsNoCheck) +UNIMPLEMENTED_INTRINSIC(MIPS, SystemArrayCopyChar) +UNIMPLEMENTED_INTRINSIC(MIPS, SystemArrayCopy) + +UNIMPLEMENTED_INTRINSIC(MIPS, MathCos) +UNIMPLEMENTED_INTRINSIC(MIPS, MathSin) +UNIMPLEMENTED_INTRINSIC(MIPS, MathAcos) +UNIMPLEMENTED_INTRINSIC(MIPS, MathAsin) +UNIMPLEMENTED_INTRINSIC(MIPS, MathAtan) +UNIMPLEMENTED_INTRINSIC(MIPS, MathAtan2) +UNIMPLEMENTED_INTRINSIC(MIPS, MathCbrt) +UNIMPLEMENTED_INTRINSIC(MIPS, MathCosh) +UNIMPLEMENTED_INTRINSIC(MIPS, MathExp) +UNIMPLEMENTED_INTRINSIC(MIPS, MathExpm1) +UNIMPLEMENTED_INTRINSIC(MIPS, MathHypot) +UNIMPLEMENTED_INTRINSIC(MIPS, MathLog) +UNIMPLEMENTED_INTRINSIC(MIPS, MathLog10) +UNIMPLEMENTED_INTRINSIC(MIPS, MathNextAfter) +UNIMPLEMENTED_INTRINSIC(MIPS, MathSinh) +UNIMPLEMENTED_INTRINSIC(MIPS, MathTan) +UNIMPLEMENTED_INTRINSIC(MIPS, MathTanh) + +UNIMPLEMENTED_INTRINSIC(MIPS, FloatIsInfinite) +UNIMPLEMENTED_INTRINSIC(MIPS, DoubleIsInfinite) + +UNIMPLEMENTED_INTRINSIC(MIPS, IntegerHighestOneBit) +UNIMPLEMENTED_INTRINSIC(MIPS, LongHighestOneBit) +UNIMPLEMENTED_INTRINSIC(MIPS, IntegerLowestOneBit) +UNIMPLEMENTED_INTRINSIC(MIPS, LongLowestOneBit) + +UNREACHABLE_INTRINSICS(MIPS) #undef __ diff --git a/compiler/optimizing/intrinsics_mips64.cc b/compiler/optimizing/intrinsics_mips64.cc index a7a256004..45611f0ac 100644 --- a/compiler/optimizing/intrinsics_mips64.cc +++ b/compiler/optimizing/intrinsics_mips64.cc @@ -340,130 +340,6 @@ void IntrinsicCodeGeneratorMIPS64::VisitLongNumberOfTrailingZeros(HInvoke* invok GenNumberOfTrailingZeroes(invoke->GetLocations(), /* is64bit */ true, GetAssembler()); } -static void GenRotateRight(HInvoke* invoke, - Primitive::Type type, - Mips64Assembler* assembler) { - DCHECK(type == Primitive::kPrimInt || type == Primitive::kPrimLong); - - LocationSummary* locations = invoke->GetLocations(); - GpuRegister in = locations->InAt(0).AsRegister(); - GpuRegister out = locations->Out().AsRegister(); - - if (invoke->InputAt(1)->IsIntConstant()) { - uint32_t shift = static_cast(invoke->InputAt(1)->AsIntConstant()->GetValue()); - if (type == Primitive::kPrimInt) { - shift &= 0x1f; - __ Rotr(out, in, shift); - } else { - shift &= 0x3f; - if (shift < 32) { - __ Drotr(out, in, shift); - } else { - shift &= 0x1f; - __ Drotr32(out, in, shift); - } - } - } else { - GpuRegister shamt = locations->InAt(1).AsRegister(); - if (type == Primitive::kPrimInt) { - __ Rotrv(out, in, shamt); - } else { - __ Drotrv(out, in, shamt); - } - } -} - -// int java.lang.Integer.rotateRight(int i, int distance) -void IntrinsicLocationsBuilderMIPS64::VisitIntegerRotateRight(HInvoke* invoke) { - LocationSummary* locations = new (arena_) LocationSummary(invoke, - LocationSummary::kNoCall, - kIntrinsified); - locations->SetInAt(0, Location::RequiresRegister()); - locations->SetInAt(1, Location::RegisterOrConstant(invoke->InputAt(1))); - locations->SetOut(Location::RequiresRegister(), Location::kNoOutputOverlap); -} - -void IntrinsicCodeGeneratorMIPS64::VisitIntegerRotateRight(HInvoke* invoke) { - GenRotateRight(invoke, Primitive::kPrimInt, GetAssembler()); -} - -// long java.lang.Long.rotateRight(long i, int distance) -void IntrinsicLocationsBuilderMIPS64::VisitLongRotateRight(HInvoke* invoke) { - LocationSummary* locations = new (arena_) LocationSummary(invoke, - LocationSummary::kNoCall, - kIntrinsified); - locations->SetInAt(0, Location::RequiresRegister()); - locations->SetInAt(1, Location::RegisterOrConstant(invoke->InputAt(1))); - locations->SetOut(Location::RequiresRegister(), Location::kNoOutputOverlap); -} - -void IntrinsicCodeGeneratorMIPS64::VisitLongRotateRight(HInvoke* invoke) { - GenRotateRight(invoke, Primitive::kPrimLong, GetAssembler()); -} - -static void GenRotateLeft(HInvoke* invoke, - Primitive::Type type, - Mips64Assembler* assembler) { - DCHECK(type == Primitive::kPrimInt || type == Primitive::kPrimLong); - - LocationSummary* locations = invoke->GetLocations(); - GpuRegister in = locations->InAt(0).AsRegister(); - GpuRegister out = locations->Out().AsRegister(); - - if (invoke->InputAt(1)->IsIntConstant()) { - int32_t shift = -static_cast(invoke->InputAt(1)->AsIntConstant()->GetValue()); - if (type == Primitive::kPrimInt) { - shift &= 0x1f; - __ Rotr(out, in, shift); - } else { - shift &= 0x3f; - if (shift < 32) { - __ Drotr(out, in, shift); - } else { - shift &= 0x1f; - __ Drotr32(out, in, shift); - } - } - } else { - GpuRegister shamt = locations->InAt(1).AsRegister(); - if (type == Primitive::kPrimInt) { - __ Subu(TMP, ZERO, shamt); - __ Rotrv(out, in, TMP); - } else { - __ Dsubu(TMP, ZERO, shamt); - __ Drotrv(out, in, TMP); - } - } -} - -// int java.lang.Integer.rotateLeft(int i, int distance) -void IntrinsicLocationsBuilderMIPS64::VisitIntegerRotateLeft(HInvoke* invoke) { - LocationSummary* locations = new (arena_) LocationSummary(invoke, - LocationSummary::kNoCall, - kIntrinsified); - locations->SetInAt(0, Location::RequiresRegister()); - locations->SetInAt(1, Location::RegisterOrConstant(invoke->InputAt(1))); - locations->SetOut(Location::RequiresRegister(), Location::kNoOutputOverlap); -} - -void IntrinsicCodeGeneratorMIPS64::VisitIntegerRotateLeft(HInvoke* invoke) { - GenRotateLeft(invoke, Primitive::kPrimInt, GetAssembler()); -} - -// long java.lang.Long.rotateLeft(long i, int distance) -void IntrinsicLocationsBuilderMIPS64::VisitLongRotateLeft(HInvoke* invoke) { - LocationSummary* locations = new (arena_) LocationSummary(invoke, - LocationSummary::kNoCall, - kIntrinsified); - locations->SetInAt(0, Location::RequiresRegister()); - locations->SetInAt(1, Location::RegisterOrConstant(invoke->InputAt(1))); - locations->SetOut(Location::RequiresRegister(), Location::kNoOutputOverlap); -} - -void IntrinsicCodeGeneratorMIPS64::VisitLongRotateLeft(HInvoke* invoke) { - GenRotateLeft(invoke, Primitive::kPrimLong, GetAssembler()); -} - static void GenReverse(LocationSummary* locations, Primitive::Type type, Mips64Assembler* assembler) { @@ -1785,62 +1661,44 @@ void IntrinsicCodeGeneratorMIPS64::VisitStringNewStringFromString(HInvoke* invok __ Bind(slow_path->GetExitLabel()); } -// Unimplemented intrinsics. - -#define UNIMPLEMENTED_INTRINSIC(Name) \ -void IntrinsicLocationsBuilderMIPS64::Visit ## Name(HInvoke* invoke ATTRIBUTE_UNUSED) { \ -} \ -void IntrinsicCodeGeneratorMIPS64::Visit ## Name(HInvoke* invoke ATTRIBUTE_UNUSED) { \ -} - -UNIMPLEMENTED_INTRINSIC(IntegerBitCount) -UNIMPLEMENTED_INTRINSIC(LongBitCount) - -UNIMPLEMENTED_INTRINSIC(MathRoundDouble) -UNIMPLEMENTED_INTRINSIC(MathRoundFloat) - -UNIMPLEMENTED_INTRINSIC(ReferenceGetReferent) -UNIMPLEMENTED_INTRINSIC(StringGetCharsNoCheck) -UNIMPLEMENTED_INTRINSIC(SystemArrayCopyChar) -UNIMPLEMENTED_INTRINSIC(SystemArrayCopy) - -UNIMPLEMENTED_INTRINSIC(MathCos) -UNIMPLEMENTED_INTRINSIC(MathSin) -UNIMPLEMENTED_INTRINSIC(MathAcos) -UNIMPLEMENTED_INTRINSIC(MathAsin) -UNIMPLEMENTED_INTRINSIC(MathAtan) -UNIMPLEMENTED_INTRINSIC(MathAtan2) -UNIMPLEMENTED_INTRINSIC(MathCbrt) -UNIMPLEMENTED_INTRINSIC(MathCosh) -UNIMPLEMENTED_INTRINSIC(MathExp) -UNIMPLEMENTED_INTRINSIC(MathExpm1) -UNIMPLEMENTED_INTRINSIC(MathHypot) -UNIMPLEMENTED_INTRINSIC(MathLog) -UNIMPLEMENTED_INTRINSIC(MathLog10) -UNIMPLEMENTED_INTRINSIC(MathNextAfter) -UNIMPLEMENTED_INTRINSIC(MathSinh) -UNIMPLEMENTED_INTRINSIC(MathTan) -UNIMPLEMENTED_INTRINSIC(MathTanh) - -UNIMPLEMENTED_INTRINSIC(FloatIsInfinite) -UNIMPLEMENTED_INTRINSIC(DoubleIsInfinite) - -UNIMPLEMENTED_INTRINSIC(IntegerHighestOneBit) -UNIMPLEMENTED_INTRINSIC(LongHighestOneBit) -UNIMPLEMENTED_INTRINSIC(IntegerLowestOneBit) -UNIMPLEMENTED_INTRINSIC(LongLowestOneBit) - -// Handled as HIR instructions. -UNIMPLEMENTED_INTRINSIC(FloatFloatToIntBits) -UNIMPLEMENTED_INTRINSIC(DoubleDoubleToLongBits) -UNIMPLEMENTED_INTRINSIC(FloatIsNaN) -UNIMPLEMENTED_INTRINSIC(DoubleIsNaN) -UNIMPLEMENTED_INTRINSIC(IntegerCompare) -UNIMPLEMENTED_INTRINSIC(LongCompare) -UNIMPLEMENTED_INTRINSIC(IntegerSignum) -UNIMPLEMENTED_INTRINSIC(LongSignum) - -#undef UNIMPLEMENTED_INTRINSIC +UNIMPLEMENTED_INTRINSIC(MIPS64, IntegerBitCount) +UNIMPLEMENTED_INTRINSIC(MIPS64, LongBitCount) + +UNIMPLEMENTED_INTRINSIC(MIPS64, MathRoundDouble) +UNIMPLEMENTED_INTRINSIC(MIPS64, MathRoundFloat) + +UNIMPLEMENTED_INTRINSIC(MIPS64, ReferenceGetReferent) +UNIMPLEMENTED_INTRINSIC(MIPS64, StringGetCharsNoCheck) +UNIMPLEMENTED_INTRINSIC(MIPS64, SystemArrayCopyChar) +UNIMPLEMENTED_INTRINSIC(MIPS64, SystemArrayCopy) + +UNIMPLEMENTED_INTRINSIC(MIPS64, MathCos) +UNIMPLEMENTED_INTRINSIC(MIPS64, MathSin) +UNIMPLEMENTED_INTRINSIC(MIPS64, MathAcos) +UNIMPLEMENTED_INTRINSIC(MIPS64, MathAsin) +UNIMPLEMENTED_INTRINSIC(MIPS64, MathAtan) +UNIMPLEMENTED_INTRINSIC(MIPS64, MathAtan2) +UNIMPLEMENTED_INTRINSIC(MIPS64, MathCbrt) +UNIMPLEMENTED_INTRINSIC(MIPS64, MathCosh) +UNIMPLEMENTED_INTRINSIC(MIPS64, MathExp) +UNIMPLEMENTED_INTRINSIC(MIPS64, MathExpm1) +UNIMPLEMENTED_INTRINSIC(MIPS64, MathHypot) +UNIMPLEMENTED_INTRINSIC(MIPS64, MathLog) +UNIMPLEMENTED_INTRINSIC(MIPS64, MathLog10) +UNIMPLEMENTED_INTRINSIC(MIPS64, MathNextAfter) +UNIMPLEMENTED_INTRINSIC(MIPS64, MathSinh) +UNIMPLEMENTED_INTRINSIC(MIPS64, MathTan) +UNIMPLEMENTED_INTRINSIC(MIPS64, MathTanh) + +UNIMPLEMENTED_INTRINSIC(MIPS64, FloatIsInfinite) +UNIMPLEMENTED_INTRINSIC(MIPS64, DoubleIsInfinite) + +UNIMPLEMENTED_INTRINSIC(MIPS64, IntegerHighestOneBit) +UNIMPLEMENTED_INTRINSIC(MIPS64, LongHighestOneBit) +UNIMPLEMENTED_INTRINSIC(MIPS64, IntegerLowestOneBit) +UNIMPLEMENTED_INTRINSIC(MIPS64, LongLowestOneBit) + +UNREACHABLE_INTRINSICS(MIPS64) #undef __ diff --git a/compiler/optimizing/intrinsics_x86.cc b/compiler/optimizing/intrinsics_x86.cc index bfa4e374f..9a2dc4182 100644 --- a/compiler/optimizing/intrinsics_x86.cc +++ b/compiler/optimizing/intrinsics_x86.cc @@ -2627,41 +2627,17 @@ void IntrinsicCodeGeneratorX86::VisitLongNumberOfTrailingZeros(HInvoke* invoke) GenTrailingZeros(GetAssembler(), codegen_, invoke, /* is_long */ true); } -// Unimplemented intrinsics. - -#define UNIMPLEMENTED_INTRINSIC(Name) \ -void IntrinsicLocationsBuilderX86::Visit ## Name(HInvoke* invoke ATTRIBUTE_UNUSED) { \ -} \ -void IntrinsicCodeGeneratorX86::Visit ## Name(HInvoke* invoke ATTRIBUTE_UNUSED) { \ -} - -UNIMPLEMENTED_INTRINSIC(MathRoundDouble) -UNIMPLEMENTED_INTRINSIC(ReferenceGetReferent) -UNIMPLEMENTED_INTRINSIC(SystemArrayCopy) - -UNIMPLEMENTED_INTRINSIC(FloatIsInfinite) -UNIMPLEMENTED_INTRINSIC(DoubleIsInfinite) - -UNIMPLEMENTED_INTRINSIC(IntegerHighestOneBit) -UNIMPLEMENTED_INTRINSIC(LongHighestOneBit) -UNIMPLEMENTED_INTRINSIC(IntegerLowestOneBit) -UNIMPLEMENTED_INTRINSIC(LongLowestOneBit) - -// Handled as HIR instructions. -UNIMPLEMENTED_INTRINSIC(FloatFloatToIntBits) -UNIMPLEMENTED_INTRINSIC(DoubleDoubleToLongBits) -UNIMPLEMENTED_INTRINSIC(FloatIsNaN) -UNIMPLEMENTED_INTRINSIC(DoubleIsNaN) -UNIMPLEMENTED_INTRINSIC(IntegerRotateLeft) -UNIMPLEMENTED_INTRINSIC(LongRotateLeft) -UNIMPLEMENTED_INTRINSIC(IntegerRotateRight) -UNIMPLEMENTED_INTRINSIC(LongRotateRight) -UNIMPLEMENTED_INTRINSIC(IntegerCompare) -UNIMPLEMENTED_INTRINSIC(LongCompare) -UNIMPLEMENTED_INTRINSIC(IntegerSignum) -UNIMPLEMENTED_INTRINSIC(LongSignum) - -#undef UNIMPLEMENTED_INTRINSIC +UNIMPLEMENTED_INTRINSIC(X86, MathRoundDouble) +UNIMPLEMENTED_INTRINSIC(X86, ReferenceGetReferent) +UNIMPLEMENTED_INTRINSIC(X86, SystemArrayCopy) +UNIMPLEMENTED_INTRINSIC(X86, FloatIsInfinite) +UNIMPLEMENTED_INTRINSIC(X86, DoubleIsInfinite) +UNIMPLEMENTED_INTRINSIC(X86, IntegerHighestOneBit) +UNIMPLEMENTED_INTRINSIC(X86, LongHighestOneBit) +UNIMPLEMENTED_INTRINSIC(X86, IntegerLowestOneBit) +UNIMPLEMENTED_INTRINSIC(X86, LongLowestOneBit) + +UNREACHABLE_INTRINSICS(X86) #undef __ diff --git a/compiler/optimizing/intrinsics_x86_64.cc b/compiler/optimizing/intrinsics_x86_64.cc index 15c399712..75204b4b4 100644 --- a/compiler/optimizing/intrinsics_x86_64.cc +++ b/compiler/optimizing/intrinsics_x86_64.cc @@ -2711,34 +2711,11 @@ void IntrinsicCodeGeneratorX86_64::VisitLongNumberOfTrailingZeros(HInvoke* invok GenTrailingZeros(GetAssembler(), codegen_, invoke, /* is_long */ true); } -// Unimplemented intrinsics. - -#define UNIMPLEMENTED_INTRINSIC(Name) \ -void IntrinsicLocationsBuilderX86_64::Visit ## Name(HInvoke* invoke ATTRIBUTE_UNUSED) { \ -} \ -void IntrinsicCodeGeneratorX86_64::Visit ## Name(HInvoke* invoke ATTRIBUTE_UNUSED) { \ -} - -UNIMPLEMENTED_INTRINSIC(ReferenceGetReferent) - -UNIMPLEMENTED_INTRINSIC(FloatIsInfinite) -UNIMPLEMENTED_INTRINSIC(DoubleIsInfinite) - -// Handled as HIR instructions. -UNIMPLEMENTED_INTRINSIC(FloatFloatToIntBits) -UNIMPLEMENTED_INTRINSIC(DoubleDoubleToLongBits) -UNIMPLEMENTED_INTRINSIC(FloatIsNaN) -UNIMPLEMENTED_INTRINSIC(DoubleIsNaN) -UNIMPLEMENTED_INTRINSIC(IntegerRotateLeft) -UNIMPLEMENTED_INTRINSIC(LongRotateLeft) -UNIMPLEMENTED_INTRINSIC(IntegerRotateRight) -UNIMPLEMENTED_INTRINSIC(LongRotateRight) -UNIMPLEMENTED_INTRINSIC(IntegerCompare) -UNIMPLEMENTED_INTRINSIC(LongCompare) -UNIMPLEMENTED_INTRINSIC(IntegerSignum) -UNIMPLEMENTED_INTRINSIC(LongSignum) - -#undef UNIMPLEMENTED_INTRINSIC +UNIMPLEMENTED_INTRINSIC(X86_64, ReferenceGetReferent) +UNIMPLEMENTED_INTRINSIC(X86_64, FloatIsInfinite) +UNIMPLEMENTED_INTRINSIC(X86_64, DoubleIsInfinite) + +UNREACHABLE_INTRINSICS(X86_64) #undef __ -- 2.11.0