< prev index next >

src/cpu/ppc/vm/assembler_ppc.hpp

Print this page
rev 13389 : PPC: Implement MulAdd and SquareToLen intrinsics

This implementation is based on the algorithm implemented in java. It
yields a performance speedup of:
JDK8 - 23%
JDK9 - 5%
JDK10 - 5%


1282   inline void subfmeo_(Register d, Register a);
1283   inline void addzeo(  Register d, Register a);
1284   inline void addzeo_( Register d, Register a);
1285   inline void subfzeo( Register d, Register a);
1286   inline void subfzeo_(Register d, Register a);
1287   inline void nego(    Register d, Register a);
1288   inline void nego_(   Register d, Register a);
1289   inline void mulldo(  Register d, Register a, Register b);
1290   inline void mulldo_( Register d, Register a, Register b);
1291   inline void mullwo(  Register d, Register a, Register b);
1292   inline void mullwo_( Register d, Register a, Register b);
1293   inline void divdo(   Register d, Register a, Register b);
1294   inline void divdo_(  Register d, Register a, Register b);
1295   inline void divwo(   Register d, Register a, Register b);
1296   inline void divwo_(  Register d, Register a, Register b);
1297 
1298   // extended mnemonics
1299   inline void li(   Register d, int si16);
1300   inline void lis(  Register d, int si16);
1301   inline void addir(Register d, int si16, Register a);

1302 
1303   static bool is_addi(int x) {
1304      return ADDI_OPCODE == (x & ADDI_OPCODE_MASK);
1305   }
1306   static bool is_addis(int x) {
1307      return ADDIS_OPCODE == (x & ADDIS_OPCODE_MASK);
1308   }
1309   static bool is_bxx(int x) {
1310      return BXX_OPCODE == (x & BXX_OPCODE_MASK);
1311   }
1312   static bool is_b(int x) {
1313      return BXX_OPCODE == (x & BXX_OPCODE_MASK) && inv_lk_field(x) == 0;
1314   }
1315   static bool is_bl(int x) {
1316      return BXX_OPCODE == (x & BXX_OPCODE_MASK) && inv_lk_field(x) == 1;
1317   }
1318   static bool is_bcxx(int x) {
1319      return BCXX_OPCODE == (x & BCXX_OPCODE_MASK);
1320   }
1321   static bool is_bxx_or_bcxx(int x) {




1282   inline void subfmeo_(Register d, Register a);
1283   inline void addzeo(  Register d, Register a);
1284   inline void addzeo_( Register d, Register a);
1285   inline void subfzeo( Register d, Register a);
1286   inline void subfzeo_(Register d, Register a);
1287   inline void nego(    Register d, Register a);
1288   inline void nego_(   Register d, Register a);
1289   inline void mulldo(  Register d, Register a, Register b);
1290   inline void mulldo_( Register d, Register a, Register b);
1291   inline void mullwo(  Register d, Register a, Register b);
1292   inline void mullwo_( Register d, Register a, Register b);
1293   inline void divdo(   Register d, Register a, Register b);
1294   inline void divdo_(  Register d, Register a, Register b);
1295   inline void divwo(   Register d, Register a, Register b);
1296   inline void divwo_(  Register d, Register a, Register b);
1297 
1298   // extended mnemonics
1299   inline void li(   Register d, int si16);
1300   inline void lis(  Register d, int si16);
1301   inline void addir(Register d, int si16, Register a);
1302   inline void subi( Register d, Register a, int si16);
1303 
1304   static bool is_addi(int x) {
1305      return ADDI_OPCODE == (x & ADDI_OPCODE_MASK);
1306   }
1307   static bool is_addis(int x) {
1308      return ADDIS_OPCODE == (x & ADDIS_OPCODE_MASK);
1309   }
1310   static bool is_bxx(int x) {
1311      return BXX_OPCODE == (x & BXX_OPCODE_MASK);
1312   }
1313   static bool is_b(int x) {
1314      return BXX_OPCODE == (x & BXX_OPCODE_MASK) && inv_lk_field(x) == 0;
1315   }
1316   static bool is_bl(int x) {
1317      return BXX_OPCODE == (x & BXX_OPCODE_MASK) && inv_lk_field(x) == 1;
1318   }
1319   static bool is_bcxx(int x) {
1320      return BCXX_OPCODE == (x & BCXX_OPCODE_MASK);
1321   }
1322   static bool is_bxx_or_bcxx(int x) {


< prev index next >