< prev index next >

src/hotspot/cpu/x86/c1_Runtime1_x86.cpp

Print this page


1221     case load_flattened_array_id:
1222       {
1223         StubFrame f(sasm, "load_flattened_array", dont_gc_arguments);
1224         OopMap* map = save_live_registers(sasm, 3);
1225 
1226         // Called with store_parameter and not C abi
1227 
1228         f.load_argument(1, rax); // rax,: array
1229         f.load_argument(0, rbx); // rbx,: index
1230         int call_offset = __ call_RT(rax, noreg, CAST_FROM_FN_PTR(address, load_flattened_array), rax, rbx);
1231 
1232         oop_maps = new OopMapSet();
1233         oop_maps->add_gc_map(call_offset, map);
1234         restore_live_registers_except_rax(sasm);
1235 
1236         // rax,: loaded element at array[index]
1237         __ verify_oop(rax);
1238       }
1239       break;
1240 


















1241     case register_finalizer_id:
1242       {
1243         __ set_info("register_finalizer", dont_gc_arguments);
1244 
1245         // This is called via call_runtime so the arguments
1246         // will be place in C abi locations
1247 
1248 #ifdef _LP64
1249         __ verify_oop(c_rarg0);
1250         __ mov(rax, c_rarg0);
1251 #else
1252         // The object is passed on the stack and we haven't pushed a
1253         // frame yet so it's one work away from top of stack.
1254         __ movptr(rax, Address(rsp, 1 * BytesPerWord));
1255         __ verify_oop(rax);
1256 #endif // _LP64
1257 
1258         // load the klass and check the has finalizer flag
1259         Label register_finalizer;
1260         Register t = rsi;




1221     case load_flattened_array_id:
1222       {
1223         StubFrame f(sasm, "load_flattened_array", dont_gc_arguments);
1224         OopMap* map = save_live_registers(sasm, 3);
1225 
1226         // Called with store_parameter and not C abi
1227 
1228         f.load_argument(1, rax); // rax,: array
1229         f.load_argument(0, rbx); // rbx,: index
1230         int call_offset = __ call_RT(rax, noreg, CAST_FROM_FN_PTR(address, load_flattened_array), rax, rbx);
1231 
1232         oop_maps = new OopMapSet();
1233         oop_maps->add_gc_map(call_offset, map);
1234         restore_live_registers_except_rax(sasm);
1235 
1236         // rax,: loaded element at array[index]
1237         __ verify_oop(rax);
1238       }
1239       break;
1240 
1241     case store_flattened_array_id:
1242       {
1243         StubFrame f(sasm, "store_flattened_array", dont_gc_arguments);
1244         OopMap* map = save_live_registers(sasm, 4);
1245 
1246         // Called with store_parameter and not C abi
1247 
1248         f.load_argument(2, rax); // rax,: array
1249         f.load_argument(1, rbx); // rbx,: index
1250         f.load_argument(0, rcx); // rcx,: value
1251         int call_offset = __ call_RT(noreg, noreg, CAST_FROM_FN_PTR(address, store_flattened_array), rax, rbx, rcx);
1252 
1253         oop_maps = new OopMapSet();
1254         oop_maps->add_gc_map(call_offset, map);
1255         restore_live_registers_except_rax(sasm);
1256       }
1257       break;
1258 
1259     case register_finalizer_id:
1260       {
1261         __ set_info("register_finalizer", dont_gc_arguments);
1262 
1263         // This is called via call_runtime so the arguments
1264         // will be place in C abi locations
1265 
1266 #ifdef _LP64
1267         __ verify_oop(c_rarg0);
1268         __ mov(rax, c_rarg0);
1269 #else
1270         // The object is passed on the stack and we haven't pushed a
1271         // frame yet so it's one work away from top of stack.
1272         __ movptr(rax, Address(rsp, 1 * BytesPerWord));
1273         __ verify_oop(rax);
1274 #endif // _LP64
1275 
1276         // load the klass and check the has finalizer flag
1277         Label register_finalizer;
1278         Register t = rsi;


< prev index next >