Changeset 183 for trunk/src


Ignore:
Timestamp:
Jul 10, 2008, 6:17:58 PM (11 years ago)
Author:
cameron
Message:

SIMD templated library - restructuring.

Location:
trunk/src
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/bitlex.c

    r179 r183  
    2929        validation_stream = (BitBlock *) simd_new(BUFFER_BLOCKS+SENTINEL_BLOCKS);
    3030#ifdef TEMPLATED_SIMD_LIB
    31         validation_stream[BUFFER_BLOCKS] = simd_const<1,1>();
     31        validation_stream[BUFFER_BLOCKS] = simd<1>::constant<1>();
    3232#endif
    3333#ifndef TEMPLATED_SIMD_LIB
     
    167167        BitBlock temp2 = simd_or(temp1, bit[2]);
    168168#ifdef TEMPLATED_SIMD_LIB
    169         Control = simd_andc(simd_const<1,1>(), temp2);
     169        Control = simd_andc(simd<1>::constant<1>(), temp2);
    170170#endif
    171171#ifndef TEMPLATED_SIMD_LIB
     
    223223        BitBlock temp27 = simd_and(bit[4], temp26);
    224224#ifdef TEMPLATED_SIMD_LIB
    225         BitBlock temp28 = simd_andc(simd_const<1,1>(), temp4);
     225        BitBlock temp28 = simd_andc(simd<1>::constant<1>(), temp4);
    226226#endif
    227227#ifndef TEMPLATED_SIMD_LIB
     
    250250        BitBlock temp49 = simd_andc(temp47, temp48);
    251251#ifdef TEMPLATED_SIMD_LIB
    252         Control = simd_andc(simd_const<1,1>(), temp49);
     252        Control = simd_andc(simd<1>::constant<1>(), temp49);
    253253#endif
    254254#ifndef TEMPLATED_SIMD_LIB
     
    342342  BitBlock temp36 = simd_and(temp17, bit[4]);
    343343#ifdef TEMPLATED_SIMD_LIB
    344   BitBlock temp37 = simd_andc(simd_const<1,1>(), temp20);
     344  BitBlock temp37 = simd_andc(simd<1>::constant<1>(), temp20);
    345345#endif
    346346#ifndef TEMPLATED_SIMD_LIB
     
    580580            are expected, so this value is initialized to zeroes. */
    581581#ifdef TEMPLATED_SIMD_LIB
    582         BitBlock prefix_pending = simd_const<1,0>();
     582        BitBlock prefix_pending = simd<1>::constant<0>();
    583583        /*  If a suffix is pending, then it may involve one of
    584584            the special case prefixes E0, ED. F0, F4, or the
    585585            EF prefix or EF_BF combination for FFFF/FFFE detection.*/
    586         BitBlock E0ED_pending = simd_const<1,0>();
    587         BitBlock F0F4_pending = simd_const<1,0>();
    588         BitBlock bit5_pending = simd_const<1,0>();
    589         BitBlock EF_pending = simd_const<1,0>();
    590         BitBlock EF_BF_pending = simd_const<1,0>();
     586        BitBlock E0ED_pending = simd<1>::constant<0>();
     587        BitBlock F0F4_pending = simd<1>::constant<0>();
     588        BitBlock bit5_pending = simd<1>::constant<0>();
     589        BitBlock EF_pending = simd<1>::constant<0>();
     590        BitBlock EF_BF_pending = simd<1>::constant<0>();
    591591#endif
    592592#ifndef TEMPLATED_SIMD_LIB
     
    609609        for (int i = 0; i < buffer_blocks; i++) {
    610610#ifdef TEMPLATED_SIMD_LIB
    611                 validation_stream[i] = simd_const<1,0>();
     611                validation_stream[i] = simd<1>::constant<0>();
    612612#endif
    613613#ifndef TEMPLATED_SIMD_LIB
     
    641641                /* Default values of pending variables for next iteration. */
    642642#ifdef TEMPLATED_SIMD_LIB
    643                 E0ED_pending = simd_const<1,0>();
    644                 F0F4_pending = simd_const<1,0>();
    645                 bit5_pending = simd_const<1,0>();
    646                 EF_pending = simd_const<1,0>();
    647                 EF_BF_pending = simd_const<1,0>();
     643                E0ED_pending = simd<1>::constant<0>();
     644                F0F4_pending = simd<1>::constant<0>();
     645                bit5_pending = simd<1>::constant<0>();
     646                EF_pending = simd<1>::constant<0>();
     647                EF_BF_pending = simd<1>::constant<0>();
    648648#endif
    649649#ifndef TEMPLATED_SIMD_LIB
     
    745745        for (int i = 0; i < buffer_blocks; i++) {
    746746#ifdef TEMPLATED_SIMD_LIB
    747                 validation_stream[i] = simd_const<1,0>();
     747                validation_stream[i] = simd<1>::constant<0>();
    748748#endif
    749749#ifndef TEMPLATED_SIMD_LIB
     
    770770        for (int i = 0; i < buffer_blocks; i++) {
    771771#ifdef TEMPLATED_SIMD_LIB
    772                 validation_stream[i] = simd_const<1,0>();
     772                validation_stream[i] = simd<1>::constant<0>();
    773773#endif
    774774#ifndef TEMPLATED_SIMD_LIB
     
    801801        BitBlock temp11 = simd_andc(temp10, bit[0]);
    802802#ifdef TEMPLATED_SIMD_LIB
    803         Control = simd_andc(simd_const<1,1>(), temp11);
     803        Control = simd_andc(simd<1>::constant<1>(), temp11);
    804804#endif
    805805#ifndef TEMPLATED_SIMD_LIB
     
    851851        BitBlock temp13 = simd_andc(temp10, temp12);
    852852#ifdef TEMPLATED_SIMD_LIB
    853         Control = simd_andc(simd_const<1,1>(), temp13);
     853        Control = simd_andc(simd<1>::constant<1>(), temp13);
    854854#endif
    855855#ifndef TEMPLATED_SIMD_LIB
     
    912912        BitBlock temp9 = simd_andc(temp1, temp8);
    913913#ifdef TEMPLATED_SIMD_LIB
    914         Control = simd_andc(simd_const<1,1>(), temp9);
     914        Control = simd_andc(simd<1>::constant<1>(), temp9);
    915915#endif
    916916#ifndef TEMPLATED_SIMD_LIB
     
    10121012#ifdef TEMPLATED_SIMD_LIB
    10131013                BitBlock final_block_mask =
    1014                         sisd_sfl(simd_const<1,1>(), sisd_from_int(buffer_units % BLOCKSIZE));
     1014                        sisd_sfl(simd<1>::constant<1>(), sisd_from_int(buffer_units % BLOCKSIZE));
    10151015#endif
    10161016#ifndef TEMPLATED_SIMD_LIB
  • trunk/src/bitplex.c

    r179 r183  
    2424{\
    2525  BitBlock t0, t1;\
    26   t0 = simd_pack<16,h,h>(s0, s1);\
    27   t1 = simd_pack<16,l,l>(s0, s1);\
    28   p0 = simd_if(hi_mask, t0, simd_srli<16>(t1, shift));\
    29   p1 = simd_if(hi_mask, simd_slli<16>(t0, shift), t1);\
     26  t0 = simd<16>::pack<h,h>(s0, s1);\
     27  t1 = simd<16>::pack<l,l>(s0, s1);\
     28  p0 = simd_if(hi_mask, t0, simd<16>::srli<shift>(t1));\
     29  p1 = simd_if(hi_mask, simd<16>::slli<shift>(t0), t1);\
    3030}
    3131#endif
     
    4343static inline void s2p_bytepack(BytePack s[], BitBlock p[]) {
    4444#ifdef TEMPLATED_SIMD_LIB
    45     BitBlock mask_2 = simd_himask<2>();
    46     BitBlock mask_4 = simd_himask<4>();
    47     BitBlock mask_8 = simd_himask<8>();
     45    BitBlock mask_2 = simd<2>::himask();
     46    BitBlock mask_4 = simd<4>::himask();
     47    BitBlock mask_8 = simd<8>::himask();
    4848#endif
    4949#ifndef TEMPLATED_SIMD_LIB
  • trunk/src/byteplex.c

    r179 r183  
    127127#if (BYTE_ORDER == LITTLE_ENDIAN)
    128128#ifdef TEMPLATED_SIMD_LIB
    129                 p0[pk] = simd_pack<16,l,l>(s1, s0);
    130                 p1[pk] = simd_pack<16,h,h>(s1, s0);
     129                p0[pk] = simd<16>::pack<l,l>(s1, s0);
     130                p1[pk] = simd<16>::pack<h,h>(s1, s0);
    131131#endif
    132132#ifndef TEMPLATED_SIMD_LIB
     
    137137#if (BYTE_ORDER == BIG_ENDIAN)
    138138#ifdef TEMPLATED_SIMD_LIB
    139                 p0[pk] = simd_pack<16,l,l>(s0, s1);
    140                 p1[pk] = simd_pack<16,h,h>(s0, s1);
     139                p0[pk] = simd<16>::pack<l,l>(s0, s1);
     140                p1[pk] = simd<16>::pack<h,h>(s0, s1);
    141141#endif
    142142#ifndef TEMPLATED_SIMD_LIB
     
    166166#if (BYTE_ORDER == LITTLE_ENDIAN)
    167167#ifdef TEMPLATED_SIMD_LIB
    168                 BytePack p02_0 = simd_pack<16,l,l>(s1, s0);
    169                 BytePack p13_0 = simd_pack<16,h,h>(s1, s0);
    170                 BytePack p02_1 = simd_pack<16,l,l>(s3, s2);
    171                 BytePack p13_1 = simd_pack<16,h,h>(s3, s2);
    172                 p0[pk] = simd_pack<16,l,l>(p02_1, p02_0);
    173                 p1[pk] = simd_pack<16,l,l>(p13_1, p13_0);
    174                 p2[pk] = simd_pack<16,h,h>(p02_1, p02_0);
    175                 p3[pk] = simd_pack<16,h,h>(p13_1, p13_0);
     168                BytePack p02_0 = simd<16>::pack<l,l>(s1, s0);
     169                BytePack p13_0 = simd<16>::pack<h,h>(s1, s0);
     170                BytePack p02_1 = simd<16>::pack<l,l>(s3, s2);
     171                BytePack p13_1 = simd<16>::pack<h,h>(s3, s2);
     172                p0[pk] = simd<16>::pack<l,l>(p02_1, p02_0);
     173                p1[pk] = simd<16>::pack<l,l>(p13_1, p13_0);
     174                p2[pk] = simd<16>::pack<h,h>(p02_1, p02_0);
     175                p3[pk] = simd<16>::pack<h,h>(p13_1, p13_0);
    176176#endif
    177177#ifndef TEMPLATED_SIMD_LIB
     
    188188#if (BYTE_ORDER == BIG_ENDIAN)
    189189#ifdef TEMPLATED_SIMD_LIB
    190                 BytePack p02_0 = simd_pack<16,h,h>(s0, s1);
    191                 BytePack p13_0 = simd_pack<16,l,l>(s0, s1);
    192                 BytePack p02_1 = simd_pack<16,h,h>(s2, s3);
    193                 BytePack p13_1 = simd_pack<16,l,l>(s2, s3);
    194                 p0[pk] = simd_pack<16,h,h>(p02_0, p02_1);
    195                 p1[pk] = simd_pack<16,h,h>(p13_0, p13_1);
    196                 p2[pk] = simd_pack<16,l,l>(p02_0, p02_1);
    197                 p3[pk] = simd_pack<16,l,l>(p13_0, p13_1);
     190                BytePack p02_0 = simd<16>::pack<h,h>(s0, s1);
     191                BytePack p13_0 = simd<16>::pack<l,l>(s0, s1);
     192                BytePack p02_1 = simd<16>::pack<h,h>(s2, s3);
     193                BytePack p13_1 = simd<16>::pack<l,l>(s2, s3);
     194                p0[pk] = simd<16>::pack<h,h>(p02_0, p02_1);
     195                p1[pk] = simd<16>::pack<h,h>(p13_0, p13_1);
     196                p2[pk] = simd<16>::pack<l,l>(p02_0, p02_1);
     197                p3[pk] = simd<16>::pack<l,l>(p13_0, p13_1);
    198198#endif
    199199#ifndef TEMPLATED_SIMD_LIB
     
    238238        for (int pk = 0; pk < packs_in_buffer; pk++) {
    239239#ifdef TEMPLATED_SIMD_LIB
    240                 x8data[pk] = simd_or(x16lo[pk], simd_andc(simd_const<8>(0x80),
    241                                                simd_eq<8>(x16hi[pk], simd_const<8>(0))));
     240                x8data[pk] = simd_or(x16lo[pk], simd_andc(simd<8>::constant<(0x80)>(),
     241                                               simd<8>::eq(x16hi[pk], simd<8>::constant<0>())));
    242242#endif
    243243#ifndef TEMPLATED_SIMD_LIB
     
    252252                BytePack hi = simd_or(simd_or(x32hh[pk], x32hl[pk]), x32lh[pk]);
    253253#ifdef TEMPLATED_SIMD_LIB
    254                 x8data[pk] = simd_or(x32ll[pk], simd_andc(simd_const<8>(0x80),
    255                                                simd_eq<8>(hi, simd_const<8>(0))));
     254                x8data[pk] = simd_or(x32ll[pk], simd_andc(simd<8>::constant<(0x80)>(),
     255                                               simd<8>::eq(hi, simd<8>::constant<0>())));
    256256#endif
    257257#ifndef TEMPLATED_SIMD_LIB
     
    343343        BytePack lo_surrogate;
    344344#ifdef TEMPLATED_SIMD_LIB
    345         BytePack hi_surrogate_pending = simd_const<8>(0);
     345        BytePack hi_surrogate_pending = simd<8>::constant<0>();
    346346#endif
    347347#ifndef TEMPLATED_SIMD_LIB
     
    350350        BytePack surrogate_scope;
    351351        BytePack u16_surrogate_error;
    352 //      BytePack u16_surrogate_accum = simd_const<8>(0);
    353 //      BytePack u16_FFFE_FFFF_accum = simd_const<8>(0);
     352//      BytePack u16_surrogate_accum = simd<8>::constant<0>();
     353//      BytePack u16_FFFE_FFFF_accum = simd<8>::constant<0>();
    354354        BytePack u16_FFFE_FFFF;
    355355        for (int pk = 0; pk < packs_in_buffer; pk++) {
     
    359359                   only occur in well-formed pairs. */
    360360#ifdef TEMPLATED_SIMD_LIB
    361                 surrogate_select = simd_and(x16hi[pk], simd_const<8>(0xDC));
    362                 hi_surrogate = simd_eq<8>(surrogate_select, simd_const<8>(0xD8));
    363                 lo_surrogate = simd_eq<8>(surrogate_select, simd_const<8>(0xDC));
     361                surrogate_select = simd_and(x16hi[pk], simd<8>::constant<0xDC>());
     362                hi_surrogate = simd<8>::eq(surrogate_select, simd<8>::constant<0xD8>());
     363                lo_surrogate = simd<8>::eq(surrogate_select, simd<8>::constant<0xDC>());
    364364                surrogate_scope = simd_or(hi_surrogate_pending,
    365365                                          sisd_sfli(hi_surrogate, 8));
     
    368368                hi_surrogate_pending = sisd_sbli(hi_surrogate, 8 * (PACKSIZE-1));
    369369                /* The values FFFE and FFFF are excluded. */
    370                 u16_FFFE_FFFF = simd_eq<8>(simd_and(x16hi[pk],
    371                                                    simd_or(x16lo[pk], simd_const<8>(1))),
    372                                           simd_const<8>(0xFF));
     370                u16_FFFE_FFFF = simd<8>::eq(simd_and(x16hi[pk],
     371                                                   simd_or(x16lo[pk], simd<8>::constant<1>())),
     372                                          simd<8>::constant<0xFF>());
    373373#endif
    374374#ifndef TEMPLATED_SIMD_LIB
     
    401401        int packs = (buffer_units - 1)/PACKSIZE + 1;
    402402#ifdef TEMPLATED_SIMD_LIB
    403         BytePack u16_surrogate_accum = simd_const<8>(0);
    404         BytePack u16_FFFE_FFFF_accum = simd_const<8>(0);
     403        BytePack u16_surrogate_accum = simd<8>::constant<0>();
     404        BytePack u16_FFFE_FFFF_accum = simd<8>::constant<0>();
    405405#endif
    406406#ifndef TEMPLATED_SIMD_LIB
     
    418418#ifdef TEMPLATED_SIMD_LIB
    419419                u16_surrogate_accum =
    420                         simd_max_8(u16_surrogate_accum, simd_add<8>(x16hi[pk], simd_const<8>(0x20)));
     420                        simd_max_8(u16_surrogate_accum, simd<8>::add(x16hi[pk], simd<8>::constant<0x20>()));
    421421                /* The values FFFE and FFFF are excluded. */
    422                 u16_FFFE_FFFF = simd_eq<8>(simd_and(x16hi[pk],
    423                                                    simd_or(x16lo[pk], simd_const<8>(1))), simd_const<8>(0xFF));
     422                u16_FFFE_FFFF = simd<8>::eq(simd_and(x16hi[pk],
     423                                                   simd_or(x16lo[pk], simd<8>::constant<1>())), simd<8>::constant<0xFF>());
    424424                u16_FFFE_FFFF_accum = simd_or(u16_FFFE_FFFF_accum, u16_FFFE_FFFF);
    425425#endif
     
    434434        }
    435435#ifdef TEMPLATED_SIMD_LIB
    436         u16_surrogate_accum = simd_eq<8>(simd_or(u16_surrogate_accum, simd_const<8>(0x07)),
    437                                         simd_const<8>(0xFF));
     436        u16_surrogate_accum = simd<8>::eq(simd_or(u16_surrogate_accum, simd<8>::constant<0x07>()),
     437                                        simd<8>::constant<0xFF>());
    438438#endif
    439439#ifndef TEMPLATED_SIMD_LIB
     
    456456        int packs = (buffer_units - 1)/PACKSIZE + 1;
    457457#ifdef TEMPLATED_SIMD_LIB
    458         BytePack u32hh_accum = simd_const<8>(0);
    459         BytePack u32hl_accum = simd_const<8>(0);
    460         BytePack u32_surrogate_accum = simd_const<8>(0);
    461         BytePack u32_FFFE_FFFF_accum = simd_const<8>(0);
     458        BytePack u32hh_accum = simd<8>::constant<0>();
     459        BytePack u32hl_accum = simd<8>::constant<0>();
     460        BytePack u32_surrogate_accum = simd<8>::constant<0>();
     461        BytePack u32_FFFE_FFFF_accum = simd<8>::constant<0>();
    462462#endif
    463463#ifndef TEMPLATED_SIMD_LIB
     
    484484                   is then accumulated.  */
    485485#ifdef TEMPLATED_SIMD_LIB
    486                 u32_BMP_select = simd_eq<8>(x32hl[pk], simd_const<8>(0));
     486                u32_BMP_select = simd<8>::eq(x32hl[pk], simd<8>::constant<0>());
    487487                u32_surrogate_accum = simd_max_8(u32_surrogate_accum,
    488                                                                  simd_and(u32_BMP_select, simd_add<8>(x32lh[pk], simd_const<8>(0x20))));
     488                                                                 simd_and(u32_BMP_select, simd<8>::add(x32lh[pk], simd<8>::constant<0x20>())));
    489489                /* The low two octets cannot have the value FFFE or FFFF if
    490490                   we're in the BMP (second octet is 0). */
    491                 u32l_FFFE_FFFF = simd_eq<8>(simd_and(x32lh[pk],
    492                                                     simd_or(x32ll[pk], simd_const<8>(1))),simd_const<8>(0xFF));
     491                u32l_FFFE_FFFF = simd<8>::eq(simd_and(x32lh[pk],
     492                                                    simd_or(x32ll[pk], simd<8>::constant<1>())),simd<8>::constant<0xFF>());
    493493                u32_FFFE_FFFF_accum = simd_or(u32_FFFE_FFFF_accum,
    494494                                              simd_and(u32_BMP_select, u32l_FFFE_FFFF));
     
    497497                u32_BMP_select = simd_eq_8(x32hl[pk], simd_const_8(0));
    498498                u32_surrogate_accum = simd_max_8(u32_surrogate_accum,
    499                                                                  simd_and(u32_BMP_select, simd_add<8>(x32lh[pk], simd_const_8(0x20))));
     499                                                                 simd_and(u32_BMP_select, simd<8>::add(x32lh[pk], simd_const_8(0x20))));
    500500                /* The low two octets cannot have the value FFFE or FFFF if
    501501                   we're in the BMP (second octet is 0). */
     
    507507        }
    508508#ifdef TEMPLATED_SIMD_LIB
    509         u32hl_accum = simd_gt_8(u32hl_accum, simd_const<8>(0x10));
    510         u32_surrogate_accum = simd_eq<8>(simd_or(u32_surrogate_accum, simd_const<8>(0x07)),
    511                                         simd_const<8>(0xFF));
     509        u32hl_accum = simd_gt_8(u32hl_accum, simd<8>::constant<0x10>());
     510        u32_surrogate_accum = simd<8>::eq(simd_or(u32_surrogate_accum, simd<8>::constant<0x07>()),
     511                                        simd<8>::constant<0xFF>());
    512512#endif
    513513#ifndef TEMPLATED_SIMD_LIB
  • trunk/src/engine.c

    r181 r183  
    207207  /* Install sentinels for every lexical item stream*/
    208208#ifdef TEMPLATED_SIMD_LIB
    209         BitBlock sentinel_value = simd_const<1,1>();
     209        BitBlock sentinel_value = simd<1>::constant<1>();
    210210#endif
    211211#ifndef TEMPLATED_SIMD_LIB
     
    914914       
    915915#ifdef TEMPLATED_SIMD_LIB       
    916         BytePack byte_compare =  simd_eq<8>(sisd_load_unaligned((BytePack *) end_elem_name),
     916        BytePack byte_compare =  simd<8>::eq(sisd_load_unaligned((BytePack *) end_elem_name),
    917917                                                           sisd_load_unaligned((BytePack *) start_elem_name));
    918918#endif
     
    933933            int pos = (lgth - 1) % PACKSIZE + 1;
    934934#ifdef TEMPLATED_SIMD_LIB
    935             byte_compare =  simd_or(byte_compare, simd_eq<8>(sisd_load_unaligned((BytePack *) &end_elem_name[pos]),
     935            byte_compare =  simd_or(byte_compare, simd<8>::eq(sisd_load_unaligned((BytePack *) &end_elem_name[pos]),
    936936                                                                                        sisd_load_unaligned((BytePack *) &start_elem_name[pos])));
    937937#endif
     
    946946                }
    947947#ifdef TEMPLATED_SIMD_LIB
    948                 byte_compare =  simd_eq<8>(sisd_load_unaligned((BytePack *) &end_elem_name[pos]),
     948                byte_compare =  simd<8>::eq(sisd_load_unaligned((BytePack *) &end_elem_name[pos]),
    949949                                                  sisd_load_unaligned((BytePack *) &start_elem_name[pos]));
    950950#endif
Note: See TracChangeset for help on using the changeset viewer.