source: proto/s2k/trunk/framework/src/toolchain/b2k/lang/paramBuiltin/idisa/IDISABuiltin.java @ 4023

Last change on this file since 4023 was 4023, checked in by ksherdy, 5 years ago

Restructured b2k package.

File size: 16.4 KB
Line 
1/*
2 * IDISA SIMD builtins definitions.
3 *
4 * Unary        r = simd<w>::op(a)
5 * Binary       r = simd<w>::op(a, b)
6 * Ternary  r = simd<w>::op(a, b, c)
7 *
8 * KH: TODO A 'matcher' class to resolve function signatures.
9 *
10 * IDISABuiltins2Lang translates the majority of IDISA builtins.
11 * 'special cases' call out to helpers.
12 *
13 * Note: S2K/B2K IDISA function calls with compile time constants,
14 * e.g. simd.constant<1>(0), treat the first argument(s) as the compile
15 * constant values.
16 *
17 * Note: KH: Additional work needed to validate IDISA function signatures. The current approach
18 * to validation accepts a broader range of signatures than are actually supported at the native
19 * level.
20 *
21 * @author Ken Herdy <ksherdy at sfu dot ca>
22 * @authos Meng
23 */
24
25package toolchain.b2k.lang.paramBuiltin.idisa;
26
27import java.util.ArrayList;
28import java.util.HashMap;
29import java.util.Map;
30
31import toolchain.b2k.lang.paramBuiltin.idisa.AbstractIDISABuiltinGenerator;
32import toolchain.b2k.lang.paramBuiltin.idisa.SIMDBitblockBuiltinsGenerator;
33import toolchain.b2k.lang.paramBuiltin.idisa.SIMDBitblockImmediateBuiltinsGenerator;
34import toolchain.b2k.lang.paramBuiltin.idisa.SIMDBitblockLoadBuiltinsGenerator;
35import toolchain.b2k.lang.paramBuiltin.idisa.SIMDBitblockStoreBuiltinsGenerator;
36import toolchain.b2k.lang.paramBuiltin.idisa.SIMDBuiltinsGenerator;
37import toolchain.b2k.lang.paramBuiltin.idisa.SIMDConstantBuiltinsGenerator;
38import toolchain.b2k.lang.paramBuiltin.idisa.SIMDLogicBuiltinsGenerator;
39import toolchain.b2k.lang.signatures.ParameterizedFunctionSignature;
40import toolchain.b2k.lang.type.Type;
41
42
43import static toolchain.b2k.lang.type.PrimitiveType.BITBLOCK;
44import static toolchain.b2k.lang.type.PrimitiveType.BITBLOCK_POINTER;
45import static toolchain.b2k.lang.type.PrimitiveType.BITBLOCK_SIZE;
46import static toolchain.b2k.lang.type.PrimitiveType.BITFIELD;
47import static toolchain.b2k.lang.type.PrimitiveType.BOOL;
48import static toolchain.b2k.lang.type.PrimitiveType.INTEGER;
49import static toolchain.b2k.lang.type.PrimitiveType.VOID;
50
51public enum IDISABuiltin {
52    // SIMD operations (opPattern == 0)
53        // C++: class_name<fw>::op(data_type arg, ...)
54        // C:   class_name_op_fw(args...)
55        ESIMD_MERGEH (          "mergeh",               makeRangeOfSimpleSignatures(1,BITBLOCK_SIZE/2, new SIMDBuiltinsGenerator(),  BITBLOCK, BITBLOCK,  BITBLOCK)),
56        ESIMD_MERGEL (          "mergel",               makeRangeOfSimpleSignatures(1,BITBLOCK_SIZE/2, new SIMDBuiltinsGenerator(),  BITBLOCK, BITBLOCK,  BITBLOCK)),
57        ESIMD_MULTH (           "multh",                makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinsGenerator(),  BITBLOCK, BITBLOCK,  BITBLOCK)),
58        ESIMD_MULTL (           "multl",                makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinsGenerator(),  BITBLOCK, BITBLOCK,  BITBLOCK)),
59        ESIMD_SIGNEXTENDH (     "signextendh",  makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinsGenerator(),  BITBLOCK,  BITBLOCK)),
60        ESIMD_SIGNEXTENDL (     "signextendl",  makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinsGenerator(),  BITBLOCK,  BITBLOCK)),
61        ESIMD_ZEROEXTENDH (     "zeroextendh",  makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinsGenerator(),  BITBLOCK,  BITBLOCK)),
62        ESIMD_ZEROEXTENDL (     "zeroextendl",  makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinsGenerator(),  BITBLOCK,  BITBLOCK)),
63        HSIMD_ADD_HL (          "add_hl",       makeRangeOfSimpleSignatures(2,BITBLOCK_SIZE, new SIMDBuiltinsGenerator(),  BITBLOCK, BITBLOCK,  BITBLOCK)),
64        HSIMD_MIN_HL (          "min_hl",       makeRangeOfSimpleSignatures(2,BITBLOCK_SIZE, new SIMDBuiltinsGenerator(),  BITBLOCK, BITBLOCK,  BITBLOCK)),
65        HSIMD_PACKH (           "packh",        makeRangeOfSimpleSignatures(2,BITBLOCK_SIZE, new SIMDBuiltinsGenerator(),  BITBLOCK, BITBLOCK,  BITBLOCK)),
66        HSIMD_PACKL (           "packl",        makeRangeOfSimpleSignatures(2,BITBLOCK_SIZE, new SIMDBuiltinsGenerator(),  BITBLOCK, BITBLOCK,  BITBLOCK)),
67        HSIMD_PACKSS (          "packss",       makeRangeOfSimpleSignatures(2,BITBLOCK_SIZE, new SIMDBuiltinsGenerator(),  BITBLOCK, BITBLOCK,  BITBLOCK)),
68        HSIMD_PACKUS (          "packus",       makeRangeOfSimpleSignatures(2,BITBLOCK_SIZE, new SIMDBuiltinsGenerator(),  BITBLOCK, BITBLOCK,  BITBLOCK)),
69        HSIMD_SIGNMASK (        "signmask",     makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinsGenerator(),  BITBLOCK,  BITFIELD)),
70        HSIMD_UMIN_HL (         "umin_hl",      makeRangeOfSimpleSignatures(2,BITBLOCK_SIZE, new SIMDBuiltinsGenerator(),  BITBLOCK, BITBLOCK,  BITBLOCK)),
71        MVMD_FILL (                     "fill",         makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinsGenerator(),  BITBLOCK,  BITBLOCK)),
72        MVMD_FILL16 (           "fill16",       makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinsGenerator(),  BITBLOCK, BITBLOCK, BITBLOCK, BITBLOCK, BITBLOCK, BITBLOCK, BITBLOCK, BITBLOCK, BITBLOCK, BITBLOCK, BITBLOCK, BITBLOCK, BITBLOCK, BITBLOCK, BITBLOCK, BITBLOCK,  BITBLOCK)),
73        MVMD_FILL2 (            "fill2",        makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinsGenerator(),  BITBLOCK, BITBLOCK,  BITBLOCK)),
74        MVMD_FILL4 (            "fill4",        makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinsGenerator(),  BITBLOCK, BITBLOCK, BITBLOCK, BITBLOCK,  BITBLOCK)),
75        MVMD_FILL8 (            "fill8",        makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinsGenerator(),  BITBLOCK, BITBLOCK, BITBLOCK, BITBLOCK, BITBLOCK, BITBLOCK, BITBLOCK, BITBLOCK,  BITBLOCK)),
76        //KH: shuffle dne ?
77        //MVMD_SHUFFLE (                "shuffle",      makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinGenerator(),  BITBLOCK, BITBLOCK,  BITBLOCK)),
78        SIMD_ABS (                      "abs",          makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinsGenerator(),  BITBLOCK,  BITBLOCK)),
79        SIMD_ADD (                      "add",          makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinsGenerator(),  BITBLOCK, BITBLOCK,  BITBLOCK)),
80        SIMD_ADD_HL (           "add_hl",       makeRangeOfSimpleSignatures(2,BITBLOCK_SIZE, new SIMDBuiltinsGenerator(),  BITBLOCK,  BITBLOCK)),
81        SIMD_CTZ (                      "ctz",          makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinsGenerator(),  BITBLOCK,  BITBLOCK)),
82        SIMD_EQ (                       "eq",           makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinsGenerator(),  BITBLOCK, BITBLOCK,  BITBLOCK)),
83        SIMD_GT (                       "gt",           makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinsGenerator(),  BITBLOCK, BITBLOCK,  BITBLOCK)),
84        SIMD_HIMASK (           "himask",       makeRangeOfSimpleSignatures(2,BITBLOCK_SIZE, new SIMDBuiltinsGenerator(),   BITBLOCK)),
85        SIMD_IFH (                      "ifh",          makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinsGenerator(),  BITBLOCK, BITBLOCK, BITBLOCK,  BITBLOCK)),
86        SIMD_LOMASK (           "lomask",       makeRangeOfSimpleSignatures(2,BITBLOCK_SIZE, new SIMDBuiltinsGenerator(),   BITBLOCK)),
87        SIMD_LT (                       "lt",           makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinsGenerator(),  BITBLOCK, BITBLOCK,  BITBLOCK)),
88        SIMD_MAX (                      "max",          makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinsGenerator(),  BITBLOCK, BITBLOCK,  BITBLOCK)),
89        SIMD_MIN (                      "min",          makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinsGenerator(),  BITBLOCK, BITBLOCK,  BITBLOCK)),
90        SIMD_MULT (                     "mult",         makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinsGenerator(),  BITBLOCK, BITBLOCK,  BITBLOCK)),
91        SIMD_NEG (                      "neg",          makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinsGenerator(),  BITBLOCK,  BITBLOCK)),
92        SIMD_POPCOUNT (         "popcount",     makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinsGenerator(),  BITBLOCK,  BITBLOCK)),
93        SIMD_SLL (                      "sll",          makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinsGenerator(),  BITBLOCK, BITBLOCK,  BITBLOCK)),
94        SIMD_SRA (                      "sra",          makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinsGenerator(),  BITBLOCK, BITBLOCK,  BITBLOCK)),
95        SIMD_SRL (                      "srl",          makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinsGenerator(),  BITBLOCK, BITBLOCK,  BITBLOCK)),
96        SIMD_SUB (                      "sub",          makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinsGenerator(),  BITBLOCK, BITBLOCK,  BITBLOCK)),
97        SIMD_SUB_HL (           "sub_hl",       makeRangeOfSimpleSignatures(2,BITBLOCK_SIZE, new SIMDBuiltinsGenerator(),  BITBLOCK,  BITBLOCK)),
98        SIMD_UGT (                      "ugt",          makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinsGenerator(),  BITBLOCK, BITBLOCK,  BITBLOCK)),
99        SIMD_ULT (                      "ult",          makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinsGenerator(),  BITBLOCK, BITBLOCK,  BITBLOCK)),
100        SIMD_UMAX (                     "umax",         makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinsGenerator(),  BITBLOCK, BITBLOCK,  BITBLOCK)),
101        SIMD_UMIN (                     "umin",         makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinsGenerator(),  BITBLOCK, BITBLOCK,  BITBLOCK)),
102        SIMD_UMULT (            "umult",        makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinsGenerator(),  BITBLOCK, BITBLOCK,  BITBLOCK)),
103        SIMD_XOR_HL (           "xor_hl",       makeRangeOfSimpleSignatures(2,BITBLOCK_SIZE, new SIMDBuiltinsGenerator(),  BITBLOCK,  BITBLOCK)),
104
105        //  KH: Not sure why we initially omitted any, all, vsrl, vsll
106        SIMD_ANY (              "any",          makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinsGenerator(),  BITBLOCK,  BITBLOCK)),
107        SIMD_ALL (              "all",          makeRangeOfSimpleSignatures(2,BITBLOCK_SIZE, new SIMDBuiltinsGenerator(),  BITBLOCK,  BITBLOCK)),
108        SIMD_VRSL(              "vsrl",         makeRangeOfSimpleSignatures(64,BITBLOCK_SIZE, new SIMDBuiltinsGenerator(),  BITBLOCK,  BITBLOCK, BITBLOCK)),           
109        SIMD_VRLL(              "vsll",         makeRangeOfSimpleSignatures(64,BITBLOCK_SIZE, new SIMDBuiltinsGenerator(),  BITBLOCK,  BITBLOCK, BITBLOCK)),
110       
111        // SIMD (opPatterns == 1)
112        // C++: class_name<fw>::op<x>(data_type arg, ...)
113        // C:   class_name_op_fw(data_type arg, ..., x)
114        MVMD_DSLLI (    "dslli",        makeRangeOfSimpleSignatures(2,BITBLOCK_SIZE, new SIMDConstantBuiltinsGenerator(),  INTEGER,  BITBLOCK,  BITBLOCK,  BITBLOCK)),
115        MVMD_DSRLI (    "dsrli",        makeRangeOfSimpleSignatures(2,BITBLOCK_SIZE, new SIMDConstantBuiltinsGenerator(),  INTEGER,  BITBLOCK,  BITBLOCK,  BITBLOCK)),
116        MVMD_EXTRACT (  "extract",      makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDConstantBuiltinsGenerator(),  INTEGER,  BITBLOCK,  BITFIELD)),
117        MVMD_INSERT (   "insert",       makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDConstantBuiltinsGenerator(),  INTEGER,  BITBLOCK,  BITFIELD, BITBLOCK)),
118        MVMD_SHUFFLEI ( "shufflei",     makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDConstantBuiltinsGenerator(),  INTEGER,   BITBLOCK,   BITBLOCK)),
119        MVMD_SLLI (             "slli",         makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDConstantBuiltinsGenerator(),  INTEGER,   BITBLOCK,  BITBLOCK)),
120        MVMD_SPLAT (    "splat",        makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDConstantBuiltinsGenerator(),  INTEGER, BITBLOCK, BITBLOCK)),
121        MVMD_SRLI (             "srli",         makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDConstantBuiltinsGenerator(),  INTEGER, BITBLOCK,  BITBLOCK)),
122        SIMD_CONSTANT ( "constant",     makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDConstantBuiltinsGenerator(),  INTEGER,   BITBLOCK)),
123        SIMD_SLLI (             "slli",         makeRangeOfSimpleSignatures(2,BITBLOCK_SIZE, new SIMDConstantBuiltinsGenerator(),  INTEGER,   BITBLOCK,   BITBLOCK)),
124        SIMD_SRAI (             "srai",         makeRangeOfSimpleSignatures(2,BITBLOCK_SIZE, new SIMDConstantBuiltinsGenerator(),  INTEGER,   BITBLOCK,   BITBLOCK)),
125        SIMD_SRLI (             "srli",         makeRangeOfSimpleSignatures(2,BITBLOCK_SIZE, new SIMDConstantBuiltinsGenerator(),  INTEGER,   BITBLOCK,   BITBLOCK)),
126               
127        // SIMD logic operations (opPattern == 2)
128        // C++: simd_op(data_type arg, ...)
129        // C:   simd_op(data_type arg, ...)
130        SIMD_NOR (      "nor",  makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDLogicBuiltinsGenerator(),  BITBLOCK, BITBLOCK,  BITBLOCK)),
131        SIMD_NOT (      "not",  makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDLogicBuiltinsGenerator(),  BITBLOCK,  BITBLOCK)),
132        SIMD_ANDC (     "andc", makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDLogicBuiltinsGenerator(),  BITBLOCK, BITBLOCK,  BITBLOCK)),
133        SIMD_OR (       "or",   makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDLogicBuiltinsGenerator(),  BITBLOCK, BITBLOCK,  BITBLOCK)),
134        SIMD_XOR (      "xor",  makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDLogicBuiltinsGenerator(),  BITBLOCK, BITBLOCK,  BITBLOCK)),
135        SIMD_AND (      "and",  makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDLogicBuiltinsGenerator(),  BITBLOCK, BITBLOCK,  BITBLOCK)),
136       
137        // SIMD (opPattern == 3)
138        // C++: class_name::op(data_type arg, ...)
139        // C:   class_name_op(data_type arg, ...)
140        BITBLOCK_ALL (          "all",                  makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBitblockBuiltinsGenerator(),  BITBLOCK,          BOOL)),
141        BITBLOCK_ANY (          "any",                  makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBitblockBuiltinsGenerator(),  BITBLOCK,          BOOL)),
142        BITBLOCK_POPCOUNT (     "popcount",             makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBitblockBuiltinsGenerator(),  BITBLOCK,          BITFIELD)),
143        BITBLOCK_SLL (          "sll",                  makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBitblockBuiltinsGenerator(),  BITBLOCK,  BITBLOCK,  BITBLOCK)),
144        BITBLOCK_SRL (          "srl",                  makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBitblockBuiltinsGenerator(),  BITBLOCK,  BITBLOCK,  BITBLOCK)),
145       
146        // SIMD (opPattern == 4)
147        // C++: class_name::op<x>(data_type arg, ...)
148        // C:   class_name_op(data_type arg, ..., x)
149        BITBLOCK_SLLI (         "slli"  ,       makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBitblockImmediateBuiltinsGenerator(),  INTEGER,  BITBLOCK,  BITBLOCK)),
150        BITBLOCK_SRLI (         "srli"  ,       makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBitblockImmediateBuiltinsGenerator(),  INTEGER,  BITBLOCK,  BITBLOCK)),
151       
152        // SIMD Stores (with args = (Bitblock, Bitblock*))
153        BITBLOCK_STORE_ALIGNED (        "store_aligned",        makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBitblockStoreBuiltinsGenerator(),  BITBLOCK, BITBLOCK_POINTER,  VOID)),
154        BITBLOCK_STORE_UNALIGNED (      "store_unaligned",      makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBitblockStoreBuiltinsGenerator(),  BITBLOCK, BITBLOCK_POINTER,  VOID)),
155       
156        // SIMD Loads (with args = Bitblock*)
157        BITBLOCK_LOAD_ALIGNED (         "load_aligned",         makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBitblockLoadBuiltinsGenerator(),  BITBLOCK_POINTER,  BITBLOCK)),
158        BITBLOCK_LOAD_UNALIGNED (       "load_unaligned",       makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBitblockLoadBuiltinsGenerator(),  BITBLOCK_POINTER,  BITBLOCK)),
159
160        NULL_BUILTIN("Null");
161       
162        private static final Map<String, IDISABuiltin> builtinForName = new HashMap<String, IDISABuiltin>();
163           
164        static {
165                for(IDISABuiltin idisaBuiltin : values()) {
166                        builtinForName.put(idisaBuiltin.fullyQualifiedName(), idisaBuiltin);
167                }
168    }
169       
170    public static IDISABuiltin forName(String fullyQualifiedName) {
171        if(builtinForName.containsKey(fullyQualifiedName)) {
172                return builtinForName.get(fullyQualifiedName);
173        }
174        return NULL_BUILTIN;
175    }
176   
177    private String name;
178        private ParameterizedFunctionSignature [] signatures;
179       
180        private IDISABuiltin(String name, ParameterizedFunctionSignature ...signatures) {
181                this.name = name;
182                this.signatures = signatures; 
183        }
184        //private IDISABuiltin(String className, String opName, IDISAFunctionSignature ...signatures) {
185       
186        /////////////////////////////////////////////////////////////////
187        // queries
188        /////////////////////////////////////////////////////////////////
189        public String fullyQualifiedName() { return packageName() + "." + baseName();   }
190        public String packageName() { return this.name().toLowerCase().split("_")[0];   }
191        public String baseName() { return this.name; }
192        public boolean hasSignature(int fieldWidth,  int argCount) {
193                return !getSignature(fieldWidth, argCount).isNull();
194        }
195        public ParameterizedFunctionSignature getSignature(int fieldWidth, int argCount) {
196               
197                for(ParameterizedFunctionSignature signature : this.signatures) {
198                        if( (signature.getFieldWidth() == fieldWidth) && (signature.getNumParameters() == argCount) ) {
199                                return signature;
200                        }
201                }
202                return ParameterizedFunctionSignature.nullInstance();
203        }
204
205        // KH:
206        //      public boolean hasCompileTimeConstantArgument() {
207        //      if( (parameterTypes.length > 0) && (parameterTypes[0] == PrimitiveType.INTEGERCONSTANT) ) {
208        //              return true;
209        //      }
210        //      return false;
211        //}
212       
213        /////////////////////////////////////////////////////////////////
214        // generators
215        /////////////////////////////////////////////////////////////////
216        /**
217         * Makes IDISA function signatures from 2^0 to uppoer bound field width and constant arguments.
218         */
219        private static ParameterizedFunctionSignature [] makeAllSimpleSignatures (int upperBound, AbstractIDISABuiltinGenerator idisaBuiltinsGenerator, Type ...types) {
220                return (ParameterizedFunctionSignature []) makeRangeOfSimpleSignatures(1, upperBound, idisaBuiltinsGenerator,types);
221        }
222       
223        /**
224         * Makes IDISA function signatures from power-of-2 lower bound to power-of-2 upper bound field width and constant arguments.
225         */
226        private static ParameterizedFunctionSignature [] makeRangeOfSimpleSignatures (int lowerBound, int upperBound, AbstractIDISABuiltinGenerator idisaBuiltinsGenerator, Type ...types) { 
227               
228                ArrayList<ParameterizedFunctionSignature> signatures = new ArrayList<ParameterizedFunctionSignature>();
229                       
230                for(int fw=lowerBound;fw<=upperBound;fw*=2) {
231                        ParameterizedFunctionSignature signature = new ParameterizedFunctionSignature(idisaBuiltinsGenerator,fw,types);
232                        signatures.add(signature);
233                }
234               
235                return (ParameterizedFunctionSignature []) signatures.toArray(new ParameterizedFunctionSignature[signatures.size()]);
236        }
237}
Note: See TracBrowser for help on using the repository browser.