1//===- MBlazeSchedule3.td - MBlaze 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//===----------------------------------------------------------------------===// 11// MBlaze instruction itineraries for the three stage pipeline. 12//===----------------------------------------------------------------------===// 13def MBlazePipe3Itineraries : ProcessorItineraries< 14 [IF,ID,EX], [], [ 15 16 // ALU instruction with one destination register and either two register 17 // source operands or one register source operand and one immediate operand. 18 // The instruction takes one cycle to execute in each of the stages. The 19 // two source operands are read during the decode stage and the result is 20 // ready after the execute stage. 21 InstrItinData< IIC_ALU, 22 [ InstrStage<1,[IF]> // one cycle in fetch stage 23 , InstrStage<1,[ID]> // one cycle in decode stage 24 , InstrStage<1,[EX]>], // one cycle in execute stage 25 [ 2 // result ready after two cycles 26 , 1 // first operand read after one cycle 27 , 1 ]>, // second operand read after one cycle 28 29 // ALU multiply instruction with one destination register and either two 30 // register source operands or one register source operand and one immediate 31 // operand. The instruction takes one cycle to execute in each of the 32 // pipeline stages except the execute stage, which takes three cycles. The 33 // two source operands are read during the decode stage and the result is 34 // ready after the execute stage. 35 InstrItinData< IIC_ALUm, 36 [ InstrStage<1,[IF]> // one cycle in fetch stage 37 , InstrStage<1,[ID]> // one cycle in decode stage 38 , InstrStage<3,[EX]>], // three cycles in execute stage 39 [ 4 // result ready after four cycles 40 , 1 // first operand read after one cycle 41 , 1 ]>, // second operand read after one cycle 42 43 // ALU divide instruction with one destination register two register source 44 // operands. The instruction takes one cycle to execute in each the pipeline 45 // stages except the execute stage, which takes 34 cycles. The two 46 // source operands are read during the decode stage and the result is ready 47 // after the execute stage. 48 InstrItinData< IIC_ALUd, 49 [ InstrStage<1,[IF]> // one cycle in fetch stage 50 , InstrStage<1,[ID]> // one cycle in decode stage 51 , InstrStage<34,[EX]>], // 34 cycles in execute stage 52 [ 35 // result ready after 35 cycles 53 , 1 // first operand read after one cycle 54 , 1 ]>, // second operand read after one cycle 55 56 // Shift instruction with one destination register and either two register 57 // source operands or one register source operand and one immediate operand. 58 // The instruction takes one cycle to execute in each of the pipeline stages 59 // except the execute stage, which takes two cycles. The two source operands 60 // are read during the decode stage and the result is ready after the execute 61 // stage. 62 InstrItinData< IIC_SHT, 63 [ InstrStage<1,[IF]> // one cycle in fetch stage 64 , InstrStage<1,[ID]> // one cycle in decode stage 65 , InstrStage<2,[EX]>], // two cycles in execute stage 66 [ 3 // result ready after three cycles 67 , 1 // first operand read after one cycle 68 , 1 ]>, // second operand read after one cycle 69 70 // Branch instruction with one source operand register. The instruction takes 71 // one cycle to execute in each of the pipeline stages. The source operand is 72 // read during the decode stage. 73 InstrItinData< IIC_BR, 74 [ InstrStage<1,[IF]> // one cycle in fetch stage 75 , InstrStage<1,[ID]> // one cycle in decode stage 76 , InstrStage<1,[EX]>], // one cycle in execute stage 77 [ 1 ]>, // first operand read after one cycle 78 79 // Conditional branch instruction with two source operand registers. The 80 // instruction takes one cycle to execute in each of the pipeline stages. The 81 // two source operands are read during the decode stage. 82 InstrItinData< IIC_BRc, 83 [ InstrStage<1,[IF]> // one cycle in fetch stage 84 , InstrStage<1,[ID]> // one cycle in decode stage 85 , InstrStage<1,[EX]>], // one cycle in execute stage 86 [ 1 // first operand read after one cycle 87 , 1 ]>, // second operand read after one cycle 88 89 // Branch and link instruction with one destination register and one source 90 // operand register. The instruction takes one cycle to execute in each of 91 // the pipeline stages. The source operand is read during the decode stage 92 // and the destination register is ready after the execute stage. 93 InstrItinData< IIC_BRl, 94 [ InstrStage<1,[IF]> // one cycle in fetch stage 95 , InstrStage<1,[ID]> // one cycle in decode stage 96 , InstrStage<1,[EX]>], // one cycle in execute stage 97 [ 2 // result ready after two cycles 98 , 1 ]>, // first operand read after one cycle 99 100 // Cache control instruction with two source operand registers. The 101 // instruction takes one cycle to execute in each of the pipeline stages 102 // except the memory access stage, which takes two cycles. The source 103 // operands are read during the decode stage. 104 InstrItinData< IIC_WDC, 105 [ InstrStage<1,[IF]> // one cycle in fetch stage 106 , InstrStage<1,[ID]> // one cycle in decode stage 107 , InstrStage<2,[EX]>], // two cycles in execute stage 108 [ 1 // first operand read after one cycle 109 , 1 ]>, // second operand read after one cycle 110 111 // Floating point instruction with one destination register and two source 112 // operand registers. The instruction takes one cycle to execute in each of 113 // the pipeline stages except the execute stage, which takes six cycles. The 114 // source operands are read during the decode stage and the results are ready 115 // after the execute stage. 116 InstrItinData< IIC_FPU, 117 [ InstrStage<1,[IF]> // one cycle in fetch stage 118 , InstrStage<1,[ID]> // one cycle in decode stage 119 , InstrStage<6,[EX]>], // six cycles in execute stage 120 [ 7 // result ready after seven cycles 121 , 1 // first operand read after one cycle 122 , 1 ]>, // second operand read after one cycle 123 124 // Floating point divide instruction with one destination register and two 125 // source operand registers. The instruction takes one cycle to execute in 126 // each of the pipeline stages except the execute stage, which takes 30 127 // cycles. The source operands are read during the decode stage and the 128 // results are ready after the execute stage. 129 InstrItinData< IIC_FPUd, 130 [ InstrStage<1,[IF]> // one cycle in fetch stage 131 , InstrStage<1,[ID]> // one cycle in decode stage 132 , InstrStage<30,[EX]>], // one cycle in execute stage 133 [ 31 // result ready after 31 cycles 134 , 1 // first operand read after one cycle 135 , 1 ]>, // second operand read after one cycle 136 137 // Convert floating point to integer instruction with one destination 138 // register and one source operand register. The instruction takes one cycle 139 // to execute in each of the pipeline stages except the execute stage, 140 // which takes seven cycles. The source operands are read during the decode 141 // stage and the results are ready after the execute stage. 142 InstrItinData< IIC_FPUi, 143 [ InstrStage<1,[IF]> // one cycle in fetch stage 144 , InstrStage<1,[ID]> // one cycle in decode stage 145 , InstrStage<7,[EX]>], // seven cycles in execute stage 146 [ 8 // result ready after eight cycles 147 , 1 ]>, // first operand read after one cycle 148 149 // Convert integer to floating point instruction with one destination 150 // register and one source operand register. The instruction takes one cycle 151 // to execute in each of the pipeline stages except the execute stage, 152 // which takes six cycles. The source operands are read during the decode 153 // stage and the results are ready after the execute stage. 154 InstrItinData< IIC_FPUf, 155 [ InstrStage<1,[IF]> // one cycle in fetch stage 156 , InstrStage<1,[ID]> // one cycle in decode stage 157 , InstrStage<6,[EX]>], // six cycles in execute stage 158 [ 7 // result ready after seven cycles 159 , 1 ]>, // first operand read after one cycle 160 161 // Floating point square root instruction with one destination register and 162 // one source operand register. The instruction takes one cycle to execute in 163 // each of the pipeline stages except the execute stage, which takes 29 164 // cycles. The source operands are read during the decode stage and the 165 // results are ready after the execute stage. 166 InstrItinData< IIC_FPUs, 167 [ InstrStage<1,[IF]> // one cycle in fetch stage 168 , InstrStage<1,[ID]> // one cycle in decode stage 169 , InstrStage<29,[EX]>], // 29 cycles in execute stage 170 [ 30 // result ready after 30 cycles 171 , 1 ]>, // first operand read after one cycle 172 173 // Floating point comparison instruction with one destination register and 174 // two source operand registers. The instruction takes one cycle to execute 175 // in each of the pipeline stages except the execute stage, which takes three 176 // cycles. The source operands are read during the decode stage and the 177 // results are ready after the execute stage. 178 InstrItinData< IIC_FPUc, 179 [ InstrStage<1,[IF]> // one cycle in fetch stage 180 , InstrStage<1,[ID]> // one cycle in decode stage 181 , InstrStage<3,[EX]>], // three cycles in execute stage 182 [ 4 // result ready after four cycles 183 , 1 // first operand read after one cycle 184 , 1 ]>, // second operand read after one cycle 185 186 // FSL get instruction with one register or immediate source operand and one 187 // destination register. The instruction takes one cycle to execute in each 188 // of the pipeline stages except the execute stage, which takes two cycles. 189 // The one source operand is read during the decode stage and the result is 190 // ready after the execute stage. 191 InstrItinData< IIC_FSLg, 192 [ InstrStage<1,[IF]> // one cycle in fetch stage 193 , InstrStage<1,[ID]> // one cycle in decode stage 194 , InstrStage<2,[EX]>], // two cycles in execute stage 195 [ 3 // result ready after two cycles 196 , 1 ]>, // first operand read after one cycle 197 198 // FSL put instruction with either two register source operands or one 199 // register source operand and one immediate operand. There is no result 200 // produced by the instruction. The instruction takes one cycle to execute in 201 // each of the pipeline stages except the execute stage, which takes two 202 // cycles. The two source operands are read during the decode stage. 203 InstrItinData< IIC_FSLp, 204 [ InstrStage<1,[IF]> // one cycle in fetch stage 205 , InstrStage<1,[ID]> // one cycle in decode stage 206 , InstrStage<2,[EX]>], // two cycles in execute stage 207 [ 1 // first operand read after one cycle 208 , 1 ]>, // second operand read after one cycle 209 210 // Memory store instruction with either three register source operands or two 211 // register source operands and one immediate operand. There is no result 212 // produced by the instruction. The instruction takes one cycle to execute in 213 // each of the pipeline stages except the execute stage, which takes two 214 // cycles. All of the source operands are read during the decode stage. 215 InstrItinData< IIC_MEMs, 216 [ InstrStage<1,[IF]> // one cycle in fetch stage 217 , InstrStage<1,[ID]> // one cycle in decode stage 218 , InstrStage<2,[EX]>], // two cycles in execute stage 219 [ 1 // first operand read after one cycle 220 , 1 // second operand read after one cycle 221 , 1 ]>, // third operand read after one cycle 222 223 // Memory load instruction with one destination register and either two 224 // register source operands or one register source operand and one immediate 225 // operand. The instruction takes one cycle to execute in each of the 226 // pipeline stages except the execute stage, which takes two cycles. All of 227 // the source operands are read during the decode stage and the result is 228 // ready after the execute stage. 229 InstrItinData< IIC_MEMl, 230 [ InstrStage<1,[IF]> // one cycle in fetch stage 231 , InstrStage<1,[ID]> // one cycle in decode stage 232 , InstrStage<2,[EX]>], // two cycles in execute stage 233 [ 3 // result ready after four cycles 234 , 1 // second operand read after one cycle 235 , 1 ]> // third operand read after one cycle 236]>; 237