Changeset 922 for proto/Compiler


Ignore:
Timestamp:
Mar 10, 2011, 2:15:23 PM (8 years ago)
Author:
cameron
Message:

Generating do_final_block - initial check-in

File:
1 edited

Legend:

Unmodified
Added
Removed
  • proto/Compiler/pablo.py

    r921 r922  
    432432                                                stream_function.statements)             
    433433
     434                do_final_block_function = self.do_final_block(self.do_final_block_parameters(stream_function.parameters),
     435                                                stream_function.declarations,
     436                                                stream_function.initializations,
     437                                                stream_function.final_block_statements)                 
     438
    434439                do_segment_function = self.do_segment(self.do_segment_parameters(stream_function.parameters),
    435440                                                self.do_segment_args(stream_function.parameters))       
     
    438443                + "\n" + self.indent(icount) + constructor \
    439444                + "\n" + self.indent(icount) + do_block_function \
     445                + "\n" + self.indent(icount) + do_final_block_function \
    440446                + "\n" + self.indent(icount) + do_segment_function \
    441447                + "\n" + self.indent(icount) + carry_declaration \
     
    452458                + "\n" + self.indent(icount + 2) + "}"
    453459
     460        def do_final_block(self, parameters, declarations, initializations, statements, icount=0):
     461                return self.indent(icount) + "void do_final_block(" + parameters + ") {" \
     462            + "\n" + self.indent(icount) + declarations \
     463                + "\n" + self.indent(icount) + initializations \
     464                + "\n" + self.indent(icount) + statements \
     465                + "\n" + self.indent(icount + 2) + "}"
     466
    454467        def do_segment(self, parameters, do_block_call_args, icount=0):
    455468                return self.indent(icount) + "void do_segment(" + parameters + ") {" \
     
    477490        def do_block_parameters(self, parameters):
    478491                return ", ".join([upper1(p) + " & " + lower1(p) for p in parameters])
     492               
     493        def do_final_block_parameters(self, parameters):
     494                return ", ".join([upper1(p) + " & " + lower1(p) for p in parameters]+ ["BitBlock EOF_mask"])
    479495               
    480496        def do_segment_parameters(self, parameters):
     
    520536                AugAssignRemoval().xfrm(node)
    521537                Bitwise_to_SIMD().xfrm(node)
     538                final_block_node = copy.deepcopy(node)
    522539                CarryIntro().xfrm_fndef(node)
     540                CarryIntro("carryQ", "_ci", "").xfrm_fndef(final_block_node)
    523541
    524542                if self.add_dump_stmts:
     
    529547               
    530548                stream_function.statements = Cgen.py2C(4).gen(node.body)
     549                stream_function.final_block_statements = Cgen.py2C(4).gen(final_block_node.body)
    531550                self.stream_functions[stream_function.type_name] = stream_function
    532551       
Note: See TracChangeset for help on using the changeset viewer.