comparison src/os_cpu/solaris_x86/vm/solaris_x86_64.s @ 11127:980532a806a5

8016697: Use stubs to implement safefetch Summary: Implement Safefetch as stub routines. This reduces compiler and os dependencies. Reviewed-by: twisti, kvn
author goetz
date Thu, 20 Jun 2013 15:02:05 +0200
parents c18cbe5936b8
children de6a9e811145
comparison
equal deleted inserted replaced
11088:ea4d24c1e0c6 11127:980532a806a5
19 / Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 19 / Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 / or visit www.oracle.com if you need additional information or have any 20 / or visit www.oracle.com if you need additional information or have any
21 / questions. 21 / questions.
22 / 22 /
23 23
24 .globl fs_load 24 .globl fs_load
25 .globl fs_thread 25 .globl fs_thread
26 26
27 // NOTE WELL! The _Copy functions are called directly 27 // NOTE WELL! The _Copy functions are called directly
28 // from server-compiler-generated code via CallLeafNoFP, 28 // from server-compiler-generated code via CallLeafNoFP,
29 // which means that they *must* either not use floating 29 // which means that they *must* either not use floating
30 // point or use it in the same manner as does the server 30 // point or use it in the same manner as does the server
31 // compiler. 31 // compiler.
32 32
33 .globl _Copy_arrayof_conjoint_bytes 33 .globl _Copy_arrayof_conjoint_bytes
34 .globl _Copy_conjoint_jshorts_atomic 34 .globl _Copy_conjoint_jshorts_atomic
35 .globl _Copy_arrayof_conjoint_jshorts 35 .globl _Copy_arrayof_conjoint_jshorts
36 .globl _Copy_conjoint_jints_atomic 36 .globl _Copy_conjoint_jints_atomic
37 .globl _Copy_arrayof_conjoint_jints 37 .globl _Copy_arrayof_conjoint_jints
38 .globl _Copy_conjoint_jlongs_atomic 38 .globl _Copy_conjoint_jlongs_atomic
39 .globl _Copy_arrayof_conjoint_jlongs 39 .globl _Copy_arrayof_conjoint_jlongs
40 40
41 .section .text,"ax" 41 .section .text,"ax"
42 42
43 / Fast thread accessors, used by threadLS_solaris_amd64.cpp 43 / Fast thread accessors, used by threadLS_solaris_amd64.cpp
44 .align 16 44 .align 16
45 fs_load: 45 fs_load:
46 movq %fs:(%rdi),%rax 46 movq %fs:(%rdi),%rax
47 ret 47 ret
48 48
49 .align 16 49 .align 16
50 fs_thread: 50 fs_thread:
51 movq %fs:0x0,%rax 51 movq %fs:0x0,%rax
52 ret
53
54 .globl SafeFetch32, Fetch32PFI, Fetch32Resume
55 .align 16
56 // Prototype: int SafeFetch32 (int * Adr, int ErrValue)
57 SafeFetch32:
58 movl %esi, %eax
59 Fetch32PFI:
60 movl (%rdi), %eax
61 Fetch32Resume:
62 ret
63
64 .globl SafeFetchN, FetchNPFI, FetchNResume
65 .align 16
66 // Prototype: intptr_t SafeFetchN (intptr_t * Adr, intptr_t ErrValue)
67 SafeFetchN:
68 movq %rsi, %rax
69 FetchNPFI:
70 movq (%rdi), %rax
71 FetchNResume:
72 ret 52 ret
73 53
74 .globl SpinPause 54 .globl SpinPause
75 .align 16 55 .align 16
76 SpinPause: 56 SpinPause:
77 rep 57 rep
78 nop 58 nop
79 movq $1, %rax 59 movq $1, %rax
80 ret 60 ret
81 61
82 62
83 / Support for void Copy::arrayof_conjoint_bytes(void* from, 63 / Support for void Copy::arrayof_conjoint_bytes(void* from,
84 / void* to, 64 / void* to,
85 / size_t count) 65 / size_t count)
86 / rdi - from 66 / rdi - from
338 3: subq $4,%rdx 318 3: subq $4,%rdx
339 jge 2b 319 jge 2b
340 addq $4,%rdx 320 addq $4,%rdx
341 jg 1b 321 jg 1b
342 ret 322 ret
343 323
344 / Support for void Copy::arrayof_conjoint_jlongs(jlong* from, 324 / Support for void Copy::arrayof_conjoint_jlongs(jlong* from,
345 / jlong* to, 325 / jlong* to,
346 / size_t count) 326 / size_t count)
347 / Equivalent to 327 / Equivalent to
348 / conjoint_jlongs_atomic 328 / conjoint_jlongs_atomic