repo.or.cz
/
syslinux-debian
/
hramrach.git
/
blob
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
log
|
graphiclog1
|
graphiclog2
|
commit
|
commitdiff
|
tree
|
refs
|
edit
|
fork
blame
|
history
|
raw
|
HEAD
Add memtest support.
[syslinux-debian/hramrach.git]
/
com32
/
lib
/
libgcc
/
__muldi3.S
blob
424787c81e61ac83adbc8c7a247e6bc9ae67d9c7
1
/*
2
* arch/i386/libgcc/__muldi3.S
3
*
4
* 64*64 = 64 bit unsigned multiplication
5
*/
6
7
.text
8
.align 4
9
.globl __muldi3
10
.type __muldi3,@function
11
__muldi3:
12
#if __SIZEOF_POINTER__ == 4
13
/* i386 */
14
push %esi
15
#ifndef REGPARM
16
movl 8(%esp),%eax
17
movl %eax,%esi
18
movl 16(%esp),%ecx
19
mull %ecx
20
imull 12(%esp),%ecx
21
imull 20(%esp),%esi
22
addl %ecx,%edx
23
addl %esi,%edx
24
#else
25
movl %eax,%esi
26
push %edx
27
mull %ecx
28
imull 8(%esp),%esi
29
addl %esi,%edx
30
pop %esi
31
imull %esi,%ecx
32
addl %ecx,%edx
33
#endif
34
pop %esi
35
ret
36
#elif __SIZEOF_POINTER__ == 8
37
/* x86_64 */
38
push %rsi
39
#ifndef REGPARM
40
/*
41
movl 8(%esp),%eax
42
movl %eax,%esi
43
movl 16(%esp),%ecx
44
mull %ecx
45
imull 12(%esp),%ecx
46
imull 20(%esp),%esi
47
addl %ecx,%edx
48
addl %esi,%edx
49
*/
50
movq 8(%rsp),%rax
51
movq %rax,%rsi
52
movq 16(%rsp),%rcx
53
mulq %rcx
54
imulq 12(%rsp),%rcx
55
imulq 20(%rsp),%rsi
56
addq %rcx,%rdx
57
addq %rsi,%rdx
58
#else
59
/*
60
movl %eax,%esi
61
push %edx
62
mull %ecx
63
imull 8(%esp),%esi
64
addl %esi,%edx
65
pop %rsi
66
imull %esi,%ecx
67
addl %ecx,%edx
68
*/
69
movq %rax,%rsi
70
pushq %rdx
71
mulq %rcx
72
imulq 8(%rsp),%rsi
73
addq %rsi,%rdx
74
popq %rsi
75
imulq %rsi,%rcx
76
addq %rcx,%rdx
77
#endif
78
pop %rsi
79
ret
80
#else
81
#error "Unsupported architecture for __muldi3.S"
82
#endif
83
.size __muldi3,.-__muldi3