src/cpu/x86/vm/assembler_x86.hpp

changeset 2602
41d4973cf100
parent 2569
6bbaedb03534
child 2686
b40d4fa697bf
child 2781
e1162778c1c8
equal deleted inserted replaced
2601:8190d4b75e09 2602:41d4973cf100
1119 void movb(Address dst, int imm8); 1119 void movb(Address dst, int imm8);
1120 void movb(Register dst, Address src); 1120 void movb(Register dst, Address src);
1121 1121
1122 void movdl(XMMRegister dst, Register src); 1122 void movdl(XMMRegister dst, Register src);
1123 void movdl(Register dst, XMMRegister src); 1123 void movdl(Register dst, XMMRegister src);
1124 void movdl(XMMRegister dst, Address src);
1124 1125
1125 // Move Double Quadword 1126 // Move Double Quadword
1126 void movdq(XMMRegister dst, Register src); 1127 void movdq(XMMRegister dst, Register src);
1127 void movdq(Register dst, XMMRegister src); 1128 void movdq(Register dst, XMMRegister src);
1128 1129
1286 1287
1287 // Shuffle Packed Low Words 1288 // Shuffle Packed Low Words
1288 void pshuflw(XMMRegister dst, XMMRegister src, int mode); 1289 void pshuflw(XMMRegister dst, XMMRegister src, int mode);
1289 void pshuflw(XMMRegister dst, Address src, int mode); 1290 void pshuflw(XMMRegister dst, Address src, int mode);
1290 1291
1291 // Shift Right Logical Quadword Immediate 1292 // Shift Right by bits Logical Quadword Immediate
1292 void psrlq(XMMRegister dst, int shift); 1293 void psrlq(XMMRegister dst, int shift);
1294
1295 // Shift Right by bytes Logical DoubleQuadword Immediate
1296 void psrldq(XMMRegister dst, int shift);
1293 1297
1294 // Logical Compare Double Quadword 1298 // Logical Compare Double Quadword
1295 void ptest(XMMRegister dst, XMMRegister src); 1299 void ptest(XMMRegister dst, XMMRegister src);
1296 void ptest(XMMRegister dst, Address src); 1300 void ptest(XMMRegister dst, Address src);
1297 1301
2288 // sign extend as need a l to ptr sized element 2292 // sign extend as need a l to ptr sized element
2289 void movl2ptr(Register dst, Address src) { LP64_ONLY(movslq(dst, src)) NOT_LP64(movl(dst, src)); } 2293 void movl2ptr(Register dst, Address src) { LP64_ONLY(movslq(dst, src)) NOT_LP64(movl(dst, src)); }
2290 void movl2ptr(Register dst, Register src) { LP64_ONLY(movslq(dst, src)) NOT_LP64(if (dst != src) movl(dst, src)); } 2294 void movl2ptr(Register dst, Register src) { LP64_ONLY(movslq(dst, src)) NOT_LP64(if (dst != src) movl(dst, src)); }
2291 2295
2292 // IndexOf strings. 2296 // IndexOf strings.
2297 // Small strings are loaded through stack if they cross page boundary.
2293 void string_indexof(Register str1, Register str2, 2298 void string_indexof(Register str1, Register str2,
2294 Register cnt1, Register cnt2, Register result, 2299 Register cnt1, Register cnt2,
2300 int int_cnt2, Register result,
2295 XMMRegister vec, Register tmp); 2301 XMMRegister vec, Register tmp);
2302
2303 // IndexOf for constant substrings with size >= 8 elements
2304 // which don't need to be loaded through stack.
2305 void string_indexofC8(Register str1, Register str2,
2306 Register cnt1, Register cnt2,
2307 int int_cnt2, Register result,
2308 XMMRegister vec, Register tmp);
2309
2310 // Smallest code: we don't need to load through stack,
2311 // check string tail.
2296 2312
2297 // Compare strings. 2313 // Compare strings.
2298 void string_compare(Register str1, Register str2, 2314 void string_compare(Register str1, Register str2,
2299 Register cnt1, Register cnt2, Register result, 2315 Register cnt1, Register cnt2, Register result,
2300 XMMRegister vec1); 2316 XMMRegister vec1);

mercurial