536 default:
537 return false;
538 }
539 }
540
541 int SigEntry::count_fields(const GrowableArray<SigEntry>& sig_extended) {
542 int values = 0;
543 for (int i = 0; i < sig_extended.length(); i++) {
544 if (sig_extended.at(i)._bt == T_VALUETYPE) {
545 values++;
546 }
547 }
548 return sig_extended.length() - 2 * values;
549 }
550
551 void SigEntry::fill_sig_bt(const GrowableArray<SigEntry>& sig_extended, BasicType* sig_bt_cc, int total_args_passed_cc, bool skip_vt) {
552 int j = 0;
553 for (int i = 0; i < sig_extended.length(); i++) {
554 if (!skip_vt) {
555 BasicType bt = sig_extended.at(i)._bt;
556 if (bt == T_VALUETYPE) {
557 bt = T_VALUETYPEPTR;
558 }
559 sig_bt_cc[j++] = bt;
560 } else if (sig_extended.at(i)._bt != T_VALUETYPE &&
561 (sig_extended.at(i)._bt != T_VOID ||
562 sig_extended.at(i-1)._bt == T_LONG ||
563 sig_extended.at(i-1)._bt == T_DOUBLE)) {
564 sig_bt_cc[j++] = sig_extended.at(i)._bt;
565 }
566 }
567 assert(j == total_args_passed_cc, "bad number of arguments");
568 }
|
536 default:
537 return false;
538 }
539 }
540
541 int SigEntry::count_fields(const GrowableArray<SigEntry>& sig_extended) {
542 int values = 0;
543 for (int i = 0; i < sig_extended.length(); i++) {
544 if (sig_extended.at(i)._bt == T_VALUETYPE) {
545 values++;
546 }
547 }
548 return sig_extended.length() - 2 * values;
549 }
550
551 void SigEntry::fill_sig_bt(const GrowableArray<SigEntry>& sig_extended, BasicType* sig_bt_cc, int total_args_passed_cc, bool skip_vt) {
552 int j = 0;
553 for (int i = 0; i < sig_extended.length(); i++) {
554 if (!skip_vt) {
555 BasicType bt = sig_extended.at(i)._bt;
556 assert(bt != T_VALUETYPE, "value types should be passed as fields or reference");
557 sig_bt_cc[j++] = bt;
558 } else if (sig_extended.at(i)._bt != T_VALUETYPE &&
559 (sig_extended.at(i)._bt != T_VOID ||
560 sig_extended.at(i-1)._bt == T_LONG ||
561 sig_extended.at(i-1)._bt == T_DOUBLE)) {
562 sig_bt_cc[j++] = sig_extended.at(i)._bt;
563 }
564 }
565 assert(j == total_args_passed_cc, "bad number of arguments");
566 }
|