Ignore:
Timestamp:
Apr 8, 2013, 1:37:17 AM (6 years ago)
Author:
ksherdy
Message:

Implemented framework skeleton to support PabloB IDISA function call translation to C,C++,LLVM.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • proto/pabloj/trunk/input/grammar/scatter/pabloB.scatter

    r2988 r3004  
    44// PabloB (block-at-a-time language)
    55//
    6 // Modified: 02-12-2012 - Original definition.
    7 // Modified: 29-03-2013 - Added IDISA function call.
    8 //                                              - Added 2^k integer types.
    9 //
    10 // TODO: Add BlockMode blocks to specify SIMD field width.
    11 // TODO: Add compile time integer expressions evaluation '+','-','*','/'.
    12 // TODO: Add Code Block.
    13 //
     6// Modified:    02-12-2012      Original definition.
     7//                      29-03-2013      Added IDISA function call.
     8//                              06-04-2013      Updated to Scatter with types.
     9//
     10// TODO:                Add BlockMode blocks to specify SIMD field width.
     11//                              Add compile time integer expressions evaluation '+','-','*','/'.
     12//                              Add Code Block.
     13
     14types {}
     15
    1416context main {
    1517  recognizers {
     
    3335        KERNEL,
    3436        FUNCTION,       
    35         STREAM,
     37        STREAM, // TODO - remove
    3638        STRUCT,
    3739        VOID,
    3840       
    39         UINT8           "uint8",
    40         UINT16          "uint16",
    41         UINT32          "uint32",
    42         UINT64          "uint64",
    43         UINT128         "uint128",
    44         UINT256         "uint256",
     41        BITFIELD        "BitField",     
    4542        BITBLOCK        "BitBlock", // alias for architecture dependent SIMD instruction width
    4643       
     
    7370//       escapable {boolean escaped = false;},
    7471         intValued {int value = 0;},
     72         
    7573}
    7674
    7775nodes {
    78   assign {} [assignRest],
    79   funcCall {} [funcCallRest],
    80   idisaCall {} [idisaCallRest],
    81   integerConstant{intValued;} [],
    82   streamConstant{intValued;} [],
     76        assign {} [assignRest],
     77        funcCall {} [funcCallRest],
     78        idisaFuncCall {} [idisaFuncCallRest],
     79        integerConstant{intValued;} [],
     80        streamConstant{intValued;} [],
    8381}
    8482
     
    106104        //
    107105               
    108         kernelDef                       ->      KERNEL kernelName LCURLY initDef funcDef (optFuncDef)*  RCURLY TERMINATOR? ;
     106        kernelDef                       ->      KERNEL kernelName LCURLY initDef funcDef (optFuncDef)* expr TERMINATOR? RCURLY TERMINATOR? ; // TODO - hack - stick CarryDeclare at end for now
    109107       
    110108        kernelName                      #-> identifier ;
     
    115113        initDef                         ->  INIT initBlock TERMINATOR? ;
    116114       
    117         // initBlock                    #-> LCURLY (stateInitStmt)* RCURLY;
    118        
    119         initBlock                       #-> LCURLY (funcCallOrAssignStmt)* RCURLY; // TODO - hack - stick carry set decl stuff in the init section for now
    120        
     115        initBlock                       #-> LCURLY (stateInitStmt)* RCURLY;
     116               
    121117        stateInitStmt           ->  stateIdentifier LSQUARE stateSize RSQUARE ASSIGN LCURLY stateInitList RCURLY TERMINATOR?;
    122118       
     
    159155        stmt                                    #-> (funcCallOrAssignStmt | ifStmt | whileStmt | returnStmt | localVarDecl) (TERMINATOR)? ;
    160156       
    161         funcCallOrAssignStmt    #-> expr ( (idisaCallRest _promote_) | (funcCallRest _promote_) | (assignRest _promote_)) TERMINATOR ;
     157        funcCallOrAssignStmt    #-> expr ( (idisaFuncCallRest _promote_) | (funcCallRest _promote_) | (assignRest _promote_)) TERMINATOR ;
    162158       
    163159        funcCallRest                    -> LROUND^ funcCallArgList RROUND ;
     
    165161        funcCallArgList                 -> (expr (COMMA expr)*)? ;
    166162       
    167         idisaCallRest                   -> LANGLE^ fieldWidth RANGLE LROUND idisaCallArgList RROUND;
    168 
    169         idisaCallArgList                -> (expr (COMMA expr)*)? ;     
     163        idisaFuncCallRest               -> LANGLE^ fieldWidth RANGLE LROUND (expr (COMMA expr)*)? RROUND;
     164
     165        //idisaFuncCallArgList  ->  (expr (COMMA expr)*)? ;
    170166               
    171167        assignOperator                  -> ASSIGN;                             
     
    191187                                        |integerConstant
    192188                                        | stringConstant
    193                                         | compoundIdentifier (funcCallRest _promote_ | idisaCallRest _promote_)?
     189                                        | compoundIdentifier (funcCallRest _promote_ | idisaFuncCallRest _promote_)?
    194190                                        ;
    195191                                                                                                                                                                                       
     
    214210        type                    #->     identifier      |
    215211                                                        voidType        |
    216                                                         streamType      |
     212                                                        streamType      | // TODO - update in PabloS2PabloB
    217213                                                        structType      |
    218                                                         uint8Type       |
    219                                                         uint16Type      |
    220                                                         uint32Type      |
    221                                                         uint64Type      |
    222                                                         uint128Type |
    223                                                         uint256Type |
     214                                                        bitFieldType|
    224215                                                        bitBlockType; // | tupleType;
    225216       
     
    230221        streamTypeName  #->     identifier ;                           
    231222               
    232         uint8Type               -> UINT8 ;
    233         uint16Type              -> UINT16 ;
    234         uint32Type              -> UINT32 ;
    235         uint64Type              -> UINT64 ;
    236         uint128Type             -> UINT128 ;
    237         uint256Type             -> UINT256 ;
    238        
    239         bitBlockType    -> BITBLOCK;
     223        bitFieldType    -> BITFIELD ; // Power-of-2 bit field
     224       
     225        bitBlockType    -> BITBLOCK; // SIMD vector
    240226               
    241227        //     
Note: See TracChangeset for help on using the changeset viewer.