//===- MBlazeSchedule5.td - MBlaze Scheduling Definitions --*- tablegen -*-===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===// // MBlaze instruction itineraries for the five stage pipeline. //===----------------------------------------------------------------------===// def MBlazePipe5Itineraries : ProcessorItineraries< [IF,ID,EX,MA,WB], [], [ // ALU instruction with one destination register and either two register // source operands or one register source operand and one immediate operand. // The instruction takes one cycle to execute in each of the stages. The // two source operands are read during the decode stage and the result is // ready after the execute stage. InstrItinData< IIC_ALU, [ InstrStage<1,[IF]> // one cycle in fetch stage , InstrStage<1,[ID]> // one cycle in decode stage , InstrStage<1,[EX]> // one cycle in execute stage , InstrStage<1,[MA]> // one cycle in memory access stage , InstrStage<1,[WB]>], // one cycle in write back stage [ 2 // result ready after two cycles , 1 // first operand read after one cycle , 1 ]>, // second operand read after one cycle // ALU multiply instruction with one destination register and either two // register source operands or one register source operand and one immediate // operand. The instruction takes one cycle to execute in each of the // pipeline stages. The two source operands are read during the decode stage // and the result is ready after the execute stage. InstrItinData< IIC_ALUm, [ InstrStage<1,[IF]> // one cycle in fetch stage , InstrStage<1,[ID]> // one cycle in decode stage , InstrStage<1,[EX]> // one cycle in execute stage , InstrStage<1,[MA]> // one cycle in memory access stage , InstrStage<1,[WB]>], // one cycle in write back stage [ 2 // result ready after two cycles , 1 // first operand read after one cycle , 1 ]>, // second operand read after one cycle // ALU divide instruction with one destination register two register source // operands. The instruction takes one cycle to execute in each the pipeline // stages except the memory access stage, which takes 31 cycles. The two // source operands are read during the decode stage and the result is ready // after the memory access stage. InstrItinData< IIC_ALUd, [ InstrStage<1,[IF]> // one cycle in fetch stage , InstrStage<1,[ID]> // one cycle in decode stage , InstrStage<1,[EX]> // one cycle in execute stage , InstrStage<31,[MA]> // 31 cycles in memory access stage , InstrStage<1,[WB]>], // one cycle in write back stage [ 33 // result ready after 33 cycles , 1 // first operand read after one cycle , 1 ]>, // second operand read after one cycle // Shift instruction with one destination register and either two register // source operands or one register source operand and one immediate operand. // The instruction takes one cycle to execute in each of the pipeline stages. // The two source operands are read during the decode stage and the result is // ready after the memory access stage. InstrItinData< IIC_SHT, [ InstrStage<1,[IF]> // one cycle in fetch stage , InstrStage<1,[ID]> // one cycle in decode stage , InstrStage<1,[EX]> // one cycle in execute stage , InstrStage<1,[MA]> // one cycle in memory access stage , InstrStage<1,[WB]>], // one cycle in write back stage [ 3 // result ready after three cycles , 1 // first operand read after one cycle , 1 ]>, // second operand read after one cycle // Branch instruction with one source operand register. The instruction takes // one cycle to execute in each of the pipeline stages. The source operand is // read during the decode stage. InstrItinData< IIC_BR, [ InstrStage<1,[IF]> // one cycle in fetch stage , InstrStage<1,[ID]> // one cycle in decode stage , InstrStage<1,[EX]> // one cycle in execute stage , InstrStage<1,[MA]> // one cycle in memory access stage , InstrStage<1,[WB]>], // one cycle in write back stage [ 1 ]>, // first operand read after one cycle // Conditional branch instruction with two source operand registers. The // instruction takes one cycle to execute in each of the pipeline stages. The // two source operands are read during the decode stage. InstrItinData< IIC_BRc, [ InstrStage<1,[IF]> // one cycle in fetch stage , InstrStage<1,[ID]> // one cycle in decode stage , InstrStage<1,[EX]> // one cycle in execute stage , InstrStage<1,[MA]> // one cycle in memory access stage , InstrStage<1,[WB]>], // one cycle in write back stage [ 1 // first operand read after one cycle , 1 ]>, // second operand read after one cycle // Branch and link instruction with one destination register and one source // operand register. The instruction takes one cycle to execute in each of // the pipeline stages. The source operand is read during the decode stage // and the destination register is ready after the writeback stage. InstrItinData< IIC_BRl, [ InstrStage<1,[IF]> // one cycle in fetch stage , InstrStage<1,[ID]> // one cycle in decode stage , InstrStage<1,[EX]> // one cycle in execute stage , InstrStage<1,[MA]> // one cycle in memory access stage , InstrStage<1,[WB]>], // one cycle in write back stage [ 4 // result ready after four cycles , 1 ]>, // first operand read after one cycle // Cache control instruction with two source operand registers. The // instruction takes one cycle to execute in each of the pipeline stages // except the memory access stage, which takes two cycles. The source // operands are read during the decode stage. InstrItinData< IIC_WDC, [ InstrStage<1,[IF]> // one cycle in fetch stage , InstrStage<1,[ID]> // one cycle in decode stage , InstrStage<1,[EX]> // one cycle in execute stage , InstrStage<2,[MA]> // two cycles in memory access stage , InstrStage<1,[WB]>], // one cycle in write back stage [ 1 // first operand read after one cycle , 1 ]>, // second operand read after one cycle // Floating point instruction with one destination register and two source // operand registers. The instruction takes one cycle to execute in each of // the pipeline stages except the memory access stage, which takes two // cycles. The source operands are read during the decode stage and the // results are ready after the writeback stage. InstrItinData< IIC_FPU, [ InstrStage<1,[IF]> // one cycle in fetch stage , InstrStage<1,[ID]> // one cycle in decode stage , InstrStage<1,[EX]> // one cycle in execute stage , InstrStage<2,[MA]> // two cycles in memory access stage , InstrStage<1,[WB]>], // one cycle in write back stage [ 5 // result ready after five cycles , 1 // first operand read after one cycle , 1 ]>, // second operand read after one cycle // Floating point divide instruction with one destination register and two // source operand registers. The instruction takes one cycle to execute in // each of the pipeline stages except the memory access stage, which takes 26 // cycles. The source operands are read during the decode stage and the // results are ready after the writeback stage. InstrItinData< IIC_FPUd, [ InstrStage<1,[IF]> // one cycle in fetch stage , InstrStage<1,[ID]> // one cycle in decode stage , InstrStage<1,[EX]> // one cycle in execute stage , InstrStage<26,[MA]> // 26 cycles in memory access stage , InstrStage<1,[WB]>], // one cycle in write back stage [ 29 // result ready after 29 cycles , 1 // first operand read after one cycle , 1 ]>, // second operand read after one cycle // Convert floating point to integer instruction with one destination // register and one source operand register. The instruction takes one cycle // to execute in each of the pipeline stages except the memory access stage, // which takes three cycles. The source operands are read during the decode // stage and the results are ready after the writeback stage. InstrItinData< IIC_FPUi, [ InstrStage<1,[IF]> // one cycle in fetch stage , InstrStage<1,[ID]> // one cycle in decode stage , InstrStage<1,[EX]> // one cycle in execute stage , InstrStage<3,[MA]> // three cycles in memory access stage , InstrStage<1,[WB]>], // one cycle in write back stage [ 6 // result ready after six cycles , 1 ]>, // first operand read after one cycle // Convert integer to floating point instruction with one destination // register and one source operand register. The instruction takes one cycle // to execute in each of the pipeline stages except the memory access stage, // which takes two cycles. The source operands are read during the decode // stage and the results are ready after the writeback stage. InstrItinData< IIC_FPUf, [ InstrStage<1,[IF]> // one cycle in fetch stage , InstrStage<1,[ID]> // one cycle in decode stage , InstrStage<1,[EX]> // one cycle in execute stage , InstrStage<2,[MA]> // two cycles in memory access stage , InstrStage<1,[WB]>], // one cycle in write back stage [ 5 // result ready after five cycles , 1 ]>, // first operand read after one cycle // Floating point square root instruction with one destination register and // one source operand register. The instruction takes one cycle to execute in // each of the pipeline stages except the memory access stage, which takes 25 // cycles. The source operands are read during the decode stage and the // results are ready after the writeback stage. InstrItinData< IIC_FPUs, [ InstrStage<1,[IF]> // one cycle in fetch stage , InstrStage<1,[ID]> // one cycle in decode stage , InstrStage<1,[EX]> // one cycle in execute stage , InstrStage<25,[MA]> // 25 cycles in memory access stage , InstrStage<1,[WB]>], // one cycle in write back stage [ 28 // result ready after 28 cycles , 1 ]>, // first operand read after one cycle // Floating point comparison instruction with one destination register and // two source operand registers. The instruction takes one cycle to execute // in each of the pipeline stages. The source operands are read during the // decode stage and the results are ready after the execute stage. InstrItinData< IIC_FPUc, [ InstrStage<1,[IF]> // one cycle in fetch stage , InstrStage<1,[ID]> // one cycle in decode stage , InstrStage<1,[EX]> // one cycle in execute stage , InstrStage<1,[MA]> // one cycle in memory access stage , InstrStage<1,[WB]>], // one cycle in write back stage [ 2 // result ready after two cycles , 1 // first operand read after one cycle , 1 ]>, // second operand read after one cycle // FSL get instruction with one register or immediate source operand and one // destination register. The instruction takes one cycle to execute in each // of the pipeline stages. The one source operand is read during the decode // stage and the result is ready after the execute stage. InstrItinData< IIC_FSLg, [ InstrStage<1,[IF]> // one cycle in fetch stage , InstrStage<1,[ID]> // one cycle in decode stage , InstrStage<1,[EX]> // one cycle in execute stage , InstrStage<1,[MA]> // one cycle in memory access stage , InstrStage<1,[WB]>], // one cycle in write back stage [ 2 // result ready after two cycles , 1 ]>, // first operand read after one cycle // FSL put instruction with either two register source operands or one // register source operand and one immediate operand. There is no result // produced by the instruction. The instruction takes one cycle to execute in // each of the pipeline stages. The two source operands are read during the // decode stage. InstrItinData< IIC_FSLp, [ InstrStage<1,[IF]> // one cycle in fetch stage , InstrStage<1,[ID]> // one cycle in decode stage , InstrStage<1,[EX]> // one cycle in execute stage , InstrStage<1,[MA]> // one cycle in memory access stage , InstrStage<1,[WB]>], // one cycle in write back stage [ 1 // first operand read after one cycle , 1 ]>, // second operand read after one cycle // Memory store instruction with either three register source operands or two // register source operands and one immediate operand. There is no result // produced by the instruction. The instruction takes one cycle to execute in // each of the pipeline stages. All of the source operands are read during // the decode stage. InstrItinData< IIC_MEMs, [ InstrStage<1,[IF]> // one cycle in fetch stage , InstrStage<1,[ID]> // one cycle in decode stage , InstrStage<1,[EX]> // one cycle in execute stage , InstrStage<1,[MA]> // one cycle in memory access stage , InstrStage<1,[WB]>], // one cycle in write back stage [ 1 // first operand read after one cycle , 1 // second operand read after one cycle , 1 ]>, // third operand read after one cycle // Memory load instruction with one destination register and either two // register source operands or one register source operand and one immediate // operand. The instruction takes one cycle to execute in each of the // pipeline stages. All of the source operands are read during the decode // stage and the result is ready after the writeback stage. InstrItinData< IIC_MEMl, [ InstrStage<1,[IF]> // one cycle in fetch stage , InstrStage<1,[ID]> // one cycle in decode stage , InstrStage<1,[EX]> // one cycle in execute stage , InstrStage<1,[MA]> // one cycle in memory access stage , InstrStage<1,[WB]>], // one cycle in write back stage [ 4 // result ready after four cycles , 1 // second operand read after one cycle , 1 ]> // third operand read after one cycle ]>;