blob: 9c3b5e34c5cc4becdae6c142ef29bdb9f6b46be9 [file] [log] [blame]
Evan Cheng0d68fde2009-07-21 18:54:14 +00001//===- ARMScheduleV7.td - ARM v7 Scheduling Definitions ----*- tablegen -*-===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This file defines the itinerary class data for the ARM v7 processors.
11//
12//===----------------------------------------------------------------------===//
13
David Goodwin48e13592009-08-10 15:56:13 +000014// Dual issue pipeline so every itinerary starts with FU_Pipe0 | FU_Pipe1
Evan Cheng0d68fde2009-07-21 18:54:14 +000015def CortexA8Itineraries : ProcessorItineraries<[
David Goodwineb759722009-08-11 22:38:43 +000016 // two fully-pipelined integer ALU pipelines
David Goodwin48e13592009-08-10 15:56:13 +000017 InstrItinData<IIC_iALU , [InstrStage<1, [FU_Pipe0, FU_Pipe1]>]>,
David Goodwina346e712009-08-13 15:51:13 +000018 // integer Multiply pipeline
19 InstrItinData<IIC_iMPYh , [InstrStage<1, [FU_Pipe0]>]>,
20 InstrItinData<IIC_iMPYw , [InstrStage<1, [FU_Pipe1], 0>,
21 InstrStage<2, [FU_Pipe0]>]>,
22 InstrItinData<IIC_iMPYl , [InstrStage<2, [FU_Pipe1], 0>,
23 InstrStage<3, [FU_Pipe0]>]>,
David Goodwin48e13592009-08-10 15:56:13 +000024 // loads have an extra cycle of latency, but are fully pipelined
David Goodwin4b6e4982009-08-12 18:31:53 +000025 // use FU_Issue to enforce the 1 load/store per cycle limit
26 InstrItinData<IIC_iLoad , [InstrStage<1, [FU_Issue], 0>,
David Goodwineb759722009-08-11 22:38:43 +000027 InstrStage<1, [FU_Pipe0, FU_Pipe1]>,
28 InstrStage<1, [FU_LdSt0]>]>,
David Goodwin48e13592009-08-10 15:56:13 +000029 // fully-pipelined stores
David Goodwin4b6e4982009-08-12 18:31:53 +000030 // use FU_Issue to enforce the 1 load/store per cycle limit
31 InstrItinData<IIC_iStore , [InstrStage<1, [FU_Issue], 0>,
David Goodwineb759722009-08-11 22:38:43 +000032 InstrStage<1, [FU_Pipe0, FU_Pipe1]>]>,
David Goodwin48e13592009-08-10 15:56:13 +000033 // no delay slots, so the latency of a branch is unimportant
David Goodwineb759722009-08-11 22:38:43 +000034 InstrItinData<IIC_Br , [InstrStage<1, [FU_Pipe0, FU_Pipe1]>]>,
35
David Goodwin4b6e4982009-08-12 18:31:53 +000036 // NFP ALU is not pipelined so stall all issues
37 InstrItinData<IIC_fpALU , [InstrStage<7, [FU_Pipe0], 0>,
38 InstrStage<7, [FU_Pipe1], 0>]>,
David Goodwineb759722009-08-11 22:38:43 +000039 // VFP MPY is not pipelined so stall all issues
David Goodwin4b6e4982009-08-12 18:31:53 +000040 InstrItinData<IIC_fpMPY , [InstrStage<7, [FU_Pipe0], 0>,
41 InstrStage<7, [FU_Pipe1], 0>]>,
David Goodwineb759722009-08-11 22:38:43 +000042 // loads have an extra cycle of latency, but are fully pipelined
David Goodwin4b6e4982009-08-12 18:31:53 +000043 // use FU_Issue to enforce the 1 load/store per cycle limit
44 InstrItinData<IIC_fpLoad , [InstrStage<1, [FU_Issue], 0>,
David Goodwineb759722009-08-11 22:38:43 +000045 InstrStage<1, [FU_Pipe0, FU_Pipe1]>,
46 InstrStage<1, [FU_LdSt0]>]>,
David Goodwin4b6e4982009-08-12 18:31:53 +000047 // use FU_Issue to enforce the 1 load/store per cycle limit
48 InstrItinData<IIC_fpStore , [InstrStage<1, [FU_Issue], 0>,
David Goodwineb759722009-08-11 22:38:43 +000049 InstrStage<1, [FU_Pipe0, FU_Pipe1]>]>
50]>;
51
52// FIXME
53def CortexA9Itineraries : ProcessorItineraries<[
54 InstrItinData<IIC_iALU , [InstrStage<1, [FU_Pipe0]>]>,
David Goodwina346e712009-08-13 15:51:13 +000055 InstrItinData<IIC_iMPYh , [InstrStage<1, [FU_Pipe0]>]>,
56 InstrItinData<IIC_iMPYw , [InstrStage<1, [FU_Pipe0]>]>,
57 InstrItinData<IIC_iMPYl , [InstrStage<1, [FU_Pipe0]>]>,
Evan Chengff5c7c42009-08-15 07:59:10 +000058 InstrItinData<IIC_iLoad , [InstrStage<1, [FU_Pipe0]>,
59 InstrStage<1, [FU_LdSt0]>]>,
David Goodwineb759722009-08-11 22:38:43 +000060 InstrItinData<IIC_iStore , [InstrStage<1, [FU_Pipe0]>]>,
61 InstrItinData<IIC_Br , [InstrStage<1, [FU_Pipe0]>]>,
62 InstrItinData<IIC_fpALU , [InstrStage<1, [FU_Pipe0]>]>,
63 InstrItinData<IIC_fpMPY , [InstrStage<1, [FU_Pipe0]>]>,
Evan Chengff5c7c42009-08-15 07:59:10 +000064 InstrItinData<IIC_fpLoad , [InstrStage<1, [FU_Pipe0]>,
65 InstrStage<1, [FU_LdSt0]>]>,
David Goodwineb759722009-08-11 22:38:43 +000066 InstrItinData<IIC_fpStore , [InstrStage<1, [FU_Pipe0]>]>
Evan Cheng0d68fde2009-07-21 18:54:14 +000067]>;