1258 void square_rshift(Register x, Register len, Register z, Register tmp1, Register tmp3,
1259 Register tmp4, Register tmp5, Register rdxReg, Register raxReg);
1260 void multiply_add_64_bmi2(Register sum, Register op1, Register op2, Register carry,
1261 Register tmp2);
1262 void multiply_add_64(Register sum, Register op1, Register op2, Register carry,
1263 Register rdxReg, Register raxReg);
1264 void add_one_64(Register z, Register zlen, Register carry, Register tmp1);
1265 void lshift_by_1(Register x, Register len, Register z, Register zlen, Register tmp1, Register tmp2,
1266 Register tmp3, Register tmp4);
1267 void square_to_len(Register x, Register len, Register z, Register zlen, Register tmp1, Register tmp2,
1268 Register tmp3, Register tmp4, Register tmp5, Register rdxReg, Register raxReg);
1269
1270 void mul_add_128_x_32_loop(Register out, Register in, Register offset, Register len, Register tmp1,
1271 Register tmp2, Register tmp3, Register tmp4, Register tmp5, Register rdxReg,
1272 Register raxReg);
1273 void mul_add(Register out, Register in, Register offset, Register len, Register k, Register tmp1,
1274 Register tmp2, Register tmp3, Register tmp4, Register tmp5, Register rdxReg,
1275 Register raxReg);
1276 #endif
1277
1278 // CRC32 code for java.util.zip.CRC32::updateBytes() instrinsic.
1279 void update_byte_crc32(Register crc, Register val, Register table);
1280 void kernel_crc32(Register crc, Register buf, Register len, Register table, Register tmp);
1281 // Fold 128-bit data chunk
1282 void fold_128bit_crc32(XMMRegister xcrc, XMMRegister xK, XMMRegister xtmp, Register buf, int offset);
1283 void fold_128bit_crc32(XMMRegister xcrc, XMMRegister xK, XMMRegister xtmp, XMMRegister xbuf);
1284 // Fold 8-bit data
1285 void fold_8bit_crc32(Register crc, Register table, Register tmp);
1286 void fold_8bit_crc32(XMMRegister crc, Register table, XMMRegister xtmp, Register tmp);
1287
1288 #undef VIRTUAL
1289
1290 };
1291
1292 /**
1293 * class SkipIfEqual:
1294 *
1295 * Instantiating this class will result in assembly code being output that will
1296 * jump around any code emitted between the creation of the instance and it's
1297 * automatic destruction at the end of a scope block, depending on the value of
1298 * the flag passed to the constructor, which will be checked at run-time.
1299 */
1300 class SkipIfEqual {
|
1258 void square_rshift(Register x, Register len, Register z, Register tmp1, Register tmp3,
1259 Register tmp4, Register tmp5, Register rdxReg, Register raxReg);
1260 void multiply_add_64_bmi2(Register sum, Register op1, Register op2, Register carry,
1261 Register tmp2);
1262 void multiply_add_64(Register sum, Register op1, Register op2, Register carry,
1263 Register rdxReg, Register raxReg);
1264 void add_one_64(Register z, Register zlen, Register carry, Register tmp1);
1265 void lshift_by_1(Register x, Register len, Register z, Register zlen, Register tmp1, Register tmp2,
1266 Register tmp3, Register tmp4);
1267 void square_to_len(Register x, Register len, Register z, Register zlen, Register tmp1, Register tmp2,
1268 Register tmp3, Register tmp4, Register tmp5, Register rdxReg, Register raxReg);
1269
1270 void mul_add_128_x_32_loop(Register out, Register in, Register offset, Register len, Register tmp1,
1271 Register tmp2, Register tmp3, Register tmp4, Register tmp5, Register rdxReg,
1272 Register raxReg);
1273 void mul_add(Register out, Register in, Register offset, Register len, Register k, Register tmp1,
1274 Register tmp2, Register tmp3, Register tmp4, Register tmp5, Register rdxReg,
1275 Register raxReg);
1276 #endif
1277
1278 // CRC32 code for java.util.zip.CRC32::updateBytes() intrinsic.
1279 void update_byte_crc32(Register crc, Register val, Register table);
1280 void kernel_crc32(Register crc, Register buf, Register len, Register table, Register tmp);
1281 // CRC32C code for java.util.zip.CRC32C::updateBytes() intrinsic
1282 // Note on a naming convention:
1283 // Prefix w = register only used on a Westmere+ architecture
1284 // Prefix n = register only used on a Nehalem architecture
1285 #ifdef _LP64
1286 void crc32c_ipl_alg4(Register in_out, uint32_t n,
1287 Register tmp1, Register tmp2, Register tmp3);
1288 #else
1289 void crc32c_ipl_alg4(Register in_out, uint32_t n,
1290 Register tmp1, Register tmp2, Register tmp3,
1291 XMMRegister xtmp1, XMMRegister xtmp2);
1292 #endif
1293 void crc32c_pclmulqdq(XMMRegister w_xtmp1,
1294 Register in_out,
1295 uint32_t const_or_pre_comp_const_index, bool is_pclmulqdq_supported,
1296 XMMRegister w_xtmp2,
1297 Register tmp1,
1298 Register n_tmp2, Register n_tmp3);
1299 void crc32c_rec_alt2(uint32_t const_or_pre_comp_const_index_u1, uint32_t const_or_pre_comp_const_index_u2, bool is_pclmulqdq_supported, Register in_out, Register in1, Register in2,
1300 XMMRegister w_xtmp1, XMMRegister w_xtmp2, XMMRegister w_xtmp3,
1301 Register tmp1, Register tmp2,
1302 Register n_tmp3);
1303 void crc32c_proc_chunk(uint32_t size, uint32_t const_or_pre_comp_const_index_u1, uint32_t const_or_pre_comp_const_index_u2, bool is_pclmulqdq_supported,
1304 Register in_out1, Register in_out2, Register in_out3,
1305 Register tmp1, Register tmp2, Register tmp3,
1306 XMMRegister w_xtmp1, XMMRegister w_xtmp2, XMMRegister w_xtmp3,
1307 Register tmp4, Register tmp5,
1308 Register n_tmp6);
1309 void crc32c_ipl_alg2_alt2(Register in_out, Register in1, Register in2,
1310 Register tmp1, Register tmp2, Register tmp3,
1311 Register tmp4, Register tmp5, Register tmp6,
1312 XMMRegister w_xtmp1, XMMRegister w_xtmp2, XMMRegister w_xtmp3,
1313 bool is_pclmulqdq_supported);
1314 // Fold 128-bit data chunk
1315 void fold_128bit_crc32(XMMRegister xcrc, XMMRegister xK, XMMRegister xtmp, Register buf, int offset);
1316 void fold_128bit_crc32(XMMRegister xcrc, XMMRegister xK, XMMRegister xtmp, XMMRegister xbuf);
1317 // Fold 8-bit data
1318 void fold_8bit_crc32(Register crc, Register table, Register tmp);
1319 void fold_8bit_crc32(XMMRegister crc, Register table, XMMRegister xtmp, Register tmp);
1320
1321 #undef VIRTUAL
1322
1323 };
1324
1325 /**
1326 * class SkipIfEqual:
1327 *
1328 * Instantiating this class will result in assembly code being output that will
1329 * jump around any code emitted between the creation of the instance and it's
1330 * automatic destruction at the end of a scope block, depending on the value of
1331 * the flag passed to the constructor, which will be checked at run-time.
1332 */
1333 class SkipIfEqual {
|