3395 int size = MIN2(16,(int)MaxVectorSize); 3396 // Minimum 2 values in vector 3397 if (size < 2*type2aelembytes(bt)) size = 0; 3398 // But never < 4 3399 if (size < 4) size = 0; 3400 return size; 3401 } 3402 3403 // Limits on vector size (number of elements) loaded into vector. 3404 const int Matcher::max_vector_size(const BasicType bt) { 3405 return vector_width_in_bytes(bt)/type2aelembytes(bt); 3406 } 3407 const int Matcher::min_vector_size(const BasicType bt) { 3408 // For the moment limit the vector size to 8 bytes 3409 int size = 8 / type2aelembytes(bt); 3410 if (size < 2) size = 2; 3411 return size; 3412 } 3413 3414 // Vector ideal reg. 3415 const int Matcher::vector_ideal_reg(int len) { 3416 switch(len) { 3417 case 8: return Op_VecD; 3418 case 16: return Op_VecX; 3419 } 3420 ShouldNotReachHere(); 3421 return 0; 3422 } 3423 3424 const int Matcher::vector_shift_count_ideal_reg(int size) { 3425 return Op_VecX; 3426 } 3427 3428 // AES support not yet implemented 3429 const bool Matcher::pass_original_key_for_aes() { 3430 return false; 3431 } 3432 3433 // x86 supports misaligned vectors store/load. 3434 const bool Matcher::misaligned_vectors_ok() { 3435 return !AlignVector; // can be changed by flag 3436 } 3437 3438 // false => size gets scaled to BytesPerLong, ok. 3439 const bool Matcher::init_array_count_is_in_bytes = false; 3440 3441 // Use conditional move (CMOVL) 3442 const int Matcher::long_cmove_cost() { 3443 // long cmoves are no more expensive than int cmoves 3444 return 0; 3445 } | 3395 int size = MIN2(16,(int)MaxVectorSize); 3396 // Minimum 2 values in vector 3397 if (size < 2*type2aelembytes(bt)) size = 0; 3398 // But never < 4 3399 if (size < 4) size = 0; 3400 return size; 3401 } 3402 3403 // Limits on vector size (number of elements) loaded into vector. 3404 const int Matcher::max_vector_size(const BasicType bt) { 3405 return vector_width_in_bytes(bt)/type2aelembytes(bt); 3406 } 3407 const int Matcher::min_vector_size(const BasicType bt) { 3408 // For the moment limit the vector size to 8 bytes 3409 int size = 8 / type2aelembytes(bt); 3410 if (size < 2) size = 2; 3411 return size; 3412 } 3413 3414 // Vector ideal reg. 3415 const Opcodes Matcher::vector_ideal_reg(int len) { 3416 switch(len) { 3417 case 8: return Opcodes::Op_VecD; 3418 case 16: return Opcodes::Op_VecX; 3419 } 3420 ShouldNotReachHere(); 3421 return 0; 3422 } 3423 3424 const Opcodes Matcher::vector_shift_count_ideal_reg(int size) { 3425 return Opcodes::Op_VecX; 3426 } 3427 3428 // AES support not yet implemented 3429 const bool Matcher::pass_original_key_for_aes() { 3430 return false; 3431 } 3432 3433 // x86 supports misaligned vectors store/load. 3434 const bool Matcher::misaligned_vectors_ok() { 3435 return !AlignVector; // can be changed by flag 3436 } 3437 3438 // false => size gets scaled to BytesPerLong, ok. 3439 const bool Matcher::init_array_count_is_in_bytes = false; 3440 3441 // Use conditional move (CMOVL) 3442 const int Matcher::long_cmove_cost() { 3443 // long cmoves are no more expensive than int cmoves 3444 return 0; 3445 } |