Changeset 3369
- Timestamp:
- Jun 27, 2013, 4:35:54 PM (6 years ago)
- Location:
- proto/pabloj/trunk
- Files:
-
- 1 deleted
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
proto/pabloj/trunk/input/test/pabloB/test.pablob
r3368 r3369 19 19 BitBlock r; 20 20 21 r = simd.constant<1>(0);21 r = bitblock.any<128>(a); 22 22 23 23 /* -
proto/pabloj/trunk/output/cpplang/idisa_definitions.hpp
r3368 r3369 71 71 BitBlock k; 72 72 BitBlock r; 73 r = simd<1>::constant<0>();73 r = bitblock::any(a); 74 74 } 75 75 -
proto/pabloj/trunk/src/test/pabloS/PabloSTestHarness.java
r3357 r3369 30 30 import toolchain.pabloS.transformer.visitors.pabloS2PabloB.CarryIntroXFormer; 31 31 import toolchain.pabloS.transformer.visitors.pabloS2PabloB.Context; 32 import toolchain.pabloS.transformer.visitors.pabloS2PabloB.BitwiseBoolean2IDISA;33 32 import toolchain.pabloS.transformer.visitors.pabloS2pabloS.CombineAdvances; 34 33 import toolchain.pabloS.transformer.visitors.pabloS2pabloS.ExpandAugmentedAssignments; … … 44 43 public enum VisitorsUnderTest { 45 44 COMBINE_ADVANCES(CombineAdvances.class, "CombineAdvances"), 46 CONVERT_BITWISE_BOOLEAN_TO_IDISA_CALLS(BitwiseBoolean2IDISA.class, "ConvertBitwiseBooleanToIDISACalls"),45 // CONVERT_BITWISE_BOOLEAN_TO_IDISA_CALLS(BitwiseBoolean2IDISA.class, "ConvertBitwiseBooleanToIDISACalls"), 47 46 EXPAND_AUGMENTED_ASSIGNMENTS(ExpandAugmentedAssignments.class, "ExpandAugmentedAssignments"); 48 47 //CARRY_INTRO_XFORMER_FINAL_BLOCK(CarryIntroXFormer.class, "CarryIntroXFormerFinalBlock"), -
proto/pabloj/trunk/src/toolchain/pabloB/ast/Generators.java
r3368 r3369 158 158 ////////////////////////////////////////////////////////////////////////// 159 159 // IDISA function calls 160 public static IdisaFuncCallNode makeIdisaFuncCallNode(Locator locator, String pckage, String name, int fw, ASTNode... args ) { 161 CompoundIdentifierNode identifier = Generators.makeCompoundIdentifierNode(locator, pckage, name); 160 161 public static IdisaFuncCallNode makeIdisaFuncCallNode(Locator locator, IDISABuiltin builtin, int fw, ASTNode... args ) { 162 String packageName = builtin.packageName(); 163 String baseName = builtin.baseName(); 164 return makeIdisaFuncCallNode(locator, packageName, baseName, fw, args); 165 } 166 167 public static IdisaFuncCallNode makeIdisaFuncCallNode(Locator locator, String packageName, String baseName, int fw, ASTNode... args ) { 168 CompoundIdentifierNode identifier = Generators.makeCompoundIdentifierNode(locator, packageName, baseName); 162 169 FieldWidthNode fieldWidth = Generators.makeIdisaFieldWidthNode(locator, fw); 163 170 IdisaFuncCallNode idisaFuncCall = Generators.makeIdisaFuncCallNode(locator, identifier, fieldWidth, args); -
proto/pabloj/trunk/src/toolchain/pabloB/lang/idisa/IDISABuiltin.java
r3368 r3369 158 158 } 159 159 160 public String p ckageName() {160 public String packageName() { 161 161 return this.name().toLowerCase().split("_")[0]; 162 162 } -
proto/pabloj/trunk/src/toolchain/pabloB/lang/types/PrimitiveType.java
r3032 r3369 34 34 }; 35 35 36 public static final int BITBLOCK_SIZE = 256;36 public static final int BITBLOCK_SIZE = 128; // TODO - KH: hoist to application level 37 37 private static final boolean ALL_TYPES_ACCEPT_ERROR_TYPES = true; 38 38 -
proto/pabloj/trunk/src/toolchain/pabloS/transformer/visitors/pabloS2PabloB/PabloS2PabloBXFormer.java
r3368 r3369 16 16 import pabloB.ast.*; 17 17 import pabloB.inputHandler.*; 18 import pabloB.tokens.Token;19 18 import toolchain.pabloB.lang.KernelState; 20 19 import toolchain.pabloB.ast.Accessors; 21 20 import toolchain.pabloB.ast.Generators; 22 import toolchain.pabloB.lang.idisa.IDISABitBlockBuiltins; 23 import toolchain.pabloB.lang.idisa.IDISABuiltin; 24 import toolchain.pabloB.lang.idisa.IDISASIMDBitwiseBuiltins; 25 import static toolchain.pabloB.lang.idisa.IDISASIMDBitwiseBuiltins.*; 21 import static toolchain.pabloB.lang.types.PrimitiveType.BITBLOCK_SIZE; 22 import static toolchain.pabloB.lang.idisa.IDISABuiltin.*; 26 23 27 24 // non-conflicting pabloS imports … … 251 248 252 249 Locator locator = Generators.makeToken(snode.getToken()); 253 ASTNode replacement = makeAssert0Call(locator, childResults); 254 255 return replacement; 256 } 257 258 if(BuiltinCallUtil.isMask(snode)) { // translates pablo.Mask(fw,constant) to an IDISA call 250 return makeAssert0Call(locator, childResults); 251 } 252 253 if(BuiltinCallUtil.isMask(snode)) { 259 254 Locator locator = Generators.makeToken(snode.getToken()); 260 261 262 int fw = Integer.valueOf(toolchain.pabloS.ast.Accessors.argument(snode, 0).getToken().getLexeme()); 263 int value = Integer.valueOf(toolchain.pabloS.ast.Accessors.argument(snode, 1).getToken().getLexeme()); 264 IntegerConstantNode valueNode = Generators.makeIntegerConstantNode(locator, value); 265 266 ASTNode replacement = Generators.makeIdisaFuncCallNode(locator, IDISABuiltin.SIMD_CONSTANT.pckageName(), IDISABuiltin.SIMD_CONSTANT.baseName(), fw, valueNode); 267 return replacement; 255 return makeAllZeroesCall(snode, locator); 268 256 269 257 } else { … … 274 262 return replacment; 275 263 } 264 } 265 266 private ASTNode makeAllZeroesCall(pabloS.ast.FuncCallNode snode, Locator locator) { 267 268 String idisaPackage = SIMD_CONSTANT.packageName(); 269 String idisaOperation = SIMD_CONSTANT.baseName(); 270 271 int fw = Integer.valueOf(toolchain.pabloS.ast.Accessors.argument(snode, 0).getToken().getLexeme()); 272 int value = Integer.valueOf(toolchain.pabloS.ast.Accessors.argument(snode, 1).getToken().getLexeme()); 273 IntegerConstantNode valueNode = Generators.makeIntegerConstantNode(locator, value); 274 275 ASTNode replacement = Generators.makeIdisaFuncCallNode(locator, idisaPackage, idisaOperation, fw, valueNode); 276 return replacement; 276 277 } 277 278 … … 339 340 ASTNode lhs = childResults.get(0); 340 341 ASTNode rhs = childResults.get(1); 341 342 342 343 if(tokenS.isLextant(pabloS.lexicalAnalyzer.Lextant.OR)) { 343 replacement = makeIDISACall(locator, OR, Generators.arguments(lhs, rhs));344 replacement = Generators.makeIdisaFuncCallNode(locator, SIMD_OR, BITBLOCK_SIZE, Generators.arguments(lhs, rhs)); 344 345 } 345 346 else if(tokenS.isLextant(pabloS.lexicalAnalyzer.Lextant.AND)) { 346 347 // TS: this optimization seems inappropriate for pabloS to handle. 347 348 if (rhsS.getToken().isLextant(pabloS.lexicalAnalyzer.Lextant.NOT)) { 348 replacement = makeIDISACall(locator, 349 ANDC, 350 Generators.arguments(lhs, rhs.child(1))); 349 replacement = Generators.makeIdisaFuncCallNode(locator, SIMD_ANDC, BITBLOCK_SIZE, 350 Generators.arguments(lhs, Accessors.idisaFuncCallArgListNode((IdisaFuncCallNode)rhs).child(0))); 351 351 } 352 352 else if(lhsS.getToken().isLextant(pabloS.lexicalAnalyzer.Lextant.NOT)) { 353 replacement = makeIDISACall(locator, 354 ANDC, 355 Generators.arguments(rhs, lhs.child(1))); 353 replacement = Generators.makeIdisaFuncCallNode(locator, SIMD_ANDC, BITBLOCK_SIZE, 354 Generators.arguments(rhs, Accessors.idisaFuncCallArgListNode((IdisaFuncCallNode)lhs).child(0))); 356 355 } 357 356 else { 358 replacement = makeIDISACall(locator, AND, Generators.arguments(lhs, rhs));357 replacement = Generators.makeIdisaFuncCallNode(locator, SIMD_AND, BITBLOCK_SIZE, Generators.arguments(lhs, rhs)); 359 358 } 360 359 } 361 360 else if (tokenS.isLextant(pabloS.lexicalAnalyzer.Lextant.XOR)){ 362 replacement = makeIDISACall(locator, XOR, Generators.arguments(lhs, rhs));361 replacement = Generators.makeIdisaFuncCallNode(locator, SIMD_XOR, BITBLOCK_SIZE, Generators.arguments(lhs, rhs)); 363 362 } else { 364 363 assert false : "PabloS to PabloB binary operator translation not implemented."; … … 378 377 pabloB.inputHandler.TextLocation locator = Generators.makeTextLocation(token.getLocation()); 379 378 pabloB.ast.ASTNode operand = childResults.get(0); 380 replacement = makeIDISACall(locator, NOT, Generators.arguments(operand));379 replacement = Generators.makeIdisaFuncCallNode(locator, SIMD_NOT, BITBLOCK_SIZE, Generators.arguments(operand)); 381 380 } else { 382 381 assert false : "PabloS to PabloB unary operator translation not implemented."; … … 391 390 pabloB.ast.IfStmtNode replacement = new pabloB.ast.IfStmtNode(pabloBToken); 392 391 appendChildResults(replacement, childResults); 393 394 395 396 397 398 399 392 400 393 surroundConditionWithBitBlockAny(replacement, Accessors.condition(replacement)); … … 417 410 private static void surroundConditionWithBitBlockAny(ASTNode node, pabloB.ast.ASTNode condition) { 418 411 Locator locator = node; 419 FuncCallNode funcCallNode = makeIDISACall(locator, IDISABitBlockBuiltins.ANY, Generators.arguments(condition.deepCopy())); 420 node.replaceChild(condition, funcCallNode); 421 } 422 423 private static FuncCallNode makeIDISACall(Locator locator, IDISASIMDBitwiseBuiltins idisaBuiltin, pabloB.ast.ASTNode ... arguments) { 424 return Generators.makeFuncCallNode(locator, idisaBuiltin.Name(), arguments); 425 } 426 427 private static FuncCallNode makeIDISACall(Locator locator, IDISABitBlockBuiltins idisaBuiltin, ASTNode[] arguments) { 428 return Generators.makeFuncCallNode(locator, idisaBuiltin.IDISALexeme(), arguments); 412 413 String idisaPackage = BITBLOCK_ANY.packageName(); 414 String idisaOperation = BITBLOCK_ANY.baseName(); 415 416 int fw = BITBLOCK_SIZE; 417 418 ASTNode replacement = Generators.makeIdisaFuncCallNode(locator, idisaPackage, idisaOperation, fw, Generators.arguments(condition.deepCopy())); 419 420 node.replaceChild(condition, replacement); 429 421 } 430 422
Note: See TracChangeset
for help on using the changeset viewer.