180 // Just restore result register. Only used by deoptimization. By 181 // now any callee save register that needs to be restored to a c2 182 // caller of the deoptee has been extracted into the vframeArray 183 // and will be stuffed into the c2i adapter we create for later 184 // restoration so only result registers need to be restored here. 185 186 // Restore fp result register 187 __ ldrd(v0, Address(sp, v0_offset_in_bytes())); 188 // Restore integer result register 189 __ ldr(r0, Address(sp, r0_offset_in_bytes())); 190 191 // Pop all of the register save are off the stack 192 __ add(sp, sp, round_to(return_offset_in_bytes(), 16)); 193 } 194 195 // Is vector's size (in bytes) bigger than a size saved by default? 196 // 8 bytes vector registers are saved by default on AArch64. 197 bool SharedRuntime::is_wide_vector(int size) { 198 return size > 8; 199 } 200 // The java_calling_convention describes stack locations as ideal slots on 201 // a frame with no abi restrictions. Since we must observe abi restrictions 202 // (like the placement of the register window) the slots must be biased by 203 // the following value. 204 static int reg2offset_in(VMReg r) { 205 // Account for saved rfp and lr 206 // This should really be in_preserve_stack_slots 207 return (r->reg2stack() + 4) * VMRegImpl::stack_slot_size; 208 } 209 210 static int reg2offset_out(VMReg r) { 211 return (r->reg2stack() + SharedRuntime::out_preserve_stack_slots()) * VMRegImpl::stack_slot_size; 212 } 213 214 template <class T> static const T& min (const T& a, const T& b) { 215 return (a > b) ? b : a; 216 } 217 218 // --------------------------------------------------------------------------- 219 // Read the array of BasicTypes from a signature, and compute where the | 180 // Just restore result register. Only used by deoptimization. By 181 // now any callee save register that needs to be restored to a c2 182 // caller of the deoptee has been extracted into the vframeArray 183 // and will be stuffed into the c2i adapter we create for later 184 // restoration so only result registers need to be restored here. 185 186 // Restore fp result register 187 __ ldrd(v0, Address(sp, v0_offset_in_bytes())); 188 // Restore integer result register 189 __ ldr(r0, Address(sp, r0_offset_in_bytes())); 190 191 // Pop all of the register save are off the stack 192 __ add(sp, sp, round_to(return_offset_in_bytes(), 16)); 193 } 194 195 // Is vector's size (in bytes) bigger than a size saved by default? 196 // 8 bytes vector registers are saved by default on AArch64. 197 bool SharedRuntime::is_wide_vector(int size) { 198 return size > 8; 199 } 200 201 size_t SharedRuntime::trampoline_size() { 202 return 16; 203 } 204 205 void SharedRuntime::generate_trampoline(MacroAssembler *masm, address destination) { 206 __ mov(rscratch1, destination); 207 __ br(rscratch1); 208 } 209 210 // The java_calling_convention describes stack locations as ideal slots on 211 // a frame with no abi restrictions. Since we must observe abi restrictions 212 // (like the placement of the register window) the slots must be biased by 213 // the following value. 214 static int reg2offset_in(VMReg r) { 215 // Account for saved rfp and lr 216 // This should really be in_preserve_stack_slots 217 return (r->reg2stack() + 4) * VMRegImpl::stack_slot_size; 218 } 219 220 static int reg2offset_out(VMReg r) { 221 return (r->reg2stack() + SharedRuntime::out_preserve_stack_slots()) * VMRegImpl::stack_slot_size; 222 } 223 224 template <class T> static const T& min (const T& a, const T& b) { 225 return (a > b) ? b : a; 226 } 227 228 // --------------------------------------------------------------------------- 229 // Read the array of BasicTypes from a signature, and compute where the |