src/cpu/ppc/vm/assembler_ppc.hpp

changeset 9687
846245a33793
parent 9684
69f33959c27f
child 9703
2fdf635bcf28
child 9713
c4567d28f31f
equal deleted inserted replaced
9686:025ce746a942 9687:846245a33793
470 470
471 // Vector-Scalar (VSX) instruction support. 471 // Vector-Scalar (VSX) instruction support.
472 LXVD2X_OPCODE = (31u << OPCODE_SHIFT | 844u << 1), 472 LXVD2X_OPCODE = (31u << OPCODE_SHIFT | 844u << 1),
473 STXVD2X_OPCODE = (31u << OPCODE_SHIFT | 972u << 1), 473 STXVD2X_OPCODE = (31u << OPCODE_SHIFT | 972u << 1),
474 MTVSRD_OPCODE = (31u << OPCODE_SHIFT | 179u << 1), 474 MTVSRD_OPCODE = (31u << OPCODE_SHIFT | 179u << 1),
475 MTVSRWZ_OPCODE = (31u << OPCODE_SHIFT | 243u << 1),
475 MFVSRD_OPCODE = (31u << OPCODE_SHIFT | 51u << 1), 476 MFVSRD_OPCODE = (31u << OPCODE_SHIFT | 51u << 1),
477 MFVSRWZ_OPCODE = (31u << OPCODE_SHIFT | 115u << 1),
478 XXPERMDI_OPCODE= (60u << OPCODE_SHIFT | 10u << 3),
479 XXMRGHW_OPCODE = (60u << OPCODE_SHIFT | 18u << 3),
480 XXMRGLW_OPCODE = (60u << OPCODE_SHIFT | 50u << 3),
476 481
477 // Vector Permute and Formatting 482 // Vector Permute and Formatting
478 VPKPX_OPCODE = (4u << OPCODE_SHIFT | 782u ), 483 VPKPX_OPCODE = (4u << OPCODE_SHIFT | 782u ),
479 VPKSHSS_OPCODE = (4u << OPCODE_SHIFT | 398u ), 484 VPKSHSS_OPCODE = (4u << OPCODE_SHIFT | 398u ),
480 VPKSWSS_OPCODE = (4u << OPCODE_SHIFT | 462u ), 485 VPKSWSS_OPCODE = (4u << OPCODE_SHIFT | 462u ),
520 VADDSBS_OPCODE = (4u << OPCODE_SHIFT | 768u ), 525 VADDSBS_OPCODE = (4u << OPCODE_SHIFT | 768u ),
521 VADDSWS_OPCODE = (4u << OPCODE_SHIFT | 896u ), 526 VADDSWS_OPCODE = (4u << OPCODE_SHIFT | 896u ),
522 VADDUBM_OPCODE = (4u << OPCODE_SHIFT | 0u ), 527 VADDUBM_OPCODE = (4u << OPCODE_SHIFT | 0u ),
523 VADDUWM_OPCODE = (4u << OPCODE_SHIFT | 128u ), 528 VADDUWM_OPCODE = (4u << OPCODE_SHIFT | 128u ),
524 VADDUHM_OPCODE = (4u << OPCODE_SHIFT | 64u ), 529 VADDUHM_OPCODE = (4u << OPCODE_SHIFT | 64u ),
530 VADDUDM_OPCODE = (4u << OPCODE_SHIFT | 192u ),
525 VADDUBS_OPCODE = (4u << OPCODE_SHIFT | 512u ), 531 VADDUBS_OPCODE = (4u << OPCODE_SHIFT | 512u ),
526 VADDUWS_OPCODE = (4u << OPCODE_SHIFT | 640u ), 532 VADDUWS_OPCODE = (4u << OPCODE_SHIFT | 640u ),
527 VADDUHS_OPCODE = (4u << OPCODE_SHIFT | 576u ), 533 VADDUHS_OPCODE = (4u << OPCODE_SHIFT | 576u ),
528 VSUBCUW_OPCODE = (4u << OPCODE_SHIFT | 1408u ), 534 VSUBCUW_OPCODE = (4u << OPCODE_SHIFT | 1408u ),
529 VSUBSHS_OPCODE = (4u << OPCODE_SHIFT | 1856u ), 535 VSUBSHS_OPCODE = (4u << OPCODE_SHIFT | 1856u ),
1054 static int vrb( VectorRegister r) { return vrb(r->encoding());} 1060 static int vrb( VectorRegister r) { return vrb(r->encoding());}
1055 static int vrc( VectorRegister r) { return vrc(r->encoding());} 1061 static int vrc( VectorRegister r) { return vrc(r->encoding());}
1056 static int vrs( VectorRegister r) { return vrs(r->encoding());} 1062 static int vrs( VectorRegister r) { return vrs(r->encoding());}
1057 static int vrt( VectorRegister r) { return vrt(r->encoding());} 1063 static int vrt( VectorRegister r) { return vrt(r->encoding());}
1058 1064
1065 // Only used on SHA sigma instructions (VX-form)
1066 static int vst( int x) { return opp_u_field(x, 16, 16); }
1067 static int vsix( int x) { return opp_u_field(x, 20, 17); }
1068
1059 // Support Vector-Scalar (VSX) instructions. 1069 // Support Vector-Scalar (VSX) instructions.
1060 static int vsra( int x) { return opp_u_field(x, 15, 11); } 1070 static int vsra( int x) { return opp_u_field(x & 0x1F, 15, 11) | opp_u_field((x & 0x20) >> 5, 29, 29); }
1061 static int vsrb( int x) { return opp_u_field(x, 20, 16); } 1071 static int vsrb( int x) { return opp_u_field(x & 0x1F, 20, 16) | opp_u_field((x & 0x20) >> 5, 30, 30); }
1062 static int vsrc( int x) { return opp_u_field(x, 25, 21); } 1072 static int vsrs( int x) { return opp_u_field(x & 0x1F, 10, 6) | opp_u_field((x & 0x20) >> 5, 31, 31); }
1063 static int vsrs( int x) { return opp_u_field(x, 10, 6); } 1073 static int vsrt( int x) { return vsrs(x); }
1064 static int vsrt( int x) { return opp_u_field(x, 10, 6); } 1074 static int vsdm( int x) { return opp_u_field(x, 23, 22); }
1065 1075
1066 static int vsra( VectorSRegister r) { return vsra(r->encoding());} 1076 static int vsra( VectorSRegister r) { return vsra(r->encoding());}
1067 static int vsrb( VectorSRegister r) { return vsrb(r->encoding());} 1077 static int vsrb( VectorSRegister r) { return vsrb(r->encoding());}
1068 static int vsrc( VectorSRegister r) { return vsrc(r->encoding());}
1069 static int vsrs( VectorSRegister r) { return vsrs(r->encoding());} 1078 static int vsrs( VectorSRegister r) { return vsrs(r->encoding());}
1070 static int vsrt( VectorSRegister r) { return vsrt(r->encoding());} 1079 static int vsrt( VectorSRegister r) { return vsrt(r->encoding());}
1071 1080
1072 static int vsplt_uim( int x) { return opp_u_field(x, 15, 12); } // for vsplt* instructions 1081 static int vsplt_uim( int x) { return opp_u_field(x, 15, 12); } // for vsplt* instructions
1073 static int vsplti_sim(int x) { return opp_u_field(x, 15, 11); } // for vsplti* instructions 1082 static int vsplti_sim(int x) { return opp_u_field(x, 15, 11); } // for vsplti* instructions
1867 inline void vaddsbs( VectorRegister d, VectorRegister a, VectorRegister b); 1876 inline void vaddsbs( VectorRegister d, VectorRegister a, VectorRegister b);
1868 inline void vaddsws( VectorRegister d, VectorRegister a, VectorRegister b); 1877 inline void vaddsws( VectorRegister d, VectorRegister a, VectorRegister b);
1869 inline void vaddubm( VectorRegister d, VectorRegister a, VectorRegister b); 1878 inline void vaddubm( VectorRegister d, VectorRegister a, VectorRegister b);
1870 inline void vadduwm( VectorRegister d, VectorRegister a, VectorRegister b); 1879 inline void vadduwm( VectorRegister d, VectorRegister a, VectorRegister b);
1871 inline void vadduhm( VectorRegister d, VectorRegister a, VectorRegister b); 1880 inline void vadduhm( VectorRegister d, VectorRegister a, VectorRegister b);
1881 inline void vaddudm( VectorRegister d, VectorRegister a, VectorRegister b);
1872 inline void vaddubs( VectorRegister d, VectorRegister a, VectorRegister b); 1882 inline void vaddubs( VectorRegister d, VectorRegister a, VectorRegister b);
1873 inline void vadduws( VectorRegister d, VectorRegister a, VectorRegister b); 1883 inline void vadduws( VectorRegister d, VectorRegister a, VectorRegister b);
1874 inline void vadduhs( VectorRegister d, VectorRegister a, VectorRegister b); 1884 inline void vadduhs( VectorRegister d, VectorRegister a, VectorRegister b);
1875 inline void vsubcuw( VectorRegister d, VectorRegister a, VectorRegister b); 1885 inline void vsubcuw( VectorRegister d, VectorRegister a, VectorRegister b);
1876 inline void vsubshs( VectorRegister d, VectorRegister a, VectorRegister b); 1886 inline void vsubshs( VectorRegister d, VectorRegister a, VectorRegister b);
1942 inline void vcmpgtuw_(VectorRegister d, VectorRegister a, VectorRegister b); 1952 inline void vcmpgtuw_(VectorRegister d, VectorRegister a, VectorRegister b);
1943 inline void vand( VectorRegister d, VectorRegister a, VectorRegister b); 1953 inline void vand( VectorRegister d, VectorRegister a, VectorRegister b);
1944 inline void vandc( VectorRegister d, VectorRegister a, VectorRegister b); 1954 inline void vandc( VectorRegister d, VectorRegister a, VectorRegister b);
1945 inline void vnor( VectorRegister d, VectorRegister a, VectorRegister b); 1955 inline void vnor( VectorRegister d, VectorRegister a, VectorRegister b);
1946 inline void vor( VectorRegister d, VectorRegister a, VectorRegister b); 1956 inline void vor( VectorRegister d, VectorRegister a, VectorRegister b);
1957 inline void vmr( VectorRegister d, VectorRegister a);
1947 inline void vxor( VectorRegister d, VectorRegister a, VectorRegister b); 1958 inline void vxor( VectorRegister d, VectorRegister a, VectorRegister b);
1948 inline void vrld( VectorRegister d, VectorRegister a, VectorRegister b); 1959 inline void vrld( VectorRegister d, VectorRegister a, VectorRegister b);
1949 inline void vrlb( VectorRegister d, VectorRegister a, VectorRegister b); 1960 inline void vrlb( VectorRegister d, VectorRegister a, VectorRegister b);
1950 inline void vrlw( VectorRegister d, VectorRegister a, VectorRegister b); 1961 inline void vrlw( VectorRegister d, VectorRegister a, VectorRegister b);
1951 inline void vrlh( VectorRegister d, VectorRegister a, VectorRegister b); 1962 inline void vrlh( VectorRegister d, VectorRegister a, VectorRegister b);
1965 // Vector-Scalar (VSX) instructions. 1976 // Vector-Scalar (VSX) instructions.
1966 inline void lxvd2x( VectorSRegister d, Register a); 1977 inline void lxvd2x( VectorSRegister d, Register a);
1967 inline void lxvd2x( VectorSRegister d, Register a, Register b); 1978 inline void lxvd2x( VectorSRegister d, Register a, Register b);
1968 inline void stxvd2x( VectorSRegister d, Register a); 1979 inline void stxvd2x( VectorSRegister d, Register a);
1969 inline void stxvd2x( VectorSRegister d, Register a, Register b); 1980 inline void stxvd2x( VectorSRegister d, Register a, Register b);
1981 inline void mtvrwz( VectorRegister d, Register a);
1982 inline void mfvrwz( Register a, VectorRegister d);
1970 inline void mtvrd( VectorRegister d, Register a); 1983 inline void mtvrd( VectorRegister d, Register a);
1971 inline void mfvrd( Register a, VectorRegister d); 1984 inline void mfvrd( Register a, VectorRegister d);
1985 inline void xxpermdi( VectorSRegister d, VectorSRegister a, VectorSRegister b, int dm);
1986 inline void xxmrghw( VectorSRegister d, VectorSRegister a, VectorSRegister b);
1987 inline void xxmrglw( VectorSRegister d, VectorSRegister a, VectorSRegister b);
1988
1989 // VSX Extended Mnemonics
1990 inline void xxspltd( VectorSRegister d, VectorSRegister a, int x);
1991 inline void xxmrghd( VectorSRegister d, VectorSRegister a, VectorSRegister b);
1992 inline void xxmrgld( VectorSRegister d, VectorSRegister a, VectorSRegister b);
1993 inline void xxswapd( VectorSRegister d, VectorSRegister a);
1972 1994
1973 // AES (introduced with Power 8) 1995 // AES (introduced with Power 8)
1974 inline void vcipher( VectorRegister d, VectorRegister a, VectorRegister b); 1996 inline void vcipher( VectorRegister d, VectorRegister a, VectorRegister b);
1975 inline void vcipherlast( VectorRegister d, VectorRegister a, VectorRegister b); 1997 inline void vcipherlast( VectorRegister d, VectorRegister a, VectorRegister b);
1976 inline void vncipher( VectorRegister d, VectorRegister a, VectorRegister b); 1998 inline void vncipher( VectorRegister d, VectorRegister a, VectorRegister b);

mercurial