Changeset 744


Ignore:
Timestamp:
Nov 30, 2010, 9:40:16 PM (8 years ago)
Author:
ksherdy
Message:

Update parity_mask argument name to bitblock_parity_mask to avoid confusion.

Location:
proto/JSON
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • proto/JSON/json_compilable.py

    r739 r744  
    158158        Lex.Null = (temp89 | Lex.l);
    159159
     160        # --- Start Generate String Mask ---
     161        # parse_escape() --- manual inline
     162        # Odd = simd_const_2(1)
     163        # Even = simd_const_2(2)
     164        Start = Lex.RSolidus &~ bitutil.Advance(Lex.RSolidus)
     165       
     166        EvenStart = Start & Even
     167        EvenFinal = (EvenStart + Lex.RSolidus) & ~Lex.RSolidus
     168        EvenEscape = EvenFinal & Odd
     169       
     170        OddStart = Start & Odd
     171        OddFinal = (OddStart + Lex.RSolidus) & ~Lex.RSolidus
     172        OddEscape = (OddFinal & Even)
     173
     174        Escape = (EvenEscape | OddEscape) 
     175        UnescapedDQuotes = (Lex.DQuote &~ EscapeChars)
     176       
     177        # parallel_prefix_mask() --- manual insert and bitblock logic in JSON template.c --- assume existence of ParityMask
     178       
     179        StringMask = ParityMask & bitutil.Advance(ParityMask)
     180        # --- End Generate String Mask ---
     181
     182        StringSpans = StringMask | UnescapedDQuotes
     183
    160184        return (u8,Lex,Ctrl,EOF_mask)
    161185
  • proto/JSON/json_prototype.py

    r739 r744  
    4949def parse_escape(Lex, EOF_mask):
    5050        r"""
     51        We translate stream abtraction logic to native block-by-block implementation logic.
     52       
    5153        Marks escaped characters.
    5254        Does not mark escaped '\' characters.
    5355        '\' characters are either escaped and unmarked or the following character in an odd length run is marked.
    5456        """
    55         odd = simd_const_4('a',EOF_mask)
    56         even = simd_const_4('5',EOF_mask)
     57        odd = simd_const_4('a',EOF_mask)  # little endian
     58        even = simd_const_4('5',EOF_mask) # little endian               
    5759       
    5860        start = Lex.RSolidus &~ bitutil.Advance(Lex.RSolidus)
     
    8688def parallel_prefix_parity(strm):
    8789        r"""
    88         Translate to library function.
     90        We translate stream abtraction logic to native block-by-block implementation logic.
    8991       
    9092        x y | x XOR y
     
    622624        u8data = bitutil.readfile(sys.argv[1])
    623625
    624 #       demo_parse_escape(u8data)
    625         demo_parallel_prefix_parity(u8data)
     626        demo_parse_escape(u8data)
     627#       demo_parallel_prefix_parity(u8data)
    626628#       demo_atom_starts(u8data)
    627629#       demo_validate_number(u8data)
  • proto/JSON/src/json.c

    r741 r744  
    1616#define BLOCK_SIZE (sizeof(SIMD_type) * 8)      /* BLOCK_SIZE           - SIMD register in bits */     
    1717#define BUFFER_SIZE (BLOCK_SIZE * 16)           /* BUFFER_SIZE          - multiple of BLOCK_SIZE */
    18 #define OVERLAP_BUFSIZE sizeof(SIMD_type)       /* OVERLAP_BUFSIZE      - SIMD register width */
     18#define OVERLAP_BUFSIZE BLOCK_SIZE              /* OVERLAP_BUFSIZE      - SIMD register width in bytes overlap */
    1919
    2020#ifdef BUFFER_PROFILING
     
    4747BitBlock strct_u8__xF4_;
    4848BitBlock temp43;
     49BitBlock strct_Lex__True_;
    4950BitBlock strct_Lex__Null_;
    5051BitBlock temp10;
     
    6465BitBlock strct_Ctrl__CR_;
    6566BitBlock strct_Lex__f_;
    66 BitBlock strct_Lex__True_;
     67BitBlock UnescapedDQuotes;
     68BitBlock OddFinal;
    6769BitBlock strct_u8__unibyte_;
    6870BitBlock array_bit__3_;
     
    7274BitBlock temp29;
    7375BitBlock temp22;
    74 BitBlock strct_Ctrl__SP_;
     76BitBlock EvenStart;
    7577BitBlock temp20;
    7678BitBlock temp21;
     
    8284BitBlock temp2;
    8385BitBlock temp1;
     86BitBlock OddEscape;
    8487BitBlock temp7;
    8588BitBlock temp6;
     
    9093BitBlock strct_Lex__a_;
    9194BitBlock strct_u8__x80_x8F_;
     95BitBlock StringMask;
    9296BitBlock strct_u8__prefix2_;
    9397BitBlock array_bit__0_;
     
    104108BitBlock temp37;
    105109BitBlock temp36;
     110BitBlock ParityMask;
    106111BitBlock AllZero = simd_const_1(0);
    107112BitBlock temp35;
     113BitBlock EvenFinal;
    108114BitBlock strct_Lex__DQuote_;
     115BitBlock EvenEscape;
    109116BitBlock strct_Lex__RSolidus_;
     117BitBlock Escape;
    110118BitBlock array_bit__1_;
     119BitBlock Even;
    111120BitBlock array_bit__6_;
    112121BitBlock strct_Lex__r_;
     122BitBlock Start;
    113123BitBlock strct_u8__xF0_;
     124BitBlock strct_Ctrl__x00_x1F_;
    114125BitBlock strct_u8__x90_xBF_;
    115 BitBlock strct_Ctrl__x00_x1F_;
     126BitBlock strct_u8__badprefix_;
     127BitBlock strct_Ctrl__SP_;
    116128BitBlock strct_Lex__False_;
    117129BitBlock temp23;
     
    120132BitBlock array_bit__7_;
    121133BitBlock strct_Lex__Colon_;
     134BitBlock OddStart;
    122135BitBlock temp53;
    123136BitBlock strct_Lex__DecimalPoint_;
     137BitBlock EscapeChars;
    124138BitBlock temp88;
    125139BitBlock temp89;
     
    134148BitBlock strct_u8__xA0_xBF_;
    135149BitBlock strct_u8__prefix3_;
     150BitBlock Odd;
    136151BitBlock temp66;
    137152BitBlock temp67;
     
    179194BitBlock strct_Lex__t_;
    180195BitBlock strct_Ctrl__LF_;
     196BitBlock StringSpans;
    181197BitBlock strct_Lex__Escape_;
    182198BitBlock Temp3;
    183199BitBlock Temp2;
    184200BitBlock Temp1;
    185 BitBlock strct_u8__badprefix_;
     201BitBlock Temp7;
     202BitBlock Temp6;
     203BitBlock Temp5;
    186204BitBlock Temp4;
    187205BitBlock strct_Lex__HexDigit_;
    188206BitBlock strct_Lex__RCurlyBrace_;
     207BitBlock Temp8;
    189208BitBlock strct_Lex__Digit1_9_;
     209CarryType carry1 = Carry0;
     210CarryType carry0 = Carry0;
     211CarryType carry3 = Carry0;
     212CarryType carry2 = Carry0;
    190213
    191214       
     
    194217       
    195218        /*extra*/
     219        /* parse_escape, do not declare, since the PyBit compiler does so by default*/
     220        Odd = simd_const_2(1);
     221        Even = simd_const_2(2);
     222       
    196223        BitBlock high_bit_mask = sisd_high_bit_mask;   
    197224        BitBlock high_bit_is_set;
    198         BitBlock parity_mask = simd_const_1(0);
     225        // BitBlock ParityMask = simd_const_1(0); // ParityMask declaration via PyBit
    199226        BitBlock bitblock_parity_mask; 
    200227       
     
    378405temp89 = simd_or(temp64,strct_Lex__u_);
    379406strct_Lex__Null_ = simd_or(temp89,strct_Lex__l_);
    380 
    381 
    382                         /* strct_Lex__Null_ = simd_or(temp89,strct_Lex__l_); */
     407advance_with_carry(strct_Lex__RSolidus_, carry0, Temp5);
     408Start = simd_andc(strct_Lex__RSolidus_,Temp5);
     409EvenStart = simd_and(Start,Even);
     410adc128(EvenStart, strct_Lex__RSolidus_, carry1, Temp6);
     411EvenFinal = simd_andc(Temp6,strct_Lex__RSolidus_);
     412EvenEscape = simd_and(EvenFinal,Odd);
     413OddStart = simd_and(Start,Odd);
     414adc128(OddStart, strct_Lex__RSolidus_, carry2, Temp7);
     415OddFinal = simd_andc(Temp7,strct_Lex__RSolidus_);
     416OddEscape = simd_and(OddFinal,Even);
     417Escape = simd_or(EvenEscape,OddEscape);
     418UnescapedDQuotes = simd_andc(strct_Lex__DQuote_,EscapeChars);
     419
     420                        /* Generate Parity Mask */
    383421                        high_bit_mask = sisd_high_bit_mask;
    384422                        high_bit_is_set = simd_and(high_bit_mask, bitblock_parity_mask);                       
    385                         parity_mask = sisd_add( simd_not(sisd_srl(high_bit_is_set, sisd_from_int(BLOCK_SIZE-1))) , sisd_low_bit_mask);                                         
    386                         bitblock_parity_mask = bitblock_parallel_prefix_parity(strct_Lex__DQuote_, parity_mask);
    387                        
    388                         print_simd_register("strct_Lex__DQuote_",strct_Lex__DQuote_);
     423                        bitblock_parity_mask = sisd_add( simd_not(sisd_srl(high_bit_is_set, sisd_from_int(BLOCK_SIZE-1))) , sisd_low_bit_mask);                                         
     424                        ParityMask = bitblock_parallel_prefix_parity(UnescapedDQuotes, bitblock_parity_mask);
     425
     426advance_with_carry(ParityMask, carry3, Temp8);
     427StringMask = simd_and(ParityMask,Temp8);
     428StringSpans = simd_or(StringMask,UnescapedDQuotes);
     429
     430
     431                        /* strct_Lex__Null_ = simd_or(temp89,strct_Lex__l_); */
     432                        print_array_le("Data", &srcbuf[buf_pos],BLOCK_SIZE);
     433                        print_simd_register("Escape", Escape);
     434                       
     435
     436                       
     437                        print_simd_register("Unescaped DQuote",UnescapedDQuotes);
     438                        /*
    389439                        print_simd_register("high_bit_is_set", high_bit_is_set);
    390440                        print_simd_register("high_bit_mask", high_bit_mask);
    391                         print_simd_register("bitblock_parity_mask", bitblock_parity_mask);
    392 
     441                        */
     442                        print_simd_register("ParityMask", ParityMask);
     443                        print_simd_register("StringMask", StringMask);
     444                        print_simd_register("StringSpans", StringSpans);                                               
     445                       
    393446                        if (bitblock_has_bit(error_mask)){
    394447                                err_pos = src_pos + buf_pos + count_forward_zeroes(error_mask);
     
    404457                        /* extra */
    405458                        EOF_mask = sisd_srl(simd_const_1(1),sisd_from_int(BLOCK_SIZE-chars_avail));
    406                        
     459                                               
    407460                        BytePack * U8 = (BytePack *) &srcbuf[buf_pos];
    408461                       
     
    563616temp89 = simd_or(temp64,strct_Lex__u_);
    564617strct_Lex__Null_ = simd_or(temp89,strct_Lex__l_);
    565 
    566 
    567                         /* strct_Lex__Null_ = simd_or(temp89,strct_Lex__l_); */
    568                         /* extra */
     618advance_with_carry(strct_Lex__RSolidus_, carry0, Temp5);
     619Start = simd_andc(strct_Lex__RSolidus_,Temp5);
     620EvenStart = simd_and(Start,Even);
     621adc128(EvenStart, strct_Lex__RSolidus_, carry1, Temp6);
     622EvenFinal = simd_andc(Temp6,strct_Lex__RSolidus_);
     623EvenEscape = simd_and(EvenFinal,Odd);
     624OddStart = simd_and(Start,Odd);
     625adc128(OddStart, strct_Lex__RSolidus_, carry2, Temp7);
     626OddFinal = simd_andc(Temp7,strct_Lex__RSolidus_);
     627OddEscape = simd_and(OddFinal,Even);
     628Escape = simd_or(EvenEscape,OddEscape);
     629UnescapedDQuotes = simd_andc(strct_Lex__DQuote_,EscapeChars);
     630advance_with_carry(ParityMask, carry3, Temp8);
     631
     632                        /* Generate Parity Mask */
    569633                        high_bit_mask = sisd_srl(sisd_high_bit_mask, sisd_from_int(BLOCK_SIZE-chars_avail));
    570634                        high_bit_is_set = simd_and(high_bit_mask, bitblock_parity_mask);
    571                         parity_mask = sisd_add(simd_not(sisd_srl(high_bit_is_set, sisd_from_int(chars_avail-1))) , sisd_low_bit_mask);                 
    572                         bitblock_parity_mask = bitblock_parallel_prefix_parity(strct_Lex__DQuote_, parity_mask);
    573                         bitblock_parity_mask = simd_and(bitblock_parity_mask, EOF_mask);
    574                        
    575                         print_simd_register("strct_Lex__DQuote_",strct_Lex__DQuote_);
     635                        bitblock_parity_mask = sisd_add(simd_not(sisd_srl(high_bit_is_set, sisd_from_int(chars_avail-1))) , sisd_low_bit_mask);                 
     636                        ParityMask = bitblock_parallel_prefix_parity(UnescapedDQuotes, bitblock_parity_mask);
     637                        ParityMask = simd_and(bitblock_parity_mask, EOF_mask);
     638
     639
     640StringMask = simd_and(ParityMask,Temp8);
     641StringSpans = simd_or(StringMask,UnescapedDQuotes);
     642
     643
     644                        /* strct_Lex__Null_ = simd_or(temp89,strct_Lex__l_); */
     645                        print_array_le("Data", &srcbuf[buf_pos],BLOCK_SIZE);
     646                        print_simd_register("Escape", Escape);
     647                       
     648
     649                       
     650                       
     651                        print_simd_register("Unescaped DQuote",UnescapedDQuotes);
     652                        /*
    576653                        print_simd_register("high_bit_is_set", high_bit_is_set);
    577654                        print_simd_register("high_bit_mask", high_bit_mask);
    578                         print_simd_register("bitblock_parity_mask", bitblock_parity_mask);
     655                        */
     656                        print_simd_register("ParityMask", ParityMask);
     657                        print_simd_register("StringMask", StringMask);
     658                        print_simd_register("StringSpans", StringSpans);                       
    579659                       
    580660                        if(bitblock_has_bit(error_mask)) {
  • proto/JSON/template.c

    r741 r744  
    1616#define BLOCK_SIZE (sizeof(SIMD_type) * 8)      /* BLOCK_SIZE           - SIMD register in bits */     
    1717#define BUFFER_SIZE (BLOCK_SIZE * 16)           /* BUFFER_SIZE          - multiple of BLOCK_SIZE */
    18 #define OVERLAP_BUFSIZE sizeof(SIMD_type)       /* OVERLAP_BUFSIZE      - SIMD register width */
     18#define OVERLAP_BUFSIZE BLOCK_SIZE              /* OVERLAP_BUFSIZE      - SIMD register width in bytes overlap */
    1919
    2020#ifdef BUFFER_PROFILING
     
    4040       
    4141        /*extra*/
     42        /* parse_escape, do not declare, since the PyBit compiler does so by default*/
     43        Odd = simd_const_2(1);
     44        Even = simd_const_2(2);
     45       
    4246        BitBlock high_bit_mask = sisd_high_bit_mask;   
    4347        BitBlock high_bit_is_set;
    44         BitBlock parity_mask = simd_const_1(0);
     48        // BitBlock ParityMask = simd_const_1(0); // ParityMask declaration via PyBit
    4549        BitBlock bitblock_parity_mask; 
    4650       
     
    8387
    8488                        /* strct_Lex__Null_ = simd_or(temp89,strct_Lex__l_); */
     89                        print_array_le("Data", &srcbuf[buf_pos],BLOCK_SIZE);
     90                        print_simd_register("Escape", Escape);
     91                       
     92                        /* Generate Parity Mask */
    8593                        high_bit_mask = sisd_high_bit_mask;
    8694                        high_bit_is_set = simd_and(high_bit_mask, bitblock_parity_mask);                       
    87                         parity_mask = sisd_add( simd_not(sisd_srl(high_bit_is_set, sisd_from_int(BLOCK_SIZE-1))) , sisd_low_bit_mask);                                         
    88                         bitblock_parity_mask = bitblock_parallel_prefix_parity(strct_Lex__DQuote_, parity_mask);
    89                        
    90                         print_simd_register("strct_Lex__DQuote_",strct_Lex__DQuote_);
     95                        bitblock_parity_mask = sisd_add( simd_not(sisd_srl(high_bit_is_set, sisd_from_int(BLOCK_SIZE-1))) , sisd_low_bit_mask);                                         
     96                        ParityMask = bitblock_parallel_prefix_parity(UnescapedDQuotes, bitblock_parity_mask);
     97                       
     98                        print_simd_register("Unescaped DQuote",UnescapedDQuotes);
     99                        /*
    91100                        print_simd_register("high_bit_is_set", high_bit_is_set);
    92101                        print_simd_register("high_bit_mask", high_bit_mask);
    93                         print_simd_register("bitblock_parity_mask", bitblock_parity_mask);
    94 
     102                        */
     103                        print_simd_register("ParityMask", ParityMask);
     104                        print_simd_register("StringMask", StringMask);
     105                        print_simd_register("StringSpans", StringSpans);                                               
     106                       
    95107                        if (bitblock_has_bit(error_mask)){
    96108                                err_pos = src_pos + buf_pos + count_forward_zeroes(error_mask);
     
    106118                        /* extra */
    107119                        EOF_mask = sisd_srl(simd_const_1(1),sisd_from_int(BLOCK_SIZE-chars_avail));
    108                        
     120                                               
    109121                        BytePack * U8 = (BytePack *) &srcbuf[buf_pos];
    110122                       
     
    124136
    125137                        /* strct_Lex__Null_ = simd_or(temp89,strct_Lex__l_); */
    126                         /* extra */
     138                        print_array_le("Data", &srcbuf[buf_pos],BLOCK_SIZE);
     139                        print_simd_register("Escape", Escape);
     140                       
     141                        /* Generate Parity Mask */
    127142                        high_bit_mask = sisd_srl(sisd_high_bit_mask, sisd_from_int(BLOCK_SIZE-chars_avail));
    128143                        high_bit_is_set = simd_and(high_bit_mask, bitblock_parity_mask);
    129                         parity_mask = sisd_add(simd_not(sisd_srl(high_bit_is_set, sisd_from_int(chars_avail-1))) , sisd_low_bit_mask);                 
    130                         bitblock_parity_mask = bitblock_parallel_prefix_parity(strct_Lex__DQuote_, parity_mask);
    131                         bitblock_parity_mask = simd_and(bitblock_parity_mask, EOF_mask);
    132                        
    133                         print_simd_register("strct_Lex__DQuote_",strct_Lex__DQuote_);
     144                        bitblock_parity_mask = sisd_add(simd_not(sisd_srl(high_bit_is_set, sisd_from_int(chars_avail-1))) , sisd_low_bit_mask);                 
     145                        ParityMask = bitblock_parallel_prefix_parity(UnescapedDQuotes, bitblock_parity_mask);
     146                        ParityMask = simd_and(bitblock_parity_mask, EOF_mask);
     147                       
     148                       
     149                        print_simd_register("Unescaped DQuote",UnescapedDQuotes);
     150                        /*
    134151                        print_simd_register("high_bit_is_set", high_bit_is_set);
    135152                        print_simd_register("high_bit_mask", high_bit_mask);
    136                         print_simd_register("bitblock_parity_mask", bitblock_parity_mask);
     153                        */
     154                        print_simd_register("ParityMask", ParityMask);
     155                        print_simd_register("StringMask", StringMask);
     156                        print_simd_register("StringSpans", StringSpans);                       
    137157                       
    138158                        if(bitblock_has_bit(error_mask)) {
Note: See TracChangeset for help on using the changeset viewer.