< prev index next >

src/hotspot/cpu/ppc/sharedRuntime_ppc.cpp

Print this page




1917   //   3) copy the rest of the incoming signature (shifted by the number of
1918   //      hidden arguments).
1919 
1920   int argc = 0;
1921   if (!is_critical_native) {
1922     out_sig_bt[argc++] = T_ADDRESS;
1923     if (method->is_static()) {
1924       out_sig_bt[argc++] = T_OBJECT;
1925     }
1926 
1927     for (int i = 0; i < total_in_args ; i++ ) {
1928       out_sig_bt[argc++] = in_sig_bt[i];
1929     }
1930   } else {
1931     in_elem_bt = NEW_RESOURCE_ARRAY(BasicType, total_c_args);
1932     SignatureStream ss(method->signature());
1933     int o = 0;
1934     for (int i = 0; i < total_in_args ; i++, o++) {
1935       if (in_sig_bt[i] == T_ARRAY) {
1936         // Arrays are passed as int, elem* pair
1937         Symbol* atype = ss.as_symbol();
1938         const char* at = atype->as_C_string();
1939         if (strlen(at) == 2) {
1940           assert(at[0] == '[', "must be");
1941           switch (at[1]) {
1942             case 'B': in_elem_bt[o] = T_BYTE; break;
1943             case 'C': in_elem_bt[o] = T_CHAR; break;
1944             case 'D': in_elem_bt[o] = T_DOUBLE; break;
1945             case 'F': in_elem_bt[o] = T_FLOAT; break;
1946             case 'I': in_elem_bt[o] = T_INT; break;
1947             case 'J': in_elem_bt[o] = T_LONG; break;
1948             case 'S': in_elem_bt[o] = T_SHORT; break;
1949             case 'Z': in_elem_bt[o] = T_BOOLEAN; break;
1950             default: ShouldNotReachHere();
1951           }
1952         }
1953       } else {
1954         in_elem_bt[o] = T_VOID;
1955       }
1956       if (in_sig_bt[i] != T_VOID) {
1957         assert(in_sig_bt[i] == ss.type(), "must match");

1958         ss.next();
1959       }
1960     }
1961 
1962     for (int i = 0; i < total_in_args ; i++ ) {
1963       if (in_sig_bt[i] == T_ARRAY) {
1964         // Arrays are passed as int, elem* pair.
1965         out_sig_bt[argc++] = T_INT;
1966         out_sig_bt[argc++] = T_ADDRESS;
1967       } else {
1968         out_sig_bt[argc++] = in_sig_bt[i];
1969       }
1970     }
1971   }
1972 
1973 
1974   // Compute the wrapper's frame size.
1975   // --------------------------------------------------------------------------
1976 
1977   // Now figure out where the args must be stored and how much stack space




1917   //   3) copy the rest of the incoming signature (shifted by the number of
1918   //      hidden arguments).
1919 
1920   int argc = 0;
1921   if (!is_critical_native) {
1922     out_sig_bt[argc++] = T_ADDRESS;
1923     if (method->is_static()) {
1924       out_sig_bt[argc++] = T_OBJECT;
1925     }
1926 
1927     for (int i = 0; i < total_in_args ; i++ ) {
1928       out_sig_bt[argc++] = in_sig_bt[i];
1929     }
1930   } else {
1931     in_elem_bt = NEW_RESOURCE_ARRAY(BasicType, total_c_args);
1932     SignatureStream ss(method->signature());
1933     int o = 0;
1934     for (int i = 0; i < total_in_args ; i++, o++) {
1935       if (in_sig_bt[i] == T_ARRAY) {
1936         // Arrays are passed as int, elem* pair
1937         ss.skip_array_prefix(1);  // skip one '['
1938         if (ss.is_primitive())
1939           in_elem_bt[o] = ss.type();
1940         // else what is in_elem_bt[o]?












1941       } else {
1942         in_elem_bt[o] = T_VOID;
1943       }
1944       if (in_sig_bt[i] != T_VOID) {
1945         assert(in_sig_bt[i] == ss.type() ||
1946                in_sig_bt[i] == T_ARRAY, "must match");
1947         ss.next();
1948       }
1949     }
1950 
1951     for (int i = 0; i < total_in_args ; i++ ) {
1952       if (in_sig_bt[i] == T_ARRAY) {
1953         // Arrays are passed as int, elem* pair.
1954         out_sig_bt[argc++] = T_INT;
1955         out_sig_bt[argc++] = T_ADDRESS;
1956       } else {
1957         out_sig_bt[argc++] = in_sig_bt[i];
1958       }
1959     }
1960   }
1961 
1962 
1963   // Compute the wrapper's frame size.
1964   // --------------------------------------------------------------------------
1965 
1966   // Now figure out where the args must be stored and how much stack space


< prev index next >