blob: e003deedc6c8740b9fbf1cd8395c6ef2986da966 [file] [edit]
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 6
; RUN: llc -mtriple=sparc -verify-machineinstrs -disable-strictnode-mutation < %s \
; RUN: | FileCheck %s --check-prefix=SOFT32
; RUN: llc -mtriple=sparcv9 -verify-machineinstrs -disable-strictnode-mutation < %s \
; RUN: | FileCheck %s --check-prefix=SOFT64
;; Every predicate of a constrained soft-quad f128 compare. Quiet compares call
;; _Q_cmp/_Qp_cmp and signaling compares call _Q_cmpe/_Qp_cmpe; the result,
;; 0 (equal), 1 (less), 2 (greater) or 3 (unordered), is then decoded per
;; predicate.
define i32 @fcmp_oeq(fp128 %a, fp128 %b) nounwind strictfp {
; SOFT32-LABEL: fcmp_oeq:
; SOFT32: ! %bb.0:
; SOFT32-NEXT: save %sp, -128, %sp
; SOFT32-NEXT: ldd [%i0+8], %f0
; SOFT32-NEXT: ldd [%i0], %f2
; SOFT32-NEXT: ldd [%i1], %f4
; SOFT32-NEXT: ldd [%i1+8], %f6
; SOFT32-NEXT: std %f0, [%fp+-8]
; SOFT32-NEXT: std %f2, [%fp+-16]
; SOFT32-NEXT: std %f4, [%fp+-32]
; SOFT32-NEXT: std %f6, [%fp+-24]
; SOFT32-NEXT: add %fp, -16, %o0
; SOFT32-NEXT: call _Q_cmp
; SOFT32-NEXT: add %fp, -32, %o1
; SOFT32-NEXT: cmp %o0, 0
; SOFT32-NEXT: be .LBB0_2
; SOFT32-NEXT: nop
; SOFT32-NEXT: ! %bb.1:
; SOFT32-NEXT: ret
; SOFT32-NEXT: restore %g0, %g0, %o0
; SOFT32-NEXT: .LBB0_2:
; SOFT32-NEXT: ret
; SOFT32-NEXT: restore %g0, 1, %o0
;
; SOFT64-LABEL: fcmp_oeq:
; SOFT64: ! %bb.0:
; SOFT64-NEXT: save %sp, -208, %sp
; SOFT64-NEXT: std %f2, [%fp+2039]
; SOFT64-NEXT: std %f0, [%fp+2031]
; SOFT64-NEXT: std %f4, [%fp+2015]
; SOFT64-NEXT: std %f6, [%fp+2023]
; SOFT64-NEXT: add %fp, 2031, %o0
; SOFT64-NEXT: call _Qp_cmp
; SOFT64-NEXT: add %fp, 2015, %o1
; SOFT64-NEXT: mov %g0, %i0
; SOFT64-NEXT: cmp %o0, 0
; SOFT64-NEXT: move %icc, 1, %i0
; SOFT64-NEXT: srl %i0, 0, %i0
; SOFT64-NEXT: ret
; SOFT64-NEXT: restore
%c = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"oeq", metadata !"fpexcept.strict") strictfp
%r = zext i1 %c to i32
ret i32 %r
}
define i32 @fcmp_ogt(fp128 %a, fp128 %b) nounwind strictfp {
; SOFT32-LABEL: fcmp_ogt:
; SOFT32: ! %bb.0:
; SOFT32-NEXT: save %sp, -128, %sp
; SOFT32-NEXT: ldd [%i0+8], %f0
; SOFT32-NEXT: ldd [%i0], %f2
; SOFT32-NEXT: ldd [%i1], %f4
; SOFT32-NEXT: ldd [%i1+8], %f6
; SOFT32-NEXT: std %f0, [%fp+-8]
; SOFT32-NEXT: std %f2, [%fp+-16]
; SOFT32-NEXT: std %f4, [%fp+-32]
; SOFT32-NEXT: std %f6, [%fp+-24]
; SOFT32-NEXT: add %fp, -16, %o0
; SOFT32-NEXT: call _Q_cmp
; SOFT32-NEXT: add %fp, -32, %o1
; SOFT32-NEXT: cmp %o0, 2
; SOFT32-NEXT: be .LBB1_2
; SOFT32-NEXT: nop
; SOFT32-NEXT: ! %bb.1:
; SOFT32-NEXT: ret
; SOFT32-NEXT: restore %g0, %g0, %o0
; SOFT32-NEXT: .LBB1_2:
; SOFT32-NEXT: ret
; SOFT32-NEXT: restore %g0, 1, %o0
;
; SOFT64-LABEL: fcmp_ogt:
; SOFT64: ! %bb.0:
; SOFT64-NEXT: save %sp, -208, %sp
; SOFT64-NEXT: std %f2, [%fp+2039]
; SOFT64-NEXT: std %f0, [%fp+2031]
; SOFT64-NEXT: std %f4, [%fp+2015]
; SOFT64-NEXT: std %f6, [%fp+2023]
; SOFT64-NEXT: add %fp, 2031, %o0
; SOFT64-NEXT: call _Qp_cmp
; SOFT64-NEXT: add %fp, 2015, %o1
; SOFT64-NEXT: mov %g0, %i0
; SOFT64-NEXT: cmp %o0, 2
; SOFT64-NEXT: move %icc, 1, %i0
; SOFT64-NEXT: srl %i0, 0, %i0
; SOFT64-NEXT: ret
; SOFT64-NEXT: restore
%c = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"ogt", metadata !"fpexcept.strict") strictfp
%r = zext i1 %c to i32
ret i32 %r
}
define i32 @fcmp_oge(fp128 %a, fp128 %b) nounwind strictfp {
; SOFT32-LABEL: fcmp_oge:
; SOFT32: ! %bb.0:
; SOFT32-NEXT: save %sp, -128, %sp
; SOFT32-NEXT: ldd [%i0+8], %f0
; SOFT32-NEXT: ldd [%i0], %f2
; SOFT32-NEXT: ldd [%i1], %f4
; SOFT32-NEXT: ldd [%i1+8], %f6
; SOFT32-NEXT: std %f0, [%fp+-8]
; SOFT32-NEXT: std %f2, [%fp+-16]
; SOFT32-NEXT: std %f4, [%fp+-32]
; SOFT32-NEXT: std %f6, [%fp+-24]
; SOFT32-NEXT: add %fp, -16, %o0
; SOFT32-NEXT: call _Q_cmp
; SOFT32-NEXT: add %fp, -32, %o1
; SOFT32-NEXT: andcc %o0, 1, %g0
; SOFT32-NEXT: be .LBB2_2
; SOFT32-NEXT: nop
; SOFT32-NEXT: ! %bb.1:
; SOFT32-NEXT: ret
; SOFT32-NEXT: restore %g0, %g0, %o0
; SOFT32-NEXT: .LBB2_2:
; SOFT32-NEXT: ret
; SOFT32-NEXT: restore %g0, 1, %o0
;
; SOFT64-LABEL: fcmp_oge:
; SOFT64: ! %bb.0:
; SOFT64-NEXT: save %sp, -208, %sp
; SOFT64-NEXT: std %f2, [%fp+2039]
; SOFT64-NEXT: std %f0, [%fp+2031]
; SOFT64-NEXT: std %f4, [%fp+2015]
; SOFT64-NEXT: std %f6, [%fp+2023]
; SOFT64-NEXT: add %fp, 2031, %o0
; SOFT64-NEXT: call _Qp_cmp
; SOFT64-NEXT: add %fp, 2015, %o1
; SOFT64-NEXT: mov %g0, %i0
; SOFT64-NEXT: andcc %o0, 1, %g0
; SOFT64-NEXT: move %icc, 1, %i0
; SOFT64-NEXT: srl %i0, 0, %i0
; SOFT64-NEXT: ret
; SOFT64-NEXT: restore
%c = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"oge", metadata !"fpexcept.strict") strictfp
%r = zext i1 %c to i32
ret i32 %r
}
define i32 @fcmp_olt(fp128 %a, fp128 %b) nounwind strictfp {
; SOFT32-LABEL: fcmp_olt:
; SOFT32: ! %bb.0:
; SOFT32-NEXT: save %sp, -128, %sp
; SOFT32-NEXT: ldd [%i0+8], %f0
; SOFT32-NEXT: ldd [%i0], %f2
; SOFT32-NEXT: ldd [%i1], %f4
; SOFT32-NEXT: ldd [%i1+8], %f6
; SOFT32-NEXT: std %f0, [%fp+-8]
; SOFT32-NEXT: std %f2, [%fp+-16]
; SOFT32-NEXT: std %f4, [%fp+-32]
; SOFT32-NEXT: std %f6, [%fp+-24]
; SOFT32-NEXT: add %fp, -16, %o0
; SOFT32-NEXT: call _Q_cmp
; SOFT32-NEXT: add %fp, -32, %o1
; SOFT32-NEXT: cmp %o0, 1
; SOFT32-NEXT: be .LBB3_2
; SOFT32-NEXT: nop
; SOFT32-NEXT: ! %bb.1:
; SOFT32-NEXT: ret
; SOFT32-NEXT: restore %g0, %g0, %o0
; SOFT32-NEXT: .LBB3_2:
; SOFT32-NEXT: ret
; SOFT32-NEXT: restore %g0, 1, %o0
;
; SOFT64-LABEL: fcmp_olt:
; SOFT64: ! %bb.0:
; SOFT64-NEXT: save %sp, -208, %sp
; SOFT64-NEXT: std %f2, [%fp+2039]
; SOFT64-NEXT: std %f0, [%fp+2031]
; SOFT64-NEXT: std %f4, [%fp+2015]
; SOFT64-NEXT: std %f6, [%fp+2023]
; SOFT64-NEXT: add %fp, 2031, %o0
; SOFT64-NEXT: call _Qp_cmp
; SOFT64-NEXT: add %fp, 2015, %o1
; SOFT64-NEXT: mov %g0, %i0
; SOFT64-NEXT: cmp %o0, 1
; SOFT64-NEXT: move %icc, 1, %i0
; SOFT64-NEXT: srl %i0, 0, %i0
; SOFT64-NEXT: ret
; SOFT64-NEXT: restore
%c = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"olt", metadata !"fpexcept.strict") strictfp
%r = zext i1 %c to i32
ret i32 %r
}
define i32 @fcmp_ole(fp128 %a, fp128 %b) nounwind strictfp {
; SOFT32-LABEL: fcmp_ole:
; SOFT32: ! %bb.0:
; SOFT32-NEXT: save %sp, -128, %sp
; SOFT32-NEXT: ldd [%i0+8], %f0
; SOFT32-NEXT: ldd [%i0], %f2
; SOFT32-NEXT: ldd [%i1], %f4
; SOFT32-NEXT: ldd [%i1+8], %f6
; SOFT32-NEXT: std %f0, [%fp+-8]
; SOFT32-NEXT: std %f2, [%fp+-16]
; SOFT32-NEXT: std %f4, [%fp+-32]
; SOFT32-NEXT: std %f6, [%fp+-24]
; SOFT32-NEXT: add %fp, -16, %o0
; SOFT32-NEXT: call _Q_cmp
; SOFT32-NEXT: add %fp, -32, %o1
; SOFT32-NEXT: cmp %o0, 2
; SOFT32-NEXT: bcs .LBB4_2
; SOFT32-NEXT: nop
; SOFT32-NEXT: ! %bb.1:
; SOFT32-NEXT: ret
; SOFT32-NEXT: restore %g0, %g0, %o0
; SOFT32-NEXT: .LBB4_2:
; SOFT32-NEXT: ret
; SOFT32-NEXT: restore %g0, 1, %o0
;
; SOFT64-LABEL: fcmp_ole:
; SOFT64: ! %bb.0:
; SOFT64-NEXT: save %sp, -208, %sp
; SOFT64-NEXT: std %f2, [%fp+2039]
; SOFT64-NEXT: std %f0, [%fp+2031]
; SOFT64-NEXT: std %f4, [%fp+2015]
; SOFT64-NEXT: std %f6, [%fp+2023]
; SOFT64-NEXT: add %fp, 2031, %o0
; SOFT64-NEXT: call _Qp_cmp
; SOFT64-NEXT: add %fp, 2015, %o1
; SOFT64-NEXT: mov %g0, %i0
; SOFT64-NEXT: cmp %o0, 2
; SOFT64-NEXT: movcs %icc, 1, %i0
; SOFT64-NEXT: srl %i0, 0, %i0
; SOFT64-NEXT: ret
; SOFT64-NEXT: restore
%c = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"ole", metadata !"fpexcept.strict") strictfp
%r = zext i1 %c to i32
ret i32 %r
}
define i32 @fcmp_one(fp128 %a, fp128 %b) nounwind strictfp {
; SOFT32-LABEL: fcmp_one:
; SOFT32: ! %bb.0:
; SOFT32-NEXT: save %sp, -128, %sp
; SOFT32-NEXT: ldd [%i0+8], %f0
; SOFT32-NEXT: ldd [%i0], %f2
; SOFT32-NEXT: ldd [%i1], %f4
; SOFT32-NEXT: ldd [%i1+8], %f6
; SOFT32-NEXT: std %f0, [%fp+-8]
; SOFT32-NEXT: std %f2, [%fp+-16]
; SOFT32-NEXT: std %f4, [%fp+-32]
; SOFT32-NEXT: std %f6, [%fp+-24]
; SOFT32-NEXT: add %fp, -16, %o0
; SOFT32-NEXT: call _Q_cmp
; SOFT32-NEXT: add %fp, -32, %o1
; SOFT32-NEXT: add %o0, -1, %i0
; SOFT32-NEXT: cmp %i0, 2
; SOFT32-NEXT: bcs .LBB5_2
; SOFT32-NEXT: nop
; SOFT32-NEXT: ! %bb.1:
; SOFT32-NEXT: ret
; SOFT32-NEXT: restore %g0, %g0, %o0
; SOFT32-NEXT: .LBB5_2:
; SOFT32-NEXT: ret
; SOFT32-NEXT: restore %g0, 1, %o0
;
; SOFT64-LABEL: fcmp_one:
; SOFT64: ! %bb.0:
; SOFT64-NEXT: save %sp, -208, %sp
; SOFT64-NEXT: std %f2, [%fp+2039]
; SOFT64-NEXT: std %f0, [%fp+2031]
; SOFT64-NEXT: std %f4, [%fp+2015]
; SOFT64-NEXT: std %f6, [%fp+2023]
; SOFT64-NEXT: add %fp, 2031, %o0
; SOFT64-NEXT: call _Qp_cmp
; SOFT64-NEXT: add %fp, 2015, %o1
; SOFT64-NEXT: mov %g0, %i0
; SOFT64-NEXT: add %o0, -1, %i1
; SOFT64-NEXT: cmp %i1, 2
; SOFT64-NEXT: movcs %icc, 1, %i0
; SOFT64-NEXT: srl %i0, 0, %i0
; SOFT64-NEXT: ret
; SOFT64-NEXT: restore
%c = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"one", metadata !"fpexcept.strict") strictfp
%r = zext i1 %c to i32
ret i32 %r
}
define i32 @fcmp_ord(fp128 %a, fp128 %b) nounwind strictfp {
; SOFT32-LABEL: fcmp_ord:
; SOFT32: ! %bb.0:
; SOFT32-NEXT: save %sp, -128, %sp
; SOFT32-NEXT: ldd [%i0+8], %f0
; SOFT32-NEXT: ldd [%i0], %f2
; SOFT32-NEXT: ldd [%i1], %f4
; SOFT32-NEXT: ldd [%i1+8], %f6
; SOFT32-NEXT: std %f0, [%fp+-8]
; SOFT32-NEXT: std %f2, [%fp+-16]
; SOFT32-NEXT: std %f4, [%fp+-32]
; SOFT32-NEXT: std %f6, [%fp+-24]
; SOFT32-NEXT: add %fp, -16, %o0
; SOFT32-NEXT: call _Q_cmp
; SOFT32-NEXT: add %fp, -32, %o1
; SOFT32-NEXT: cmp %o0, 3
; SOFT32-NEXT: bne .LBB6_2
; SOFT32-NEXT: nop
; SOFT32-NEXT: ! %bb.1:
; SOFT32-NEXT: ret
; SOFT32-NEXT: restore %g0, %g0, %o0
; SOFT32-NEXT: .LBB6_2:
; SOFT32-NEXT: ret
; SOFT32-NEXT: restore %g0, 1, %o0
;
; SOFT64-LABEL: fcmp_ord:
; SOFT64: ! %bb.0:
; SOFT64-NEXT: save %sp, -208, %sp
; SOFT64-NEXT: std %f2, [%fp+2039]
; SOFT64-NEXT: std %f0, [%fp+2031]
; SOFT64-NEXT: std %f4, [%fp+2015]
; SOFT64-NEXT: std %f6, [%fp+2023]
; SOFT64-NEXT: add %fp, 2031, %o0
; SOFT64-NEXT: call _Qp_cmp
; SOFT64-NEXT: add %fp, 2015, %o1
; SOFT64-NEXT: mov %g0, %i0
; SOFT64-NEXT: cmp %o0, 3
; SOFT64-NEXT: movne %icc, 1, %i0
; SOFT64-NEXT: srl %i0, 0, %i0
; SOFT64-NEXT: ret
; SOFT64-NEXT: restore
%c = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"ord", metadata !"fpexcept.strict") strictfp
%r = zext i1 %c to i32
ret i32 %r
}
define i32 @fcmp_ueq(fp128 %a, fp128 %b) nounwind strictfp {
; SOFT32-LABEL: fcmp_ueq:
; SOFT32: ! %bb.0:
; SOFT32-NEXT: save %sp, -128, %sp
; SOFT32-NEXT: ldd [%i0+8], %f0
; SOFT32-NEXT: ldd [%i0], %f2
; SOFT32-NEXT: ldd [%i1], %f4
; SOFT32-NEXT: ldd [%i1+8], %f6
; SOFT32-NEXT: std %f0, [%fp+-8]
; SOFT32-NEXT: std %f2, [%fp+-16]
; SOFT32-NEXT: std %f4, [%fp+-32]
; SOFT32-NEXT: std %f6, [%fp+-24]
; SOFT32-NEXT: add %fp, -16, %o0
; SOFT32-NEXT: call _Q_cmp
; SOFT32-NEXT: add %fp, -32, %o1
; SOFT32-NEXT: add %o0, 1, %i0
; SOFT32-NEXT: andcc %i0, 2, %g0
; SOFT32-NEXT: be .LBB7_2
; SOFT32-NEXT: nop
; SOFT32-NEXT: ! %bb.1:
; SOFT32-NEXT: ret
; SOFT32-NEXT: restore %g0, %g0, %o0
; SOFT32-NEXT: .LBB7_2:
; SOFT32-NEXT: ret
; SOFT32-NEXT: restore %g0, 1, %o0
;
; SOFT64-LABEL: fcmp_ueq:
; SOFT64: ! %bb.0:
; SOFT64-NEXT: save %sp, -208, %sp
; SOFT64-NEXT: std %f2, [%fp+2039]
; SOFT64-NEXT: std %f0, [%fp+2031]
; SOFT64-NEXT: std %f4, [%fp+2015]
; SOFT64-NEXT: std %f6, [%fp+2023]
; SOFT64-NEXT: add %fp, 2031, %o0
; SOFT64-NEXT: call _Qp_cmp
; SOFT64-NEXT: add %fp, 2015, %o1
; SOFT64-NEXT: mov %g0, %i0
; SOFT64-NEXT: add %o0, 1, %i1
; SOFT64-NEXT: andcc %i1, 2, %g0
; SOFT64-NEXT: move %icc, 1, %i0
; SOFT64-NEXT: srl %i0, 0, %i0
; SOFT64-NEXT: ret
; SOFT64-NEXT: restore
%c = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"ueq", metadata !"fpexcept.strict") strictfp
%r = zext i1 %c to i32
ret i32 %r
}
define i32 @fcmp_ugt(fp128 %a, fp128 %b) nounwind strictfp {
; SOFT32-LABEL: fcmp_ugt:
; SOFT32: ! %bb.0:
; SOFT32-NEXT: save %sp, -128, %sp
; SOFT32-NEXT: ldd [%i0+8], %f0
; SOFT32-NEXT: ldd [%i0], %f2
; SOFT32-NEXT: ldd [%i1], %f4
; SOFT32-NEXT: ldd [%i1+8], %f6
; SOFT32-NEXT: std %f0, [%fp+-8]
; SOFT32-NEXT: std %f2, [%fp+-16]
; SOFT32-NEXT: std %f4, [%fp+-32]
; SOFT32-NEXT: std %f6, [%fp+-24]
; SOFT32-NEXT: add %fp, -16, %o0
; SOFT32-NEXT: call _Q_cmp
; SOFT32-NEXT: add %fp, -32, %o1
; SOFT32-NEXT: cmp %o0, 1
; SOFT32-NEXT: bgu .LBB8_2
; SOFT32-NEXT: nop
; SOFT32-NEXT: ! %bb.1:
; SOFT32-NEXT: ret
; SOFT32-NEXT: restore %g0, %g0, %o0
; SOFT32-NEXT: .LBB8_2:
; SOFT32-NEXT: ret
; SOFT32-NEXT: restore %g0, 1, %o0
;
; SOFT64-LABEL: fcmp_ugt:
; SOFT64: ! %bb.0:
; SOFT64-NEXT: save %sp, -208, %sp
; SOFT64-NEXT: std %f2, [%fp+2039]
; SOFT64-NEXT: std %f0, [%fp+2031]
; SOFT64-NEXT: std %f4, [%fp+2015]
; SOFT64-NEXT: std %f6, [%fp+2023]
; SOFT64-NEXT: add %fp, 2031, %o0
; SOFT64-NEXT: call _Qp_cmp
; SOFT64-NEXT: add %fp, 2015, %o1
; SOFT64-NEXT: mov %g0, %i0
; SOFT64-NEXT: cmp %o0, 1
; SOFT64-NEXT: movgu %icc, 1, %i0
; SOFT64-NEXT: srl %i0, 0, %i0
; SOFT64-NEXT: ret
; SOFT64-NEXT: restore
%c = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"ugt", metadata !"fpexcept.strict") strictfp
%r = zext i1 %c to i32
ret i32 %r
}
define i32 @fcmp_uge(fp128 %a, fp128 %b) nounwind strictfp {
; SOFT32-LABEL: fcmp_uge:
; SOFT32: ! %bb.0:
; SOFT32-NEXT: save %sp, -128, %sp
; SOFT32-NEXT: ldd [%i0+8], %f0
; SOFT32-NEXT: ldd [%i0], %f2
; SOFT32-NEXT: ldd [%i1], %f4
; SOFT32-NEXT: ldd [%i1+8], %f6
; SOFT32-NEXT: std %f0, [%fp+-8]
; SOFT32-NEXT: std %f2, [%fp+-16]
; SOFT32-NEXT: std %f4, [%fp+-32]
; SOFT32-NEXT: std %f6, [%fp+-24]
; SOFT32-NEXT: add %fp, -16, %o0
; SOFT32-NEXT: call _Q_cmp
; SOFT32-NEXT: add %fp, -32, %o1
; SOFT32-NEXT: cmp %o0, 1
; SOFT32-NEXT: bne .LBB9_2
; SOFT32-NEXT: nop
; SOFT32-NEXT: ! %bb.1:
; SOFT32-NEXT: ret
; SOFT32-NEXT: restore %g0, %g0, %o0
; SOFT32-NEXT: .LBB9_2:
; SOFT32-NEXT: ret
; SOFT32-NEXT: restore %g0, 1, %o0
;
; SOFT64-LABEL: fcmp_uge:
; SOFT64: ! %bb.0:
; SOFT64-NEXT: save %sp, -208, %sp
; SOFT64-NEXT: std %f2, [%fp+2039]
; SOFT64-NEXT: std %f0, [%fp+2031]
; SOFT64-NEXT: std %f4, [%fp+2015]
; SOFT64-NEXT: std %f6, [%fp+2023]
; SOFT64-NEXT: add %fp, 2031, %o0
; SOFT64-NEXT: call _Qp_cmp
; SOFT64-NEXT: add %fp, 2015, %o1
; SOFT64-NEXT: mov %g0, %i0
; SOFT64-NEXT: cmp %o0, 1
; SOFT64-NEXT: movne %icc, 1, %i0
; SOFT64-NEXT: srl %i0, 0, %i0
; SOFT64-NEXT: ret
; SOFT64-NEXT: restore
%c = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"uge", metadata !"fpexcept.strict") strictfp
%r = zext i1 %c to i32
ret i32 %r
}
define i32 @fcmp_ult(fp128 %a, fp128 %b) nounwind strictfp {
; SOFT32-LABEL: fcmp_ult:
; SOFT32: ! %bb.0:
; SOFT32-NEXT: save %sp, -128, %sp
; SOFT32-NEXT: ldd [%i0+8], %f0
; SOFT32-NEXT: ldd [%i0], %f2
; SOFT32-NEXT: ldd [%i1], %f4
; SOFT32-NEXT: ldd [%i1+8], %f6
; SOFT32-NEXT: std %f0, [%fp+-8]
; SOFT32-NEXT: std %f2, [%fp+-16]
; SOFT32-NEXT: std %f4, [%fp+-32]
; SOFT32-NEXT: std %f6, [%fp+-24]
; SOFT32-NEXT: add %fp, -16, %o0
; SOFT32-NEXT: call _Q_cmp
; SOFT32-NEXT: add %fp, -32, %o1
; SOFT32-NEXT: andcc %o0, 1, %g0
; SOFT32-NEXT: bne .LBB10_2
; SOFT32-NEXT: nop
; SOFT32-NEXT: ! %bb.1:
; SOFT32-NEXT: ret
; SOFT32-NEXT: restore %g0, %g0, %o0
; SOFT32-NEXT: .LBB10_2:
; SOFT32-NEXT: ret
; SOFT32-NEXT: restore %g0, 1, %o0
;
; SOFT64-LABEL: fcmp_ult:
; SOFT64: ! %bb.0:
; SOFT64-NEXT: save %sp, -208, %sp
; SOFT64-NEXT: std %f2, [%fp+2039]
; SOFT64-NEXT: std %f0, [%fp+2031]
; SOFT64-NEXT: std %f4, [%fp+2015]
; SOFT64-NEXT: std %f6, [%fp+2023]
; SOFT64-NEXT: add %fp, 2031, %o0
; SOFT64-NEXT: call _Qp_cmp
; SOFT64-NEXT: add %fp, 2015, %o1
; SOFT64-NEXT: mov %g0, %i0
; SOFT64-NEXT: andcc %o0, 1, %g0
; SOFT64-NEXT: movne %icc, 1, %i0
; SOFT64-NEXT: srl %i0, 0, %i0
; SOFT64-NEXT: ret
; SOFT64-NEXT: restore
%c = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"ult", metadata !"fpexcept.strict") strictfp
%r = zext i1 %c to i32
ret i32 %r
}
define i32 @fcmp_ule(fp128 %a, fp128 %b) nounwind strictfp {
; SOFT32-LABEL: fcmp_ule:
; SOFT32: ! %bb.0:
; SOFT32-NEXT: save %sp, -128, %sp
; SOFT32-NEXT: ldd [%i0+8], %f0
; SOFT32-NEXT: ldd [%i0], %f2
; SOFT32-NEXT: ldd [%i1], %f4
; SOFT32-NEXT: ldd [%i1+8], %f6
; SOFT32-NEXT: std %f0, [%fp+-8]
; SOFT32-NEXT: std %f2, [%fp+-16]
; SOFT32-NEXT: std %f4, [%fp+-32]
; SOFT32-NEXT: std %f6, [%fp+-24]
; SOFT32-NEXT: add %fp, -16, %o0
; SOFT32-NEXT: call _Q_cmp
; SOFT32-NEXT: add %fp, -32, %o1
; SOFT32-NEXT: cmp %o0, 2
; SOFT32-NEXT: bne .LBB11_2
; SOFT32-NEXT: nop
; SOFT32-NEXT: ! %bb.1:
; SOFT32-NEXT: ret
; SOFT32-NEXT: restore %g0, %g0, %o0
; SOFT32-NEXT: .LBB11_2:
; SOFT32-NEXT: ret
; SOFT32-NEXT: restore %g0, 1, %o0
;
; SOFT64-LABEL: fcmp_ule:
; SOFT64: ! %bb.0:
; SOFT64-NEXT: save %sp, -208, %sp
; SOFT64-NEXT: std %f2, [%fp+2039]
; SOFT64-NEXT: std %f0, [%fp+2031]
; SOFT64-NEXT: std %f4, [%fp+2015]
; SOFT64-NEXT: std %f6, [%fp+2023]
; SOFT64-NEXT: add %fp, 2031, %o0
; SOFT64-NEXT: call _Qp_cmp
; SOFT64-NEXT: add %fp, 2015, %o1
; SOFT64-NEXT: mov %g0, %i0
; SOFT64-NEXT: cmp %o0, 2
; SOFT64-NEXT: movne %icc, 1, %i0
; SOFT64-NEXT: srl %i0, 0, %i0
; SOFT64-NEXT: ret
; SOFT64-NEXT: restore
%c = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"ule", metadata !"fpexcept.strict") strictfp
%r = zext i1 %c to i32
ret i32 %r
}
define i32 @fcmp_une(fp128 %a, fp128 %b) nounwind strictfp {
; SOFT32-LABEL: fcmp_une:
; SOFT32: ! %bb.0:
; SOFT32-NEXT: save %sp, -128, %sp
; SOFT32-NEXT: ldd [%i0+8], %f0
; SOFT32-NEXT: ldd [%i0], %f2
; SOFT32-NEXT: ldd [%i1], %f4
; SOFT32-NEXT: ldd [%i1+8], %f6
; SOFT32-NEXT: std %f0, [%fp+-8]
; SOFT32-NEXT: std %f2, [%fp+-16]
; SOFT32-NEXT: std %f4, [%fp+-32]
; SOFT32-NEXT: std %f6, [%fp+-24]
; SOFT32-NEXT: add %fp, -16, %o0
; SOFT32-NEXT: call _Q_cmp
; SOFT32-NEXT: add %fp, -32, %o1
; SOFT32-NEXT: cmp %o0, 0
; SOFT32-NEXT: bne .LBB12_2
; SOFT32-NEXT: nop
; SOFT32-NEXT: ! %bb.1:
; SOFT32-NEXT: ret
; SOFT32-NEXT: restore %g0, %g0, %o0
; SOFT32-NEXT: .LBB12_2:
; SOFT32-NEXT: ret
; SOFT32-NEXT: restore %g0, 1, %o0
;
; SOFT64-LABEL: fcmp_une:
; SOFT64: ! %bb.0:
; SOFT64-NEXT: save %sp, -208, %sp
; SOFT64-NEXT: std %f2, [%fp+2039]
; SOFT64-NEXT: std %f0, [%fp+2031]
; SOFT64-NEXT: std %f4, [%fp+2015]
; SOFT64-NEXT: std %f6, [%fp+2023]
; SOFT64-NEXT: add %fp, 2031, %o0
; SOFT64-NEXT: call _Qp_cmp
; SOFT64-NEXT: add %fp, 2015, %o1
; SOFT64-NEXT: mov %g0, %i0
; SOFT64-NEXT: cmp %o0, 0
; SOFT64-NEXT: movne %icc, 1, %i0
; SOFT64-NEXT: srl %i0, 0, %i0
; SOFT64-NEXT: ret
; SOFT64-NEXT: restore
%c = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"une", metadata !"fpexcept.strict") strictfp
%r = zext i1 %c to i32
ret i32 %r
}
define i32 @fcmp_uno(fp128 %a, fp128 %b) nounwind strictfp {
; SOFT32-LABEL: fcmp_uno:
; SOFT32: ! %bb.0:
; SOFT32-NEXT: save %sp, -128, %sp
; SOFT32-NEXT: ldd [%i0+8], %f0
; SOFT32-NEXT: ldd [%i0], %f2
; SOFT32-NEXT: ldd [%i1], %f4
; SOFT32-NEXT: ldd [%i1+8], %f6
; SOFT32-NEXT: std %f0, [%fp+-8]
; SOFT32-NEXT: std %f2, [%fp+-16]
; SOFT32-NEXT: std %f4, [%fp+-32]
; SOFT32-NEXT: std %f6, [%fp+-24]
; SOFT32-NEXT: add %fp, -16, %o0
; SOFT32-NEXT: call _Q_cmp
; SOFT32-NEXT: add %fp, -32, %o1
; SOFT32-NEXT: cmp %o0, 3
; SOFT32-NEXT: be .LBB13_2
; SOFT32-NEXT: nop
; SOFT32-NEXT: ! %bb.1:
; SOFT32-NEXT: ret
; SOFT32-NEXT: restore %g0, %g0, %o0
; SOFT32-NEXT: .LBB13_2:
; SOFT32-NEXT: ret
; SOFT32-NEXT: restore %g0, 1, %o0
;
; SOFT64-LABEL: fcmp_uno:
; SOFT64: ! %bb.0:
; SOFT64-NEXT: save %sp, -208, %sp
; SOFT64-NEXT: std %f2, [%fp+2039]
; SOFT64-NEXT: std %f0, [%fp+2031]
; SOFT64-NEXT: std %f4, [%fp+2015]
; SOFT64-NEXT: std %f6, [%fp+2023]
; SOFT64-NEXT: add %fp, 2031, %o0
; SOFT64-NEXT: call _Qp_cmp
; SOFT64-NEXT: add %fp, 2015, %o1
; SOFT64-NEXT: mov %g0, %i0
; SOFT64-NEXT: cmp %o0, 3
; SOFT64-NEXT: move %icc, 1, %i0
; SOFT64-NEXT: srl %i0, 0, %i0
; SOFT64-NEXT: ret
; SOFT64-NEXT: restore
%c = call i1 @llvm.experimental.constrained.fcmp.f128(fp128 %a, fp128 %b, metadata !"uno", metadata !"fpexcept.strict") strictfp
%r = zext i1 %c to i32
ret i32 %r
}
define i32 @fcmps_oeq(fp128 %a, fp128 %b) nounwind strictfp {
; SOFT32-LABEL: fcmps_oeq:
; SOFT32: ! %bb.0:
; SOFT32-NEXT: save %sp, -128, %sp
; SOFT32-NEXT: ldd [%i0+8], %f0
; SOFT32-NEXT: ldd [%i0], %f2
; SOFT32-NEXT: ldd [%i1], %f4
; SOFT32-NEXT: ldd [%i1+8], %f6
; SOFT32-NEXT: std %f0, [%fp+-8]
; SOFT32-NEXT: std %f2, [%fp+-16]
; SOFT32-NEXT: std %f4, [%fp+-32]
; SOFT32-NEXT: std %f6, [%fp+-24]
; SOFT32-NEXT: add %fp, -16, %o0
; SOFT32-NEXT: call _Q_cmpe
; SOFT32-NEXT: add %fp, -32, %o1
; SOFT32-NEXT: cmp %o0, 0
; SOFT32-NEXT: be .LBB14_2
; SOFT32-NEXT: nop
; SOFT32-NEXT: ! %bb.1:
; SOFT32-NEXT: ret
; SOFT32-NEXT: restore %g0, %g0, %o0
; SOFT32-NEXT: .LBB14_2:
; SOFT32-NEXT: ret
; SOFT32-NEXT: restore %g0, 1, %o0
;
; SOFT64-LABEL: fcmps_oeq:
; SOFT64: ! %bb.0:
; SOFT64-NEXT: save %sp, -208, %sp
; SOFT64-NEXT: std %f2, [%fp+2039]
; SOFT64-NEXT: std %f0, [%fp+2031]
; SOFT64-NEXT: std %f4, [%fp+2015]
; SOFT64-NEXT: std %f6, [%fp+2023]
; SOFT64-NEXT: add %fp, 2031, %o0
; SOFT64-NEXT: call _Qp_cmpe
; SOFT64-NEXT: add %fp, 2015, %o1
; SOFT64-NEXT: mov %g0, %i0
; SOFT64-NEXT: cmp %o0, 0
; SOFT64-NEXT: move %icc, 1, %i0
; SOFT64-NEXT: srl %i0, 0, %i0
; SOFT64-NEXT: ret
; SOFT64-NEXT: restore
%c = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"oeq", metadata !"fpexcept.strict") strictfp
%r = zext i1 %c to i32
ret i32 %r
}
define i32 @fcmps_ogt(fp128 %a, fp128 %b) nounwind strictfp {
; SOFT32-LABEL: fcmps_ogt:
; SOFT32: ! %bb.0:
; SOFT32-NEXT: save %sp, -128, %sp
; SOFT32-NEXT: ldd [%i0+8], %f0
; SOFT32-NEXT: ldd [%i0], %f2
; SOFT32-NEXT: ldd [%i1], %f4
; SOFT32-NEXT: ldd [%i1+8], %f6
; SOFT32-NEXT: std %f0, [%fp+-8]
; SOFT32-NEXT: std %f2, [%fp+-16]
; SOFT32-NEXT: std %f4, [%fp+-32]
; SOFT32-NEXT: std %f6, [%fp+-24]
; SOFT32-NEXT: add %fp, -16, %o0
; SOFT32-NEXT: call _Q_cmpe
; SOFT32-NEXT: add %fp, -32, %o1
; SOFT32-NEXT: cmp %o0, 2
; SOFT32-NEXT: be .LBB15_2
; SOFT32-NEXT: nop
; SOFT32-NEXT: ! %bb.1:
; SOFT32-NEXT: ret
; SOFT32-NEXT: restore %g0, %g0, %o0
; SOFT32-NEXT: .LBB15_2:
; SOFT32-NEXT: ret
; SOFT32-NEXT: restore %g0, 1, %o0
;
; SOFT64-LABEL: fcmps_ogt:
; SOFT64: ! %bb.0:
; SOFT64-NEXT: save %sp, -208, %sp
; SOFT64-NEXT: std %f2, [%fp+2039]
; SOFT64-NEXT: std %f0, [%fp+2031]
; SOFT64-NEXT: std %f4, [%fp+2015]
; SOFT64-NEXT: std %f6, [%fp+2023]
; SOFT64-NEXT: add %fp, 2031, %o0
; SOFT64-NEXT: call _Qp_cmpe
; SOFT64-NEXT: add %fp, 2015, %o1
; SOFT64-NEXT: mov %g0, %i0
; SOFT64-NEXT: cmp %o0, 2
; SOFT64-NEXT: move %icc, 1, %i0
; SOFT64-NEXT: srl %i0, 0, %i0
; SOFT64-NEXT: ret
; SOFT64-NEXT: restore
%c = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"ogt", metadata !"fpexcept.strict") strictfp
%r = zext i1 %c to i32
ret i32 %r
}
define i32 @fcmps_oge(fp128 %a, fp128 %b) nounwind strictfp {
; SOFT32-LABEL: fcmps_oge:
; SOFT32: ! %bb.0:
; SOFT32-NEXT: save %sp, -128, %sp
; SOFT32-NEXT: ldd [%i0+8], %f0
; SOFT32-NEXT: ldd [%i0], %f2
; SOFT32-NEXT: ldd [%i1], %f4
; SOFT32-NEXT: ldd [%i1+8], %f6
; SOFT32-NEXT: std %f0, [%fp+-8]
; SOFT32-NEXT: std %f2, [%fp+-16]
; SOFT32-NEXT: std %f4, [%fp+-32]
; SOFT32-NEXT: std %f6, [%fp+-24]
; SOFT32-NEXT: add %fp, -16, %o0
; SOFT32-NEXT: call _Q_cmpe
; SOFT32-NEXT: add %fp, -32, %o1
; SOFT32-NEXT: andcc %o0, 1, %g0
; SOFT32-NEXT: be .LBB16_2
; SOFT32-NEXT: nop
; SOFT32-NEXT: ! %bb.1:
; SOFT32-NEXT: ret
; SOFT32-NEXT: restore %g0, %g0, %o0
; SOFT32-NEXT: .LBB16_2:
; SOFT32-NEXT: ret
; SOFT32-NEXT: restore %g0, 1, %o0
;
; SOFT64-LABEL: fcmps_oge:
; SOFT64: ! %bb.0:
; SOFT64-NEXT: save %sp, -208, %sp
; SOFT64-NEXT: std %f2, [%fp+2039]
; SOFT64-NEXT: std %f0, [%fp+2031]
; SOFT64-NEXT: std %f4, [%fp+2015]
; SOFT64-NEXT: std %f6, [%fp+2023]
; SOFT64-NEXT: add %fp, 2031, %o0
; SOFT64-NEXT: call _Qp_cmpe
; SOFT64-NEXT: add %fp, 2015, %o1
; SOFT64-NEXT: mov %g0, %i0
; SOFT64-NEXT: andcc %o0, 1, %g0
; SOFT64-NEXT: move %icc, 1, %i0
; SOFT64-NEXT: srl %i0, 0, %i0
; SOFT64-NEXT: ret
; SOFT64-NEXT: restore
%c = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"oge", metadata !"fpexcept.strict") strictfp
%r = zext i1 %c to i32
ret i32 %r
}
define i32 @fcmps_olt(fp128 %a, fp128 %b) nounwind strictfp {
; SOFT32-LABEL: fcmps_olt:
; SOFT32: ! %bb.0:
; SOFT32-NEXT: save %sp, -128, %sp
; SOFT32-NEXT: ldd [%i0+8], %f0
; SOFT32-NEXT: ldd [%i0], %f2
; SOFT32-NEXT: ldd [%i1], %f4
; SOFT32-NEXT: ldd [%i1+8], %f6
; SOFT32-NEXT: std %f0, [%fp+-8]
; SOFT32-NEXT: std %f2, [%fp+-16]
; SOFT32-NEXT: std %f4, [%fp+-32]
; SOFT32-NEXT: std %f6, [%fp+-24]
; SOFT32-NEXT: add %fp, -16, %o0
; SOFT32-NEXT: call _Q_cmpe
; SOFT32-NEXT: add %fp, -32, %o1
; SOFT32-NEXT: cmp %o0, 1
; SOFT32-NEXT: be .LBB17_2
; SOFT32-NEXT: nop
; SOFT32-NEXT: ! %bb.1:
; SOFT32-NEXT: ret
; SOFT32-NEXT: restore %g0, %g0, %o0
; SOFT32-NEXT: .LBB17_2:
; SOFT32-NEXT: ret
; SOFT32-NEXT: restore %g0, 1, %o0
;
; SOFT64-LABEL: fcmps_olt:
; SOFT64: ! %bb.0:
; SOFT64-NEXT: save %sp, -208, %sp
; SOFT64-NEXT: std %f2, [%fp+2039]
; SOFT64-NEXT: std %f0, [%fp+2031]
; SOFT64-NEXT: std %f4, [%fp+2015]
; SOFT64-NEXT: std %f6, [%fp+2023]
; SOFT64-NEXT: add %fp, 2031, %o0
; SOFT64-NEXT: call _Qp_cmpe
; SOFT64-NEXT: add %fp, 2015, %o1
; SOFT64-NEXT: mov %g0, %i0
; SOFT64-NEXT: cmp %o0, 1
; SOFT64-NEXT: move %icc, 1, %i0
; SOFT64-NEXT: srl %i0, 0, %i0
; SOFT64-NEXT: ret
; SOFT64-NEXT: restore
%c = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"olt", metadata !"fpexcept.strict") strictfp
%r = zext i1 %c to i32
ret i32 %r
}
define i32 @fcmps_ole(fp128 %a, fp128 %b) nounwind strictfp {
; SOFT32-LABEL: fcmps_ole:
; SOFT32: ! %bb.0:
; SOFT32-NEXT: save %sp, -128, %sp
; SOFT32-NEXT: ldd [%i0+8], %f0
; SOFT32-NEXT: ldd [%i0], %f2
; SOFT32-NEXT: ldd [%i1], %f4
; SOFT32-NEXT: ldd [%i1+8], %f6
; SOFT32-NEXT: std %f0, [%fp+-8]
; SOFT32-NEXT: std %f2, [%fp+-16]
; SOFT32-NEXT: std %f4, [%fp+-32]
; SOFT32-NEXT: std %f6, [%fp+-24]
; SOFT32-NEXT: add %fp, -16, %o0
; SOFT32-NEXT: call _Q_cmpe
; SOFT32-NEXT: add %fp, -32, %o1
; SOFT32-NEXT: cmp %o0, 2
; SOFT32-NEXT: bcs .LBB18_2
; SOFT32-NEXT: nop
; SOFT32-NEXT: ! %bb.1:
; SOFT32-NEXT: ret
; SOFT32-NEXT: restore %g0, %g0, %o0
; SOFT32-NEXT: .LBB18_2:
; SOFT32-NEXT: ret
; SOFT32-NEXT: restore %g0, 1, %o0
;
; SOFT64-LABEL: fcmps_ole:
; SOFT64: ! %bb.0:
; SOFT64-NEXT: save %sp, -208, %sp
; SOFT64-NEXT: std %f2, [%fp+2039]
; SOFT64-NEXT: std %f0, [%fp+2031]
; SOFT64-NEXT: std %f4, [%fp+2015]
; SOFT64-NEXT: std %f6, [%fp+2023]
; SOFT64-NEXT: add %fp, 2031, %o0
; SOFT64-NEXT: call _Qp_cmpe
; SOFT64-NEXT: add %fp, 2015, %o1
; SOFT64-NEXT: mov %g0, %i0
; SOFT64-NEXT: cmp %o0, 2
; SOFT64-NEXT: movcs %icc, 1, %i0
; SOFT64-NEXT: srl %i0, 0, %i0
; SOFT64-NEXT: ret
; SOFT64-NEXT: restore
%c = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"ole", metadata !"fpexcept.strict") strictfp
%r = zext i1 %c to i32
ret i32 %r
}
define i32 @fcmps_one(fp128 %a, fp128 %b) nounwind strictfp {
; SOFT32-LABEL: fcmps_one:
; SOFT32: ! %bb.0:
; SOFT32-NEXT: save %sp, -128, %sp
; SOFT32-NEXT: ldd [%i0+8], %f0
; SOFT32-NEXT: ldd [%i0], %f2
; SOFT32-NEXT: ldd [%i1], %f4
; SOFT32-NEXT: ldd [%i1+8], %f6
; SOFT32-NEXT: std %f0, [%fp+-8]
; SOFT32-NEXT: std %f2, [%fp+-16]
; SOFT32-NEXT: std %f4, [%fp+-32]
; SOFT32-NEXT: std %f6, [%fp+-24]
; SOFT32-NEXT: add %fp, -16, %o0
; SOFT32-NEXT: call _Q_cmpe
; SOFT32-NEXT: add %fp, -32, %o1
; SOFT32-NEXT: add %o0, -1, %i0
; SOFT32-NEXT: cmp %i0, 2
; SOFT32-NEXT: bcs .LBB19_2
; SOFT32-NEXT: nop
; SOFT32-NEXT: ! %bb.1:
; SOFT32-NEXT: ret
; SOFT32-NEXT: restore %g0, %g0, %o0
; SOFT32-NEXT: .LBB19_2:
; SOFT32-NEXT: ret
; SOFT32-NEXT: restore %g0, 1, %o0
;
; SOFT64-LABEL: fcmps_one:
; SOFT64: ! %bb.0:
; SOFT64-NEXT: save %sp, -208, %sp
; SOFT64-NEXT: std %f2, [%fp+2039]
; SOFT64-NEXT: std %f0, [%fp+2031]
; SOFT64-NEXT: std %f4, [%fp+2015]
; SOFT64-NEXT: std %f6, [%fp+2023]
; SOFT64-NEXT: add %fp, 2031, %o0
; SOFT64-NEXT: call _Qp_cmpe
; SOFT64-NEXT: add %fp, 2015, %o1
; SOFT64-NEXT: mov %g0, %i0
; SOFT64-NEXT: add %o0, -1, %i1
; SOFT64-NEXT: cmp %i1, 2
; SOFT64-NEXT: movcs %icc, 1, %i0
; SOFT64-NEXT: srl %i0, 0, %i0
; SOFT64-NEXT: ret
; SOFT64-NEXT: restore
%c = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"one", metadata !"fpexcept.strict") strictfp
%r = zext i1 %c to i32
ret i32 %r
}
define i32 @fcmps_ord(fp128 %a, fp128 %b) nounwind strictfp {
; SOFT32-LABEL: fcmps_ord:
; SOFT32: ! %bb.0:
; SOFT32-NEXT: save %sp, -128, %sp
; SOFT32-NEXT: ldd [%i0+8], %f0
; SOFT32-NEXT: ldd [%i0], %f2
; SOFT32-NEXT: ldd [%i1], %f4
; SOFT32-NEXT: ldd [%i1+8], %f6
; SOFT32-NEXT: std %f0, [%fp+-8]
; SOFT32-NEXT: std %f2, [%fp+-16]
; SOFT32-NEXT: std %f4, [%fp+-32]
; SOFT32-NEXT: std %f6, [%fp+-24]
; SOFT32-NEXT: add %fp, -16, %o0
; SOFT32-NEXT: call _Q_cmpe
; SOFT32-NEXT: add %fp, -32, %o1
; SOFT32-NEXT: cmp %o0, 3
; SOFT32-NEXT: bne .LBB20_2
; SOFT32-NEXT: nop
; SOFT32-NEXT: ! %bb.1:
; SOFT32-NEXT: ret
; SOFT32-NEXT: restore %g0, %g0, %o0
; SOFT32-NEXT: .LBB20_2:
; SOFT32-NEXT: ret
; SOFT32-NEXT: restore %g0, 1, %o0
;
; SOFT64-LABEL: fcmps_ord:
; SOFT64: ! %bb.0:
; SOFT64-NEXT: save %sp, -208, %sp
; SOFT64-NEXT: std %f2, [%fp+2039]
; SOFT64-NEXT: std %f0, [%fp+2031]
; SOFT64-NEXT: std %f4, [%fp+2015]
; SOFT64-NEXT: std %f6, [%fp+2023]
; SOFT64-NEXT: add %fp, 2031, %o0
; SOFT64-NEXT: call _Qp_cmpe
; SOFT64-NEXT: add %fp, 2015, %o1
; SOFT64-NEXT: mov %g0, %i0
; SOFT64-NEXT: cmp %o0, 3
; SOFT64-NEXT: movne %icc, 1, %i0
; SOFT64-NEXT: srl %i0, 0, %i0
; SOFT64-NEXT: ret
; SOFT64-NEXT: restore
%c = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"ord", metadata !"fpexcept.strict") strictfp
%r = zext i1 %c to i32
ret i32 %r
}
define i32 @fcmps_ueq(fp128 %a, fp128 %b) nounwind strictfp {
; SOFT32-LABEL: fcmps_ueq:
; SOFT32: ! %bb.0:
; SOFT32-NEXT: save %sp, -128, %sp
; SOFT32-NEXT: ldd [%i0+8], %f0
; SOFT32-NEXT: ldd [%i0], %f2
; SOFT32-NEXT: ldd [%i1], %f4
; SOFT32-NEXT: ldd [%i1+8], %f6
; SOFT32-NEXT: std %f0, [%fp+-8]
; SOFT32-NEXT: std %f2, [%fp+-16]
; SOFT32-NEXT: std %f4, [%fp+-32]
; SOFT32-NEXT: std %f6, [%fp+-24]
; SOFT32-NEXT: add %fp, -16, %o0
; SOFT32-NEXT: call _Q_cmpe
; SOFT32-NEXT: add %fp, -32, %o1
; SOFT32-NEXT: add %o0, 1, %i0
; SOFT32-NEXT: andcc %i0, 2, %g0
; SOFT32-NEXT: be .LBB21_2
; SOFT32-NEXT: nop
; SOFT32-NEXT: ! %bb.1:
; SOFT32-NEXT: ret
; SOFT32-NEXT: restore %g0, %g0, %o0
; SOFT32-NEXT: .LBB21_2:
; SOFT32-NEXT: ret
; SOFT32-NEXT: restore %g0, 1, %o0
;
; SOFT64-LABEL: fcmps_ueq:
; SOFT64: ! %bb.0:
; SOFT64-NEXT: save %sp, -208, %sp
; SOFT64-NEXT: std %f2, [%fp+2039]
; SOFT64-NEXT: std %f0, [%fp+2031]
; SOFT64-NEXT: std %f4, [%fp+2015]
; SOFT64-NEXT: std %f6, [%fp+2023]
; SOFT64-NEXT: add %fp, 2031, %o0
; SOFT64-NEXT: call _Qp_cmpe
; SOFT64-NEXT: add %fp, 2015, %o1
; SOFT64-NEXT: mov %g0, %i0
; SOFT64-NEXT: add %o0, 1, %i1
; SOFT64-NEXT: andcc %i1, 2, %g0
; SOFT64-NEXT: move %icc, 1, %i0
; SOFT64-NEXT: srl %i0, 0, %i0
; SOFT64-NEXT: ret
; SOFT64-NEXT: restore
%c = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"ueq", metadata !"fpexcept.strict") strictfp
%r = zext i1 %c to i32
ret i32 %r
}
define i32 @fcmps_ugt(fp128 %a, fp128 %b) nounwind strictfp {
; SOFT32-LABEL: fcmps_ugt:
; SOFT32: ! %bb.0:
; SOFT32-NEXT: save %sp, -128, %sp
; SOFT32-NEXT: ldd [%i0+8], %f0
; SOFT32-NEXT: ldd [%i0], %f2
; SOFT32-NEXT: ldd [%i1], %f4
; SOFT32-NEXT: ldd [%i1+8], %f6
; SOFT32-NEXT: std %f0, [%fp+-8]
; SOFT32-NEXT: std %f2, [%fp+-16]
; SOFT32-NEXT: std %f4, [%fp+-32]
; SOFT32-NEXT: std %f6, [%fp+-24]
; SOFT32-NEXT: add %fp, -16, %o0
; SOFT32-NEXT: call _Q_cmpe
; SOFT32-NEXT: add %fp, -32, %o1
; SOFT32-NEXT: cmp %o0, 1
; SOFT32-NEXT: bgu .LBB22_2
; SOFT32-NEXT: nop
; SOFT32-NEXT: ! %bb.1:
; SOFT32-NEXT: ret
; SOFT32-NEXT: restore %g0, %g0, %o0
; SOFT32-NEXT: .LBB22_2:
; SOFT32-NEXT: ret
; SOFT32-NEXT: restore %g0, 1, %o0
;
; SOFT64-LABEL: fcmps_ugt:
; SOFT64: ! %bb.0:
; SOFT64-NEXT: save %sp, -208, %sp
; SOFT64-NEXT: std %f2, [%fp+2039]
; SOFT64-NEXT: std %f0, [%fp+2031]
; SOFT64-NEXT: std %f4, [%fp+2015]
; SOFT64-NEXT: std %f6, [%fp+2023]
; SOFT64-NEXT: add %fp, 2031, %o0
; SOFT64-NEXT: call _Qp_cmpe
; SOFT64-NEXT: add %fp, 2015, %o1
; SOFT64-NEXT: mov %g0, %i0
; SOFT64-NEXT: cmp %o0, 1
; SOFT64-NEXT: movgu %icc, 1, %i0
; SOFT64-NEXT: srl %i0, 0, %i0
; SOFT64-NEXT: ret
; SOFT64-NEXT: restore
%c = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"ugt", metadata !"fpexcept.strict") strictfp
%r = zext i1 %c to i32
ret i32 %r
}
define i32 @fcmps_uge(fp128 %a, fp128 %b) nounwind strictfp {
; SOFT32-LABEL: fcmps_uge:
; SOFT32: ! %bb.0:
; SOFT32-NEXT: save %sp, -128, %sp
; SOFT32-NEXT: ldd [%i0+8], %f0
; SOFT32-NEXT: ldd [%i0], %f2
; SOFT32-NEXT: ldd [%i1], %f4
; SOFT32-NEXT: ldd [%i1+8], %f6
; SOFT32-NEXT: std %f0, [%fp+-8]
; SOFT32-NEXT: std %f2, [%fp+-16]
; SOFT32-NEXT: std %f4, [%fp+-32]
; SOFT32-NEXT: std %f6, [%fp+-24]
; SOFT32-NEXT: add %fp, -16, %o0
; SOFT32-NEXT: call _Q_cmpe
; SOFT32-NEXT: add %fp, -32, %o1
; SOFT32-NEXT: cmp %o0, 1
; SOFT32-NEXT: bne .LBB23_2
; SOFT32-NEXT: nop
; SOFT32-NEXT: ! %bb.1:
; SOFT32-NEXT: ret
; SOFT32-NEXT: restore %g0, %g0, %o0
; SOFT32-NEXT: .LBB23_2:
; SOFT32-NEXT: ret
; SOFT32-NEXT: restore %g0, 1, %o0
;
; SOFT64-LABEL: fcmps_uge:
; SOFT64: ! %bb.0:
; SOFT64-NEXT: save %sp, -208, %sp
; SOFT64-NEXT: std %f2, [%fp+2039]
; SOFT64-NEXT: std %f0, [%fp+2031]
; SOFT64-NEXT: std %f4, [%fp+2015]
; SOFT64-NEXT: std %f6, [%fp+2023]
; SOFT64-NEXT: add %fp, 2031, %o0
; SOFT64-NEXT: call _Qp_cmpe
; SOFT64-NEXT: add %fp, 2015, %o1
; SOFT64-NEXT: mov %g0, %i0
; SOFT64-NEXT: cmp %o0, 1
; SOFT64-NEXT: movne %icc, 1, %i0
; SOFT64-NEXT: srl %i0, 0, %i0
; SOFT64-NEXT: ret
; SOFT64-NEXT: restore
%c = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"uge", metadata !"fpexcept.strict") strictfp
%r = zext i1 %c to i32
ret i32 %r
}
define i32 @fcmps_ult(fp128 %a, fp128 %b) nounwind strictfp {
; SOFT32-LABEL: fcmps_ult:
; SOFT32: ! %bb.0:
; SOFT32-NEXT: save %sp, -128, %sp
; SOFT32-NEXT: ldd [%i0+8], %f0
; SOFT32-NEXT: ldd [%i0], %f2
; SOFT32-NEXT: ldd [%i1], %f4
; SOFT32-NEXT: ldd [%i1+8], %f6
; SOFT32-NEXT: std %f0, [%fp+-8]
; SOFT32-NEXT: std %f2, [%fp+-16]
; SOFT32-NEXT: std %f4, [%fp+-32]
; SOFT32-NEXT: std %f6, [%fp+-24]
; SOFT32-NEXT: add %fp, -16, %o0
; SOFT32-NEXT: call _Q_cmpe
; SOFT32-NEXT: add %fp, -32, %o1
; SOFT32-NEXT: andcc %o0, 1, %g0
; SOFT32-NEXT: bne .LBB24_2
; SOFT32-NEXT: nop
; SOFT32-NEXT: ! %bb.1:
; SOFT32-NEXT: ret
; SOFT32-NEXT: restore %g0, %g0, %o0
; SOFT32-NEXT: .LBB24_2:
; SOFT32-NEXT: ret
; SOFT32-NEXT: restore %g0, 1, %o0
;
; SOFT64-LABEL: fcmps_ult:
; SOFT64: ! %bb.0:
; SOFT64-NEXT: save %sp, -208, %sp
; SOFT64-NEXT: std %f2, [%fp+2039]
; SOFT64-NEXT: std %f0, [%fp+2031]
; SOFT64-NEXT: std %f4, [%fp+2015]
; SOFT64-NEXT: std %f6, [%fp+2023]
; SOFT64-NEXT: add %fp, 2031, %o0
; SOFT64-NEXT: call _Qp_cmpe
; SOFT64-NEXT: add %fp, 2015, %o1
; SOFT64-NEXT: mov %g0, %i0
; SOFT64-NEXT: andcc %o0, 1, %g0
; SOFT64-NEXT: movne %icc, 1, %i0
; SOFT64-NEXT: srl %i0, 0, %i0
; SOFT64-NEXT: ret
; SOFT64-NEXT: restore
%c = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"ult", metadata !"fpexcept.strict") strictfp
%r = zext i1 %c to i32
ret i32 %r
}
define i32 @fcmps_ule(fp128 %a, fp128 %b) nounwind strictfp {
; SOFT32-LABEL: fcmps_ule:
; SOFT32: ! %bb.0:
; SOFT32-NEXT: save %sp, -128, %sp
; SOFT32-NEXT: ldd [%i0+8], %f0
; SOFT32-NEXT: ldd [%i0], %f2
; SOFT32-NEXT: ldd [%i1], %f4
; SOFT32-NEXT: ldd [%i1+8], %f6
; SOFT32-NEXT: std %f0, [%fp+-8]
; SOFT32-NEXT: std %f2, [%fp+-16]
; SOFT32-NEXT: std %f4, [%fp+-32]
; SOFT32-NEXT: std %f6, [%fp+-24]
; SOFT32-NEXT: add %fp, -16, %o0
; SOFT32-NEXT: call _Q_cmpe
; SOFT32-NEXT: add %fp, -32, %o1
; SOFT32-NEXT: cmp %o0, 2
; SOFT32-NEXT: bne .LBB25_2
; SOFT32-NEXT: nop
; SOFT32-NEXT: ! %bb.1:
; SOFT32-NEXT: ret
; SOFT32-NEXT: restore %g0, %g0, %o0
; SOFT32-NEXT: .LBB25_2:
; SOFT32-NEXT: ret
; SOFT32-NEXT: restore %g0, 1, %o0
;
; SOFT64-LABEL: fcmps_ule:
; SOFT64: ! %bb.0:
; SOFT64-NEXT: save %sp, -208, %sp
; SOFT64-NEXT: std %f2, [%fp+2039]
; SOFT64-NEXT: std %f0, [%fp+2031]
; SOFT64-NEXT: std %f4, [%fp+2015]
; SOFT64-NEXT: std %f6, [%fp+2023]
; SOFT64-NEXT: add %fp, 2031, %o0
; SOFT64-NEXT: call _Qp_cmpe
; SOFT64-NEXT: add %fp, 2015, %o1
; SOFT64-NEXT: mov %g0, %i0
; SOFT64-NEXT: cmp %o0, 2
; SOFT64-NEXT: movne %icc, 1, %i0
; SOFT64-NEXT: srl %i0, 0, %i0
; SOFT64-NEXT: ret
; SOFT64-NEXT: restore
%c = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"ule", metadata !"fpexcept.strict") strictfp
%r = zext i1 %c to i32
ret i32 %r
}
define i32 @fcmps_une(fp128 %a, fp128 %b) nounwind strictfp {
; SOFT32-LABEL: fcmps_une:
; SOFT32: ! %bb.0:
; SOFT32-NEXT: save %sp, -128, %sp
; SOFT32-NEXT: ldd [%i0+8], %f0
; SOFT32-NEXT: ldd [%i0], %f2
; SOFT32-NEXT: ldd [%i1], %f4
; SOFT32-NEXT: ldd [%i1+8], %f6
; SOFT32-NEXT: std %f0, [%fp+-8]
; SOFT32-NEXT: std %f2, [%fp+-16]
; SOFT32-NEXT: std %f4, [%fp+-32]
; SOFT32-NEXT: std %f6, [%fp+-24]
; SOFT32-NEXT: add %fp, -16, %o0
; SOFT32-NEXT: call _Q_cmpe
; SOFT32-NEXT: add %fp, -32, %o1
; SOFT32-NEXT: cmp %o0, 0
; SOFT32-NEXT: bne .LBB26_2
; SOFT32-NEXT: nop
; SOFT32-NEXT: ! %bb.1:
; SOFT32-NEXT: ret
; SOFT32-NEXT: restore %g0, %g0, %o0
; SOFT32-NEXT: .LBB26_2:
; SOFT32-NEXT: ret
; SOFT32-NEXT: restore %g0, 1, %o0
;
; SOFT64-LABEL: fcmps_une:
; SOFT64: ! %bb.0:
; SOFT64-NEXT: save %sp, -208, %sp
; SOFT64-NEXT: std %f2, [%fp+2039]
; SOFT64-NEXT: std %f0, [%fp+2031]
; SOFT64-NEXT: std %f4, [%fp+2015]
; SOFT64-NEXT: std %f6, [%fp+2023]
; SOFT64-NEXT: add %fp, 2031, %o0
; SOFT64-NEXT: call _Qp_cmpe
; SOFT64-NEXT: add %fp, 2015, %o1
; SOFT64-NEXT: mov %g0, %i0
; SOFT64-NEXT: cmp %o0, 0
; SOFT64-NEXT: movne %icc, 1, %i0
; SOFT64-NEXT: srl %i0, 0, %i0
; SOFT64-NEXT: ret
; SOFT64-NEXT: restore
%c = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"une", metadata !"fpexcept.strict") strictfp
%r = zext i1 %c to i32
ret i32 %r
}
define i32 @fcmps_uno(fp128 %a, fp128 %b) nounwind strictfp {
; SOFT32-LABEL: fcmps_uno:
; SOFT32: ! %bb.0:
; SOFT32-NEXT: save %sp, -128, %sp
; SOFT32-NEXT: ldd [%i0+8], %f0
; SOFT32-NEXT: ldd [%i0], %f2
; SOFT32-NEXT: ldd [%i1], %f4
; SOFT32-NEXT: ldd [%i1+8], %f6
; SOFT32-NEXT: std %f0, [%fp+-8]
; SOFT32-NEXT: std %f2, [%fp+-16]
; SOFT32-NEXT: std %f4, [%fp+-32]
; SOFT32-NEXT: std %f6, [%fp+-24]
; SOFT32-NEXT: add %fp, -16, %o0
; SOFT32-NEXT: call _Q_cmpe
; SOFT32-NEXT: add %fp, -32, %o1
; SOFT32-NEXT: cmp %o0, 3
; SOFT32-NEXT: be .LBB27_2
; SOFT32-NEXT: nop
; SOFT32-NEXT: ! %bb.1:
; SOFT32-NEXT: ret
; SOFT32-NEXT: restore %g0, %g0, %o0
; SOFT32-NEXT: .LBB27_2:
; SOFT32-NEXT: ret
; SOFT32-NEXT: restore %g0, 1, %o0
;
; SOFT64-LABEL: fcmps_uno:
; SOFT64: ! %bb.0:
; SOFT64-NEXT: save %sp, -208, %sp
; SOFT64-NEXT: std %f2, [%fp+2039]
; SOFT64-NEXT: std %f0, [%fp+2031]
; SOFT64-NEXT: std %f4, [%fp+2015]
; SOFT64-NEXT: std %f6, [%fp+2023]
; SOFT64-NEXT: add %fp, 2031, %o0
; SOFT64-NEXT: call _Qp_cmpe
; SOFT64-NEXT: add %fp, 2015, %o1
; SOFT64-NEXT: mov %g0, %i0
; SOFT64-NEXT: cmp %o0, 3
; SOFT64-NEXT: move %icc, 1, %i0
; SOFT64-NEXT: srl %i0, 0, %i0
; SOFT64-NEXT: ret
; SOFT64-NEXT: restore
%c = call i1 @llvm.experimental.constrained.fcmps.f128(fp128 %a, fp128 %b, metadata !"uno", metadata !"fpexcept.strict") strictfp
%r = zext i1 %c to i32
ret i32 %r
}