comparison src/cpu/x86/vm/assembler_x86.hpp @ 20804:7848fc12602b

Merge with jdk8u40-b25
author Gilles Duboscq <gilles.m.duboscq@oracle.com>
date Tue, 07 Apr 2015 14:58:49 +0200
parents 52b4284cb496 166d744df0de
children
comparison
equal deleted inserted replaced
20184:84105dcdb05b 20804:7848fc12602b
890 void addq(Address dst, Register src); 890 void addq(Address dst, Register src);
891 void addq(Register dst, int32_t imm32); 891 void addq(Register dst, int32_t imm32);
892 void addq(Register dst, Address src); 892 void addq(Register dst, Address src);
893 void addq(Register dst, Register src); 893 void addq(Register dst, Register src);
894 894
895 #ifdef _LP64
896 //Add Unsigned Integers with Carry Flag
897 void adcxq(Register dst, Register src);
898
899 //Add Unsigned Integers with Overflow Flag
900 void adoxq(Register dst, Register src);
901 #endif
902
895 void addr_nop_4(); 903 void addr_nop_4();
896 void addr_nop_5(); 904 void addr_nop_5();
897 void addr_nop_7(); 905 void addr_nop_7();
898 void addr_nop_8(); 906 void addr_nop_8();
899 907
1206 void hlt(); 1214 void hlt();
1207 1215
1208 void idivl(Register src); 1216 void idivl(Register src);
1209 void divl(Register src); // Unsigned division 1217 void divl(Register src); // Unsigned division
1210 1218
1219 #ifdef _LP64
1211 void idivq(Register src); 1220 void idivq(Register src);
1221 #endif
1212 1222
1213 void imull(Register dst, Register src); 1223 void imull(Register dst, Register src);
1214 void imull(Register dst, Register src, int value); 1224 void imull(Register dst, Register src, int value);
1215 void imull(Register dst, Address src); 1225 void imull(Register dst, Address src);
1216 1226
1227 #ifdef _LP64
1217 void imulq(Register dst, Register src); 1228 void imulq(Register dst, Register src);
1218 void imulq(Register dst, Register src, int value); 1229 void imulq(Register dst, Register src, int value);
1219 #ifdef _LP64
1220 void imulq(Register dst, Address src); 1230 void imulq(Register dst, Address src);
1221 #endif 1231 #endif
1222
1223 1232
1224 // jcc is the generic conditional branch generator to run- 1233 // jcc is the generic conditional branch generator to run-
1225 // time routines, jcc is used for branches to labels. jcc 1234 // time routines, jcc is used for branches to labels. jcc
1226 // takes a branch opcode (cc) and a label (L) and generates 1235 // takes a branch opcode (cc) and a label (L) and generates
1227 // either a backward branch or a forward branch and links it 1236 // either a backward branch or a forward branch and links it
1410 #ifdef _LP64 1419 #ifdef _LP64
1411 void movzwq(Register dst, Address src); 1420 void movzwq(Register dst, Address src);
1412 void movzwq(Register dst, Register src); 1421 void movzwq(Register dst, Register src);
1413 #endif 1422 #endif
1414 1423
1424 // Unsigned multiply with RAX destination register
1415 void mull(Address src); 1425 void mull(Address src);
1416 void mull(Register src); 1426 void mull(Register src);
1427
1428 #ifdef _LP64
1429 void mulq(Address src);
1430 void mulq(Register src);
1431 void mulxq(Register dst1, Register dst2, Register src);
1432 #endif
1417 1433
1418 // Multiply Scalar Double-Precision Floating-Point Values 1434 // Multiply Scalar Double-Precision Floating-Point Values
1419 void mulsd(XMMRegister dst, Address src); 1435 void mulsd(XMMRegister dst, Address src);
1420 void mulsd(XMMRegister dst, XMMRegister src); 1436 void mulsd(XMMRegister dst, XMMRegister src);
1421 1437
1542 void rclq(Register dst, int imm8); 1558 void rclq(Register dst, int imm8);
1543 1559
1544 void rdtsc(); 1560 void rdtsc();
1545 1561
1546 void ret(int imm16); 1562 void ret(int imm16);
1563
1564 #ifdef _LP64
1565 void rorq(Register dst, int imm8);
1566 void rorxq(Register dst, Register src, int imm8);
1567 #endif
1547 1568
1548 void sahf(); 1569 void sahf();
1549 1570
1550 void sarl(Register dst, int imm8); 1571 void sarl(Register dst, int imm8);
1551 void sarl(Register dst); 1572 void sarl(Register dst);
1839 1860
1840 // duplicate 4-bytes integer data from src into 8 locations in dest 1861 // duplicate 4-bytes integer data from src into 8 locations in dest
1841 void vpbroadcastd(XMMRegister dst, XMMRegister src); 1862 void vpbroadcastd(XMMRegister dst, XMMRegister src);
1842 1863
1843 // Carry-Less Multiplication Quadword 1864 // Carry-Less Multiplication Quadword
1865 void pclmulqdq(XMMRegister dst, XMMRegister src, int mask);
1844 void vpclmulqdq(XMMRegister dst, XMMRegister nds, XMMRegister src, int mask); 1866 void vpclmulqdq(XMMRegister dst, XMMRegister nds, XMMRegister src, int mask);
1845 1867
1846 // AVX instruction which is used to clear upper 128 bits of YMM registers and 1868 // AVX instruction which is used to clear upper 128 bits of YMM registers and
1847 // to avoid transaction penalty between AVX and SSE states. There is no 1869 // to avoid transaction penalty between AVX and SSE states. There is no
1848 // penalty if legacy SSE instructions are encoded using VEX prefix because 1870 // penalty if legacy SSE instructions are encoded using VEX prefix because