graal/com.oracle.graal.asm.amd64/src/com/oracle/graal/asm/amd64/AMD64Assembler.java
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File basic-graal Sdiff graal/com.oracle.graal.asm.amd64/src/com/oracle/graal/asm/amd64

graal/com.oracle.graal.asm.amd64/src/com/oracle/graal/asm/amd64/AMD64Assembler.java

Print this page




 483         int encode = prefixAndEncode(dst.encoding, src.encoding);
 484         emitByte(0x23);
 485         emitByte(0xC0 | encode);
 486     }
 487 
 488     public final void bsfq(Register dst, Register src) {
 489         int encode = prefixqAndEncode(dst.encoding, src.encoding);
 490         emitByte(0x0F);
 491         emitByte(0xBC);
 492         emitByte(0xC0 | encode);
 493     }
 494 
 495     public final void bsfq(Register dst, AMD64Address src) {
 496         prefixq(src, dst);
 497         emitByte(0x0F);
 498         emitByte(0xBC);
 499         emitOperandHelper(dst, src);
 500     }
 501 
 502     public final void bsrq(Register dst, Register src) {
 503         assert !supports(CPUFeature.LZCNT);
 504         int encode = prefixqAndEncode(dst.encoding, src.encoding);
 505         emitByte(0x0F);
 506         emitByte(0xBD);
 507         emitByte(0xC0 | encode);
 508     }
 509 
 510     public final void bsrq(Register dst, AMD64Address src) {
 511         assert !supports(CPUFeature.LZCNT);
 512         prefixq(src, dst);
 513         emitByte(0x0F);
 514         emitByte(0xBD);
 515         emitOperandHelper(dst, src);
 516     }
 517 
 518     public final void bsrl(Register dst, Register src) {
 519         assert !supports(CPUFeature.LZCNT);
 520         int encode = prefixAndEncode(dst.encoding, src.encoding);
 521         emitByte(0x0F);
 522         emitByte(0xBD);
 523         emitByte(0xC0 | encode);
 524     }
 525 
 526     public final void bsrl(Register dst, AMD64Address src) {
 527         assert !supports(CPUFeature.LZCNT);
 528         prefix(src, dst);
 529         emitByte(0x0F);
 530         emitByte(0xBD);
 531         emitOperandHelper(dst, src);
 532     }
 533 
 534     public final void bswapl(Register reg) {
 535         int encode = prefixAndEncode(reg.encoding);
 536         emitByte(0x0F);
 537         emitByte(0xC8 | encode);
 538     }
 539 
 540     public final void cdql() {
 541         emitByte(0x99);
 542     }
 543 
 544     public final void cmovl(ConditionFlag cc, Register dst, Register src) {
 545         int encode = prefixAndEncode(dst.encoding, src.encoding);
 546         emitByte(0x0F);
 547         emitByte(0x40 | cc.getValue());


1310         emitByte(0xC0 | encode);
1311     }
1312 
1313     public final void negl(Register dst) {
1314         int encode = prefixAndEncode(dst.encoding);
1315         emitByte(0xF7);
1316         emitByte(0xD8 | encode);
1317     }
1318 
1319     public final void notl(Register dst) {
1320         int encode = prefixAndEncode(dst.encoding);
1321         emitByte(0xF7);
1322         emitByte(0xD0 | encode);
1323     }
1324 
1325     @Override
1326     public final void ensureUniquePC() {
1327         nop();
1328     }
1329 




































