5222 } |
5222 } |
5223 #endif |
5223 #endif |
5224 |
5224 |
5225 } |
5225 } |
5226 |
5226 |
|
5227 void MacroAssembler::clear_mem(Register base, Register cnt, Register tmp) { |
|
5228 // cnt - number of qwords (8-byte words). |
|
5229 // base - start address, qword aligned. |
|
5230 assert(base==rdi, "base register must be edi for rep stos"); |
|
5231 assert(tmp==rax, "tmp register must be eax for rep stos"); |
|
5232 assert(cnt==rcx, "cnt register must be ecx for rep stos"); |
|
5233 |
|
5234 xorptr(tmp, tmp); |
|
5235 if (UseFastStosb) { |
|
5236 shlptr(cnt,3); // convert to number of bytes |
|
5237 rep_stosb(); |
|
5238 } else { |
|
5239 NOT_LP64(shlptr(cnt,1);) // convert to number of dwords for 32-bit VM |
|
5240 rep_stos(); |
|
5241 } |
|
5242 } |
5227 |
5243 |
5228 // IndexOf for constant substrings with size >= 8 chars |
5244 // IndexOf for constant substrings with size >= 8 chars |
5229 // which don't need to be loaded through stack. |
5245 // which don't need to be loaded through stack. |
5230 void MacroAssembler::string_indexofC8(Register str1, Register str2, |
5246 void MacroAssembler::string_indexofC8(Register str1, Register str2, |
5231 Register cnt1, Register cnt2, |
5247 Register cnt1, Register cnt2, |