Mercurial > hg > graal-compiler
comparison src/cpu/ppc/vm/assembler_ppc.hpp @ 20508:f6bde7889409
8059592: Recent bugfixes in ppc64 port.
Reviewed-by: kvn
author | goetz |
---|---|
date | Thu, 02 Oct 2014 09:32:53 +0200 |
parents | b384ba33c9a0 |
children |
comparison
equal
deleted
inserted
replaced
20507:43ce58b4717b | 20508:f6bde7889409 |
---|---|
266 CMPL_OPCODE = (31u << OPCODE_SHIFT | 32u << 1), | 266 CMPL_OPCODE = (31u << OPCODE_SHIFT | 32u << 1), |
267 CMPLI_OPCODE = (10u << OPCODE_SHIFT), | 267 CMPLI_OPCODE = (10u << OPCODE_SHIFT), |
268 | 268 |
269 ISEL_OPCODE = (31u << OPCODE_SHIFT | 15u << 1), | 269 ISEL_OPCODE = (31u << OPCODE_SHIFT | 15u << 1), |
270 | 270 |
271 MTLR_OPCODE = (31u << OPCODE_SHIFT | 467u << 1 | 8 << SPR_0_4_SHIFT), | 271 // Special purpose registers |
272 MFLR_OPCODE = (31u << OPCODE_SHIFT | 339u << 1 | 8 << SPR_0_4_SHIFT), | 272 MTSPR_OPCODE = (31u << OPCODE_SHIFT | 467u << 1), |
273 MFSPR_OPCODE = (31u << OPCODE_SHIFT | 339u << 1), | |
274 | |
275 MTXER_OPCODE = (MTSPR_OPCODE | 1 << SPR_0_4_SHIFT), | |
276 MFXER_OPCODE = (MFSPR_OPCODE | 1 << SPR_0_4_SHIFT), | |
277 | |
278 MTDSCR_OPCODE = (MTSPR_OPCODE | 3 << SPR_0_4_SHIFT), | |
279 MFDSCR_OPCODE = (MFSPR_OPCODE | 3 << SPR_0_4_SHIFT), | |
280 | |
281 MTLR_OPCODE = (MTSPR_OPCODE | 8 << SPR_0_4_SHIFT), | |
282 MFLR_OPCODE = (MFSPR_OPCODE | 8 << SPR_0_4_SHIFT), | |
283 | |
284 MTCTR_OPCODE = (MTSPR_OPCODE | 9 << SPR_0_4_SHIFT), | |
285 MFCTR_OPCODE = (MFSPR_OPCODE | 9 << SPR_0_4_SHIFT), | |
286 | |
287 MTTFHAR_OPCODE = (MTSPR_OPCODE | 128 << SPR_0_4_SHIFT), | |
288 MFTFHAR_OPCODE = (MFSPR_OPCODE | 128 << SPR_0_4_SHIFT), | |
289 MTTFIAR_OPCODE = (MTSPR_OPCODE | 129 << SPR_0_4_SHIFT), | |
290 MFTFIAR_OPCODE = (MFSPR_OPCODE | 129 << SPR_0_4_SHIFT), | |
291 MTTEXASR_OPCODE = (MTSPR_OPCODE | 130 << SPR_0_4_SHIFT), | |
292 MFTEXASR_OPCODE = (MFSPR_OPCODE | 130 << SPR_0_4_SHIFT), | |
293 MTTEXASRU_OPCODE = (MTSPR_OPCODE | 131 << SPR_0_4_SHIFT), | |
294 MFTEXASRU_OPCODE = (MFSPR_OPCODE | 131 << SPR_0_4_SHIFT), | |
295 | |
296 MTVRSAVE_OPCODE = (MTSPR_OPCODE | 256 << SPR_0_4_SHIFT), | |
297 MFVRSAVE_OPCODE = (MFSPR_OPCODE | 256 << SPR_0_4_SHIFT), | |
298 | |
299 MFTB_OPCODE = (MFSPR_OPCODE | 268 << SPR_0_4_SHIFT), | |
273 | 300 |
274 MTCRF_OPCODE = (31u << OPCODE_SHIFT | 144u << 1), | 301 MTCRF_OPCODE = (31u << OPCODE_SHIFT | 144u << 1), |
275 MFCR_OPCODE = (31u << OPCODE_SHIFT | 19u << 1), | 302 MFCR_OPCODE = (31u << OPCODE_SHIFT | 19u << 1), |
276 MCRF_OPCODE = (19u << OPCODE_SHIFT | 0u << 1), | 303 MCRF_OPCODE = (19u << OPCODE_SHIFT | 0u << 1), |
277 | 304 |
289 BXX_OPCODE = (18u << OPCODE_SHIFT), | 316 BXX_OPCODE = (18u << OPCODE_SHIFT), |
290 BCXX_OPCODE = (16u << OPCODE_SHIFT), | 317 BCXX_OPCODE = (16u << OPCODE_SHIFT), |
291 | 318 |
292 // CTR-related opcodes | 319 // CTR-related opcodes |
293 BCCTR_OPCODE = (19u << OPCODE_SHIFT | 528u << 1), | 320 BCCTR_OPCODE = (19u << OPCODE_SHIFT | 528u << 1), |
294 MTCTR_OPCODE = (31u << OPCODE_SHIFT | 467u << 1 | 9 << SPR_0_4_SHIFT), | |
295 MFCTR_OPCODE = (31u << OPCODE_SHIFT | 339u << 1 | 9 << SPR_0_4_SHIFT), | |
296 | |
297 | 321 |
298 LWZ_OPCODE = (32u << OPCODE_SHIFT), | 322 LWZ_OPCODE = (32u << OPCODE_SHIFT), |
299 LWZX_OPCODE = (31u << OPCODE_SHIFT | 23u << 1), | 323 LWZX_OPCODE = (31u << OPCODE_SHIFT | 23u << 1), |
300 LWZU_OPCODE = (33u << OPCODE_SHIFT), | 324 LWZU_OPCODE = (33u << OPCODE_SHIFT), |
301 LWBRX_OPCODE = (31u << OPCODE_SHIFT | 534 << 1), | 325 LWBRX_OPCODE = (31u << OPCODE_SHIFT | 534 << 1), |
582 // not implemented yet | 606 // not implemented yet |
583 | 607 |
584 // Vector Status and Control | 608 // Vector Status and Control |
585 MTVSCR_OPCODE = (4u << OPCODE_SHIFT | 1604u ), | 609 MTVSCR_OPCODE = (4u << OPCODE_SHIFT | 1604u ), |
586 MFVSCR_OPCODE = (4u << OPCODE_SHIFT | 1540u ), | 610 MFVSCR_OPCODE = (4u << OPCODE_SHIFT | 1540u ), |
611 | |
612 // AES (introduced with Power 8) | |
613 VCIPHER_OPCODE = (4u << OPCODE_SHIFT | 1288u), | |
614 VCIPHERLAST_OPCODE = (4u << OPCODE_SHIFT | 1289u), | |
615 VNCIPHER_OPCODE = (4u << OPCODE_SHIFT | 1352u), | |
616 VNCIPHERLAST_OPCODE = (4u << OPCODE_SHIFT | 1353u), | |
617 VSBOX_OPCODE = (4u << OPCODE_SHIFT | 1480u), | |
618 | |
619 // SHA (introduced with Power 8) | |
620 VSHASIGMAD_OPCODE = (4u << OPCODE_SHIFT | 1730u), | |
621 VSHASIGMAW_OPCODE = (4u << OPCODE_SHIFT | 1666u), | |
622 | |
623 // Vector Binary Polynomial Multiplication (introduced with Power 8) | |
624 VPMSUMB_OPCODE = (4u << OPCODE_SHIFT | 1032u), | |
625 VPMSUMD_OPCODE = (4u << OPCODE_SHIFT | 1224u), | |
626 VPMSUMH_OPCODE = (4u << OPCODE_SHIFT | 1096u), | |
627 VPMSUMW_OPCODE = (4u << OPCODE_SHIFT | 1160u), | |
628 | |
629 // Vector Permute and Xor (introduced with Power 8) | |
630 VPERMXOR_OPCODE = (4u << OPCODE_SHIFT | 45u), | |
631 | |
632 // Transactional Memory instructions (introduced with Power 8) | |
633 TBEGIN_OPCODE = (31u << OPCODE_SHIFT | 654u << 1), | |
634 TEND_OPCODE = (31u << OPCODE_SHIFT | 686u << 1), | |
635 TABORT_OPCODE = (31u << OPCODE_SHIFT | 910u << 1), | |
636 TABORTWC_OPCODE = (31u << OPCODE_SHIFT | 782u << 1), | |
637 TABORTWCI_OPCODE = (31u << OPCODE_SHIFT | 846u << 1), | |
638 TABORTDC_OPCODE = (31u << OPCODE_SHIFT | 814u << 1), | |
639 TABORTDCI_OPCODE = (31u << OPCODE_SHIFT | 878u << 1), | |
640 TSR_OPCODE = (31u << OPCODE_SHIFT | 750u << 1), | |
641 TCHECK_OPCODE = (31u << OPCODE_SHIFT | 718u << 1), | |
587 | 642 |
588 // Icache and dcache related instructions | 643 // Icache and dcache related instructions |
589 DCBA_OPCODE = (31u << OPCODE_SHIFT | 758u << 1), | 644 DCBA_OPCODE = (31u << OPCODE_SHIFT | 758u << 1), |
590 DCBZ_OPCODE = (31u << OPCODE_SHIFT | 1014u << 1), | 645 DCBZ_OPCODE = (31u << OPCODE_SHIFT | 1014u << 1), |
591 DCBST_OPCODE = (31u << OPCODE_SHIFT | 54u << 1), | 646 DCBST_OPCODE = (31u << OPCODE_SHIFT | 54u << 1), |
1417 inline void mfctr(Register d); | 1472 inline void mfctr(Register d); |
1418 inline void mtcrf(int fxm, Register s); | 1473 inline void mtcrf(int fxm, Register s); |
1419 inline void mfcr( Register d); | 1474 inline void mfcr( Register d); |
1420 inline void mcrf( ConditionRegister crd, ConditionRegister cra); | 1475 inline void mcrf( ConditionRegister crd, ConditionRegister cra); |
1421 inline void mtcr( Register s); | 1476 inline void mtcr( Register s); |
1477 | |
1478 // Special purpose registers | |
1479 // Exception Register | |
1480 inline void mtxer(Register s1); | |
1481 inline void mfxer(Register d); | |
1482 // Vector Register Save Register | |
1483 inline void mtvrsave(Register s1); | |
1484 inline void mfvrsave(Register d); | |
1485 // Timebase | |
1486 inline void mftb(Register d); | |
1487 // Introduced with Power 8: | |
1488 // Data Stream Control Register | |
1489 inline void mtdscr(Register s1); | |
1490 inline void mfdscr(Register d ); | |
1491 // Transactional Memory Registers | |
1492 inline void mftfhar(Register d); | |
1493 inline void mftfiar(Register d); | |
1494 inline void mftexasr(Register d); | |
1495 inline void mftexasru(Register d); | |
1422 | 1496 |
1423 // PPC 1, section 2.4.1 Branch Instructions | 1497 // PPC 1, section 2.4.1 Branch Instructions |
1424 inline void b( address a, relocInfo::relocType rt = relocInfo::none); | 1498 inline void b( address a, relocInfo::relocType rt = relocInfo::none); |
1425 inline void b( Label& L); | 1499 inline void b( Label& L); |
1426 inline void bl( address a, relocInfo::relocType rt = relocInfo::none); | 1500 inline void bl( address a, relocInfo::relocType rt = relocInfo::none); |
1858 inline void vsrah( VectorRegister d, VectorRegister a, VectorRegister b); | 1932 inline void vsrah( VectorRegister d, VectorRegister a, VectorRegister b); |
1859 // Vector Floating-Point not implemented yet | 1933 // Vector Floating-Point not implemented yet |
1860 inline void mtvscr( VectorRegister b); | 1934 inline void mtvscr( VectorRegister b); |
1861 inline void mfvscr( VectorRegister d); | 1935 inline void mfvscr( VectorRegister d); |
1862 | 1936 |
1937 // AES (introduced with Power 8) | |
1938 inline void vcipher( VectorRegister d, VectorRegister a, VectorRegister b); | |
1939 inline void vcipherlast( VectorRegister d, VectorRegister a, VectorRegister b); | |
1940 inline void vncipher( VectorRegister d, VectorRegister a, VectorRegister b); | |
1941 inline void vncipherlast(VectorRegister d, VectorRegister a, VectorRegister b); | |
1942 inline void vsbox( VectorRegister d, VectorRegister a); | |
1943 | |
1944 // SHA (introduced with Power 8) | |
1945 // Not yet implemented. | |
1946 | |
1947 // Vector Binary Polynomial Multiplication (introduced with Power 8) | |
1948 inline void vpmsumb( VectorRegister d, VectorRegister a, VectorRegister b); | |
1949 inline void vpmsumd( VectorRegister d, VectorRegister a, VectorRegister b); | |
1950 inline void vpmsumh( VectorRegister d, VectorRegister a, VectorRegister b); | |
1951 inline void vpmsumw( VectorRegister d, VectorRegister a, VectorRegister b); | |
1952 | |
1953 // Vector Permute and Xor (introduced with Power 8) | |
1954 inline void vpermxor( VectorRegister d, VectorRegister a, VectorRegister b, VectorRegister c); | |
1955 | |
1956 // Transactional Memory instructions (introduced with Power 8) | |
1957 inline void tbegin_(); // R=0 | |
1958 inline void tbeginrot_(); // R=1 Rollback-Only Transaction | |
1959 inline void tend_(); // A=0 | |
1960 inline void tendall_(); // A=1 | |
1961 inline void tabort_(Register a); | |
1962 inline void tabortwc_(int t, Register a, Register b); | |
1963 inline void tabortwci_(int t, Register a, int si); | |
1964 inline void tabortdc_(int t, Register a, Register b); | |
1965 inline void tabortdci_(int t, Register a, int si); | |
1966 inline void tsuspend_(); // tsr with L=0 | |
1967 inline void tresume_(); // tsr with L=1 | |
1968 inline void tcheck(int f); | |
1969 | |
1863 // The following encoders use r0 as second operand. These instructions | 1970 // The following encoders use r0 as second operand. These instructions |
1864 // read r0 as '0'. | 1971 // read r0 as '0'. |
1865 inline void lwzx( Register d, Register s2); | 1972 inline void lwzx( Register d, Register s2); |
1866 inline void lwz( Register d, int si16); | 1973 inline void lwz( Register d, int si16); |
1867 inline void lwax( Register d, Register s2); | 1974 inline void lwax( Register d, Register s2); |