Changeset 39 for trunk/src


Ignore:
Timestamp:
Feb 10, 2008, 10:11:42 AM (11 years ago)
Author:
cameron
Message:

Improve EBCDIC WS_Control_10; WS_Control_11 for ASCII7, EASCII8, EBCDIC

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/bitlex.c

    r36 r39  
    200200        BitBlock temp3 = simd_or(temp1, temp2);
    201201        BitBlock temp4 = simd_or(bit[4], bit[5]);
    202         BitBlock temp5 = simd_or(bit[6], bit[7]);
    203         BitBlock temp6 = simd_or(temp4, temp5);
    204         BitBlock temp7 = simd_or(temp3, temp6);
    205         BitBlock temp8 = simd_andc(bit[7], bit[6]);
    206         BitBlock temp9 = simd_andc(temp8, temp4);
    207         BitBlock temp10 = simd_andc(temp9, temp3);
    208         BitBlock temp11 = simd_andc(temp7, temp10);
    209         BitBlock temp12 = simd_andc(bit[6], bit[7]);
    210         BitBlock temp13 = simd_andc(temp12, temp4);
    211         BitBlock temp14 = simd_andc(temp13, temp3);
    212         BitBlock temp15 = simd_andc(temp11, temp14);
    213         BitBlock temp16 = simd_and(bit[6], bit[7]);
    214         BitBlock temp17 = simd_andc(temp16, temp4);
    215         BitBlock temp18 = simd_andc(temp17, temp3);
    216         BitBlock temp19 = simd_andc(temp15, temp18);
    217         BitBlock temp20 = simd_and(bit[2], bit[3]);
     202        BitBlock temp5 = simd_or(temp3, temp4);
     203        BitBlock temp6 = simd_and(bit[2], bit[3]);
     204        BitBlock temp7 = simd_andc(temp6, temp1);
     205        BitBlock temp8 = simd_andc(bit[5], bit[4]);
     206        BitBlock temp9 = simd_and(bit[6], bit[7]);
     207        BitBlock temp10 = simd_and(temp8, temp9);
     208        BitBlock temp11 = simd_and(temp7, temp10);
     209        BitBlock temp12 = simd_andc(temp5, temp11);
     210        BitBlock temp13 = simd_andc(bit[2], bit[3]);
     211        BitBlock temp14 = simd_andc(temp13, temp1);
     212        BitBlock temp15 = simd_and(bit[4], bit[5]);
     213        BitBlock temp16 = simd_and(temp14, temp15);
     214        BitBlock temp17 = simd_andc(bit[6], bit[7]);
     215        BitBlock temp18 = simd_andc(temp16, temp17);
     216        BitBlock temp19 = simd_andc(temp12, temp18);
     217        BitBlock temp20 = simd_andc(bit[3], bit[2]);
    218218        BitBlock temp21 = simd_andc(temp20, temp1);
    219         BitBlock temp22 = simd_andc(bit[5], bit[4]);
    220         BitBlock temp23 = simd_and(temp22, temp16);
    221         BitBlock temp24 = simd_and(temp21, temp23);
    222         BitBlock temp25 = simd_andc(temp19, temp24);
    223         BitBlock temp26 = simd_andc(bit[2], bit[3]);
    224         BitBlock temp27 = simd_andc(temp26, temp1);
    225         BitBlock temp28 = simd_and(bit[4], bit[5]);
    226         BitBlock temp29 = simd_and(temp28, temp8);
    227         BitBlock temp30 = simd_and(temp27, temp29);
    228         BitBlock temp31 = simd_andc(temp25, temp30);
    229         BitBlock temp32 = simd_and(temp28, temp12);
    230         BitBlock temp33 = simd_and(temp27, temp32);
     219        BitBlock temp22 = simd_and(temp8, temp17);
     220        BitBlock temp23 = simd_and(temp21, temp22);
     221        BitBlock temp24 = simd_andc(temp19, temp23);
     222        BitBlock temp25 = simd_or(temp1, bit[2]);
     223        BitBlock temp26 = simd_or(bit[5], temp9);
     224        BitBlock temp27 = simd_and(bit[4], temp26);
     225        BitBlock temp28 = simd_andc(simd_const_1(1), temp4);
     226        BitBlock temp29 = simd_if(bit[3], temp27, temp28);
     227        BitBlock temp30 = simd_andc(temp29, temp25);
     228        BitBlock temp31 = simd_andc(temp24, temp30);
     229        BitBlock temp32 = simd_andc(temp15, bit[6]);
     230        BitBlock temp33 = simd_and(temp7, temp32);
    231231        BitBlock temp34 = simd_andc(temp31, temp33);
    232         BitBlock temp35 = simd_and(temp28, temp16);
    233         BitBlock temp36 = simd_and(temp27, temp35);
     232        BitBlock temp35 = simd_andc(temp17, temp4);
     233        BitBlock temp36 = simd_and(temp7, temp35);
    234234        BitBlock temp37 = simd_andc(temp34, temp36);
    235         BitBlock temp38 = simd_andc(bit[3], bit[2]);
    236         BitBlock temp39 = simd_andc(temp38, temp1);
    237         BitBlock temp40 = simd_and(temp22, temp12);
    238         BitBlock temp41 = simd_and(temp39, temp40);
    239         BitBlock temp42 = simd_andc(temp37, temp41);
    240         BitBlock temp43 = simd_and(temp22, temp8);
    241         BitBlock temp44 = simd_andc(temp43, temp3);
    242         BitBlock temp45 = simd_andc(temp42, temp44);
    243         BitBlock temp46 = simd_and(temp27, temp43);
    244         BitBlock temp47 = simd_andc(temp45, temp46);
    245         BitBlock temp48 = simd_andc(bit[4], bit[5]);
    246         BitBlock temp49 = simd_and(temp48, temp16);
    247         BitBlock temp50 = simd_andc(temp49, temp3);
    248         BitBlock temp51 = simd_andc(temp47, temp50);
    249         BitBlock temp52 = simd_andc(temp28, temp5);
    250         BitBlock temp53 = simd_andc(temp52, temp3);
    251         BitBlock temp54 = simd_andc(temp51, temp53);
    252         BitBlock temp55 = simd_andc(temp29, temp3);
    253         BitBlock temp56 = simd_andc(temp54, temp55);
    254         BitBlock temp57 = simd_andc(temp32, temp3);
    255         BitBlock temp58 = simd_andc(temp56, temp57);
    256         BitBlock temp59 = simd_andc(temp35, temp3);
    257         BitBlock temp60 = simd_andc(temp58, temp59);
    258         BitBlock temp61 = simd_andc(temp39, temp6);
    259         BitBlock temp62 = simd_andc(temp60, temp61);
    260         BitBlock temp63 = simd_and(temp39, temp9);
    261         BitBlock temp64 = simd_andc(temp62, temp63);
    262         BitBlock temp65 = simd_and(temp39, temp13);
    263         BitBlock temp66 = simd_andc(temp64, temp65);
    264         BitBlock temp67 = simd_and(temp39, temp17);
    265         BitBlock temp68 = simd_andc(temp66, temp67);
    266         BitBlock temp69 = simd_and(temp21, temp52);
    267         BitBlock temp70 = simd_andc(temp68, temp69);
    268         BitBlock temp71 = simd_and(temp21, temp29);
    269         BitBlock temp72 = simd_andc(temp70, temp71);
    270         BitBlock temp73 = simd_and(temp21, temp13);
    271         BitBlock temp74 = simd_andc(temp72, temp73);
    272         BitBlock temp75 = simd_and(temp27, temp40);
    273         BitBlock temp76 = simd_andc(temp74, temp75);
    274         BitBlock temp77 = simd_andc(temp48, temp5);
    275         BitBlock temp78 = simd_and(temp39, temp77);
    276         BitBlock temp79 = simd_andc(temp76, temp78);
    277         BitBlock temp80 = simd_and(temp48, temp8);
    278         BitBlock temp81 = simd_and(temp39, temp80);
    279         BitBlock temp82 = simd_andc(temp79, temp81);
    280         BitBlock temp83 = simd_and(temp21, temp35);
    281         BitBlock temp84 = simd_andc(temp82, temp83);
    282         BitBlock temp85 = simd_and(temp27, temp23);
    283         BitBlock temp86 = simd_andc(temp84, temp85);
    284         BitBlock temp87 = simd_and(temp39, temp52);
    285         BitBlock temp88 = simd_andc(temp86, temp87);
    286         BitBlock temp89 = simd_and(temp39, temp29);
    287         BitBlock temp90 = simd_andc(temp88, temp89);
    288         BitBlock temp91 = simd_and(temp39, temp32);
    289         BitBlock temp92 = simd_andc(temp90, temp91);
    290         BitBlock temp93 = simd_and(temp39, temp35);
    291         BitBlock temp94 = simd_andc(temp92, temp93);
    292         Control = simd_andc(simd_const_1(1), temp94);
    293         BitBlock CR = simd_andc(temp29, temp3);
    294         BitBlock LF = simd_and(temp27, temp43);
    295         BitBlock HT = simd_andc(temp43, temp3);
    296         BitBlock temp95 = simd_andc(bit[1], bit[0]);
    297         BitBlock temp96 = simd_andc(temp95, temp2);
    298         BitBlock SP = simd_andc(temp96, temp6);
     235        BitBlock temp38 = simd_and(temp8, bit[6]);
     236        BitBlock temp39 = simd_and(temp14, temp38);
     237        BitBlock temp40 = simd_andc(temp37, temp39);
     238        BitBlock temp41 = simd_andc(bit[4], bit[5]);
     239        BitBlock temp42 = simd_andc(temp41, bit[6]);
     240        BitBlock temp43 = simd_and(temp21, temp42);
     241        BitBlock temp44 = simd_andc(temp40, temp43);
     242        BitBlock temp45 = simd_and(temp15, temp9);
     243        BitBlock temp46 = simd_and(temp7, temp45);
     244        BitBlock temp47 = simd_andc(temp44, temp46);
     245        BitBlock temp48 = simd_and(temp21, temp15);
     246        BitBlock temp49 = simd_andc(temp47, temp48);
     247        Control = simd_andc(simd_const_1(1), temp49);
     248        BitBlock temp50 = simd_andc(bit[7], bit[6]);
     249        BitBlock temp51 = simd_and(temp15, temp50);
     250        BitBlock CR = simd_andc(temp51, temp3);
     251        BitBlock temp52 = simd_and(temp8, temp50);
     252        BitBlock LF = simd_and(temp14, temp52);
     253        BitBlock HT = simd_andc(temp52, temp3);
     254        BitBlock temp53 = simd_andc(bit[1], bit[0]);
     255        BitBlock temp54 = simd_andc(temp53, temp2);
     256        BitBlock temp55 = simd_or(bit[6], bit[7]);
     257        BitBlock temp56 = simd_or(temp4, temp55);
     258        BitBlock SP = simd_andc(temp54, temp56);
    299259        WS = simd_or(simd_or(CR, LF), simd_or(HT, SP));
    300260}
     
    314274                parsing_engine_data->item_stream[NonWS][i] = simd_not(WS);
    315275        }
    316         if (code_units % BLOCKSIZE != 0)
     276        if ((code_units % BLOCKSIZE) != 0)
    317277                Control = simd_andc(Control,
    318278                                    sisd_sfl(simd_const_1(1),
     
    655615
    656616
     617static inline void ASCII_7_WS_Control_Blocks_11(BitBlock bit[], BitBlock& WS, BitBlock& Control) {
     618        BitBlock temp1 = simd_or(bit[0], bit[1]);
     619        BitBlock temp2 = simd_or(temp1, bit[2]);
     620        BitBlock temp3 = simd_andc(bit[1], bit[0]);
     621        BitBlock temp4 = simd_and(bit[2], bit[3]);
     622        BitBlock temp5 = simd_and(temp3, temp4);
     623        BitBlock temp6 = simd_and(bit[4], bit[5]);
     624        BitBlock temp7 = simd_and(bit[6], bit[7]);
     625        BitBlock temp8 = simd_and(temp6, temp7);
     626        BitBlock temp9 = simd_and(temp5, temp8);
     627        BitBlock temp10 = simd_andc(temp2, temp9);
     628        BitBlock temp11 = simd_andc(temp10, bit[0]);
     629        Control = simd_andc(simd_const_1(1), temp11);
     630        BitBlock temp12 = simd_or(bit[2], bit[3]);
     631        BitBlock temp13 = simd_or(temp1, temp12);
     632        BitBlock temp14 = simd_andc(bit[7], bit[6]);
     633        BitBlock temp15 = simd_and(temp6, temp14);
     634        BitBlock CR = simd_andc(temp15, temp13);
     635        BitBlock temp16 = simd_andc(bit[4], bit[5]);
     636        BitBlock temp17 = simd_andc(bit[6], bit[7]);
     637        BitBlock temp18 = simd_and(temp16, temp17);
     638        BitBlock LF = simd_andc(temp18, temp13);
     639        BitBlock temp19 = simd_and(temp16, temp14);
     640        BitBlock HT = simd_andc(temp19, temp13);
     641        BitBlock temp20 = simd_andc(bit[2], bit[3]);
     642        BitBlock temp21 = simd_andc(temp20, temp1);
     643        BitBlock temp22 = simd_or(bit[4], bit[5]);
     644        BitBlock temp23 = simd_or(bit[6], bit[7]);
     645        BitBlock temp24 = simd_or(temp22, temp23);
     646        BitBlock SP = simd_andc(temp21, temp24);
     647        WS = simd_or(simd_or(CR, LF), simd_or(HT, SP));
     648}
     649
     650
    657651void ASCII_7_Lexer::Do_XML_11_WS_Control() {
    658         printf("ASCII_7_Lexer::Do_XML_11_WS_Control not yet implemented; using XML 1.0 rules.\n");
    659         Do_XML_10_WS_Control();
    660 };
    661 
     652        BitBlock Restricted = simd_const_1(0);
     653        BitBlock Control = simd_const_1(0);
     654        BitBlock WS = simd_const_1(0);
     655        for (int i = 0; i < data_blocks; i++) {
     656                Restricted = simd_or(Restricted, simd_andc(Control, WS));
     657                ASCII_7_WS_Control_Blocks_11(x8basis[i].bit, WS, Control);
     658                parsing_engine_data->item_stream[NonWS][i] = simd_not(WS);
     659        }
     660        if ((code_units % BLOCKSIZE) != 0)
     661                Control = simd_andc(Control,
     662                                    sisd_sfl(simd_const_1(1),
     663                                             sisd_from_int(code_units % BLOCKSIZE)));
     664        Restricted = simd_or(Restricted, simd_andc(Control, WS));
     665        if (bitblock_has_bit(Restricted)) {
     666                printf("***Restricted control character in input.\n");
     667                exit(-1);
     668        }
     669};
     670
     671static inline void EASCII_8_WS_Control_Blocks_11(BitBlock bit[], BitBlock& WS, BitBlock& Control) {
     672        BitBlock temp1 = simd_or(bit[0], bit[1]);
     673        BitBlock temp2 = simd_or(temp1, bit[2]);
     674        BitBlock temp3 = simd_andc(bit[1], bit[0]);
     675        BitBlock temp4 = simd_and(bit[2], bit[3]);
     676        BitBlock temp5 = simd_and(temp3, temp4);
     677        BitBlock temp6 = simd_and(bit[4], bit[5]);
     678        BitBlock temp7 = simd_and(bit[6], bit[7]);
     679        BitBlock temp8 = simd_and(temp6, temp7);
     680        BitBlock temp9 = simd_and(temp5, temp8);
     681        BitBlock temp10 = simd_andc(temp2, temp9);
     682        BitBlock temp11 = simd_andc(bit[0], bit[1]);
     683        BitBlock temp12 = simd_andc(temp11, bit[2]);
     684        BitBlock temp13 = simd_andc(temp10, temp12);
     685        Control = simd_andc(simd_const_1(1), temp13);
     686        BitBlock temp14 = simd_or(bit[2], bit[3]);
     687        BitBlock temp15 = simd_or(temp1, temp14);
     688        BitBlock temp16 = simd_andc(bit[7], bit[6]);
     689        BitBlock temp17 = simd_and(temp6, temp16);
     690        BitBlock CR = simd_andc(temp17, temp15);
     691        BitBlock temp18 = simd_andc(bit[4], bit[5]);
     692        BitBlock temp19 = simd_andc(bit[6], bit[7]);
     693        BitBlock temp20 = simd_and(temp18, temp19);
     694        BitBlock LF = simd_andc(temp20, temp15);
     695        BitBlock temp21 = simd_and(temp18, temp16);
     696        BitBlock HT = simd_andc(temp21, temp15);
     697        BitBlock temp22 = simd_andc(bit[2], bit[3]);
     698        BitBlock temp23 = simd_andc(temp22, temp1);
     699        BitBlock temp24 = simd_or(bit[4], bit[5]);
     700        BitBlock temp25 = simd_or(bit[6], bit[7]);
     701        BitBlock temp26 = simd_or(temp24, temp25);
     702        BitBlock SP = simd_andc(temp23, temp26);
     703        BitBlock temp27 = simd_andc(temp11, temp14);
     704        BitBlock temp28 = simd_andc(bit[5], bit[4]);
     705        BitBlock temp29 = simd_and(temp28, temp16);
     706        BitBlock NEL = simd_and(temp27, temp29);
     707        WS = simd_or(simd_or(simd_or(CR, LF), simd_or(HT, SP)), NEL);
     708}
    662709
    663710void EASCII_8_Lexer::Do_XML_11_WS_Control() {
    664   printf("EASCII_8_Lexer::Do_XML_11_WS_Control not yet implemented; using XML 1.0 rules.\n");
    665   Do_XML_10_WS_Control();
     711        BitBlock Restricted = simd_const_1(0);
     712        BitBlock Control = simd_const_1(0);
     713        BitBlock WS = simd_const_1(0);
     714        for (int i = 0; i < data_blocks; i++) {
     715                Restricted = simd_or(Restricted, simd_andc(Control, WS));
     716                EASCII_8_WS_Control_Blocks_11(x8basis[i].bit, WS, Control);
     717                parsing_engine_data->item_stream[NonWS][i] = simd_not(WS);
     718        }
     719        if ((code_units % BLOCKSIZE) != 0)
     720                Control = simd_andc(Control,
     721                                    sisd_sfl(simd_const_1(1),
     722                                             sisd_from_int(code_units % BLOCKSIZE)));
     723        Restricted = simd_or(Restricted, simd_andc(Control, WS));
     724        if (bitblock_has_bit(Restricted)) {
     725                printf("***Restricted control character in input.\n");
     726                exit(-1);
     727        }
    666728};
    667729
     
    678740};
    679741
     742static inline void EBCDIC_WS_Control_Blocks_11(BitBlock bit[], BitBlock& WS, BitBlock& Control) {
     743        BitBlock temp1 = simd_or(bit[0], bit[1]);
     744        BitBlock temp2 = simd_and(bit[0], bit[1]);
     745        BitBlock temp3 = simd_and(bit[2], bit[3]);
     746        BitBlock temp4 = simd_and(temp2, temp3);
     747        BitBlock temp5 = simd_and(bit[4], bit[5]);
     748        BitBlock temp6 = simd_and(bit[6], bit[7]);
     749        BitBlock temp7 = simd_and(temp5, temp6);
     750        BitBlock temp8 = simd_and(temp4, temp7);
     751        BitBlock temp9 = simd_andc(temp1, temp8);
     752        Control = simd_andc(simd_const_1(1), temp9);
     753        BitBlock temp10 = simd_or(bit[2], bit[3]);
     754        BitBlock temp11 = simd_or(temp1, temp10);
     755        BitBlock temp12 = simd_andc(bit[7], bit[6]);
     756        BitBlock temp13 = simd_and(temp5, temp12);
     757        BitBlock CR = simd_andc(temp13, temp11);
     758        BitBlock temp14 = simd_andc(bit[2], bit[3]);
     759        BitBlock temp15 = simd_andc(temp14, temp1);
     760        BitBlock temp16 = simd_andc(bit[5], bit[4]);
     761        BitBlock temp17 = simd_and(temp16, temp12);
     762        BitBlock LF = simd_and(temp15, temp17);
     763        BitBlock HT = simd_andc(temp17, temp11);
     764        BitBlock temp18 = simd_andc(bit[1], bit[0]);
     765        BitBlock temp19 = simd_andc(temp18, temp10);
     766        BitBlock temp20 = simd_or(bit[4], bit[5]);
     767        BitBlock temp21 = simd_or(bit[6], bit[7]);
     768        BitBlock temp22 = simd_or(temp20, temp21);
     769        BitBlock SP = simd_andc(temp19, temp22);
     770        BitBlock temp23 = simd_andc(bit[3], bit[2]);
     771        BitBlock temp24 = simd_andc(temp23, temp1);
     772        BitBlock NEL = simd_and(temp24, temp17);
     773        WS = simd_or(simd_or(simd_or(CR, LF), simd_or(HT, SP)), NEL);
     774}
    680775
    681776void EBCDIC_Lexer::Do_XML_11_WS_Control() {
    682         printf("EBCDIC_Lexer::Do_XML_11_WS_Control not yet implemented; using XML 1.0 rules.\n");
    683         Do_XML_10_WS_Control();
     777        BitBlock Restricted = simd_const_1(0);
     778        BitBlock Control = simd_const_1(0);
     779        BitBlock WS = simd_const_1(0);
     780        for (int i = 0; i < data_blocks; i++) {
     781                Restricted = simd_or(Restricted, simd_andc(Control, WS));
     782                EBCDIC_WS_Control_Blocks_11(x8basis[i].bit, WS, Control);
     783                parsing_engine_data->item_stream[NonWS][i] = simd_not(WS);
     784        }
     785        if ((code_units % BLOCKSIZE) != 0)
     786                Control = simd_andc(Control,
     787                                    sisd_sfl(simd_const_1(1),
     788                                             sisd_from_int(code_units % BLOCKSIZE)));
     789        Restricted = simd_or(Restricted, simd_andc(Control, WS));
     790        if (bitblock_has_bit(Restricted)) {
     791                printf("***Restricted control character in input.\n");
     792                exit(-1);
     793        }
    684794};
    685795
     
    690800void Lexer_Interface::TransposeToBitStreams() {
    691801        BytePack * pseudoASCII_src = &(xml_buf->x8data[lexer_base_pos/PACKSIZE]);
    692 #ifdef DEBUG
    693         printf("pseudoASCII_src addr = %x\n", (int) pseudoASCII_src);
    694 #endif
    695 
    696802        for (int blk = 0; blk < data_blocks; blk++) {
    697803                s2p_bytepack(&pseudoASCII_src[blk*8], x8basis[blk].bit);
Note: See TracChangeset for help on using the changeset viewer.