hotspot/src/share/vm/runtime/sharedRuntime.cpp
changeset 31590 427d073af867
parent 31389 e0688be912e5
child 31635 6bf7a358ca17
equal deleted inserted replaced
31589:e0d5c4d48464 31590:427d073af867
  2614   // Lock and unlock a critical section to give the system a chance to block
  2614   // Lock and unlock a critical section to give the system a chance to block
  2615   GC_locker::lock_critical(thread);
  2615   GC_locker::lock_critical(thread);
  2616   GC_locker::unlock_critical(thread);
  2616   GC_locker::unlock_critical(thread);
  2617 JRT_END
  2617 JRT_END
  2618 
  2618 
  2619 int SharedRuntime::convert_ints_to_longints_argcnt(int in_args_count, BasicType* in_sig_bt) {
       
  2620   int argcnt = in_args_count;
       
  2621   if (CCallingConventionRequiresIntsAsLongs) {
       
  2622     for (int in = 0; in < in_args_count; in++) {
       
  2623       BasicType bt = in_sig_bt[in];
       
  2624       switch (bt) {
       
  2625         case T_BOOLEAN:
       
  2626         case T_CHAR:
       
  2627         case T_BYTE:
       
  2628         case T_SHORT:
       
  2629         case T_INT:
       
  2630           argcnt++;
       
  2631           break;
       
  2632         default:
       
  2633           break;
       
  2634       }
       
  2635     }
       
  2636   } else {
       
  2637     assert(0, "This should not be needed on this platform");
       
  2638   }
       
  2639 
       
  2640   return argcnt;
       
  2641 }
       
  2642 
       
  2643 void SharedRuntime::convert_ints_to_longints(int i2l_argcnt, int& in_args_count,
       
  2644                                              BasicType*& in_sig_bt, VMRegPair*& in_regs) {
       
  2645   if (CCallingConventionRequiresIntsAsLongs) {
       
  2646     VMRegPair *new_in_regs   = NEW_RESOURCE_ARRAY(VMRegPair, i2l_argcnt);
       
  2647     BasicType *new_in_sig_bt = NEW_RESOURCE_ARRAY(BasicType, i2l_argcnt);
       
  2648 
       
  2649     int argcnt = 0;
       
  2650     for (int in = 0; in < in_args_count; in++, argcnt++) {
       
  2651       BasicType bt  = in_sig_bt[in];
       
  2652       VMRegPair reg = in_regs[in];
       
  2653       switch (bt) {
       
  2654         case T_BOOLEAN:
       
  2655         case T_CHAR:
       
  2656         case T_BYTE:
       
  2657         case T_SHORT:
       
  2658         case T_INT:
       
  2659           // Convert (bt) to (T_LONG,bt).
       
  2660           new_in_sig_bt[argcnt] = T_LONG;
       
  2661           new_in_sig_bt[argcnt+1] = bt;
       
  2662           assert(reg.first()->is_valid() && !reg.second()->is_valid(), "");
       
  2663           new_in_regs[argcnt].set2(reg.first());
       
  2664           new_in_regs[argcnt+1].set_bad();
       
  2665           argcnt++;
       
  2666           break;
       
  2667         default:
       
  2668           // No conversion needed.
       
  2669           new_in_sig_bt[argcnt] = bt;
       
  2670           new_in_regs[argcnt]   = reg;
       
  2671           break;
       
  2672       }
       
  2673     }
       
  2674     assert(argcnt == i2l_argcnt, "must match");
       
  2675 
       
  2676     in_regs = new_in_regs;
       
  2677     in_sig_bt = new_in_sig_bt;
       
  2678     in_args_count = i2l_argcnt;
       
  2679   } else {
       
  2680     assert(0, "This should not be needed on this platform");
       
  2681   }
       
  2682 }
       
  2683 
       
  2684 // -------------------------------------------------------------------------
  2619 // -------------------------------------------------------------------------
  2685 // Java-Java calling convention
  2620 // Java-Java calling convention
  2686 // (what you use when Java calls Java)
  2621 // (what you use when Java calls Java)
  2687 
  2622 
  2688 //------------------------------name_for_receiver----------------------------------
  2623 //------------------------------name_for_receiver----------------------------------