Changeset 3032
- Timestamp:
- Apr 16, 2013, 6:19:16 PM (6 years ago)
- 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 1 kernel BasisBits 4 2 { 5 3 init 6 4 { 7 5 8 6 } 9 7 10 function void do_block( )8 function void do_block(struct Basis_bits basis_bits, struct Lex lex, struct U8 u8) 11 9 { 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 49 183 } 50 184 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 } 55 356 } 56 57 CarryDeclare(carry_set_0, 0, 0);58 357 }; -
proto/pabloj/trunk/src/toolchain/pabloB/ast/Accessors.java
r3029 r3032 13 13 import pabloB.ast.*; 14 14 import toolchain.pabloB.ast.Accessors; 15 import toolchain.pabloB.codeGenerator.helpers.CodeStore; 15 16 16 17 public class Accessors { … … 300 301 // IdisaFuncCallNode 301 302 //////////////////////////////////////////////////////////////////////////// 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 } 319 319 } -
proto/pabloj/trunk/src/toolchain/pabloB/codeGenerator/idisa/AbstractIDISABuiltin2Lang.java
r3010 r3032 4 4 */ 5 5 6 /* 7 The definition of each operation must follow one of the below formats 8 9 format_1(only for logic operations): opPattern = 2 10 simd_op(data_type arg, ...) 11 format_2: opPattern = 0 12 class_name<fw>::op(data_type arg, ...) 13 format_3: opPattern = 1 14 class_name<fw>::op<x>(data_type arg, ...) 15 format_4: opPattern = 3 16 class_name::op(data_type arg, ...) 17 format_5: opPattern = 4 18 class_name::op<x>(data_type arg, ...) 19 20 format_6: specially for bitblock::store_[un]aligned 21 class_name::op(data_type arg, data_type* arg) 22 format_7: specially for bitblock::load_[un]aligned 23 class_name::op(date_type *arg) 24 */ 25 6 26 package toolchain.pabloB.codeGenerator.idisa; 7 27 8 28 public 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); 10 36 } -
proto/pabloj/trunk/src/toolchain/pabloB/codeGenerator/idisa/AbstractIDISABuiltinGenerator.java
r3010 r3032 7 7 package toolchain.pabloB.codeGenerator.idisa; 8 8 9 import java.util.Iterator;10 11 import toolchain.pabloB.codeGenerator.helpers.CodeStore;12 13 14 9 15 10 public abstract class AbstractIDISABuiltinGenerator { 16 11 17 12 public abstract String makeIDISAFuncCall(AbstractIDISABuiltin2Lang idisaBuiltins2Lang, 18 String operation Name,13 String operationBaseName, String operationClassName, 19 14 String fieldWidth, String ...arguments); 20 15 -
proto/pabloj/trunk/src/toolchain/pabloB/codeGenerator/idisa/IDISABuiltin2C.java
r3010 r3032 2 2 3 3 public 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 5 51 return null; 6 52 } -
proto/pabloj/trunk/src/toolchain/pabloB/codeGenerator/idisa/IDISABuiltin2CPP.java
r3029 r3032 9 9 10 10 import java.util.ArrayList; 11 import java.util.Arrays;12 11 13 12 import toolchain.pabloB.codeGenerator.helpers.UnparserUtil; … … 15 14 16 15 public 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); 18 29 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 } 20 38 21 String csv = UnparserUtil.makeDelimitedList(temp,","); 39 @Override 40 public String makeIDISAFunctionCall0(String operationBaseName, String operationClassName, String fieldWidth, String ...arguments) { 22 41 23 operationName = operationName.replaceFirst("\\.", String.format("<%s>::", fieldWidth));42 String csv = getArgCsv(arguments); 24 43 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); 26 94 } 27 95 } -
proto/pabloj/trunk/src/toolchain/pabloB/codeGenerator/idisa/SIMDBuiltinGenerator.java
r3010 r3032 22 22 @Override 23 23 public String makeIDISAFuncCall(AbstractIDISABuiltin2Lang idisaBuiltins2Lang, 24 String operation Name,24 String operationBaseName, String operationClassName, 25 25 String fieldWidth, String ...arguments) { 26 26 27 return idisaBuiltins2Lang.makeIDISAFunctionCall (operationName, fieldWidth, arguments);27 return idisaBuiltins2Lang.makeIDISAFunctionCall0(operationBaseName, operationClassName, fieldWidth, arguments); 28 28 29 29 } -
proto/pabloj/trunk/src/toolchain/pabloB/codeGenerator/idisa/SIMDConstantBuiltinGenerator.java
r3010 r3032 24 24 public 25 25 String makeIDISAFuncCall( AbstractIDISABuiltin2Lang idisaBuiltins2Lang, 26 String operation Name,26 String operationBaseName, String operationClassName, 27 27 String fieldWidth, String ...arguments) { 28 28 29 return null;29 return idisaBuiltins2Lang.makeIDISAFunctionCall1(operationBaseName, operationClassName, fieldWidth, arguments); 30 30 } 31 31 -
proto/pabloj/trunk/src/toolchain/pabloB/codeGenerator/visitors/Unparser.java
r3029 r3032 41 41 import toolchain.pabloB.codeGenerator.helpers.UnparserUtil; 42 42 import toolchain.pabloB.codeGenerator.idisa.AbstractIDISABuiltin2Lang; 43 import toolchain.pabloB.codeGenerator.idisa.AbstractIDISABuiltinGenerator; 43 44 import toolchain.pabloB.codeGenerator.idisa.SIMDBuiltinGenerator; 44 45 import toolchain.pabloB.lang.idisa.IDISABuiltin; … … 369 370 StringBuilder resultVar = new StringBuilder(); 370 371 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(); 375 377 376 378 IDISABuiltin idisaBuiltin = IDISABuiltin.fromString(fullyQualifiedName); … … 379 381 380 382 // 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); 386 387 387 388 code.setResultVarName(idisaFuncCallString); // Function invocation as an expression -
proto/pabloj/trunk/src/toolchain/pabloB/lang/idisa/IDISABuiltin.java
r3026 r3032 16 16 17 17 import toolchain.pabloB.codeGenerator.idisa.AbstractIDISABuiltinGenerator; 18 import toolchain.pabloB.codeGenerator.idisa.SIMDBitblockBuiltinGenerator; 19 import toolchain.pabloB.codeGenerator.idisa.SIMDBitblockImmediateBuiltinGenerator; 20 import toolchain.pabloB.codeGenerator.idisa.SIMDBitblockLoadBuiltinGenerator; 21 import toolchain.pabloB.codeGenerator.idisa.SIMDBitblockStoreBuiltinGenerator; 18 22 import toolchain.pabloB.codeGenerator.idisa.SIMDBuiltinGenerator; 23 import toolchain.pabloB.codeGenerator.idisa.SIMDConstantBuiltinGenerator; 24 import toolchain.pabloB.codeGenerator.idisa.SIMDLogicBuiltinGenerator; 19 25 import toolchain.pabloB.lang.types.Type; 20 26 21 27 22 28 import static toolchain.pabloB.lang.types.PrimitiveType.BITBLOCK; 29 import static toolchain.pabloB.lang.types.PrimitiveType.BITBLOCK_POINTER; 23 30 import static toolchain.pabloB.lang.types.PrimitiveType.BITBLOCK_SIZE; 24 31 import static toolchain.pabloB.lang.types.PrimitiveType.INTEGERCONSTANT; 32 import static toolchain.pabloB.lang.types.PrimitiveType.BOOL; 33 import static toolchain.pabloB.lang.types.PrimitiveType.VOID; 34 import static toolchain.pabloB.lang.types.PrimitiveType.BITFIELD; 25 35 26 36 public 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)); 54 127 55 128 private static final Map<String, IDISABuiltin> operationName2IDISABuilinMap = new HashMap<String, IDISABuiltin>(); -
proto/pabloj/trunk/src/toolchain/pabloB/lang/types/PrimitiveType.java
r3010 r3032 16 16 INTEGERCONSTANT(), 17 17 STRINGCONSTANT(), 18 BOOL(), 18 19 BITFIELD() { 19 20 @Override public String toString() { return "BitField"; } … … 22 23 @Override public String toString() { return "BitBlock"; } 23 24 }, // SIMD vector size 25 BITBLOCK_POINTER(), 24 26 NO_TYPE (), // use as a value when no type has been assigned 25 27 NO_MATCH(), // use as a (unified) value for non-matching types
Note: See TracChangeset
for help on using the changeset viewer.