src/cpu/x86/vm/macroAssembler_x86.cpp

changeset 4410
00af3a3a8df4
parent 4366
d02120b7a34f
child 4411
e2e6bf86682c
equal deleted inserted replaced
4409:d092d1b31229 4410:00af3a3a8df4
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,

mercurial