Changeset 3799


Ignore:
Timestamp:
Apr 6, 2014, 2:00:15 AM (3 years ago)
Author:
ksherdy
Message:

Added initial IDISA operation translation (b2k only).

Location:
proto/s2k/trunk/framework
Files:
1 added
10 edited

Legend:

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

    r3797 r3799  
    9898    // k e r n e l   d e f i n i t i o n
    9999    //
    100     kernelDef           ->  KERNEL kernelName LCURLY kernelInitDef (kernelFuncDef)+ carryDeclare TERMINATOR RCURLY TERMINATOR? ; 
     100    kernelDef           ->  KERNEL kernelName LCURLY kernelInitDef kernelFuncDefs carryDeclare TERMINATOR RCURLY TERMINATOR? ; 
     101    kernelFuncDefs      ->  kernelFuncDef * ;
    101102    kernelName          #-> identifier ;
    102103
  • proto/s2k/trunk/framework/input/templates/cpplang/idisa.template

    r3786 r3799  
    1414//////////////////////////////////////////////////////////////////////////////////////////
    1515//
    16 #ifndef PABLO_DEFINITIONS_HPP
    17 #define PABLO_DEFINITIONS_HPP
     16#ifndef IDISA_DEFINITIONS_HPP
     17#define IDISA_DEFINITIONS_HPP
    1818
    1919// runtime libraries
     
    2222#include <simd-lib/pabloSupport.hpp>
    2323
    24 // migrate error tracker, line/column tracker to compiler runtime
    25 #include <ErrorTracker.h>
    26 ErrorTracker error_tracker;
    27 
    28 #define assert_0_error(errkind, errstrm) error_tracker.NoteError(errkind, errstrm);
    29 BitBlock EOF_mask = simd<1>::constant<1>();
    30 
    3124// namespace pablo
    3225// {
     
    3427// } // pablo namespace
    3528
    36 #endif // PABLO_DEFINITIONS_HPP
     29#endif // IDISA_DEFINITIONS_HPP
  • proto/s2k/trunk/framework/input/test/b2k/statements/idisaFuncCall/idisa.b2k

    r3762 r3799  
    11// KERNEL kernelName LCURLY funcDef (optFuncDef)? RCURLY TERMINATOR?;
    22       
    3 kernel KernelName
     3kernel Kernel
    44{
    55    init
     
    3232                r = simd.srai(k);
    3333                r = simd.popcount(a);
    34                 r = simd.ctz(a);       
    35                 */
    36                
     34                r = simd.ctz(a);
    3735                r = simd.not<1>(a);             
    3836                r = simd.ifh<16>(a, b, c);
    39                                
    4037                r = hsimd.add_hl<2>(a);                 
    41        
    4238        r = simd.add(abs);
    43         /*
     39        */
     40               
     41                /*
    4442        r = simd.neg(a);
    4543        r = simd.add_hl(a);
     
    4947        r = simd.srai(k);
    5048        r = simd.popcount(a);
    51         r = simd.ctz(a);   
     49        r = simd.ctz(a);
     50        r = simd.if<128>(a,b,c);       
    5251        */
    5352       
    54                 // r = simd.constant<2>(3);
    55                
     53                a = simd.constant<2>(1);
     54                b = simd.constant<2>(0);
    5655                r = simd.add<1>(a,b);
    5756                r = simd.sub<2>(a,b);
    58                 r = simd.mul<4>(a,b);
     57                r = simd.mult<4>(a,b);
    5958                r = simd.eq<8>(a,b);
    6059                r = simd.gt<16>(a,b);
    6160                r = simd.ugt<32>(a,b);
    62                 r = simd.lt<64>(a,b);
    63                 r = simd.ult<128>(a,b);
    64                 r = simd.max<256>(a,b);
    65                 r = simd.umax<1>(a,b);
    66                 r = simd.min<2>(a,b);
    67                 r = simd.umin<4>(a,b);
    68                 r = simd.sll<8>(a,b);
    69                 r = simd.srl<16>(a,b);
    70                 r = simd.sra<32>(a,b);
     61                r = simd.lt<4>(a,b);
    7162               
    72                 //r = simd.if<128>(a,b,c);       
    73 
    74        
    75        
    76     }
    77 
    78     function do_final_block()
    79     {
    80        
    81        
    82     }
    83    
    84     function clear()
    85     {
    86    
    8763    }
    8864
  • proto/s2k/trunk/framework/output/cpplang/grep/grep.hpp

    r3794 r3799  
    103103        }
    104104       
    105         void do_final_block(struct Basis_bits & basis_bits, struct Lex & lex, BitBlock & EOF_mask)
     105        IDISA_INLINE void do_final_block(struct Basis_bits & basis_bits, struct Lex & lex, BitBlock & EOF_mask)
    106106        {
    107107                BitBlock temp1;
     
    152152        }
    153153       
    154         void clear()
     154        IDISA_INLINE void clear()
    155155        {
    156156               
     
    178178        }
    179179       
    180         void do_final_block(struct Lex & lex, struct Output & output, BitBlock & EOF_mask)
     180        IDISA_INLINE void do_final_block(struct Lex & lex, struct Output & output, BitBlock & EOF_mask)
    181181        {
    182182                BitBlock cursor;
     
    189189        }
    190190       
    191         void clear()
     191        IDISA_INLINE void clear()
    192192        {
    193193               
     
    264264        }
    265265       
    266         void do_final_block(struct Lex & lex, struct Output & output, BitBlock & EOF_mask)
     266        IDISA_INLINE void do_final_block(struct Lex & lex, struct Output & output, BitBlock & EOF_mask)
    267267        {
    268268                BitBlock all_line_starts;
     
    322322        }
    323323       
    324         void clear()
     324        IDISA_INLINE void clear()
    325325        {
    326326                carry_set_0.setCarry(carry_set_0.carryFlip(0), 0);
  • proto/s2k/trunk/framework/output/cpplang/idisa/Makefile

    r3752 r3799  
    55CFLAGS= $(SSE) -O2
    66SSE=-msse2 #-msse4.1 -DUSE_PTEST #-mssse3 -msse4.1 -msse4.2
    7 INCLUDES=-I../../../../Development/proto/parabix2/lib -I../../../../Development/proto/parabix2/util
     7INCLUDES=-I/home/ken/Development/proto/s2k/trunk/demo/strtoll/lib
    88
    99ARCH=$(shell getconf LONG_BIT)
  • proto/s2k/trunk/framework/output/cpplang/idisa/idisa.cpp

    r3752 r3799  
    1 #include "idisa_definitions.hpp"
     1#include "idisa.hpp"
    22#include <stdlib.h>
    33#include <stdio.h>
     
    55int main()
    66{
    7         printf("hello world\n");
     7        struct Kernel kernel;
     8        kernel.do_block();
     9        printf("Success.\n");
    810        return 0;
    911}
  • proto/s2k/trunk/framework/output/cpplang/parabix2/parabix2.hpp

    r3798 r3799  
    459459        }
    460460       
    461         void do_final_block(struct Basis_bits & basis_bits, struct Lex & lex, struct U8 & u8, BitBlock & EOF_mask)
     461        IDISA_INLINE void do_final_block(struct Basis_bits & basis_bits, struct Lex & lex, struct U8 & u8, BitBlock & EOF_mask)
    462462        {
    463463                BitBlock temp1;
     
    725725        }
    726726       
    727         void clear()
     727        IDISA_INLINE void clear()
    728728        {
    729729               
     
    957957        }
    958958       
    959         void do_final_block(struct Lex & lex, struct Marker & marker, struct CtCDPI_Callouts & ctCDPI_Callouts, struct Check_streams & check_streams, BitBlock & EOF_mask)
     959        IDISA_INLINE void do_final_block(struct Lex & lex, struct Marker & marker, struct CtCDPI_Callouts & ctCDPI_Callouts, struct Check_streams & check_streams, BitBlock & EOF_mask)
    960960        {
    961961                ctCDPI_Callouts.Ct_starts = simd<1>::constant<0>();
     
    11731173        }
    11741174       
    1175         void clear()
     1175        IDISA_INLINE void clear()
    11761176        {
    11771177                carry_set_0.setCarry(carry_set_0.carryFlip(2), 2);
     
    13451345        }
    13461346       
    1347         void do_final_block(struct Lex & lex, struct Marker & marker, struct Tag_Callouts & tag_Callouts, BitBlock & EOF_mask)
     1347        IDISA_INLINE void do_final_block(struct Lex & lex, struct Marker & marker, struct Tag_Callouts & tag_Callouts, BitBlock & EOF_mask)
    13481348        {
    13491349                BitBlock EqExpected;
     
    15021502        }
    15031503       
    1504         void clear()
     1504        IDISA_INLINE void clear()
    15051505        {
    15061506               
     
    15621562        }
    15631563       
    1564         void do_final_block(struct Lex & lex, struct Marker & marker, struct Ref_Callouts & ref_Callouts, BitBlock & EOF_mask)
     1564        IDISA_INLINE void do_final_block(struct Lex & lex, struct Marker & marker, struct Ref_Callouts & ref_Callouts, BitBlock & EOF_mask)
    15651565        {
    15661566                ref_Callouts.GenRef_starts = simd<1>::constant<0>();
     
    16071607        }
    16081608       
    1609         void clear()
     1609        IDISA_INLINE void clear()
    16101610        {
    16111611               
     
    16701670        }
    16711671       
    1672         void do_final_block(struct CtCDPI_Callouts & ctCDPI_Callouts, struct Ref_Callouts & ref_Callouts, struct Tag_Callouts & tag_Callouts, struct Lex & lex, struct U8 & u8, struct Check_streams & check_streams, BitBlock & EOF_mask)
     1672        IDISA_INLINE void do_final_block(struct CtCDPI_Callouts & ctCDPI_Callouts, struct Ref_Callouts & ref_Callouts, struct Tag_Callouts & tag_Callouts, struct Lex & lex, struct U8 & u8, struct Check_streams & check_streams, BitBlock & EOF_mask)
    16731673        {
    16741674                BitBlock PI_names;
     
    17181718        }
    17191719       
    1720         void clear()
     1720        IDISA_INLINE void clear()
    17211721        {
    17221722               
     
    17431743        }
    17441744       
    1745         void do_final_block(struct Marker & marker, struct Tag_Callouts & tag_Callouts, struct Check_streams & check_streams, BitBlock & EOF_mask)
     1745        IDISA_INLINE void do_final_block(struct Marker & marker, struct Tag_Callouts & tag_Callouts, struct Check_streams & check_streams, BitBlock & EOF_mask)
    17461746        {
    17471747                if (bitblock::any(simd_andc(marker.CD_closer,tag_Callouts.AttVal_spans)))
     
    17541754        }
    17551755       
    1756         void clear()
     1756        IDISA_INLINE void clear()
    17571757        {
    17581758               
  • proto/s2k/trunk/framework/src/toolchain/b2k/ast/Generators.java

    r3782 r3799  
    116116                        String name,
    117117                        KernelInitDefNode kernelInitDefNode,
    118                         KernelFuncDefNode doBlockKernelFuncDefNode,
    119                         KernelFuncDefNode doFinalBlockKernelFuncDefNode,
    120                         KernelFuncDefNode clearKernelFuncDefNode) {
     118                        KernelFuncDefNode ... kernelFuncDefs ) {
    121119               
    122120                        LextantToken token = Generators.makeLextantToken(locator, Lextant.KERNEL);
     
    126124                        kernelDefNode.appendChild(identifierNode);
    127125                        kernelDefNode.appendChild(kernelInitDefNode);
    128                         kernelDefNode.appendChild(doBlockKernelFuncDefNode.deepCopy());
    129                         kernelDefNode.appendChild(doFinalBlockKernelFuncDefNode.deepCopy());
    130                         kernelDefNode.appendChild(clearKernelFuncDefNode.deepCopy());
     126                       
     127                        if(kernelFuncDefs.length > 0) {
     128                                KernelFuncDefsNode kernelFuncDefsNode = new KernelFuncDefsNode(kernelFuncDefs[0].getToken());
     129                                for(KernelFuncDefNode kernelFuncDef : kernelFuncDefs) {
     130                                        kernelFuncDefsNode.appendChild(kernelFuncDef.deepCopy());
     131                                }
     132                                kernelDefNode.appendChild(kernelFuncDefsNode);
     133                        }
    131134                       
    132135                        return kernelDefNode;
     
    226229    //////////////////////////////////////////////////////////////////////////
    227230    // Function definitions
    228     //
     231    //   
    229232    public static KernelFuncDefNode makeKernelFuncDefNode(Locator locator, String identifier) {
    230233       
  • proto/s2k/trunk/framework/src/toolchain/b2k/codeGenerator/visitors/CodeGenerator.java

    r3797 r3799  
    122122                code.addLine(""); // a blank line
    123123               
     124                /*
    124125                CodeStore doBlockCodeStore = childResults.get(2);
    125126                doBlockCodeStore.prependToFirst("IDISA_INLINE ");
     
    133134                //doFinalBlockCodeStore.prependToFirst("IDISA_INLINE ");
    134135                code.addAll(clearCodeStore, 0);
    135 
    136                 CodeStore carryDeclareCodeStore = childResults.get(5);
     136                 */
     137               
     138                CodeStore kernelFuncDefsCodeStore = childResults.get(2);
     139                code.addAll(kernelFuncDefsCodeStore, 0);
     140               
     141                // Accessors.
     142               
     143                // CodeStore carryDeclareCodeStore = childResults.get(5);
     144                CodeStore carryDeclareCodeStore = childResults.get(3);
    137145                code.addAll(carryDeclareCodeStore, 0);
    138146                       
     
    173181        }
    174182
     183        public CodeStore visitLeave(KernelFuncDefsNode node, List<CodeStore> childResults) {
     184                CodeStore code = new CodeStore();               
     185               
     186                if (childResults.isEmpty()) {
     187                        code.addLine(""); // empty if / while
     188                }
     189               
     190                for (CodeStore child: childResults) {
     191                        code.addAll(child, 0);
     192                }               
     193               
     194                return code;           
     195        }
     196       
    175197        public CodeStore visitLeave(KernelFuncDefNode node, List<CodeStore> childResults) {
    176198                       
     
    181203                CodeStore blockStmtCodeStore = childResults.get(2);
    182204               
    183                 code.addFormattedLine("void %s(%s)", identifier, parameters);
     205                code.addFormattedLine("IDISA_INLINE void %s(%s)", identifier, parameters);
    184206                code.addLine("{");
    185207                code.addAll(blockStmtCodeStore, 1);
     
    473495                String arguments                                = childResults.get(2).getResultVarName();
    474496               
     497                //
    475498                IDISABuiltin idisaBuiltin = IDISABuiltin.fromString(idisaFullyQualifiedName);
    476                 assert idisaBuiltin != null : "Unknown IDISA Operation: " + idisaOperationName;
    477                 assert idisaBuiltin.hasSignature(Integer.valueOf(fieldWidth)) : "Unknown IDISA signature.";
     499                assert idisaBuiltin != null :
     500                        "Unknown IDISA operation name: " + idisaPackageName + "::" + idisaOperationName;
     501                assert idisaBuiltin.hasSignature(Integer.valueOf(fieldWidth)) :
     502                        "Unknown IDISA operation at field width: " + idisaPackageName + "::" + idisaOperationName + "<" + fieldWidth + ">" ;
    478503               
    479504                // AbstractIDISABuiltinGenerator
     
    481506                        = idisaBuiltin.getSignature(Integer.valueOf(fieldWidth)).getIDISABuiltinsGenerator();           
    482507               
    483                 String idisaFuncCallString = idisaBuiltinsGenerator.makeIDISAFuncCall(idisaBuiltins2Lang, idisaPackageName, idisaOperationName, fieldWidth, arguments);         
     508                String idisaFuncCallString
     509                    = idisaBuiltinsGenerator.makeIDISAFuncCall(idisaBuiltins2Lang, idisaPackageName, idisaOperationName, fieldWidth, arguments);               
    484510               
    485511                code.setResultVarName(idisaFuncCallString);             // Function invocation as an expression
  • proto/s2k/trunk/framework/src/toolchain/s2k/transformer/visitors/S2K2B2K/S2K2B2KTransformer.java

    r3797 r3799  
    7474            KernelFuncDefNode clearKernelFuncDef                = makeClearKernelFuncDefNode(locator, CLEAR.b2kName());
    7575            addCarryInitFuncCallNodes(carryInitFuncCalls, clearKernelFuncDef);
    76                        
     76           
    7777            KernelDefNode kernelDef             = Generators.makeKernelDef(locator,
    7878                                                                            kernelName,
     
    222222        //       
    223223       
    224         // KH: quick and dirty translations bypass b2k.ast.Generators and instead use 'new'
     224        // KH: quick and dirty translations bypass b2k.ast.Generators and use 'new' directly
    225225
    226226        // AddFilterStmtNodes -> AddKernelStmtNodes
Note: See TracChangeset for help on using the changeset viewer.