equal
deleted
inserted
replaced
2900 CodeBlob *cb = CodeCache::find_blob(dest); |
2900 CodeBlob *cb = CodeCache::find_blob(dest); |
2901 if (cb) { |
2901 if (cb) { |
2902 __ far_call(RuntimeAddress(dest)); |
2902 __ far_call(RuntimeAddress(dest)); |
2903 } else { |
2903 } else { |
2904 __ mov(rscratch1, RuntimeAddress(dest)); |
2904 __ mov(rscratch1, RuntimeAddress(dest)); |
2905 int len = args->length(); |
2905 __ blr(rscratch1); |
2906 int type = 0; |
|
2907 if (! result->is_illegal()) { |
|
2908 switch (result->type()) { |
|
2909 case T_VOID: |
|
2910 type = 0; |
|
2911 break; |
|
2912 case T_INT: |
|
2913 case T_LONG: |
|
2914 case T_OBJECT: |
|
2915 type = 1; |
|
2916 break; |
|
2917 case T_FLOAT: |
|
2918 type = 2; |
|
2919 break; |
|
2920 case T_DOUBLE: |
|
2921 type = 3; |
|
2922 break; |
|
2923 default: |
|
2924 ShouldNotReachHere(); |
|
2925 break; |
|
2926 } |
|
2927 } |
|
2928 int num_gpargs = 0; |
|
2929 int num_fpargs = 0; |
|
2930 for (int i = 0; i < args->length(); i++) { |
|
2931 LIR_Opr arg = args->at(i); |
|
2932 if (arg->type() == T_FLOAT || arg->type() == T_DOUBLE) { |
|
2933 num_fpargs++; |
|
2934 } else { |
|
2935 num_gpargs++; |
|
2936 } |
|
2937 } |
|
2938 __ blrt(rscratch1, num_gpargs, num_fpargs, type); |
|
2939 } |
2906 } |
2940 |
2907 |
2941 if (info != NULL) { |
2908 if (info != NULL) { |
2942 add_call_info_here(info); |
2909 add_call_info_here(info); |
2943 } |
2910 } |