comparison src/share/vm/opto/runtime.cpp @ 14460:8a9bb7821e28

Merge
author kvn
date Wed, 19 Feb 2014 12:08:49 -0800
parents 63a4eb8bcd23 abec000618bf
children d8041d695d19
comparison
equal deleted inserted replaced
14360:e8ef156f0bc9 14460:8a9bb7821e28
81 # include "adfiles/ad_zero.hpp" 81 # include "adfiles/ad_zero.hpp"
82 #endif 82 #endif
83 #ifdef TARGET_ARCH_MODEL_arm 83 #ifdef TARGET_ARCH_MODEL_arm
84 # include "adfiles/ad_arm.hpp" 84 # include "adfiles/ad_arm.hpp"
85 #endif 85 #endif
86 #ifdef TARGET_ARCH_MODEL_ppc 86 #ifdef TARGET_ARCH_MODEL_ppc_32
87 # include "adfiles/ad_ppc.hpp" 87 # include "adfiles/ad_ppc_32.hpp"
88 #endif
89 #ifdef TARGET_ARCH_MODEL_ppc_64
90 # include "adfiles/ad_ppc_64.hpp"
88 #endif 91 #endif
89 92
90 93
91 // For debugging purposes: 94 // For debugging purposes:
92 // To force FullGCALot inside a runtime function, add the following two lines 95 // To force FullGCALot inside a runtime function, add the following two lines
790 return make_arraycopy_Type(ac_generic); 793 return make_arraycopy_Type(ac_generic);
791 } 794 }
792 795
793 796
794 const TypeFunc* OptoRuntime::array_fill_Type() { 797 const TypeFunc* OptoRuntime::array_fill_Type() {
798 const Type** fields;
799 int argp = TypeFunc::Parms;
800 if (CCallingConventionRequiresIntsAsLongs) {
795 // create input type (domain): pointer, int, size_t 801 // create input type (domain): pointer, int, size_t
796 const Type** fields = TypeTuple::fields(3 LP64_ONLY( + 1)); 802 fields = TypeTuple::fields(3 LP64_ONLY( + 2));
797 int argp = TypeFunc::Parms; 803 fields[argp++] = TypePtr::NOTNULL;
798 fields[argp++] = TypePtr::NOTNULL; 804 fields[argp++] = TypeLong::LONG;
799 fields[argp++] = TypeInt::INT; 805 fields[argp++] = Type::HALF;
806 } else {
807 // create input type (domain): pointer, int, size_t
808 fields = TypeTuple::fields(3 LP64_ONLY( + 1));
809 fields[argp++] = TypePtr::NOTNULL;
810 fields[argp++] = TypeInt::INT;
811 }
800 fields[argp++] = TypeX_X; // size in whatevers (size_t) 812 fields[argp++] = TypeX_X; // size in whatevers (size_t)
801 LP64_ONLY(fields[argp++] = Type::HALF); // other half of long length 813 LP64_ONLY(fields[argp++] = Type::HALF); // other half of long length
802 const TypeTuple *domain = TypeTuple::make(argp, fields); 814 const TypeTuple *domain = TypeTuple::make(argp, fields);
803 815
804 // create result type 816 // create result type
1044 // Adjust the pc back to the original throwing pc 1056 // Adjust the pc back to the original throwing pc
1045 pc = deoptee.pc(); 1057 pc = deoptee.pc();
1046 } 1058 }
1047 1059
1048 // If we are forcing an unwind because of stack overflow then deopt is 1060 // If we are forcing an unwind because of stack overflow then deopt is
1049 // irrelevant sice we are throwing the frame away anyway. 1061 // irrelevant since we are throwing the frame away anyway.
1050 1062
1051 if (deopting && !force_unwind) { 1063 if (deopting && !force_unwind) {
1052 handler_address = SharedRuntime::deopt_blob()->unpack_with_exception(); 1064 handler_address = SharedRuntime::deopt_blob()->unpack_with_exception();
1053 } else { 1065 } else {
1054 1066
1087 // If there is a compiled exception handler in this method, we will continue there; 1099 // If there is a compiled exception handler in this method, we will continue there;
1088 // otherwise we will unwind the stack and continue at the caller of top frame method 1100 // otherwise we will unwind the stack and continue at the caller of top frame method
1089 // Note we enter without the usual JRT wrapper. We will call a helper routine that 1101 // Note we enter without the usual JRT wrapper. We will call a helper routine that
1090 // will do the normal VM entry. We do it this way so that we can see if the nmethod 1102 // will do the normal VM entry. We do it this way so that we can see if the nmethod
1091 // we looked up the handler for has been deoptimized in the meantime. If it has been 1103 // we looked up the handler for has been deoptimized in the meantime. If it has been
1092 // we must not use the handler and instread return the deopt blob. 1104 // we must not use the handler and instead return the deopt blob.
1093 address OptoRuntime::handle_exception_C(JavaThread* thread) { 1105 address OptoRuntime::handle_exception_C(JavaThread* thread) {
1094 // 1106 //
1095 // We are in Java not VM and in debug mode we have a NoHandleMark 1107 // We are in Java not VM and in debug mode we have a NoHandleMark
1096 // 1108 //
1097 #ifndef PRODUCT 1109 #ifndef PRODUCT