1
1
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2
- ; RUN: llc < %s -mtriple=i386-unknown | FileCheck %s --check-prefix=X32
2
+ ; RUN: llc < %s -mtriple=i386-unknown | FileCheck %s --check-prefix=X86
3
+ ; RUN: llc < %s -mtriple=x86_64-unknown-gnux32 | FileCheck %s --check-prefixes=X32
3
4
; RUN: llc < %s -mtriple=x86_64-unknown | FileCheck %s --check-prefix=X64
4
5
5
6
define void @add (ptr %p , ptr %q ) nounwind {
7
+ ; X86-LABEL: add:
8
+ ; X86: # %bb.0:
9
+ ; X86-NEXT: pushl %ebp
10
+ ; X86-NEXT: pushl %ebx
11
+ ; X86-NEXT: pushl %edi
12
+ ; X86-NEXT: pushl %esi
13
+ ; X86-NEXT: subl $8, %esp
14
+ ; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
15
+ ; X86-NEXT: movl 28(%ecx), %eax
16
+ ; X86-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
17
+ ; X86-NEXT: movl 24(%ecx), %eax
18
+ ; X86-NEXT: movl %eax, (%esp) # 4-byte Spill
19
+ ; X86-NEXT: movl 20(%ecx), %esi
20
+ ; X86-NEXT: movl 16(%ecx), %edi
21
+ ; X86-NEXT: movl 12(%ecx), %ebx
22
+ ; X86-NEXT: movl 8(%ecx), %ebp
23
+ ; X86-NEXT: movl (%ecx), %edx
24
+ ; X86-NEXT: movl 4(%ecx), %ecx
25
+ ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
26
+ ; X86-NEXT: addl %edx, (%eax)
27
+ ; X86-NEXT: adcl %ecx, 4(%eax)
28
+ ; X86-NEXT: adcl %ebp, 8(%eax)
29
+ ; X86-NEXT: adcl %ebx, 12(%eax)
30
+ ; X86-NEXT: adcl %edi, 16(%eax)
31
+ ; X86-NEXT: adcl %esi, 20(%eax)
32
+ ; X86-NEXT: movl (%esp), %ecx # 4-byte Reload
33
+ ; X86-NEXT: adcl %ecx, 24(%eax)
34
+ ; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
35
+ ; X86-NEXT: adcl %ecx, 28(%eax)
36
+ ; X86-NEXT: addl $8, %esp
37
+ ; X86-NEXT: popl %esi
38
+ ; X86-NEXT: popl %edi
39
+ ; X86-NEXT: popl %ebx
40
+ ; X86-NEXT: popl %ebp
41
+ ; X86-NEXT: retl
42
+ ;
6
43
; X32-LABEL: add:
7
44
; X32: # %bb.0:
8
- ; X32-NEXT: pushl %ebp
9
- ; X32-NEXT: pushl %ebx
10
- ; X32-NEXT: pushl %edi
11
- ; X32-NEXT: pushl %esi
12
- ; X32-NEXT: subl $8, %esp
13
- ; X32-NEXT: movl {{[0-9]+}}(%esp), %ecx
14
- ; X32-NEXT: movl 28(%ecx), %eax
15
- ; X32-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
16
- ; X32-NEXT: movl 24(%ecx), %eax
17
- ; X32-NEXT: movl %eax, (%esp) # 4-byte Spill
18
- ; X32-NEXT: movl 20(%ecx), %esi
19
- ; X32-NEXT: movl 16(%ecx), %edi
20
- ; X32-NEXT: movl 12(%ecx), %ebx
21
- ; X32-NEXT: movl 8(%ecx), %ebp
22
- ; X32-NEXT: movl (%ecx), %edx
23
- ; X32-NEXT: movl 4(%ecx), %ecx
24
- ; X32-NEXT: movl {{[0-9]+}}(%esp), %eax
25
- ; X32-NEXT: addl %edx, (%eax)
26
- ; X32-NEXT: adcl %ecx, 4(%eax)
27
- ; X32-NEXT: adcl %ebp, 8(%eax)
28
- ; X32-NEXT: adcl %ebx, 12(%eax)
29
- ; X32-NEXT: adcl %edi, 16(%eax)
30
- ; X32-NEXT: adcl %esi, 20(%eax)
31
- ; X32-NEXT: movl (%esp), %ecx # 4-byte Reload
32
- ; X32-NEXT: adcl %ecx, 24(%eax)
33
- ; X32-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
34
- ; X32-NEXT: adcl %ecx, 28(%eax)
35
- ; X32-NEXT: addl $8, %esp
36
- ; X32-NEXT: popl %esi
37
- ; X32-NEXT: popl %edi
38
- ; X32-NEXT: popl %ebx
39
- ; X32-NEXT: popl %ebp
40
- ; X32-NEXT: retl
45
+ ; X32-NEXT: movq 24(%esi), %rax
46
+ ; X32-NEXT: movq 16(%esi), %rcx
47
+ ; X32-NEXT: movq (%esi), %rdx
48
+ ; X32-NEXT: movq 8(%esi), %rsi
49
+ ; X32-NEXT: addq %rdx, (%edi)
50
+ ; X32-NEXT: adcq %rsi, 8(%edi)
51
+ ; X32-NEXT: adcq %rcx, 16(%edi)
52
+ ; X32-NEXT: adcq %rax, 24(%edi)
53
+ ; X32-NEXT: retq
41
54
;
42
55
; X64-LABEL: add:
43
56
; X64: # %bb.0:
@@ -57,41 +70,53 @@ define void @add(ptr %p, ptr %q) nounwind {
57
70
ret void
58
71
}
59
72
define void @sub (ptr %p , ptr %q ) nounwind {
73
+ ; X86-LABEL: sub:
74
+ ; X86: # %bb.0:
75
+ ; X86-NEXT: pushl %ebp
76
+ ; X86-NEXT: pushl %ebx
77
+ ; X86-NEXT: pushl %edi
78
+ ; X86-NEXT: pushl %esi
79
+ ; X86-NEXT: subl $8, %esp
80
+ ; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
81
+ ; X86-NEXT: movl 28(%ecx), %eax
82
+ ; X86-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
83
+ ; X86-NEXT: movl 24(%ecx), %eax
84
+ ; X86-NEXT: movl %eax, (%esp) # 4-byte Spill
85
+ ; X86-NEXT: movl 20(%ecx), %esi
86
+ ; X86-NEXT: movl 16(%ecx), %edi
87
+ ; X86-NEXT: movl 12(%ecx), %ebx
88
+ ; X86-NEXT: movl 8(%ecx), %ebp
89
+ ; X86-NEXT: movl (%ecx), %edx
90
+ ; X86-NEXT: movl 4(%ecx), %ecx
91
+ ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
92
+ ; X86-NEXT: subl %edx, (%eax)
93
+ ; X86-NEXT: sbbl %ecx, 4(%eax)
94
+ ; X86-NEXT: sbbl %ebp, 8(%eax)
95
+ ; X86-NEXT: sbbl %ebx, 12(%eax)
96
+ ; X86-NEXT: sbbl %edi, 16(%eax)
97
+ ; X86-NEXT: sbbl %esi, 20(%eax)
98
+ ; X86-NEXT: movl (%esp), %ecx # 4-byte Reload
99
+ ; X86-NEXT: sbbl %ecx, 24(%eax)
100
+ ; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
101
+ ; X86-NEXT: sbbl %ecx, 28(%eax)
102
+ ; X86-NEXT: addl $8, %esp
103
+ ; X86-NEXT: popl %esi
104
+ ; X86-NEXT: popl %edi
105
+ ; X86-NEXT: popl %ebx
106
+ ; X86-NEXT: popl %ebp
107
+ ; X86-NEXT: retl
108
+ ;
60
109
; X32-LABEL: sub:
61
110
; X32: # %bb.0:
62
- ; X32-NEXT: pushl %ebp
63
- ; X32-NEXT: pushl %ebx
64
- ; X32-NEXT: pushl %edi
65
- ; X32-NEXT: pushl %esi
66
- ; X32-NEXT: subl $8, %esp
67
- ; X32-NEXT: movl {{[0-9]+}}(%esp), %ecx
68
- ; X32-NEXT: movl 28(%ecx), %eax
69
- ; X32-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
70
- ; X32-NEXT: movl 24(%ecx), %eax
71
- ; X32-NEXT: movl %eax, (%esp) # 4-byte Spill
72
- ; X32-NEXT: movl 20(%ecx), %esi
73
- ; X32-NEXT: movl 16(%ecx), %edi
74
- ; X32-NEXT: movl 12(%ecx), %ebx
75
- ; X32-NEXT: movl 8(%ecx), %ebp
76
- ; X32-NEXT: movl (%ecx), %edx
77
- ; X32-NEXT: movl 4(%ecx), %ecx
78
- ; X32-NEXT: movl {{[0-9]+}}(%esp), %eax
79
- ; X32-NEXT: subl %edx, (%eax)
80
- ; X32-NEXT: sbbl %ecx, 4(%eax)
81
- ; X32-NEXT: sbbl %ebp, 8(%eax)
82
- ; X32-NEXT: sbbl %ebx, 12(%eax)
83
- ; X32-NEXT: sbbl %edi, 16(%eax)
84
- ; X32-NEXT: sbbl %esi, 20(%eax)
85
- ; X32-NEXT: movl (%esp), %ecx # 4-byte Reload
86
- ; X32-NEXT: sbbl %ecx, 24(%eax)
87
- ; X32-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
88
- ; X32-NEXT: sbbl %ecx, 28(%eax)
89
- ; X32-NEXT: addl $8, %esp
90
- ; X32-NEXT: popl %esi
91
- ; X32-NEXT: popl %edi
92
- ; X32-NEXT: popl %ebx
93
- ; X32-NEXT: popl %ebp
94
- ; X32-NEXT: retl
111
+ ; X32-NEXT: movq 24(%esi), %rax
112
+ ; X32-NEXT: movq 16(%esi), %rcx
113
+ ; X32-NEXT: movq (%esi), %rdx
114
+ ; X32-NEXT: movq 8(%esi), %rsi
115
+ ; X32-NEXT: subq %rdx, (%edi)
116
+ ; X32-NEXT: sbbq %rsi, 8(%edi)
117
+ ; X32-NEXT: sbbq %rcx, 16(%edi)
118
+ ; X32-NEXT: sbbq %rax, 24(%edi)
119
+ ; X32-NEXT: retq
95
120
;
96
121
; X64-LABEL: sub:
97
122
; X64: # %bb.0:
0 commit comments