1330     public final void nop() {
1331         nop(1);
1332     }
1333 
1334     public void nop(int count) {
1335         int i = count;
1336         if (UseNormalNop) {
1337             assert i > 0 : " ";
1338             // The fancy nops aren't currently recognized by debuggers making it a
1339             // pain to disassemble code while debugging. If assert are on clearly
1340             // speed is not an issue so simply use the single byte traditional nop
1341             // to do alignment.
1342 
1343             for (; i > 0; i--) {
1344                 emitByte(0x90);
1345             }
1346             return;
1347         }
1348 
1349         if (UseAddressNop) {


1861 
1862     public final void testl(AMD64Address dst, int imm32) {
1863         prefix(dst);
1864         emitByte(0xF7);
1865         emitOperandHelper(0, dst);
1866         emitInt(imm32);
1867     }
1868 
1869     public final void testl(Register dst, Register src) {
1870         int encode = prefixAndEncode(dst.encoding, src.encoding);
1871         emitByte(0x85);
1872         emitByte(0xC0 | encode);
1873     }
1874 
1875     public final void testl(Register dst, AMD64Address src) {
1876         prefix(src, dst);
1877         emitByte(0x85);
1878         emitOperandHelper(dst, src);
1879     }
1880 




































1881     public final void ucomisd(Register dst, AMD64Address src) {
1882         assert dst.getRegisterCategory().equals(AMD64.XMM);
1883         emitByte(0x66);
1884         ucomiss(dst, src);
1885     }
1886 
1887     public final void ucomisd(Register dst, Register src) {
1888         assert dst.getRegisterCategory().equals(AMD64.XMM);
1889         assert src.getRegisterCategory().equals(AMD64.XMM);
1890         emitByte(0x66);
1891         ucomiss(dst, src);
1892     }
1893 
1894     public final void ucomiss(Register dst, AMD64Address src) {
1895         assert dst.getRegisterCategory().equals(AMD64.XMM);
1896 
1897         prefix(src, dst);
1898         emitByte(0x0F);
1899         emitByte(0x2E);
1900         emitOperandHelper(dst, src);




 483         int encode = prefixAndEncode(dst.encoding, src.encoding);
 484         emitByte(0x23);
 485         emitByte(0xC0 | encode);
 486     }
 487 
 488     public final void bsfq(Register dst, Register src) {
 489         int encode = prefixqAndEncode(dst.encoding, src.encoding);
 490         emitByte(0x0F);
 491         emitByte(0xBC);
 492         emitByte(0xC0 | encode);
 493     }
 494 
 495     public final void bsfq(Register dst, AMD64Address src) {
 496         prefixq(src, dst);
 497         emitByte(0x0F);
 498         emitByte(0xBC);
 499         emitOperandHelper(dst, src);
 500     }
 501 
 502     public final void bsrq(Register dst, Register src) {

 503         int encode = prefixqAndEncode(dst.encoding, src.encoding);
 504         emitByte(0x0F);
 505         emitByte(0xBD);
 506         emitByte(0xC0 | encode);
 507     }
 508 
 509     public final void bsrq(Register dst, AMD64Address src) {

 510         prefixq(src, dst);
 511         emitByte(0x0F);
 512         emitByte(0xBD);
 513         emitOperandHelper(dst, src);
 514     }
 515 
 516     public final void bsrl(Register dst, Register src) {

 517         int encode = prefixAndEncode(dst.encoding, src.encoding);
 518         emitByte(0x0F);
 519         emitByte(0xBD);
 520         emitByte(0xC0 | encode);
 521     }
 522 
 523     public final void bsrl(Register dst, AMD64Address src) {

 524         prefix(src, dst);
 525         emitByte(0x0F);
 526         emitByte(0xBD);
 527         emitOperandHelper(dst, src);
 528     }
 529 
 530     public final void bswapl(Register reg) {
 531         int encode = prefixAndEncode(reg.encoding);
 532         emitByte(0x0F);
 533         emitByte(0xC8 | encode);
 534     }
 535 
 536     public final void cdql() {
 537         emitByte(0x99);
 538     }
 539 
 540     public final void cmovl(ConditionFlag cc, Register dst, Register src) {
 541         int encode = prefixAndEncode(dst.encoding, src.encoding);
 542         emitByte(0x0F);
 543         emitByte(0x40 | cc.getValue());


1306         emitByte(0xC0 | encode);
1307     }
1308 
1309     public final void negl(Register dst) {
1310         int encode = prefixAndEncode(dst.encoding);
1311         emitByte(0xF7);
1312         emitByte(0xD8 | encode);
1313     }
1314 
1315     public final void notl(Register dst) {
1316         int encode = prefixAndEncode(dst.encoding);
1317         emitByte(0xF7);
1318         emitByte(0xD0 | encode);
1319     }
1320 
1321     @Override
1322     public final void ensureUniquePC() {
1323         nop();
1324     }
1325 
1326     public final void lzcntl(Register dst, Register src) {
1327         assert supports(CPUFeature.LZCNT);
1328         emitByte(0xF3);
1329         int encode = prefixAndEncode(dst.encoding, src.encoding);
1330         emitByte(0x0F);
1331         emitByte(0xBD);
1332         emitByte(0xC0 | encode);
1333     }
1334 
1335     public final void lzcntq(Register dst, Register src) {
1336         assert supports(CPUFeature.LZCNT);
1337         emitByte(0xF3);
1338         int encode = prefixqAndEncode(dst.encoding, src.encoding);
1339         emitByte(0x0F);
1340         emitByte(0xBD);
1341         emitByte(0xC0 | encode);
1342     }
1343 
1344     public final void lzcntl(Register dst, AMD64Address src) {
1345         assert supports(CPUFeature.LZCNT);
1346         emitByte(0xF3);
1347         prefix(src, dst);
1348         emitByte(0x0F);
1349         emitByte(0xBD);
1350         emitOperandHelper(dst, src);
1351     }
1352 
1353     public final void lzcntq(Register dst, AMD64Address src) {
1354         assert supports(CPUFeature.LZCNT);
1355         emitByte(0xF3);
1356         prefixq(src, dst);
1357         emitByte(0x0F);
1358         emitByte(0xBD);
1359         emitOperandHelper(dst, src);
1360     }
1361 
1362     public final void nop() {
1363         nop(1);
1364     }
1365 
1366     public void nop(int count) {
1367         int i = count;
1368         if (UseNormalNop) {
1369             assert i > 0 : " ";
1370             // The fancy nops aren't currently recognized by debuggers making it a
1371             // pain to disassemble code while debugging. If assert are on clearly
1372             // speed is not an issue so simply use the single byte traditional nop
1373             // to do alignment.
1374 
1375             for (; i > 0; i--) {
1376                 emitByte(0x90);
1377             }
1378             return;
1379         }
1380 
1381         if (UseAddressNop) {


1893 
1894     public final void testl(AMD64Address dst, int imm32) {
1895         prefix(dst);
1896         emitByte(0xF7);
1897         emitOperandHelper(0, dst);
1898         emitInt(imm32);
1899     }
1900 
1901     public final void testl(Register dst, Register src) {
1902         int encode = prefixAndEncode(dst.encoding, src.encoding);
1903         emitByte(0x85);
1904         emitByte(0xC0 | encode);
1905     }
1906 
1907     public final void testl(Register dst, AMD64Address src) {
1908         prefix(src, dst);
1909         emitByte(0x85);
1910         emitOperandHelper(dst, src);
1911     }
1912 
1913     public final void tzcntl(Register dst, Register src) {
1914         assert supports(CPUFeature.BMI1);
1915         emitByte(0xF3);
1916         int encode = prefixAndEncode(dst.encoding, src.encoding);
1917         emitByte(0x0F);
1918         emitByte(0xBC);
1919         emitByte(0xC0 | encode);
1920     }
1921 
1922     public final void tzcntq(Register dst, Register src) {
1923         assert supports(CPUFeature.BMI1);
1924         emitByte(0xF3);
1925         int encode = prefixqAndEncode(dst.encoding, src.encoding);
1926         emitByte(0x0F);
1927         emitByte(0xBC);
1928         emitByte(0xC0 | encode);
1929     }
1930 
1931     public final void tzcntl(Register dst, AMD64Address src) {
1932         assert supports(CPUFeature.BMI1);
1933         emitByte(0xF3);
1934         prefix(src, dst);
1935         emitByte(0x0F);
1936         emitByte(0xBC);
1937         emitOperandHelper(dst, src);
1938     }
1939 
1940     public final void tzcntq(Register dst, AMD64Address src) {
1941         assert supports(CPUFeature.BMI1);
1942         emitByte(0xF3);
1943         prefixq(src, dst);
1944         emitByte(0x0F);
1945         emitByte(0xBC);
1946         emitOperandHelper(dst, src);
1947     }
1948 
1949     public final void ucomisd(Register dst, AMD64Address src) {
1950         assert dst.getRegisterCategory().equals(AMD64.XMM);
1951         emitByte(0x66);
1952         ucomiss(dst, src);
1953     }
1954 
1955     public final void ucomisd(Register dst, Register src) {
1956         assert dst.getRegisterCategory().equals(AMD64.XMM);
1957         assert src.getRegisterCategory().equals(AMD64.XMM);
1958         emitByte(0x66);
1959         ucomiss(dst, src);
1960     }
1961 
1962     public final void ucomiss(Register dst, AMD64Address src) {
1963         assert dst.getRegisterCategory().equals(AMD64.XMM);
1964 
1965         prefix(src, dst);
1966         emitByte(0x0F);
1967         emitByte(0x2E);
1968         emitOperandHelper(dst, src);


graal/com.oracle.graal.asm.amd64/src/com/oracle/graal/asm/amd64/AMD64Assembler.java
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File