@@ -59,12 +59,10 @@ define void @test_half_ceil(half %a0, ptr %p0) nounwind {
59
59
define void @test_half_copysign (half %a0 , half %a1 , ptr %p0 ) nounwind {
60
60
; F16C-LABEL: test_half_copysign:
61
61
; F16C: # %bb.0:
62
- ; F16C-NEXT: vpextrw $0, %xmm1, %eax
63
- ; F16C-NEXT: andl $32768, %eax # imm = 0x8000
64
- ; F16C-NEXT: vpextrw $0, %xmm0, %ecx
65
- ; F16C-NEXT: andl $32767, %ecx # imm = 0x7FFF
66
- ; F16C-NEXT: orl %eax, %ecx
67
- ; F16C-NEXT: movw %cx, (%rdi)
62
+ ; F16C-NEXT: vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1, %xmm1
63
+ ; F16C-NEXT: vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
64
+ ; F16C-NEXT: vpor %xmm1, %xmm0, %xmm0
65
+ ; F16C-NEXT: vpextrw $0, %xmm0, (%rdi)
68
66
; F16C-NEXT: retq
69
67
;
70
68
; FP16-LABEL: test_half_copysign:
@@ -76,23 +74,23 @@ define void @test_half_copysign(half %a0, half %a1, ptr %p0) nounwind {
76
74
;
77
75
; X64-LABEL: test_half_copysign:
78
76
; X64: # %bb.0:
79
- ; X64-NEXT: pextrw $0, %xmm1, %eax
80
- ; X64-NEXT: andl $32768, %eax # imm = 0x8000
81
- ; X64-NEXT: pextrw $0, %xmm0, %ecx
82
- ; X64-NEXT: andl $32767, %ecx # imm = 0x7FFF
83
- ; X64-NEXT: orl %eax, %ecx
84
- ; X64-NEXT: movw %cx, (%rdi)
77
+ ; X64-NEXT: pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm1
78
+ ; X64-NEXT: pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
79
+ ; X64-NEXT: por %xmm1, %xmm0
80
+ ; X64-NEXT: pextrw $0, %xmm0, %eax
81
+ ; X64-NEXT: movw %ax, (%rdi)
85
82
; X64-NEXT: retq
86
83
;
87
84
; X86-LABEL: test_half_copysign:
88
85
; X86: # %bb.0:
86
+ ; X86-NEXT: pinsrw $0, {{[0-9]+}}(%esp), %xmm0
87
+ ; X86-NEXT: pinsrw $0, {{[0-9]+}}(%esp), %xmm1
89
88
; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
90
- ; X86-NEXT: movzwl {{[0-9]+}}(%esp), %ecx
91
- ; X86-NEXT: andl $32768, %ecx # imm = 0x8000
92
- ; X86-NEXT: movzwl {{[0-9]+}}(%esp), %edx
93
- ; X86-NEXT: andl $32767, %edx # imm = 0x7FFF
94
- ; X86-NEXT: orl %ecx, %edx
95
- ; X86-NEXT: movw %dx, (%eax)
89
+ ; X86-NEXT: pand {{\.?LCPI[0-9]+_[0-9]+}}, %xmm1
90
+ ; X86-NEXT: pand {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
91
+ ; X86-NEXT: por %xmm1, %xmm0
92
+ ; X86-NEXT: pextrw $0, %xmm0, %ecx
93
+ ; X86-NEXT: movw %cx, (%eax)
96
94
; X86-NEXT: retl
97
95
%res = call half @llvm.copysign.half (half %a0 , half %a1 )
98
96
store half %res , ptr %p0 , align 2
@@ -334,9 +332,7 @@ define void @test_half_exp10(half %a0, ptr %p0) nounwind {
334
332
define void @test_half_fabs (half %a0 , ptr %p0 ) nounwind {
335
333
; F16C-LABEL: test_half_fabs:
336
334
; F16C: # %bb.0:
337
- ; F16C-NEXT: vcvtph2ps %xmm0, %xmm0
338
- ; F16C-NEXT: vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
339
- ; F16C-NEXT: vcvtps2ph $4, %xmm0, %xmm0
335
+ ; F16C-NEXT: vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
340
336
; F16C-NEXT: vpextrw $0, %xmm0, (%rdi)
341
337
; F16C-NEXT: retq
342
338
;
@@ -349,14 +345,9 @@ define void @test_half_fabs(half %a0, ptr %p0) nounwind {
349
345
;
350
346
; X64-LABEL: test_half_fabs:
351
347
; X64: # %bb.0:
352
- ; X64-NEXT: pushq %rbx
353
- ; X64-NEXT: movq %rdi, %rbx
354
- ; X64-NEXT: callq __extendhfsf2@PLT
355
348
; X64-NEXT: pand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
356
- ; X64-NEXT: callq __truncsfhf2@PLT
357
349
; X64-NEXT: pextrw $0, %xmm0, %eax
358
- ; X64-NEXT: movw %ax, (%rbx)
359
- ; X64-NEXT: popq %rbx
350
+ ; X64-NEXT: movw %ax, (%rdi)
360
351
; X64-NEXT: retq
361
352
;
362
353
; X86-LABEL: test_half_fabs:
@@ -514,9 +505,7 @@ define void @test_half_fma(half %a0, half %a1, half %a2, ptr %p0) nounwind {
514
505
define void @test_half_fneg (half %a0 , ptr %p0 ) nounwind {
515
506
; F16C-LABEL: test_half_fneg:
516
507
; F16C: # %bb.0:
517
- ; F16C-NEXT: vcvtph2ps %xmm0, %xmm0
518
- ; F16C-NEXT: vxorps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
519
- ; F16C-NEXT: vcvtps2ph $4, %xmm0, %xmm0
508
+ ; F16C-NEXT: vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
520
509
; F16C-NEXT: vpextrw $0, %xmm0, (%rdi)
521
510
; F16C-NEXT: retq
522
511
;
@@ -529,14 +518,9 @@ define void @test_half_fneg(half %a0, ptr %p0) nounwind {
529
518
;
530
519
; X64-LABEL: test_half_fneg:
531
520
; X64: # %bb.0:
532
- ; X64-NEXT: pushq %rbx
533
- ; X64-NEXT: movq %rdi, %rbx
534
- ; X64-NEXT: callq __extendhfsf2@PLT
535
521
; X64-NEXT: pxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
536
- ; X64-NEXT: callq __truncsfhf2@PLT
537
522
; X64-NEXT: pextrw $0, %xmm0, %eax
538
- ; X64-NEXT: movw %ax, (%rbx)
539
- ; X64-NEXT: popq %rbx
523
+ ; X64-NEXT: movw %ax, (%rdi)
540
524
; X64-NEXT: retq
541
525
;
542
526
; X86-LABEL: test_half_fneg:
0 commit comments