From: Joerg Sonnenberger Date: Mon, 4 Aug 2014 17:07:41 +0000 (+0000) Subject: Add support for m[ft][di]bat[ul] instructions. X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=df64464ad20712f82e878aea46235d6e92945d29;p=oota-llvm.git Add support for m[ft][di]bat[ul] instructions. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@214731 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Target/PowerPC/PPC.td b/lib/Target/PowerPC/PPC.td index 87691d014b7..d221bd84f85 100644 --- a/lib/Target/PowerPC/PPC.td +++ b/lib/Target/PowerPC/PPC.td @@ -92,6 +92,8 @@ def FeatureE500 : SubtargetFeature<"E500", "IsE500", "true", "Enable E500/E500mc instructions">; def FeaturePPC4xx : SubtargetFeature<"ppc4xx", "IsPPC4xx", "true", "Enable PPC 4xx instructions">; +def FeaturePPC6xx : SubtargetFeature<"ppc6xx", "IsPPC6xx", "true", + "Enable PPC 6xx instructions">; def FeatureQPX : SubtargetFeature<"qpx","HasQPX", "true", "Enable QPX instructions">; def FeatureVSX : SubtargetFeature<"vsx","HasVSX", "true", diff --git a/lib/Target/PowerPC/PPCInstrInfo.td b/lib/Target/PowerPC/PPCInstrInfo.td index f6e3e662b0e..2f6c8dcdcb7 100644 --- a/lib/Target/PowerPC/PPCInstrInfo.td +++ b/lib/Target/PowerPC/PPCInstrInfo.td @@ -630,6 +630,7 @@ def In64BitMode : Predicate<"PPCSubTarget->isPPC64()">; def IsBookE : Predicate<"PPCSubTarget->isBookE()">; def IsNotBookE : Predicate<"!PPCSubTarget->isBookE()">; def IsPPC4xx : Predicate<"PPCSubTarget->isPPC4xx()">; +def IsPPC6xx : Predicate<"PPCSubTarget->isPPC6xx()">; def IsE500 : Predicate<"PPCSubTarget->isE500()">; //===----------------------------------------------------------------------===// @@ -3219,6 +3220,33 @@ def : InstAlias<"not. $rA, $rB", (NOR8o g8rc:$rA, g8rc:$rB, g8rc:$rB)>; def : InstAlias<"mtcr $rA", (MTCRF8 255, g8rc:$rA)>; +foreach BATR = 0-3 in { + def : InstAlias<"mtdbatu "#BATR#", $Rx", + (MTSPR !add(BATR, !add(BATR, 536)), gprc:$Rx)>, + Requires<[IsPPC6xx]>; + def : InstAlias<"mfdbatu $Rx, "#BATR, + (MFSPR gprc:$Rx, !add(BATR, !add(BATR, 536)))>, + Requires<[IsPPC6xx]>; + def : InstAlias<"mtdbatl "#BATR#", $Rx", + (MTSPR !add(BATR, !add(BATR, 537)), gprc:$Rx)>, + Requires<[IsPPC6xx]>; + def : InstAlias<"mfdbatl $Rx, "#BATR, + (MFSPR gprc:$Rx, !add(BATR, !add(BATR, 537)))>, + Requires<[IsPPC6xx]>; + def : InstAlias<"mtibatu "#BATR#", $Rx", + (MTSPR !add(BATR, !add(BATR, 528)), gprc:$Rx)>, + Requires<[IsPPC6xx]>; + def : InstAlias<"mfibatu $Rx, "#BATR, + (MFSPR gprc:$Rx, !add(BATR, !add(BATR, 528)))>, + Requires<[IsPPC6xx]>; + def : InstAlias<"mtibatl "#BATR#", $Rx", + (MTSPR !add(BATR, !add(BATR, 529)), gprc:$Rx)>, + Requires<[IsPPC6xx]>; + def : InstAlias<"mfibatl $Rx, "#BATR, + (MFSPR gprc:$Rx, !add(BATR, !add(BATR, 529)))>, + Requires<[IsPPC6xx]>; +} + def LAx : PPCAsmPseudo<"la $rA, $addr", (ins gprc:$rA, memri:$addr)>; def SUBI : PPCAsmPseudo<"subi $rA, $rB, $imm", diff --git a/lib/Target/PowerPC/PPCSubtarget.cpp b/lib/Target/PowerPC/PPCSubtarget.cpp index f8059dacdfd..2eac0f54598 100644 --- a/lib/Target/PowerPC/PPCSubtarget.cpp +++ b/lib/Target/PowerPC/PPCSubtarget.cpp @@ -137,6 +137,7 @@ void PPCSubtarget::initializeEnvironment() { HasLDBRX = false; IsBookE = false; IsPPC4xx = false; + IsPPC6xx = false; IsE500 = false; DeprecatedMFTB = false; DeprecatedDST = false; diff --git a/lib/Target/PowerPC/PPCSubtarget.h b/lib/Target/PowerPC/PPCSubtarget.h index d5d4ab265ae..d5042516838 100644 --- a/lib/Target/PowerPC/PPCSubtarget.h +++ b/lib/Target/PowerPC/PPCSubtarget.h @@ -99,6 +99,7 @@ protected: bool IsBookE; bool IsE500; bool IsPPC4xx; + bool IsPPC6xx; bool DeprecatedMFTB; bool DeprecatedDST; bool HasLazyResolverStubs; @@ -221,6 +222,7 @@ public: bool hasLDBRX() const { return HasLDBRX; } bool isBookE() const { return IsBookE; } bool isPPC4xx() const { return IsPPC4xx; } + bool isPPC6xx() const { return IsPPC6xx; } bool isE500() const { return IsE500; } bool isDeprecatedMFTB() const { return DeprecatedMFTB; } bool isDeprecatedDST() const { return DeprecatedDST; } diff --git a/test/MC/PowerPC/ppc64-encoding-6xx.s b/test/MC/PowerPC/ppc64-encoding-6xx.s new file mode 100644 index 00000000000..699c58eb0f7 --- /dev/null +++ b/test/MC/PowerPC/ppc64-encoding-6xx.s @@ -0,0 +1,102 @@ +# RUN: llvm-mc -triple powerpc64-unknown-unknown --show-encoding %s | FileCheck -check-prefix=CHECK-BE %s +# RUN: llvm-mc -triple powerpc64le-unknown-unknown --show-encoding %s | FileCheck -check-prefix=CHECK-LE %s + +# Instructions specific to the PowerPC 6xx family: + +# CHECK-BE: mfspr 12, 528 # encoding: [0x7d,0x90,0x82,0xa6] +# CHECK-LE: mfspr 12, 528 # encoding: [0xa6,0x82,0x90,0x7d] +mfibatu %r12, 0 +# CHECK-BE: mfspr 12, 529 # encoding: [0x7d,0x91,0x82,0xa6] +# CHECK-LE: mfspr 12, 529 # encoding: [0xa6,0x82,0x91,0x7d] +mfibatl %r12, 0 +# CHECK-BE: mfspr 12, 530 # encoding: [0x7d,0x92,0x82,0xa6] +# CHECK-LE: mfspr 12, 530 # encoding: [0xa6,0x82,0x92,0x7d] +mfibatu %r12, 1 +# CHECK-BE: mfspr 12, 531 # encoding: [0x7d,0x93,0x82,0xa6] +# CHECK-LE: mfspr 12, 531 # encoding: [0xa6,0x82,0x93,0x7d] +mfibatl %r12, 1 +# CHECK-BE: mfspr 12, 532 # encoding: [0x7d,0x94,0x82,0xa6] +# CHECK-LE: mfspr 12, 532 # encoding: [0xa6,0x82,0x94,0x7d] +mfibatu %r12, 2 +# CHECK-BE: mfspr 12, 533 # encoding: [0x7d,0x95,0x82,0xa6] +# CHECK-LE: mfspr 12, 533 # encoding: [0xa6,0x82,0x95,0x7d] +mfibatl %r12, 2 +# CHECK-BE: mfspr 12, 534 # encoding: [0x7d,0x96,0x82,0xa6] +# CHECK-LE: mfspr 12, 534 # encoding: [0xa6,0x82,0x96,0x7d] +mfibatu %r12, 3 +# CHECK-BE: mfspr 12, 535 # encoding: [0x7d,0x97,0x82,0xa6] +# CHECK-LE: mfspr 12, 535 # encoding: [0xa6,0x82,0x97,0x7d] +mfibatl %r12, 3 +# CHECK-BE: mtspr 528, 12 # encoding: [0x7d,0x90,0x83,0xa6] +# CHECK-LE: mtspr 528, 12 # encoding: [0xa6,0x83,0x90,0x7d] +mtibatu 0, %r12 +# CHECK-BE: mtspr 529, 12 # encoding: [0x7d,0x91,0x83,0xa6] +# CHECK-LE: mtspr 529, 12 # encoding: [0xa6,0x83,0x91,0x7d] +mtibatl 0, %r12 +# CHECK-BE: mtspr 530, 12 # encoding: [0x7d,0x92,0x83,0xa6] +# CHECK-LE: mtspr 530, 12 # encoding: [0xa6,0x83,0x92,0x7d] +mtibatu 1, %r12 +# CHECK-BE: mtspr 531, 12 # encoding: [0x7d,0x93,0x83,0xa6] +# CHECK-LE: mtspr 531, 12 # encoding: [0xa6,0x83,0x93,0x7d] +mtibatl 1, %r12 +# CHECK-BE: mtspr 532, 12 # encoding: [0x7d,0x94,0x83,0xa6] +# CHECK-LE: mtspr 532, 12 # encoding: [0xa6,0x83,0x94,0x7d] +mtibatu 2, %r12 +# CHECK-BE: mtspr 533, 12 # encoding: [0x7d,0x95,0x83,0xa6] +# CHECK-LE: mtspr 533, 12 # encoding: [0xa6,0x83,0x95,0x7d] +mtibatl 2, %r12 +# CHECK-BE: mtspr 534, 12 # encoding: [0x7d,0x96,0x83,0xa6] +# CHECK-LE: mtspr 534, 12 # encoding: [0xa6,0x83,0x96,0x7d] +mtibatu 3, %r12 +# CHECK-BE: mtspr 535, 12 # encoding: [0x7d,0x97,0x83,0xa6] +# CHECK-LE: mtspr 535, 12 # encoding: [0xa6,0x83,0x97,0x7d] +mtibatl 3, %r12 + +# CHECK-BE: mfspr 12, 536 # encoding: [0x7d,0x98,0x82,0xa6] +# CHECK-LE: mfspr 12, 536 # encoding: [0xa6,0x82,0x98,0x7d] +mfdbatu %r12, 0 +# CHECK-BE: mfspr 12, 537 # encoding: [0x7d,0x99,0x82,0xa6] +# CHECK-LE: mfspr 12, 537 # encoding: [0xa6,0x82,0x99,0x7d] +mfdbatl %r12, 0 +# CHECK-BE: mfspr 12, 538 # encoding: [0x7d,0x9a,0x82,0xa6] +# CHECK-LE: mfspr 12, 538 # encoding: [0xa6,0x82,0x9a,0x7d] +mfdbatu %r12, 1 +# CHECK-BE: mfspr 12, 539 # encoding: [0x7d,0x9b,0x82,0xa6] +# CHECK-LE: mfspr 12, 539 # encoding: [0xa6,0x82,0x9b,0x7d] +mfdbatl %r12, 1 +# CHECK-BE: mfspr 12, 540 # encoding: [0x7d,0x9c,0x82,0xa6] +# CHECK-LE: mfspr 12, 540 # encoding: [0xa6,0x82,0x9c,0x7d] +mfdbatu %r12, 2 +# CHECK-BE: mfspr 12, 541 # encoding: [0x7d,0x9d,0x82,0xa6] +# CHECK-LE: mfspr 12, 541 # encoding: [0xa6,0x82,0x9d,0x7d] +mfdbatl %r12, 2 +# CHECK-BE: mfspr 12, 542 # encoding: [0x7d,0x9e,0x82,0xa6] +# CHECK-LE: mfspr 12, 542 # encoding: [0xa6,0x82,0x9e,0x7d] +mfdbatu %r12, 3 +# CHECK-BE: mfspr 12, 543 # encoding: [0x7d,0x9f,0x82,0xa6] +# CHECK-LE: mfspr 12, 543 # encoding: [0xa6,0x82,0x9f,0x7d] +mfdbatl %r12, 3 +# CHECK-BE: mtspr 536, 12 # encoding: [0x7d,0x98,0x83,0xa6] +# CHECK-LE: mtspr 536, 12 # encoding: [0xa6,0x83,0x98,0x7d] +mtdbatu 0, %r12 +# CHECK-BE: mtspr 537, 12 # encoding: [0x7d,0x99,0x83,0xa6] +# CHECK-LE: mtspr 537, 12 # encoding: [0xa6,0x83,0x99,0x7d] +mtdbatl 0, %r12 +# CHECK-BE: mtspr 538, 12 # encoding: [0x7d,0x9a,0x83,0xa6] +# CHECK-LE: mtspr 538, 12 # encoding: [0xa6,0x83,0x9a,0x7d] +mtdbatu 1, %r12 +# CHECK-BE: mtspr 539, 12 # encoding: [0x7d,0x9b,0x83,0xa6] +# CHECK-LE: mtspr 539, 12 # encoding: [0xa6,0x83,0x9b,0x7d] +mtdbatl 1, %r12 +# CHECK-BE: mtspr 540, 12 # encoding: [0x7d,0x9c,0x83,0xa6] +# CHECK-LE: mtspr 540, 12 # encoding: [0xa6,0x83,0x9c,0x7d] +mtdbatu 2, %r12 +# CHECK-BE: mtspr 541, 12 # encoding: [0x7d,0x9d,0x83,0xa6] +# CHECK-LE: mtspr 541, 12 # encoding: [0xa6,0x83,0x9d,0x7d] +mtdbatl 2, %r12 +# CHECK-BE: mtspr 542, 12 # encoding: [0x7d,0x9e,0x83,0xa6] +# CHECK-LE: mtspr 542, 12 # encoding: [0xa6,0x83,0x9e,0x7d] +mtdbatu 3, %r12 +# CHECK-BE: mtspr 543, 12 # encoding: [0x7d,0x9f,0x83,0xa6] +# CHECK-LE: mtspr 543, 12 # encoding: [0xa6,0x83,0x9f,0x7d] +mtdbatl 3, %r12