51 movl(rdi, ThreadLocalStorage::thread_index());
52 call(RuntimeAddress(CAST_FROM_FN_PTR(address, pthread_getspecific)));
53
54 popq(r11);
55 popq(rsp);
56 popq(r10);
57 popq(r9);
58 popq(r8);
59 popq(rcx);
60 popq(rdx);
61 popq(rsi);
62 popq(rdi);
63 if (thread != rax) {
64 movq(thread, rax);
65 popq(rax);
66 }
67 }
68
69 // NOTE: since the linux kernel resides at the low end of
70 // user address space, no null pointer check is needed.
71 bool MacroAssembler::needs_explicit_null_check(int offset) {
72 return offset < 0 || offset >= 0x100000;
73 }
|
51 movl(rdi, ThreadLocalStorage::thread_index());
52 call(RuntimeAddress(CAST_FROM_FN_PTR(address, pthread_getspecific)));
53
54 popq(r11);
55 popq(rsp);
56 popq(r10);
57 popq(r9);
58 popq(r8);
59 popq(rcx);
60 popq(rdx);
61 popq(rsi);
62 popq(rdi);
63 if (thread != rax) {
64 movq(thread, rax);
65 popq(rax);
66 }
67 }
68
69 // NOTE: since the linux kernel resides at the low end of
70 // user address space, no null pointer check is needed.
71 bool MacroAssembler::needs_explicit_null_check(intptr_t offset) {
72 if (UseCompressedOops) {
73 uintptr_t heap_base = (uintptr_t)Universe::heap_base();
74 if ((uintptr_t)offset >= heap_base) {
75 offset = (intptr_t)(pointer_delta((void*)offset, (void*)heap_base, 1));
76 }
77 }
78 return offset < 0 || offset >= 0x100000;
79 }
|