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