@@ -751,27 +751,23 @@ define i8 @abd_cmp_i8(i8 %a, i8 %b) nounwind {
751
751
define i16 @abd_cmp_i16 (i16 %a , i16 %b ) nounwind {
752
752
; X86-LABEL: abd_cmp_i16:
753
753
; X86: # %bb.0:
754
- ; X86-NEXT: pushl %esi
754
+ ; X86-NEXT: movzwl {{[0-9]+}}(%esp), %eax
755
755
; X86-NEXT: movzwl {{[0-9]+}}(%esp), %ecx
756
- ; X86-NEXT: movzwl {{[0-9]+}}(%esp), %edx
757
- ; X86-NEXT: movl %ecx, %esi
758
- ; X86-NEXT: subw %dx, %si
759
- ; X86-NEXT: movl %esi, %eax
756
+ ; X86-NEXT: subl %eax, %ecx
757
+ ; X86-NEXT: movl %ecx, %eax
760
758
; X86-NEXT: negl %eax
761
- ; X86-NEXT: cmpw %dx, %cx
762
- ; X86-NEXT: cmovbl %esi, %eax
759
+ ; X86-NEXT: cmovnsl %ecx, %eax
763
760
; X86-NEXT: # kill: def $ax killed $ax killed $eax
764
- ; X86-NEXT: popl %esi
765
761
; X86-NEXT: retl
766
762
;
767
763
; X64-LABEL: abd_cmp_i16:
768
764
; X64: # %bb.0:
769
- ; X64-NEXT: movl %edi, %ecx
770
- ; X64-NEXT: subw %si, %cx
765
+ ; X64-NEXT: movzwl %si, %eax
766
+ ; X64-NEXT: movzwl %di, %ecx
767
+ ; X64-NEXT: subl %eax, %ecx
771
768
; X64-NEXT: movl %ecx, %eax
772
769
; X64-NEXT: negl %eax
773
- ; X64-NEXT: cmpw %si, %di
774
- ; X64-NEXT: cmovbl %ecx, %eax
770
+ ; X64-NEXT: cmovnsl %ecx, %eax
775
771
; X64-NEXT: # kill: def $ax killed $ax killed $eax
776
772
; X64-NEXT: retq
777
773
%cmp = icmp ult i16 %a , %b
@@ -811,33 +807,30 @@ define i32 @abd_cmp_i32(i32 %a, i32 %b) nounwind {
811
807
define i64 @abd_cmp_i64 (i64 %a , i64 %b ) nounwind {
812
808
; X86-LABEL: abd_cmp_i64:
813
809
; X86: # %bb.0:
814
- ; X86-NEXT: pushl %ebx
815
- ; X86-NEXT: pushl %edi
816
810
; X86-NEXT: pushl %esi
817
811
; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
818
- ; X86-NEXT: movl {{[0-9]+}}(%esp), %edx
819
812
; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
820
- ; X86-NEXT: movl {{[0-9]+}}(%esp), %esi
821
- ; X86-NEXT: movl %ecx, %edi
822
- ; X86-NEXT: subl %eax, %edi
823
- ; X86-NEXT: movl %esi, %ebx
824
- ; X86-NEXT: sbbl %edx, %ebx
825
- ; X86-NEXT: subl %ecx, %eax
826
- ; X86-NEXT: sbbl %esi, %edx
827
- ; X86-NEXT: cmovael %edi, %eax
828
- ; X86-NEXT: cmovael %ebx, %edx
813
+ ; X86-NEXT: xorl %edx, %edx
814
+ ; X86-NEXT: subl {{[0-9]+}}(%esp), %eax
815
+ ; X86-NEXT: sbbl {{[0-9]+}}(%esp), %ecx
816
+ ; X86-NEXT: movl $0, %esi
817
+ ; X86-NEXT: sbbl %esi, %esi
818
+ ; X86-NEXT: xorl %esi, %ecx
819
+ ; X86-NEXT: xorl %esi, %eax
820
+ ; X86-NEXT: subl %esi, %eax
821
+ ; X86-NEXT: sbbl %esi, %ecx
822
+ ; X86-NEXT: negl %eax
823
+ ; X86-NEXT: sbbl %ecx, %edx
829
824
; X86-NEXT: popl %esi
830
- ; X86-NEXT: popl %edi
831
- ; X86-NEXT: popl %ebx
832
825
; X86-NEXT: retl
833
826
;
834
827
; X64-LABEL: abd_cmp_i64:
835
828
; X64: # %bb.0:
836
829
; X64-NEXT: movq %rdi, %rax
837
830
; X64-NEXT: subq %rsi, %rax
831
+ ; X64-NEXT: subq %rdi, %rsi
832
+ ; X64-NEXT: cmovaeq %rsi, %rax
838
833
; X64-NEXT: negq %rax
839
- ; X64-NEXT: subq %rsi, %rdi
840
- ; X64-NEXT: cmovbq %rdi, %rax
841
834
; X64-NEXT: retq
842
835
%cmp = icmp ult i64 %a , %b
843
836
%ab = sub i64 %a , %b
@@ -853,34 +846,36 @@ define i128 @abd_cmp_i128(i128 %a, i128 %b) nounwind {
853
846
; X86-NEXT: pushl %ebx
854
847
; X86-NEXT: pushl %edi
855
848
; X86-NEXT: pushl %esi
856
- ; X86-NEXT: pushl %eax
849
+ ; X86-NEXT: movl {{[0-9]+}}(%esp), %esi
857
850
; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
858
851
; X86-NEXT: movl {{[0-9]+}}(%esp), %edx
859
- ; X86-NEXT: movl {{[0-9]+}}(%esp), %esi
860
- ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
861
852
; X86-NEXT: movl {{[0-9]+}}(%esp), %ebx
862
- ; X86-NEXT: subl %edx, %eax
863
- ; X86-NEXT: movl %eax, (%esp) # 4-byte Spill
864
- ; X86-NEXT: sbbl %esi, %ebx
865
- ; X86-NEXT: movl {{[0-9]+}}(%esp), %ebp
866
- ; X86-NEXT: sbbl %ecx, %ebp
867
- ; X86-NEXT: movl {{[0-9]+}}(%esp), %edi
868
853
; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
869
- ; X86-NEXT: sbbl %edi, %eax
854
+ ; X86-NEXT: xorl %edi, %edi
870
855
; X86-NEXT: subl {{[0-9]+}}(%esp), %edx
856
+ ; X86-NEXT: sbbl {{[0-9]+}}(%esp), %ebx
871
857
; X86-NEXT: sbbl {{[0-9]+}}(%esp), %esi
872
858
; X86-NEXT: sbbl {{[0-9]+}}(%esp), %ecx
873
- ; X86-NEXT: sbbl {{[0-9]+}}(%esp), %edi
874
- ; X86-NEXT: cmovael (%esp), %edx # 4-byte Folded Reload
875
- ; X86-NEXT: cmovael %ebx, %esi
876
- ; X86-NEXT: cmovael %ebp, %ecx
877
- ; X86-NEXT: cmovael %eax, %edi
878
- ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
879
- ; X86-NEXT: movl %edi, 12(%eax)
880
- ; X86-NEXT: movl %ecx, 8(%eax)
881
- ; X86-NEXT: movl %esi, 4(%eax)
859
+ ; X86-NEXT: movl $0, %ebp
860
+ ; X86-NEXT: sbbl %ebp, %ebp
861
+ ; X86-NEXT: xorl %ebp, %ecx
862
+ ; X86-NEXT: xorl %ebp, %esi
863
+ ; X86-NEXT: xorl %ebp, %ebx
864
+ ; X86-NEXT: xorl %ebp, %edx
865
+ ; X86-NEXT: subl %ebp, %edx
866
+ ; X86-NEXT: sbbl %ebp, %ebx
867
+ ; X86-NEXT: sbbl %ebp, %esi
868
+ ; X86-NEXT: sbbl %ebp, %ecx
869
+ ; X86-NEXT: negl %edx
870
+ ; X86-NEXT: movl $0, %ebp
871
+ ; X86-NEXT: sbbl %ebx, %ebp
872
+ ; X86-NEXT: movl $0, %ebx
873
+ ; X86-NEXT: sbbl %esi, %ebx
874
+ ; X86-NEXT: sbbl %ecx, %edi
882
875
; X86-NEXT: movl %edx, (%eax)
883
- ; X86-NEXT: addl $4, %esp
876
+ ; X86-NEXT: movl %ebp, 4(%eax)
877
+ ; X86-NEXT: movl %ebx, 8(%eax)
878
+ ; X86-NEXT: movl %edi, 12(%eax)
884
879
; X86-NEXT: popl %esi
885
880
; X86-NEXT: popl %edi
886
881
; X86-NEXT: popl %ebx
@@ -889,15 +884,19 @@ define i128 @abd_cmp_i128(i128 %a, i128 %b) nounwind {
889
884
;
890
885
; X64-LABEL: abd_cmp_i128:
891
886
; X64: # %bb.0:
892
- ; X64-NEXT: movq %rdx, %rax
893
- ; X64-NEXT: subq %rdi, %rax
894
- ; X64-NEXT: movq %rcx, %r8
895
- ; X64-NEXT: sbbq %rsi, %r8
896
- ; X64-NEXT: subq %rdx, %rdi
887
+ ; X64-NEXT: movq %rdi, %rax
888
+ ; X64-NEXT: xorl %edi, %edi
889
+ ; X64-NEXT: subq %rdx, %rax
897
890
; X64-NEXT: sbbq %rcx, %rsi
898
- ; X64-NEXT: cmovbq %rdi, %rax
899
- ; X64-NEXT: cmovbq %rsi, %r8
900
- ; X64-NEXT: movq %r8, %rdx
891
+ ; X64-NEXT: movl $0, %ecx
892
+ ; X64-NEXT: sbbq %rcx, %rcx
893
+ ; X64-NEXT: xorq %rcx, %rsi
894
+ ; X64-NEXT: xorq %rcx, %rax
895
+ ; X64-NEXT: subq %rcx, %rax
896
+ ; X64-NEXT: sbbq %rcx, %rsi
897
+ ; X64-NEXT: negq %rax
898
+ ; X64-NEXT: sbbq %rsi, %rdi
899
+ ; X64-NEXT: movq %rdi, %rdx
901
900
; X64-NEXT: retq
902
901
%cmp = icmp ult i128 %a , %b
903
902
%ab = sub i128 %a , %b
0 commit comments