clarify the purpose of this project
[nyanglibc.git] / stdlib / lshift.s
blob238aa5e7bc8e47fdef3ec5b7d9e1e850898f2032
1 .text
2 .globl __mpn_lshift
3 .type __mpn_lshift,@function
4 .align 1<<4
5 __mpn_lshift:
6 lea -8(%rdi,%rdx,8), %rdi
7 lea -8(%rsi,%rdx,8), %rsi
8 mov %edx, %eax
9 and $3, %eax
10 jne .Lnb00
11 .Lb00:
12 mov (%rsi), %r10
13 mov -8(%rsi), %r11
14 xor %eax, %eax
15 shld %cl, %r10, %rax
16 mov -16(%rsi), %r8
17 lea 24(%rdi), %rdi
18 sub $4, %rdx
19 jmp .L00
20 .Lnb00:
21 cmp $2, %eax
22 jae .Lnb01
23 .Lb01: mov (%rsi), %r9
24 xor %eax, %eax
25 shld %cl, %r9, %rax
26 sub $2, %rdx
27 jb .Lle1
28 mov -8(%rsi), %r10
29 mov -16(%rsi), %r11
30 lea -8(%rsi), %rsi
31 lea 16(%rdi), %rdi
32 jmp .L01
33 .Lle1: shl %cl, %r9
34 mov %r9, (%rdi)
35 ret
36 .Lnb01:
37 jne .Lb11
38 .Lb10: mov (%rsi), %r8
39 mov -8(%rsi), %r9
40 xor %eax, %eax
41 shld %cl, %r8, %rax
42 sub $3, %rdx
43 jb .Lle2
44 mov -16(%rsi), %r10
45 lea -16(%rsi), %rsi
46 lea 8(%rdi), %rdi
47 jmp .L10
48 .Lle2: shld %cl, %r9, %r8
49 mov %r8, (%rdi)
50 shl %cl, %r9
51 mov %r9, -8(%rdi)
52 ret
53 .p2align 4
54 .Lb11:
55 mov (%rsi), %r11
56 mov -8(%rsi), %r8
57 xor %eax, %eax
58 shld %cl, %r11, %rax
59 mov -16(%rsi), %r9
60 lea -24(%rsi), %rsi
61 sub $4, %rdx
62 jb .Lend
63 .p2align 4
64 .Ltop: shld %cl, %r8, %r11
65 mov (%rsi), %r10
66 mov %r11, (%rdi)
67 .L10: shld %cl, %r9, %r8
68 mov -8(%rsi), %r11
69 mov %r8, -8(%rdi)
70 .L01: shld %cl, %r10, %r9
71 mov -16(%rsi), %r8
72 mov %r9, -16(%rdi)
73 .L00: shld %cl, %r11, %r10
74 mov -24(%rsi), %r9
75 mov %r10, -24(%rdi)
76 add $-32, %rsi
77 lea -32(%rdi), %rdi
78 sub $4, %rdx
79 jnc .Ltop
80 .Lend: shld %cl, %r8, %r11
81 mov %r11, (%rdi)
82 shld %cl, %r9, %r8
83 mov %r8, -8(%rdi)
84 shl %cl, %r9
85 mov %r9, -16(%rdi)
86 ret
87 .size __mpn_lshift,.-__mpn_lshift