| //===- 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 | |
| ]>; |