21 # questions.
22 #
23
24
25 # NOTE WELL! The _Copy functions are called directly
26 # from server-compiler-generated code via CallLeafNoFP,
27 # which means that they *must* either not use floating
28 # point or use it in the same manner as does the server
29 # compiler.
30
31 .globl _Copy_arrayof_conjoint_bytes
32 .globl _Copy_arrayof_conjoint_jshorts
33 .globl _Copy_conjoint_jshorts_atomic
34 .globl _Copy_arrayof_conjoint_jints
35 .globl _Copy_conjoint_jints_atomic
36 .globl _Copy_arrayof_conjoint_jlongs
37 .globl _Copy_conjoint_jlongs_atomic
38
39 .text
40
41 .globl SpinPause
42 .align 16
43 .type SpinPause,@function
44 SpinPause:
45 rep
46 nop
47 movq $1, %rax
48 ret
49
50 # Support for void Copy::arrayof_conjoint_bytes(void* from,
51 # void* to,
52 # size_t count)
53 # rdi - from
54 # rsi - to
55 # rdx - count, treated as ssize_t
56 #
57 .p2align 4,,15
58 .type _Copy_arrayof_conjoint_bytes,@function
59 _Copy_arrayof_conjoint_bytes:
60 movq %rdx,%r8 # byte count
61 shrq $3,%rdx # qword count
62 cmpq %rdi,%rsi
63 leaq -1(%rdi,%r8,1),%rax # from + bcount*1 - 1
64 jbe acb_CopyRight
65 cmpq %rax,%rsi
66 jbe acb_CopyLeft
67 acb_CopyRight:
68 leaq -8(%rdi,%rdx,8),%rax # from + qcount*8 - 8
69 leaq -8(%rsi,%rdx,8),%rcx # to + qcount*8 - 8
|
21 # questions.
22 #
23
24
25 # NOTE WELL! The _Copy functions are called directly
26 # from server-compiler-generated code via CallLeafNoFP,
27 # which means that they *must* either not use floating
28 # point or use it in the same manner as does the server
29 # compiler.
30
31 .globl _Copy_arrayof_conjoint_bytes
32 .globl _Copy_arrayof_conjoint_jshorts
33 .globl _Copy_conjoint_jshorts_atomic
34 .globl _Copy_arrayof_conjoint_jints
35 .globl _Copy_conjoint_jints_atomic
36 .globl _Copy_arrayof_conjoint_jlongs
37 .globl _Copy_conjoint_jlongs_atomic
38
39 .text
40
41 # Support for void Copy::arrayof_conjoint_bytes(void* from,
42 # void* to,
43 # size_t count)
44 # rdi - from
45 # rsi - to
46 # rdx - count, treated as ssize_t
47 #
48 .p2align 4,,15
49 .type _Copy_arrayof_conjoint_bytes,@function
50 _Copy_arrayof_conjoint_bytes:
51 movq %rdx,%r8 # byte count
52 shrq $3,%rdx # qword count
53 cmpq %rdi,%rsi
54 leaq -1(%rdi,%r8,1),%rax # from + bcount*1 - 1
55 jbe acb_CopyRight
56 cmpq %rax,%rsi
57 jbe acb_CopyLeft
58 acb_CopyRight:
59 leaq -8(%rdi,%rdx,8),%rax # from + qcount*8 - 8
60 leaq -8(%rsi,%rdx,8),%rcx # to + qcount*8 - 8
|