@@ -78,5 +78,93 @@ entry:
78
78
ret <2 x fp128 > %c
79
79
}
80
80
81
+ define <3 x fp128 > @fabs_v3f128 (<3 x fp128 > %a ) {
82
+ ; CHECK-SD-LABEL: fabs_v3f128:
83
+ ; CHECK-SD: // %bb.0: // %entry
84
+ ; CHECK-SD-NEXT: stp q0, q1, [sp, #-48]!
85
+ ; CHECK-SD-NEXT: .cfi_def_cfa_offset 48
86
+ ; CHECK-SD-NEXT: ldrb w8, [sp, #15]
87
+ ; CHECK-SD-NEXT: str q2, [sp, #32]
88
+ ; CHECK-SD-NEXT: and w8, w8, #0x7f
89
+ ; CHECK-SD-NEXT: strb w8, [sp, #15]
90
+ ; CHECK-SD-NEXT: ldrb w8, [sp, #31]
91
+ ; CHECK-SD-NEXT: and w8, w8, #0x7f
92
+ ; CHECK-SD-NEXT: strb w8, [sp, #31]
93
+ ; CHECK-SD-NEXT: ldrb w8, [sp, #47]
94
+ ; CHECK-SD-NEXT: ldp q0, q1, [sp]
95
+ ; CHECK-SD-NEXT: and w8, w8, #0x7f
96
+ ; CHECK-SD-NEXT: strb w8, [sp, #47]
97
+ ; CHECK-SD-NEXT: ldr q2, [sp, #32]
98
+ ; CHECK-SD-NEXT: add sp, sp, #48
99
+ ; CHECK-SD-NEXT: ret
100
+ ;
101
+ ; CHECK-GI-LABEL: fabs_v3f128:
102
+ ; CHECK-GI: // %bb.0: // %entry
103
+ ; CHECK-GI-NEXT: mov x8, v0.d[1]
104
+ ; CHECK-GI-NEXT: mov x9, v1.d[1]
105
+ ; CHECK-GI-NEXT: mov x10, v2.d[1]
106
+ ; CHECK-GI-NEXT: mov v0.d[0], v0.d[0]
107
+ ; CHECK-GI-NEXT: mov v1.d[0], v1.d[0]
108
+ ; CHECK-GI-NEXT: mov v2.d[0], v2.d[0]
109
+ ; CHECK-GI-NEXT: and x8, x8, #0x7fffffffffffffff
110
+ ; CHECK-GI-NEXT: and x9, x9, #0x7fffffffffffffff
111
+ ; CHECK-GI-NEXT: and x10, x10, #0x7fffffffffffffff
112
+ ; CHECK-GI-NEXT: mov v0.d[1], x8
113
+ ; CHECK-GI-NEXT: mov v1.d[1], x9
114
+ ; CHECK-GI-NEXT: mov v2.d[1], x10
115
+ ; CHECK-GI-NEXT: ret
116
+ entry:
117
+ %c = call <3 x fp128 > @llvm.fabs.v3f128 (<3 x fp128 > %a )
118
+ ret <3 x fp128 > %c
119
+ }
120
+
121
+ define <4 x fp128 > @fabs_v4f128 (<4 x fp128 > %a ) {
122
+ ; CHECK-SD-LABEL: fabs_v4f128:
123
+ ; CHECK-SD: // %bb.0: // %entry
124
+ ; CHECK-SD-NEXT: stp q0, q1, [sp, #-64]!
125
+ ; CHECK-SD-NEXT: .cfi_def_cfa_offset 64
126
+ ; CHECK-SD-NEXT: ldrb w8, [sp, #15]
127
+ ; CHECK-SD-NEXT: stp q2, q3, [sp, #32]
128
+ ; CHECK-SD-NEXT: and w8, w8, #0x7f
129
+ ; CHECK-SD-NEXT: strb w8, [sp, #15]
130
+ ; CHECK-SD-NEXT: ldrb w8, [sp, #31]
131
+ ; CHECK-SD-NEXT: and w8, w8, #0x7f
132
+ ; CHECK-SD-NEXT: strb w8, [sp, #31]
133
+ ; CHECK-SD-NEXT: ldrb w8, [sp, #47]
134
+ ; CHECK-SD-NEXT: ldp q0, q1, [sp]
135
+ ; CHECK-SD-NEXT: and w8, w8, #0x7f
136
+ ; CHECK-SD-NEXT: strb w8, [sp, #47]
137
+ ; CHECK-SD-NEXT: ldrb w8, [sp, #63]
138
+ ; CHECK-SD-NEXT: and w8, w8, #0x7f
139
+ ; CHECK-SD-NEXT: strb w8, [sp, #63]
140
+ ; CHECK-SD-NEXT: ldp q2, q3, [sp, #32]
141
+ ; CHECK-SD-NEXT: add sp, sp, #64
142
+ ; CHECK-SD-NEXT: ret
143
+ ;
144
+ ; CHECK-GI-LABEL: fabs_v4f128:
145
+ ; CHECK-GI: // %bb.0: // %entry
146
+ ; CHECK-GI-NEXT: mov x8, v0.d[1]
147
+ ; CHECK-GI-NEXT: mov v7.d[0], v0.d[0]
148
+ ; CHECK-GI-NEXT: mov x9, v1.d[1]
149
+ ; CHECK-GI-NEXT: mov x10, v2.d[1]
150
+ ; CHECK-GI-NEXT: mov x11, v3.d[1]
151
+ ; CHECK-GI-NEXT: mov v1.d[0], v1.d[0]
152
+ ; CHECK-GI-NEXT: mov v2.d[0], v2.d[0]
153
+ ; CHECK-GI-NEXT: mov v3.d[0], v3.d[0]
154
+ ; CHECK-GI-NEXT: and x8, x8, #0x7fffffffffffffff
155
+ ; CHECK-GI-NEXT: mov v7.d[1], x8
156
+ ; CHECK-GI-NEXT: and x8, x9, #0x7fffffffffffffff
157
+ ; CHECK-GI-NEXT: and x9, x10, #0x7fffffffffffffff
158
+ ; CHECK-GI-NEXT: and x10, x11, #0x7fffffffffffffff
159
+ ; CHECK-GI-NEXT: mov v1.d[1], x8
160
+ ; CHECK-GI-NEXT: mov v2.d[1], x9
161
+ ; CHECK-GI-NEXT: mov v3.d[1], x10
162
+ ; CHECK-GI-NEXT: mov v0.16b, v7.16b
163
+ ; CHECK-GI-NEXT: ret
164
+ entry:
165
+ %c = call <4 x fp128 > @llvm.fabs.v4f128 (<4 x fp128 > %a )
166
+ ret <4 x fp128 > %c
167
+ }
168
+
81
169
;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
82
170
; CHECK: {{.*}}
0 commit comments