Changeset 1280 for proto


Ignore:
Timestamp:
Aug 4, 2011, 11:03:10 PM (8 years ago)
Author:
shermer
Message:

Started housecleaning in Instruction.java
Removed three unused and superceded optimizations from incode.local

Location:
proto/pebble/trunk/src
Files:
3 deleted
2 edited

Legend:

Unmodified
Added
Removed
  • proto/pebble/trunk/src/incode/Instruction.java

    r1279 r1280  
    55
    66public class Instruction {
    7         public static final int MAX_NUMBER_OPERANDS = 3;
     7        public static final int MAX_NUMBER_OPERANDS = 4;
    88        private Op operation;
    9         private String variable;
    10         private String operand[];
     9        private String eoperand[];
    1110        private boolean toBeDeleted;
    12         private boolean liveOut;
    1311        private boolean notEqualsComparison;    // for testType instructions.  False means ==0, True means !=0.
    1412
     
    1715        // constructors and helper
    1816        ///////////////////////////////////////////////////////////////////////////
    19         public Instruction(Op operation, String variable, String operand1, String operand2, String operand3) {
     17
     18        public Instruction(Op operation, String ... operands) {
    2019                super();
     20               
     21                if(operands.length > MAX_NUMBER_OPERANDS) {
     22                        throw new IllegalArgumentException("too many operands to Instruction constructor.");
     23                }
    2124                this.operation = operation;
    22                 this.variable  = translateArrayIndices(variable);
    23                
    24                 operand = new String[MAX_NUMBER_OPERANDS];
    25                 this.operand[0]  = translateArrayIndices(operand1);
    26                 this.operand[1]  = translateArrayIndices(operand2);
    27                 this.operand[2]  = translateArrayIndices(operand3);
     25               
     26                eoperand = new String[MAX_NUMBER_OPERANDS];
     27                for(int i=0; i<operands.length; i++) {
     28                        if(i<operands.length) {
     29                                eoperand[i] = translateArrayIndices(operands[i]);
     30                        }
     31                        else {
     32                                eoperand[i] = "placeholder operand";
     33                        }
     34                }
    2835               
    2936                toBeDeleted = false;
    30                 liveOut = false;
    3137                notEqualsComparison = false;
    3238        }
    33         public Instruction(Op operation, String variable, String operand1, String operand2) {
    34                 this(operation, variable, operand1, operand2, null);
    35         }       
    36         public Instruction(Op operation, String variable, String operand1) {
    37                 this(operation, variable, operand1, null, null);
    38         }
    39         public Instruction(Op operation, String variable) {
    40                 this(operation, variable, null, null, null);
    41         }
    42         public Instruction(Op operation) {
    43                 this(operation, null, null, null, null);
    44         }
     39
    4540        private String translateArrayIndices(String operand) {
    4641                if(operand == null)
     
    6661                return toBeDeleted;
    6762        }
    68         public void markAsLiveOut() {
    69                 liveOut = true;
    70         }
    71         public boolean isLiveOut() {
    72                 return liveOut;
    73         }
    7463        public void setNotEqualsComparison() {
    7564                notEqualsComparison = true;
     
    9079        }
    9180        public String getVariable() {
    92                 return variable;
     81                return eoperand[0];
    9382        }
    9483        public void setVariable(String string) {
    95                 variable = string;
     84                eoperand[0] = string;
    9685        }
    9786        /**
     
    10291         */
    10392        public String getOperand(int i) {
    104                 return operand[i];
     93                return eoperand[i+1];
    10594        }
    10695        public void setOperand(int i, String string) {
    107                 operand[i] = string;
    108         }
     96                eoperand[i+1] = string;
     97        }
     98       
    10999        public boolean containsOperand(String symbol) {
    110100                for(int i=0; i<numOperands(); i++) {
     
    115105        }
    116106        public String extendedOperand(int eOpNumber) {
    117                 if(eOpNumber==0) {
    118                         return getVariable();
    119                 }
    120                 return  getOperand(eOpNumber-1);
    121         }
    122         public void setExtendedOperand(int eOpNumber, String replacement) {
    123                 if(eOpNumber==0) {
    124                         setVariable(replacement);
    125                 }
    126                 else {
    127                         setOperand(eOpNumber-1, replacement);
    128                 }
    129                
     107                return eoperand[eOpNumber];
     108        }
     109        public void setExtendedOperand(int eOpNumber, String symbol) {
     110                eoperand[eOpNumber] = symbol;
    130111        }
    131112       
     
    188169        ///////////////////////////////////////////////////////////////////////////
    189170        public String toString() {
    190                 return String.format(operation.format(), variable, operand[0], operand[1], operand[2], comparisonString());
     171                return String.format(operation.format(), eoperand[0], eoperand[1], eoperand[2], eoperand[3], comparisonString());
    191172        }
    192173        public String toPython() {
    193                 return String.format(operation.pythonFormat(), variable, operand[0], operand[1], operand[2], comparisonString());
     174                return String.format(operation.pythonFormat(), eoperand[0], eoperand[1], eoperand[2], eoperand[3], comparisonString());
    194175        }
    195176        private String comparisonString() {
     
    210191                int result = operation.ordinal();
    211192                for(int i=0; i<numOperands(); i++) {
    212                         result = result + operand[i].hashCode();
     193                        result = result + getOperand(i).hashCode();
    213194                }
    214195                return result;
    215196        }
    216197        public Instruction copy() {
    217                 Instruction result = new Instruction(operation, variable, operand[0], operand[1], operand[2]);
     198                Instruction result = new Instruction(operation, eoperand[0], eoperand[1], eoperand[2], eoperand[3]);
    218199                if(isToBeDeleted())
    219200                        result.markForDeletion();
    220                 if(isLiveOut())
    221                         result.markAsLiveOut();
    222201                if(isNotEqualsComparison())
    223202                        result.setNotEqualsComparison();
     
    225204        }
    226205        public void commute() {
    227                 String temp = operand[0];
    228                 operand[0] = operand[1];
    229                 operand[1] = temp;
     206                String temp = eoperand[1];
     207                eoperand[1] = eoperand[2];
     208                eoperand[2] = temp;
    230209        }
    231210       
     
    320299                }
    321300        }
    322 
    323 
    324 
    325 
    326 
    327 
    328 
    329301}
  • proto/pebble/trunk/src/main/Main.java

    r1279 r1280  
    88import incode.global.MergeBlocks;
    99import incode.localOptimization.ReuseAvailableExpressions;
    10 import incode.localOptimization.UseAndNot;
    1110
    1211import java.io.IOException;
Note: See TracChangeset for help on using the changeset viewer.