mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-26 04:32:44 +01:00
Add instruction itinerary for the PPC64 A2 core.
This adds a full itinerary for IBM's PPC64 A2 embedded core. These cores form the basis for the CPUs in the new IBM BG/Q supercomputer. llvm-svn: 153842
This commit is contained in:
parent
56bc73a030
commit
fd26145bc6
@ -34,6 +34,7 @@ def Directive750 : SubtargetFeature<"", "DarwinDirective", "PPC::DIR_750", "">;
|
||||
def Directive970 : SubtargetFeature<"", "DarwinDirective", "PPC::DIR_970", "">;
|
||||
def Directive32 : SubtargetFeature<"", "DarwinDirective", "PPC::DIR_32", "">;
|
||||
def Directive64 : SubtargetFeature<"", "DarwinDirective", "PPC::DIR_64", "">;
|
||||
def DirectiveA2 : SubtargetFeature<"", "DarwinDirective", "PPC::DIR_A2", "">;
|
||||
|
||||
def Feature64Bit : SubtargetFeature<"64bit","Has64BitSupport", "true",
|
||||
"Enable 64-bit instructions">;
|
||||
@ -87,6 +88,9 @@ def : Processor<"g5", G5Itineraries,
|
||||
[Directive970, FeatureAltivec,
|
||||
FeatureGPUL, FeatureFSqrt, FeatureSTFIWX,
|
||||
Feature64Bit /*, Feature64BitRegs */]>;
|
||||
def : Processor<"a2", PPCA2Itineraries, [DirectiveA2, FeatureBookE,
|
||||
FeatureFSqrt, FeatureSTFIWX,
|
||||
Feature64Bit /*, Feature64BitRegs */]>;
|
||||
def : Processor<"ppc", G3Itineraries, [Directive32]>;
|
||||
def : Processor<"ppc64", G5Itineraries,
|
||||
[Directive64, FeatureAltivec,
|
||||
|
@ -450,6 +450,7 @@ void PPCDarwinAsmPrinter::EmitStartOfAsmFile(Module &M) {
|
||||
"ppc7400",
|
||||
"ppc750",
|
||||
"ppc970",
|
||||
"ppcA2",
|
||||
"ppc64"
|
||||
};
|
||||
|
||||
|
@ -22,6 +22,7 @@
|
||||
#include "llvm/CodeGen/MachineInstrBuilder.h"
|
||||
#include "llvm/CodeGen/MachineMemOperand.h"
|
||||
#include "llvm/CodeGen/MachineRegisterInfo.h"
|
||||
#include "llvm/CodeGen/PseudoSourceValue.h"
|
||||
#include "llvm/MC/MCAsmInfo.h"
|
||||
#include "llvm/Support/CommandLine.h"
|
||||
#include "llvm/Support/ErrorHandling.h"
|
||||
@ -49,7 +50,7 @@ ScheduleHazardRecognizer *PPCInstrInfo::CreateTargetHazardRecognizer(
|
||||
const TargetMachine *TM,
|
||||
const ScheduleDAG *DAG) const {
|
||||
unsigned Directive = TM->getSubtarget<PPCSubtarget>().getDarwinDirective();
|
||||
if (Directive == PPC::DIR_440) {
|
||||
if (Directive == PPC::DIR_440 || Directive == PPC::DIR_A2) {
|
||||
const InstrItineraryData *II = TM->getInstrItineraryData();
|
||||
return new PPCScoreboardHazardRecognizer(II, DAG);
|
||||
}
|
||||
@ -65,14 +66,14 @@ ScheduleHazardRecognizer *PPCInstrInfo::CreateTargetPostRAHazardRecognizer(
|
||||
unsigned Directive = TM.getSubtarget<PPCSubtarget>().getDarwinDirective();
|
||||
|
||||
// Most subtargets use a PPC970 recognizer.
|
||||
if (Directive != PPC::DIR_440) {
|
||||
if (Directive != PPC::DIR_440 && Directive != PPC::DIR_A2) {
|
||||
const TargetInstrInfo *TII = TM.getInstrInfo();
|
||||
assert(TII && "No InstrInfo?");
|
||||
|
||||
return new PPCHazardRecognizer970(*TII);
|
||||
}
|
||||
|
||||
return TargetInstrInfoImpl::CreateTargetPostRAHazardRecognizer(II, DAG);
|
||||
return new PPCScoreboardHazardRecognizer(II, DAG);
|
||||
}
|
||||
unsigned PPCInstrInfo::isLoadFromStackSlot(const MachineInstr *MI,
|
||||
int &FrameIndex) const {
|
||||
|
@ -108,6 +108,7 @@ include "PPCSchedule440.td"
|
||||
include "PPCScheduleG4.td"
|
||||
include "PPCScheduleG4Plus.td"
|
||||
include "PPCScheduleG5.td"
|
||||
include "PPCScheduleA2.td"
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// Instruction to itinerary class map - When add new opcodes to the supported
|
||||
|
570
lib/Target/PowerPC/PPCScheduleA2.td
Normal file
570
lib/Target/PowerPC/PPCScheduleA2.td
Normal file
@ -0,0 +1,570 @@
|
||||
//===- PPCScheduleA2.td - PPC A2 Scheduling Definitions --*- tablegen -*-===//
|
||||
//
|
||||
// The LLVM Compiler Infrastructure
|
||||
//
|
||||
// This file is distributed under the University of Illinois Open Source
|
||||
// License. See LICENSE.TXT for details.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// Primary reference:
|
||||
// A2 Processor User's Manual.
|
||||
// IBM (as updated in) 2010.
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// Functional units on the PowerPC A2 chip sets
|
||||
//
|
||||
def IU0to3_0 : FuncUnit; // Fetch unit 1 to 4 slot 1
|
||||
def IU0to3_1 : FuncUnit; // Fetch unit 1 to 4 slot 2
|
||||
def IU0to3_2 : FuncUnit; // Fetch unit 1 to 4 slot 3
|
||||
def IU0to3_3 : FuncUnit; // Fetch unit 1 to 4 slot 4
|
||||
def IU4_0 : FuncUnit; // Instruction buffer slot 1
|
||||
def IU4_1 : FuncUnit; // Instruction buffer slot 2
|
||||
def IU4_2 : FuncUnit; // Instruction buffer slot 3
|
||||
def IU4_3 : FuncUnit; // Instruction buffer slot 4
|
||||
def IU4_4 : FuncUnit; // Instruction buffer slot 5
|
||||
def IU4_5 : FuncUnit; // Instruction buffer slot 6
|
||||
def IU4_6 : FuncUnit; // Instruction buffer slot 7
|
||||
def IU4_7 : FuncUnit; // Instruction buffer slot 8
|
||||
def IU5 : FuncUnit; // Dependency resolution
|
||||
def IU6 : FuncUnit; // Instruction issue
|
||||
def RF0 : FuncUnit;
|
||||
def XRF1 : FuncUnit;
|
||||
def XEX1 : FuncUnit; // Execution stage 1 for the XU pipeline
|
||||
def XEX2 : FuncUnit; // Execution stage 2 for the XU pipeline
|
||||
def XEX3 : FuncUnit; // Execution stage 3 for the XU pipeline
|
||||
def XEX4 : FuncUnit; // Execution stage 4 for the XU pipeline
|
||||
def XEX5 : FuncUnit; // Execution stage 5 for the XU pipeline
|
||||
def XEX6 : FuncUnit; // Execution stage 6 for the XU pipeline
|
||||
def FRF1 : FuncUnit;
|
||||
def FEX1 : FuncUnit; // Execution stage 1 for the FU pipeline
|
||||
def FEX2 : FuncUnit; // Execution stage 2 for the FU pipeline
|
||||
def FEX3 : FuncUnit; // Execution stage 3 for the FU pipeline
|
||||
def FEX4 : FuncUnit; // Execution stage 4 for the FU pipeline
|
||||
def FEX5 : FuncUnit; // Execution stage 5 for the FU pipeline
|
||||
def FEX6 : FuncUnit; // Execution stage 6 for the FU pipeline
|
||||
|
||||
def CR_Bypass : Bypass; // The bypass for condition regs.
|
||||
//def GPR_Bypass : Bypass; // The bypass for general-purpose regs.
|
||||
//def FPR_Bypass : Bypass; // The bypass for floating-point regs.
|
||||
|
||||
//
|
||||
// This file defines the itinerary class data for the PPC A2 processor.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
|
||||
def PPCA2Itineraries : ProcessorItineraries<
|
||||
[IU0to3_0, IU0to3_1, IU0to3_2, IU0to3_3,
|
||||
IU4_0, IU4_1, IU4_2, IU4_3, IU4_4, IU4_5, IU4_6, IU4_7,
|
||||
IU5, IU6, RF0, XRF1, XEX1, XEX2, XEX3, XEX4, XEX5, XEX6,
|
||||
FRF1, FEX1, FEX2, FEX3, FEX4, FEX5, FEX6],
|
||||
[CR_Bypass, GPR_Bypass, FPR_Bypass], [
|
||||
InstrItinData<IntGeneral , [InstrStage<4, [IU0to3_0, IU0to3_1, IU0to3_2, IU0to3_3]>,
|
||||
InstrStage<1, [IU4_0, IU4_1, IU4_2, IU4_3,
|
||||
IU4_4, IU4_5, IU4_6, IU4_7]>,
|
||||
InstrStage<1, [IU5]>, InstrStage<1, [IU6]>,
|
||||
InstrStage<1, [RF0]>, InstrStage<1, [XRF1]>,
|
||||
InstrStage<1, [XEX1]>, InstrStage<1, [XEX2]>,
|
||||
InstrStage<1, [XEX3]>, InstrStage<1, [XEX4]>,
|
||||
InstrStage<1, [XEX5]>, InstrStage<1, [XEX6]>],
|
||||
[10, 7, 7],
|
||||
[GPR_Bypass, GPR_Bypass, GPR_Bypass]>,
|
||||
InstrItinData<IntCompare , [InstrStage<4, [IU0to3_0, IU0to3_1, IU0to3_2, IU0to3_3]>,
|
||||
InstrStage<1, [IU4_0, IU4_1, IU4_2, IU4_3,
|
||||
IU4_4, IU4_5, IU4_6, IU4_7]>,
|
||||
InstrStage<1, [IU5]>, InstrStage<1, [IU6]>,
|
||||
InstrStage<1, [RF0]>, InstrStage<1, [XRF1]>,
|
||||
InstrStage<1, [XEX1]>, InstrStage<1, [XEX2]>,
|
||||
InstrStage<1, [XEX3]>, InstrStage<1, [XEX4]>,
|
||||
InstrStage<1, [XEX5]>, InstrStage<1, [XEX6]>],
|
||||
[10, 7, 7],
|
||||
[CR_Bypass, GPR_Bypass, GPR_Bypass]>,
|
||||
InstrItinData<IntDivW , [InstrStage<4, [IU0to3_0, IU0to3_1, IU0to3_2, IU0to3_3]>,
|
||||
InstrStage<1, [IU4_0, IU4_1, IU4_2, IU4_3,
|
||||
IU4_4, IU4_5, IU4_6, IU4_7]>,
|
||||
InstrStage<1, [IU5]>, InstrStage<1, [IU6]>,
|
||||
InstrStage<1, [RF0]>, InstrStage<1, [XRF1]>,
|
||||
InstrStage<1, [XEX1]>, InstrStage<1, [XEX2]>,
|
||||
InstrStage<1, [XEX3]>, InstrStage<1, [XEX4]>,
|
||||
InstrStage<1, [XEX5]>, InstrStage<38, [XEX6]>],
|
||||
[53, 7, 7],
|
||||
[NoBypass, GPR_Bypass, GPR_Bypass]>,
|
||||
InstrItinData<IntMFFS , [InstrStage<4, [IU0to3_0, IU0to3_1, IU0to3_2, IU0to3_3]>,
|
||||
InstrStage<1, [IU4_0, IU4_1, IU4_2, IU4_3,
|
||||
IU4_4, IU4_5, IU4_6, IU4_7]>,
|
||||
InstrStage<1, [IU5]>, InstrStage<1, [IU6]>,
|
||||
InstrStage<1, [RF0]>, InstrStage<1, [XRF1]>,
|
||||
InstrStage<1, [XEX1]>, InstrStage<1, [XEX2]>,
|
||||
InstrStage<1, [XEX3]>, InstrStage<1, [XEX4]>,
|
||||
InstrStage<1, [XEX5]>, InstrStage<1, [XEX6]>],
|
||||
[10, 7, 7],
|
||||
[GPR_Bypass, GPR_Bypass, GPR_Bypass]>,
|
||||
InstrItinData<IntMTFSB0 , [InstrStage<4, [IU0to3_0, IU0to3_1, IU0to3_2, IU0to3_3]>,
|
||||
InstrStage<1, [IU4_0, IU4_1, IU4_2, IU4_3,
|
||||
IU4_4, IU4_5, IU4_6, IU4_7]>,
|
||||
InstrStage<1, [IU5]>, InstrStage<1, [IU6]>,
|
||||
InstrStage<1, [RF0]>, InstrStage<1, [XRF1]>,
|
||||
InstrStage<1, [XEX1]>, InstrStage<1, [XEX2]>,
|
||||
InstrStage<1, [XEX3]>, InstrStage<1, [XEX4]>,
|
||||
InstrStage<1, [XEX5]>, InstrStage<1, [XEX6]>],
|
||||
[10, 7, 7],
|
||||
[GPR_Bypass, GPR_Bypass, GPR_Bypass]>,
|
||||
InstrItinData<IntMulHW , [InstrStage<4, [IU0to3_0, IU0to3_1, IU0to3_2, IU0to3_3]>,
|
||||
InstrStage<1, [IU4_0, IU4_1, IU4_2, IU4_3,
|
||||
IU4_4, IU4_5, IU4_6, IU4_7]>,
|
||||
InstrStage<1, [IU5]>, InstrStage<1, [IU6]>,
|
||||
InstrStage<1, [RF0]>, InstrStage<1, [XRF1]>,
|
||||
InstrStage<1, [XEX1]>, InstrStage<1, [XEX2]>,
|
||||
InstrStage<1, [XEX3]>, InstrStage<1, [XEX4]>,
|
||||
InstrStage<1, [XEX5]>, InstrStage<1, [XEX6]>],
|
||||
[14, 7, 7],
|
||||
[GPR_Bypass, GPR_Bypass, GPR_Bypass]>,
|
||||
InstrItinData<IntMulHWU , [InstrStage<4, [IU0to3_0, IU0to3_1, IU0to3_2, IU0to3_3]>,
|
||||
InstrStage<1, [IU4_0, IU4_1, IU4_2, IU4_3,
|
||||
IU4_4, IU4_5, IU4_6, IU4_7]>,
|
||||
InstrStage<1, [IU5]>, InstrStage<1, [IU6]>,
|
||||
InstrStage<1, [RF0]>, InstrStage<1, [XRF1]>,
|
||||
InstrStage<1, [XEX1]>, InstrStage<1, [XEX2]>,
|
||||
InstrStage<1, [XEX3]>, InstrStage<1, [XEX4]>,
|
||||
InstrStage<1, [XEX5]>, InstrStage<1, [XEX6]>],
|
||||
[14, 7, 7],
|
||||
[GPR_Bypass, GPR_Bypass, GPR_Bypass]>,
|
||||
InstrItinData<IntMulLI , [InstrStage<4, [IU0to3_0, IU0to3_1, IU0to3_2, IU0to3_3]>,
|
||||
InstrStage<1, [IU4_0, IU4_1, IU4_2, IU4_3,
|
||||
IU4_4, IU4_5, IU4_6, IU4_7]>,
|
||||
InstrStage<1, [IU5]>, InstrStage<1, [IU6]>,
|
||||
InstrStage<1, [RF0]>, InstrStage<1, [XRF1]>,
|
||||
InstrStage<1, [XEX1]>, InstrStage<1, [XEX2]>,
|
||||
InstrStage<1, [XEX3]>, InstrStage<1, [XEX4]>,
|
||||
InstrStage<1, [XEX5]>, InstrStage<1, [XEX6]>],
|
||||
[15, 7, 7],
|
||||
[GPR_Bypass, GPR_Bypass, GPR_Bypass]>,
|
||||
InstrItinData<IntRotate , [InstrStage<4, [IU0to3_0, IU0to3_1, IU0to3_2, IU0to3_3]>,
|
||||
InstrStage<1, [IU4_0, IU4_1, IU4_2, IU4_3,
|
||||
IU4_4, IU4_5, IU4_6, IU4_7]>,
|
||||
InstrStage<1, [IU5]>, InstrStage<1, [IU6]>,
|
||||
InstrStage<1, [RF0]>, InstrStage<1, [XRF1]>,
|
||||
InstrStage<1, [XEX1]>, InstrStage<1, [XEX2]>,
|
||||
InstrStage<1, [XEX3]>, InstrStage<1, [XEX4]>,
|
||||
InstrStage<1, [XEX5]>, InstrStage<1, [XEX6]>],
|
||||
[10, 7, 7],
|
||||
[GPR_Bypass, GPR_Bypass, GPR_Bypass]>,
|
||||
InstrItinData<IntShift , [InstrStage<4, [IU0to3_0, IU0to3_1, IU0to3_2, IU0to3_3]>,
|
||||
InstrStage<1, [IU4_0, IU4_1, IU4_2, IU4_3,
|
||||
IU4_4, IU4_5, IU4_6, IU4_7]>,
|
||||
InstrStage<1, [IU5]>, InstrStage<1, [IU6]>,
|
||||
InstrStage<1, [RF0]>, InstrStage<1, [XRF1]>,
|
||||
InstrStage<1, [XEX1]>, InstrStage<1, [XEX2]>,
|
||||
InstrStage<1, [XEX3]>, InstrStage<1, [XEX4]>,
|
||||
InstrStage<1, [XEX5]>, InstrStage<1, [XEX6]>],
|
||||
[10, 7, 7],
|
||||
[GPR_Bypass, GPR_Bypass, GPR_Bypass]>,
|
||||
InstrItinData<IntTrapW , [InstrStage<4, [IU0to3_0, IU0to3_1, IU0to3_2, IU0to3_3]>,
|
||||
InstrStage<1, [IU4_0, IU4_1, IU4_2, IU4_3,
|
||||
IU4_4, IU4_5, IU4_6, IU4_7]>,
|
||||
InstrStage<1, [IU5]>, InstrStage<1, [IU6]>,
|
||||
InstrStage<1, [RF0]>, InstrStage<1, [XRF1]>,
|
||||
InstrStage<1, [XEX1]>, InstrStage<1, [XEX2]>,
|
||||
InstrStage<1, [XEX3]>, InstrStage<1, [XEX4]>,
|
||||
InstrStage<1, [XEX5]>, InstrStage<1, [XEX6]>],
|
||||
[10, 7, 7],
|
||||
[GPR_Bypass, GPR_Bypass]>,
|
||||
InstrItinData<BrB , [InstrStage<4, [IU0to3_0, IU0to3_1, IU0to3_2, IU0to3_3]>,
|
||||
InstrStage<1, [IU4_0, IU4_1, IU4_2, IU4_3,
|
||||
IU4_4, IU4_5, IU4_6, IU4_7]>,
|
||||
InstrStage<1, [IU5]>, InstrStage<1, [IU6]>,
|
||||
InstrStage<1, [RF0]>, InstrStage<1, [XRF1]>,
|
||||
InstrStage<1, [XEX1]>, InstrStage<1, [XEX2]>,
|
||||
InstrStage<1, [XEX3]>, InstrStage<1, [XEX4]>,
|
||||
InstrStage<1, [XEX5]>, InstrStage<1, [XEX6]>],
|
||||
[15, 7, 7],
|
||||
[NoBypass, GPR_Bypass]>,
|
||||
InstrItinData<BrCR , [InstrStage<4, [IU0to3_0, IU0to3_1, IU0to3_2, IU0to3_3]>,
|
||||
InstrStage<1, [IU4_0, IU4_1, IU4_2, IU4_3,
|
||||
IU4_4, IU4_5, IU4_6, IU4_7]>,
|
||||
InstrStage<1, [IU5]>, InstrStage<1, [IU6]>,
|
||||
InstrStage<1, [RF0]>, InstrStage<1, [XRF1]>,
|
||||
InstrStage<1, [XEX1]>, InstrStage<1, [XEX2]>,
|
||||
InstrStage<1, [XEX3]>, InstrStage<1, [XEX4]>,
|
||||
InstrStage<1, [XEX5]>, InstrStage<1, [XEX6]>],
|
||||
[10, 7, 7],
|
||||
[CR_Bypass, CR_Bypass, CR_Bypass]>,
|
||||
InstrItinData<BrMCR , [InstrStage<4, [IU0to3_0, IU0to3_1, IU0to3_2, IU0to3_3]>,
|
||||
InstrStage<1, [IU4_0, IU4_1, IU4_2, IU4_3,
|
||||
IU4_4, IU4_5, IU4_6, IU4_7]>,
|
||||
InstrStage<1, [IU5]>, InstrStage<1, [IU6]>,
|
||||
InstrStage<1, [RF0]>, InstrStage<1, [XRF1]>,
|
||||
InstrStage<1, [XEX1]>, InstrStage<1, [XEX2]>,
|
||||
InstrStage<1, [XEX3]>, InstrStage<1, [XEX4]>,
|
||||
InstrStage<1, [XEX5]>, InstrStage<1, [XEX6]>],
|
||||
[10, 7, 7],
|
||||
[CR_Bypass, CR_Bypass, CR_Bypass]>,
|
||||
InstrItinData<BrMCRX , [InstrStage<4, [IU0to3_0, IU0to3_1, IU0to3_2, IU0to3_3]>,
|
||||
InstrStage<1, [IU4_0, IU4_1, IU4_2, IU4_3,
|
||||
IU4_4, IU4_5, IU4_6, IU4_7]>,
|
||||
InstrStage<1, [IU5]>, InstrStage<1, [IU6]>,
|
||||
InstrStage<1, [RF0]>, InstrStage<1, [XRF1]>,
|
||||
InstrStage<1, [XEX1]>, InstrStage<1, [XEX2]>,
|
||||
InstrStage<1, [XEX3]>, InstrStage<1, [XEX4]>,
|
||||
InstrStage<1, [XEX5]>, InstrStage<1, [XEX6]>],
|
||||
[10, 7, 7],
|
||||
[CR_Bypass, GPR_Bypass, GPR_Bypass]>,
|
||||
InstrItinData<LdStDCBA , [InstrStage<4, [IU0to3_0, IU0to3_1, IU0to3_2, IU0to3_3]>,
|
||||
InstrStage<1, [IU4_0, IU4_1, IU4_2, IU4_3,
|
||||
IU4_4, IU4_5, IU4_6, IU4_7]>,
|
||||
InstrStage<1, [IU5]>, InstrStage<1, [IU6]>,
|
||||
InstrStage<1, [RF0]>, InstrStage<1, [XRF1]>,
|
||||
InstrStage<1, [XEX1]>, InstrStage<1, [XEX2]>,
|
||||
InstrStage<1, [XEX3]>, InstrStage<1, [XEX4]>,
|
||||
InstrStage<1, [XEX5]>, InstrStage<1, [XEX6]>],
|
||||
[13, 11],
|
||||
[NoBypass, GPR_Bypass]>,
|
||||
InstrItinData<LdStDCBF , [InstrStage<4, [IU0to3_0, IU0to3_1, IU0to3_2, IU0to3_3]>,
|
||||
InstrStage<1, [IU4_0, IU4_1, IU4_2, IU4_3,
|
||||
IU4_4, IU4_5, IU4_6, IU4_7]>,
|
||||
InstrStage<1, [IU5]>, InstrStage<1, [IU6]>,
|
||||
InstrStage<1, [RF0]>, InstrStage<1, [XRF1]>,
|
||||
InstrStage<1, [XEX1]>, InstrStage<1, [XEX2]>,
|
||||
InstrStage<1, [XEX3]>, InstrStage<1, [XEX4]>,
|
||||
InstrStage<1, [XEX5]>, InstrStage<1, [XEX6]>],
|
||||
[13, 11],
|
||||
[NoBypass, GPR_Bypass]>,
|
||||
InstrItinData<LdStDCBI , [InstrStage<4, [IU0to3_0, IU0to3_1, IU0to3_2, IU0to3_3]>,
|
||||
InstrStage<1, [IU4_0, IU4_1, IU4_2, IU4_3,
|
||||
IU4_4, IU4_5, IU4_6, IU4_7]>,
|
||||
InstrStage<1, [IU5]>, InstrStage<1, [IU6]>,
|
||||
InstrStage<1, [RF0]>, InstrStage<1, [XRF1]>,
|
||||
InstrStage<1, [XEX1]>, InstrStage<1, [XEX2]>,
|
||||
InstrStage<1, [XEX3]>, InstrStage<1, [XEX4]>,
|
||||
InstrStage<1, [XEX5]>, InstrStage<1, [XEX6]>],
|
||||
[13, 11],
|
||||
[NoBypass, GPR_Bypass]>,
|
||||
InstrItinData<LdStLoad , [InstrStage<4, [IU0to3_0, IU0to3_1, IU0to3_2, IU0to3_3]>,
|
||||
InstrStage<1, [IU4_0, IU4_1, IU4_2, IU4_3,
|
||||
IU4_4, IU4_5, IU4_6, IU4_7]>,
|
||||
InstrStage<1, [IU5]>, InstrStage<1, [IU6]>,
|
||||
InstrStage<1, [RF0]>, InstrStage<1, [XRF1]>,
|
||||
InstrStage<1, [XEX1]>, InstrStage<1, [XEX2]>,
|
||||
InstrStage<1, [XEX3]>, InstrStage<1, [XEX4]>,
|
||||
InstrStage<1, [XEX5]>, InstrStage<1, [XEX6]>],
|
||||
[14, 7],
|
||||
[GPR_Bypass, GPR_Bypass]>,
|
||||
InstrItinData<LdStStore , [InstrStage<4, [IU0to3_0, IU0to3_1, IU0to3_2, IU0to3_3]>,
|
||||
InstrStage<1, [IU4_0, IU4_1, IU4_2, IU4_3,
|
||||
IU4_4, IU4_5, IU4_6, IU4_7]>,
|
||||
InstrStage<1, [IU5]>, InstrStage<1, [IU6]>,
|
||||
InstrStage<1, [RF0]>, InstrStage<1, [XRF1]>,
|
||||
InstrStage<1, [XEX1]>, InstrStage<1, [XEX2]>,
|
||||
InstrStage<1, [XEX3]>, InstrStage<1, [XEX4]>,
|
||||
InstrStage<1, [XEX5]>, InstrStage<1, [XEX6]>],
|
||||
[13, 7],
|
||||
[GPR_Bypass, GPR_Bypass]>,
|
||||
InstrItinData<LdStICBI , [InstrStage<4, [IU0to3_0, IU0to3_1, IU0to3_2, IU0to3_3]>,
|
||||
InstrStage<1, [IU4_0, IU4_1, IU4_2, IU4_3,
|
||||
IU4_4, IU4_5, IU4_6, IU4_7]>,
|
||||
InstrStage<1, [IU5]>, InstrStage<1, [IU6]>,
|
||||
InstrStage<1, [RF0]>, InstrStage<1, [XRF1]>,
|
||||
InstrStage<1, [XEX1]>, InstrStage<1, [XEX2]>,
|
||||
InstrStage<1, [XEX3]>, InstrStage<1, [XEX4]>,
|
||||
InstrStage<1, [XEX5]>, InstrStage<1, [XEX6]>],
|
||||
[14, 7],
|
||||
[NoBypass, GPR_Bypass]>,
|
||||
InstrItinData<LdStUX , [InstrStage<4, [IU0to3_0, IU0to3_1, IU0to3_2, IU0to3_3]>,
|
||||
InstrStage<1, [IU4_0, IU4_1, IU4_2, IU4_3,
|
||||
IU4_4, IU4_5, IU4_6, IU4_7]>,
|
||||
InstrStage<1, [IU5]>, InstrStage<1, [IU6]>,
|
||||
InstrStage<1, [RF0]>, InstrStage<1, [XRF1]>,
|
||||
InstrStage<1, [XEX1]>, InstrStage<1, [XEX2]>,
|
||||
InstrStage<1, [XEX3]>, InstrStage<1, [XEX4]>,
|
||||
InstrStage<1, [XEX5]>, InstrStage<1, [XEX6]>],
|
||||
[14, 7, 7],
|
||||
[NoBypass, FPR_Bypass, FPR_Bypass]>,
|
||||
InstrItinData<LdStLFD , [InstrStage<4, [IU0to3_0, IU0to3_1, IU0to3_2, IU0to3_3]>,
|
||||
InstrStage<1, [IU4_0, IU4_1, IU4_2, IU4_3,
|
||||
IU4_4, IU4_5, IU4_6, IU4_7]>,
|
||||
InstrStage<1, [IU5]>, InstrStage<1, [IU6]>,
|
||||
InstrStage<1, [RF0]>, InstrStage<1, [XRF1]>,
|
||||
InstrStage<1, [XEX1]>, InstrStage<1, [XEX2]>,
|
||||
InstrStage<1, [XEX3]>, InstrStage<1, [XEX4]>,
|
||||
InstrStage<1, [XEX5]>, InstrStage<1, [XEX6]>],
|
||||
[14, 7, 7],
|
||||
[FPR_Bypass, GPR_Bypass, GPR_Bypass]>,
|
||||
InstrItinData<LdStLFDU , [InstrStage<4, [IU0to3_0, IU0to3_1, IU0to3_2, IU0to3_3]>,
|
||||
InstrStage<1, [IU4_0, IU4_1, IU4_2, IU4_3,
|
||||
IU4_4, IU4_5, IU4_6, IU4_7]>,
|
||||
InstrStage<1, [IU5]>, InstrStage<1, [IU6]>,
|
||||
InstrStage<1, [RF0]>, InstrStage<1, [XRF1]>,
|
||||
InstrStage<1, [XEX1]>, InstrStage<1, [XEX2]>,
|
||||
InstrStage<1, [XEX3]>, InstrStage<1, [XEX4]>,
|
||||
InstrStage<1, [XEX5]>, InstrStage<1, [XEX6]>],
|
||||
[14, 7, 7],
|
||||
[FPR_Bypass, GPR_Bypass, GPR_Bypass]>,
|
||||
InstrItinData<LdStLHA , [InstrStage<4, [IU0to3_0, IU0to3_1, IU0to3_2, IU0to3_3]>,
|
||||
InstrStage<1, [IU4_0, IU4_1, IU4_2, IU4_3,
|
||||
IU4_4, IU4_5, IU4_6, IU4_7]>,
|
||||
InstrStage<1, [IU5]>, InstrStage<1, [IU6]>,
|
||||
InstrStage<1, [RF0]>, InstrStage<1, [XRF1]>,
|
||||
InstrStage<1, [XEX1]>, InstrStage<1, [XEX2]>,
|
||||
InstrStage<1, [XEX3]>, InstrStage<1, [XEX4]>,
|
||||
InstrStage<1, [XEX5]>, InstrStage<1, [XEX6]>],
|
||||
[14, 7],
|
||||
[NoBypass, GPR_Bypass]>,
|
||||
InstrItinData<LdStLMW , [InstrStage<4, [IU0to3_0, IU0to3_1, IU0to3_2, IU0to3_3]>,
|
||||
InstrStage<1, [IU4_0, IU4_1, IU4_2, IU4_3,
|
||||
IU4_4, IU4_5, IU4_6, IU4_7]>,
|
||||
InstrStage<1, [IU5]>, InstrStage<1, [IU6]>,
|
||||
InstrStage<1, [RF0]>, InstrStage<1, [XRF1]>,
|
||||
InstrStage<1, [XEX1]>, InstrStage<1, [XEX2]>,
|
||||
InstrStage<1, [XEX3]>, InstrStage<1, [XEX4]>,
|
||||
InstrStage<1, [XEX5]>, InstrStage<1, [XEX6]>],
|
||||
[14, 7],
|
||||
[NoBypass, GPR_Bypass]>,
|
||||
InstrItinData<LdStLWARX , [InstrStage<4, [IU0to3_0, IU0to3_1, IU0to3_2, IU0to3_3]>,
|
||||
InstrStage<1, [IU4_0, IU4_1, IU4_2, IU4_3,
|
||||
IU4_4, IU4_5, IU4_6, IU4_7]>,
|
||||
InstrStage<1, [IU5]>, InstrStage<13, [IU6]>,
|
||||
InstrStage<1, [RF0]>, InstrStage<1, [XRF1]>,
|
||||
InstrStage<1, [XEX1]>, InstrStage<1, [XEX2]>,
|
||||
InstrStage<1, [XEX3]>, InstrStage<1, [XEX4]>,
|
||||
InstrStage<1, [XEX5]>, InstrStage<1, [XEX6]>],
|
||||
[26, 7],
|
||||
[NoBypass, GPR_Bypass]>,
|
||||
InstrItinData<LdStSTD , [InstrStage<4, [IU0to3_0, IU0to3_1, IU0to3_2, IU0to3_3]>,
|
||||
InstrStage<1, [IU4_0, IU4_1, IU4_2, IU4_3,
|
||||
IU4_4, IU4_5, IU4_6, IU4_7]>,
|
||||
InstrStage<1, [IU5]>, InstrStage<1, [IU6]>,
|
||||
InstrStage<1, [RF0]>, InstrStage<1, [XRF1]>,
|
||||
InstrStage<1, [XEX1]>, InstrStage<1, [XEX2]>,
|
||||
InstrStage<1, [XEX3]>, InstrStage<1, [XEX4]>,
|
||||
InstrStage<1, [XEX5]>, InstrStage<1, [XEX6]>],
|
||||
[13, 7],
|
||||
[GPR_Bypass, GPR_Bypass]>,
|
||||
InstrItinData<LdStSTDCX , [InstrStage<4, [IU0to3_0, IU0to3_1, IU0to3_2, IU0to3_3]>,
|
||||
InstrStage<1, [IU4_0, IU4_1, IU4_2, IU4_3,
|
||||
IU4_4, IU4_5, IU4_6, IU4_7]>,
|
||||
InstrStage<1, [IU5]>, InstrStage<13, [IU6]>,
|
||||
InstrStage<1, [RF0]>, InstrStage<1, [XRF1]>,
|
||||
InstrStage<1, [XEX1]>, InstrStage<1, [XEX2]>,
|
||||
InstrStage<1, [XEX3]>, InstrStage<1, [XEX4]>,
|
||||
InstrStage<1, [XEX5]>, InstrStage<1, [XEX6]>],
|
||||
[26, 7],
|
||||
[NoBypass, GPR_Bypass]>,
|
||||
InstrItinData<LdStSTWCX , [InstrStage<4, [IU0to3_0, IU0to3_1, IU0to3_2, IU0to3_3]>,
|
||||
InstrStage<1, [IU4_0, IU4_1, IU4_2, IU4_3,
|
||||
IU4_4, IU4_5, IU4_6, IU4_7]>,
|
||||
InstrStage<1, [IU5]>, InstrStage<13, [IU6]>,
|
||||
InstrStage<1, [RF0]>, InstrStage<1, [XRF1]>,
|
||||
InstrStage<1, [XEX1]>, InstrStage<1, [XEX2]>,
|
||||
InstrStage<1, [XEX3]>, InstrStage<1, [XEX4]>,
|
||||
InstrStage<1, [XEX5]>, InstrStage<1, [XEX6]>],
|
||||
[26, 7],
|
||||
[NoBypass, GPR_Bypass]>,
|
||||
InstrItinData<LdStSync , [InstrStage<4, [IU0to3_0, IU0to3_1, IU0to3_2, IU0to3_3]>,
|
||||
InstrStage<1, [IU4_0, IU4_1, IU4_2, IU4_3,
|
||||
IU4_4, IU4_5, IU4_6, IU4_7]>,
|
||||
InstrStage<1, [IU5]>, InstrStage<1, [IU6]>,
|
||||
InstrStage<1, [RF0]>, InstrStage<1, [XRF1]>,
|
||||
InstrStage<1, [XEX1]>, InstrStage<1, [XEX2]>,
|
||||
InstrStage<1, [XEX3]>, InstrStage<12, [XEX4]>,
|
||||
InstrStage<1, [XEX5]>, InstrStage<1, [XEX6]>]>,
|
||||
InstrItinData<SprISYNC , [InstrStage<4, [IU0to3_0, IU0to3_1, IU0to3_2, IU0to3_3]>,
|
||||
InstrStage<1, [IU4_0, IU4_1, IU4_2, IU4_3,
|
||||
IU4_4, IU4_5, IU4_6, IU4_7]>,
|
||||
InstrStage<1, [IU5]>, InstrStage<1, [IU6]>,
|
||||
InstrStage<1, [RF0]>, InstrStage<1, [XRF1]>,
|
||||
InstrStage<1, [XEX1]>, InstrStage<1, [XEX2]>,
|
||||
InstrStage<1, [XEX3]>, InstrStage<1, [XEX4]>,
|
||||
InstrStage<1, [XEX5]>, InstrStage<14, [XEX6]>]>,
|
||||
InstrItinData<SprMFSR , [InstrStage<4, [IU0to3_0, IU0to3_1, IU0to3_2, IU0to3_3]>,
|
||||
InstrStage<1, [IU4_0, IU4_1, IU4_2, IU4_3,
|
||||
IU4_4, IU4_5, IU4_6, IU4_7]>,
|
||||
InstrStage<1, [IU5]>, InstrStage<1, [IU6]>,
|
||||
InstrStage<1, [RF0]>, InstrStage<1, [XRF1]>,
|
||||
InstrStage<1, [XEX1]>, InstrStage<1, [XEX2]>,
|
||||
InstrStage<1, [XEX3]>, InstrStage<1, [XEX4]>,
|
||||
InstrStage<1, [XEX5]>, InstrStage<1, [XEX6]>],
|
||||
[15, 7],
|
||||
[GPR_Bypass, NoBypass]>,
|
||||
InstrItinData<SprMTMSR , [InstrStage<4, [IU0to3_0, IU0to3_1, IU0to3_2, IU0to3_3]>,
|
||||
InstrStage<1, [IU4_0, IU4_1, IU4_2, IU4_3,
|
||||
IU4_4, IU4_5, IU4_6, IU4_7]>,
|
||||
InstrStage<1, [IU5]>, InstrStage<1, [IU6]>,
|
||||
InstrStage<1, [RF0]>, InstrStage<1, [XRF1]>,
|
||||
InstrStage<1, [XEX1]>, InstrStage<1, [XEX2]>,
|
||||
InstrStage<1, [XEX3]>, InstrStage<1, [XEX4]>,
|
||||
InstrStage<1, [XEX5]>, InstrStage<1, [XEX6]>],
|
||||
[15, 7],
|
||||
[NoBypass, GPR_Bypass]>,
|
||||
InstrItinData<SprMTSR , [InstrStage<4, [IU0to3_0, IU0to3_1, IU0to3_2, IU0to3_3]>,
|
||||
InstrStage<1, [IU4_0, IU4_1, IU4_2, IU4_3,
|
||||
IU4_4, IU4_5, IU4_6, IU4_7]>,
|
||||
InstrStage<1, [IU5]>, InstrStage<1, [IU6]>,
|
||||
InstrStage<1, [RF0]>, InstrStage<1, [XRF1]>,
|
||||
InstrStage<1, [XEX1]>, InstrStage<1, [XEX2]>,
|
||||
InstrStage<1, [XEX3]>, InstrStage<1, [XEX4]>,
|
||||
InstrStage<1, [XEX5]>, InstrStage<1, [XEX6]>],
|
||||
[15, 7],
|
||||
[NoBypass, GPR_Bypass]>,
|
||||
InstrItinData<SprTLBSYNC , [InstrStage<4, [IU0to3_0, IU0to3_1, IU0to3_2, IU0to3_3]>,
|
||||
InstrStage<1, [IU4_0, IU4_1, IU4_2, IU4_3,
|
||||
IU4_4, IU4_5, IU4_6, IU4_7]>,
|
||||
InstrStage<1, [IU5]>, InstrStage<1, [IU6]>,
|
||||
InstrStage<1, [RF0]>, InstrStage<1, [XRF1]>,
|
||||
InstrStage<1, [XEX1]>, InstrStage<1, [XEX2]>,
|
||||
InstrStage<1, [XEX3]>, InstrStage<1, [XEX4]>,
|
||||
InstrStage<1, [XEX5]>, InstrStage<14, [XEX6]>]>,
|
||||
InstrItinData<SprMFCR , [InstrStage<4, [IU0to3_0, IU0to3_1, IU0to3_2, IU0to3_3]>,
|
||||
InstrStage<1, [IU4_0, IU4_1, IU4_2, IU4_3,
|
||||
IU4_4, IU4_5, IU4_6, IU4_7]>,
|
||||
InstrStage<1, [IU5]>, InstrStage<1, [IU6]>,
|
||||
InstrStage<1, [RF0]>, InstrStage<1, [XRF1]>,
|
||||
InstrStage<1, [XEX1]>, InstrStage<1, [XEX2]>,
|
||||
InstrStage<1, [XEX3]>, InstrStage<1, [XEX4]>,
|
||||
InstrStage<1, [XEX5]>, InstrStage<1, [XEX6]>],
|
||||
[10, 7],
|
||||
[GPR_Bypass, CR_Bypass]>,
|
||||
InstrItinData<SprMFMSR , [InstrStage<4, [IU0to3_0, IU0to3_1, IU0to3_2, IU0to3_3]>,
|
||||
InstrStage<1, [IU4_0, IU4_1, IU4_2, IU4_3,
|
||||
IU4_4, IU4_5, IU4_6, IU4_7]>,
|
||||
InstrStage<1, [IU5]>, InstrStage<1, [IU6]>,
|
||||
InstrStage<1, [RF0]>, InstrStage<1, [XRF1]>,
|
||||
InstrStage<1, [XEX1]>, InstrStage<1, [XEX2]>,
|
||||
InstrStage<1, [XEX3]>, InstrStage<1, [XEX4]>,
|
||||
InstrStage<1, [XEX5]>, InstrStage<1, [XEX6]>],
|
||||
[15, 7],
|
||||
[GPR_Bypass, NoBypass]>,
|
||||
InstrItinData<SprMFSPR , [InstrStage<4, [IU0to3_0, IU0to3_1, IU0to3_2, IU0to3_3]>,
|
||||
InstrStage<1, [IU4_0, IU4_1, IU4_2, IU4_3,
|
||||
IU4_4, IU4_5, IU4_6, IU4_7]>,
|
||||
InstrStage<1, [IU5]>, InstrStage<1, [IU6]>,
|
||||
InstrStage<1, [RF0]>, InstrStage<1, [XRF1]>,
|
||||
InstrStage<1, [XEX1]>, InstrStage<1, [XEX2]>,
|
||||
InstrStage<1, [XEX3]>, InstrStage<1, [XEX4]>,
|
||||
InstrStage<1, [XEX5]>, InstrStage<1, [XEX6]>],
|
||||
[15, 7],
|
||||
[NoBypass, GPR_Bypass]>,
|
||||
InstrItinData<SprMFTB , [InstrStage<4, [IU0to3_0, IU0to3_1, IU0to3_2, IU0to3_3]>,
|
||||
InstrStage<1, [IU4_0, IU4_1, IU4_2, IU4_3,
|
||||
IU4_4, IU4_5, IU4_6, IU4_7]>,
|
||||
InstrStage<1, [IU5]>, InstrStage<1, [IU6]>,
|
||||
InstrStage<1, [RF0]>, InstrStage<1, [XRF1]>,
|
||||
InstrStage<1, [XEX1]>, InstrStage<1, [XEX2]>,
|
||||
InstrStage<1, [XEX3]>, InstrStage<1, [XEX4]>,
|
||||
InstrStage<1, [XEX5]>, InstrStage<14, [XEX6]>],
|
||||
[29, 7],
|
||||
[NoBypass, GPR_Bypass]>,
|
||||
InstrItinData<SprMTSPR , [InstrStage<4, [IU0to3_0, IU0to3_1, IU0to3_2, IU0to3_3]>,
|
||||
InstrStage<1, [IU4_0, IU4_1, IU4_2, IU4_3,
|
||||
IU4_4, IU4_5, IU4_6, IU4_7]>,
|
||||
InstrStage<1, [IU5]>, InstrStage<1, [IU6]>,
|
||||
InstrStage<1, [RF0]>, InstrStage<1, [XRF1]>,
|
||||
InstrStage<1, [XEX1]>, InstrStage<1, [XEX2]>,
|
||||
InstrStage<1, [XEX3]>, InstrStage<1, [XEX4]>,
|
||||
InstrStage<1, [XEX5]>, InstrStage<1, [XEX6]>],
|
||||
[15, 7],
|
||||
[NoBypass, GPR_Bypass]>,
|
||||
InstrItinData<SprMTSRIN , [InstrStage<4, [IU0to3_0, IU0to3_1, IU0to3_2, IU0to3_3]>,
|
||||
InstrStage<1, [IU4_0, IU4_1, IU4_2, IU4_3,
|
||||
IU4_4, IU4_5, IU4_6, IU4_7]>,
|
||||
InstrStage<1, [IU5]>, InstrStage<1, [IU6]>,
|
||||
InstrStage<1, [RF0]>, InstrStage<1, [XRF1]>,
|
||||
InstrStage<1, [XEX1]>, InstrStage<1, [XEX2]>,
|
||||
InstrStage<1, [XEX3]>, InstrStage<1, [XEX4]>,
|
||||
InstrStage<1, [XEX5]>, InstrStage<14, [XEX6]>],
|
||||
[29, 7],
|
||||
[NoBypass, GPR_Bypass]>,
|
||||
InstrItinData<SprRFI , [InstrStage<4, [IU0to3_0, IU0to3_1, IU0to3_2, IU0to3_3]>,
|
||||
InstrStage<1, [IU4_0, IU4_1, IU4_2, IU4_3,
|
||||
IU4_4, IU4_5, IU4_6, IU4_7]>,
|
||||
InstrStage<1, [IU5]>, InstrStage<1, [IU6]>,
|
||||
InstrStage<1, [RF0]>, InstrStage<1, [XRF1]>,
|
||||
InstrStage<1, [XEX1]>, InstrStage<1, [XEX2]>,
|
||||
InstrStage<1, [XEX3]>, InstrStage<1, [XEX4]>,
|
||||
InstrStage<1, [XEX5]>, InstrStage<14, [XEX6]>],
|
||||
[29, 7],
|
||||
[NoBypass, GPR_Bypass]>,
|
||||
InstrItinData<SprSC , [InstrStage<4, [IU0to3_0, IU0to3_1, IU0to3_2, IU0to3_3]>,
|
||||
InstrStage<1, [IU4_0, IU4_1, IU4_2, IU4_3,
|
||||
IU4_4, IU4_5, IU4_6, IU4_7]>,
|
||||
InstrStage<1, [IU5]>, InstrStage<1, [IU6]>,
|
||||
InstrStage<1, [RF0]>, InstrStage<1, [XRF1]>,
|
||||
InstrStage<1, [XEX1]>, InstrStage<1, [XEX2]>,
|
||||
InstrStage<1, [XEX3]>, InstrStage<1, [XEX4]>,
|
||||
InstrStage<1, [XEX5]>, InstrStage<14, [XEX6]>],
|
||||
[29, 7],
|
||||
[NoBypass, GPR_Bypass]>,
|
||||
InstrItinData<FPGeneral , [InstrStage<4, [IU0to3_0, IU0to3_1, IU0to3_2, IU0to3_3]>,
|
||||
InstrStage<1, [IU4_0, IU4_1, IU4_2, IU4_3,
|
||||
IU4_4, IU4_5, IU4_6, IU4_7]>,
|
||||
InstrStage<1, [IU5]>, InstrStage<1, [IU6]>,
|
||||
InstrStage<1, [RF0]>, InstrStage<1, [FRF1]>,
|
||||
InstrStage<1, [FEX1]>, InstrStage<1, [FEX2]>,
|
||||
InstrStage<1, [FEX3]>, InstrStage<1, [FEX4]>,
|
||||
InstrStage<1, [FEX5]>, InstrStage<1, [FEX6]>],
|
||||
[15, 7, 7],
|
||||
[FPR_Bypass, FPR_Bypass, FPR_Bypass]>,
|
||||
InstrItinData<FPCompare , [InstrStage<4, [IU0to3_0, IU0to3_1, IU0to3_2, IU0to3_3]>,
|
||||
InstrStage<1, [IU4_0, IU4_1, IU4_2, IU4_3,
|
||||
IU4_4, IU4_5, IU4_6, IU4_7]>,
|
||||
InstrStage<1, [IU5]>, InstrStage<1, [IU6]>,
|
||||
InstrStage<1, [RF0]>, InstrStage<1, [FRF1]>,
|
||||
InstrStage<1, [FEX1]>, InstrStage<1, [FEX2]>,
|
||||
InstrStage<1, [FEX3]>, InstrStage<1, [FEX4]>,
|
||||
InstrStage<1, [FEX5]>, InstrStage<1, [FEX6]>],
|
||||
[13, 7, 7],
|
||||
[CR_Bypass, FPR_Bypass, FPR_Bypass]>,
|
||||
InstrItinData<FPDivD , [InstrStage<4, [IU0to3_0, IU0to3_1, IU0to3_2, IU0to3_3]>,
|
||||
InstrStage<1, [IU4_0, IU4_1, IU4_2, IU4_3,
|
||||
IU4_4, IU4_5, IU4_6, IU4_7]>,
|
||||
InstrStage<1, [IU5]>, InstrStage<1, [IU6]>,
|
||||
InstrStage<1, [RF0]>, InstrStage<71, [FRF1], 0>,
|
||||
InstrStage<71, [FEX1], 0>, InstrStage<71, [FEX2], 0>,
|
||||
InstrStage<71, [FEX3], 0>, InstrStage<71, [FEX4], 0>,
|
||||
InstrStage<71, [FEX5], 0>, InstrStage<71, [FEX6]>],
|
||||
[86, 7, 7],
|
||||
[NoBypass, FPR_Bypass, FPR_Bypass]>,
|
||||
InstrItinData<FPDivS , [InstrStage<4, [IU0to3_0, IU0to3_1, IU0to3_2, IU0to3_3]>,
|
||||
InstrStage<1, [IU4_0, IU4_1, IU4_2, IU4_3,
|
||||
IU4_4, IU4_5, IU4_6, IU4_7]>,
|
||||
InstrStage<1, [IU5]>, InstrStage<1, [IU6]>,
|
||||
InstrStage<1, [RF0]>, InstrStage<58, [FRF1], 0>,
|
||||
InstrStage<58, [FEX1], 0>, InstrStage<58, [FEX2], 0>,
|
||||
InstrStage<58, [FEX3], 0>, InstrStage<58, [FEX4], 0>,
|
||||
InstrStage<58, [FEX5], 0>, InstrStage<58, [FEX6]>],
|
||||
[73, 7, 7],
|
||||
[NoBypass, FPR_Bypass, FPR_Bypass]>,
|
||||
InstrItinData<FPSqrt , [InstrStage<4, [IU0to3_0, IU0to3_1, IU0to3_2, IU0to3_3]>,
|
||||
InstrStage<1, [IU4_0, IU4_1, IU4_2, IU4_3,
|
||||
IU4_4, IU4_5, IU4_6, IU4_7]>,
|
||||
InstrStage<1, [IU5]>, InstrStage<1, [IU6]>,
|
||||
InstrStage<1, [RF0]>, InstrStage<68, [FRF1], 0>,
|
||||
InstrStage<68, [FEX1], 0>, InstrStage<68, [FEX2], 0>,
|
||||
InstrStage<68, [FEX3], 0>, InstrStage<68, [FEX4], 0>,
|
||||
InstrStage<68, [FEX5], 0>, InstrStage<68, [FEX6]>],
|
||||
[86, 7], // FIXME: should be [86, 7] for double
|
||||
// and [82, 7] for single. Likewise,
|
||||
// the FEX? cycle count should be 68
|
||||
// for double and 64 for single.
|
||||
[NoBypass, FPR_Bypass]>,
|
||||
InstrItinData<FPFused , [InstrStage<4, [IU0to3_0, IU0to3_1, IU0to3_2, IU0to3_3]>,
|
||||
InstrStage<1, [IU4_0, IU4_1, IU4_2, IU4_3,
|
||||
IU4_4, IU4_5, IU4_6, IU4_7]>,
|
||||
InstrStage<1, [IU5]>, InstrStage<1, [IU6]>,
|
||||
InstrStage<1, [RF0]>, InstrStage<1, [FRF1]>,
|
||||
InstrStage<1, [FEX1]>, InstrStage<1, [FEX2]>,
|
||||
InstrStage<1, [FEX3]>, InstrStage<1, [FEX4]>,
|
||||
InstrStage<1, [FEX5]>, InstrStage<1, [FEX6]>],
|
||||
[15, 7, 7, 7],
|
||||
[FPR_Bypass, FPR_Bypass, FPR_Bypass, FPR_Bypass]>,
|
||||
InstrItinData<FPRes , [InstrStage<4, [IU0to3_0, IU0to3_1, IU0to3_2, IU0to3_3]>,
|
||||
InstrStage<1, [IU4_0, IU4_1, IU4_2, IU4_3,
|
||||
IU4_4, IU4_5, IU4_6, IU4_7]>,
|
||||
InstrStage<1, [IU5]>, InstrStage<1, [IU6]>,
|
||||
InstrStage<1, [RF0]>, InstrStage<1, [FRF1]>,
|
||||
InstrStage<1, [FEX1]>, InstrStage<1, [FEX2]>,
|
||||
InstrStage<1, [FEX3]>, InstrStage<1, [FEX4]>,
|
||||
InstrStage<1, [FEX5]>, InstrStage<1, [FEX6]>],
|
||||
[15, 7],
|
||||
[FPR_Bypass, FPR_Bypass]>
|
||||
]>;
|
@ -146,7 +146,7 @@ bool PPCSubtarget::enablePostRAScheduler(
|
||||
CodeGenOpt::Level OptLevel,
|
||||
TargetSubtargetInfo::AntiDepBreakMode& Mode,
|
||||
RegClassVector& CriticalPathRCs) const {
|
||||
if (DarwinDirective == PPC::DIR_440)
|
||||
if (DarwinDirective == PPC::DIR_440 || DarwinDirective == PPC::DIR_A2)
|
||||
return false;
|
||||
|
||||
Mode = TargetSubtargetInfo::ANTIDEP_CRITICAL;
|
||||
|
@ -40,6 +40,7 @@ namespace PPC {
|
||||
DIR_7400,
|
||||
DIR_750,
|
||||
DIR_970,
|
||||
DIR_A2,
|
||||
DIR_64
|
||||
};
|
||||
}
|
||||
|
33
test/CodeGen/PowerPC/a2-fp-basic.ll
Normal file
33
test/CodeGen/PowerPC/a2-fp-basic.ll
Normal file
@ -0,0 +1,33 @@
|
||||
; RUN: llc < %s -march=ppc64 -mcpu=a2 | FileCheck %s
|
||||
|
||||
%0 = type { double, double }
|
||||
|
||||
define void @maybe_an_fma(%0* sret %agg.result, %0* byval %a, %0* byval %b, %0* byval %c) nounwind {
|
||||
entry:
|
||||
%a.realp = getelementptr inbounds %0* %a, i32 0, i32 0
|
||||
%a.real = load double* %a.realp
|
||||
%a.imagp = getelementptr inbounds %0* %a, i32 0, i32 1
|
||||
%a.imag = load double* %a.imagp
|
||||
%b.realp = getelementptr inbounds %0* %b, i32 0, i32 0
|
||||
%b.real = load double* %b.realp
|
||||
%b.imagp = getelementptr inbounds %0* %b, i32 0, i32 1
|
||||
%b.imag = load double* %b.imagp
|
||||
%mul.rl = fmul double %a.real, %b.real
|
||||
%mul.rr = fmul double %a.imag, %b.imag
|
||||
%mul.r = fsub double %mul.rl, %mul.rr
|
||||
%mul.il = fmul double %a.imag, %b.real
|
||||
%mul.ir = fmul double %a.real, %b.imag
|
||||
%mul.i = fadd double %mul.il, %mul.ir
|
||||
%c.realp = getelementptr inbounds %0* %c, i32 0, i32 0
|
||||
%c.real = load double* %c.realp
|
||||
%c.imagp = getelementptr inbounds %0* %c, i32 0, i32 1
|
||||
%c.imag = load double* %c.imagp
|
||||
%add.r = fadd double %mul.r, %c.real
|
||||
%add.i = fadd double %mul.i, %c.imag
|
||||
%real = getelementptr inbounds %0* %agg.result, i32 0, i32 0
|
||||
%imag = getelementptr inbounds %0* %agg.result, i32 0, i32 1
|
||||
store double %add.r, double* %real
|
||||
store double %add.i, double* %imag
|
||||
ret void
|
||||
; CHECK: fmadd
|
||||
}
|
Loading…
Reference in New Issue
Block a user