Ignore:
Timestamp:
Dec 2, 2012, 12:50:44 AM (6 years ago)
Author:
ksherdy
Message:

General refactoring.

Location:
proto/pablo/src/compiler/backend
Files:
2 added
1 copied

Legend:

Unmodified
Added
Removed
  • proto/pablo/src/compiler/backend/visitors/Pablo2CarryXFormer.java

    r2702 r2710  
    1 package compiler.semanticAnalyzer.visitors;
     1package compiler.backend.visitors;
    22
    33import java.util.ArrayList;
     
    1212import compiler.lang.pablo.*;
    1313
    14 
     14//TODO - Add while type to switch on/off carry in mode. Carry in is an internal to this visitor.
    1515
    1616public class Pablo2CarryXFormer {
     
    2020        private Builtins2Lang builtins2Lang;
    2121        private CarrySet2Lang carrySet2Lang;
    22        
    23     //    def __init__(self, carryvar="carryQ", carryin = "_ci", carryout = "_co"):
    24         //    self.carryvar = ast.Name(carryvar, ast.Load())
    25         //    self.carryin = carryin
    26         //    self.carryout = carryout   
    27        
     22               
    2823    public Pablo2CarryXFormer(ASTNode node, Builtins2Lang builtins2Lang, CarrySet2Lang carrySet2Lang) {
    2924        this.ASTTree = node;
     
    3227    }
    3328
    34     public void XForm(boolean ci /*, boolean co*/) {
    35                 XFormer visitor = new XFormer(ci /*, co*/);
     29    public void XForm(boolean isFinalBlock/* boolean ci, boolean co*/) {
     30                XFormer visitor = new XFormer(isFinalBlock/*ci , co*/);
    3631                ASTTree.accept(visitor);
    3732    }                   
     
    3934        private class XFormer extends VoidVisitor.Default {
    4035
    41                 //private final String ciSuffix = "_ci";
    42                 //private final String coSuffix = "_co";
    43                 //private String [] pendindCarryQName = {CarryQ.CarryQ_PACKAGE_NAME, CarryQ.GETCARRYIN.cPPCode()};
    44                 //private String [] pending64QName = {CarryQ.CarryQ_PACKAGE_NAME, CarryQ.GETPENDING64.cPPCode()};
    45                
     36                private boolean finalBlockMode;
    4637                private boolean ciMode;
    4738                //private boolean coMode;
     
    5142                //private int lastStmtCarries;
    5243               
    53                 XFormer(boolean ciMode /*, boolean coMode*/) {
    54                         this.ciMode = ciMode;
     44                XFormer(boolean isFinalBlock) { // TODO - ciMode parameter
     45                        this.finalBlockMode = isFinalBlock;
     46                        this.ciMode = true;
    5547                        //this.coMode = coMode;
    5648                        this.currentCarry = 0;
     
    9082//              carry_args = [mkCall('simd<1>::constant<0>', []), ast.Num(self.current_carry)]
    9183//              adv_n_args = [mkCall('simd<1>::constant<0>', []), ast.Num(self.current_adv_n)]
    92 
    93 //                      TODO - Deprecate ciMode - *likely* no longer required
    94 //
    95 //                     
     84                       
    9685                        if(ciMode) {
    9786                                carryCall = Generators.makeFuncCallNode(
     
    10493                                                node.getToken(),
    10594                                                new ASTNode [] {currentAdvN});
    106                                
    10795                        } else {
    10896                                carryCall = Generators.makeIntegerConstantNode(0, node.getToken());
     
    117105        //                    return c                 
    118106                        if (BuiltinsUtil.isCall(node, BuiltinsUtil.BUILTIN_PACKAGE_NAME, Builtins.ADVANCE.pabloName(), Builtins.ADVANCE.argCount())) {         
     107                                if(finalBlockMode) {
     108                                       
     109                                }
     110                               
    119111                                replaceFuncCallNode(node,
    120112                                                CarrySet.CarryQ_IDENTIFIER,
     
    122114                                                carryCall,
    123115                                                currentCarry);
     116                               
    124117                                this.currentCarry += 1;
    125118                        }
    126119       
    127         //          elif is_BuiltIn_Call(callnode, 'ScanThru', 2):
     120
    128121        //            #CARRYSET
    129122        //            rtn = self.carryvar.id + "." + "BitBlock_scanthru_ci_co"
     
    131124        //            self.current_carry += 1
    132125        //            return c         
     126                       
     127                                       
    133128                        else if (BuiltinsUtil.isCall(node, BuiltinsUtil.BUILTIN_PACKAGE_NAME, Builtins.SCANTHRU.pabloName(), Builtins.SCANTHRU.argCount())) {                           
     129                                if(finalBlockMode) {
     130                                       
     131                                }
     132                               
    134133                                replaceFuncCallNode(node,
    135134                                                CarrySet.CarryQ_IDENTIFIER,
     
    139138                                this.currentCarry += 1;
    140139                        }
    141        
    142         //          elif is_BuiltIn_Call(callnode, 'AdvanceThenScanThru', 2):
    143         //            #CARRYSET
    144         //            rtn = self.carryvar.id + "." + "BitBlock_advance_then_scanthru"
    145         //            c = mkCall(rtn, callnode.args + carry_args)
    146         //            self.current_carry += 1
    147         //            return c         
     140                               
     141        //                  elif is_BuiltIn_Call(callnode, 'AdvanceThenScanThru', 2):
     142        //                  #CARRYSET
     143        //                  rtn = self.carryvar.id + "." + "BitBlock_advance_then_scanthru"
     144        //                  c = mkCall(rtn, callnode.args + carry_args)
     145        //                  self.current_carry += 1
     146        //                  return c                   
     147                       
    148148                        else if (BuiltinsUtil.isCall(node, BuiltinsUtil.BUILTIN_PACKAGE_NAME, Builtins.ADVANCETHENSCANTHRU.pabloName(), Builtins.ADVANCETHENSCANTHRU.argCount())) {
     149                                if(finalBlockMode) {
     150                                                                       
     151                                }
     152                               
    149153                                replaceFuncCallNode(node,
    150154                                                CarrySet.CarryQ_IDENTIFIER,
     
    155159                        }               
    156160       
    157         //          elif is_BuiltIn_Call(callnode, 'SpanUpTo', 2):
     161        //            elif is_BuiltIn_Call(callnode, 'SpanUpTo', 2):
    158162        //            #CARRYSET
    159163        //            rtn = self.carryvar.id + "." + "BitBlock_span_upto"
     
    162166        //            return c         
    163167                        else if (BuiltinsUtil.isCall(node, BuiltinsUtil.BUILTIN_PACKAGE_NAME, Builtins.SPANUPTO.pabloName(), Builtins.SPANUPTO.argCount())) {
     168                                if(finalBlockMode) {
     169                                               
     170                                }
     171       
    164172                                replaceFuncCallNode(node,
    165173                                                CarrySet.CarryQ_IDENTIFIER,
     
    169177                                this.currentCarry += 1;
    170178                        }               
    171        
    172         //          elif is_BuiltIn_Call(callnode, 'AdvanceThenScanTo', 2):
    173         //            #CARRYSET
    174         //            rtn = self.carryvar.id + "." + "BitBlock_advance_then_scanthru"
    175         //            if self.carryout == "":  scanclass = mkCall('simd_andc', [ast.Name('EOF_mask', ast.Load()), callnode.args[1]])
    176         //            else: scanclass = mkCall('simd_not', [callnode.args[1]])
    177         //            c = mkCall(rtn, [callnode.args[0], scanclass] + carry_args)
    178         //            self.current_carry += 1
    179         //            return c
     179                       
     180        //              elif is_BuiltIn_Call(callnode, 'AdvanceThenScanTo', 2):
     181        //      #CARRYSET
     182        //      rtn = self.carryvar.id + "." + "BitBlock_advance_then_scanthru"
     183        //      if self.carryout == "":  scanclass = mkCall('simd_andc', [ast.Name('EOF_mask', ast.Load()), callnode.args[1]])
     184        //      else: scanclass = mkCall('simd_not', [callnode.args[1]])
     185        //      c = mkCall(rtn, [callnode.args[0], scanclass] + carry_args)
     186        //      self.current_carry += 1
     187        //          return c                   
    180188                        else if (BuiltinsUtil.isCall(node, BuiltinsUtil.BUILTIN_PACKAGE_NAME, Builtins.ADVANCETHENSCANTO.pabloName(), Builtins.ADVANCETHENSCANTO.argCount())) {
     189                                if(finalBlockMode) {
     190                                       
     191                                }
     192                               
    181193                                replaceFuncCallNode(node,
    182194                                                CarrySet.CarryQ_IDENTIFIER,
     
    197209       
    198210                        else if (BuiltinsUtil.isCall(node, BuiltinsUtil.BUILTIN_PACKAGE_NAME, Builtins.INCLUSIVESPAN.pabloName(), Builtins.INCLUSIVESPAN.argCount())) {
     211                                if(finalBlockMode) {
     212                                       
     213                                }
     214
    199215                                replaceFuncCallNode(node,
    200216                                                CarrySet.CarryQ_IDENTIFIER,
     
    215231       
    216232                        else if (BuiltinsUtil.isCall(node, BuiltinsUtil.BUILTIN_PACKAGE_NAME, Builtins.EXCLUSIVESPAN.pabloName(), Builtins.EXCLUSIVESPAN.argCount())) {
     233                                if(finalBlockMode) {
     234                                       
     235                                }
     236
    217237                                replaceFuncCallNode(node,
    218238                                                CarrySet.CarryQ_IDENTIFIER,
     
    235255       
    236256                        else if (BuiltinsUtil.isCall(node, BuiltinsUtil.BUILTIN_PACKAGE_NAME, Builtins.SCANTO.pabloName(), Builtins.SCANTO.argCount())) {
     257                                if(finalBlockMode) {
     258                                       
     259                                }
     260
    237261                                replaceFuncCallNode(node,
    238262                                                CarrySet.CarryQ_IDENTIFIER,
     
    250274        //            self.current_carry += 1
    251275        //            return c
     276                       
     277
    252278       
    253279                        else if (BuiltinsUtil.isCall(node, BuiltinsUtil.BUILTIN_PACKAGE_NAME, Builtins.SCANTOFIRST.pabloName(), Builtins.SCANTOFIRST.argCount())) {
     280                                if(finalBlockMode) {
     281                                       
     282                                }
     283
    254284                                replaceFuncCallNode(node,
    255285                                                CarrySet.CarryQ_IDENTIFIER,
     
    268298                        else if (BuiltinsUtil.isCall(node, BuiltinsUtil.BUILTIN_PACKAGE_NAME, Builtins.ADVANCE32.pabloName(), Builtins.ADVANCE32.argCount())) {
    269299                                //replaceFuncCallNode(node, CarryQ.CarryQ_PACKAGE_NAME, BuiltinOperations.ADVANCE32.cPPCode(), carryCall, currentAdvN);
    270                                 // TODO ==> verify advNCall
     300                                // TODO ==> Verify implementation.
     301                                if(finalBlockMode) {
     302                                       
     303                                }
     304                               
    271305                                replaceFuncCallNode(node,
    272306                                                CarrySet.CarryQ_IDENTIFIER,
     
    285319                        else if (BuiltinsUtil.isCall(node, BuiltinsUtil.BUILTIN_PACKAGE_NAME, Builtins.ADVANCEN.pabloName(), Builtins.ADVANCEN.argCount())) {
    286320                                //replaceFuncCallNode(node, CarryQ.CarryQ_PACKAGE_NAME, BuiltinOperations.ADVANCEN.cPPCode(), carryCall, currentAdvN);                                 
    287                                 // TODO - verify advNCall is correct
     321                                // TODO - Verify implementation.
     322                                if(finalBlockMode) {
     323                                       
     324                                }
     325                                                               
    288326                                replaceFuncCallNode(node,
    289327                                                CarrySet.CarryQ_IDENTIFIER,
     
    294332                        }                                       
    295333               
     334                        else if (BuiltinsUtil.isCall(node, BuiltinsUtil.BUILTIN_PACKAGE_NAME, Builtins.ATEOF.pabloName(), Builtins.ATEOF.argCount())) {
     335                                 
     336                                if(finalBlockMode) {
     337                                        ASTNode arg0 = Accessors.funcCallArg(node, 0);
     338                                        replacementNode = Generators.makeSIMDAndCEOFMaskFuncCall(arg0, builtins2Lang);
     339                                } else {
     340                                        replacementNode = Generators.makeFuncCallNode(SIMD.CONSTANT.idisaConstantName(1, 0), node.getToken());                                 
     341                                }
     342                                node.updateSelf(replacementNode);
     343                        }                                       
     344       
     345        //          elif is_BuiltIn_Call(callnode, 'inFile', 1):
     346        //            if self.carryout != "": 
     347        //              # Non final block: inFile(x) = x.
     348        //              return callnode.args[0]
     349        //            else: return mkCall('simd_and', [callnode.args[0], ast.Name('EOF_mask', ast.Load())])
     350
     351                        else if (BuiltinsUtil.isCall(node, BuiltinsUtil.BUILTIN_PACKAGE_NAME, Builtins.INFILE.pabloName(), Builtins.INFILE.argCount())) {
     352                               
     353                                if(finalBlockMode) {                                   
     354                                        ASTNode arg0 = Accessors.funcCallArg(node, 0);
     355                                        replacementNode = Generators.makeSIMDAndEOFMaskFuncCall(arg0, builtins2Lang);
     356                                } else {
     357                                        replacementNode = Accessors.funcCallArg(node,0);
     358                                }
     359                                node.updateSelf(replacementNode);
     360                        }                       
     361                       
    296362//                      Deprecated - New bitblock iterators replace StreamScan.
    297363//                     
Note: See TracChangeset for help on using the changeset viewer.