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; |