Changeset 3032


Ignore:
Timestamp:
Apr 16, 2013, 6:19:16 PM (6 years ago)
Author:
linmengl
Message:

add all the signtures in IdisaBuiltin?

Location:
proto/pabloj/trunk
Files:
5 added
12 edited

Legend:

Unmodified
Added
Removed
  • proto/pabloj/trunk/input/test/pabloB/test.pablob

    r3029 r3032  
    1 // KERNEL kernelName LCURLY funcDef (optFuncDef)? RCURLY TERMINATOR?;
    2                
    3 kernel IdisaOps
     1kernel BasisBits
    42{
    53        init
    64        {
    7                         
     5         
    86        }
    97
    10         function void do_block()
     8        function void do_block(struct Basis_bits basis_bits, struct Lex lex, struct U8 u8)
    119        {
    12        
    13                 var BitBlock a;
    14                 var BitBlock b;
    15                 var BitBlock c;
    16                 var BitBlock k;
    17                 var BitBlock r;
    18                
    19                 /*
    20                 r = simd.add(abs);
    21                 r = simd.neg(a);
    22                 r = simd.add_hl(a);
    23                 r = simd.xor_hl(a);
    24                 r = simd.slli(k);
    25                 r = simd.srli(k);
    26                 r = simd.srai(k);
    27                 r = simd.popcount(a);
    28                 r = simd.ctz(a);       
    29                 */
    30                
    31                 r = simd.add<1>(a,b);
    32                 /*r = simd.sub<2>(a,b);
    33                 r = simd.mul<4>(a,b);
    34                 r = simd.eq<8>(a,b);
    35                 r = simd.gt<16>(a,b);
    36                 r = simd.ugt<32>(a,b);
    37                 r = simd.lt<64>(a,b);
    38                 r = simd.ult<128>(a,b);
    39                 r = simd.max<256>(a,b);
    40                 r = simd.umax<1>(a,b);
    41                 r = simd.min<2>(a,b);
    42                 r = simd.umin<4>(a,b);
    43                 r = simd.sll<8>(a,b);
    44                 r = simd.srl<16>(a,b);
    45                 r = simd.sra<32>(a,b);
    46                 */
    47                 //r = simd.if<128>(a,b,c);
    48                
     10                var BitBlock temp1 = simd.or<1>(basis_bits.bit_0, basis_bits.bit_1);
     11                var BitBlock temp2 = simd.andc<1>(basis_bits.bit_2, basis_bits.bit_3);
     12                var BitBlock temp3 = simd.andc<1>(temp2, temp1);
     13                var BitBlock temp4 = simd.andc<1>(basis_bits.bit_5, basis_bits.bit_4);
     14                var BitBlock temp5 = simd.andc<1>(basis_bits.bit_6, basis_bits.bit_7);
     15                var BitBlock temp6 = simd.and<1>(temp4, temp5);
     16                lex.RefStart = simd.and<1>(temp3, temp6);
     17                var BitBlock temp7 = simd.and<1>(basis_bits.bit_2, basis_bits.bit_3);
     18                var BitBlock temp8 = simd.andc<1>(temp7, temp1);
     19                var BitBlock temp9 = simd.andc<1>(basis_bits.bit_4, basis_bits.bit_5);
     20                var BitBlock temp10 = simd.and<1>(basis_bits.bit_6, basis_bits.bit_7);
     21                var BitBlock temp11 = simd.and<1>(temp9, temp10);
     22                lex.Semicolon = simd.and<1>(temp8, temp11);
     23                var BitBlock temp12 = simd.and<1>(basis_bits.bit_4, basis_bits.bit_5);
     24                var BitBlock temp13 = simd.or<1>(basis_bits.bit_6, basis_bits.bit_7);
     25                var BitBlock temp14 = simd.andc<1>(temp12, temp13);
     26                lex.LAngle = simd.and<1>(temp8, temp14);
     27                var BitBlock temp15 = simd.and<1>(temp12, temp5);
     28                lex.RAngle = simd.and<1>(temp8, temp15);
     29                var BitBlock temp16 = simd.andc<1>(basis_bits.bit_1, basis_bits.bit_0);
     30                var BitBlock temp17 = simd.andc<1>(basis_bits.bit_3, basis_bits.bit_2);
     31                var BitBlock temp18 = simd.and<1>(temp16, temp17);
     32                lex.LBracket = simd.and<1>(temp18, temp11);
     33                var BitBlock temp19 = simd.andc<1>(basis_bits.bit_7, basis_bits.bit_6);
     34                var BitBlock temp20 = simd.and<1>(temp12, temp19);
     35                lex.RBracket = simd.and<1>(temp18, temp20);
     36                var BitBlock temp21 = simd.or<1>(basis_bits.bit_4, basis_bits.bit_5);
     37                var BitBlock temp22 = simd.andc<1>(temp19, temp21);
     38                lex.Exclam = simd.and<1>(temp3, temp22);
     39                var BitBlock temp23 = simd.and<1>(temp12, temp10);
     40                lex.QMark = simd.and<1>(temp8, temp23);
     41                lex.Hyphen = simd.and<1>(temp3, temp20);
     42                lex.Equals = simd.and<1>(temp8, temp20);
     43                var BitBlock temp24 = simd.and<1>(temp4, temp10);
     44                lex.SQuote = simd.and<1>(temp3, temp24);
     45                var BitBlock temp25 = simd.andc<1>(temp5, temp21);
     46                lex.DQuote = simd.and<1>(temp3, temp25);
     47                lex.Slash = simd.and<1>(temp3, temp23);
     48                var BitBlock temp26 = simd.andc<1>(temp10, temp21);
     49                lex.Hash = simd.and<1>(temp3, temp26);
     50                var BitBlock temp27 = simd.and<1>(temp16, temp7);
     51                var BitBlock temp28 = simd.andc<1>(temp9, temp13);
     52                lex.x = simd.and<1>(temp27, temp28);
     53                var BitBlock temp29 = simd.and<1>(temp9, temp5);
     54                lex.Colon = simd.and<1>(temp8, temp29);
     55                var BitBlock temp30 = simd.and<1>(temp18, temp23);
     56                var BitBlock temp31 = simd.or<1>(temp30, lex.Colon);
     57                var BitBlock temp32 = simd.andc<1>(temp16, basis_bits.bit_2);
     58                var BitBlock temp33 = simd.or<1>(basis_bits.bit_5, temp10);
     59                var BitBlock temp34 = simd.and<1>(basis_bits.bit_4, temp33);
     60                var BitBlock temp35 = simd.not<1>(temp34);
     61                var BitBlock temp36 = simd.or<1>(temp21, temp13);
     62                var BitBlock temp37 = simd.or<1>(simd.and<1>(basis_bits.bit_3, temp35), simd.andc<1>(temp36, basis_bits.bit_3));
     63                var BitBlock temp38 = simd.and<1>(temp32, temp37);
     64                var BitBlock temp39 = simd.or<1>(temp31, temp38);
     65                var BitBlock temp40 = simd.and<1>(temp16, basis_bits.bit_2);
     66                var BitBlock temp41 = simd.and<1>(temp40, temp37);
     67                lex.ASCII_name_start = simd.or<1>(temp39, temp41);
     68                var BitBlock temp42 = simd.or<1>(temp30, lex.Hyphen);
     69                var BitBlock temp43 = simd.and<1>(temp3, temp15);
     70                var BitBlock temp44 = simd.or<1>(temp42, temp43);
     71                var BitBlock temp45 = simd.andc<1>(temp8, temp34);
     72                var BitBlock temp46 = simd.or<1>(temp44, temp45);
     73                var BitBlock temp47 = simd.or<1>(temp46, temp38);
     74                lex.ASCII_name_char = simd.or<1>(temp47, temp41);
     75                lex.NameScan = simd.or<1>(lex.ASCII_name_char, basis_bits.bit_0);
     76                var BitBlock temp48 = simd.or<1>(temp1, basis_bits.bit_2);
     77                var BitBlock x00_x1F = simd.not<1>(temp48);
     78                var BitBlock temp49 = simd.or<1>(basis_bits.bit_2, basis_bits.bit_3);
     79                var BitBlock temp50 = simd.or<1>(temp1, temp49);
     80                lex.CR = simd.andc<1>(temp20, temp50);
     81                lex.LF = simd.andc<1>(temp29, temp50);
     82                var BitBlock temp51 = simd.and<1>(temp9, temp19);
     83                lex.HT = simd.andc<1>(temp51, temp50);
     84                lex.SP = simd.andc<1>(temp3, temp36);
     85                var BitBlock temp52 = simd.or<1>(temp20, temp29);
     86                var BitBlock temp53 = simd.or<1>(temp52, temp51);
     87                var BitBlock temp54 = simd.andc<1>(temp53, temp50);
     88                lex.WS = simd.or<1>(temp54, lex.SP);
     89                var BitBlock temp55 = simd.or<1>(basis_bits.bit_5, basis_bits.bit_6);
     90                var BitBlock temp56 = simd.and<1>(basis_bits.bit_4, temp55);
     91                lex.Digit = simd.andc<1>(temp8, temp56);
     92                var BitBlock temp57 = simd.andc<1>(temp16, temp49);
     93                var BitBlock temp58 = simd.andc<1>(temp57, basis_bits.bit_4);
     94                var BitBlock temp59 = simd.not<1>(temp10);
     95                var BitBlock temp60 = simd.or<1>(simd.and<1>(basis_bits.bit_5, temp59), simd.andc<1>(temp13, basis_bits.bit_5));
     96                var BitBlock temp61 = simd.and<1>(temp58, temp60);
     97                var BitBlock temp62 = simd.or<1>(lex.Digit, temp61);
     98                var BitBlock temp63 = simd.and<1>(temp16, temp2);
     99                var BitBlock temp64 = simd.andc<1>(temp63, basis_bits.bit_4);
     100                var BitBlock temp65 = simd.and<1>(temp64, temp60);
     101                lex.Hex = simd.or<1>(temp62, temp65);
     102                var BitBlock lex_error = simd.andc<1>(x00_x1F, lex.WS);
     103
     104                if (bitblock.any<1>((lex_error)))
     105                {
     106                        assert_0_error("Error: illegal character", lex_error);
     107                }
     108                u8.unibyte = simd.not<1>(basis_bits.bit_0);
     109                u8.suffix = simd.constant<1>(0);
     110                var BitBlock u8_error = simd.constant<1>(0);
     111                var BitBlock u8_FFFE_FFFF = simd.constant<1>(0);
     112                var BitBlock u8anyscope = simd.constant<1>(0);
     113                if (bitblock.any<1>((simd.or<1>(basis_bits.bit_0, carry_set_0.CarryRange(0, 10)))))
     114                {
     115                        u8.prefix = simd.and<1>(basis_bits.bit_0, basis_bits.bit_1);
     116                        u8.prefix2 = simd.andc<1>(u8.prefix, basis_bits.bit_2);
     117                        u8.prefix3 = simd.and<1>(u8.prefix, temp2);
     118                        u8.prefix4 = simd.and<1>(u8.prefix, temp7);
     119                        u8.suffix = simd.andc<1>(basis_bits.bit_0, basis_bits.bit_1);
     120                        var BitBlock temp66 = simd.andc<1>(u8.prefix, temp49);
     121                        var BitBlock temp67 = simd.or<1>(temp21, basis_bits.bit_6);
     122                        var BitBlock temp68 = simd.andc<1>(temp66, temp67);
     123                        var BitBlock temp69 = simd.and<1>(basis_bits.bit_5, temp13);
     124                        var BitBlock temp70 = simd.or<1>(basis_bits.bit_4, temp69);
     125                        var BitBlock temp71 = simd.and<1>(u8.prefix4, temp70);
     126                        u8.badprefix = simd.or<1>(temp68, temp71);
     127                        u8_error = u8.badprefix;
     128                        u8.scope22 = carry_set_0.BitBlock_advance_ci_co(u8.prefix2, carry_set_0.CarryAt(0), 0);
     129                        u8anyscope = u8.scope22;
     130                        if (bitblock.any<1>((simd.or<1>(simd.or<1>(u8.prefix3, u8.prefix4), carry_set_0.CarryRange(1, 9)))))
     131                        {
     132                                var BitBlock xE0 = simd.andc<1>(u8.prefix3, temp36);
     133                                var BitBlock xED = simd.and<1>(u8.prefix3, temp20);
     134                                var BitBlock xF0 = simd.andc<1>(u8.prefix4, temp36);
     135                                var BitBlock temp72 = simd.andc<1>(temp4, temp13);
     136                                var BitBlock xF4 = simd.and<1>(u8.prefix4, temp72);
     137                                u8.xA0_xBF = simd.and<1>(u8.suffix, basis_bits.bit_2);
     138                                u8.x80_x9F = simd.andc<1>(u8.suffix, basis_bits.bit_2);
     139                                u8.x90_xBF = simd.and<1>(u8.suffix, temp49);
     140                                u8.x80_x8F = simd.andc<1>(u8.suffix, temp49);
     141                                var BitBlock xEF = simd.and<1>(u8.prefix3, temp23);
     142                                var BitBlock temp73 = simd.and<1>(u8.suffix, temp7);
     143                                u8.xBF = simd.and<1>(temp73, temp23);
     144                                u8.xBE = simd.and<1>(temp73, temp15);
     145                                u8.scope32 = carry_set_0.BitBlock_advance_ci_co(u8.prefix3, carry_set_0.CarryAt(1), 1);
     146                                u8.scope33 = carry_set_0.BitBlock_advance_ci_co(u8.scope32, carry_set_0.CarryAt(2), 2);
     147                                u8.scope42 = carry_set_0.BitBlock_advance_ci_co(u8.prefix4, carry_set_0.CarryAt(3), 3);
     148                                u8.scope43 = carry_set_0.BitBlock_advance_ci_co(u8.scope42, carry_set_0.CarryAt(4), 4);
     149                                u8.scope44 = carry_set_0.BitBlock_advance_ci_co(u8.scope43, carry_set_0.CarryAt(5), 5);
     150                                var BitBlock E0_F0_scope = carry_set_0.BitBlock_advance_ci_co(simd.or<1>(xE0, xF0), carry_set_0.CarryAt(6), 6);
     151                                var BitBlock ED_F4_scope = carry_set_0.BitBlock_advance_ci_co(simd.or<1>(xED, xF4), carry_set_0.CarryAt(7), 7);
     152                                u8.xE0_scope = simd.and<1>(u8.scope32, E0_F0_scope);
     153                                u8.xED_scope = simd.and<1>(u8.scope32, ED_F4_scope);
     154                                u8.xF0_scope = simd.and<1>(u8.scope42, E0_F0_scope);
     155                                u8.xF4_scope = simd.and<1>(u8.scope42, ED_F4_scope);
     156                                u8.xEF_scope = carry_set_0.BitBlock_advance_ci_co(xEF, carry_set_0.CarryAt(8), 8);
     157                                var BitBlock u8lastscope = simd.or<1>(simd.or<1>(u8.scope22, u8.scope33), u8.scope44);
     158                                u8anyscope = simd.or<1>(simd.or<1>(simd.or<1>(u8lastscope, u8.scope32), u8.scope42), u8.scope43);
     159                                var BitBlock u8error1 = simd.and<1>(u8.xE0_scope, u8.x80_x9F);
     160                                var BitBlock u8error2 = simd.and<1>(u8.xED_scope, u8.xA0_xBF);
     161                                var BitBlock u8error3 = simd.and<1>(u8.xF0_scope, u8.x80_x8F);
     162                                var BitBlock u8error4 = simd.and<1>(u8.xF4_scope, u8.x90_xBF);
     163                                u8_error = simd.or<1>(u8_error, simd.or<1>(simd.or<1>(simd.or<1>(u8error1, u8error2), u8error3), u8error4));
     164                                var BitBlock EF_BF_pending = carry_set_0.BitBlock_advance_ci_co(simd.and<1>(u8.xEF_scope, u8.xBF), carry_set_0.CarryAt(9), 9);
     165                                u8_FFFE_FFFF = simd.and<1>(EF_BF_pending, simd.or<1>(u8.xBE, u8.xBF));
     166                        }
     167                        else
     168                        {
     169                                carry_set_0.CarryDequeueEnqueue(1, 9);
     170                        }
     171                        var BitBlock u8mismatch = simd.xor<1>(u8anyscope, u8.suffix);
     172                        if (bitblock.any<1>((simd.or<1>(simd.or<1>(u8_error, u8mismatch), u8_FFFE_FFFF))))
     173                        {
     174                                assert_0_error("UTF-8 error found", simd.or<1>(simd.or<1>(u8_error, u8mismatch), u8_FFFE_FFFF));
     175                        }
     176                }
     177                else
     178                {
     179                        carry_set_0.CarryDequeueEnqueue(0, 10);
     180                }
     181                carry_set_0.CarryAdjust(10);
     182
    49183        }
    50184
    51         function void do_final_block()
    52         {
    53                
    54                
     185        function void do_final_block(struct Basis_bits basis_bits, struct Lex lex, struct U8 u8, BitBlock EOF_mask) {
     186                var BitBlock temp1 = simd.or<1>(basis_bits.bit_0, basis_bits.bit_1);
     187                var BitBlock temp2 = simd.andc<1>(basis_bits.bit_2, basis_bits.bit_3);
     188                var BitBlock temp3 = simd.andc<1>(temp2, temp1);
     189                var BitBlock temp4 = simd.andc<1>(basis_bits.bit_5, basis_bits.bit_4);
     190                var BitBlock temp5 = simd.andc<1>(basis_bits.bit_6, basis_bits.bit_7);
     191                var BitBlock temp6 = simd.and<1>(temp4, temp5);
     192                lex.RefStart = simd.and<1>(temp3, temp6);
     193                var BitBlock temp7 = simd.and<1>(basis_bits.bit_2, basis_bits.bit_3);
     194                var BitBlock temp8 = simd.andc<1>(temp7, temp1);
     195                var BitBlock temp9 = simd.andc<1>(basis_bits.bit_4, basis_bits.bit_5);
     196                var BitBlock temp10 = simd.and<1>(basis_bits.bit_6, basis_bits.bit_7);
     197                var BitBlock temp11 = simd.and<1>(temp9, temp10);
     198                lex.Semicolon = simd.and<1>(temp8, temp11);
     199                var BitBlock temp12 = simd.and<1>(basis_bits.bit_4, basis_bits.bit_5);
     200                var BitBlock temp13 = simd.or<1>(basis_bits.bit_6, basis_bits.bit_7);
     201                var BitBlock temp14 = simd.andc<1>(temp12, temp13);
     202                lex.LAngle = simd.and<1>(temp8, temp14);
     203                var BitBlock temp15 = simd.and<1>(temp12, temp5);
     204                lex.RAngle = simd.and<1>(temp8, temp15);
     205                var BitBlock temp16 = simd.andc<1>(basis_bits.bit_1, basis_bits.bit_0);
     206                var BitBlock temp17 = simd.andc<1>(basis_bits.bit_3, basis_bits.bit_2);
     207                var BitBlock temp18 = simd.and<1>(temp16, temp17);
     208                lex.LBracket = simd.and<1>(temp18, temp11);
     209                var BitBlock temp19 = simd.andc<1>(basis_bits.bit_7, basis_bits.bit_6);
     210                var BitBlock temp20 = simd.and<1>(temp12, temp19);
     211                lex.RBracket = simd.and<1>(temp18, temp20);
     212                var BitBlock temp21 = simd.or<1>(basis_bits.bit_4, basis_bits.bit_5);
     213                var BitBlock temp22 = simd.andc<1>(temp19, temp21);
     214                lex.Exclam = simd.and<1>(temp3, temp22);
     215                var BitBlock temp23 = simd.and<1>(temp12, temp10);
     216                lex.QMark = simd.and<1>(temp8, temp23);
     217                lex.Hyphen = simd.and<1>(temp3, temp20);
     218                lex.Equals = simd.and<1>(temp8, temp20);
     219                var BitBlock temp24 = simd.and<1>(temp4, temp10);
     220                lex.SQuote = simd.and<1>(temp3, temp24);
     221                var BitBlock temp25 = simd.andc<1>(temp5, temp21);
     222                lex.DQuote = simd.and<1>(temp3, temp25);
     223                lex.Slash = simd.and<1>(temp3, temp23);
     224                var BitBlock temp26 = simd.andc<1>(temp10, temp21);
     225                lex.Hash = simd.and<1>(temp3, temp26);
     226                var BitBlock temp27 = simd.and<1>(temp16, temp7);
     227                var BitBlock temp28 = simd.andc<1>(temp9, temp13);
     228                lex.x = simd.and<1>(temp27, temp28);
     229                var BitBlock temp29 = simd.and<1>(temp9, temp5);
     230                lex.Colon = simd.and<1>(temp8, temp29);
     231                var BitBlock temp30 = simd.and<1>(temp18, temp23);
     232                var BitBlock temp31 = simd.or<1>(temp30, lex.Colon);
     233                var BitBlock temp32 = simd.andc<1>(temp16, basis_bits.bit_2);
     234                var BitBlock temp33 = simd.or<1>(basis_bits.bit_5, temp10);
     235                var BitBlock temp34 = simd.and<1>(basis_bits.bit_4, temp33);
     236                var BitBlock temp35 = simd.not<1>(temp34);
     237                var BitBlock temp36 = simd.or<1>(temp21, temp13);
     238                var BitBlock temp37 = simd.or<1>(simd.and<1>(basis_bits.bit_3, temp35), simd.andc<1>(temp36, basis_bits.bit_3));
     239                var BitBlock temp38 = simd.and<1>(temp32, temp37);
     240                var BitBlock temp39 = simd.or<1>(temp31, temp38);
     241                var BitBlock temp40 = simd.and<1>(temp16, basis_bits.bit_2);
     242                var BitBlock temp41 = simd.and<1>(temp40, temp37);
     243                lex.ASCII_name_start = simd.or<1>(temp39, temp41);
     244                var BitBlock temp42 = simd.or<1>(temp30, lex.Hyphen);
     245                var BitBlock temp43 = simd.and<1>(temp3, temp15);
     246                var BitBlock temp44 = simd.or<1>(temp42, temp43);
     247                var BitBlock temp45 = simd.andc<1>(temp8, temp34);
     248                var BitBlock temp46 = simd.or<1>(temp44, temp45);
     249                var BitBlock temp47 = simd.or<1>(temp46, temp38);
     250                lex.ASCII_name_char = simd.or<1>(temp47, temp41);
     251                lex.NameScan = simd.or<1>(lex.ASCII_name_char, basis_bits.bit_0);
     252                var BitBlock temp48 = simd.or<1>(temp1, basis_bits.bit_2);
     253                var BitBlock x00_x1F = simd.not<1>(temp48);
     254                var BitBlock temp49 = simd.or<1>(basis_bits.bit_2, basis_bits.bit_3);
     255                var BitBlock temp50 = simd.or<1>(temp1, temp49);
     256                lex.CR = simd.andc<1>(temp20, temp50);
     257                lex.LF = simd.andc<1>(temp29, temp50);
     258                var BitBlock temp51 = simd.and<1>(temp9, temp19);
     259                lex.HT = simd.andc<1>(temp51, temp50);
     260                lex.SP = simd.andc<1>(temp3, temp36);
     261                var BitBlock temp52 = simd.or<1>(temp20, temp29);
     262                var BitBlock temp53 = simd.or<1>(temp52, temp51);
     263                var BitBlock temp54 = simd.andc<1>(temp53, temp50);
     264                lex.WS = simd.or<1>(temp54, lex.SP);
     265                var BitBlock temp55 = simd.or<1>(basis_bits.bit_5, basis_bits.bit_6);
     266                var BitBlock temp56 = simd.and<1>(basis_bits.bit_4, temp55);
     267                lex.Digit = simd.andc<1>(temp8, temp56);
     268                var BitBlock temp57 = simd.andc<1>(temp16, temp49);
     269                var BitBlock temp58 = simd.andc<1>(temp57, basis_bits.bit_4);
     270                var BitBlock temp59 = simd.not<1>(temp10);
     271                var BitBlock temp60 = simd.or<1>(simd.and<1>(basis_bits.bit_5, temp59), simd.andc<1>(temp13, basis_bits.bit_5));
     272                var BitBlock temp61 = simd.and<1>(temp58, temp60);
     273                var BitBlock temp62 = simd.or<1>(lex.Digit, temp61);
     274                var BitBlock temp63 = simd.and<1>(temp16, temp2);
     275                var BitBlock temp64 = simd.andc<1>(temp63, basis_bits.bit_4);
     276                var BitBlock temp65 = simd.and<1>(temp64, temp60);
     277                lex.Hex = simd.or<1>(temp62, temp65);
     278                var BitBlock lex_error = simd.andc<1>(x00_x1F, lex.WS);
     279                if (bitblock.any<1>((simd.and<1>(lex_error, EOF_mask))))
     280                {
     281                        assert_0_error("Error: illegal character", simd.and<1>(lex_error, EOF_mask));
     282                }
     283                u8.unibyte = simd.not<1>(basis_bits.bit_0);
     284                u8.suffix = simd.constant<1>(0);
     285                var BitBlock u8_error = simd.constant<1>(0);
     286                var BitBlock u8_FFFE_FFFF = simd.constant<1>(0);
     287                var BitBlock u8anyscope = simd.constant<1>(0);
     288                if (bitblock.any<1>((simd.or<1>(basis_bits.bit_0, carry_set_0.CarryRange(0, 10)))))
     289                {
     290                        u8.prefix = simd.and<1>(basis_bits.bit_0, basis_bits.bit_1);
     291                        u8.prefix2 = simd.andc<1>(u8.prefix, basis_bits.bit_2);
     292                        u8.prefix3 = simd.and<1>(u8.prefix, temp2);
     293                        u8.prefix4 = simd.and<1>(u8.prefix, temp7);
     294                        u8.suffix = simd.andc<1>(basis_bits.bit_0, basis_bits.bit_1);
     295                        var BitBlock temp66 = simd.andc<1>(u8.prefix, temp49);
     296                        var BitBlock temp67 = simd.or<1>(temp21, basis_bits.bit_6);
     297                        var BitBlock temp68 = simd.andc<1>(temp66, temp67);
     298                        var BitBlock temp69 = simd.and<1>(basis_bits.bit_5, temp13);
     299                        var BitBlock temp70 = simd.or<1>(basis_bits.bit_4, temp69);
     300                        var BitBlock temp71 = simd.and<1>(u8.prefix4, temp70);
     301                        u8.badprefix = simd.or<1>(temp68, temp71);
     302                        u8_error = u8.badprefix;
     303                        u8.scope22 = carry_set_0.BitBlock_advance_ci_co(u8.prefix2, carry_set_0.CarryAt(0), 0);
     304                        u8anyscope = u8.scope22;
     305                        if (bitblock.any<1>((simd.or<1>(simd.or<1>(u8.prefix3, u8.prefix4), carry_set_0.CarryRange(1, 9)))))
     306                        {
     307                                var BitBlock xE0 = simd.andc<1>(u8.prefix3, temp36);
     308                                var BitBlock xED = simd.and<1>(u8.prefix3, temp20);
     309                                var BitBlock xF0 = simd.andc<1>(u8.prefix4, temp36);
     310                                var BitBlock temp72 = simd.andc<1>(temp4, temp13);
     311                                var BitBlock xF4 = simd.and<1>(u8.prefix4, temp72);
     312                                u8.xA0_xBF = simd.and<1>(u8.suffix, basis_bits.bit_2);
     313                                u8.x80_x9F = simd.andc<1>(u8.suffix, basis_bits.bit_2);
     314                                u8.x90_xBF = simd.and<1>(u8.suffix, temp49);
     315                                u8.x80_x8F = simd.andc<1>(u8.suffix, temp49);
     316                                var BitBlock xEF = simd.and<1>(u8.prefix3, temp23);
     317                                var BitBlock temp73 = simd.and<1>(u8.suffix, temp7);
     318                                u8.xBF = simd.and<1>(temp73, temp23);
     319                                u8.xBE = simd.and<1>(temp73, temp15);
     320                                u8.scope32 = carry_set_0.BitBlock_advance_ci_co(u8.prefix3, carry_set_0.CarryAt(1), 1);
     321                                u8.scope33 = carry_set_0.BitBlock_advance_ci_co(u8.scope32, carry_set_0.CarryAt(2), 2);
     322                                u8.scope42 = carry_set_0.BitBlock_advance_ci_co(u8.prefix4, carry_set_0.CarryAt(3), 3);
     323                                u8.scope43 = carry_set_0.BitBlock_advance_ci_co(u8.scope42, carry_set_0.CarryAt(4), 4);
     324                                u8.scope44 = carry_set_0.BitBlock_advance_ci_co(u8.scope43, carry_set_0.CarryAt(5), 5);
     325                                var BitBlock E0_F0_scope = carry_set_0.BitBlock_advance_ci_co(simd.or<1>(xE0, xF0), carry_set_0.CarryAt(6), 6);
     326                                var BitBlock ED_F4_scope = carry_set_0.BitBlock_advance_ci_co(simd.or<1>(xED, xF4), carry_set_0.CarryAt(7), 7);
     327                                u8.xE0_scope = simd.and<1>(u8.scope32, E0_F0_scope);
     328                                u8.xED_scope = simd.and<1>(u8.scope32, ED_F4_scope);
     329                                u8.xF0_scope = simd.and<1>(u8.scope42, E0_F0_scope);
     330                                u8.xF4_scope = simd.and<1>(u8.scope42, ED_F4_scope);
     331                                u8.xEF_scope = carry_set_0.BitBlock_advance_ci_co(xEF, carry_set_0.CarryAt(8), 8);
     332                                var BitBlock u8lastscope = simd.or<1>(simd.or<1>(u8.scope22, u8.scope33), u8.scope44);
     333                                u8anyscope = simd.or<1>(simd.or<1>(simd.or<1>(u8lastscope, u8.scope32), u8.scope42), u8.scope43);
     334                                var BitBlock u8error1 = simd.and<1>(u8.xE0_scope, u8.x80_x9F);
     335                                var BitBlock u8error2 = simd.and<1>(u8.xED_scope, u8.xA0_xBF);
     336                                var BitBlock u8error3 = simd.and<1>(u8.xF0_scope, u8.x80_x8F);
     337                                var BitBlock u8error4 = simd.and<1>(u8.xF4_scope, u8.x90_xBF);
     338                                u8_error = simd.or<1>(u8_error, simd.or<1>(simd.or<1>(simd.or<1>(u8error1, u8error2), u8error3), u8error4));
     339                                var BitBlock EF_BF_pending = carry_set_0.BitBlock_advance_ci_co(simd.and<1>(u8.xEF_scope, u8.xBF), carry_set_0.CarryAt(9), 9);
     340                                u8_FFFE_FFFF = simd.and<1>(EF_BF_pending, simd.or<1>(u8.xBE, u8.xBF));
     341                        }
     342                        else
     343                        {
     344                                carry_set_0.CarryDequeueEnqueue(1, 9);
     345                        }
     346                        var BitBlock u8mismatch = simd.xor<1>(u8anyscope, u8.suffix);
     347                        if (bitblock.any<1>((simd.or<1>(simd.or<1>(u8_error, u8mismatch), u8_FFFE_FFFF))))
     348                        {
     349                                assert_0_error("UTF-8 error found", simd.or<1>(simd.or<1>(u8_error, u8mismatch), u8_FFFE_FFFF));
     350                        }
     351                }
     352                else
     353                {
     354                        carry_set_0.CarryDequeueEnqueue(0, 10);
     355                }       
    55356        }
    56 
    57         CarryDeclare(carry_set_0, 0, 0);
    58357};     
  • proto/pabloj/trunk/src/toolchain/pabloB/ast/Accessors.java

    r3029 r3032  
    1313import pabloB.ast.*;
    1414import toolchain.pabloB.ast.Accessors;
     15import toolchain.pabloB.codeGenerator.helpers.CodeStore;
    1516
    1617public class Accessors {
     
    300301        // IdisaFuncCallNode
    301302        ////////////////////////////////////////////////////////////////////////////
    302         public static ASTNode idisaFuncCallIdentifier(IdisaFuncCallNode node) {
    303                 return node.child(0);
    304         }
    305 
    306         public static String idisaFuncCallName(ASTNode node) {
    307                 assert (node instanceof CompoundIdentifierNode || node instanceof IdentifierNode);
    308                
    309                 if (node instanceof CompoundIdentifierNode) {
    310                         return node.lastChild().getToken().getLexeme();
    311                 }
    312                
    313                 return node.child(0).getToken().getLexeme();   
    314                                
    315         }               
    316                        
    317        
    318        
     303        public static String idisaFullName(IdisaFuncCallNode node,  List<CodeStore> childResults)
     304        {
     305                return childResults.get(0).getResultVarName();
     306        }
     307
     308        public static String idisaBaseName(IdisaFuncCallNode node,  List<CodeStore> childResults)
     309        {
     310                String fullName = idisaFullName(node, childResults);           
     311                return fullName.split("\\.")[1];
     312        }       
     313       
     314        public static String idisaClassName(IdisaFuncCallNode node,  List<CodeStore> childResults)
     315        {
     316                String fullName = idisaFullName(node, childResults);
     317                return fullName.split("\\.")[0];
     318        }
    319319}
  • proto/pabloj/trunk/src/toolchain/pabloB/codeGenerator/idisa/AbstractIDISABuiltin2Lang.java

    r3010 r3032  
    44 */
    55
     6/*
     7The definition of each operation must follow one of the below formats
     8
     9format_1(only for logic operations): opPattern = 2
     10    simd_op(data_type arg, ...)
     11format_2: opPattern = 0
     12    class_name<fw>::op(data_type arg, ...)
     13format_3: opPattern = 1
     14    class_name<fw>::op<x>(data_type arg, ...)
     15format_4: opPattern = 3
     16    class_name::op(data_type arg, ...)
     17format_5: opPattern = 4
     18    class_name::op<x>(data_type arg, ...)
     19
     20format_6: specially for bitblock::store_[un]aligned
     21        class_name::op(data_type arg, data_type* arg)
     22format_7: specially for bitblock::load_[un]aligned
     23        class_name::op(date_type *arg)         
     24*/
     25
    626package toolchain.pabloB.codeGenerator.idisa;
    727
    828public abstract class AbstractIDISABuiltin2Lang {
    9         public abstract String makeIDISAFunctionCall(String operationName, String fieldWidth, String ...arguments);
     29        public abstract String makeIDISAFunctionCall0(String operationBaseName, String operationClassName, String fieldWidth, String ...arguments);
     30        public abstract String makeIDISAFunctionCall1(String operationBaseName, String operationClassName, String fieldWidth, String ...arguments);
     31        public abstract String makeIDISAFunctionCall2(String operationBaseName, String operationClassName, String fieldWidth, String ...arguments);
     32        public abstract String makeIDISAFunctionCall3(String operationBaseName, String operationClassName, String fieldWidth, String ...arguments);
     33        public abstract String makeIDISAFunctionCall4(String operationBaseName, String operationClassName, String fieldWidth, String ...arguments);
     34        public abstract String makeIDISAFunctionCallStore(String operationBaseName, String operationClassName, String fieldWidth, String[] arguments);
     35        public abstract String makeIDISAFunctionCallLoad(String operationBaseName, String operationClassName, String fieldWidth, String[] arguments);
    1036}
  • proto/pabloj/trunk/src/toolchain/pabloB/codeGenerator/idisa/AbstractIDISABuiltinGenerator.java

    r3010 r3032  
    77package toolchain.pabloB.codeGenerator.idisa;
    88
    9 import java.util.Iterator;
    10 
    11 import toolchain.pabloB.codeGenerator.helpers.CodeStore;
    12 
    13 
    149
    1510public abstract class AbstractIDISABuiltinGenerator {
    1611               
    1712        public abstract String makeIDISAFuncCall(AbstractIDISABuiltin2Lang idisaBuiltins2Lang,
    18                                                         String operationName,
     13                                                        String operationBaseName, String operationClassName,
    1914                                                        String fieldWidth, String ...arguments);
    2015       
  • proto/pabloj/trunk/src/toolchain/pabloB/codeGenerator/idisa/IDISABuiltin2C.java

    r3010 r3032  
    22
    33public class IDISABuiltin2C extends AbstractIDISABuiltin2Lang {
    4         public String makeIDISAFunctionCall(String operationName, String fieldWidth, String ...arguments) {
     4
     5        @Override
     6        public String makeIDISAFunctionCall0(String operationBaseName,
     7                        String operationClassName, String fieldWidth, String... arguments) {
     8                // TODO Auto-generated method stub
     9                return null;
     10        }
     11
     12        @Override
     13        public String makeIDISAFunctionCall1(String operationBaseName,
     14                        String operationClassName, String fieldWidth, String... arguments) {
     15                // TODO Auto-generated method stub
     16                return null;
     17        }
     18
     19        @Override
     20        public String makeIDISAFunctionCall2(String operationBaseName,
     21                        String operationClassName, String fieldWidth, String... arguments) {
     22                // TODO Auto-generated method stub
     23                return null;
     24        }
     25
     26        @Override
     27        public String makeIDISAFunctionCall3(String operationBaseName,
     28                        String operationClassName, String fieldWidth, String... arguments) {
     29                // TODO Auto-generated method stub
     30                return null;
     31        }
     32
     33        @Override
     34        public String makeIDISAFunctionCall4(String operationBaseName,
     35                        String operationClassName, String fieldWidth, String... arguments) {
     36                // TODO Auto-generated method stub
     37                return null;
     38        }
     39
     40        @Override
     41        public String makeIDISAFunctionCallStore(String operationBaseName,
     42                        String operationClassName, String fieldWidth, String[] arguments) {
     43                // TODO Auto-generated method stub
     44                return null;
     45        }
     46
     47        @Override
     48        public String makeIDISAFunctionCallLoad(String operationBaseName,
     49                        String operationClassName, String fieldWidth, String[] arguments) {
     50                // TODO Auto-generated method stub
    551                return null;
    652        }
  • proto/pabloj/trunk/src/toolchain/pabloB/codeGenerator/idisa/IDISABuiltin2CPP.java

    r3029 r3032  
    99
    1010import java.util.ArrayList;
    11 import java.util.Arrays;
    1211
    1312import toolchain.pabloB.codeGenerator.helpers.UnparserUtil;
     
    1514
    1615public class IDISABuiltin2CPP extends AbstractIDISABuiltin2Lang{
    17         public String makeIDISAFunctionCall(String operationName, String fieldWidth, String ...arguments) {
     16       
     17        private String _firstArg;
     18       
     19        private String getArgCsv(String[] arguments, int start) {
     20                ArrayList<String> argList = new ArrayList<String>();
     21                for (String arg: arguments)
     22                {
     23                        for (String parts: arg.split(","))
     24                        {
     25                                argList.add(parts.trim());
     26                        }
     27                }
     28                _firstArg = argList.get(0);
    1829               
    19                 ArrayList<String> temp = new ArrayList<String>(Arrays.asList(arguments));
     30                String csv = UnparserUtil.makeDelimitedList(argList.subList(start, argList.size()), ", ");
     31                return csv;
     32        }
     33       
     34        private String getArgCsv(String[] arguments)
     35        {
     36                return getArgCsv(arguments, 0);
     37        }
    2038
    21                 String csv = UnparserUtil.makeDelimitedList(temp,",");
     39        @Override
     40        public String makeIDISAFunctionCall0(String operationBaseName, String operationClassName, String fieldWidth, String ...arguments) {             
    2241               
    23                 operationName = operationName.replaceFirst("\\.", String.format("<%s>::", fieldWidth));
     42                String csv = getArgCsv(arguments);
    2443               
    25                 return String.format("%s(%s)", operationName, csv);
     44                return String.format("%s<%s>::%s(%s)", operationClassName, fieldWidth, operationBaseName, csv);
     45        }
     46       
     47        @Override
     48        public String makeIDISAFunctionCall1(String operationBaseName,
     49                        String operationClassName, String fieldWidth, String... arguments) {
     50               
     51                String csv = getArgCsv(arguments, 1);
     52                                               
     53                return String.format("%s<%s>::%s<%s>(%s)", operationClassName, fieldWidth, operationBaseName, _firstArg, csv);
     54        }
     55
     56        @Override
     57        public String makeIDISAFunctionCall2(String operationBaseName,
     58                        String operationClassName, String fieldWidth, String... arguments) {
     59               
     60                String csv = getArgCsv(arguments);
     61                return String.format("%s_%s(%s)", operationClassName, operationBaseName, csv);
     62        }
     63
     64        @Override
     65        public String makeIDISAFunctionCall3(String operationBaseName,
     66                        String operationClassName, String fieldWidth, String... arguments) {
     67               
     68                String csv = getArgCsv(arguments);
     69                return String.format("%s::%s(%s)", operationClassName, operationBaseName, csv);
     70        }
     71
     72        @Override
     73        public String makeIDISAFunctionCall4(String operationBaseName,
     74                        String operationClassName, String fieldWidth, String... arguments) {
     75                 
     76                String csv = getArgCsv(arguments, 1);
     77                return String.format("%s::%s<%s>(%s)", operationClassName, operationBaseName, _firstArg, csv);
     78        }
     79
     80        @Override
     81        public String makeIDISAFunctionCallStore(String operationBaseName,
     82                        String operationClassName, String fieldWidth, String[] arguments) {
     83               
     84                String csv = getArgCsv(arguments, 1);
     85                return String.format("%s::%s(%s)", operationClassName, operationBaseName, _firstArg + ", &" + csv);
     86        }
     87
     88        @Override
     89        public String makeIDISAFunctionCallLoad(String operationBaseName,
     90                        String operationClassName, String fieldWidth, String[] arguments) {
     91               
     92                String csv = getArgCsv(arguments, 1);
     93                return String.format("%s::%s(%s)", operationClassName, operationBaseName, "&" + _firstArg);
    2694        }
    2795}
  • proto/pabloj/trunk/src/toolchain/pabloB/codeGenerator/idisa/SIMDBuiltinGenerator.java

    r3010 r3032  
    2222        @Override
    2323        public String makeIDISAFuncCall(AbstractIDISABuiltin2Lang idisaBuiltins2Lang,
    24                         String operationName,
     24                        String operationBaseName, String operationClassName,
    2525                        String fieldWidth, String ...arguments) {
    2626
    27                 return idisaBuiltins2Lang.makeIDISAFunctionCall(operationName, fieldWidth, arguments);
     27                return idisaBuiltins2Lang.makeIDISAFunctionCall0(operationBaseName, operationClassName, fieldWidth, arguments);
    2828               
    2929        }
  • proto/pabloj/trunk/src/toolchain/pabloB/codeGenerator/idisa/SIMDConstantBuiltinGenerator.java

    r3010 r3032  
    2424        public
    2525        String makeIDISAFuncCall(       AbstractIDISABuiltin2Lang idisaBuiltins2Lang,
    26                                         String operationName,
     26                                        String operationBaseName, String operationClassName,
    2727                                        String fieldWidth, String ...arguments) {
    2828               
    29                 return null;
     29                return idisaBuiltins2Lang.makeIDISAFunctionCall1(operationBaseName, operationClassName, fieldWidth, arguments);
    3030        }
    3131       
  • proto/pabloj/trunk/src/toolchain/pabloB/codeGenerator/visitors/Unparser.java

    r3029 r3032  
    4141import toolchain.pabloB.codeGenerator.helpers.UnparserUtil;
    4242import toolchain.pabloB.codeGenerator.idisa.AbstractIDISABuiltin2Lang;
     43import toolchain.pabloB.codeGenerator.idisa.AbstractIDISABuiltinGenerator;
    4344import toolchain.pabloB.codeGenerator.idisa.SIMDBuiltinGenerator;
    4445import toolchain.pabloB.lang.idisa.IDISABuiltin;
     
    369370                StringBuilder resultVar = new StringBuilder();
    370371               
    371                 String fullyQualifiedName = childResults.get(0).getResultVarName();
    372                 String baseName                 = Accessors.idisaFuncCallName(node.child(0));
    373                 String fieldWidth               = childResults.get(1).getResultVarName();
    374                 String arguments                = childResults.get(2).getResultVarName();
     372                String fullyQualifiedName = Accessors.idisaFullName(node, childResults);
     373                String baseName                   = Accessors.idisaBaseName(node, childResults);
     374                String className                  = Accessors.idisaClassName(node, childResults);
     375                String fieldWidth                 = childResults.get(1).getResultVarName();
     376                String arguments                  = childResults.get(2).getResultVarName();
    375377               
    376378                IDISABuiltin idisaBuiltin = IDISABuiltin.fromString(fullyQualifiedName);
     
    379381               
    380382                // AbstractIDISABuiltinGenerator
    381                 SIMDBuiltinGenerator idisaBuiltinsGenerator
    382                         = (SIMDBuiltinGenerator) idisaBuiltin.getSignature(Integer.valueOf(fieldWidth)).getIDISABuiltinsGenerator();
    383                
    384                
    385                 String idisaFuncCallString = idisaBuiltinsGenerator.makeIDISAFuncCall(idisaBuiltins2Lang, fullyQualifiedName, fieldWidth, arguments);           
     383                AbstractIDISABuiltinGenerator idisaBuiltinsGenerator
     384                        = idisaBuiltin.getSignature(Integer.valueOf(fieldWidth)).getIDISABuiltinsGenerator();           
     385               
     386                String idisaFuncCallString = idisaBuiltinsGenerator.makeIDISAFuncCall(idisaBuiltins2Lang, baseName, className, fieldWidth, arguments);         
    386387               
    387388                code.setResultVarName(idisaFuncCallString);             // Function invocation as an expression
  • proto/pabloj/trunk/src/toolchain/pabloB/lang/idisa/IDISABuiltin.java

    r3026 r3032  
    1616
    1717import toolchain.pabloB.codeGenerator.idisa.AbstractIDISABuiltinGenerator;
     18import toolchain.pabloB.codeGenerator.idisa.SIMDBitblockBuiltinGenerator;
     19import toolchain.pabloB.codeGenerator.idisa.SIMDBitblockImmediateBuiltinGenerator;
     20import toolchain.pabloB.codeGenerator.idisa.SIMDBitblockLoadBuiltinGenerator;
     21import toolchain.pabloB.codeGenerator.idisa.SIMDBitblockStoreBuiltinGenerator;
    1822import toolchain.pabloB.codeGenerator.idisa.SIMDBuiltinGenerator;
     23import toolchain.pabloB.codeGenerator.idisa.SIMDConstantBuiltinGenerator;
     24import toolchain.pabloB.codeGenerator.idisa.SIMDLogicBuiltinGenerator;
    1925import toolchain.pabloB.lang.types.Type;
    2026
    2127
    2228import static toolchain.pabloB.lang.types.PrimitiveType.BITBLOCK;
     29import static toolchain.pabloB.lang.types.PrimitiveType.BITBLOCK_POINTER;
    2330import static toolchain.pabloB.lang.types.PrimitiveType.BITBLOCK_SIZE;
    2431import static toolchain.pabloB.lang.types.PrimitiveType.INTEGERCONSTANT;
     32import static toolchain.pabloB.lang.types.PrimitiveType.BOOL;
     33import static toolchain.pabloB.lang.types.PrimitiveType.VOID;
     34import static toolchain.pabloB.lang.types.PrimitiveType.BITFIELD;
    2535
    2636public enum IDISABuiltin {
    27 
    28 //      SIMD_CONSTANT(makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDConstantBuiltinGenerator(), INTEGERCONSTANT)),
    29        
    30         // SIMD unary operations
    31         SIMD_NOT(makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinGenerator(), BITBLOCK, BITBLOCK)),
    32         HSIMD_ADD_HL(makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinGenerator(), BITBLOCK)),
    33        
    34         // SIMD binary operations
    35         SIMD_ADD(makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinGenerator(), BITBLOCK, BITBLOCK, BITBLOCK)),     
    36         SIMD_SUB(makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinGenerator(), BITBLOCK, BITBLOCK, BITBLOCK)),
    37         SIMD_MUL(makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinGenerator(), BITBLOCK, BITBLOCK, BITBLOCK)),
    38         SIMD_EQ(makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinGenerator(), BITBLOCK, BITBLOCK, BITBLOCK)),
    39         SIMD_GT(makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinGenerator(), BITBLOCK, BITBLOCK, BITBLOCK)),
    40         SIMD_UGT(makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinGenerator(), BITBLOCK, BITBLOCK, BITBLOCK)),
    41         SIMD_LT(makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinGenerator(), BITBLOCK, BITBLOCK, BITBLOCK)),
    42         SIMD_ULT(makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinGenerator(), BITBLOCK, BITBLOCK, BITBLOCK)),
    43         SIMD_MAX(makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinGenerator(), BITBLOCK, BITBLOCK, BITBLOCK)),
    44         SIMD_UMAX(makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinGenerator(), BITBLOCK, BITBLOCK, BITBLOCK)),
    45         SIMD_MIN(makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinGenerator(), BITBLOCK, BITBLOCK, BITBLOCK)),
    46         SIMD_UMIN(makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinGenerator(), BITBLOCK, BITBLOCK, BITBLOCK)),
    47         SIMD_SLL(makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinGenerator(), BITBLOCK, BITBLOCK, BITBLOCK)),
    48         SIMD_SRL(makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinGenerator(), BITBLOCK, BITBLOCK, BITBLOCK)),
    49         SIMD_SRA(makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinGenerator(), BITBLOCK, BITBLOCK, BITBLOCK)),     
    50        
    51         // SIMD ternary operations
    52         SIMD_IFH(makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinGenerator(), BITBLOCK, BITBLOCK, BITBLOCK, BITBLOCK));
    53        
     37               
     38        // SIMD operations (opPattern == 0) class_name<fw>::op(data_type arg, ...)
     39        ESIMD_MERGEH (makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinGenerator(),  BITBLOCK, BITBLOCK,  BITBLOCK)),
     40        ESIMD_MERGEL (makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinGenerator(),  BITBLOCK, BITBLOCK,  BITBLOCK)),
     41        ESIMD_MULTH (makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinGenerator(),  BITBLOCK, BITBLOCK,  BITBLOCK)),
     42        ESIMD_MULTL (makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinGenerator(),  BITBLOCK, BITBLOCK,  BITBLOCK)),
     43        ESIMD_SIGNEXTENDH (makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinGenerator(),  BITBLOCK,  BITBLOCK)),
     44        ESIMD_SIGNEXTENDL (makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinGenerator(),  BITBLOCK,  BITBLOCK)),
     45        ESIMD_ZEROEXTENDH (makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinGenerator(),  BITBLOCK,  BITBLOCK)),
     46        ESIMD_ZEROEXTENDL (makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinGenerator(),  BITBLOCK,  BITBLOCK)),
     47        HSIMD_ADD_HL (makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinGenerator(),  BITBLOCK, BITBLOCK,  BITBLOCK)),
     48        HSIMD_MIN_HL (makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinGenerator(),  BITBLOCK, BITBLOCK,  BITBLOCK)),
     49        HSIMD_PACKH (makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinGenerator(),  BITBLOCK, BITBLOCK,  BITBLOCK)),
     50        HSIMD_PACKL (makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinGenerator(),  BITBLOCK, BITBLOCK,  BITBLOCK)),
     51        HSIMD_PACKSS (makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinGenerator(),  BITBLOCK, BITBLOCK,  BITBLOCK)),
     52        HSIMD_PACKUS (makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinGenerator(),  BITBLOCK, BITBLOCK,  BITBLOCK)),
     53        HSIMD_SIGNMASK (makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinGenerator(),  BITBLOCK,  BITFIELD)),
     54        HSIMD_UMIN_HL (makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinGenerator(),  BITBLOCK, BITBLOCK,  BITBLOCK)),
     55        MVMD_FILL (makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinGenerator(),  BITBLOCK,  BITBLOCK)),
     56        MVMD_FILL16 (makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinGenerator(),  BITBLOCK, BITBLOCK, BITBLOCK, BITBLOCK, BITBLOCK, BITBLOCK, BITBLOCK, BITBLOCK, BITBLOCK, BITBLOCK, BITBLOCK, BITBLOCK, BITBLOCK, BITBLOCK, BITBLOCK, BITBLOCK,  BITBLOCK)),
     57        MVMD_FILL2 (makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinGenerator(),  BITBLOCK, BITBLOCK,  BITBLOCK)),
     58        MVMD_FILL4 (makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinGenerator(),  BITBLOCK, BITBLOCK, BITBLOCK, BITBLOCK,  BITBLOCK)),
     59        MVMD_FILL8 (makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinGenerator(),  BITBLOCK, BITBLOCK, BITBLOCK, BITBLOCK, BITBLOCK, BITBLOCK, BITBLOCK, BITBLOCK,  BITBLOCK)),
     60        MVMD_SHUFFLE (makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinGenerator(),  BITBLOCK, BITBLOCK,  BITBLOCK)),
     61        SIMD_ABS (makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinGenerator(),  BITBLOCK,  BITBLOCK)),
     62        SIMD_ADD (makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinGenerator(),  BITBLOCK, BITBLOCK,  BITBLOCK)),
     63        SIMD_ADD_HL (makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinGenerator(),  BITBLOCK,  BITBLOCK)),
     64        SIMD_CTZ (makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinGenerator(),  BITBLOCK,  BITBLOCK)),
     65        SIMD_EQ (makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinGenerator(),  BITBLOCK, BITBLOCK,  BITBLOCK)),
     66        SIMD_GT (makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinGenerator(),  BITBLOCK, BITBLOCK,  BITBLOCK)),
     67        SIMD_HIMASK (makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinGenerator(),   BITBLOCK)),
     68        SIMD_IFH (makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinGenerator(),  BITBLOCK, BITBLOCK, BITBLOCK,  BITBLOCK)),
     69        SIMD_LOMASK (makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinGenerator(),   BITBLOCK)),
     70        SIMD_LT (makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinGenerator(),  BITBLOCK, BITBLOCK,  BITBLOCK)),
     71        SIMD_MAX (makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinGenerator(),  BITBLOCK, BITBLOCK,  BITBLOCK)),
     72        SIMD_MIN (makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinGenerator(),  BITBLOCK, BITBLOCK,  BITBLOCK)),
     73        SIMD_MULT (makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinGenerator(),  BITBLOCK, BITBLOCK,  BITBLOCK)),
     74        SIMD_NEG (makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinGenerator(),  BITBLOCK,  BITBLOCK)),
     75        SIMD_POPCOUNT (makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinGenerator(),  BITBLOCK,  BITBLOCK)),
     76        SIMD_SLL (makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinGenerator(),  BITBLOCK, BITBLOCK,  BITBLOCK)),
     77        SIMD_SRA (makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinGenerator(),  BITBLOCK, BITBLOCK,  BITBLOCK)),
     78        SIMD_SRL (makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinGenerator(),  BITBLOCK, BITBLOCK,  BITBLOCK)),
     79        SIMD_SUB (makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinGenerator(),  BITBLOCK, BITBLOCK,  BITBLOCK)),
     80        SIMD_SUB_HL (makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinGenerator(),  BITBLOCK,  BITBLOCK)),
     81        SIMD_UGT (makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinGenerator(),  BITBLOCK, BITBLOCK,  BITBLOCK)),
     82        SIMD_ULT (makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinGenerator(),  BITBLOCK, BITBLOCK,  BITBLOCK)),
     83        SIMD_UMAX (makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinGenerator(),  BITBLOCK, BITBLOCK,  BITBLOCK)),
     84        SIMD_UMIN (makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinGenerator(),  BITBLOCK, BITBLOCK,  BITBLOCK)),
     85        SIMD_UMULT (makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinGenerator(),  BITBLOCK, BITBLOCK,  BITBLOCK)),
     86        SIMD_XOR_HL (makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBuiltinGenerator(),  BITBLOCK,  BITBLOCK)),
     87       
     88        // SIMD (opPatterns == 1) class_name<fw>::op<x>(data_type arg, ...)
     89        MVMD_DSLLI (makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDConstantBuiltinGenerator(),  INTEGERCONSTANT,  BITBLOCK,  BITBLOCK)),
     90        MVMD_DSRLI (makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDConstantBuiltinGenerator(),  INTEGERCONSTANT,  BITBLOCK,  BITBLOCK)),
     91        MVMD_EXTRACT (makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDConstantBuiltinGenerator(),  INTEGERCONSTANT,   BITFIELD)),
     92        MVMD_SHUFFLEI (makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDConstantBuiltinGenerator(),  INTEGERCONSTANT,   BITBLOCK)),
     93        MVMD_SLLI (makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDConstantBuiltinGenerator(),  INTEGERCONSTANT,   BITBLOCK)),
     94        MVMD_SPLAT (makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDConstantBuiltinGenerator(),  INTEGERCONSTANT,   BITBLOCK)),
     95        MVMD_SRLI (makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDConstantBuiltinGenerator(),  INTEGERCONSTANT,   BITBLOCK)),
     96        SIMD_CONSTANT (makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDConstantBuiltinGenerator(),  INTEGERCONSTANT,   BITBLOCK)),
     97        SIMD_SLLI (makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDConstantBuiltinGenerator(),  INTEGERCONSTANT,   BITBLOCK)),
     98        SIMD_SRAI (makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDConstantBuiltinGenerator(),  INTEGERCONSTANT,   BITBLOCK)),
     99        SIMD_SRLI (makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDConstantBuiltinGenerator(),  INTEGERCONSTANT,   BITBLOCK)),
     100       
     101        // SIMD logic operations (opPattern == 2) simd_op(data_type arg, ...)
     102        SIMD_NOR (makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDLogicBuiltinGenerator(),  BITBLOCK, BITBLOCK,  BITBLOCK)),
     103        SIMD_NOT (makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDLogicBuiltinGenerator(),  BITBLOCK,  BITBLOCK)),
     104        SIMD_ANDC (makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDLogicBuiltinGenerator(),  BITBLOCK, BITBLOCK,  BITBLOCK)),
     105        SIMD_OR (makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDLogicBuiltinGenerator(),  BITBLOCK, BITBLOCK,  BITBLOCK)),
     106        SIMD_XOR (makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDLogicBuiltinGenerator(),  BITBLOCK, BITBLOCK,  BITBLOCK)),
     107        SIMD_AND (makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDLogicBuiltinGenerator(),  BITBLOCK, BITBLOCK,  BITBLOCK)),
     108       
     109        // SIMD (opPattern == 3) class_name::op(data_type arg, ...)
     110        BITBLOCK_ALL (makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBitblockBuiltinGenerator(),  BITBLOCK,  BOOL)),
     111        BITBLOCK_ANY (makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBitblockBuiltinGenerator(),  BITBLOCK,  BOOL)),
     112        BITBLOCK_POPCOUNT (makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBitblockBuiltinGenerator(),  BITBLOCK,  BITFIELD)),
     113        BITBLOCK_SLL (makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBitblockBuiltinGenerator(),  BITBLOCK, BITBLOCK,  BITBLOCK)),
     114        BITBLOCK_SRL (makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBitblockBuiltinGenerator(),  BITBLOCK, BITBLOCK,  BITBLOCK)),
     115       
     116        // SIMD (opPattern == 4) class_name::op<x>(data_type arg, ...)
     117        BITBLOCK_SLLI (makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBitblockImmediateBuiltinGenerator(),  INTEGERCONSTANT,  BITBLOCK)),
     118        BITBLOCK_SRLI (makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBitblockImmediateBuiltinGenerator(),  INTEGERCONSTANT,  BITBLOCK)),
     119       
     120        // SIMD Stores (with args = (Bitblock, Bitblock*)
     121        BITBLOCK_STORE_ALIGNED (makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBitblockStoreBuiltinGenerator(),  BITBLOCK, BITBLOCK_POINTER,  VOID)),
     122        BITBLOCK_STORE_UNALIGNED (makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBitblockStoreBuiltinGenerator(),  BITBLOCK, BITBLOCK_POINTER,  VOID)),
     123       
     124        // SIMD Loads (with args = Bitblock*)
     125        BITBLOCK_LOAD_ALIGNED (makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBitblockLoadBuiltinGenerator(),  BITBLOCK_POINTER,  BITBLOCK)),
     126        BITBLOCK_LOAD_UNALIGNED (makeAllSimpleSignatures(BITBLOCK_SIZE, new SIMDBitblockLoadBuiltinGenerator(),  BITBLOCK_POINTER,  BITBLOCK));
    54127       
    55128        private static final Map<String, IDISABuiltin> operationName2IDISABuilinMap = new HashMap<String, IDISABuiltin>();
  • proto/pabloj/trunk/src/toolchain/pabloB/lang/types/PrimitiveType.java

    r3010 r3032  
    1616        INTEGERCONSTANT(),
    1717        STRINGCONSTANT(),
     18        BOOL(),
    1819        BITFIELD() {
    1920                @Override public String toString() { return "BitField"; }
     
    2223                @Override public String toString() { return "BitBlock"; }
    2324        }, // SIMD vector size
     25        BITBLOCK_POINTER(),
    2426        NO_TYPE (),     // use as a value when no type has been assigned
    2527        NO_MATCH(),     // use as a (unified) value for non-matching types
Note: See TracChangeset for help on using the changeset viewer.