Changeset 3127


Ignore:
Timestamp:
May 10, 2013, 4:37:20 PM (6 years ago)
Author:
linmengl
Message:

add pablob -> C translator

Location:
proto/pabloj/trunk
Files:
6 added
8 edited

Legend:

Unmodified
Added
Removed
  • proto/pabloj/trunk/runConfigurations/compileIdisaPabloB.launch

    r3029 r3127  
    99</listAttribute>
    1010<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="application.PabloJ"/>
    11 <stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-b ${project_loc}/input/test/pabloB/test.pablob -t idisa_definitions.template"/>
     11<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-x clang -b ${project_loc}/input/test/pabloB/test.pablob -t idisa_definitions.template"/>
    1212<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="pabloj"/>
    1313<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-ea"/>
  • proto/pabloj/trunk/src/application/config/ConfigurationFactory.java

    r2998 r3127  
    3434       
    3535        if (configuration.targetLang.equals(Configuration.CLANG)) { // C language
     36                System.out.println("I'm using clang");
    3637                configuration.templateFileName = cli.getOptionValue("t", "pablo_definitions.template");
    3738                configuration.templateDirectory = FileUtil.ensureEndsWith(cli.getOptionValue("T", Configuration.TEMPLATES_DIRECTORY + Configuration.CLANG), File.separator);
    3839                configuration.outputFileName = cli.getOptionValue("o", FileUtil.replaceFileNameExtension(new File(configuration.templateFileName).getName(), ".h"));
    3940               
    40                 //compilerConfig.outputDirectory = cli.getOptionValue("O", CompilerConfig.CLANG);
    41                
    42         } else { // C++ language - default
     41                //compilerConfig.outputDirectory = cli.getOptionValue("O", CompilerConfig.CLANG);                       
     42               
     43        } else { // C++ language - default
     44                System.out.println("I'm using cpplang");
    4345                configuration.templateFileName = cli.getOptionValue("t", "pablo_definitions.template");
    4446                configuration.templateDirectory = FileUtil.ensureEndsWith(cli.getOptionValue("T", Configuration.TEMPLATES_DIRECTORY + Configuration.CPPLANG), File.separator);
  • proto/pabloj/trunk/src/application/config/ConfigurationOptions.java

    r2998 r3127  
    8585                        options.addOption(option);                     
    8686
    87                     OptionBuilder.hasArg(false);
     87                    OptionBuilder.hasArg(true);
    8888                    OptionBuilder.isRequired(false);
    8989                    OptionBuilder.withLongOpt("language");
  • proto/pabloj/trunk/src/application/generators/ApplicationGenerator.java

    r3010 r3127  
    2222import java.io.File;
    2323
     24import toolchain.pabloB.codeGenerator.idisa.IDISABuiltin2C;
    2425import toolchain.pabloB.codeGenerator.idisa.IDISABuiltin2CPP;
    2526import toolchain.pabloB.codeGenerator.visitors.AbstractUnparser;
    2627import toolchain.pabloB.codeGenerator.visitors.Unparser;
    2728import toolchain.pabloB.lang.carrySet.AbstractCarrySetBuiltins2Lang;
     29import toolchain.pabloB.lang.carrySet.CarrySetBuiltins2C;
    2830import toolchain.pabloB.lang.carrySet.CarrySetBuiltins2CPP;
    2931import toolchain.pabloB.symbols.SymbolTable;
     
    6163               
    6264                if(applicationConfiguration.targetLang.contentEquals(Configuration.CLANG)) {
    63                         //builtins2Lang = new Builtins2C();
    64                         //carrySet2Lang = new CarrySet2C();
    65                         //unparser        = new Unparser(new IDISABuiltins2C());
     65                        builtins2Lang = new PabloSBuiltins2C();
     66                        carrySet2Lang = new CarrySetBuiltins2C();
     67                        unparser          = new Unparser(new IDISABuiltin2C());
    6668                } else if(applicationConfiguration.targetLang.contentEquals(Configuration.CPPLANG)) {
    6769                        builtins2Lang = new PabloSBuiltins2CPP();
  • proto/pabloj/trunk/src/toolchain/pabloB/codeGenerator/idisa/AbstractIDISABuiltin2Lang.java

    r3032 r3127  
    2626package toolchain.pabloB.codeGenerator.idisa;
    2727
     28import java.util.ArrayList;
     29
     30import toolchain.pabloB.codeGenerator.helpers.UnparserUtil;
     31
    2832public abstract class AbstractIDISABuiltin2Lang {
     33       
     34        protected String _firstArg;     
     35       
     36        protected String getArgCsv(String[] arguments, int start) {
     37                ArrayList<String> argList = new ArrayList<String>();
     38                for (String arg: arguments)
     39                {
     40                        for (String parts: arg.split(","))
     41                        {
     42                                argList.add(parts.trim());
     43                        }
     44                }
     45                _firstArg = argList.get(0);
     46               
     47                String csv = UnparserUtil.makeDelimitedList(argList.subList(start, argList.size()), ", ");
     48                return csv;
     49        }
     50       
     51        protected String getArgCsv(String[] arguments)
     52        {
     53                return getArgCsv(arguments, 0);
     54        }       
     55       
    2956        public abstract String makeIDISAFunctionCall0(String operationBaseName, String operationClassName, String fieldWidth, String ...arguments);
    3057        public abstract String makeIDISAFunctionCall1(String operationBaseName, String operationClassName, String fieldWidth, String ...arguments);
  • proto/pabloj/trunk/src/toolchain/pabloB/codeGenerator/idisa/IDISABuiltin2C.java

    r3032 r3127  
    22
    33public class IDISABuiltin2C extends AbstractIDISABuiltin2Lang {
     4       
     5        private String appendParameter(String origin, String newp)
     6        {
     7                if (origin.length() > 0)
     8                        return origin + ", " + _firstArg;
     9                else
     10                        return _firstArg;               
     11        }
    412
    513        @Override
    614        public String makeIDISAFunctionCall0(String operationBaseName,
    715                        String operationClassName, String fieldWidth, String... arguments) {
    8                 // TODO Auto-generated method stub
    9                 return null;
     16               
     17                String csv = getArgCsv(arguments);
     18                return String.format("%s_%s_%s(%s)", operationClassName, operationBaseName, fieldWidth, csv);
    1019        }
    1120
     
    1322        public String makeIDISAFunctionCall1(String operationBaseName,
    1423                        String operationClassName, String fieldWidth, String... arguments) {
    15                 // TODO Auto-generated method stub
    16                 return null;
     24               
     25                String csv = getArgCsv(arguments, 1);           
     26               
     27                return String.format("%s_%s_%s(%s)", operationClassName, operationBaseName, fieldWidth, appendParameter(csv, _firstArg));
    1728        }
    1829
     
    2031        public String makeIDISAFunctionCall2(String operationBaseName,
    2132                        String operationClassName, String fieldWidth, String... arguments) {
    22                 // TODO Auto-generated method stub
    23                 return null;
     33               
     34                String csv = getArgCsv(arguments);
     35                return String.format("%s_%s(%s)", operationClassName, operationBaseName, csv);
    2436        }
    2537
     
    2739        public String makeIDISAFunctionCall3(String operationBaseName,
    2840                        String operationClassName, String fieldWidth, String... arguments) {
    29                 // TODO Auto-generated method stub
    30                 return null;
     41               
     42                String csv = getArgCsv(arguments);
     43                return String.format("%s_%s(%s)", operationClassName, operationBaseName, csv);
    3144        }
    3245
     
    3447        public String makeIDISAFunctionCall4(String operationBaseName,
    3548                        String operationClassName, String fieldWidth, String... arguments) {
    36                 // TODO Auto-generated method stub
    37                 return null;
     49               
     50                String csv = getArgCsv(arguments, 1);
     51                return String.format("%s_%s(%s)", operationClassName, operationBaseName, appendParameter(csv, _firstArg));
    3852        }
    3953
     
    4155        public String makeIDISAFunctionCallStore(String operationBaseName,
    4256                        String operationClassName, String fieldWidth, String[] arguments) {
    43                 // TODO Auto-generated method stub
    44                 return null;
     57               
     58                String csv = getArgCsv(arguments, 1);
     59                return String.format("%s_%s(%s)", operationClassName, operationBaseName, _firstArg + ", &" + csv);
    4560        }
    4661
     
    4863        public String makeIDISAFunctionCallLoad(String operationBaseName,
    4964                        String operationClassName, String fieldWidth, String[] arguments) {
    50                 // TODO Auto-generated method stub
    51                 return null;
     65                String csv = getArgCsv(arguments, 1);
     66                return String.format("%s_%s(%s)", operationClassName, operationBaseName, "&" + _firstArg);
    5267        }
    5368}
  • proto/pabloj/trunk/src/toolchain/pabloB/codeGenerator/idisa/IDISABuiltin2CPP.java

    r3032 r3127  
    1313
    1414
    15 public class IDISABuiltin2CPP extends AbstractIDISABuiltin2Lang{
    16        
    17         private String _firstArg;
    18        
    19         private String getArgCsv(String[] arguments, int start) {
    20                 ArrayList<String> argList = new ArrayList<String>();
    21                 for (String arg: arguments)
    22                 {
    23                         for (String parts: arg.split(","))
    24                         {
    25                                 argList.add(parts.trim());
    26                         }
    27                 }
    28                 _firstArg = argList.get(0);
    29                
    30                 String csv = UnparserUtil.makeDelimitedList(argList.subList(start, argList.size()), ", ");
    31                 return csv;
    32         }
    33        
    34         private String getArgCsv(String[] arguments)
    35         {
    36                 return getArgCsv(arguments, 0);
    37         }
     15public class IDISABuiltin2CPP extends AbstractIDISABuiltin2Lang{       
    3816
    3917        @Override
     
    4119               
    4220                String csv = getArgCsv(arguments);
    43                
    4421                return String.format("%s<%s>::%s(%s)", operationClassName, fieldWidth, operationBaseName, csv);
    4522        }
     
    5027               
    5128                String csv = getArgCsv(arguments, 1);
    52                                                
    5329                return String.format("%s<%s>::%s<%s>(%s)", operationClassName, fieldWidth, operationBaseName, _firstArg, csv);
    5430        }
  • proto/pabloj/trunk/src/toolchain/pabloB/lang/idisa/IDISABuiltin.java

    r3035 r3127  
    3636public enum IDISABuiltin {
    3737               
    38         // SIMD operations (opPattern == 0) class_name<fw>::op(data_type arg, ...)
     38        // SIMD operations (opPattern == 0)
     39        // C++: class_name<fw>::op(data_type arg, ...)
     40        // C:   class_name_op_fw(args...)
    3941        ESIMD_MERGEH (makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinGenerator(),  BITBLOCK, BITBLOCK,  BITBLOCK)),
    4042        ESIMD_MERGEL (makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinGenerator(),  BITBLOCK, BITBLOCK,  BITBLOCK)),
     
    8688        SIMD_XOR_HL (makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinGenerator(),  BITBLOCK,  BITBLOCK)),
    8789       
    88         // SIMD (opPatterns == 1) class_name<fw>::op<x>(data_type arg, ...)
     90        // SIMD (opPatterns == 1)
     91        // C++: class_name<fw>::op<x>(data_type arg, ...)
     92        // C:   class_name_op_fw(data_type arg, ..., x)
    8993        MVMD_DSLLI (makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDConstantBuiltinGenerator(),  INTEGERCONSTANT,  BITBLOCK,  BITBLOCK)),
    9094        MVMD_DSRLI (makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDConstantBuiltinGenerator(),  INTEGERCONSTANT,  BITBLOCK,  BITBLOCK)),
     
    99103        SIMD_SRLI (makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDConstantBuiltinGenerator(),  INTEGERCONSTANT,   BITBLOCK)),
    100104       
    101         // SIMD logic operations (opPattern == 2) simd_op(data_type arg, ...)
     105        // SIMD logic operations (opPattern == 2)
     106        // C++: simd_op(data_type arg, ...)
     107        // C:   simd_op(data_type arg, ...)
    102108        SIMD_NOR (makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDLogicBuiltinGenerator(),  BITBLOCK, BITBLOCK,  BITBLOCK)),
    103109        SIMD_NOT (makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDLogicBuiltinGenerator(),  BITBLOCK,  BITBLOCK)),
     
    107113        SIMD_AND (makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDLogicBuiltinGenerator(),  BITBLOCK, BITBLOCK,  BITBLOCK)),
    108114       
    109         // SIMD (opPattern == 3) class_name::op(data_type arg, ...)
     115        // SIMD (opPattern == 3)
     116        // C++: class_name::op(data_type arg, ...)
     117        // C:   class_name_op(data_type arg, ...)
    110118        BITBLOCK_ALL (makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBitblockBuiltinGenerator(),  BITBLOCK,  BOOL)),
    111119        BITBLOCK_ANY (makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBitblockBuiltinGenerator(),  BITBLOCK,  BOOL)),
     
    114122        BITBLOCK_SRL (makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBitblockBuiltinGenerator(),  BITBLOCK, BITBLOCK,  BITBLOCK)),
    115123       
    116         // SIMD (opPattern == 4) class_name::op<x>(data_type arg, ...)
     124        // SIMD (opPattern == 4)
     125        // C++: class_name::op<x>(data_type arg, ...)
     126        // C:   class_name_op(data_type arg, ..., x)
    117127        BITBLOCK_SLLI (makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBitblockImmediateBuiltinGenerator(),  INTEGERCONSTANT,  BITBLOCK)),
    118128        BITBLOCK_SRLI (makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBitblockImmediateBuiltinGenerator(),  INTEGERCONSTANT,  BITBLOCK)),
    119129       
    120         // SIMD Stores (with args = (Bitblock, Bitblock*)
     130        // SIMD Stores (with args = (Bitblock, Bitblock*))
    121131        BITBLOCK_STORE_ALIGNED (makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBitblockStoreBuiltinGenerator(),  BITBLOCK, BITBLOCK_POINTER,  VOID)),
    122132        BITBLOCK_STORE_UNALIGNED (makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBitblockStoreBuiltinGenerator(),  BITBLOCK, BITBLOCK_POINTER,  VOID)),
Note: See TracChangeset for help on using the changeset viewer.