src/hotspot/cpu/ppc/ppc.ad
changeset 47583 2dcbf51d0431
parent 47216 71c04702a3d5
child 47584 b02ea7eb7d93
equal deleted inserted replaced
47582:fde01e0fccb4 47583:2dcbf51d0431
   252   reg_def SR_CTR(    SOC, SOC, Op_RegP, 2, SR_CTR->as_VMReg());     // v
   252   reg_def SR_CTR(    SOC, SOC, Op_RegP, 2, SR_CTR->as_VMReg());     // v
   253   reg_def SR_VRSAVE( SOC, SOC, Op_RegP, 3, SR_VRSAVE->as_VMReg());  // v
   253   reg_def SR_VRSAVE( SOC, SOC, Op_RegP, 3, SR_VRSAVE->as_VMReg());  // v
   254   reg_def SR_SPEFSCR(SOC, SOC, Op_RegP, 4, SR_SPEFSCR->as_VMReg()); // v
   254   reg_def SR_SPEFSCR(SOC, SOC, Op_RegP, 4, SR_SPEFSCR->as_VMReg()); // v
   255   reg_def SR_PPR(    SOC, SOC, Op_RegP, 5, SR_PPR->as_VMReg());     // v
   255   reg_def SR_PPR(    SOC, SOC, Op_RegP, 5, SR_PPR->as_VMReg());     // v
   256 
   256 
       
   257 // ----------------------------
       
   258 // Vector-Scalar Registers
       
   259 // ----------------------------
       
   260   reg_def VSR0 ( SOC, SOC, Op_VecX, 0, NULL);
       
   261   reg_def VSR1 ( SOC, SOC, Op_VecX, 1, NULL);
       
   262   reg_def VSR2 ( SOC, SOC, Op_VecX, 2, NULL);
       
   263   reg_def VSR3 ( SOC, SOC, Op_VecX, 3, NULL);
       
   264   reg_def VSR4 ( SOC, SOC, Op_VecX, 4, NULL);
       
   265   reg_def VSR5 ( SOC, SOC, Op_VecX, 5, NULL);
       
   266   reg_def VSR6 ( SOC, SOC, Op_VecX, 6, NULL);
       
   267   reg_def VSR7 ( SOC, SOC, Op_VecX, 7, NULL);
       
   268   reg_def VSR8 ( SOC, SOC, Op_VecX, 8, NULL);
       
   269   reg_def VSR9 ( SOC, SOC, Op_VecX, 9, NULL);
       
   270   reg_def VSR10 ( SOC, SOC, Op_VecX, 10, NULL);
       
   271   reg_def VSR11 ( SOC, SOC, Op_VecX, 11, NULL);
       
   272   reg_def VSR12 ( SOC, SOC, Op_VecX, 12, NULL);
       
   273   reg_def VSR13 ( SOC, SOC, Op_VecX, 13, NULL);
       
   274   reg_def VSR14 ( SOC, SOC, Op_VecX, 14, NULL);
       
   275   reg_def VSR15 ( SOC, SOC, Op_VecX, 15, NULL);
       
   276   reg_def VSR16 ( SOC, SOC, Op_VecX, 16, NULL);
       
   277   reg_def VSR17 ( SOC, SOC, Op_VecX, 17, NULL);
       
   278   reg_def VSR18 ( SOC, SOC, Op_VecX, 18, NULL);
       
   279   reg_def VSR19 ( SOC, SOC, Op_VecX, 19, NULL);
       
   280   reg_def VSR20 ( SOC, SOC, Op_VecX, 20, NULL);
       
   281   reg_def VSR21 ( SOC, SOC, Op_VecX, 21, NULL);
       
   282   reg_def VSR22 ( SOC, SOC, Op_VecX, 22, NULL);
       
   283   reg_def VSR23 ( SOC, SOC, Op_VecX, 23, NULL);
       
   284   reg_def VSR24 ( SOC, SOC, Op_VecX, 24, NULL);
       
   285   reg_def VSR25 ( SOC, SOC, Op_VecX, 25, NULL);
       
   286   reg_def VSR26 ( SOC, SOC, Op_VecX, 26, NULL);
       
   287   reg_def VSR27 ( SOC, SOC, Op_VecX, 27, NULL);
       
   288   reg_def VSR28 ( SOC, SOC, Op_VecX, 28, NULL);
       
   289   reg_def VSR29 ( SOC, SOC, Op_VecX, 29, NULL);
       
   290   reg_def VSR30 ( SOC, SOC, Op_VecX, 30, NULL);
       
   291   reg_def VSR31 ( SOC, SOC, Op_VecX, 31, NULL);
       
   292   reg_def VSR32 ( SOC, SOC, Op_VecX, 32, NULL);
       
   293   reg_def VSR33 ( SOC, SOC, Op_VecX, 33, NULL);
       
   294   reg_def VSR34 ( SOC, SOC, Op_VecX, 34, NULL);
       
   295   reg_def VSR35 ( SOC, SOC, Op_VecX, 35, NULL);
       
   296   reg_def VSR36 ( SOC, SOC, Op_VecX, 36, NULL);
       
   297   reg_def VSR37 ( SOC, SOC, Op_VecX, 37, NULL);
       
   298   reg_def VSR38 ( SOC, SOC, Op_VecX, 38, NULL);
       
   299   reg_def VSR39 ( SOC, SOC, Op_VecX, 39, NULL);
       
   300   reg_def VSR40 ( SOC, SOC, Op_VecX, 40, NULL);
       
   301   reg_def VSR41 ( SOC, SOC, Op_VecX, 41, NULL);
       
   302   reg_def VSR42 ( SOC, SOC, Op_VecX, 42, NULL);
       
   303   reg_def VSR43 ( SOC, SOC, Op_VecX, 43, NULL);
       
   304   reg_def VSR44 ( SOC, SOC, Op_VecX, 44, NULL);
       
   305   reg_def VSR45 ( SOC, SOC, Op_VecX, 45, NULL);
       
   306   reg_def VSR46 ( SOC, SOC, Op_VecX, 46, NULL);
       
   307   reg_def VSR47 ( SOC, SOC, Op_VecX, 47, NULL);
       
   308   reg_def VSR48 ( SOC, SOC, Op_VecX, 48, NULL);
       
   309   reg_def VSR49 ( SOC, SOC, Op_VecX, 49, NULL);
       
   310   reg_def VSR50 ( SOC, SOC, Op_VecX, 50, NULL);
       
   311   reg_def VSR51 ( SOC, SOC, Op_VecX, 51, NULL);
       
   312   reg_def VSR52 ( SOC, SOC, Op_VecX, 52, NULL);
       
   313   reg_def VSR53 ( SOC, SOC, Op_VecX, 53, NULL);
       
   314   reg_def VSR54 ( SOC, SOC, Op_VecX, 54, NULL);
       
   315   reg_def VSR55 ( SOC, SOC, Op_VecX, 55, NULL);
       
   316   reg_def VSR56 ( SOC, SOC, Op_VecX, 56, NULL);
       
   317   reg_def VSR57 ( SOC, SOC, Op_VecX, 57, NULL);
       
   318   reg_def VSR58 ( SOC, SOC, Op_VecX, 58, NULL);
       
   319   reg_def VSR59 ( SOC, SOC, Op_VecX, 59, NULL);
       
   320   reg_def VSR60 ( SOC, SOC, Op_VecX, 60, NULL);
       
   321   reg_def VSR61 ( SOC, SOC, Op_VecX, 61, NULL);
       
   322   reg_def VSR62 ( SOC, SOC, Op_VecX, 62, NULL);
       
   323   reg_def VSR63 ( SOC, SOC, Op_VecX, 63, NULL);
   257 
   324 
   258 // ----------------------------
   325 // ----------------------------
   259 // Specify priority of register selection within phases of register
   326 // Specify priority of register selection within phases of register
   260 // allocation. Highest priority is first. A useful heuristic is to
   327 // allocation. Highest priority is first. A useful heuristic is to
   261 // give registers a low priority when they are required by machine
   328 // give registers a low priority when they are required by machine
   391   SR_LR,
   458   SR_LR,
   392   SR_CTR,
   459   SR_CTR,
   393   SR_VRSAVE,
   460   SR_VRSAVE,
   394   SR_SPEFSCR,
   461   SR_SPEFSCR,
   395   SR_PPR
   462   SR_PPR
       
   463 );
       
   464 
       
   465 alloc_class chunk4 (
       
   466   VSR0,
       
   467   VSR1,
       
   468   VSR2,
       
   469   VSR3,
       
   470   VSR4,
       
   471   VSR5,
       
   472   VSR6,
       
   473   VSR7,
       
   474   VSR8,
       
   475   VSR9,
       
   476   VSR10,
       
   477   VSR11,
       
   478   VSR12,
       
   479   VSR13,
       
   480   VSR14,
       
   481   VSR15,
       
   482   VSR16,
       
   483   VSR17,
       
   484   VSR18,
       
   485   VSR19,
       
   486   VSR20,
       
   487   VSR21,
       
   488   VSR22,
       
   489   VSR23,
       
   490   VSR24,
       
   491   VSR25,
       
   492   VSR26,
       
   493   VSR27,
       
   494   VSR28,
       
   495   VSR29,
       
   496   VSR30,
       
   497   VSR31,
       
   498   VSR32,
       
   499   VSR33,
       
   500   VSR34,
       
   501   VSR35,
       
   502   VSR36,
       
   503   VSR37,
       
   504   VSR38,
       
   505   VSR39,
       
   506   VSR40,
       
   507   VSR41,
       
   508   VSR42,
       
   509   VSR43,
       
   510   VSR44,
       
   511   VSR45,
       
   512   VSR46,
       
   513   VSR47,
       
   514   VSR48,
       
   515   VSR49,
       
   516   VSR50,
       
   517   VSR51,
       
   518   VSR52,
       
   519   VSR53,
       
   520   VSR54,
       
   521   VSR55,
       
   522   VSR56,
       
   523   VSR57,
       
   524   VSR58,
       
   525   VSR59,
       
   526   VSR60,
       
   527   VSR61,
       
   528   VSR62,
       
   529   VSR63
   396 );
   530 );
   397 
   531 
   398 //-------Architecture Description Register Classes-----------------------
   532 //-------Architecture Description Register Classes-----------------------
   399 
   533 
   400 // Several register classes are automatically defined based upon
   534 // Several register classes are automatically defined based upon
   767   F29, F29_H,    // nv!
   901   F29, F29_H,    // nv!
   768   F30, F30_H,    // nv!
   902   F30, F30_H,    // nv!
   769   F31, F31_H     // nv!
   903   F31, F31_H     // nv!
   770 );
   904 );
   771 
   905 
       
   906 // Class for all 128bit vector registers
       
   907 reg_class vectorx_reg(VSR0,
       
   908                       VSR1,
       
   909                       VSR2,
       
   910                       VSR3,
       
   911                       VSR4,
       
   912                       VSR5,
       
   913                       VSR6,
       
   914                       VSR7,
       
   915                       VSR8,
       
   916                       VSR9,
       
   917                       VSR10,
       
   918                       VSR11,
       
   919                       VSR12,
       
   920                       VSR13,
       
   921                       VSR14,
       
   922                       VSR15,
       
   923                       VSR16,
       
   924                       VSR17,
       
   925                       VSR18,
       
   926                       VSR19,
       
   927                       VSR20,
       
   928                       VSR21,
       
   929                       VSR22,
       
   930                       VSR23,
       
   931                       VSR24,
       
   932                       VSR25,
       
   933                       VSR26,
       
   934                       VSR27,
       
   935                       VSR28,
       
   936                       VSR29,
       
   937                       VSR30,
       
   938                       VSR31,
       
   939                       VSR32,
       
   940                       VSR33,
       
   941                       VSR34,
       
   942                       VSR35,
       
   943                       VSR36,
       
   944                       VSR37,
       
   945                       VSR38,
       
   946                       VSR39,
       
   947                       VSR40,
       
   948                       VSR41,
       
   949                       VSR42,
       
   950                       VSR43,
       
   951                       VSR44,
       
   952                       VSR45,
       
   953                       VSR46,
       
   954                       VSR47,
       
   955                       VSR48,
       
   956                       VSR49,
       
   957                       VSR50,
       
   958                       VSR51,
       
   959                       VSR52,
       
   960                       VSR53,
       
   961                       VSR54,
       
   962                       VSR55,
       
   963                       VSR56,
       
   964                       VSR57,
       
   965                       VSR58,
       
   966                       VSR59,
       
   967                       VSR60,
       
   968                       VSR61,
       
   969                       VSR62,
       
   970                       VSR63
       
   971 );
       
   972 
   772  %}
   973  %}
   773 
   974 
   774 //----------DEFINITION BLOCK---------------------------------------------------
   975 //----------DEFINITION BLOCK---------------------------------------------------
   775 // Define name --> value mappings to inform the ADLC of an integer valued name
   976 // Define name --> value mappings to inform the ADLC of an integer valued name
   776 // Current support includes integer values in the range [0, 0x7FFFFFFF]
   977 // Current support includes integer values in the range [0, 0x7FFFFFFF]
  2046   return VM_Version::has_fcfids(); // False means that conversion is done by runtime call.
  2247   return VM_Version::has_fcfids(); // False means that conversion is done by runtime call.
  2047 }
  2248 }
  2048 
  2249 
  2049 // Vector width in bytes.
  2250 // Vector width in bytes.
  2050 const int Matcher::vector_width_in_bytes(BasicType bt) {
  2251 const int Matcher::vector_width_in_bytes(BasicType bt) {
  2051   assert(MaxVectorSize == 8, "");
  2252   if (VM_Version::has_vsx()) {
  2052   return 8;
  2253     assert(MaxVectorSize == 16, "");
       
  2254     return 16;
       
  2255   } else {
       
  2256     assert(MaxVectorSize == 8, "");
       
  2257     return 8;
       
  2258   }
  2053 }
  2259 }
  2054 
  2260 
  2055 // Vector ideal reg.
  2261 // Vector ideal reg.
  2056 const uint Matcher::vector_ideal_reg(int size) {
  2262 const uint Matcher::vector_ideal_reg(int size) {
  2057   assert(MaxVectorSize == 8 && size == 8, "");
  2263   if (VM_Version::has_vsx()) {
  2058   return Op_RegL;
  2264     assert(MaxVectorSize == 16 && size == 16, "");
       
  2265     return Op_VecX;
       
  2266   } else {
       
  2267     assert(MaxVectorSize == 8 && size == 8, "");
       
  2268     return Op_RegL;
       
  2269   }
  2059 }
  2270 }
  2060 
  2271 
  2061 const uint Matcher::vector_shift_count_ideal_reg(int size) {
  2272 const uint Matcher::vector_shift_count_ideal_reg(int size) {
  2062   fatal("vector shift is not supported");
  2273   fatal("vector shift is not supported");
  2063   return Node::NotAMachineReg;
  2274   return Node::NotAMachineReg;
  2073   return max_vector_size(bt); // Same as max.
  2284   return max_vector_size(bt); // Same as max.
  2074 }
  2285 }
  2075 
  2286 
  2076 // PPC doesn't support misaligned vectors store/load.
  2287 // PPC doesn't support misaligned vectors store/load.
  2077 const bool Matcher::misaligned_vectors_ok() {
  2288 const bool Matcher::misaligned_vectors_ok() {
  2078   return false;
  2289   if (VM_Version::has_vsx())
       
  2290     return !AlignVector; // can be changed by flag
       
  2291   else
       
  2292     return false;
  2079 }
  2293 }
  2080 
  2294 
  2081 // PPC AES support not yet implemented
  2295 // PPC AES support not yet implemented
  2082 const bool Matcher::pass_original_key_for_aes() {
  2296 const bool Matcher::pass_original_key_for_aes() {
  2083   return false;
  2297   return false;
  2215   F5_num, F6_num, F7_num, F8_num,
  2429   F5_num, F6_num, F7_num, F8_num,
  2216   F9_num, F10_num, F11_num, F12_num,
  2430   F9_num, F10_num, F11_num, F12_num,
  2217   F13_num
  2431   F13_num
  2218 };
  2432 };
  2219 
  2433 
       
  2434 const MachRegisterNumbers vsarg_reg[64] = {
       
  2435   VSR0_num, VSR1_num, VSR2_num, VSR3_num,
       
  2436   VSR4_num, VSR5_num, VSR6_num, VSR7_num,
       
  2437   VSR8_num, VSR9_num, VSR10_num, VSR11_num,
       
  2438   VSR12_num, VSR13_num, VSR14_num, VSR15_num,
       
  2439   VSR16_num, VSR17_num, VSR18_num, VSR19_num,
       
  2440   VSR20_num, VSR21_num, VSR22_num, VSR23_num,
       
  2441   VSR24_num, VSR23_num, VSR24_num, VSR25_num,
       
  2442   VSR28_num, VSR29_num, VSR30_num, VSR31_num,
       
  2443   VSR32_num, VSR33_num, VSR34_num, VSR35_num,
       
  2444   VSR36_num, VSR37_num, VSR38_num, VSR39_num,
       
  2445   VSR40_num, VSR41_num, VSR42_num, VSR43_num,
       
  2446   VSR44_num, VSR45_num, VSR46_num, VSR47_num,
       
  2447   VSR48_num, VSR49_num, VSR50_num, VSR51_num,
       
  2448   VSR52_num, VSR53_num, VSR54_num, VSR55_num,
       
  2449   VSR56_num, VSR57_num, VSR58_num, VSR59_num,
       
  2450   VSR60_num, VSR61_num, VSR62_num, VSR63_num
       
  2451 };
       
  2452 
  2220 const int num_iarg_registers = sizeof(iarg_reg) / sizeof(iarg_reg[0]);
  2453 const int num_iarg_registers = sizeof(iarg_reg) / sizeof(iarg_reg[0]);
  2221 
  2454 
  2222 const int num_farg_registers = sizeof(farg_reg) / sizeof(farg_reg[0]);
  2455 const int num_farg_registers = sizeof(farg_reg) / sizeof(farg_reg[0]);
       
  2456 
       
  2457 const int num_vsarg_registers = sizeof(vsarg_reg) / sizeof(vsarg_reg[0]);
  2223 
  2458 
  2224 // Return whether or not this register is ever used as an argument. This
  2459 // Return whether or not this register is ever used as an argument. This
  2225 // function is used on startup to build the trampoline stubs in generateOptoStub.
  2460 // function is used on startup to build the trampoline stubs in generateOptoStub.
  2226 // Registers not mentioned will be killed by the VM call in the trampoline, and
  2461 // Registers not mentioned will be killed by the VM call in the trampoline, and
  2227 // arguments in those registers not be available to the callee.
  2462 // arguments in those registers not be available to the callee.
  2550   }
  2785   }
  2551 
  2786 
  2552   return nodes;
  2787   return nodes;
  2553 }
  2788 }
  2554 
  2789 
       
  2790 typedef struct {
       
  2791   loadConL_hiNode *_large_hi;
       
  2792   loadConL_loNode *_large_lo;
       
  2793   mtvsrdNode      *_moved;
       
  2794   xxspltdNode     *_replicated;
       
  2795   loadConLNode    *_small;
       
  2796   MachNode        *_last;
       
  2797 } loadConLReplicatedNodesTuple;
       
  2798 
       
  2799 loadConLReplicatedNodesTuple loadConLReplicatedNodesTuple_create(Compile *C, PhaseRegAlloc *ra_, Node *toc, immLOper *immSrc, 
       
  2800                                                  vecXOper *dst, immI_0Oper *zero,
       
  2801                                                  OptoReg::Name reg_second, OptoReg::Name reg_first,
       
  2802                                                  OptoReg::Name reg_vec_second, OptoReg::Name reg_vec_first) {
       
  2803   loadConLReplicatedNodesTuple nodes;
       
  2804 
       
  2805   const bool large_constant_pool = true; // TODO: PPC port C->cfg()->_consts_size > 4000;
       
  2806   if (large_constant_pool) {
       
  2807     // Create new nodes.
       
  2808     loadConL_hiNode *m1 = new  loadConL_hiNode();
       
  2809     loadConL_loNode *m2 = new  loadConL_loNode();
       
  2810     mtvsrdNode *m3 = new  mtvsrdNode();
       
  2811     xxspltdNode *m4 = new  xxspltdNode();
       
  2812 
       
  2813     // inputs for new nodes
       
  2814     m1->add_req(NULL, toc);
       
  2815     m2->add_req(NULL, m1);
       
  2816     m3->add_req(NULL, m2);
       
  2817     m4->add_req(NULL, m3);
       
  2818 
       
  2819     // operands for new nodes
       
  2820     m1->_opnds[0] = new  iRegLdstOper(); // dst
       
  2821     m1->_opnds[1] = immSrc;              // src
       
  2822     m1->_opnds[2] = new  iRegPdstOper(); // toc
       
  2823 
       
  2824     m2->_opnds[0] = new  iRegLdstOper(); // dst
       
  2825     m2->_opnds[1] = immSrc;              // src
       
  2826     m2->_opnds[2] = new  iRegLdstOper(); // base
       
  2827 
       
  2828     m3->_opnds[0] = new  vecXOper();     // dst
       
  2829     m3->_opnds[1] = new  iRegLdstOper(); // src
       
  2830 
       
  2831     m4->_opnds[0] = new  vecXOper();     // dst
       
  2832     m4->_opnds[1] = new  vecXOper();     // src
       
  2833     m4->_opnds[2] = zero;
       
  2834 
       
  2835     // Initialize ins_attrib TOC fields.
       
  2836     m1->_const_toc_offset = -1;
       
  2837     m2->_const_toc_offset_hi_node = m1;
       
  2838 
       
  2839     // Initialize ins_attrib instruction offset.
       
  2840     m1->_cbuf_insts_offset = -1;
       
  2841 
       
  2842     // register allocation for new nodes
       
  2843     ra_->set_pair(m1->_idx, reg_second, reg_first);
       
  2844     ra_->set_pair(m2->_idx, reg_second, reg_first);
       
  2845     ra_->set1(m3->_idx, reg_second);
       
  2846     ra_->set2(m3->_idx, reg_vec_first);
       
  2847     ra_->set_pair(m4->_idx, reg_vec_second, reg_vec_first);
       
  2848 
       
  2849     // Create result.
       
  2850     nodes._large_hi = m1;
       
  2851     nodes._large_lo = m2;
       
  2852     nodes._moved = m3;
       
  2853     nodes._replicated = m4;
       
  2854     nodes._small = NULL;
       
  2855     nodes._last = nodes._replicated;
       
  2856     assert(m2->bottom_type()->isa_long(), "must be long");
       
  2857   } else {
       
  2858     loadConLNode *m2 = new  loadConLNode();
       
  2859     mtvsrdNode *m3 = new  mtvsrdNode();
       
  2860     xxspltdNode *m4 = new  xxspltdNode();
       
  2861 
       
  2862     // inputs for new nodes
       
  2863     m2->add_req(NULL, toc);
       
  2864 
       
  2865     // operands for new nodes
       
  2866     m2->_opnds[0] = new  iRegLdstOper(); // dst
       
  2867     m2->_opnds[1] = immSrc;              // src
       
  2868     m2->_opnds[2] = new  iRegPdstOper(); // toc
       
  2869 
       
  2870     m3->_opnds[0] = new  vecXOper();     // dst
       
  2871     m3->_opnds[1] = new  iRegLdstOper(); // src
       
  2872 
       
  2873     m4->_opnds[0] = new  vecXOper();     // dst
       
  2874     m4->_opnds[1] = new  vecXOper();     // src
       
  2875     m4->_opnds[2] = zero;
       
  2876 
       
  2877     // Initialize ins_attrib instruction offset.
       
  2878     m2->_cbuf_insts_offset = -1;
       
  2879     ra_->set1(m3->_idx, reg_second);
       
  2880     ra_->set2(m3->_idx, reg_vec_first);
       
  2881     ra_->set_pair(m4->_idx, reg_vec_second, reg_vec_first);
       
  2882 
       
  2883     // register allocation for new nodes
       
  2884     ra_->set_pair(m2->_idx, reg_second, reg_first);
       
  2885 
       
  2886     // Create result.
       
  2887     nodes._large_hi = NULL;
       
  2888     nodes._large_lo = NULL;
       
  2889     nodes._small = m2;
       
  2890     nodes._moved = m3;
       
  2891     nodes._replicated = m4;
       
  2892     nodes._last = nodes._replicated;
       
  2893     assert(m2->bottom_type()->isa_long(), "must be long");
       
  2894   }
       
  2895 
       
  2896   return nodes;
       
  2897 }
       
  2898 
  2555 %} // source
  2899 %} // source
  2556 
  2900 
  2557 encode %{
  2901 encode %{
  2558   // Postalloc expand emitter for loading a long constant from the method's TOC.
  2902   // Postalloc expand emitter for loading a long constant from the method's TOC.
  2559   // Enc_class needed as consttanttablebase is not supported by postalloc
  2903   // Enc_class needed as consttanttablebase is not supported by postalloc
  3208     if (loadConLNodes._large_hi) nodes->push(loadConLNodes._large_hi);
  3552     if (loadConLNodes._large_hi) nodes->push(loadConLNodes._large_hi);
  3209     if (loadConLNodes._last)     nodes->push(loadConLNodes._last);
  3553     if (loadConLNodes._last)     nodes->push(loadConLNodes._last);
  3210 
  3554 
  3211     assert(nodes->length() >= 1, "must have created at least 1 node");
  3555     assert(nodes->length() >= 1, "must have created at least 1 node");
  3212     assert(loadConLNodes._last->bottom_type()->isa_long(), "must be long");
  3556     assert(loadConLNodes._last->bottom_type()->isa_long(), "must be long");
       
  3557   %}
       
  3558 
       
  3559   enc_class postalloc_expand_load_replF_constant_vsx(vecX dst, immF src, iRegLdst toc) %{
       
  3560     // Create new nodes.
       
  3561 
       
  3562     // Make an operand with the bit pattern to load as float.
       
  3563     immLOper *op_repl = new  immLOper((jlong)replicate_immF(op_src->constantF()));
       
  3564     immI_0Oper *op_zero = new  immI_0Oper(0);
       
  3565 
       
  3566     loadConLReplicatedNodesTuple loadConLNodes =
       
  3567       loadConLReplicatedNodesTuple_create(C, ra_, n_toc, op_repl, op_dst, op_zero,
       
  3568                                 OptoReg::Name(R20_H_num), OptoReg::Name(R20_num),
       
  3569                                 OptoReg::Name(VSR11_num), OptoReg::Name(VSR10_num));
       
  3570 
       
  3571     // Push new nodes.
       
  3572     if (loadConLNodes._large_hi) { nodes->push(loadConLNodes._large_hi); }
       
  3573     if (loadConLNodes._large_lo) { nodes->push(loadConLNodes._large_lo); }
       
  3574     if (loadConLNodes._moved)    { nodes->push(loadConLNodes._moved); }
       
  3575     if (loadConLNodes._last)     { nodes->push(loadConLNodes._last); }
       
  3576 
       
  3577     assert(nodes->length() >= 1, "must have created at least 1 node");
  3213   %}
  3578   %}
  3214 
  3579 
  3215   // This enc_class is needed so that scheduler gets proper
  3580   // This enc_class is needed so that scheduler gets proper
  3216   // input mapping for latency computation.
  3581   // input mapping for latency computation.
  3217   enc_class enc_poll(immI dst, iRegLdst poll) %{
  3582   enc_class enc_poll(immI dst, iRegLdst poll) %{
  3838 // parsing in the ADLC because operands constitute user defined types
  4203 // parsing in the ADLC because operands constitute user defined types
  3839 // which are used in instruction definitions.
  4204 // which are used in instruction definitions.
  3840 //
  4205 //
  3841 // Formats are generated automatically for constants and base registers.
  4206 // Formats are generated automatically for constants and base registers.
  3842 
  4207 
       
  4208 operand vecX() %{
       
  4209   constraint(ALLOC_IN_RC(vectorx_reg));
       
  4210   match(VecX);
       
  4211 
       
  4212   format %{ %}
       
  4213   interface(REG_INTER);
       
  4214 %}
       
  4215 
  3843 //----------Simple Operands----------------------------------------------------
  4216 //----------Simple Operands----------------------------------------------------
  3844 // Immediate Operands
  4217 // Immediate Operands
  3845 
  4218 
  3846 // Integer Immediate: 32-bit
  4219 // Integer Immediate: 32-bit
  3847 operand immI() %{
  4220 operand immI() %{
  5370   size(4);
  5743   size(4);
  5371   ins_encode( enc_ld(dst, mem) );
  5744   ins_encode( enc_ld(dst, mem) );
  5372   ins_pipe(pipe_class_memory);
  5745   ins_pipe(pipe_class_memory);
  5373 %}
  5746 %}
  5374 
  5747 
       
  5748 // Load Aligned Packed Byte
       
  5749 instruct loadV16(vecX dst, indirect mem) %{
       
  5750   predicate(n->as_LoadVector()->memory_size() == 16);
       
  5751   match(Set dst (LoadVector mem));
       
  5752   ins_cost(MEMORY_REF_COST);
       
  5753 
       
  5754   format %{ "LXVD2X      $dst, $mem \t// load 16-byte Vector" %}
       
  5755   size(4);
       
  5756   ins_encode %{
       
  5757     __ lxvd2x($dst$$VectorSRegister, $mem$$Register);
       
  5758   %}
       
  5759   ins_pipe(pipe_class_default);
       
  5760 %}
       
  5761 
  5375 // Load Range, range = array length (=jint)
  5762 // Load Range, range = array length (=jint)
  5376 instruct loadRange(iRegIdst dst, memory mem) %{
  5763 instruct loadRange(iRegIdst dst, memory mem) %{
  5377   match(Set dst (LoadRange mem));
  5764   match(Set dst (LoadRange mem));
  5378   ins_cost(MEMORY_REF_COST);
  5765   ins_cost(MEMORY_REF_COST);
  5379 
  5766 
  6364 
  6751 
  6365   format %{ "STD     $mem, $src \t// packed8B" %}
  6752   format %{ "STD     $mem, $src \t// packed8B" %}
  6366   size(4);
  6753   size(4);
  6367   ins_encode( enc_std(src, mem) );
  6754   ins_encode( enc_std(src, mem) );
  6368   ins_pipe(pipe_class_memory);
  6755   ins_pipe(pipe_class_memory);
       
  6756 %}
       
  6757 
       
  6758 // Store Packed Byte long register to memory
       
  6759 instruct storeV16(indirect mem, vecX src) %{
       
  6760   predicate(n->as_StoreVector()->memory_size() == 16);
       
  6761   match(Set mem (StoreVector mem src));
       
  6762   ins_cost(MEMORY_REF_COST);
       
  6763 
       
  6764   format %{ "STXVD2X     $mem, $src \t// store 16-byte Vector" %}
       
  6765   size(4);
       
  6766   ins_encode %{
       
  6767     __ stxvd2x($src$$VectorSRegister, $mem$$Register);
       
  6768   %}
       
  6769   ins_pipe(pipe_class_default);
  6369 %}
  6770 %}
  6370 
  6771 
  6371 // Store Compressed Oop
  6772 // Store Compressed Oop
  6372 instruct storeN(memory dst, iRegN_P2N src) %{
  6773 instruct storeN(memory dst, iRegN_P2N src) %{
  6373   match(Set dst (StoreN dst src));
  6774   match(Set dst (StoreN dst src));
 13237     __ sthbrx($src$$Register, $mem$$Register);
 13638     __ sthbrx($src$$Register, $mem$$Register);
 13238   %}
 13639   %}
 13239   ins_pipe(pipe_class_default);
 13640   ins_pipe(pipe_class_default);
 13240 %}
 13641 %}
 13241 
 13642 
       
 13643 instruct mtvsrwz(vecX temp1, iRegIsrc src) %{
       
 13644   effect(DEF temp1, USE src);
       
 13645   
       
 13646   size(4);
       
 13647   ins_encode %{
       
 13648     __ mtvsrwz($temp1$$VectorSRegister, $src$$Register);
       
 13649   %}
       
 13650   ins_pipe(pipe_class_default);
       
 13651 %}
       
 13652 
       
 13653 instruct xxspltw(vecX dst, vecX src, immI8 imm1) %{
       
 13654   effect(DEF dst, USE src, USE imm1);
       
 13655 
       
 13656   size(4);
       
 13657   ins_encode %{
       
 13658     __ xxspltw($dst$$VectorSRegister, $src$$VectorSRegister, $imm1$$constant); 
       
 13659   %}
       
 13660   ins_pipe(pipe_class_default);
       
 13661 %}
       
 13662 
 13242 //---------- Replicate Vector Instructions ------------------------------------
 13663 //---------- Replicate Vector Instructions ------------------------------------
 13243 
 13664 
 13244 // Insrdi does replicate if src == dst.
 13665 // Insrdi does replicate if src == dst.
 13245 instruct repl32(iRegLdst dst) %{
 13666 instruct repl32(iRegLdst dst) %{
 13246   predicate(false);
 13667   predicate(false);
 13316     __ li($dst$$Register, (int)((short)($src$$constant & 0xFFFF)));
 13737     __ li($dst$$Register, (int)((short)($src$$constant & 0xFFFF)));
 13317   %}
 13738   %}
 13318   ins_pipe(pipe_class_default);
 13739   ins_pipe(pipe_class_default);
 13319 %}
 13740 %}
 13320 
 13741 
       
 13742 instruct repl16B_reg_Ex(vecX dst, iRegIsrc src) %{
       
 13743   match(Set dst (ReplicateB src));
       
 13744   predicate(n->as_Vector()->length() == 16);
       
 13745 
       
 13746   expand %{
       
 13747     iRegLdst tmpL;
       
 13748     vecX tmpV;
       
 13749     immI8  imm1 %{ (int)  1 %}
       
 13750     moveReg(tmpL, src);
       
 13751     repl56(tmpL);
       
 13752     repl48(tmpL);
       
 13753     mtvsrwz(tmpV, tmpL);
       
 13754     xxspltw(dst, tmpV, imm1);
       
 13755   %}
       
 13756 %}
       
 13757 
       
 13758 instruct repl16B_immI0(vecX dst, immI_0 zero) %{
       
 13759   match(Set dst (ReplicateB zero));
       
 13760   predicate(n->as_Vector()->length() == 16);
       
 13761 
       
 13762   format %{ "XXLXOR      $dst, $zero \t// replicate16B" %}
       
 13763   size(4);
       
 13764   ins_encode %{
       
 13765     __ xxlxor($dst$$VectorSRegister, $dst$$VectorSRegister, $dst$$VectorSRegister);
       
 13766   %}
       
 13767   ins_pipe(pipe_class_default);
       
 13768 %}
       
 13769 
       
 13770 instruct repl16B_immIminus1(vecX dst, immI_minus1 src) %{
       
 13771   match(Set dst (ReplicateB src));
       
 13772   predicate(n->as_Vector()->length() == 16);
       
 13773 
       
 13774   format %{ "XXLEQV      $dst, $src \t// replicate16B" %}
       
 13775   size(4);
       
 13776   ins_encode %{
       
 13777     __ xxleqv($dst$$VectorSRegister, $dst$$VectorSRegister, $dst$$VectorSRegister);
       
 13778   %}
       
 13779   ins_pipe(pipe_class_default);
       
 13780 %}
       
 13781 
 13321 instruct repl4S_reg_Ex(iRegLdst dst, iRegIsrc src) %{
 13782 instruct repl4S_reg_Ex(iRegLdst dst, iRegIsrc src) %{
 13322   match(Set dst (ReplicateS src));
 13783   match(Set dst (ReplicateS src));
 13323   predicate(n->as_Vector()->length() == 4);
 13784   predicate(n->as_Vector()->length() == 4);
 13324   expand %{
 13785   expand %{
 13325     moveReg(dst, src);
 13786     moveReg(dst, src);
 13350     __ li($dst$$Register, (int)((short)($src$$constant & 0xFFFF)));
 13811     __ li($dst$$Register, (int)((short)($src$$constant & 0xFFFF)));
 13351   %}
 13812   %}
 13352   ins_pipe(pipe_class_default);
 13813   ins_pipe(pipe_class_default);
 13353 %}
 13814 %}
 13354 
 13815 
       
 13816 instruct repl8S_reg_Ex(vecX dst, iRegIsrc src) %{
       
 13817   match(Set dst (ReplicateS src));
       
 13818   predicate(n->as_Vector()->length() == 8);
       
 13819 
       
 13820   expand %{
       
 13821     iRegLdst tmpL;
       
 13822     vecX tmpV;
       
 13823     immI8  zero %{ (int)  0 %} 
       
 13824     moveReg(tmpL, src);
       
 13825     repl48(tmpL);
       
 13826     repl32(tmpL);
       
 13827     mtvsrd(tmpV, tmpL);
       
 13828     xxpermdi(dst, tmpV, tmpV, zero);
       
 13829   %}
       
 13830 %}
       
 13831 
       
 13832 instruct repl8S_immI0(vecX dst, immI_0 zero) %{
       
 13833   match(Set dst (ReplicateS zero));
       
 13834   predicate(n->as_Vector()->length() == 8);
       
 13835 
       
 13836   format %{ "XXLXOR      $dst, $zero \t// replicate8S" %}
       
 13837   size(4);
       
 13838   ins_encode %{
       
 13839     __ xxlxor($dst$$VectorSRegister, $dst$$VectorSRegister, $dst$$VectorSRegister);
       
 13840   %}
       
 13841   ins_pipe(pipe_class_default);
       
 13842 %}
       
 13843 
       
 13844 instruct repl8S_immIminus1(vecX dst, immI_minus1 src) %{
       
 13845   match(Set dst (ReplicateS src));
       
 13846   predicate(n->as_Vector()->length() == 8);
       
 13847 
       
 13848   format %{ "XXLEQV      $dst, $src \t// replicate16B" %}
       
 13849   size(4);
       
 13850   ins_encode %{
       
 13851     __ xxleqv($dst$$VectorSRegister, $dst$$VectorSRegister, $dst$$VectorSRegister);
       
 13852   %}
       
 13853   ins_pipe(pipe_class_default);
       
 13854 %}
       
 13855 
 13355 instruct repl2I_reg_Ex(iRegLdst dst, iRegIsrc src) %{
 13856 instruct repl2I_reg_Ex(iRegLdst dst, iRegIsrc src) %{
 13356   match(Set dst (ReplicateI src));
 13857   match(Set dst (ReplicateI src));
 13357   predicate(n->as_Vector()->length() == 2);
 13858   predicate(n->as_Vector()->length() == 2);
 13358   ins_cost(2 * DEFAULT_COST);
 13859   ins_cost(2 * DEFAULT_COST);
 13359   expand %{
 13860   expand %{
 13380   format %{ "LI      $dst, -1 \t// replicate4C" %}
 13881   format %{ "LI      $dst, -1 \t// replicate4C" %}
 13381   size(4);
 13882   size(4);
 13382   ins_encode %{
 13883   ins_encode %{
 13383     // TODO: PPC port $archOpcode(ppc64Opcode_addi);
 13884     // TODO: PPC port $archOpcode(ppc64Opcode_addi);
 13384     __ li($dst$$Register, (int)((short)($src$$constant & 0xFFFF)));
 13885     __ li($dst$$Register, (int)((short)($src$$constant & 0xFFFF)));
       
 13886   %}
       
 13887   ins_pipe(pipe_class_default);
       
 13888 %}
       
 13889 
       
 13890 instruct repl4I_reg_Ex(vecX dst, iRegIsrc src) %{
       
 13891   match(Set dst (ReplicateI src));
       
 13892   predicate(n->as_Vector()->length() == 4);
       
 13893   ins_cost(2 * DEFAULT_COST);
       
 13894 
       
 13895   expand %{ 
       
 13896     iRegLdst tmpL;
       
 13897     vecX tmpV;
       
 13898     immI8  zero %{ (int)  0 %} 
       
 13899     moveReg(tmpL, src);
       
 13900     repl32(tmpL);
       
 13901     mtvsrd(tmpV, tmpL);
       
 13902     xxpermdi(dst, tmpV, tmpV, zero);
       
 13903   %}
       
 13904 %}
       
 13905 
       
 13906 instruct repl4I_immI0(vecX dst, immI_0 zero) %{
       
 13907   match(Set dst (ReplicateI zero));
       
 13908   predicate(n->as_Vector()->length() == 4);
       
 13909 
       
 13910   format %{ "XXLXOR      $dst, $zero \t// replicate4I" %}
       
 13911   size(4);
       
 13912   ins_encode %{
       
 13913     __ xxlxor($dst$$VectorSRegister, $dst$$VectorSRegister, $dst$$VectorSRegister);
       
 13914   %}
       
 13915   ins_pipe(pipe_class_default);
       
 13916 %}
       
 13917 
       
 13918 instruct repl4I_immIminus1(vecX dst, immI_minus1 src) %{
       
 13919   match(Set dst (ReplicateI src));
       
 13920   predicate(n->as_Vector()->length() == 4);
       
 13921 
       
 13922   format %{ "XXLEQV      $dst, $dst, $dst \t// replicate4I" %}
       
 13923   size(4);
       
 13924   ins_encode %{
       
 13925     __ xxleqv($dst$$VectorSRegister, $dst$$VectorSRegister, $dst$$VectorSRegister);
 13385   %}
 13926   %}
 13386   ins_pipe(pipe_class_default);
 13927   ins_pipe(pipe_class_default);
 13387 %}
 13928 %}
 13388 
 13929 
 13389 // Move float to int register via stack, replicate.
 13930 // Move float to int register via stack, replicate.
 13481     __ mulldo_(R0, $op1$$Register, $op2$$Register);
 14022     __ mulldo_(R0, $op1$$Register, $op2$$Register);
 13482   %}
 14023   %}
 13483   ins_pipe(pipe_class_default);
 14024   ins_pipe(pipe_class_default);
 13484 %}
 14025 %}
 13485 
 14026 
       
 14027 
       
 14028 instruct repl4F_reg_Ex(vecX dst, regF src) %{
       
 14029   match(Set dst (ReplicateF src));
       
 14030   predicate(n->as_Vector()->length() == 4);
       
 14031   ins_cost(2 * MEMORY_REF_COST + DEFAULT_COST);
       
 14032   expand %{
       
 14033     stackSlotL tmpS;
       
 14034     iRegIdst tmpI;
       
 14035     iRegLdst tmpL;
       
 14036     vecX tmpV;
       
 14037     immI8  zero %{ (int)  0 %} 
       
 14038 
       
 14039     moveF2I_reg_stack(tmpS, src);   // Move float to stack.
       
 14040     moveF2I_stack_reg(tmpI, tmpS);  // Move stack to int reg.
       
 14041     moveReg(tmpL, tmpI);             // Move int to long reg.
       
 14042     repl32(tmpL);                    // Replicate bitpattern.
       
 14043     mtvsrd(tmpV, tmpL);
       
 14044     xxpermdi(dst, tmpV, tmpV, zero);
       
 14045   %}
       
 14046 %}
       
 14047 
       
 14048 instruct repl4F_immF_Ex(vecX dst, immF src) %{
       
 14049   match(Set dst (ReplicateF src));
       
 14050   predicate(n->as_Vector()->length() == 4);
       
 14051   ins_cost(10 * DEFAULT_COST);
       
 14052 
       
 14053   postalloc_expand( postalloc_expand_load_replF_constant_vsx(dst, src, constanttablebase) );
       
 14054 %}
       
 14055 
       
 14056 instruct repl4F_immF0(vecX dst, immF_0 zero) %{
       
 14057   match(Set dst (ReplicateF zero));
       
 14058   predicate(n->as_Vector()->length() == 4);
       
 14059 
       
 14060   format %{ "XXLXOR      $dst, $zero \t// replicate4F" %}
       
 14061   ins_encode %{
       
 14062     __ xxlxor($dst$$VectorSRegister, $dst$$VectorSRegister, $dst$$VectorSRegister);
       
 14063   %}
       
 14064   ins_pipe(pipe_class_default);
       
 14065 %}
       
 14066 
       
 14067 instruct repl2D_reg_Ex(vecX dst, regD src) %{
       
 14068   match(Set dst (ReplicateD src));
       
 14069   predicate(n->as_Vector()->length() == 2);
       
 14070   expand %{
       
 14071     stackSlotL tmpS;
       
 14072     iRegLdst tmpL;
       
 14073     iRegLdst tmp;
       
 14074     vecX tmpV;
       
 14075     immI8  zero %{ (int)  0 %} 
       
 14076     moveD2L_reg_stack(tmpS, src);
       
 14077     moveD2L_stack_reg(tmpL, tmpS);
       
 14078     mtvsrd(tmpV, tmpL);
       
 14079     xxpermdi(dst, tmpV, tmpV, zero);
       
 14080   %}
       
 14081 %}
       
 14082 
       
 14083 instruct repl2D_immI0(vecX dst, immI_0 zero) %{
       
 14084   match(Set dst (ReplicateD zero));
       
 14085   predicate(n->as_Vector()->length() == 2);
       
 14086 
       
 14087   format %{ "XXLXOR      $dst, $zero \t// replicate2D" %}
       
 14088   size(4);
       
 14089   ins_encode %{
       
 14090     __ xxlxor($dst$$VectorSRegister, $dst$$VectorSRegister, $dst$$VectorSRegister);
       
 14091   %}
       
 14092   ins_pipe(pipe_class_default);
       
 14093 %}
       
 14094 
       
 14095 instruct repl2D_immIminus1(vecX dst, immI_minus1 src) %{
       
 14096   match(Set dst (ReplicateD src));
       
 14097   predicate(n->as_Vector()->length() == 2);
       
 14098 
       
 14099   format %{ "XXLEQV      $dst, $src \t// replicate16B" %}
       
 14100   size(4);
       
 14101   ins_encode %{
       
 14102     __ xxleqv($dst$$VectorSRegister, $dst$$VectorSRegister, $dst$$VectorSRegister);
       
 14103   %}
       
 14104   ins_pipe(pipe_class_default);
       
 14105 %}
       
 14106 
       
 14107 instruct mtvsrd(vecX dst, iRegLsrc src) %{
       
 14108   predicate(false);
       
 14109   effect(DEF dst, USE src);
       
 14110 
       
 14111   format %{ "MTVSRD      $dst, $src \t// Move to 16-byte register"%} 
       
 14112   size(4);
       
 14113   ins_encode %{
       
 14114     __ mtvsrd($dst$$VectorSRegister, $src$$Register);
       
 14115   %}
       
 14116   ins_pipe(pipe_class_default);
       
 14117 %}
       
 14118 
       
 14119 instruct xxspltd(vecX dst, vecX src, immI8 zero) %{
       
 14120   effect(DEF dst, USE src, USE zero);
       
 14121 
       
 14122   format %{ "XXSPLATD      $dst, $src, $zero \t// Permute 16-byte register"%}
       
 14123   size(4);
       
 14124   ins_encode %{
       
 14125     __ xxpermdi($dst$$VectorSRegister, $src$$VectorSRegister, $src$$VectorSRegister, $zero$$constant);
       
 14126   %} 
       
 14127   ins_pipe(pipe_class_default);
       
 14128 %}
       
 14129 
       
 14130 instruct xxpermdi(vecX dst, vecX src1, vecX src2, immI8 zero) %{
       
 14131   effect(DEF dst, USE src1, USE src2, USE zero);
       
 14132 
       
 14133   format %{ "XXPERMDI      $dst, $src1, $src2, $zero \t// Permute 16-byte register"%}
       
 14134   size(4);
       
 14135   ins_encode %{
       
 14136     __ xxpermdi($dst$$VectorSRegister, $src1$$VectorSRegister, $src2$$VectorSRegister, $zero$$constant);
       
 14137   %} 
       
 14138   ins_pipe(pipe_class_default);
       
 14139 %}
       
 14140 
       
 14141 instruct repl2L_reg_Ex(vecX dst, iRegLsrc src) %{
       
 14142   match(Set dst (ReplicateL src));
       
 14143   predicate(n->as_Vector()->length() == 2);
       
 14144   expand %{
       
 14145     vecX tmpV;
       
 14146     immI8  zero %{ (int)  0 %} 
       
 14147     mtvsrd(tmpV, src); 
       
 14148     xxpermdi(dst, tmpV, tmpV, zero);
       
 14149   %}
       
 14150 %}
       
 14151 
       
 14152 instruct repl2L_immI0(vecX dst, immI_0 zero) %{
       
 14153   match(Set dst (ReplicateL zero));
       
 14154   predicate(n->as_Vector()->length() == 2);
       
 14155 
       
 14156   format %{ "XXLXOR      $dst, $zero \t// replicate2L" %}
       
 14157   size(4);
       
 14158   ins_encode %{
       
 14159     __ xxlxor($dst$$VectorSRegister, $dst$$VectorSRegister, $dst$$VectorSRegister);
       
 14160   %}
       
 14161   ins_pipe(pipe_class_default);
       
 14162 %}
       
 14163 
       
 14164 instruct repl2L_immIminus1(vecX dst, immI_minus1 src) %{
       
 14165   match(Set dst (ReplicateL src));
       
 14166   predicate(n->as_Vector()->length() == 2);
       
 14167 
       
 14168   format %{ "XXLEQV      $dst, $src \t// replicate16B" %}
       
 14169   size(4);
       
 14170   ins_encode %{
       
 14171     __ xxleqv($dst$$VectorSRegister, $dst$$VectorSRegister, $dst$$VectorSRegister);
       
 14172   %}
       
 14173   ins_pipe(pipe_class_default);
       
 14174 %}
 13486 
 14175 
 13487 // ============================================================================
 14176 // ============================================================================
 13488 // Safepoint Instruction
 14177 // Safepoint Instruction
 13489 
 14178 
 13490 instruct safePoint_poll(iRegPdst poll) %{
 14179 instruct safePoint_poll(iRegPdst poll) %{