Changeset 3839


Ignore:
Timestamp:
Apr 18, 2014, 10:41:59 PM (4 years ago)
Author:
ksherdy
Message:

Added binary and unary operator support for compile time integer value exprs.

Location:
proto/s2k/trunk/framework
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • proto/s2k/trunk/framework/input/grammar/scatter/b2k.scatter

    r3834 r3839  
    5353        WHILE,
    5454        RETURN,
     55        AND             "&",
     56        OR              "|",
     57        NOT             "~",
     58        XOR             "^",
     59        MULTIPLY        "*",
     60        DIVIDE          "/",
     61        PLUS            "+",
     62        MINUS           "-",
    5563        ASSIGN      "=",
    5664        LANGLE      "<",
     
    7381
    7482nodes {
    75     assign {} [assignRest],
    76     funcCall {} [funcCallRest],
    77     idisaFuncCall {} [idisaFuncCallRest],
    78     integerConstant{intValued;} [fieldWidthSpecifier ], // codeBlockWidthSpecifier ],
    79     // primitiveType{} [intType voidType boolType bitBlockType], // KH: update S2B
    80     fieldWidthType{int fieldWidth = 1;} [],
    81     // codeBlockWidth{int codeBlockWidth = 128;} [],
     83    unaryOperator           {}                     [expr2],
     84    binaryOperator          {}                     [expr expr1 expr3 expr4],
     85    assign                  {}                     [assignRest],
     86    funcCall                {}                     [funcCallRest],
     87    idisaFuncCall           {}                     [idisaFuncCallRest],
     88    integerConstant         {intValued;}           [fieldWidthSpecifier],  // codeBlockWidthSpecifier ],
     89    // primitiveType        {}                     [intType voidType boolType bitBlockType], // KH: update S2B
     90    fieldWidthType          {int fieldWidth = 1;}  [],
     91    // codeBlockWidth{int codeBlockWidth = 128;}   [],
    8292}
    8393
     
    172182    // e x p r e s s i o n s
    173183    //   
    174 
    175 //  KH: for constant integer expressions
    176 //   
    177 //      expr        #-> expr1 ((OR^|XOR^) expr)? _leftAssoc_ ;
    178 //  expr1       #-> expr2 ((AND^) expr1)? _leftAssoc_ ;
    179 //  expr2       #-> NOT^^? expr3;                                         
    180 //  expr3       #-> expr4 ((MULTIPLY^ | DIVIDE^) expr3)? _leftAssoc_ ;
    181 //  expr4       #-> expr5 ((PLUS^ | MINUS^) expr4)? _leftAssoc_ ;
    182      
    183     expr                #-> LROUND expr RROUND
     184        expr                 #-> expr1 ((OR^|XOR^) expr)? _leftAssoc_ ;
     185    expr1                #-> expr2 ((AND^) expr1)? _leftAssoc_ ;
     186    expr2                #-> NOT^^? expr3;                                         
     187    expr3                #-> expr4 ((MULTIPLY^ | DIVIDE^) expr3)? _leftAssoc_ ;
     188    expr4                #-> expr5 ((PLUS^ | MINUS^) expr4)? _leftAssoc_ ;
     189    expr5                #-> LROUND expr RROUND
    184190                         | constant
    185191                         | compoundIdentifier ((funcCallRest _promote_) | (idisaFuncCallRest _promote_)) ? ;
  • proto/s2k/trunk/framework/input/grammar/scatter/s2k.scatter

    r3834 r3839  
    9393    filterDef               {hasSymbolTable;} [],
    9494    blockStmt               {hasSymbolTable;} [],
    95     identifier              {hasBinding;} [],
    96     compoundIdentifier      {hasBinding;} [],
    97     binaryOperator          {hasSignature;} [expr expr1 expr3 expr4],
    98     unaryOperator           {hasSignature;} [expr2],
    99     funcCall                {hasSignature;} [funcCallRest],
    100     idisaFuncCall           {hasSignature;} [idisaFuncCallRest],
    101     assign                  {} [assignRest],
    102     streamType              {hasFieldWidth;} [],
    103     integerConstant         {intValued;}    [fieldWidthSpecifier],
    104 //  primitiveType           {} [intType voidType], // TODO - update S2K2B2k to handle primitiveType
     95    identifier              {hasBinding;}     [],
     96    compoundIdentifier      {hasBinding;}     [],
     97    unaryOperator           {hasSignature;}   [expr2],
     98    binaryOperator          {hasSignature;}   [expr expr1 expr3 expr4],
     99    assign                  {}                [assignRest],
     100    funcCall                {hasSignature;}   [funcCallRest],
     101    idisaFuncCall           {hasSignature;}   [idisaFuncCallRest],
     102    streamType              {hasFieldWidth;}  [],
     103    integerConstant         {intValued;}      [fieldWidthSpecifier],
     104//  primitiveType           {}                [intType voidType], // KH: update S2K2B2k for primitiveType
    105105}
    106106
  • proto/s2k/trunk/framework/input/test/s2k/proto/grep/grep_flow.s2k

    r3834 r3839  
    8383}
    8484
    85 //filter Demo(struct Output output) {
    86 //      stream m = output.match_follows;
    87 //      int c = 0;
    88 //    foreach (stream s) in (stream m) {       
    89 //      printf("%d", c);
    90 //      c = c + 1;
    91 //     
    92 //    }   
    93 //}
     85filter Demo(struct Output output) {
     86        stream m = output.match_follows;
     87        int c = 0;
     88    foreach (stream s) in (stream m) {         
     89        printf("%d", c);
     90        c = c + 1;
     91       
     92    }   
     93}
    9494 
    95 
    9695graph Main() {
    9796
     
    111110    match(lex, output);
    112111    matchLines(lex, output);
    113 //    demo(output);
     112    demo(output);
    114113   
    115114}
  • proto/s2k/trunk/framework/output/cpplang/grep/grep.hpp

    r3834 r3839  
    103103                temp20 = simd_and(temp18,temp19);
    104104                lex.LF = simd_andc(temp20,temp17);
     105                carry_set_0.carryAdjust(0);
    105106        }
    106107       
     
    154155                temp20 = simd_and(temp18,temp19);
    155156                lex.LF = simd_andc(temp20,temp17);
     157                carry_set_0.carryAdjust(0);
    156158        }
    157159       
     
    191193                carry_set_0.getCarry(4) = bitblock::srli<127>(pablo_blk_Advance(simd_and(cursor,lex.e),carry_set_0.getCarry(4),cursor));
    192194                output.match_follows = cursor;
     195                carry_set_0.carryAdjust(5);
    193196        }
    194197       
     
    324327                output.line_starts = simd_and(output.lines,all_line_starts);
    325328                carry_set_0.getCarry(6) = bitblock::srli<127>(pablo_blk_ScanThru(output.line_starts,simd_andc(EOF_mask,simd_and(output.lines,all_line_ends)),carry_set_0.getCarry(6),output.line_ends));
     329                carry_set_0.carryAdjust(7);
    326330        }
    327331       
  • proto/s2k/trunk/framework/output/cpplang/parabix2/parabix2.hpp

    r3834 r3839  
    723723                        carry_set_0.carryDequeueEnqueue(0, 10);
    724724                }
     725                carry_set_0.carryAdjust(10);
    725726        }
    726727       
     
    11711172                marker.Ref_opener = simd_andc(lex.RefStart,ctCDPI_mask);
    11721173                marker.CD_closer = simd_andc(CD_closer,ctCDPI_mask);
     1174                carry_set_0.carryAdjust(17);
    11731175        }
    11741176       
     
    15001502                }
    15011503                carry_set_0.getCarry(12) = bitblock::srli<127>(pablo_blk_SpanUpTo(tag_Callouts.AttVal_starts,tag_Callouts.AttVal_ends,carry_set_0.getCarry(12),tag_Callouts.AttVal_spans));
     1504                carry_set_0.carryAdjust(13);
    15021505        }
    15031506       
     
    16051608                        carry_set_0.carryDequeueEnqueue(0, 6);
    16061609                }
     1610                carry_set_0.carryAdjust(6);
    16071611        }
    16081612       
     
    17161720                check_streams.non_ascii_name_starts = simd_andc(name_start,lex.ASCII_name_start);
    17171721                check_streams.non_ascii_names = simd_andc(simd_andc(simd_andc(name_stream,name_start),lex.ASCII_name_char),u8.suffix);
     1722                carry_set_0.carryAdjust(9);
    17181723        }
    17191724       
     
    17411746                check_streams.name_follows = simd_or(tag_Callouts.ElemName_ends,tag_Callouts.AttName_ends);
    17421747                check_streams.att_refs = simd_and(tag_Callouts.AttVal_spans,marker.Ref_opener);
     1748                carry_set_0.carryAdjust(0);
    17431749        }
    17441750       
     
    17521758                check_streams.name_follows = simd_or(tag_Callouts.ElemName_ends,tag_Callouts.AttName_ends);
    17531759                check_streams.att_refs = simd_and(tag_Callouts.AttVal_spans,marker.Ref_opener);
     1760                carry_set_0.carryAdjust(0);
    17541761        }
    17551762       
  • proto/s2k/trunk/framework/src/toolchain/b2k/ast/Accessors.java

    r3808 r3839  
    494494                return node.getToken().getPrintableLexeme();
    495495        }       
    496                
     496
     497        ////////////////////////////////////////////////////////////////////////////
     498        // Binary Operator
     499        ////////////////////////////////////////////////////////////////////////////
     500        public static String binaryOperatorLexeme(BinaryOperatorNode node) {           
     501                return node.getToken().getPrintableLexeme();
     502        }       
     503
     504        ////////////////////////////////////////////////////////////////////////////
     505        // Unary Operator
     506        ////////////////////////////////////////////////////////////////////////////
     507        public static String unaryOperatorLexeme(UnaryOperatorNode node) {             
     508                return node.getToken().getPrintableLexeme();
     509        }               
     510       
    497511        ////////////////////////////////////////////////////////////////////////////
    498512        // Field Width
  • proto/s2k/trunk/framework/src/toolchain/b2k/codeGenerator/visitors/CodeGenerator.java

    r3821 r3839  
    584584                return code;
    585585        }
    586                  
     586
     587        public CodeStore visitLeave(BinaryOperatorNode node, List<CodeStore> childResults) {
     588                CodeStore code = new CodeStore();
     589                CodeStore lhs  = childResults.get(0);
     590                CodeStore rhs  = childResults.get(1);
     591                code.setResultVarName(lhs.getResultVarName() + " " + Accessors.binaryOperatorLexeme(node) + " " + rhs.getResultVarName());
     592                return code;
     593        }               
     594
     595        public CodeStore visitLeave(UnaryOperatorNode node, List<CodeStore> childResults) {
     596                CodeStore code = new CodeStore();
     597                CodeStore child  = childResults.get(0);
     598                code.setResultVarName(Accessors.unaryOperatorLexeme(node) + " " + child.getResultVarName());
     599                return code;
     600        }               
     601       
    587602        public CodeStore visitLeave(BitBlockTypeNode node, List<CodeStore> childResults) {
    588603                CodeStore code = new CodeStore();
Note: See TracChangeset for help on using the changeset viewer.