Changeset 740


Ignore:
Timestamp:
Nov 29, 2010, 11:12:12 PM (8 years ago)
Author:
ksherdy
Message:

Refactor generic template.c.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • proto/Compiler/workspace/template.c

    r719 r740  
    1515
    1616#define BLOCK_SIZE (sizeof(SIMD_type) * 8)      /* BLOCK_SIZE           - SIMD register in bits */     
    17 #define BUFFER_SIZE (BLOCK_SIZE * 26)           /* BUFFER_SIZE          - multiple of BLOCK_SIZE */
     17#define BUFFER_SIZE (BLOCK_SIZE * 16)           /* BUFFER_SIZE          - multiple of BLOCK_SIZE */
    1818#define OVERLAP_BUFSIZE sizeof(SIMD_type)       /* OVERLAP_BUFSIZE      - SIMD register width */
    1919
     
    3434 
    3535        /* Compiler generated stream variable declarations. */
    36 //      @decl
    37         BitBlock array_bit__0_;
    38         BitBlock array_bit__1_;
    39         BitBlock array_bit__2_;
    40         BitBlock array_bit__3_;
    41         BitBlock array_bit__4_;
    42         BitBlock array_bit__5_;
    43         BitBlock array_bit__6_;
    44         BitBlock array_bit__7_;
     36        @decl
     37       
    4538        BitBlock error_mask;
    4639        BitBlock EOF_mask = simd_const_1(1);
     
    5043       
    5144        /* Source file data is broken into buffers, buffers are broken into blocks, blocks are SIMD register width. */
     45        int src_pos = 0;
    5246        int buf_pos = 0;
    53         int block_pos = 0;
    5447        int err_pos = 0;
    5548       
     
    5750        char * srcbuf = ((char *) buf) + OVERLAP_BUFSIZE;
    5851        memset((unsigned char *)srcbuf,0,16);
    59         memset(((unsigned char *)srcbuf)+BUFFER_SIZE,0,16); /* zero out first and last sizeof(SIMD_type) bytes */
     52        memset(((unsigned char *)srcbuf)+BUFFER_SIZE,0,16); /* Zero out first and last sizeof(SIMD_type) bytes. */
    6053       
    6154        /* File IO */
     
    6861        if(chars_avail==0 && feof(infile)) { return; }
    6962
    70         EOF_mask = simd_const_1(1);
    7163        @stream_stmts
    7264       
     
    7567                PERF_SEC_START(perf_timer);
    7668               
    77                 while (chars_avail >= BLOCK_SIZE) {
     69                while (chars_avail >= BLOCK_SIZE) { /* process full blocks */
    7870
    79                         BytePack * U8 = (BytePack *) &srcbuf[block_pos];
     71                        BytePack * U8 = (BytePack *) &srcbuf[buf_pos];
    8072
    8173                        s2p(U8[0], U8[1], U8[2], U8[3], U8[4], U8[5], U8[6], U8[7],
     
    8577
    8678                        if (bitblock_has_bit(error_mask)){
    87                                 err_pos = buf_pos + (chars_read - chars_avail) + count_forward_zeroes(error_mask);
     79                                err_pos = src_pos + buf_pos + count_forward_zeroes(error_mask);
    8880                                fprintf(stderr, "Error at position %i\n.", err_pos);
    8981                                exit(-1);
     
    9183
    9284                        chars_avail -= BLOCK_SIZE;
     85                        buf_pos += BLOCK_SIZE;
    9386                }               
    9487               
    95                 if(chars_avail > 0 /* || any_carry */) {
    96                  
     88                if(chars_avail > 0 /* || any_carry */) { /* process final partial block */
     89                        /* extra */
    9790                        EOF_mask = sisd_srl(simd_const_1(1),sisd_from_int(BLOCK_SIZE-chars_avail));
     91                        BitBlock high_bit_mask = sisd_srl(sisd_high_bit_mask, sisd_from_int(BLOCK_SIZE-chars_avail));
    9892                       
    99                         BytePack * U8 = (BytePack *) &srcbuf[block_pos];
     93                        BytePack * U8 = (BytePack *) &srcbuf[buf_pos];
    10094                       
    10195                        s2p(U8[0], U8[1], U8[2], U8[3], U8[4], U8[5], U8[6], U8[7],
     
    114108                       
    115109                        if(bitblock_has_bit(error_mask)) {
    116                                 err_pos = err_pos = buf_pos + (chars_read - chars_avail) + count_forward_zeroes(error_mask);
     110                                err_pos = src_pos + buf_pos + count_forward_zeroes(error_mask);
    117111                                fprintf(stderr, "Error at position %i\n.", err_pos);
    118112                                exit(-1);
     
    122116                PERF_SEC_END(perf_timer, chars_avail);
    123117
    124                 buf_pos += chars_read;
     118                src_pos += chars_read;
     119                buf_pos = 0;
    125120
    126                 chars_read = fread(&srcbuf[buf_pos], 1, BUFFER_SIZE, infile);
     121                chars_read = fread((void *)srcbuf, 1, BUFFER_SIZE, infile);
    127122                chars_avail = chars_read;
    128123                if(ferror(infile)) { fprintf(stderr, "Failed to read input file.\n"); return; }
Note: See TracChangeset for help on using the changeset viewer.