@@ -124,11 +124,7 @@ define void @test_half_fabs(half %a0, ptr %p0) nounwind {
124124; F16C-LABEL: test_half_fabs:
125125; F16C: # %bb.0:
126126; F16C-NEXT: vpextrw $0, %xmm0, %eax
127- ; F16C-NEXT: vmovd %eax, %xmm0
128- ; F16C-NEXT: vcvtph2ps %xmm0, %xmm0
129- ; F16C-NEXT: vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
130- ; F16C-NEXT: vcvtps2ph $4, %xmm0, %xmm0
131- ; F16C-NEXT: vmovd %xmm0, %eax
127+ ; F16C-NEXT: andl $32767, %eax # imm = 0x7FFF
132128; F16C-NEXT: movw %ax, (%rdi)
133129; F16C-NEXT: retq
134130;
@@ -141,34 +137,17 @@ define void @test_half_fabs(half %a0, ptr %p0) nounwind {
141137;
142138; X64-LABEL: test_half_fabs:
143139; X64: # %bb.0:
144- ; X64-NEXT: pushq %rbx
145- ; X64-NEXT: movq %rdi, %rbx
146- ; X64-NEXT: callq __extendhfsf2@PLT
147- ; X64-NEXT: pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
148- ; X64-NEXT: callq __truncsfhf2@PLT
149140; X64-NEXT: pextrw $0, %xmm0, %eax
150- ; X64-NEXT: movw %ax, (%rbx)
151- ; X64-NEXT: popq %rbx
141+ ; X64-NEXT: andl $32767, %eax # imm = 0x7FFF
142+ ; X64-NEXT: movw %ax, (%rdi)
152143; X64-NEXT: retq
153144;
154145; X86-LABEL: test_half_fabs:
155146; X86: # %bb.0:
156- ; X86-NEXT: pushl %esi
157- ; X86-NEXT: subl $8, %esp
158- ; X86-NEXT: pinsrw $0, {{[0-9]+}}(%esp), %xmm0
159- ; X86-NEXT: movl {{[0-9]+}}(%esp), %esi
160- ; X86-NEXT: pextrw $0, %xmm0, %eax
161- ; X86-NEXT: movw %ax, (%esp)
162- ; X86-NEXT: calll __extendhfsf2
163- ; X86-NEXT: fstps {{[0-9]+}}(%esp)
164- ; X86-NEXT: movd {{.*#+}} xmm0 = mem[0],zero,zero,zero
165- ; X86-NEXT: pand {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
166- ; X86-NEXT: movd %xmm0, (%esp)
167- ; X86-NEXT: calll __truncsfhf2
168- ; X86-NEXT: pextrw $0, %xmm0, %eax
169- ; X86-NEXT: movw %ax, (%esi)
170- ; X86-NEXT: addl $8, %esp
171- ; X86-NEXT: popl %esi
147+ ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
148+ ; X86-NEXT: movzwl {{[0-9]+}}(%esp), %ecx
149+ ; X86-NEXT: andl $32767, %ecx # imm = 0x7FFF
150+ ; X86-NEXT: movw %cx, (%eax)
172151; X86-NEXT: retl
173152 %res = call half @llvm.fabs.half (half %a0 )
174153 store half %res , ptr %p0 , align 2
@@ -179,11 +158,7 @@ define void @test_half_fneg(half %a0, ptr %p0) nounwind {
179158; F16C-LABEL: test_half_fneg:
180159; F16C: # %bb.0:
181160; F16C-NEXT: vpextrw $0, %xmm0, %eax
182- ; F16C-NEXT: vmovd %eax, %xmm0
183- ; F16C-NEXT: vcvtph2ps %xmm0, %xmm0
184- ; F16C-NEXT: vxorps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
185- ; F16C-NEXT: vcvtps2ph $4, %xmm0, %xmm0
186- ; F16C-NEXT: vmovd %xmm0, %eax
161+ ; F16C-NEXT: xorl $32768, %eax # imm = 0x8000
187162; F16C-NEXT: movw %ax, (%rdi)
188163; F16C-NEXT: retq
189164;
@@ -196,34 +171,17 @@ define void @test_half_fneg(half %a0, ptr %p0) nounwind {
196171;
197172; X64-LABEL: test_half_fneg:
198173; X64: # %bb.0:
199- ; X64-NEXT: pushq %rbx
200- ; X64-NEXT: movq %rdi, %rbx
201- ; X64-NEXT: callq __extendhfsf2@PLT
202- ; X64-NEXT: pxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
203- ; X64-NEXT: callq __truncsfhf2@PLT
204174; X64-NEXT: pextrw $0, %xmm0, %eax
205- ; X64-NEXT: movw %ax, (%rbx)
206- ; X64-NEXT: popq %rbx
175+ ; X64-NEXT: xorl $32768, %eax # imm = 0x8000
176+ ; X64-NEXT: movw %ax, (%rdi)
207177; X64-NEXT: retq
208178;
209179; X86-LABEL: test_half_fneg:
210180; X86: # %bb.0:
211- ; X86-NEXT: pushl %esi
212- ; X86-NEXT: subl $8, %esp
213- ; X86-NEXT: pinsrw $0, {{[0-9]+}}(%esp), %xmm0
214- ; X86-NEXT: movl {{[0-9]+}}(%esp), %esi
215- ; X86-NEXT: pextrw $0, %xmm0, %eax
216- ; X86-NEXT: movw %ax, (%esp)
217- ; X86-NEXT: calll __extendhfsf2
218- ; X86-NEXT: fstps {{[0-9]+}}(%esp)
219- ; X86-NEXT: movd {{.*#+}} xmm0 = mem[0],zero,zero,zero
220- ; X86-NEXT: pxor {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
221- ; X86-NEXT: movd %xmm0, (%esp)
222- ; X86-NEXT: calll __truncsfhf2
223- ; X86-NEXT: pextrw $0, %xmm0, %eax
224- ; X86-NEXT: movw %ax, (%esi)
225- ; X86-NEXT: addl $8, %esp
226- ; X86-NEXT: popl %esi
181+ ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
182+ ; X86-NEXT: movl $32768, %ecx # imm = 0x8000
183+ ; X86-NEXT: xorl {{[0-9]+}}(%esp), %ecx
184+ ; X86-NEXT: movw %cx, (%eax)
227185; X86-NEXT: retl
228186 %res = fneg half %a0
229187 store half %res , ptr %p0 , align 2
0 commit comments