Home | History | Annotate | Download | only in MBlaze
      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 //===----------------------------------------------------------------------===//
     13 def 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