From: Simon Pilgrim Date: Tue, 28 Nov 2017 14:35:52 +0000 (+0000) Subject: [X86][X86] Add some x87 schedule tests X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=4eb7e2beb5ce67b2e89e0e6ac895f1f111902395;p=llvm [X86][X86] Add some x87 schedule tests Still missing some instructions: mainly loads/stores/system ops, all flagged as TODO. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@319172 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/test/CodeGen/X86/x87-schedule.ll b/test/CodeGen/X86/x87-schedule.ll new file mode 100644 index 00000000000..bac4c08af5b --- /dev/null +++ b/test/CodeGen/X86/x87-schedule.ll @@ -0,0 +1,4588 @@ +; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py +; RUN: llc < %s -mtriple=i686-unknown-unknown -print-schedule -mcpu=i686 | FileCheck %s --check-prefix=CHECK --check-prefix=GENERIC +; RUN: llc < %s -mtriple=i686-unknown-unknown -print-schedule -mcpu=atom | FileCheck %s --check-prefix=CHECK --check-prefix=ATOM +; RUN: llc < %s -mtriple=i686-unknown-unknown -print-schedule -mcpu=slm | FileCheck %s --check-prefix=CHECK --check-prefix=SLM +; RUN: llc < %s -mtriple=i686-unknown-unknown -print-schedule -mcpu=sandybridge | FileCheck %s --check-prefix=CHECK --check-prefix=SANDY +; RUN: llc < %s -mtriple=i686-unknown-unknown -print-schedule -mcpu=ivybridge | FileCheck %s --check-prefix=CHECK --check-prefix=SANDY +; RUN: llc < %s -mtriple=i686-unknown-unknown -print-schedule -mcpu=haswell | FileCheck %s --check-prefix=CHECK --check-prefix=HASWELL +; RUN: llc < %s -mtriple=i686-unknown-unknown -print-schedule -mcpu=broadwell | FileCheck %s --check-prefix=CHECK --check-prefix=BROADWELL +; RUN: llc < %s -mtriple=i686-unknown-unknown -print-schedule -mcpu=skylake | FileCheck %s --check-prefix=CHECK --check-prefix=SKYLAKE +; RUN: llc < %s -mtriple=i686-unknown-unknown -print-schedule -mcpu=skx | FileCheck %s --check-prefix=CHECK --check-prefix=SKX +; RUN: llc < %s -mtriple=i686-unknown-unknown -print-schedule -mcpu=btver2 | FileCheck %s --check-prefix=CHECK --check-prefix=BTVER2 +; RUN: llc < %s -mtriple=i686-unknown-unknown -print-schedule -mcpu=znver1 | FileCheck %s --check-prefix=CHECK --check-prefix=ZNVER1 + +define void @test_f2xm1() optsize { +; GENERIC-LABEL: test_f2xm1: +; GENERIC: # BB#0: +; GENERIC-NEXT: #APP +; GENERIC-NEXT: f2xm1 +; GENERIC-NEXT: #NO_APP +; GENERIC-NEXT: retl +; +; ATOM-LABEL: test_f2xm1: +; ATOM: # BB#0: +; ATOM-NEXT: #APP +; ATOM-NEXT: f2xm1 # sched: [99:49.50] +; ATOM-NEXT: #NO_APP +; ATOM-NEXT: retl # sched: [79:39.50] +; +; SLM-LABEL: test_f2xm1: +; SLM: # BB#0: +; SLM-NEXT: #APP +; SLM-NEXT: f2xm1 # sched: [100:1.00] +; SLM-NEXT: #NO_APP +; SLM-NEXT: retl # sched: [4:1.00] +; +; SANDY-LABEL: test_f2xm1: +; SANDY: # BB#0: +; SANDY-NEXT: #APP +; SANDY-NEXT: f2xm1 # sched: [100:0.33] +; SANDY-NEXT: #NO_APP +; SANDY-NEXT: retl # sched: [5:1.00] +; +; HASWELL-LABEL: test_f2xm1: +; HASWELL: # BB#0: +; HASWELL-NEXT: #APP +; HASWELL-NEXT: f2xm1 # sched: [100:0.25] +; HASWELL-NEXT: #NO_APP +; HASWELL-NEXT: retl # sched: [5:0.50] +; +; BROADWELL-LABEL: test_f2xm1: +; BROADWELL: # BB#0: +; BROADWELL-NEXT: #APP +; BROADWELL-NEXT: f2xm1 # sched: [100:0.25] +; BROADWELL-NEXT: #NO_APP +; BROADWELL-NEXT: retl # sched: [6:0.50] +; +; SKYLAKE-LABEL: test_f2xm1: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: #APP +; SKYLAKE-NEXT: f2xm1 # sched: [100:0.25] +; SKYLAKE-NEXT: #NO_APP +; SKYLAKE-NEXT: retl # sched: [6:0.50] +; +; SKX-LABEL: test_f2xm1: +; SKX: # BB#0: +; SKX-NEXT: #APP +; SKX-NEXT: f2xm1 # sched: [100:0.25] +; SKX-NEXT: #NO_APP +; SKX-NEXT: retl # sched: [6:0.50] +; +; BTVER2-LABEL: test_f2xm1: +; BTVER2: # BB#0: +; BTVER2-NEXT: #APP +; BTVER2-NEXT: f2xm1 # sched: [100:0.17] +; BTVER2-NEXT: #NO_APP +; BTVER2-NEXT: retl # sched: [4:1.00] +; +; ZNVER1-LABEL: test_f2xm1: +; ZNVER1: # BB#0: +; ZNVER1-NEXT: #APP +; ZNVER1-NEXT: f2xm1 # sched: [100:?] +; ZNVER1-NEXT: #NO_APP +; ZNVER1-NEXT: retl # sched: [1:0.50] + tail call void asm sideeffect "f2xm1", ""() nounwind + ret void +} + +define void @test_fabs() optsize { +; GENERIC-LABEL: test_fabs: +; GENERIC: # BB#0: +; GENERIC-NEXT: #APP +; GENERIC-NEXT: fabs +; GENERIC-NEXT: #NO_APP +; GENERIC-NEXT: retl +; +; ATOM-LABEL: test_fabs: +; ATOM: # BB#0: +; ATOM-NEXT: #APP +; ATOM-NEXT: fabs +; ATOM-NEXT: #NO_APP +; ATOM-NEXT: retl # sched: [79:39.50] +; +; SLM-LABEL: test_fabs: +; SLM: # BB#0: +; SLM-NEXT: #APP +; SLM-NEXT: fabs +; SLM-NEXT: #NO_APP +; SLM-NEXT: retl # sched: [4:1.00] +; +; SANDY-LABEL: test_fabs: +; SANDY: # BB#0: +; SANDY-NEXT: #APP +; SANDY-NEXT: fabs +; SANDY-NEXT: #NO_APP +; SANDY-NEXT: retl # sched: [5:1.00] +; +; HASWELL-LABEL: test_fabs: +; HASWELL: # BB#0: +; HASWELL-NEXT: #APP +; HASWELL-NEXT: fabs # sched: [1:1.00] +; HASWELL-NEXT: #NO_APP +; HASWELL-NEXT: retl # sched: [5:0.50] +; +; BROADWELL-LABEL: test_fabs: +; BROADWELL: # BB#0: +; BROADWELL-NEXT: #APP +; BROADWELL-NEXT: fabs +; BROADWELL-NEXT: #NO_APP +; BROADWELL-NEXT: retl # sched: [6:0.50] +; +; SKYLAKE-LABEL: test_fabs: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: #APP +; SKYLAKE-NEXT: fabs +; SKYLAKE-NEXT: #NO_APP +; SKYLAKE-NEXT: retl # sched: [6:0.50] +; +; SKX-LABEL: test_fabs: +; SKX: # BB#0: +; SKX-NEXT: #APP +; SKX-NEXT: fabs +; SKX-NEXT: #NO_APP +; SKX-NEXT: retl # sched: [6:0.50] +; +; BTVER2-LABEL: test_fabs: +; BTVER2: # BB#0: +; BTVER2-NEXT: #APP +; BTVER2-NEXT: fabs +; BTVER2-NEXT: #NO_APP +; BTVER2-NEXT: retl # sched: [4:1.00] +; +; ZNVER1-LABEL: test_fabs: +; ZNVER1: # BB#0: +; ZNVER1-NEXT: #APP +; ZNVER1-NEXT: fabs # sched: [2:1.00] +; ZNVER1-NEXT: #NO_APP +; ZNVER1-NEXT: retl # sched: [1:0.50] + tail call void asm sideeffect "fabs", ""() nounwind + ret void +} + +define void @test_fadd(float *%a0, double *%a1) optsize { +; GENERIC-LABEL: test_fadd: +; GENERIC: # BB#0: +; GENERIC-NEXT: movl {{[0-9]+}}(%esp), %eax +; GENERIC-NEXT: movl {{[0-9]+}}(%esp), %ecx +; GENERIC-NEXT: #APP +; GENERIC-NEXT: fadd %st(0), %st(1) +; GENERIC-NEXT: fadd %st(2) +; GENERIC-NEXT: fadds (%ecx) +; GENERIC-NEXT: faddl (%eax) +; GENERIC-NEXT: #NO_APP +; GENERIC-NEXT: retl +; +; ATOM-LABEL: test_fadd: +; ATOM: # BB#0: +; ATOM-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [1:1.00] +; ATOM-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [1:1.00] +; ATOM-NEXT: #APP +; ATOM-NEXT: fadd %st(0), %st(1) +; ATOM-NEXT: fadd %st(2) +; ATOM-NEXT: fadds (%ecx) +; ATOM-NEXT: faddl (%eax) +; ATOM-NEXT: #NO_APP +; ATOM-NEXT: retl # sched: [79:39.50] +; +; SLM-LABEL: test_fadd: +; SLM: # BB#0: +; SLM-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [3:1.00] +; SLM-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [3:1.00] +; SLM-NEXT: #APP +; SLM-NEXT: fadd %st(0), %st(1) # sched: [3:1.00] +; SLM-NEXT: fadd %st(2) # sched: [3:1.00] +; SLM-NEXT: fadds (%ecx) # sched: [6:1.00] +; SLM-NEXT: faddl (%eax) # sched: [6:1.00] +; SLM-NEXT: #NO_APP +; SLM-NEXT: retl # sched: [4:1.00] +; +; SANDY-LABEL: test_fadd: +; SANDY: # BB#0: +; SANDY-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50] +; SANDY-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50] +; SANDY-NEXT: #APP +; SANDY-NEXT: fadd %st(0), %st(1) # sched: [3:1.00] +; SANDY-NEXT: fadd %st(2) # sched: [3:1.00] +; SANDY-NEXT: fadds (%ecx) # sched: [10:1.00] +; SANDY-NEXT: faddl (%eax) # sched: [10:1.00] +; SANDY-NEXT: #NO_APP +; SANDY-NEXT: retl # sched: [5:1.00] +; +; HASWELL-LABEL: test_fadd: +; HASWELL: # BB#0: +; HASWELL-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [1:0.50] +; HASWELL-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [1:0.50] +; HASWELL-NEXT: #APP +; HASWELL-NEXT: fadd %st(0), %st(1) # sched: [3:1.00] +; HASWELL-NEXT: fadd %st(2) # sched: [3:1.00] +; HASWELL-NEXT: fadds (%ecx) # sched: [3:1.00] +; HASWELL-NEXT: faddl (%eax) # sched: [3:1.00] +; HASWELL-NEXT: #NO_APP +; HASWELL-NEXT: retl # sched: [5:0.50] +; +; BROADWELL-LABEL: test_fadd: +; BROADWELL: # BB#0: +; BROADWELL-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50] +; BROADWELL-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50] +; BROADWELL-NEXT: #APP +; BROADWELL-NEXT: fadd %st(0), %st(1) # sched: [3:1.00] +; BROADWELL-NEXT: fadd %st(2) # sched: [3:1.00] +; BROADWELL-NEXT: fadds (%ecx) # sched: [9:1.00] +; BROADWELL-NEXT: faddl (%eax) # sched: [9:1.00] +; BROADWELL-NEXT: #NO_APP +; BROADWELL-NEXT: retl # sched: [6:0.50] +; +; SKYLAKE-LABEL: test_fadd: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50] +; SKYLAKE-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50] +; SKYLAKE-NEXT: #APP +; SKYLAKE-NEXT: fadd %st(0), %st(1) # sched: [3:1.00] +; SKYLAKE-NEXT: fadd %st(2) # sched: [3:1.00] +; SKYLAKE-NEXT: fadds (%ecx) # sched: [10:1.00] +; SKYLAKE-NEXT: faddl (%eax) # sched: [10:1.00] +; SKYLAKE-NEXT: #NO_APP +; SKYLAKE-NEXT: retl # sched: [6:0.50] +; +; SKX-LABEL: test_fadd: +; SKX: # BB#0: +; SKX-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50] +; SKX-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50] +; SKX-NEXT: #APP +; SKX-NEXT: fadd %st(0), %st(1) # sched: [3:1.00] +; SKX-NEXT: fadd %st(2) # sched: [3:1.00] +; SKX-NEXT: fadds (%ecx) # sched: [10:1.00] +; SKX-NEXT: faddl (%eax) # sched: [10:1.00] +; SKX-NEXT: #NO_APP +; SKX-NEXT: retl # sched: [6:0.50] +; +; BTVER2-LABEL: test_fadd: +; BTVER2: # BB#0: +; BTVER2-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:1.00] +; BTVER2-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:1.00] +; BTVER2-NEXT: #APP +; BTVER2-NEXT: fadd %st(0), %st(1) # sched: [3:1.00] +; BTVER2-NEXT: fadd %st(2) # sched: [3:1.00] +; BTVER2-NEXT: fadds (%ecx) # sched: [8:1.00] +; BTVER2-NEXT: faddl (%eax) # sched: [8:1.00] +; BTVER2-NEXT: #NO_APP +; BTVER2-NEXT: retl # sched: [4:1.00] +; +; ZNVER1-LABEL: test_fadd: +; ZNVER1: # BB#0: +; ZNVER1-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [8:0.50] +; ZNVER1-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [8:0.50] +; ZNVER1-NEXT: #APP +; ZNVER1-NEXT: fadd %st(0), %st(1) # sched: [3:1.00] +; ZNVER1-NEXT: fadd %st(2) # sched: [3:1.00] +; ZNVER1-NEXT: fadds (%ecx) # sched: [10:1.00] +; ZNVER1-NEXT: faddl (%eax) # sched: [10:1.00] +; ZNVER1-NEXT: #NO_APP +; ZNVER1-NEXT: retl # sched: [1:0.50] + tail call void asm sideeffect "fadd %st(0), %st(1) \0A\09 fadd %st(2), %st(0) \0A\09 fadds $0 \0A\09 faddl $1", "*m,*m"(float *%a0, double *%a1) nounwind + ret void +} + +define void @test_faddp_fiadd(i16 *%a0, i32 *%a1) optsize { +; GENERIC-LABEL: test_faddp_fiadd: +; GENERIC: # BB#0: +; GENERIC-NEXT: movl {{[0-9]+}}(%esp), %eax +; GENERIC-NEXT: movl {{[0-9]+}}(%esp), %ecx +; GENERIC-NEXT: #APP +; GENERIC-NEXT: faddp %st(1) +; GENERIC-NEXT: faddp %st(2) +; GENERIC-NEXT: fiadds (%ecx) +; GENERIC-NEXT: fiaddl (%eax) +; GENERIC-NEXT: #NO_APP +; GENERIC-NEXT: retl +; +; ATOM-LABEL: test_faddp_fiadd: +; ATOM: # BB#0: +; ATOM-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [1:1.00] +; ATOM-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [1:1.00] +; ATOM-NEXT: #APP +; ATOM-NEXT: faddp %st(1) +; ATOM-NEXT: faddp %st(2) +; ATOM-NEXT: fiadds (%ecx) +; ATOM-NEXT: fiaddl (%eax) +; ATOM-NEXT: #NO_APP +; ATOM-NEXT: retl # sched: [79:39.50] +; +; SLM-LABEL: test_faddp_fiadd: +; SLM: # BB#0: +; SLM-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [3:1.00] +; SLM-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [3:1.00] +; SLM-NEXT: #APP +; SLM-NEXT: faddp %st(1) # sched: [3:1.00] +; SLM-NEXT: faddp %st(2) # sched: [3:1.00] +; SLM-NEXT: fiadds (%ecx) # sched: [6:1.00] +; SLM-NEXT: fiaddl (%eax) # sched: [6:1.00] +; SLM-NEXT: #NO_APP +; SLM-NEXT: retl # sched: [4:1.00] +; +; SANDY-LABEL: test_faddp_fiadd: +; SANDY: # BB#0: +; SANDY-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50] +; SANDY-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50] +; SANDY-NEXT: #APP +; SANDY-NEXT: faddp %st(1) # sched: [3:1.00] +; SANDY-NEXT: faddp %st(2) # sched: [3:1.00] +; SANDY-NEXT: fiadds (%ecx) # sched: [13:2.00] +; SANDY-NEXT: fiaddl (%eax) # sched: [13:2.00] +; SANDY-NEXT: #NO_APP +; SANDY-NEXT: retl # sched: [5:1.00] +; +; HASWELL-LABEL: test_faddp_fiadd: +; HASWELL: # BB#0: +; HASWELL-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [1:0.50] +; HASWELL-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [1:0.50] +; HASWELL-NEXT: #APP +; HASWELL-NEXT: faddp %st(1) # sched: [3:1.00] +; HASWELL-NEXT: faddp %st(2) # sched: [3:1.00] +; HASWELL-NEXT: fiadds (%ecx) # sched: [6:2.00] +; HASWELL-NEXT: fiaddl (%eax) # sched: [6:2.00] +; HASWELL-NEXT: #NO_APP +; HASWELL-NEXT: retl # sched: [5:0.50] +; +; BROADWELL-LABEL: test_faddp_fiadd: +; BROADWELL: # BB#0: +; BROADWELL-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50] +; BROADWELL-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50] +; BROADWELL-NEXT: #APP +; BROADWELL-NEXT: faddp %st(1) # sched: [3:1.00] +; BROADWELL-NEXT: faddp %st(2) # sched: [3:1.00] +; BROADWELL-NEXT: fiadds (%ecx) # sched: [12:2.00] +; BROADWELL-NEXT: fiaddl (%eax) # sched: [12:2.00] +; BROADWELL-NEXT: #NO_APP +; BROADWELL-NEXT: retl # sched: [6:0.50] +; +; SKYLAKE-LABEL: test_faddp_fiadd: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50] +; SKYLAKE-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50] +; SKYLAKE-NEXT: #APP +; SKYLAKE-NEXT: faddp %st(1) # sched: [3:1.00] +; SKYLAKE-NEXT: faddp %st(2) # sched: [3:1.00] +; SKYLAKE-NEXT: fiadds (%ecx) # sched: [13:2.00] +; SKYLAKE-NEXT: fiaddl (%eax) # sched: [13:2.00] +; SKYLAKE-NEXT: #NO_APP +; SKYLAKE-NEXT: retl # sched: [6:0.50] +; +; SKX-LABEL: test_faddp_fiadd: +; SKX: # BB#0: +; SKX-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50] +; SKX-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50] +; SKX-NEXT: #APP +; SKX-NEXT: faddp %st(1) # sched: [3:1.00] +; SKX-NEXT: faddp %st(2) # sched: [3:1.00] +; SKX-NEXT: fiadds (%ecx) # sched: [13:2.00] +; SKX-NEXT: fiaddl (%eax) # sched: [13:2.00] +; SKX-NEXT: #NO_APP +; SKX-NEXT: retl # sched: [6:0.50] +; +; BTVER2-LABEL: test_faddp_fiadd: +; BTVER2: # BB#0: +; BTVER2-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:1.00] +; BTVER2-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:1.00] +; BTVER2-NEXT: #APP +; BTVER2-NEXT: faddp %st(1) # sched: [3:1.00] +; BTVER2-NEXT: faddp %st(2) # sched: [3:1.00] +; BTVER2-NEXT: fiadds (%ecx) # sched: [8:1.00] +; BTVER2-NEXT: fiaddl (%eax) # sched: [8:1.00] +; BTVER2-NEXT: #NO_APP +; BTVER2-NEXT: retl # sched: [4:1.00] +; +; ZNVER1-LABEL: test_faddp_fiadd: +; ZNVER1: # BB#0: +; ZNVER1-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [8:0.50] +; ZNVER1-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [8:0.50] +; ZNVER1-NEXT: #APP +; ZNVER1-NEXT: faddp %st(1) # sched: [3:1.00] +; ZNVER1-NEXT: faddp %st(2) # sched: [3:1.00] +; ZNVER1-NEXT: fiadds (%ecx) # sched: [10:1.00] +; ZNVER1-NEXT: fiaddl (%eax) # sched: [10:1.00] +; ZNVER1-NEXT: #NO_APP +; ZNVER1-NEXT: retl # sched: [1:0.50] + tail call void asm sideeffect "faddp \0A\09 faddp %st(2), %st(0) \0A\09 fiadds $0 \0A\09 fiaddl $1", "*m,*m"(i16 *%a0, i32 *%a1) nounwind + ret void +} + +; TODO - test_fbld +; TODO - test_fbstp + +define void @test_fchs() optsize { +; GENERIC-LABEL: test_fchs: +; GENERIC: # BB#0: +; GENERIC-NEXT: #APP +; GENERIC-NEXT: fchs +; GENERIC-NEXT: #NO_APP +; GENERIC-NEXT: retl +; +; ATOM-LABEL: test_fchs: +; ATOM: # BB#0: +; ATOM-NEXT: #APP +; ATOM-NEXT: fchs +; ATOM-NEXT: #NO_APP +; ATOM-NEXT: retl # sched: [79:39.50] +; +; SLM-LABEL: test_fchs: +; SLM: # BB#0: +; SLM-NEXT: #APP +; SLM-NEXT: fchs +; SLM-NEXT: #NO_APP +; SLM-NEXT: retl # sched: [4:1.00] +; +; SANDY-LABEL: test_fchs: +; SANDY: # BB#0: +; SANDY-NEXT: #APP +; SANDY-NEXT: fchs +; SANDY-NEXT: #NO_APP +; SANDY-NEXT: retl # sched: [5:1.00] +; +; HASWELL-LABEL: test_fchs: +; HASWELL: # BB#0: +; HASWELL-NEXT: #APP +; HASWELL-NEXT: fchs # sched: [1:1.00] +; HASWELL-NEXT: #NO_APP +; HASWELL-NEXT: retl # sched: [5:0.50] +; +; BROADWELL-LABEL: test_fchs: +; BROADWELL: # BB#0: +; BROADWELL-NEXT: #APP +; BROADWELL-NEXT: fchs +; BROADWELL-NEXT: #NO_APP +; BROADWELL-NEXT: retl # sched: [6:0.50] +; +; SKYLAKE-LABEL: test_fchs: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: #APP +; SKYLAKE-NEXT: fchs +; SKYLAKE-NEXT: #NO_APP +; SKYLAKE-NEXT: retl # sched: [6:0.50] +; +; SKX-LABEL: test_fchs: +; SKX: # BB#0: +; SKX-NEXT: #APP +; SKX-NEXT: fchs +; SKX-NEXT: #NO_APP +; SKX-NEXT: retl # sched: [6:0.50] +; +; BTVER2-LABEL: test_fchs: +; BTVER2: # BB#0: +; BTVER2-NEXT: #APP +; BTVER2-NEXT: fchs +; BTVER2-NEXT: #NO_APP +; BTVER2-NEXT: retl # sched: [4:1.00] +; +; ZNVER1-LABEL: test_fchs: +; ZNVER1: # BB#0: +; ZNVER1-NEXT: #APP +; ZNVER1-NEXT: fchs # sched: [1:1.00] +; ZNVER1-NEXT: #NO_APP +; ZNVER1-NEXT: retl # sched: [1:0.50] + tail call void asm sideeffect "fchs", ""() nounwind + ret void +} + +define void @test_fclex_fnclex() optsize { +; GENERIC-LABEL: test_fclex_fnclex: +; GENERIC: # BB#0: +; GENERIC-NEXT: #APP +; GENERIC-NEXT: wait +; GENERIC-NEXT: fnclex +; GENERIC-NEXT: fnclex +; GENERIC-NEXT: #NO_APP +; GENERIC-NEXT: retl +; +; ATOM-LABEL: test_fclex_fnclex: +; ATOM: # BB#0: +; ATOM-NEXT: #APP +; ATOM-NEXT: wait # sched: [1:0.50] +; ATOM-NEXT: fnclex # sched: [25:12.50] +; ATOM-NEXT: fnclex # sched: [25:12.50] +; ATOM-NEXT: #NO_APP +; ATOM-NEXT: retl # sched: [79:39.50] +; +; SLM-LABEL: test_fclex_fnclex: +; SLM: # BB#0: +; SLM-NEXT: #APP +; SLM-NEXT: wait # sched: [100:1.00] +; SLM-NEXT: fnclex # sched: [100:1.00] +; SLM-NEXT: fnclex # sched: [100:1.00] +; SLM-NEXT: #NO_APP +; SLM-NEXT: retl # sched: [4:1.00] +; +; SANDY-LABEL: test_fclex_fnclex: +; SANDY: # BB#0: +; SANDY-NEXT: #APP +; SANDY-NEXT: wait # sched: [100:0.33] +; SANDY-NEXT: fnclex # sched: [100:0.33] +; SANDY-NEXT: fnclex # sched: [100:0.33] +; SANDY-NEXT: #NO_APP +; SANDY-NEXT: retl # sched: [5:1.00] +; +; HASWELL-LABEL: test_fclex_fnclex: +; HASWELL: # BB#0: +; HASWELL-NEXT: #APP +; HASWELL-NEXT: wait # sched: [1:0.50] +; HASWELL-NEXT: fnclex # sched: [1:1.25] +; HASWELL-NEXT: fnclex # sched: [1:1.25] +; HASWELL-NEXT: #NO_APP +; HASWELL-NEXT: retl # sched: [5:0.50] +; +; BROADWELL-LABEL: test_fclex_fnclex: +; BROADWELL: # BB#0: +; BROADWELL-NEXT: #APP +; BROADWELL-NEXT: wait # sched: [2:0.50] +; BROADWELL-NEXT: fnclex # sched: [4:1.00] +; BROADWELL-NEXT: fnclex # sched: [4:1.00] +; BROADWELL-NEXT: #NO_APP +; BROADWELL-NEXT: retl # sched: [6:0.50] +; +; SKYLAKE-LABEL: test_fclex_fnclex: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: #APP +; SKYLAKE-NEXT: wait # sched: [2:0.50] +; SKYLAKE-NEXT: fnclex # sched: [4:1.00] +; SKYLAKE-NEXT: fnclex # sched: [4:1.00] +; SKYLAKE-NEXT: #NO_APP +; SKYLAKE-NEXT: retl # sched: [6:0.50] +; +; SKX-LABEL: test_fclex_fnclex: +; SKX: # BB#0: +; SKX-NEXT: #APP +; SKX-NEXT: wait # sched: [2:0.50] +; SKX-NEXT: fnclex # sched: [4:1.00] +; SKX-NEXT: fnclex # sched: [4:1.00] +; SKX-NEXT: #NO_APP +; SKX-NEXT: retl # sched: [6:0.50] +; +; BTVER2-LABEL: test_fclex_fnclex: +; BTVER2: # BB#0: +; BTVER2-NEXT: #APP +; BTVER2-NEXT: wait # sched: [100:0.17] +; BTVER2-NEXT: fnclex # sched: [100:0.17] +; BTVER2-NEXT: fnclex # sched: [100:0.17] +; BTVER2-NEXT: #NO_APP +; BTVER2-NEXT: retl # sched: [4:1.00] +; +; ZNVER1-LABEL: test_fclex_fnclex: +; ZNVER1: # BB#0: +; ZNVER1-NEXT: #APP +; ZNVER1-NEXT: wait # sched: [1:1.00] +; ZNVER1-NEXT: fnclex # sched: [100:?] +; ZNVER1-NEXT: fnclex # sched: [100:?] +; ZNVER1-NEXT: #NO_APP +; ZNVER1-NEXT: retl # sched: [1:0.50] + tail call void asm sideeffect "fclex \0A\09 fnclex", ""() nounwind + ret void +} + +define void @test_fcmov() optsize { +; GENERIC-LABEL: test_fcmov: +; GENERIC: # BB#0: +; GENERIC-NEXT: #APP +; GENERIC-NEXT: fcmovb %st(1), %st(0) +; GENERIC-NEXT: fcmovbe %st(1), %st(0) +; GENERIC-NEXT: fcmove %st(1), %st(0) +; GENERIC-NEXT: fcmovnb %st(1), %st(0) +; GENERIC-NEXT: fcmovnbe %st(1), %st(0) +; GENERIC-NEXT: fcmovne %st(1), %st(0) +; GENERIC-NEXT: fcmovnu %st(1), %st(0) +; GENERIC-NEXT: fcmovu %st(1), %st(0) +; GENERIC-NEXT: #NO_APP +; GENERIC-NEXT: retl +; +; ATOM-LABEL: test_fcmov: +; ATOM: # BB#0: +; ATOM-NEXT: #APP +; ATOM-NEXT: fcmovb %st(1), %st(0) +; ATOM-NEXT: fcmovbe %st(1), %st(0) +; ATOM-NEXT: fcmove %st(1), %st(0) +; ATOM-NEXT: fcmovnb %st(1), %st(0) +; ATOM-NEXT: fcmovnbe %st(1), %st(0) +; ATOM-NEXT: fcmovne %st(1), %st(0) +; ATOM-NEXT: fcmovnu %st(1), %st(0) +; ATOM-NEXT: fcmovu %st(1), %st(0) +; ATOM-NEXT: #NO_APP +; ATOM-NEXT: retl # sched: [79:39.50] +; +; SLM-LABEL: test_fcmov: +; SLM: # BB#0: +; SLM-NEXT: #APP +; SLM-NEXT: fcmovb %st(1), %st(0) +; SLM-NEXT: fcmovbe %st(1), %st(0) +; SLM-NEXT: fcmove %st(1), %st(0) +; SLM-NEXT: fcmovnb %st(1), %st(0) +; SLM-NEXT: fcmovnbe %st(1), %st(0) +; SLM-NEXT: fcmovne %st(1), %st(0) +; SLM-NEXT: fcmovnu %st(1), %st(0) +; SLM-NEXT: fcmovu %st(1), %st(0) +; SLM-NEXT: #NO_APP +; SLM-NEXT: retl # sched: [4:1.00] +; +; SANDY-LABEL: test_fcmov: +; SANDY: # BB#0: +; SANDY-NEXT: #APP +; SANDY-NEXT: fcmovb %st(1), %st(0) # sched: [3:2.00] +; SANDY-NEXT: fcmovbe %st(1), %st(0) # sched: [3:2.00] +; SANDY-NEXT: fcmove %st(1), %st(0) # sched: [3:2.00] +; SANDY-NEXT: fcmovnb %st(1), %st(0) # sched: [3:2.00] +; SANDY-NEXT: fcmovnbe %st(1), %st(0) # sched: [3:2.00] +; SANDY-NEXT: fcmovne %st(1), %st(0) # sched: [3:2.00] +; SANDY-NEXT: fcmovnu %st(1), %st(0) # sched: [3:2.00] +; SANDY-NEXT: fcmovu %st(1), %st(0) # sched: [3:2.00] +; SANDY-NEXT: #NO_APP +; SANDY-NEXT: retl # sched: [5:1.00] +; +; HASWELL-LABEL: test_fcmov: +; HASWELL: # BB#0: +; HASWELL-NEXT: #APP +; HASWELL-NEXT: fcmovb %st(1), %st(0) +; HASWELL-NEXT: fcmovbe %st(1), %st(0) +; HASWELL-NEXT: fcmove %st(1), %st(0) +; HASWELL-NEXT: fcmovnb %st(1), %st(0) +; HASWELL-NEXT: fcmovnbe %st(1), %st(0) +; HASWELL-NEXT: fcmovne %st(1), %st(0) +; HASWELL-NEXT: fcmovnu %st(1), %st(0) +; HASWELL-NEXT: fcmovu %st(1), %st(0) +; HASWELL-NEXT: #NO_APP +; HASWELL-NEXT: retl # sched: [5:0.50] +; +; BROADWELL-LABEL: test_fcmov: +; BROADWELL: # BB#0: +; BROADWELL-NEXT: #APP +; BROADWELL-NEXT: fcmovb %st(1), %st(0) +; BROADWELL-NEXT: fcmovbe %st(1), %st(0) +; BROADWELL-NEXT: fcmove %st(1), %st(0) +; BROADWELL-NEXT: fcmovnb %st(1), %st(0) +; BROADWELL-NEXT: fcmovnbe %st(1), %st(0) +; BROADWELL-NEXT: fcmovne %st(1), %st(0) +; BROADWELL-NEXT: fcmovnu %st(1), %st(0) +; BROADWELL-NEXT: fcmovu %st(1), %st(0) +; BROADWELL-NEXT: #NO_APP +; BROADWELL-NEXT: retl # sched: [6:0.50] +; +; SKYLAKE-LABEL: test_fcmov: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: #APP +; SKYLAKE-NEXT: fcmovb %st(1), %st(0) +; SKYLAKE-NEXT: fcmovbe %st(1), %st(0) +; SKYLAKE-NEXT: fcmove %st(1), %st(0) +; SKYLAKE-NEXT: fcmovnb %st(1), %st(0) +; SKYLAKE-NEXT: fcmovnbe %st(1), %st(0) +; SKYLAKE-NEXT: fcmovne %st(1), %st(0) +; SKYLAKE-NEXT: fcmovnu %st(1), %st(0) +; SKYLAKE-NEXT: fcmovu %st(1), %st(0) +; SKYLAKE-NEXT: #NO_APP +; SKYLAKE-NEXT: retl # sched: [6:0.50] +; +; SKX-LABEL: test_fcmov: +; SKX: # BB#0: +; SKX-NEXT: #APP +; SKX-NEXT: fcmovb %st(1), %st(0) +; SKX-NEXT: fcmovbe %st(1), %st(0) +; SKX-NEXT: fcmove %st(1), %st(0) +; SKX-NEXT: fcmovnb %st(1), %st(0) +; SKX-NEXT: fcmovnbe %st(1), %st(0) +; SKX-NEXT: fcmovne %st(1), %st(0) +; SKX-NEXT: fcmovnu %st(1), %st(0) +; SKX-NEXT: fcmovu %st(1), %st(0) +; SKX-NEXT: #NO_APP +; SKX-NEXT: retl # sched: [6:0.50] +; +; BTVER2-LABEL: test_fcmov: +; BTVER2: # BB#0: +; BTVER2-NEXT: #APP +; BTVER2-NEXT: fcmovb %st(1), %st(0) +; BTVER2-NEXT: fcmovbe %st(1), %st(0) +; BTVER2-NEXT: fcmove %st(1), %st(0) +; BTVER2-NEXT: fcmovnb %st(1), %st(0) +; BTVER2-NEXT: fcmovnbe %st(1), %st(0) +; BTVER2-NEXT: fcmovne %st(1), %st(0) +; BTVER2-NEXT: fcmovnu %st(1), %st(0) +; BTVER2-NEXT: fcmovu %st(1), %st(0) +; BTVER2-NEXT: #NO_APP +; BTVER2-NEXT: retl # sched: [4:1.00] +; +; ZNVER1-LABEL: test_fcmov: +; ZNVER1: # BB#0: +; ZNVER1-NEXT: #APP +; ZNVER1-NEXT: fcmovb %st(1), %st(0) # sched: [100:?] +; ZNVER1-NEXT: fcmovbe %st(1), %st(0) # sched: [100:?] +; ZNVER1-NEXT: fcmove %st(1), %st(0) +; ZNVER1-NEXT: fcmovnb %st(1), %st(0) # sched: [100:?] +; ZNVER1-NEXT: fcmovnbe %st(1), %st(0) # sched: [100:?] +; ZNVER1-NEXT: fcmovne %st(1), %st(0) # sched: [100:?] +; ZNVER1-NEXT: fcmovnu %st(1), %st(0) # sched: [100:?] +; ZNVER1-NEXT: fcmovu %st(1), %st(0) # sched: [100:?] +; ZNVER1-NEXT: #NO_APP +; ZNVER1-NEXT: retl # sched: [1:0.50] + tail call void asm sideeffect "fcmovb %st(1), %st(0) \0A\09 fcmovbe %st(1), %st(0) \0A\09 fcmove %st(1), %st(0) \0A\09 fcmovnb %st(1), %st(0) \0A\09 fcmovnbe %st(1), %st(0) \0A\09 fcmovne %st(1), %st(0) \0A\09 fcmovnu %st(1), %st(0) \0A\09 fcmovu %st(1), %st(0)", ""() nounwind + ret void +} + +define void @test_fcom(float *%a0, double *%a1) optsize { +; GENERIC-LABEL: test_fcom: +; GENERIC: # BB#0: +; GENERIC-NEXT: movl {{[0-9]+}}(%esp), %eax +; GENERIC-NEXT: movl {{[0-9]+}}(%esp), %ecx +; GENERIC-NEXT: #APP +; GENERIC-NEXT: fcom %st(1) +; GENERIC-NEXT: fcom %st(3) +; GENERIC-NEXT: fcoms (%ecx) +; GENERIC-NEXT: fcoml (%eax) +; GENERIC-NEXT: #NO_APP +; GENERIC-NEXT: retl +; +; ATOM-LABEL: test_fcom: +; ATOM: # BB#0: +; ATOM-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [1:1.00] +; ATOM-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [1:1.00] +; ATOM-NEXT: #APP +; ATOM-NEXT: fcom %st(1) +; ATOM-NEXT: fcom %st(3) +; ATOM-NEXT: fcoms (%ecx) +; ATOM-NEXT: fcoml (%eax) +; ATOM-NEXT: #NO_APP +; ATOM-NEXT: retl # sched: [79:39.50] +; +; SLM-LABEL: test_fcom: +; SLM: # BB#0: +; SLM-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [3:1.00] +; SLM-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [3:1.00] +; SLM-NEXT: #APP +; SLM-NEXT: fcom %st(1) +; SLM-NEXT: fcom %st(3) +; SLM-NEXT: fcoms (%ecx) +; SLM-NEXT: fcoml (%eax) +; SLM-NEXT: #NO_APP +; SLM-NEXT: retl # sched: [4:1.00] +; +; SANDY-LABEL: test_fcom: +; SANDY: # BB#0: +; SANDY-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50] +; SANDY-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50] +; SANDY-NEXT: #APP +; SANDY-NEXT: fcom %st(1) # sched: [1:1.00] +; SANDY-NEXT: fcom %st(3) # sched: [1:1.00] +; SANDY-NEXT: fcoms (%ecx) # sched: [8:1.00] +; SANDY-NEXT: fcoml (%eax) # sched: [8:1.00] +; SANDY-NEXT: #NO_APP +; SANDY-NEXT: retl # sched: [5:1.00] +; +; HASWELL-LABEL: test_fcom: +; HASWELL: # BB#0: +; HASWELL-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [1:0.50] +; HASWELL-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [1:0.50] +; HASWELL-NEXT: #APP +; HASWELL-NEXT: fcom %st(1) # sched: [1:1.00] +; HASWELL-NEXT: fcom %st(3) # sched: [1:1.00] +; HASWELL-NEXT: fcoms (%ecx) # sched: [1:1.00] +; HASWELL-NEXT: fcoml (%eax) # sched: [1:1.00] +; HASWELL-NEXT: #NO_APP +; HASWELL-NEXT: retl # sched: [5:0.50] +; +; BROADWELL-LABEL: test_fcom: +; BROADWELL: # BB#0: +; BROADWELL-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50] +; BROADWELL-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50] +; BROADWELL-NEXT: #APP +; BROADWELL-NEXT: fcom %st(1) # sched: [1:1.00] +; BROADWELL-NEXT: fcom %st(3) # sched: [1:1.00] +; BROADWELL-NEXT: fcoms (%ecx) # sched: [7:1.00] +; BROADWELL-NEXT: fcoml (%eax) # sched: [7:1.00] +; BROADWELL-NEXT: #NO_APP +; BROADWELL-NEXT: retl # sched: [6:0.50] +; +; SKYLAKE-LABEL: test_fcom: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50] +; SKYLAKE-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50] +; SKYLAKE-NEXT: #APP +; SKYLAKE-NEXT: fcom %st(1) # sched: [1:1.00] +; SKYLAKE-NEXT: fcom %st(3) # sched: [1:1.00] +; SKYLAKE-NEXT: fcoms (%ecx) # sched: [8:1.00] +; SKYLAKE-NEXT: fcoml (%eax) # sched: [8:1.00] +; SKYLAKE-NEXT: #NO_APP +; SKYLAKE-NEXT: retl # sched: [6:0.50] +; +; SKX-LABEL: test_fcom: +; SKX: # BB#0: +; SKX-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50] +; SKX-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50] +; SKX-NEXT: #APP +; SKX-NEXT: fcom %st(1) # sched: [1:1.00] +; SKX-NEXT: fcom %st(3) # sched: [1:1.00] +; SKX-NEXT: fcoms (%ecx) # sched: [8:1.00] +; SKX-NEXT: fcoml (%eax) # sched: [8:1.00] +; SKX-NEXT: #NO_APP +; SKX-NEXT: retl # sched: [6:0.50] +; +; BTVER2-LABEL: test_fcom: +; BTVER2: # BB#0: +; BTVER2-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:1.00] +; BTVER2-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:1.00] +; BTVER2-NEXT: #APP +; BTVER2-NEXT: fcom %st(1) +; BTVER2-NEXT: fcom %st(3) +; BTVER2-NEXT: fcoms (%ecx) +; BTVER2-NEXT: fcoml (%eax) +; BTVER2-NEXT: #NO_APP +; BTVER2-NEXT: retl # sched: [4:1.00] +; +; ZNVER1-LABEL: test_fcom: +; ZNVER1: # BB#0: +; ZNVER1-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [8:0.50] +; ZNVER1-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [8:0.50] +; ZNVER1-NEXT: #APP +; ZNVER1-NEXT: fcom %st(1) # sched: [1:1.00] +; ZNVER1-NEXT: fcom %st(3) # sched: [1:1.00] +; ZNVER1-NEXT: fcoms (%ecx) # sched: [8:1.00] +; ZNVER1-NEXT: fcoml (%eax) # sched: [8:1.00] +; ZNVER1-NEXT: #NO_APP +; ZNVER1-NEXT: retl # sched: [1:0.50] + tail call void asm sideeffect "fcom \0A\09 fcom %st(3) \0A\09 fcoms $0 \0A\09 fcoml $1", "*m,*m"(float *%a0, double *%a1) nounwind + ret void +} + +define void @test_fcomp_fcompp(float *%a0, double *%a1) optsize { +; GENERIC-LABEL: test_fcomp_fcompp: +; GENERIC: # BB#0: +; GENERIC-NEXT: movl {{[0-9]+}}(%esp), %eax +; GENERIC-NEXT: movl {{[0-9]+}}(%esp), %ecx +; GENERIC-NEXT: #APP +; GENERIC-NEXT: fcomp %st(1) +; GENERIC-NEXT: fcomp %st(3) +; GENERIC-NEXT: fcomps (%ecx) +; GENERIC-NEXT: fcompl (%eax) +; GENERIC-NEXT: fcompp +; GENERIC-NEXT: #NO_APP +; GENERIC-NEXT: retl +; +; ATOM-LABEL: test_fcomp_fcompp: +; ATOM: # BB#0: +; ATOM-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [1:1.00] +; ATOM-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [1:1.00] +; ATOM-NEXT: #APP +; ATOM-NEXT: fcomp %st(1) +; ATOM-NEXT: fcomp %st(3) +; ATOM-NEXT: fcomps (%ecx) +; ATOM-NEXT: fcompl (%eax) +; ATOM-NEXT: fcompp # sched: [1:1.00] +; ATOM-NEXT: #NO_APP +; ATOM-NEXT: retl # sched: [79:39.50] +; +; SLM-LABEL: test_fcomp_fcompp: +; SLM: # BB#0: +; SLM-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [3:1.00] +; SLM-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [3:1.00] +; SLM-NEXT: #APP +; SLM-NEXT: fcomp %st(1) +; SLM-NEXT: fcomp %st(3) +; SLM-NEXT: fcomps (%ecx) +; SLM-NEXT: fcompl (%eax) +; SLM-NEXT: fcompp # sched: [100:1.00] +; SLM-NEXT: #NO_APP +; SLM-NEXT: retl # sched: [4:1.00] +; +; SANDY-LABEL: test_fcomp_fcompp: +; SANDY: # BB#0: +; SANDY-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50] +; SANDY-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50] +; SANDY-NEXT: #APP +; SANDY-NEXT: fcomp %st(1) # sched: [1:1.00] +; SANDY-NEXT: fcomp %st(3) # sched: [1:1.00] +; SANDY-NEXT: fcomps (%ecx) # sched: [8:1.00] +; SANDY-NEXT: fcompl (%eax) # sched: [8:1.00] +; SANDY-NEXT: fcompp # sched: [100:0.33] +; SANDY-NEXT: #NO_APP +; SANDY-NEXT: retl # sched: [5:1.00] +; +; HASWELL-LABEL: test_fcomp_fcompp: +; HASWELL: # BB#0: +; HASWELL-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [1:0.50] +; HASWELL-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [1:0.50] +; HASWELL-NEXT: #APP +; HASWELL-NEXT: fcomp %st(1) # sched: [1:1.00] +; HASWELL-NEXT: fcomp %st(3) # sched: [1:1.00] +; HASWELL-NEXT: fcomps (%ecx) # sched: [1:1.00] +; HASWELL-NEXT: fcompl (%eax) # sched: [1:1.00] +; HASWELL-NEXT: fcompp # sched: [1:0.50] +; HASWELL-NEXT: #NO_APP +; HASWELL-NEXT: retl # sched: [5:0.50] +; +; BROADWELL-LABEL: test_fcomp_fcompp: +; BROADWELL: # BB#0: +; BROADWELL-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50] +; BROADWELL-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50] +; BROADWELL-NEXT: #APP +; BROADWELL-NEXT: fcomp %st(1) # sched: [1:1.00] +; BROADWELL-NEXT: fcomp %st(3) # sched: [1:1.00] +; BROADWELL-NEXT: fcomps (%ecx) # sched: [7:1.00] +; BROADWELL-NEXT: fcompl (%eax) # sched: [7:1.00] +; BROADWELL-NEXT: fcompp # sched: [100:0.25] +; BROADWELL-NEXT: #NO_APP +; BROADWELL-NEXT: retl # sched: [6:0.50] +; +; SKYLAKE-LABEL: test_fcomp_fcompp: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50] +; SKYLAKE-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50] +; SKYLAKE-NEXT: #APP +; SKYLAKE-NEXT: fcomp %st(1) # sched: [1:1.00] +; SKYLAKE-NEXT: fcomp %st(3) # sched: [1:1.00] +; SKYLAKE-NEXT: fcomps (%ecx) # sched: [8:1.00] +; SKYLAKE-NEXT: fcompl (%eax) # sched: [8:1.00] +; SKYLAKE-NEXT: fcompp # sched: [100:0.25] +; SKYLAKE-NEXT: #NO_APP +; SKYLAKE-NEXT: retl # sched: [6:0.50] +; +; SKX-LABEL: test_fcomp_fcompp: +; SKX: # BB#0: +; SKX-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50] +; SKX-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50] +; SKX-NEXT: #APP +; SKX-NEXT: fcomp %st(1) # sched: [1:1.00] +; SKX-NEXT: fcomp %st(3) # sched: [1:1.00] +; SKX-NEXT: fcomps (%ecx) # sched: [8:1.00] +; SKX-NEXT: fcompl (%eax) # sched: [8:1.00] +; SKX-NEXT: fcompp # sched: [100:0.25] +; SKX-NEXT: #NO_APP +; SKX-NEXT: retl # sched: [6:0.50] +; +; BTVER2-LABEL: test_fcomp_fcompp: +; BTVER2: # BB#0: +; BTVER2-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:1.00] +; BTVER2-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:1.00] +; BTVER2-NEXT: #APP +; BTVER2-NEXT: fcomp %st(1) +; BTVER2-NEXT: fcomp %st(3) +; BTVER2-NEXT: fcomps (%ecx) +; BTVER2-NEXT: fcompl (%eax) +; BTVER2-NEXT: fcompp # sched: [100:0.17] +; BTVER2-NEXT: #NO_APP +; BTVER2-NEXT: retl # sched: [4:1.00] +; +; ZNVER1-LABEL: test_fcomp_fcompp: +; ZNVER1: # BB#0: +; ZNVER1-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [8:0.50] +; ZNVER1-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [8:0.50] +; ZNVER1-NEXT: #APP +; ZNVER1-NEXT: fcomp %st(1) # sched: [1:1.00] +; ZNVER1-NEXT: fcomp %st(3) # sched: [1:1.00] +; ZNVER1-NEXT: fcomps (%ecx) # sched: [8:1.00] +; ZNVER1-NEXT: fcompl (%eax) # sched: [8:1.00] +; ZNVER1-NEXT: fcompp # sched: [1:1.00] +; ZNVER1-NEXT: #NO_APP +; ZNVER1-NEXT: retl # sched: [1:0.50] + tail call void asm sideeffect "fcomp \0A\09 fcomp %st(3) \0A\09 fcomps $0 \0A\09 fcompl $1 \0A\09 fcompp", "*m,*m"(float *%a0, double *%a1) nounwind + ret void +} + +define void @test_fcomi_fcomip() optsize { +; GENERIC-LABEL: test_fcomi_fcomip: +; GENERIC: # BB#0: +; GENERIC-NEXT: #APP +; GENERIC-NEXT: fcomi %st(3) +; GENERIC-NEXT: fcompi %st(3) +; GENERIC-NEXT: #NO_APP +; GENERIC-NEXT: retl +; +; ATOM-LABEL: test_fcomi_fcomip: +; ATOM: # BB#0: +; ATOM-NEXT: #APP +; ATOM-NEXT: fcomi %st(3) # sched: [9:4.50] +; ATOM-NEXT: fcompi %st(3) # sched: [9:4.50] +; ATOM-NEXT: #NO_APP +; ATOM-NEXT: retl # sched: [79:39.50] +; +; SLM-LABEL: test_fcomi_fcomip: +; SLM: # BB#0: +; SLM-NEXT: #APP +; SLM-NEXT: fcomi %st(3) # sched: [3:1.00] +; SLM-NEXT: fcompi %st(3) # sched: [3:1.00] +; SLM-NEXT: #NO_APP +; SLM-NEXT: retl # sched: [4:1.00] +; +; SANDY-LABEL: test_fcomi_fcomip: +; SANDY: # BB#0: +; SANDY-NEXT: #APP +; SANDY-NEXT: fcomi %st(3) # sched: [3:1.00] +; SANDY-NEXT: fcompi %st(3) # sched: [3:1.00] +; SANDY-NEXT: #NO_APP +; SANDY-NEXT: retl # sched: [5:1.00] +; +; HASWELL-LABEL: test_fcomi_fcomip: +; HASWELL: # BB#0: +; HASWELL-NEXT: #APP +; HASWELL-NEXT: fcomi %st(3) # sched: [1:0.50] +; HASWELL-NEXT: fcompi %st(3) # sched: [1:0.50] +; HASWELL-NEXT: #NO_APP +; HASWELL-NEXT: retl # sched: [5:0.50] +; +; BROADWELL-LABEL: test_fcomi_fcomip: +; BROADWELL: # BB#0: +; BROADWELL-NEXT: #APP +; BROADWELL-NEXT: fcomi %st(3) # sched: [3:1.00] +; BROADWELL-NEXT: fcompi %st(3) # sched: [3:1.00] +; BROADWELL-NEXT: #NO_APP +; BROADWELL-NEXT: retl # sched: [6:0.50] +; +; SKYLAKE-LABEL: test_fcomi_fcomip: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: #APP +; SKYLAKE-NEXT: fcomi %st(3) # sched: [3:1.00] +; SKYLAKE-NEXT: fcompi %st(3) # sched: [3:1.00] +; SKYLAKE-NEXT: #NO_APP +; SKYLAKE-NEXT: retl # sched: [6:0.50] +; +; SKX-LABEL: test_fcomi_fcomip: +; SKX: # BB#0: +; SKX-NEXT: #APP +; SKX-NEXT: fcomi %st(3) # sched: [3:1.00] +; SKX-NEXT: fcompi %st(3) # sched: [3:1.00] +; SKX-NEXT: #NO_APP +; SKX-NEXT: retl # sched: [6:0.50] +; +; BTVER2-LABEL: test_fcomi_fcomip: +; BTVER2: # BB#0: +; BTVER2-NEXT: #APP +; BTVER2-NEXT: fcomi %st(3) # sched: [3:1.00] +; BTVER2-NEXT: fcompi %st(3) # sched: [3:1.00] +; BTVER2-NEXT: #NO_APP +; BTVER2-NEXT: retl # sched: [4:1.00] +; +; ZNVER1-LABEL: test_fcomi_fcomip: +; ZNVER1: # BB#0: +; ZNVER1-NEXT: #APP +; ZNVER1-NEXT: fcomi %st(3) # sched: [9:0.50] +; ZNVER1-NEXT: fcompi %st(3) # sched: [9:0.50] +; ZNVER1-NEXT: #NO_APP +; ZNVER1-NEXT: retl # sched: [1:0.50] + tail call void asm sideeffect "fcomi %st(3) \0A\09 fcomip %st(3)", ""() nounwind + ret void +} + +define void @test_fcos() optsize { +; GENERIC-LABEL: test_fcos: +; GENERIC: # BB#0: +; GENERIC-NEXT: #APP +; GENERIC-NEXT: fcos +; GENERIC-NEXT: #NO_APP +; GENERIC-NEXT: retl +; +; ATOM-LABEL: test_fcos: +; ATOM: # BB#0: +; ATOM-NEXT: #APP +; ATOM-NEXT: fcos +; ATOM-NEXT: #NO_APP +; ATOM-NEXT: retl # sched: [79:39.50] +; +; SLM-LABEL: test_fcos: +; SLM: # BB#0: +; SLM-NEXT: #APP +; SLM-NEXT: fcos +; SLM-NEXT: #NO_APP +; SLM-NEXT: retl # sched: [4:1.00] +; +; SANDY-LABEL: test_fcos: +; SANDY: # BB#0: +; SANDY-NEXT: #APP +; SANDY-NEXT: fcos +; SANDY-NEXT: #NO_APP +; SANDY-NEXT: retl # sched: [5:1.00] +; +; HASWELL-LABEL: test_fcos: +; HASWELL: # BB#0: +; HASWELL-NEXT: #APP +; HASWELL-NEXT: fcos +; HASWELL-NEXT: #NO_APP +; HASWELL-NEXT: retl # sched: [5:0.50] +; +; BROADWELL-LABEL: test_fcos: +; BROADWELL: # BB#0: +; BROADWELL-NEXT: #APP +; BROADWELL-NEXT: fcos +; BROADWELL-NEXT: #NO_APP +; BROADWELL-NEXT: retl # sched: [6:0.50] +; +; SKYLAKE-LABEL: test_fcos: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: #APP +; SKYLAKE-NEXT: fcos +; SKYLAKE-NEXT: #NO_APP +; SKYLAKE-NEXT: retl # sched: [6:0.50] +; +; SKX-LABEL: test_fcos: +; SKX: # BB#0: +; SKX-NEXT: #APP +; SKX-NEXT: fcos +; SKX-NEXT: #NO_APP +; SKX-NEXT: retl # sched: [6:0.50] +; +; BTVER2-LABEL: test_fcos: +; BTVER2: # BB#0: +; BTVER2-NEXT: #APP +; BTVER2-NEXT: fcos +; BTVER2-NEXT: #NO_APP +; BTVER2-NEXT: retl # sched: [4:1.00] +; +; ZNVER1-LABEL: test_fcos: +; ZNVER1: # BB#0: +; ZNVER1-NEXT: #APP +; ZNVER1-NEXT: fcos +; ZNVER1-NEXT: #NO_APP +; ZNVER1-NEXT: retl # sched: [1:0.50] + tail call void asm sideeffect "fcos", ""() nounwind + ret void +} + +define void @test_fdecstp() optsize { +; GENERIC-LABEL: test_fdecstp: +; GENERIC: # BB#0: +; GENERIC-NEXT: #APP +; GENERIC-NEXT: fdecstp +; GENERIC-NEXT: #NO_APP +; GENERIC-NEXT: retl +; +; ATOM-LABEL: test_fdecstp: +; ATOM: # BB#0: +; ATOM-NEXT: #APP +; ATOM-NEXT: fdecstp # sched: [1:0.50] +; ATOM-NEXT: #NO_APP +; ATOM-NEXT: retl # sched: [79:39.50] +; +; SLM-LABEL: test_fdecstp: +; SLM: # BB#0: +; SLM-NEXT: #APP +; SLM-NEXT: fdecstp # sched: [100:1.00] +; SLM-NEXT: #NO_APP +; SLM-NEXT: retl # sched: [4:1.00] +; +; SANDY-LABEL: test_fdecstp: +; SANDY: # BB#0: +; SANDY-NEXT: #APP +; SANDY-NEXT: fdecstp # sched: [1:1.00] +; SANDY-NEXT: #NO_APP +; SANDY-NEXT: retl # sched: [5:1.00] +; +; HASWELL-LABEL: test_fdecstp: +; HASWELL: # BB#0: +; HASWELL-NEXT: #APP +; HASWELL-NEXT: fdecstp # sched: [2:1.00] +; HASWELL-NEXT: #NO_APP +; HASWELL-NEXT: retl # sched: [5:0.50] +; +; BROADWELL-LABEL: test_fdecstp: +; BROADWELL: # BB#0: +; BROADWELL-NEXT: #APP +; BROADWELL-NEXT: fdecstp # sched: [2:1.00] +; BROADWELL-NEXT: #NO_APP +; BROADWELL-NEXT: retl # sched: [6:0.50] +; +; SKYLAKE-LABEL: test_fdecstp: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: #APP +; SKYLAKE-NEXT: fdecstp # sched: [2:1.00] +; SKYLAKE-NEXT: #NO_APP +; SKYLAKE-NEXT: retl # sched: [6:0.50] +; +; SKX-LABEL: test_fdecstp: +; SKX: # BB#0: +; SKX-NEXT: #APP +; SKX-NEXT: fdecstp # sched: [2:1.00] +; SKX-NEXT: #NO_APP +; SKX-NEXT: retl # sched: [6:0.50] +; +; BTVER2-LABEL: test_fdecstp: +; BTVER2: # BB#0: +; BTVER2-NEXT: #APP +; BTVER2-NEXT: fdecstp # sched: [100:0.17] +; BTVER2-NEXT: #NO_APP +; BTVER2-NEXT: retl # sched: [4:1.00] +; +; ZNVER1-LABEL: test_fdecstp: +; ZNVER1: # BB#0: +; ZNVER1-NEXT: #APP +; ZNVER1-NEXT: fdecstp # sched: [11:1.00] +; ZNVER1-NEXT: #NO_APP +; ZNVER1-NEXT: retl # sched: [1:0.50] + tail call void asm sideeffect "fdecstp", ""() nounwind + ret void +} + +define void @test_fdiv(float *%a0, double *%a1) optsize { +; GENERIC-LABEL: test_fdiv: +; GENERIC: # BB#0: +; GENERIC-NEXT: movl {{[0-9]+}}(%esp), %eax +; GENERIC-NEXT: movl {{[0-9]+}}(%esp), %ecx +; GENERIC-NEXT: #APP +; GENERIC-NEXT: fdiv %st(0), %st(1) +; GENERIC-NEXT: fdiv %st(2) +; GENERIC-NEXT: fdivs (%ecx) +; GENERIC-NEXT: fdivl (%eax) +; GENERIC-NEXT: #NO_APP +; GENERIC-NEXT: retl +; +; ATOM-LABEL: test_fdiv: +; ATOM: # BB#0: +; ATOM-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [1:1.00] +; ATOM-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [1:1.00] +; ATOM-NEXT: #APP +; ATOM-NEXT: fdiv %st(0), %st(1) +; ATOM-NEXT: fdiv %st(2) +; ATOM-NEXT: fdivs (%ecx) +; ATOM-NEXT: fdivl (%eax) +; ATOM-NEXT: #NO_APP +; ATOM-NEXT: retl # sched: [79:39.50] +; +; SLM-LABEL: test_fdiv: +; SLM: # BB#0: +; SLM-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [3:1.00] +; SLM-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [3:1.00] +; SLM-NEXT: #APP +; SLM-NEXT: fdiv %st(0), %st(1) # sched: [34:34.00] +; SLM-NEXT: fdiv %st(2) # sched: [34:34.00] +; SLM-NEXT: fdivs (%ecx) # sched: [37:34.00] +; SLM-NEXT: fdivl (%eax) # sched: [37:34.00] +; SLM-NEXT: #NO_APP +; SLM-NEXT: retl # sched: [4:1.00] +; +; SANDY-LABEL: test_fdiv: +; SANDY: # BB#0: +; SANDY-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50] +; SANDY-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50] +; SANDY-NEXT: #APP +; SANDY-NEXT: fdiv %st(0), %st(1) # sched: [24:1.00] +; SANDY-NEXT: fdiv %st(2) # sched: [24:1.00] +; SANDY-NEXT: fdivs (%ecx) # sched: [31:1.00] +; SANDY-NEXT: fdivl (%eax) # sched: [31:1.00] +; SANDY-NEXT: #NO_APP +; SANDY-NEXT: retl # sched: [5:1.00] +; +; HASWELL-LABEL: test_fdiv: +; HASWELL: # BB#0: +; HASWELL-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [1:0.50] +; HASWELL-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [1:0.50] +; HASWELL-NEXT: #APP +; HASWELL-NEXT: fdiv %st(0), %st(1) # sched: [24:1.00] +; HASWELL-NEXT: fdiv %st(2) # sched: [20:1.00] +; HASWELL-NEXT: fdivs (%ecx) # sched: [24:1.00] +; HASWELL-NEXT: fdivl (%eax) # sched: [24:1.00] +; HASWELL-NEXT: #NO_APP +; HASWELL-NEXT: retl # sched: [5:0.50] +; +; BROADWELL-LABEL: test_fdiv: +; BROADWELL: # BB#0: +; BROADWELL-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50] +; BROADWELL-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50] +; BROADWELL-NEXT: #APP +; BROADWELL-NEXT: fdiv %st(0), %st(1) # sched: [15:1.00] +; BROADWELL-NEXT: fdiv %st(2) # sched: [20:1.00] +; BROADWELL-NEXT: fdivs (%ecx) # sched: [21:1.00] +; BROADWELL-NEXT: fdivl (%eax) # sched: [21:1.00] +; BROADWELL-NEXT: #NO_APP +; BROADWELL-NEXT: retl # sched: [6:0.50] +; +; SKYLAKE-LABEL: test_fdiv: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50] +; SKYLAKE-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50] +; SKYLAKE-NEXT: #APP +; SKYLAKE-NEXT: fdiv %st(0), %st(1) # sched: [15:1.00] +; SKYLAKE-NEXT: fdiv %st(2) # sched: [20:1.00] +; SKYLAKE-NEXT: fdivs (%ecx) # sched: [22:1.00] +; SKYLAKE-NEXT: fdivl (%eax) # sched: [22:1.00] +; SKYLAKE-NEXT: #NO_APP +; SKYLAKE-NEXT: retl # sched: [6:0.50] +; +; SKX-LABEL: test_fdiv: +; SKX: # BB#0: +; SKX-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50] +; SKX-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50] +; SKX-NEXT: #APP +; SKX-NEXT: fdiv %st(0), %st(1) # sched: [15:1.00] +; SKX-NEXT: fdiv %st(2) # sched: [20:1.00] +; SKX-NEXT: fdivs (%ecx) # sched: [22:1.00] +; SKX-NEXT: fdivl (%eax) # sched: [22:1.00] +; SKX-NEXT: #NO_APP +; SKX-NEXT: retl # sched: [6:0.50] +; +; BTVER2-LABEL: test_fdiv: +; BTVER2: # BB#0: +; BTVER2-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:1.00] +; BTVER2-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:1.00] +; BTVER2-NEXT: #APP +; BTVER2-NEXT: fdiv %st(0), %st(1) # sched: [19:19.00] +; BTVER2-NEXT: fdiv %st(2) # sched: [19:19.00] +; BTVER2-NEXT: fdivs (%ecx) # sched: [24:19.00] +; BTVER2-NEXT: fdivl (%eax) # sched: [24:19.00] +; BTVER2-NEXT: #NO_APP +; BTVER2-NEXT: retl # sched: [4:1.00] +; +; ZNVER1-LABEL: test_fdiv: +; ZNVER1: # BB#0: +; ZNVER1-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [8:0.50] +; ZNVER1-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [8:0.50] +; ZNVER1-NEXT: #APP +; ZNVER1-NEXT: fdiv %st(0), %st(1) # sched: [15:1.00] +; ZNVER1-NEXT: fdiv %st(2) # sched: [15:1.00] +; ZNVER1-NEXT: fdivs (%ecx) # sched: [22:1.00] +; ZNVER1-NEXT: fdivl (%eax) # sched: [22:1.00] +; ZNVER1-NEXT: #NO_APP +; ZNVER1-NEXT: retl # sched: [1:0.50] + tail call void asm sideeffect "fdiv %st(0), %st(1) \0A\09 fdiv %st(2), %st(0) \0A\09 fdivs $0 \0A\09 fdivl $1", "*m,*m"(float *%a0, double *%a1) nounwind + ret void +} + +define void @test_fdivp_fidiv(i16 *%a0, i32 *%a1) optsize { +; GENERIC-LABEL: test_fdivp_fidiv: +; GENERIC: # BB#0: +; GENERIC-NEXT: movl {{[0-9]+}}(%esp), %eax +; GENERIC-NEXT: movl {{[0-9]+}}(%esp), %ecx +; GENERIC-NEXT: #APP +; GENERIC-NEXT: fdivp %st(1) +; GENERIC-NEXT: fdivp %st(2) +; GENERIC-NEXT: fidivs (%ecx) +; GENERIC-NEXT: fidivl (%eax) +; GENERIC-NEXT: #NO_APP +; GENERIC-NEXT: retl +; +; ATOM-LABEL: test_fdivp_fidiv: +; ATOM: # BB#0: +; ATOM-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [1:1.00] +; ATOM-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [1:1.00] +; ATOM-NEXT: #APP +; ATOM-NEXT: fdivp %st(1) +; ATOM-NEXT: fdivp %st(2) +; ATOM-NEXT: fidivs (%ecx) +; ATOM-NEXT: fidivl (%eax) +; ATOM-NEXT: #NO_APP +; ATOM-NEXT: retl # sched: [79:39.50] +; +; SLM-LABEL: test_fdivp_fidiv: +; SLM: # BB#0: +; SLM-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [3:1.00] +; SLM-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [3:1.00] +; SLM-NEXT: #APP +; SLM-NEXT: fdivp %st(1) # sched: [34:34.00] +; SLM-NEXT: fdivp %st(2) # sched: [34:34.00] +; SLM-NEXT: fidivs (%ecx) # sched: [37:34.00] +; SLM-NEXT: fidivl (%eax) # sched: [37:34.00] +; SLM-NEXT: #NO_APP +; SLM-NEXT: retl # sched: [4:1.00] +; +; SANDY-LABEL: test_fdivp_fidiv: +; SANDY: # BB#0: +; SANDY-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50] +; SANDY-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50] +; SANDY-NEXT: #APP +; SANDY-NEXT: fdivp %st(1) # sched: [24:1.00] +; SANDY-NEXT: fdivp %st(2) # sched: [24:1.00] +; SANDY-NEXT: fidivs (%ecx) # sched: [34:1.00] +; SANDY-NEXT: fidivl (%eax) # sched: [34:1.00] +; SANDY-NEXT: #NO_APP +; SANDY-NEXT: retl # sched: [5:1.00] +; +; HASWELL-LABEL: test_fdivp_fidiv: +; HASWELL: # BB#0: +; HASWELL-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [1:0.50] +; HASWELL-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [1:0.50] +; HASWELL-NEXT: #APP +; HASWELL-NEXT: fdivp %st(1) # sched: [24:1.00] +; HASWELL-NEXT: fdivp %st(2) # sched: [24:1.00] +; HASWELL-NEXT: fidivs (%ecx) # sched: [27:1.00] +; HASWELL-NEXT: fidivl (%eax) # sched: [27:1.00] +; HASWELL-NEXT: #NO_APP +; HASWELL-NEXT: retl # sched: [5:0.50] +; +; BROADWELL-LABEL: test_fdivp_fidiv: +; BROADWELL: # BB#0: +; BROADWELL-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50] +; BROADWELL-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50] +; BROADWELL-NEXT: #APP +; BROADWELL-NEXT: fdivp %st(1) # sched: [15:1.00] +; BROADWELL-NEXT: fdivp %st(2) # sched: [15:1.00] +; BROADWELL-NEXT: fidivs (%ecx) # sched: [24:1.00] +; BROADWELL-NEXT: fidivl (%eax) # sched: [24:1.00] +; BROADWELL-NEXT: #NO_APP +; BROADWELL-NEXT: retl # sched: [6:0.50] +; +; SKYLAKE-LABEL: test_fdivp_fidiv: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50] +; SKYLAKE-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50] +; SKYLAKE-NEXT: #APP +; SKYLAKE-NEXT: fdivp %st(1) # sched: [15:1.00] +; SKYLAKE-NEXT: fdivp %st(2) # sched: [15:1.00] +; SKYLAKE-NEXT: fidivs (%ecx) # sched: [25:1.00] +; SKYLAKE-NEXT: fidivl (%eax) # sched: [25:1.00] +; SKYLAKE-NEXT: #NO_APP +; SKYLAKE-NEXT: retl # sched: [6:0.50] +; +; SKX-LABEL: test_fdivp_fidiv: +; SKX: # BB#0: +; SKX-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50] +; SKX-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50] +; SKX-NEXT: #APP +; SKX-NEXT: fdivp %st(1) # sched: [15:1.00] +; SKX-NEXT: fdivp %st(2) # sched: [15:1.00] +; SKX-NEXT: fidivs (%ecx) # sched: [25:1.00] +; SKX-NEXT: fidivl (%eax) # sched: [25:1.00] +; SKX-NEXT: #NO_APP +; SKX-NEXT: retl # sched: [6:0.50] +; +; BTVER2-LABEL: test_fdivp_fidiv: +; BTVER2: # BB#0: +; BTVER2-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:1.00] +; BTVER2-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:1.00] +; BTVER2-NEXT: #APP +; BTVER2-NEXT: fdivp %st(1) # sched: [19:19.00] +; BTVER2-NEXT: fdivp %st(2) # sched: [19:19.00] +; BTVER2-NEXT: fidivs (%ecx) # sched: [24:19.00] +; BTVER2-NEXT: fidivl (%eax) # sched: [24:19.00] +; BTVER2-NEXT: #NO_APP +; BTVER2-NEXT: retl # sched: [4:1.00] +; +; ZNVER1-LABEL: test_fdivp_fidiv: +; ZNVER1: # BB#0: +; ZNVER1-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [8:0.50] +; ZNVER1-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [8:0.50] +; ZNVER1-NEXT: #APP +; ZNVER1-NEXT: fdivp %st(1) # sched: [15:1.00] +; ZNVER1-NEXT: fdivp %st(2) # sched: [15:1.00] +; ZNVER1-NEXT: fidivs (%ecx) # sched: [22:1.00] +; ZNVER1-NEXT: fidivl (%eax) # sched: [22:1.00] +; ZNVER1-NEXT: #NO_APP +; ZNVER1-NEXT: retl # sched: [1:0.50] + tail call void asm sideeffect "fdivp \0A\09 fdivp %st(2), %st(0) \0A\09 fidivs $0 \0A\09 fidivl $1", "*m,*m"(i16 *%a0, i32 *%a1) nounwind + ret void +} + +define void @test_fdivr(float *%a0, double *%a1) optsize { +; GENERIC-LABEL: test_fdivr: +; GENERIC: # BB#0: +; GENERIC-NEXT: movl {{[0-9]+}}(%esp), %eax +; GENERIC-NEXT: movl {{[0-9]+}}(%esp), %ecx +; GENERIC-NEXT: #APP +; GENERIC-NEXT: fdivr %st(0), %st(1) +; GENERIC-NEXT: fdivr %st(2) +; GENERIC-NEXT: fdivrs (%ecx) +; GENERIC-NEXT: fdivrl (%eax) +; GENERIC-NEXT: #NO_APP +; GENERIC-NEXT: retl +; +; ATOM-LABEL: test_fdivr: +; ATOM: # BB#0: +; ATOM-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [1:1.00] +; ATOM-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [1:1.00] +; ATOM-NEXT: #APP +; ATOM-NEXT: fdivr %st(0), %st(1) +; ATOM-NEXT: fdivr %st(2) +; ATOM-NEXT: fdivrs (%ecx) +; ATOM-NEXT: fdivrl (%eax) +; ATOM-NEXT: #NO_APP +; ATOM-NEXT: retl # sched: [79:39.50] +; +; SLM-LABEL: test_fdivr: +; SLM: # BB#0: +; SLM-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [3:1.00] +; SLM-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [3:1.00] +; SLM-NEXT: #APP +; SLM-NEXT: fdivr %st(0), %st(1) # sched: [34:34.00] +; SLM-NEXT: fdivr %st(2) # sched: [34:34.00] +; SLM-NEXT: fdivrs (%ecx) # sched: [37:34.00] +; SLM-NEXT: fdivrl (%eax) # sched: [37:34.00] +; SLM-NEXT: #NO_APP +; SLM-NEXT: retl # sched: [4:1.00] +; +; SANDY-LABEL: test_fdivr: +; SANDY: # BB#0: +; SANDY-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50] +; SANDY-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50] +; SANDY-NEXT: #APP +; SANDY-NEXT: fdivr %st(0), %st(1) # sched: [24:1.00] +; SANDY-NEXT: fdivr %st(2) # sched: [24:1.00] +; SANDY-NEXT: fdivrs (%ecx) # sched: [31:1.00] +; SANDY-NEXT: fdivrl (%eax) # sched: [31:1.00] +; SANDY-NEXT: #NO_APP +; SANDY-NEXT: retl # sched: [5:1.00] +; +; HASWELL-LABEL: test_fdivr: +; HASWELL: # BB#0: +; HASWELL-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [1:0.50] +; HASWELL-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [1:0.50] +; HASWELL-NEXT: #APP +; HASWELL-NEXT: fdivr %st(0), %st(1) # sched: [20:1.00] +; HASWELL-NEXT: fdivr %st(2) # sched: [24:1.00] +; HASWELL-NEXT: fdivrs (%ecx) # sched: [20:1.00] +; HASWELL-NEXT: fdivrl (%eax) # sched: [20:1.00] +; HASWELL-NEXT: #NO_APP +; HASWELL-NEXT: retl # sched: [5:0.50] +; +; BROADWELL-LABEL: test_fdivr: +; BROADWELL: # BB#0: +; BROADWELL-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50] +; BROADWELL-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50] +; BROADWELL-NEXT: #APP +; BROADWELL-NEXT: fdivr %st(0), %st(1) # sched: [20:1.00] +; BROADWELL-NEXT: fdivr %st(2) # sched: [15:1.00] +; BROADWELL-NEXT: fdivrs (%ecx) # sched: [26:1.00] +; BROADWELL-NEXT: fdivrl (%eax) # sched: [26:1.00] +; BROADWELL-NEXT: #NO_APP +; BROADWELL-NEXT: retl # sched: [6:0.50] +; +; SKYLAKE-LABEL: test_fdivr: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50] +; SKYLAKE-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50] +; SKYLAKE-NEXT: #APP +; SKYLAKE-NEXT: fdivr %st(0), %st(1) # sched: [20:1.00] +; SKYLAKE-NEXT: fdivr %st(2) # sched: [15:1.00] +; SKYLAKE-NEXT: fdivrs (%ecx) # sched: [27:1.00] +; SKYLAKE-NEXT: fdivrl (%eax) # sched: [27:1.00] +; SKYLAKE-NEXT: #NO_APP +; SKYLAKE-NEXT: retl # sched: [6:0.50] +; +; SKX-LABEL: test_fdivr: +; SKX: # BB#0: +; SKX-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50] +; SKX-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50] +; SKX-NEXT: #APP +; SKX-NEXT: fdivr %st(0), %st(1) # sched: [20:1.00] +; SKX-NEXT: fdivr %st(2) # sched: [15:1.00] +; SKX-NEXT: fdivrs (%ecx) # sched: [27:1.00] +; SKX-NEXT: fdivrl (%eax) # sched: [27:1.00] +; SKX-NEXT: #NO_APP +; SKX-NEXT: retl # sched: [6:0.50] +; +; BTVER2-LABEL: test_fdivr: +; BTVER2: # BB#0: +; BTVER2-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:1.00] +; BTVER2-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:1.00] +; BTVER2-NEXT: #APP +; BTVER2-NEXT: fdivr %st(0), %st(1) # sched: [19:19.00] +; BTVER2-NEXT: fdivr %st(2) # sched: [19:19.00] +; BTVER2-NEXT: fdivrs (%ecx) # sched: [24:19.00] +; BTVER2-NEXT: fdivrl (%eax) # sched: [24:19.00] +; BTVER2-NEXT: #NO_APP +; BTVER2-NEXT: retl # sched: [4:1.00] +; +; ZNVER1-LABEL: test_fdivr: +; ZNVER1: # BB#0: +; ZNVER1-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [8:0.50] +; ZNVER1-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [8:0.50] +; ZNVER1-NEXT: #APP +; ZNVER1-NEXT: fdivr %st(0), %st(1) # sched: [15:1.00] +; ZNVER1-NEXT: fdivr %st(2) # sched: [15:1.00] +; ZNVER1-NEXT: fdivrs (%ecx) # sched: [22:1.00] +; ZNVER1-NEXT: fdivrl (%eax) # sched: [22:1.00] +; ZNVER1-NEXT: #NO_APP +; ZNVER1-NEXT: retl # sched: [1:0.50] + tail call void asm sideeffect "fdivr %st(0), %st(1) \0A\09 fdivr %st(2), %st(0) \0A\09 fdivrs $0 \0A\09 fdivrl $1", "*m,*m"(float *%a0, double *%a1) nounwind + ret void +} + +define void @test_fdivrp_fidivr(i16 *%a0, i32 *%a1) optsize { +; GENERIC-LABEL: test_fdivrp_fidivr: +; GENERIC: # BB#0: +; GENERIC-NEXT: movl {{[0-9]+}}(%esp), %eax +; GENERIC-NEXT: movl {{[0-9]+}}(%esp), %ecx +; GENERIC-NEXT: #APP +; GENERIC-NEXT: fdivrp %st(1) +; GENERIC-NEXT: fdivrp %st(2) +; GENERIC-NEXT: fidivrs (%ecx) +; GENERIC-NEXT: fidivrl (%eax) +; GENERIC-NEXT: #NO_APP +; GENERIC-NEXT: retl +; +; ATOM-LABEL: test_fdivrp_fidivr: +; ATOM: # BB#0: +; ATOM-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [1:1.00] +; ATOM-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [1:1.00] +; ATOM-NEXT: #APP +; ATOM-NEXT: fdivrp %st(1) +; ATOM-NEXT: fdivrp %st(2) +; ATOM-NEXT: fidivrs (%ecx) +; ATOM-NEXT: fidivrl (%eax) +; ATOM-NEXT: #NO_APP +; ATOM-NEXT: retl # sched: [79:39.50] +; +; SLM-LABEL: test_fdivrp_fidivr: +; SLM: # BB#0: +; SLM-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [3:1.00] +; SLM-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [3:1.00] +; SLM-NEXT: #APP +; SLM-NEXT: fdivrp %st(1) # sched: [34:34.00] +; SLM-NEXT: fdivrp %st(2) # sched: [34:34.00] +; SLM-NEXT: fidivrs (%ecx) # sched: [37:34.00] +; SLM-NEXT: fidivrl (%eax) # sched: [37:34.00] +; SLM-NEXT: #NO_APP +; SLM-NEXT: retl # sched: [4:1.00] +; +; SANDY-LABEL: test_fdivrp_fidivr: +; SANDY: # BB#0: +; SANDY-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50] +; SANDY-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50] +; SANDY-NEXT: #APP +; SANDY-NEXT: fdivrp %st(1) # sched: [24:1.00] +; SANDY-NEXT: fdivrp %st(2) # sched: [24:1.00] +; SANDY-NEXT: fidivrs (%ecx) # sched: [34:1.00] +; SANDY-NEXT: fidivrl (%eax) # sched: [34:1.00] +; SANDY-NEXT: #NO_APP +; SANDY-NEXT: retl # sched: [5:1.00] +; +; HASWELL-LABEL: test_fdivrp_fidivr: +; HASWELL: # BB#0: +; HASWELL-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [1:0.50] +; HASWELL-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [1:0.50] +; HASWELL-NEXT: #APP +; HASWELL-NEXT: fdivrp %st(1) # sched: [20:1.00] +; HASWELL-NEXT: fdivrp %st(2) # sched: [20:1.00] +; HASWELL-NEXT: fidivrs (%ecx) # sched: [23:1.00] +; HASWELL-NEXT: fidivrl (%eax) # sched: [23:1.00] +; HASWELL-NEXT: #NO_APP +; HASWELL-NEXT: retl # sched: [5:0.50] +; +; BROADWELL-LABEL: test_fdivrp_fidivr: +; BROADWELL: # BB#0: +; BROADWELL-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50] +; BROADWELL-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50] +; BROADWELL-NEXT: #APP +; BROADWELL-NEXT: fdivrp %st(1) # sched: [20:1.00] +; BROADWELL-NEXT: fdivrp %st(2) # sched: [20:1.00] +; BROADWELL-NEXT: fidivrs (%ecx) # sched: [29:1.00] +; BROADWELL-NEXT: fidivrl (%eax) # sched: [29:1.00] +; BROADWELL-NEXT: #NO_APP +; BROADWELL-NEXT: retl # sched: [6:0.50] +; +; SKYLAKE-LABEL: test_fdivrp_fidivr: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50] +; SKYLAKE-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50] +; SKYLAKE-NEXT: #APP +; SKYLAKE-NEXT: fdivrp %st(1) # sched: [20:1.00] +; SKYLAKE-NEXT: fdivrp %st(2) # sched: [20:1.00] +; SKYLAKE-NEXT: fidivrs (%ecx) # sched: [30:1.00] +; SKYLAKE-NEXT: fidivrl (%eax) # sched: [30:1.00] +; SKYLAKE-NEXT: #NO_APP +; SKYLAKE-NEXT: retl # sched: [6:0.50] +; +; SKX-LABEL: test_fdivrp_fidivr: +; SKX: # BB#0: +; SKX-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50] +; SKX-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50] +; SKX-NEXT: #APP +; SKX-NEXT: fdivrp %st(1) # sched: [20:1.00] +; SKX-NEXT: fdivrp %st(2) # sched: [20:1.00] +; SKX-NEXT: fidivrs (%ecx) # sched: [30:1.00] +; SKX-NEXT: fidivrl (%eax) # sched: [30:1.00] +; SKX-NEXT: #NO_APP +; SKX-NEXT: retl # sched: [6:0.50] +; +; BTVER2-LABEL: test_fdivrp_fidivr: +; BTVER2: # BB#0: +; BTVER2-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:1.00] +; BTVER2-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:1.00] +; BTVER2-NEXT: #APP +; BTVER2-NEXT: fdivrp %st(1) # sched: [19:19.00] +; BTVER2-NEXT: fdivrp %st(2) # sched: [19:19.00] +; BTVER2-NEXT: fidivrs (%ecx) # sched: [24:19.00] +; BTVER2-NEXT: fidivrl (%eax) # sched: [24:19.00] +; BTVER2-NEXT: #NO_APP +; BTVER2-NEXT: retl # sched: [4:1.00] +; +; ZNVER1-LABEL: test_fdivrp_fidivr: +; ZNVER1: # BB#0: +; ZNVER1-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [8:0.50] +; ZNVER1-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [8:0.50] +; ZNVER1-NEXT: #APP +; ZNVER1-NEXT: fdivrp %st(1) # sched: [15:1.00] +; ZNVER1-NEXT: fdivrp %st(2) # sched: [15:1.00] +; ZNVER1-NEXT: fidivrs (%ecx) # sched: [22:1.00] +; ZNVER1-NEXT: fidivrl (%eax) # sched: [22:1.00] +; ZNVER1-NEXT: #NO_APP +; ZNVER1-NEXT: retl # sched: [1:0.50] + tail call void asm sideeffect "fdivrp \0A\09 fdivrp %st(2), %st(0) \0A\09 fidivrs $0 \0A\09 fidivrl $1", "*m,*m"(i16 *%a0, i32 *%a1) nounwind + ret void +} + +define void @test_ffree() optsize { +; GENERIC-LABEL: test_ffree: +; GENERIC: # BB#0: +; GENERIC-NEXT: #APP +; GENERIC-NEXT: ffree %st(0) +; GENERIC-NEXT: #NO_APP +; GENERIC-NEXT: retl +; +; ATOM-LABEL: test_ffree: +; ATOM: # BB#0: +; ATOM-NEXT: #APP +; ATOM-NEXT: ffree %st(0) # sched: [1:0.50] +; ATOM-NEXT: #NO_APP +; ATOM-NEXT: retl # sched: [79:39.50] +; +; SLM-LABEL: test_ffree: +; SLM: # BB#0: +; SLM-NEXT: #APP +; SLM-NEXT: ffree %st(0) # sched: [100:1.00] +; SLM-NEXT: #NO_APP +; SLM-NEXT: retl # sched: [4:1.00] +; +; SANDY-LABEL: test_ffree: +; SANDY: # BB#0: +; SANDY-NEXT: #APP +; SANDY-NEXT: ffree %st(0) # sched: [1:1.00] +; SANDY-NEXT: #NO_APP +; SANDY-NEXT: retl # sched: [5:1.00] +; +; HASWELL-LABEL: test_ffree: +; HASWELL: # BB#0: +; HASWELL-NEXT: #APP +; HASWELL-NEXT: ffree %st(0) # sched: [1:0.50] +; HASWELL-NEXT: #NO_APP +; HASWELL-NEXT: retl # sched: [5:0.50] +; +; BROADWELL-LABEL: test_ffree: +; BROADWELL: # BB#0: +; BROADWELL-NEXT: #APP +; BROADWELL-NEXT: ffree %st(0) # sched: [100:0.25] +; BROADWELL-NEXT: #NO_APP +; BROADWELL-NEXT: retl # sched: [6:0.50] +; +; SKYLAKE-LABEL: test_ffree: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: #APP +; SKYLAKE-NEXT: ffree %st(0) # sched: [100:0.25] +; SKYLAKE-NEXT: #NO_APP +; SKYLAKE-NEXT: retl # sched: [6:0.50] +; +; SKX-LABEL: test_ffree: +; SKX: # BB#0: +; SKX-NEXT: #APP +; SKX-NEXT: ffree %st(0) # sched: [100:0.25] +; SKX-NEXT: #NO_APP +; SKX-NEXT: retl # sched: [6:0.50] +; +; BTVER2-LABEL: test_ffree: +; BTVER2: # BB#0: +; BTVER2-NEXT: #APP +; BTVER2-NEXT: ffree %st(0) # sched: [100:0.17] +; BTVER2-NEXT: #NO_APP +; BTVER2-NEXT: retl # sched: [4:1.00] +; +; ZNVER1-LABEL: test_ffree: +; ZNVER1: # BB#0: +; ZNVER1-NEXT: #APP +; ZNVER1-NEXT: ffree %st(0) # sched: [11:1.00] +; ZNVER1-NEXT: #NO_APP +; ZNVER1-NEXT: retl # sched: [1:0.50] + tail call void asm sideeffect "ffree %st(0)", ""() nounwind + ret void +} + +define void @test_ficom(i16 *%a0, i32 *%a1) optsize { +; GENERIC-LABEL: test_ficom: +; GENERIC: # BB#0: +; GENERIC-NEXT: movl {{[0-9]+}}(%esp), %eax +; GENERIC-NEXT: movl {{[0-9]+}}(%esp), %ecx +; GENERIC-NEXT: #APP +; GENERIC-NEXT: ficoms (%ecx) +; GENERIC-NEXT: ficoml (%eax) +; GENERIC-NEXT: ficomps (%ecx) +; GENERIC-NEXT: ficompl (%eax) +; GENERIC-NEXT: #NO_APP +; GENERIC-NEXT: retl +; +; ATOM-LABEL: test_ficom: +; ATOM: # BB#0: +; ATOM-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [1:1.00] +; ATOM-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [1:1.00] +; ATOM-NEXT: #APP +; ATOM-NEXT: ficoms (%ecx) +; ATOM-NEXT: ficoml (%eax) +; ATOM-NEXT: ficomps (%ecx) +; ATOM-NEXT: ficompl (%eax) +; ATOM-NEXT: #NO_APP +; ATOM-NEXT: retl # sched: [79:39.50] +; +; SLM-LABEL: test_ficom: +; SLM: # BB#0: +; SLM-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [3:1.00] +; SLM-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [3:1.00] +; SLM-NEXT: #APP +; SLM-NEXT: ficoms (%ecx) +; SLM-NEXT: ficoml (%eax) +; SLM-NEXT: ficomps (%ecx) +; SLM-NEXT: ficompl (%eax) +; SLM-NEXT: #NO_APP +; SLM-NEXT: retl # sched: [4:1.00] +; +; SANDY-LABEL: test_ficom: +; SANDY: # BB#0: +; SANDY-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50] +; SANDY-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50] +; SANDY-NEXT: #APP +; SANDY-NEXT: ficoms (%ecx) # sched: [11:2.00] +; SANDY-NEXT: ficoml (%eax) # sched: [11:2.00] +; SANDY-NEXT: ficomps (%ecx) # sched: [11:2.00] +; SANDY-NEXT: ficompl (%eax) # sched: [11:2.00] +; SANDY-NEXT: #NO_APP +; SANDY-NEXT: retl # sched: [5:1.00] +; +; HASWELL-LABEL: test_ficom: +; HASWELL: # BB#0: +; HASWELL-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [1:0.50] +; HASWELL-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [1:0.50] +; HASWELL-NEXT: #APP +; HASWELL-NEXT: ficoms (%ecx) # sched: [4:2.00] +; HASWELL-NEXT: ficoml (%eax) # sched: [4:2.00] +; HASWELL-NEXT: ficomps (%ecx) # sched: [4:2.00] +; HASWELL-NEXT: ficompl (%eax) # sched: [4:2.00] +; HASWELL-NEXT: #NO_APP +; HASWELL-NEXT: retl # sched: [5:0.50] +; +; BROADWELL-LABEL: test_ficom: +; BROADWELL: # BB#0: +; BROADWELL-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50] +; BROADWELL-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50] +; BROADWELL-NEXT: #APP +; BROADWELL-NEXT: ficoms (%ecx) # sched: [10:2.00] +; BROADWELL-NEXT: ficoml (%eax) # sched: [10:2.00] +; BROADWELL-NEXT: ficomps (%ecx) # sched: [10:2.00] +; BROADWELL-NEXT: ficompl (%eax) # sched: [10:2.00] +; BROADWELL-NEXT: #NO_APP +; BROADWELL-NEXT: retl # sched: [6:0.50] +; +; SKYLAKE-LABEL: test_ficom: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50] +; SKYLAKE-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50] +; SKYLAKE-NEXT: #APP +; SKYLAKE-NEXT: ficoms (%ecx) # sched: [11:2.00] +; SKYLAKE-NEXT: ficoml (%eax) # sched: [11:2.00] +; SKYLAKE-NEXT: ficomps (%ecx) # sched: [11:2.00] +; SKYLAKE-NEXT: ficompl (%eax) # sched: [11:2.00] +; SKYLAKE-NEXT: #NO_APP +; SKYLAKE-NEXT: retl # sched: [6:0.50] +; +; SKX-LABEL: test_ficom: +; SKX: # BB#0: +; SKX-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50] +; SKX-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50] +; SKX-NEXT: #APP +; SKX-NEXT: ficoms (%ecx) # sched: [11:2.00] +; SKX-NEXT: ficoml (%eax) # sched: [11:2.00] +; SKX-NEXT: ficomps (%ecx) # sched: [11:2.00] +; SKX-NEXT: ficompl (%eax) # sched: [11:2.00] +; SKX-NEXT: #NO_APP +; SKX-NEXT: retl # sched: [6:0.50] +; +; BTVER2-LABEL: test_ficom: +; BTVER2: # BB#0: +; BTVER2-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:1.00] +; BTVER2-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:1.00] +; BTVER2-NEXT: #APP +; BTVER2-NEXT: ficoms (%ecx) +; BTVER2-NEXT: ficoml (%eax) +; BTVER2-NEXT: ficomps (%ecx) +; BTVER2-NEXT: ficompl (%eax) +; BTVER2-NEXT: #NO_APP +; BTVER2-NEXT: retl # sched: [4:1.00] +; +; ZNVER1-LABEL: test_ficom: +; ZNVER1: # BB#0: +; ZNVER1-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [8:0.50] +; ZNVER1-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [8:0.50] +; ZNVER1-NEXT: #APP +; ZNVER1-NEXT: ficoms (%ecx) # sched: [12:1.50] +; ZNVER1-NEXT: ficoml (%eax) # sched: [12:1.50] +; ZNVER1-NEXT: ficomps (%ecx) # sched: [12:1.50] +; ZNVER1-NEXT: ficompl (%eax) # sched: [12:1.50] +; ZNVER1-NEXT: #NO_APP +; ZNVER1-NEXT: retl # sched: [1:0.50] + tail call void asm sideeffect "ficoms $0 \0A\09 ficoml $1 \0A\09 ficomps $0 \0A\09 ficompl $1", "*m,*m"(i16 *%a0, i32 *%a1) nounwind + ret void +} + +define void @test_fild(i16 *%a0, i32 *%a1, i64 *%a2) optsize { +; GENERIC-LABEL: test_fild: +; GENERIC: # BB#0: +; GENERIC-NEXT: movl {{[0-9]+}}(%esp), %eax +; GENERIC-NEXT: movl {{[0-9]+}}(%esp), %ecx +; GENERIC-NEXT: movl {{[0-9]+}}(%esp), %edx +; GENERIC-NEXT: #APP +; GENERIC-NEXT: filds (%edx) +; GENERIC-NEXT: fildl (%ecx) +; GENERIC-NEXT: fildll (%eax) +; GENERIC-NEXT: #NO_APP +; GENERIC-NEXT: retl +; +; ATOM-LABEL: test_fild: +; ATOM: # BB#0: +; ATOM-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [1:1.00] +; ATOM-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [1:1.00] +; ATOM-NEXT: movl {{[0-9]+}}(%esp), %edx # sched: [1:1.00] +; ATOM-NEXT: #APP +; ATOM-NEXT: filds (%edx) # sched: [5:5.00] +; ATOM-NEXT: fildl (%ecx) # sched: [5:5.00] +; ATOM-NEXT: fildll (%eax) # sched: [5:5.00] +; ATOM-NEXT: #NO_APP +; ATOM-NEXT: retl # sched: [79:39.50] +; +; SLM-LABEL: test_fild: +; SLM: # BB#0: +; SLM-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [3:1.00] +; SLM-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [3:1.00] +; SLM-NEXT: movl {{[0-9]+}}(%esp), %edx # sched: [3:1.00] +; SLM-NEXT: #APP +; SLM-NEXT: filds (%edx) # sched: [3:1.00] +; SLM-NEXT: fildl (%ecx) # sched: [3:1.00] +; SLM-NEXT: fildll (%eax) # sched: [3:1.00] +; SLM-NEXT: #NO_APP +; SLM-NEXT: retl # sched: [4:1.00] +; +; SANDY-LABEL: test_fild: +; SANDY: # BB#0: +; SANDY-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50] +; SANDY-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50] +; SANDY-NEXT: movl {{[0-9]+}}(%esp), %edx # sched: [5:0.50] +; SANDY-NEXT: #APP +; SANDY-NEXT: filds (%edx) # sched: [10:1.00] +; SANDY-NEXT: fildl (%ecx) # sched: [10:1.00] +; SANDY-NEXT: fildll (%eax) # sched: [10:1.00] +; SANDY-NEXT: #NO_APP +; SANDY-NEXT: retl # sched: [5:1.00] +; +; HASWELL-LABEL: test_fild: +; HASWELL: # BB#0: +; HASWELL-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [1:0.50] +; HASWELL-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [1:0.50] +; HASWELL-NEXT: movl {{[0-9]+}}(%esp), %edx # sched: [1:0.50] +; HASWELL-NEXT: #APP +; HASWELL-NEXT: filds (%edx) # sched: [3:1.00] +; HASWELL-NEXT: fildl (%ecx) # sched: [3:1.00] +; HASWELL-NEXT: fildll (%eax) # sched: [3:1.00] +; HASWELL-NEXT: #NO_APP +; HASWELL-NEXT: retl # sched: [5:0.50] +; +; BROADWELL-LABEL: test_fild: +; BROADWELL: # BB#0: +; BROADWELL-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50] +; BROADWELL-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50] +; BROADWELL-NEXT: movl {{[0-9]+}}(%esp), %edx # sched: [5:0.50] +; BROADWELL-NEXT: #APP +; BROADWELL-NEXT: filds (%edx) # sched: [9:1.00] +; BROADWELL-NEXT: fildl (%ecx) # sched: [9:1.00] +; BROADWELL-NEXT: fildll (%eax) # sched: [9:1.00] +; BROADWELL-NEXT: #NO_APP +; BROADWELL-NEXT: retl # sched: [6:0.50] +; +; SKYLAKE-LABEL: test_fild: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50] +; SKYLAKE-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50] +; SKYLAKE-NEXT: movl {{[0-9]+}}(%esp), %edx # sched: [5:0.50] +; SKYLAKE-NEXT: #APP +; SKYLAKE-NEXT: filds (%edx) # sched: [10:1.00] +; SKYLAKE-NEXT: fildl (%ecx) # sched: [10:1.00] +; SKYLAKE-NEXT: fildll (%eax) # sched: [10:1.00] +; SKYLAKE-NEXT: #NO_APP +; SKYLAKE-NEXT: retl # sched: [6:0.50] +; +; SKX-LABEL: test_fild: +; SKX: # BB#0: +; SKX-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50] +; SKX-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50] +; SKX-NEXT: movl {{[0-9]+}}(%esp), %edx # sched: [5:0.50] +; SKX-NEXT: #APP +; SKX-NEXT: filds (%edx) # sched: [10:1.00] +; SKX-NEXT: fildl (%ecx) # sched: [10:1.00] +; SKX-NEXT: fildll (%eax) # sched: [10:1.00] +; SKX-NEXT: #NO_APP +; SKX-NEXT: retl # sched: [6:0.50] +; +; BTVER2-LABEL: test_fild: +; BTVER2: # BB#0: +; BTVER2-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:1.00] +; BTVER2-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:1.00] +; BTVER2-NEXT: movl {{[0-9]+}}(%esp), %edx # sched: [5:1.00] +; BTVER2-NEXT: #APP +; BTVER2-NEXT: filds (%edx) # sched: [5:1.00] +; BTVER2-NEXT: fildl (%ecx) # sched: [5:1.00] +; BTVER2-NEXT: fildll (%eax) # sched: [5:1.00] +; BTVER2-NEXT: #NO_APP +; BTVER2-NEXT: retl # sched: [4:1.00] +; +; ZNVER1-LABEL: test_fild: +; ZNVER1: # BB#0: +; ZNVER1-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [8:0.50] +; ZNVER1-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [8:0.50] +; ZNVER1-NEXT: movl {{[0-9]+}}(%esp), %edx # sched: [8:0.50] +; ZNVER1-NEXT: #APP +; ZNVER1-NEXT: filds (%edx) # sched: [11:1.00] +; ZNVER1-NEXT: fildl (%ecx) # sched: [11:1.00] +; ZNVER1-NEXT: fildll (%eax) # sched: [11:1.00] +; ZNVER1-NEXT: #NO_APP +; ZNVER1-NEXT: retl # sched: [1:0.50] + tail call void asm sideeffect "filds $0 \0A\09 fildl $1 \0A\09 fildll $2", "*m,*m,*m"(i16 *%a0, i32 *%a1, i64 *%a2) nounwind + ret void +} + +define void @test_fincstp() optsize { +; GENERIC-LABEL: test_fincstp: +; GENERIC: # BB#0: +; GENERIC-NEXT: #APP +; GENERIC-NEXT: fincstp +; GENERIC-NEXT: #NO_APP +; GENERIC-NEXT: retl +; +; ATOM-LABEL: test_fincstp: +; ATOM: # BB#0: +; ATOM-NEXT: #APP +; ATOM-NEXT: fincstp # sched: [1:0.50] +; ATOM-NEXT: #NO_APP +; ATOM-NEXT: retl # sched: [79:39.50] +; +; SLM-LABEL: test_fincstp: +; SLM: # BB#0: +; SLM-NEXT: #APP +; SLM-NEXT: fincstp # sched: [100:1.00] +; SLM-NEXT: #NO_APP +; SLM-NEXT: retl # sched: [4:1.00] +; +; SANDY-LABEL: test_fincstp: +; SANDY: # BB#0: +; SANDY-NEXT: #APP +; SANDY-NEXT: fincstp # sched: [1:1.00] +; SANDY-NEXT: #NO_APP +; SANDY-NEXT: retl # sched: [5:1.00] +; +; HASWELL-LABEL: test_fincstp: +; HASWELL: # BB#0: +; HASWELL-NEXT: #APP +; HASWELL-NEXT: fincstp # sched: [1:0.50] +; HASWELL-NEXT: #NO_APP +; HASWELL-NEXT: retl # sched: [5:0.50] +; +; BROADWELL-LABEL: test_fincstp: +; BROADWELL: # BB#0: +; BROADWELL-NEXT: #APP +; BROADWELL-NEXT: fincstp # sched: [1:0.50] +; BROADWELL-NEXT: #NO_APP +; BROADWELL-NEXT: retl # sched: [6:0.50] +; +; SKYLAKE-LABEL: test_fincstp: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: #APP +; SKYLAKE-NEXT: fincstp # sched: [1:0.50] +; SKYLAKE-NEXT: #NO_APP +; SKYLAKE-NEXT: retl # sched: [6:0.50] +; +; SKX-LABEL: test_fincstp: +; SKX: # BB#0: +; SKX-NEXT: #APP +; SKX-NEXT: fincstp # sched: [1:0.50] +; SKX-NEXT: #NO_APP +; SKX-NEXT: retl # sched: [6:0.50] +; +; BTVER2-LABEL: test_fincstp: +; BTVER2: # BB#0: +; BTVER2-NEXT: #APP +; BTVER2-NEXT: fincstp # sched: [100:0.17] +; BTVER2-NEXT: #NO_APP +; BTVER2-NEXT: retl # sched: [4:1.00] +; +; ZNVER1-LABEL: test_fincstp: +; ZNVER1: # BB#0: +; ZNVER1-NEXT: #APP +; ZNVER1-NEXT: fincstp # sched: [11:1.00] +; ZNVER1-NEXT: #NO_APP +; ZNVER1-NEXT: retl # sched: [1:0.50] + tail call void asm sideeffect "fincstp", ""() nounwind + ret void +} + +define void @test_finit_fninit() optsize { +; GENERIC-LABEL: test_finit_fninit: +; GENERIC: # BB#0: +; GENERIC-NEXT: #APP +; GENERIC-NEXT: wait +; GENERIC-NEXT: fninit +; GENERIC-NEXT: fninit +; GENERIC-NEXT: #NO_APP +; GENERIC-NEXT: retl +; +; ATOM-LABEL: test_finit_fninit: +; ATOM: # BB#0: +; ATOM-NEXT: #APP +; ATOM-NEXT: wait # sched: [1:0.50] +; ATOM-NEXT: fninit # sched: [63:31.50] +; ATOM-NEXT: fninit # sched: [63:31.50] +; ATOM-NEXT: #NO_APP +; ATOM-NEXT: retl # sched: [79:39.50] +; +; SLM-LABEL: test_finit_fninit: +; SLM: # BB#0: +; SLM-NEXT: #APP +; SLM-NEXT: wait # sched: [100:1.00] +; SLM-NEXT: fninit # sched: [100:1.00] +; SLM-NEXT: fninit # sched: [100:1.00] +; SLM-NEXT: #NO_APP +; SLM-NEXT: retl # sched: [4:1.00] +; +; SANDY-LABEL: test_finit_fninit: +; SANDY: # BB#0: +; SANDY-NEXT: #APP +; SANDY-NEXT: wait # sched: [100:0.33] +; SANDY-NEXT: fninit # sched: [5:1.33] +; SANDY-NEXT: fninit # sched: [5:1.33] +; SANDY-NEXT: #NO_APP +; SANDY-NEXT: retl # sched: [5:1.00] +; +; HASWELL-LABEL: test_finit_fninit: +; HASWELL: # BB#0: +; HASWELL-NEXT: #APP +; HASWELL-NEXT: wait # sched: [1:0.50] +; HASWELL-NEXT: fninit # sched: [1:?] +; HASWELL-NEXT: fninit # sched: [1:?] +; HASWELL-NEXT: #NO_APP +; HASWELL-NEXT: retl # sched: [5:0.50] +; +; BROADWELL-LABEL: test_finit_fninit: +; BROADWELL: # BB#0: +; BROADWELL-NEXT: #APP +; BROADWELL-NEXT: wait # sched: [2:0.50] +; BROADWELL-NEXT: fninit # sched: [75:6.00] +; BROADWELL-NEXT: fninit # sched: [75:6.00] +; BROADWELL-NEXT: #NO_APP +; BROADWELL-NEXT: retl # sched: [6:0.50] +; +; SKYLAKE-LABEL: test_finit_fninit: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: #APP +; SKYLAKE-NEXT: wait # sched: [2:0.50] +; SKYLAKE-NEXT: fninit # sched: [75:6.00] +; SKYLAKE-NEXT: fninit # sched: [75:6.00] +; SKYLAKE-NEXT: #NO_APP +; SKYLAKE-NEXT: retl # sched: [6:0.50] +; +; SKX-LABEL: test_finit_fninit: +; SKX: # BB#0: +; SKX-NEXT: #APP +; SKX-NEXT: wait # sched: [2:0.50] +; SKX-NEXT: fninit # sched: [75:6.00] +; SKX-NEXT: fninit # sched: [75:6.00] +; SKX-NEXT: #NO_APP +; SKX-NEXT: retl # sched: [6:0.50] +; +; BTVER2-LABEL: test_finit_fninit: +; BTVER2: # BB#0: +; BTVER2-NEXT: #APP +; BTVER2-NEXT: wait # sched: [100:0.17] +; BTVER2-NEXT: fninit # sched: [100:0.17] +; BTVER2-NEXT: fninit # sched: [100:0.17] +; BTVER2-NEXT: #NO_APP +; BTVER2-NEXT: retl # sched: [4:1.00] +; +; ZNVER1-LABEL: test_finit_fninit: +; ZNVER1: # BB#0: +; ZNVER1-NEXT: #APP +; ZNVER1-NEXT: wait # sched: [1:1.00] +; ZNVER1-NEXT: fninit # sched: [100:?] +; ZNVER1-NEXT: fninit # sched: [100:?] +; ZNVER1-NEXT: #NO_APP +; ZNVER1-NEXT: retl # sched: [1:0.50] + tail call void asm sideeffect "finit \0A\09 fninit", ""() nounwind + ret void +} + +; TODO - test_fist +; TODO - test_fistp +; TODO - test_fisttp + +; TODO - test_fld + +; TODO - test_fldcw +; TODO - test_fldenv + +define void @test_fld1_fldl2e_fldl2t_fldlg2_fldln2_fldpi_fldz() optsize { +; GENERIC-LABEL: test_fld1_fldl2e_fldl2t_fldlg2_fldln2_fldpi_fldz: +; GENERIC: # BB#0: +; GENERIC-NEXT: #APP +; GENERIC-NEXT: fld1 +; GENERIC-NEXT: fldl2e +; GENERIC-NEXT: fldl2t +; GENERIC-NEXT: fldln2 +; GENERIC-NEXT: fldpi +; GENERIC-NEXT: fldz +; GENERIC-NEXT: #NO_APP +; GENERIC-NEXT: retl +; +; ATOM-LABEL: test_fld1_fldl2e_fldl2t_fldlg2_fldln2_fldpi_fldz: +; ATOM: # BB#0: +; ATOM-NEXT: #APP +; ATOM-NEXT: fld1 # sched: [6:3.00] +; ATOM-NEXT: fldl2e # sched: [10:5.00] +; ATOM-NEXT: fldl2t # sched: [10:5.00] +; ATOM-NEXT: fldln2 # sched: [10:5.00] +; ATOM-NEXT: fldpi # sched: [10:5.00] +; ATOM-NEXT: fldz # sched: [1:0.50] +; ATOM-NEXT: #NO_APP +; ATOM-NEXT: retl # sched: [79:39.50] +; +; SLM-LABEL: test_fld1_fldl2e_fldl2t_fldlg2_fldln2_fldpi_fldz: +; SLM: # BB#0: +; SLM-NEXT: #APP +; SLM-NEXT: fld1 # sched: [1:?] +; SLM-NEXT: fldl2e # sched: [100:1.00] +; SLM-NEXT: fldl2t # sched: [100:1.00] +; SLM-NEXT: fldln2 # sched: [100:1.00] +; SLM-NEXT: fldpi # sched: [100:1.00] +; SLM-NEXT: fldz # sched: [1:?] +; SLM-NEXT: #NO_APP +; SLM-NEXT: retl # sched: [4:1.00] +; +; SANDY-LABEL: test_fld1_fldl2e_fldl2t_fldlg2_fldln2_fldpi_fldz: +; SANDY: # BB#0: +; SANDY-NEXT: #APP +; SANDY-NEXT: fld1 # sched: [1:?] +; SANDY-NEXT: fldl2e # sched: [100:0.33] +; SANDY-NEXT: fldl2t # sched: [100:0.33] +; SANDY-NEXT: fldln2 # sched: [100:0.33] +; SANDY-NEXT: fldpi # sched: [100:0.33] +; SANDY-NEXT: fldz # sched: [1:?] +; SANDY-NEXT: #NO_APP +; SANDY-NEXT: retl # sched: [5:1.00] +; +; HASWELL-LABEL: test_fld1_fldl2e_fldl2t_fldlg2_fldln2_fldpi_fldz: +; HASWELL: # BB#0: +; HASWELL-NEXT: #APP +; HASWELL-NEXT: fld1 # sched: [1:?] +; HASWELL-NEXT: fldl2e # sched: [100:0.25] +; HASWELL-NEXT: fldl2t # sched: [100:0.25] +; HASWELL-NEXT: fldln2 # sched: [100:0.25] +; HASWELL-NEXT: fldpi # sched: [1:0.50] +; HASWELL-NEXT: fldz # sched: [1:0.50] +; HASWELL-NEXT: #NO_APP +; HASWELL-NEXT: retl # sched: [5:0.50] +; +; BROADWELL-LABEL: test_fld1_fldl2e_fldl2t_fldlg2_fldln2_fldpi_fldz: +; BROADWELL: # BB#0: +; BROADWELL-NEXT: #APP +; BROADWELL-NEXT: fld1 # sched: [1:?] +; BROADWELL-NEXT: fldl2e # sched: [100:0.25] +; BROADWELL-NEXT: fldl2t # sched: [100:0.25] +; BROADWELL-NEXT: fldln2 # sched: [100:0.25] +; BROADWELL-NEXT: fldpi # sched: [100:0.25] +; BROADWELL-NEXT: fldz # sched: [1:?] +; BROADWELL-NEXT: #NO_APP +; BROADWELL-NEXT: retl # sched: [6:0.50] +; +; SKYLAKE-LABEL: test_fld1_fldl2e_fldl2t_fldlg2_fldln2_fldpi_fldz: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: #APP +; SKYLAKE-NEXT: fld1 # sched: [1:?] +; SKYLAKE-NEXT: fldl2e # sched: [100:0.25] +; SKYLAKE-NEXT: fldl2t # sched: [100:0.25] +; SKYLAKE-NEXT: fldln2 # sched: [100:0.25] +; SKYLAKE-NEXT: fldpi # sched: [100:0.25] +; SKYLAKE-NEXT: fldz # sched: [1:?] +; SKYLAKE-NEXT: #NO_APP +; SKYLAKE-NEXT: retl # sched: [6:0.50] +; +; SKX-LABEL: test_fld1_fldl2e_fldl2t_fldlg2_fldln2_fldpi_fldz: +; SKX: # BB#0: +; SKX-NEXT: #APP +; SKX-NEXT: fld1 # sched: [1:?] +; SKX-NEXT: fldl2e # sched: [100:0.25] +; SKX-NEXT: fldl2t # sched: [100:0.25] +; SKX-NEXT: fldln2 # sched: [100:0.25] +; SKX-NEXT: fldpi # sched: [100:0.25] +; SKX-NEXT: fldz # sched: [1:?] +; SKX-NEXT: #NO_APP +; SKX-NEXT: retl # sched: [6:0.50] +; +; BTVER2-LABEL: test_fld1_fldl2e_fldl2t_fldlg2_fldln2_fldpi_fldz: +; BTVER2: # BB#0: +; BTVER2-NEXT: #APP +; BTVER2-NEXT: fld1 # sched: [1:?] +; BTVER2-NEXT: fldl2e # sched: [100:0.17] +; BTVER2-NEXT: fldl2t # sched: [100:0.17] +; BTVER2-NEXT: fldln2 # sched: [100:0.17] +; BTVER2-NEXT: fldpi # sched: [100:0.17] +; BTVER2-NEXT: fldz # sched: [1:?] +; BTVER2-NEXT: #NO_APP +; BTVER2-NEXT: retl # sched: [4:1.00] +; +; ZNVER1-LABEL: test_fld1_fldl2e_fldl2t_fldlg2_fldln2_fldpi_fldz: +; ZNVER1: # BB#0: +; ZNVER1-NEXT: #APP +; ZNVER1-NEXT: fld1 # sched: [11:1.00] +; ZNVER1-NEXT: fldl2e # sched: [100:?] +; ZNVER1-NEXT: fldl2t # sched: [100:?] +; ZNVER1-NEXT: fldln2 # sched: [100:?] +; ZNVER1-NEXT: fldpi # sched: [11:1.00] +; ZNVER1-NEXT: fldz # sched: [8:0.50] +; ZNVER1-NEXT: #NO_APP +; ZNVER1-NEXT: retl # sched: [1:0.50] + tail call void asm sideeffect "fld1 \0A\09 fldl2e \0A\09 fldl2t \0A\09 fldln2 \0A\09 fldpi \0A\09 fldz", ""() nounwind + ret void +} + +define void @test_fmul(float *%a0, double *%a1) optsize { +; GENERIC-LABEL: test_fmul: +; GENERIC: # BB#0: +; GENERIC-NEXT: movl {{[0-9]+}}(%esp), %eax +; GENERIC-NEXT: movl {{[0-9]+}}(%esp), %ecx +; GENERIC-NEXT: #APP +; GENERIC-NEXT: fmul %st(0), %st(1) +; GENERIC-NEXT: fmul %st(2) +; GENERIC-NEXT: fmuls (%ecx) +; GENERIC-NEXT: fmull (%eax) +; GENERIC-NEXT: #NO_APP +; GENERIC-NEXT: retl +; +; ATOM-LABEL: test_fmul: +; ATOM: # BB#0: +; ATOM-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [1:1.00] +; ATOM-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [1:1.00] +; ATOM-NEXT: #APP +; ATOM-NEXT: fmul %st(0), %st(1) +; ATOM-NEXT: fmul %st(2) +; ATOM-NEXT: fmuls (%ecx) +; ATOM-NEXT: fmull (%eax) +; ATOM-NEXT: #NO_APP +; ATOM-NEXT: retl # sched: [79:39.50] +; +; SLM-LABEL: test_fmul: +; SLM: # BB#0: +; SLM-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [3:1.00] +; SLM-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [3:1.00] +; SLM-NEXT: #APP +; SLM-NEXT: fmul %st(0), %st(1) # sched: [5:2.00] +; SLM-NEXT: fmul %st(2) # sched: [5:2.00] +; SLM-NEXT: fmuls (%ecx) # sched: [8:2.00] +; SLM-NEXT: fmull (%eax) # sched: [8:2.00] +; SLM-NEXT: #NO_APP +; SLM-NEXT: retl # sched: [4:1.00] +; +; SANDY-LABEL: test_fmul: +; SANDY: # BB#0: +; SANDY-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50] +; SANDY-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50] +; SANDY-NEXT: #APP +; SANDY-NEXT: fmul %st(0), %st(1) # sched: [5:1.00] +; SANDY-NEXT: fmul %st(2) # sched: [5:1.00] +; SANDY-NEXT: fmuls (%ecx) # sched: [12:1.00] +; SANDY-NEXT: fmull (%eax) # sched: [12:1.00] +; SANDY-NEXT: #NO_APP +; SANDY-NEXT: retl # sched: [5:1.00] +; +; HASWELL-LABEL: test_fmul: +; HASWELL: # BB#0: +; HASWELL-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [1:0.50] +; HASWELL-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [1:0.50] +; HASWELL-NEXT: #APP +; HASWELL-NEXT: fmul %st(0), %st(1) # sched: [5:1.00] +; HASWELL-NEXT: fmul %st(2) # sched: [5:1.00] +; HASWELL-NEXT: fmuls (%ecx) # sched: [5:1.00] +; HASWELL-NEXT: fmull (%eax) # sched: [5:1.00] +; HASWELL-NEXT: #NO_APP +; HASWELL-NEXT: retl # sched: [5:0.50] +; +; BROADWELL-LABEL: test_fmul: +; BROADWELL: # BB#0: +; BROADWELL-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50] +; BROADWELL-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50] +; BROADWELL-NEXT: #APP +; BROADWELL-NEXT: fmul %st(0), %st(1) # sched: [5:1.00] +; BROADWELL-NEXT: fmul %st(2) # sched: [5:1.00] +; BROADWELL-NEXT: fmuls (%ecx) # sched: [11:1.00] +; BROADWELL-NEXT: fmull (%eax) # sched: [11:1.00] +; BROADWELL-NEXT: #NO_APP +; BROADWELL-NEXT: retl # sched: [6:0.50] +; +; SKYLAKE-LABEL: test_fmul: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50] +; SKYLAKE-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50] +; SKYLAKE-NEXT: #APP +; SKYLAKE-NEXT: fmul %st(0), %st(1) # sched: [4:1.00] +; SKYLAKE-NEXT: fmul %st(2) # sched: [4:1.00] +; SKYLAKE-NEXT: fmuls (%ecx) # sched: [11:1.00] +; SKYLAKE-NEXT: fmull (%eax) # sched: [11:1.00] +; SKYLAKE-NEXT: #NO_APP +; SKYLAKE-NEXT: retl # sched: [6:0.50] +; +; SKX-LABEL: test_fmul: +; SKX: # BB#0: +; SKX-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50] +; SKX-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50] +; SKX-NEXT: #APP +; SKX-NEXT: fmul %st(0), %st(1) # sched: [4:1.00] +; SKX-NEXT: fmul %st(2) # sched: [4:1.00] +; SKX-NEXT: fmuls (%ecx) # sched: [11:1.00] +; SKX-NEXT: fmull (%eax) # sched: [11:1.00] +; SKX-NEXT: #NO_APP +; SKX-NEXT: retl # sched: [6:0.50] +; +; BTVER2-LABEL: test_fmul: +; BTVER2: # BB#0: +; BTVER2-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:1.00] +; BTVER2-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:1.00] +; BTVER2-NEXT: #APP +; BTVER2-NEXT: fmul %st(0), %st(1) # sched: [2:1.00] +; BTVER2-NEXT: fmul %st(2) # sched: [2:1.00] +; BTVER2-NEXT: fmuls (%ecx) # sched: [7:1.00] +; BTVER2-NEXT: fmull (%eax) # sched: [7:1.00] +; BTVER2-NEXT: #NO_APP +; BTVER2-NEXT: retl # sched: [4:1.00] +; +; ZNVER1-LABEL: test_fmul: +; ZNVER1: # BB#0: +; ZNVER1-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [8:0.50] +; ZNVER1-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [8:0.50] +; ZNVER1-NEXT: #APP +; ZNVER1-NEXT: fmul %st(0), %st(1) # sched: [5:1.00] +; ZNVER1-NEXT: fmul %st(2) # sched: [5:1.00] +; ZNVER1-NEXT: fmuls (%ecx) # sched: [12:1.00] +; ZNVER1-NEXT: fmull (%eax) # sched: [12:1.00] +; ZNVER1-NEXT: #NO_APP +; ZNVER1-NEXT: retl # sched: [1:0.50] + tail call void asm sideeffect "fmul %st(0), %st(1) \0A\09 fmul %st(2), %st(0) \0A\09 fmuls $0 \0A\09 fmull $1", "*m,*m"(float *%a0, double *%a1) nounwind + ret void +} + +define void @test_fmulp_fimul(i16 *%a0, i32 *%a1) optsize { +; GENERIC-LABEL: test_fmulp_fimul: +; GENERIC: # BB#0: +; GENERIC-NEXT: movl {{[0-9]+}}(%esp), %eax +; GENERIC-NEXT: movl {{[0-9]+}}(%esp), %ecx +; GENERIC-NEXT: #APP +; GENERIC-NEXT: fmulp %st(1) +; GENERIC-NEXT: fmulp %st(2) +; GENERIC-NEXT: fimuls (%ecx) +; GENERIC-NEXT: fimull (%eax) +; GENERIC-NEXT: #NO_APP +; GENERIC-NEXT: retl +; +; ATOM-LABEL: test_fmulp_fimul: +; ATOM: # BB#0: +; ATOM-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [1:1.00] +; ATOM-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [1:1.00] +; ATOM-NEXT: #APP +; ATOM-NEXT: fmulp %st(1) +; ATOM-NEXT: fmulp %st(2) +; ATOM-NEXT: fimuls (%ecx) +; ATOM-NEXT: fimull (%eax) +; ATOM-NEXT: #NO_APP +; ATOM-NEXT: retl # sched: [79:39.50] +; +; SLM-LABEL: test_fmulp_fimul: +; SLM: # BB#0: +; SLM-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [3:1.00] +; SLM-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [3:1.00] +; SLM-NEXT: #APP +; SLM-NEXT: fmulp %st(1) # sched: [5:2.00] +; SLM-NEXT: fmulp %st(2) # sched: [5:2.00] +; SLM-NEXT: fimuls (%ecx) # sched: [8:2.00] +; SLM-NEXT: fimull (%eax) # sched: [8:2.00] +; SLM-NEXT: #NO_APP +; SLM-NEXT: retl # sched: [4:1.00] +; +; SANDY-LABEL: test_fmulp_fimul: +; SANDY: # BB#0: +; SANDY-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50] +; SANDY-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50] +; SANDY-NEXT: #APP +; SANDY-NEXT: fmulp %st(1) # sched: [5:1.00] +; SANDY-NEXT: fmulp %st(2) # sched: [5:1.00] +; SANDY-NEXT: fimuls (%ecx) # sched: [15:1.00] +; SANDY-NEXT: fimull (%eax) # sched: [15:1.00] +; SANDY-NEXT: #NO_APP +; SANDY-NEXT: retl # sched: [5:1.00] +; +; HASWELL-LABEL: test_fmulp_fimul: +; HASWELL: # BB#0: +; HASWELL-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [1:0.50] +; HASWELL-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [1:0.50] +; HASWELL-NEXT: #APP +; HASWELL-NEXT: fmulp %st(1) # sched: [5:1.00] +; HASWELL-NEXT: fmulp %st(2) # sched: [5:1.00] +; HASWELL-NEXT: fimuls (%ecx) # sched: [8:1.00] +; HASWELL-NEXT: fimull (%eax) # sched: [8:1.00] +; HASWELL-NEXT: #NO_APP +; HASWELL-NEXT: retl # sched: [5:0.50] +; +; BROADWELL-LABEL: test_fmulp_fimul: +; BROADWELL: # BB#0: +; BROADWELL-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50] +; BROADWELL-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50] +; BROADWELL-NEXT: #APP +; BROADWELL-NEXT: fmulp %st(1) # sched: [5:1.00] +; BROADWELL-NEXT: fmulp %st(2) # sched: [5:1.00] +; BROADWELL-NEXT: fimuls (%ecx) # sched: [14:1.00] +; BROADWELL-NEXT: fimull (%eax) # sched: [14:1.00] +; BROADWELL-NEXT: #NO_APP +; BROADWELL-NEXT: retl # sched: [6:0.50] +; +; SKYLAKE-LABEL: test_fmulp_fimul: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50] +; SKYLAKE-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50] +; SKYLAKE-NEXT: #APP +; SKYLAKE-NEXT: fmulp %st(1) # sched: [4:1.00] +; SKYLAKE-NEXT: fmulp %st(2) # sched: [4:1.00] +; SKYLAKE-NEXT: fimuls (%ecx) # sched: [14:1.00] +; SKYLAKE-NEXT: fimull (%eax) # sched: [14:1.00] +; SKYLAKE-NEXT: #NO_APP +; SKYLAKE-NEXT: retl # sched: [6:0.50] +; +; SKX-LABEL: test_fmulp_fimul: +; SKX: # BB#0: +; SKX-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50] +; SKX-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50] +; SKX-NEXT: #APP +; SKX-NEXT: fmulp %st(1) # sched: [4:1.00] +; SKX-NEXT: fmulp %st(2) # sched: [4:1.00] +; SKX-NEXT: fimuls (%ecx) # sched: [14:1.00] +; SKX-NEXT: fimull (%eax) # sched: [14:1.00] +; SKX-NEXT: #NO_APP +; SKX-NEXT: retl # sched: [6:0.50] +; +; BTVER2-LABEL: test_fmulp_fimul: +; BTVER2: # BB#0: +; BTVER2-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:1.00] +; BTVER2-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:1.00] +; BTVER2-NEXT: #APP +; BTVER2-NEXT: fmulp %st(1) # sched: [2:1.00] +; BTVER2-NEXT: fmulp %st(2) # sched: [2:1.00] +; BTVER2-NEXT: fimuls (%ecx) # sched: [7:1.00] +; BTVER2-NEXT: fimull (%eax) # sched: [7:1.00] +; BTVER2-NEXT: #NO_APP +; BTVER2-NEXT: retl # sched: [4:1.00] +; +; ZNVER1-LABEL: test_fmulp_fimul: +; ZNVER1: # BB#0: +; ZNVER1-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [8:0.50] +; ZNVER1-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [8:0.50] +; ZNVER1-NEXT: #APP +; ZNVER1-NEXT: fmulp %st(1) # sched: [5:1.00] +; ZNVER1-NEXT: fmulp %st(2) # sched: [5:1.00] +; ZNVER1-NEXT: fimuls (%ecx) # sched: [12:1.00] +; ZNVER1-NEXT: fimull (%eax) # sched: [12:1.00] +; ZNVER1-NEXT: #NO_APP +; ZNVER1-NEXT: retl # sched: [1:0.50] + tail call void asm sideeffect "fmulp \0A\09 fmulp %st(2), %st(0) \0A\09 fimuls $0 \0A\09 fimull $1", "*m,*m"(i16 *%a0, i32 *%a1) nounwind + ret void +} + +define void @test_fnop() optsize { +; GENERIC-LABEL: test_fnop: +; GENERIC: # BB#0: +; GENERIC-NEXT: #APP +; GENERIC-NEXT: fnop +; GENERIC-NEXT: #NO_APP +; GENERIC-NEXT: retl +; +; ATOM-LABEL: test_fnop: +; ATOM: # BB#0: +; ATOM-NEXT: #APP +; ATOM-NEXT: fnop # sched: [1:0.50] +; ATOM-NEXT: #NO_APP +; ATOM-NEXT: retl # sched: [79:39.50] +; +; SLM-LABEL: test_fnop: +; SLM: # BB#0: +; SLM-NEXT: #APP +; SLM-NEXT: fnop # sched: [100:1.00] +; SLM-NEXT: #NO_APP +; SLM-NEXT: retl # sched: [4:1.00] +; +; SANDY-LABEL: test_fnop: +; SANDY: # BB#0: +; SANDY-NEXT: #APP +; SANDY-NEXT: fnop # sched: [1:1.00] +; SANDY-NEXT: #NO_APP +; SANDY-NEXT: retl # sched: [5:1.00] +; +; HASWELL-LABEL: test_fnop: +; HASWELL: # BB#0: +; HASWELL-NEXT: #APP +; HASWELL-NEXT: fnop # sched: [1:0.50] +; HASWELL-NEXT: #NO_APP +; HASWELL-NEXT: retl # sched: [5:0.50] +; +; BROADWELL-LABEL: test_fnop: +; BROADWELL: # BB#0: +; BROADWELL-NEXT: #APP +; BROADWELL-NEXT: fnop # sched: [1:0.50] +; BROADWELL-NEXT: #NO_APP +; BROADWELL-NEXT: retl # sched: [6:0.50] +; +; SKYLAKE-LABEL: test_fnop: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: #APP +; SKYLAKE-NEXT: fnop # sched: [1:0.50] +; SKYLAKE-NEXT: #NO_APP +; SKYLAKE-NEXT: retl # sched: [6:0.50] +; +; SKX-LABEL: test_fnop: +; SKX: # BB#0: +; SKX-NEXT: #APP +; SKX-NEXT: fnop # sched: [1:0.50] +; SKX-NEXT: #NO_APP +; SKX-NEXT: retl # sched: [6:0.50] +; +; BTVER2-LABEL: test_fnop: +; BTVER2: # BB#0: +; BTVER2-NEXT: #APP +; BTVER2-NEXT: fnop # sched: [100:0.17] +; BTVER2-NEXT: #NO_APP +; BTVER2-NEXT: retl # sched: [4:1.00] +; +; ZNVER1-LABEL: test_fnop: +; ZNVER1: # BB#0: +; ZNVER1-NEXT: #APP +; ZNVER1-NEXT: fnop # sched: [1:1.00] +; ZNVER1-NEXT: #NO_APP +; ZNVER1-NEXT: retl # sched: [1:0.50] + tail call void asm sideeffect "fnop", ""() nounwind + ret void +} + +define void @test_fpatan() optsize { +; GENERIC-LABEL: test_fpatan: +; GENERIC: # BB#0: +; GENERIC-NEXT: #APP +; GENERIC-NEXT: fpatan +; GENERIC-NEXT: #NO_APP +; GENERIC-NEXT: retl +; +; ATOM-LABEL: test_fpatan: +; ATOM: # BB#0: +; ATOM-NEXT: #APP +; ATOM-NEXT: fpatan # sched: [183:91.50] +; ATOM-NEXT: #NO_APP +; ATOM-NEXT: retl # sched: [79:39.50] +; +; SLM-LABEL: test_fpatan: +; SLM: # BB#0: +; SLM-NEXT: #APP +; SLM-NEXT: fpatan # sched: [100:1.00] +; SLM-NEXT: #NO_APP +; SLM-NEXT: retl # sched: [4:1.00] +; +; SANDY-LABEL: test_fpatan: +; SANDY: # BB#0: +; SANDY-NEXT: #APP +; SANDY-NEXT: fpatan # sched: [100:0.33] +; SANDY-NEXT: #NO_APP +; SANDY-NEXT: retl # sched: [5:1.00] +; +; HASWELL-LABEL: test_fpatan: +; HASWELL: # BB#0: +; HASWELL-NEXT: #APP +; HASWELL-NEXT: fpatan # sched: [100:0.25] +; HASWELL-NEXT: #NO_APP +; HASWELL-NEXT: retl # sched: [5:0.50] +; +; BROADWELL-LABEL: test_fpatan: +; BROADWELL: # BB#0: +; BROADWELL-NEXT: #APP +; BROADWELL-NEXT: fpatan # sched: [100:0.25] +; BROADWELL-NEXT: #NO_APP +; BROADWELL-NEXT: retl # sched: [6:0.50] +; +; SKYLAKE-LABEL: test_fpatan: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: #APP +; SKYLAKE-NEXT: fpatan # sched: [100:0.25] +; SKYLAKE-NEXT: #NO_APP +; SKYLAKE-NEXT: retl # sched: [6:0.50] +; +; SKX-LABEL: test_fpatan: +; SKX: # BB#0: +; SKX-NEXT: #APP +; SKX-NEXT: fpatan # sched: [100:0.25] +; SKX-NEXT: #NO_APP +; SKX-NEXT: retl # sched: [6:0.50] +; +; BTVER2-LABEL: test_fpatan: +; BTVER2: # BB#0: +; BTVER2-NEXT: #APP +; BTVER2-NEXT: fpatan # sched: [100:0.17] +; BTVER2-NEXT: #NO_APP +; BTVER2-NEXT: retl # sched: [4:1.00] +; +; ZNVER1-LABEL: test_fpatan: +; ZNVER1: # BB#0: +; ZNVER1-NEXT: #APP +; ZNVER1-NEXT: fpatan # sched: [100:?] +; ZNVER1-NEXT: #NO_APP +; ZNVER1-NEXT: retl # sched: [1:0.50] + tail call void asm sideeffect "fpatan", ""() nounwind + ret void +} + +define void @test_fprem_fprem1() optsize { +; GENERIC-LABEL: test_fprem_fprem1: +; GENERIC: # BB#0: +; GENERIC-NEXT: #APP +; GENERIC-NEXT: fprem +; GENERIC-NEXT: fprem1 +; GENERIC-NEXT: #NO_APP +; GENERIC-NEXT: retl +; +; ATOM-LABEL: test_fprem_fprem1: +; ATOM: # BB#0: +; ATOM-NEXT: #APP +; ATOM-NEXT: fprem # sched: [55:27.50] +; ATOM-NEXT: fprem1 # sched: [71:35.50] +; ATOM-NEXT: #NO_APP +; ATOM-NEXT: retl # sched: [79:39.50] +; +; SLM-LABEL: test_fprem_fprem1: +; SLM: # BB#0: +; SLM-NEXT: #APP +; SLM-NEXT: fprem # sched: [100:1.00] +; SLM-NEXT: fprem1 # sched: [100:1.00] +; SLM-NEXT: #NO_APP +; SLM-NEXT: retl # sched: [4:1.00] +; +; SANDY-LABEL: test_fprem_fprem1: +; SANDY: # BB#0: +; SANDY-NEXT: #APP +; SANDY-NEXT: fprem # sched: [100:0.33] +; SANDY-NEXT: fprem1 # sched: [100:0.33] +; SANDY-NEXT: #NO_APP +; SANDY-NEXT: retl # sched: [5:1.00] +; +; HASWELL-LABEL: test_fprem_fprem1: +; HASWELL: # BB#0: +; HASWELL-NEXT: #APP +; HASWELL-NEXT: fprem # sched: [19:?] +; HASWELL-NEXT: fprem1 # sched: [19:?] +; HASWELL-NEXT: #NO_APP +; HASWELL-NEXT: retl # sched: [5:0.50] +; +; BROADWELL-LABEL: test_fprem_fprem1: +; BROADWELL: # BB#0: +; BROADWELL-NEXT: #APP +; BROADWELL-NEXT: fprem # sched: [100:0.25] +; BROADWELL-NEXT: fprem1 # sched: [100:0.25] +; BROADWELL-NEXT: #NO_APP +; BROADWELL-NEXT: retl # sched: [6:0.50] +; +; SKYLAKE-LABEL: test_fprem_fprem1: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: #APP +; SKYLAKE-NEXT: fprem # sched: [100:0.25] +; SKYLAKE-NEXT: fprem1 # sched: [100:0.25] +; SKYLAKE-NEXT: #NO_APP +; SKYLAKE-NEXT: retl # sched: [6:0.50] +; +; SKX-LABEL: test_fprem_fprem1: +; SKX: # BB#0: +; SKX-NEXT: #APP +; SKX-NEXT: fprem # sched: [100:0.25] +; SKX-NEXT: fprem1 # sched: [100:0.25] +; SKX-NEXT: #NO_APP +; SKX-NEXT: retl # sched: [6:0.50] +; +; BTVER2-LABEL: test_fprem_fprem1: +; BTVER2: # BB#0: +; BTVER2-NEXT: #APP +; BTVER2-NEXT: fprem # sched: [100:0.17] +; BTVER2-NEXT: fprem1 # sched: [100:0.17] +; BTVER2-NEXT: #NO_APP +; BTVER2-NEXT: retl # sched: [4:1.00] +; +; ZNVER1-LABEL: test_fprem_fprem1: +; ZNVER1: # BB#0: +; ZNVER1-NEXT: #APP +; ZNVER1-NEXT: fprem # sched: [100:?] +; ZNVER1-NEXT: fprem1 # sched: [100:?] +; ZNVER1-NEXT: #NO_APP +; ZNVER1-NEXT: retl # sched: [1:0.50] + tail call void asm sideeffect "fprem \0A\09 fprem1", ""() nounwind + ret void +} + +define void @test_fptan() optsize { +; GENERIC-LABEL: test_fptan: +; GENERIC: # BB#0: +; GENERIC-NEXT: #APP +; GENERIC-NEXT: fptan +; GENERIC-NEXT: #NO_APP +; GENERIC-NEXT: retl +; +; ATOM-LABEL: test_fptan: +; ATOM: # BB#0: +; ATOM-NEXT: #APP +; ATOM-NEXT: fptan # sched: [168:84.00] +; ATOM-NEXT: #NO_APP +; ATOM-NEXT: retl # sched: [79:39.50] +; +; SLM-LABEL: test_fptan: +; SLM: # BB#0: +; SLM-NEXT: #APP +; SLM-NEXT: fptan # sched: [100:1.00] +; SLM-NEXT: #NO_APP +; SLM-NEXT: retl # sched: [4:1.00] +; +; SANDY-LABEL: test_fptan: +; SANDY: # BB#0: +; SANDY-NEXT: #APP +; SANDY-NEXT: fptan # sched: [100:0.33] +; SANDY-NEXT: #NO_APP +; SANDY-NEXT: retl # sched: [5:1.00] +; +; HASWELL-LABEL: test_fptan: +; HASWELL: # BB#0: +; HASWELL-NEXT: #APP +; HASWELL-NEXT: fptan # sched: [100:0.25] +; HASWELL-NEXT: #NO_APP +; HASWELL-NEXT: retl # sched: [5:0.50] +; +; BROADWELL-LABEL: test_fptan: +; BROADWELL: # BB#0: +; BROADWELL-NEXT: #APP +; BROADWELL-NEXT: fptan # sched: [100:0.25] +; BROADWELL-NEXT: #NO_APP +; BROADWELL-NEXT: retl # sched: [6:0.50] +; +; SKYLAKE-LABEL: test_fptan: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: #APP +; SKYLAKE-NEXT: fptan # sched: [100:0.25] +; SKYLAKE-NEXT: #NO_APP +; SKYLAKE-NEXT: retl # sched: [6:0.50] +; +; SKX-LABEL: test_fptan: +; SKX: # BB#0: +; SKX-NEXT: #APP +; SKX-NEXT: fptan # sched: [100:0.25] +; SKX-NEXT: #NO_APP +; SKX-NEXT: retl # sched: [6:0.50] +; +; BTVER2-LABEL: test_fptan: +; BTVER2: # BB#0: +; BTVER2-NEXT: #APP +; BTVER2-NEXT: fptan # sched: [100:0.17] +; BTVER2-NEXT: #NO_APP +; BTVER2-NEXT: retl # sched: [4:1.00] +; +; ZNVER1-LABEL: test_fptan: +; ZNVER1: # BB#0: +; ZNVER1-NEXT: #APP +; ZNVER1-NEXT: fptan # sched: [100:?] +; ZNVER1-NEXT: #NO_APP +; ZNVER1-NEXT: retl # sched: [1:0.50] + tail call void asm sideeffect "fptan", ""() nounwind + ret void +} + +define void @test_frndint() optsize { +; GENERIC-LABEL: test_frndint: +; GENERIC: # BB#0: +; GENERIC-NEXT: #APP +; GENERIC-NEXT: frndint +; GENERIC-NEXT: #NO_APP +; GENERIC-NEXT: retl +; +; ATOM-LABEL: test_frndint: +; ATOM: # BB#0: +; ATOM-NEXT: #APP +; ATOM-NEXT: frndint # sched: [46:23.00] +; ATOM-NEXT: #NO_APP +; ATOM-NEXT: retl # sched: [79:39.50] +; +; SLM-LABEL: test_frndint: +; SLM: # BB#0: +; SLM-NEXT: #APP +; SLM-NEXT: frndint # sched: [100:1.00] +; SLM-NEXT: #NO_APP +; SLM-NEXT: retl # sched: [4:1.00] +; +; SANDY-LABEL: test_frndint: +; SANDY: # BB#0: +; SANDY-NEXT: #APP +; SANDY-NEXT: frndint # sched: [100:0.33] +; SANDY-NEXT: #NO_APP +; SANDY-NEXT: retl # sched: [5:1.00] +; +; HASWELL-LABEL: test_frndint: +; HASWELL: # BB#0: +; HASWELL-NEXT: #APP +; HASWELL-NEXT: frndint # sched: [11:?] +; HASWELL-NEXT: #NO_APP +; HASWELL-NEXT: retl # sched: [5:0.50] +; +; BROADWELL-LABEL: test_frndint: +; BROADWELL: # BB#0: +; BROADWELL-NEXT: #APP +; BROADWELL-NEXT: frndint # sched: [100:0.25] +; BROADWELL-NEXT: #NO_APP +; BROADWELL-NEXT: retl # sched: [6:0.50] +; +; SKYLAKE-LABEL: test_frndint: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: #APP +; SKYLAKE-NEXT: frndint # sched: [100:0.25] +; SKYLAKE-NEXT: #NO_APP +; SKYLAKE-NEXT: retl # sched: [6:0.50] +; +; SKX-LABEL: test_frndint: +; SKX: # BB#0: +; SKX-NEXT: #APP +; SKX-NEXT: frndint # sched: [100:0.25] +; SKX-NEXT: #NO_APP +; SKX-NEXT: retl # sched: [6:0.50] +; +; BTVER2-LABEL: test_frndint: +; BTVER2: # BB#0: +; BTVER2-NEXT: #APP +; BTVER2-NEXT: frndint # sched: [100:0.17] +; BTVER2-NEXT: #NO_APP +; BTVER2-NEXT: retl # sched: [4:1.00] +; +; ZNVER1-LABEL: test_frndint: +; ZNVER1: # BB#0: +; ZNVER1-NEXT: #APP +; ZNVER1-NEXT: frndint # sched: [100:?] +; ZNVER1-NEXT: #NO_APP +; ZNVER1-NEXT: retl # sched: [1:0.50] + tail call void asm sideeffect "frndint", ""() nounwind + ret void +} + +; TODO - test_frstor +; TODO - test_fsave +; TODO - test_fnsave + +define void @test_fscale() optsize { +; GENERIC-LABEL: test_fscale: +; GENERIC: # BB#0: +; GENERIC-NEXT: #APP +; GENERIC-NEXT: fscale +; GENERIC-NEXT: #NO_APP +; GENERIC-NEXT: retl +; +; ATOM-LABEL: test_fscale: +; ATOM: # BB#0: +; ATOM-NEXT: #APP +; ATOM-NEXT: fscale # sched: [77:38.50] +; ATOM-NEXT: #NO_APP +; ATOM-NEXT: retl # sched: [79:39.50] +; +; SLM-LABEL: test_fscale: +; SLM: # BB#0: +; SLM-NEXT: #APP +; SLM-NEXT: fscale # sched: [100:1.00] +; SLM-NEXT: #NO_APP +; SLM-NEXT: retl # sched: [4:1.00] +; +; SANDY-LABEL: test_fscale: +; SANDY: # BB#0: +; SANDY-NEXT: #APP +; SANDY-NEXT: fscale # sched: [100:0.33] +; SANDY-NEXT: #NO_APP +; SANDY-NEXT: retl # sched: [5:1.00] +; +; HASWELL-LABEL: test_fscale: +; HASWELL: # BB#0: +; HASWELL-NEXT: #APP +; HASWELL-NEXT: fscale # sched: [75:?] +; HASWELL-NEXT: #NO_APP +; HASWELL-NEXT: retl # sched: [5:0.50] +; +; BROADWELL-LABEL: test_fscale: +; BROADWELL: # BB#0: +; BROADWELL-NEXT: #APP +; BROADWELL-NEXT: fscale # sched: [100:0.25] +; BROADWELL-NEXT: #NO_APP +; BROADWELL-NEXT: retl # sched: [6:0.50] +; +; SKYLAKE-LABEL: test_fscale: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: #APP +; SKYLAKE-NEXT: fscale # sched: [100:0.25] +; SKYLAKE-NEXT: #NO_APP +; SKYLAKE-NEXT: retl # sched: [6:0.50] +; +; SKX-LABEL: test_fscale: +; SKX: # BB#0: +; SKX-NEXT: #APP +; SKX-NEXT: fscale # sched: [100:0.25] +; SKX-NEXT: #NO_APP +; SKX-NEXT: retl # sched: [6:0.50] +; +; BTVER2-LABEL: test_fscale: +; BTVER2: # BB#0: +; BTVER2-NEXT: #APP +; BTVER2-NEXT: fscale # sched: [100:0.17] +; BTVER2-NEXT: #NO_APP +; BTVER2-NEXT: retl # sched: [4:1.00] +; +; ZNVER1-LABEL: test_fscale: +; ZNVER1: # BB#0: +; ZNVER1-NEXT: #APP +; ZNVER1-NEXT: fscale # sched: [100:?] +; ZNVER1-NEXT: #NO_APP +; ZNVER1-NEXT: retl # sched: [1:0.50] + tail call void asm sideeffect "fscale", ""() nounwind + ret void +} + +define void @test_fsin() optsize { +; GENERIC-LABEL: test_fsin: +; GENERIC: # BB#0: +; GENERIC-NEXT: #APP +; GENERIC-NEXT: fsin +; GENERIC-NEXT: #NO_APP +; GENERIC-NEXT: retl +; +; ATOM-LABEL: test_fsin: +; ATOM: # BB#0: +; ATOM-NEXT: #APP +; ATOM-NEXT: fsin +; ATOM-NEXT: #NO_APP +; ATOM-NEXT: retl # sched: [79:39.50] +; +; SLM-LABEL: test_fsin: +; SLM: # BB#0: +; SLM-NEXT: #APP +; SLM-NEXT: fsin +; SLM-NEXT: #NO_APP +; SLM-NEXT: retl # sched: [4:1.00] +; +; SANDY-LABEL: test_fsin: +; SANDY: # BB#0: +; SANDY-NEXT: #APP +; SANDY-NEXT: fsin +; SANDY-NEXT: #NO_APP +; SANDY-NEXT: retl # sched: [5:1.00] +; +; HASWELL-LABEL: test_fsin: +; HASWELL: # BB#0: +; HASWELL-NEXT: #APP +; HASWELL-NEXT: fsin +; HASWELL-NEXT: #NO_APP +; HASWELL-NEXT: retl # sched: [5:0.50] +; +; BROADWELL-LABEL: test_fsin: +; BROADWELL: # BB#0: +; BROADWELL-NEXT: #APP +; BROADWELL-NEXT: fsin +; BROADWELL-NEXT: #NO_APP +; BROADWELL-NEXT: retl # sched: [6:0.50] +; +; SKYLAKE-LABEL: test_fsin: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: #APP +; SKYLAKE-NEXT: fsin +; SKYLAKE-NEXT: #NO_APP +; SKYLAKE-NEXT: retl # sched: [6:0.50] +; +; SKX-LABEL: test_fsin: +; SKX: # BB#0: +; SKX-NEXT: #APP +; SKX-NEXT: fsin +; SKX-NEXT: #NO_APP +; SKX-NEXT: retl # sched: [6:0.50] +; +; BTVER2-LABEL: test_fsin: +; BTVER2: # BB#0: +; BTVER2-NEXT: #APP +; BTVER2-NEXT: fsin +; BTVER2-NEXT: #NO_APP +; BTVER2-NEXT: retl # sched: [4:1.00] +; +; ZNVER1-LABEL: test_fsin: +; ZNVER1: # BB#0: +; ZNVER1-NEXT: #APP +; ZNVER1-NEXT: fsin +; ZNVER1-NEXT: #NO_APP +; ZNVER1-NEXT: retl # sched: [1:0.50] + tail call void asm sideeffect "fsin", ""() nounwind + ret void +} + +define void @test_fsincos() optsize { +; GENERIC-LABEL: test_fsincos: +; GENERIC: # BB#0: +; GENERIC-NEXT: #APP +; GENERIC-NEXT: fsincos +; GENERIC-NEXT: #NO_APP +; GENERIC-NEXT: retl +; +; ATOM-LABEL: test_fsincos: +; ATOM: # BB#0: +; ATOM-NEXT: #APP +; ATOM-NEXT: fsincos # sched: [174:87.00] +; ATOM-NEXT: #NO_APP +; ATOM-NEXT: retl # sched: [79:39.50] +; +; SLM-LABEL: test_fsincos: +; SLM: # BB#0: +; SLM-NEXT: #APP +; SLM-NEXT: fsincos # sched: [100:1.00] +; SLM-NEXT: #NO_APP +; SLM-NEXT: retl # sched: [4:1.00] +; +; SANDY-LABEL: test_fsincos: +; SANDY: # BB#0: +; SANDY-NEXT: #APP +; SANDY-NEXT: fsincos # sched: [100:0.33] +; SANDY-NEXT: #NO_APP +; SANDY-NEXT: retl # sched: [5:1.00] +; +; HASWELL-LABEL: test_fsincos: +; HASWELL: # BB#0: +; HASWELL-NEXT: #APP +; HASWELL-NEXT: fsincos # sched: [100:0.25] +; HASWELL-NEXT: #NO_APP +; HASWELL-NEXT: retl # sched: [5:0.50] +; +; BROADWELL-LABEL: test_fsincos: +; BROADWELL: # BB#0: +; BROADWELL-NEXT: #APP +; BROADWELL-NEXT: fsincos # sched: [100:0.25] +; BROADWELL-NEXT: #NO_APP +; BROADWELL-NEXT: retl # sched: [6:0.50] +; +; SKYLAKE-LABEL: test_fsincos: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: #APP +; SKYLAKE-NEXT: fsincos # sched: [100:0.25] +; SKYLAKE-NEXT: #NO_APP +; SKYLAKE-NEXT: retl # sched: [6:0.50] +; +; SKX-LABEL: test_fsincos: +; SKX: # BB#0: +; SKX-NEXT: #APP +; SKX-NEXT: fsincos # sched: [100:0.25] +; SKX-NEXT: #NO_APP +; SKX-NEXT: retl # sched: [6:0.50] +; +; BTVER2-LABEL: test_fsincos: +; BTVER2: # BB#0: +; BTVER2-NEXT: #APP +; BTVER2-NEXT: fsincos # sched: [100:0.17] +; BTVER2-NEXT: #NO_APP +; BTVER2-NEXT: retl # sched: [4:1.00] +; +; ZNVER1-LABEL: test_fsincos: +; ZNVER1: # BB#0: +; ZNVER1-NEXT: #APP +; ZNVER1-NEXT: fsincos # sched: [100:?] +; ZNVER1-NEXT: #NO_APP +; ZNVER1-NEXT: retl # sched: [1:0.50] + tail call void asm sideeffect "fsincos", ""() nounwind + ret void +} + +define void @test_fsqrt() optsize { +; GENERIC-LABEL: test_fsqrt: +; GENERIC: # BB#0: +; GENERIC-NEXT: #APP +; GENERIC-NEXT: fsqrt +; GENERIC-NEXT: #NO_APP +; GENERIC-NEXT: retl +; +; ATOM-LABEL: test_fsqrt: +; ATOM: # BB#0: +; ATOM-NEXT: #APP +; ATOM-NEXT: fsqrt +; ATOM-NEXT: #NO_APP +; ATOM-NEXT: retl # sched: [79:39.50] +; +; SLM-LABEL: test_fsqrt: +; SLM: # BB#0: +; SLM-NEXT: #APP +; SLM-NEXT: fsqrt # sched: [15:1.00] +; SLM-NEXT: #NO_APP +; SLM-NEXT: retl # sched: [4:1.00] +; +; SANDY-LABEL: test_fsqrt: +; SANDY: # BB#0: +; SANDY-NEXT: #APP +; SANDY-NEXT: fsqrt # sched: [14:1.00] +; SANDY-NEXT: #NO_APP +; SANDY-NEXT: retl # sched: [5:1.00] +; +; HASWELL-LABEL: test_fsqrt: +; HASWELL: # BB#0: +; HASWELL-NEXT: #APP +; HASWELL-NEXT: fsqrt # sched: [15:1.00] +; HASWELL-NEXT: #NO_APP +; HASWELL-NEXT: retl # sched: [5:0.50] +; +; BROADWELL-LABEL: test_fsqrt: +; BROADWELL: # BB#0: +; BROADWELL-NEXT: #APP +; BROADWELL-NEXT: fsqrt # sched: [15:1.00] +; BROADWELL-NEXT: #NO_APP +; BROADWELL-NEXT: retl # sched: [6:0.50] +; +; SKYLAKE-LABEL: test_fsqrt: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: #APP +; SKYLAKE-NEXT: fsqrt # sched: [15:1.00] +; SKYLAKE-NEXT: #NO_APP +; SKYLAKE-NEXT: retl # sched: [6:0.50] +; +; SKX-LABEL: test_fsqrt: +; SKX: # BB#0: +; SKX-NEXT: #APP +; SKX-NEXT: fsqrt # sched: [15:1.00] +; SKX-NEXT: #NO_APP +; SKX-NEXT: retl # sched: [6:0.50] +; +; BTVER2-LABEL: test_fsqrt: +; BTVER2: # BB#0: +; BTVER2-NEXT: #APP +; BTVER2-NEXT: fsqrt # sched: [21:21.00] +; BTVER2-NEXT: #NO_APP +; BTVER2-NEXT: retl # sched: [4:1.00] +; +; ZNVER1-LABEL: test_fsqrt: +; ZNVER1: # BB#0: +; ZNVER1-NEXT: #APP +; ZNVER1-NEXT: fsqrt # sched: [20:1.00] +; ZNVER1-NEXT: #NO_APP +; ZNVER1-NEXT: retl # sched: [1:0.50] + tail call void asm sideeffect "fsqrt", ""() nounwind + ret void +} + +; TODO - test_fst +; TODO - test_fstp + +; TODO - test_fstcw +; TODO - test_fnstcw + +; TODO - test_fstenv +; TODO - test_fnstenv + +; TODO - test_fstsw +; TODO - test_fnstsw + +define void @test_fsub(float *%a0, double *%a1) optsize { +; GENERIC-LABEL: test_fsub: +; GENERIC: # BB#0: +; GENERIC-NEXT: movl {{[0-9]+}}(%esp), %eax +; GENERIC-NEXT: movl {{[0-9]+}}(%esp), %ecx +; GENERIC-NEXT: #APP +; GENERIC-NEXT: fsub %st(0), %st(1) +; GENERIC-NEXT: fsub %st(2) +; GENERIC-NEXT: fsubs (%ecx) +; GENERIC-NEXT: fsubl (%eax) +; GENERIC-NEXT: #NO_APP +; GENERIC-NEXT: retl +; +; ATOM-LABEL: test_fsub: +; ATOM: # BB#0: +; ATOM-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [1:1.00] +; ATOM-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [1:1.00] +; ATOM-NEXT: #APP +; ATOM-NEXT: fsub %st(0), %st(1) +; ATOM-NEXT: fsub %st(2) +; ATOM-NEXT: fsubs (%ecx) +; ATOM-NEXT: fsubl (%eax) +; ATOM-NEXT: #NO_APP +; ATOM-NEXT: retl # sched: [79:39.50] +; +; SLM-LABEL: test_fsub: +; SLM: # BB#0: +; SLM-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [3:1.00] +; SLM-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [3:1.00] +; SLM-NEXT: #APP +; SLM-NEXT: fsub %st(0), %st(1) # sched: [3:1.00] +; SLM-NEXT: fsub %st(2) # sched: [3:1.00] +; SLM-NEXT: fsubs (%ecx) # sched: [6:1.00] +; SLM-NEXT: fsubl (%eax) # sched: [6:1.00] +; SLM-NEXT: #NO_APP +; SLM-NEXT: retl # sched: [4:1.00] +; +; SANDY-LABEL: test_fsub: +; SANDY: # BB#0: +; SANDY-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50] +; SANDY-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50] +; SANDY-NEXT: #APP +; SANDY-NEXT: fsub %st(0), %st(1) # sched: [3:1.00] +; SANDY-NEXT: fsub %st(2) # sched: [3:1.00] +; SANDY-NEXT: fsubs (%ecx) # sched: [10:1.00] +; SANDY-NEXT: fsubl (%eax) # sched: [10:1.00] +; SANDY-NEXT: #NO_APP +; SANDY-NEXT: retl # sched: [5:1.00] +; +; HASWELL-LABEL: test_fsub: +; HASWELL: # BB#0: +; HASWELL-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [1:0.50] +; HASWELL-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [1:0.50] +; HASWELL-NEXT: #APP +; HASWELL-NEXT: fsub %st(0), %st(1) # sched: [3:1.00] +; HASWELL-NEXT: fsub %st(2) # sched: [3:1.00] +; HASWELL-NEXT: fsubs (%ecx) # sched: [3:1.00] +; HASWELL-NEXT: fsubl (%eax) # sched: [3:1.00] +; HASWELL-NEXT: #NO_APP +; HASWELL-NEXT: retl # sched: [5:0.50] +; +; BROADWELL-LABEL: test_fsub: +; BROADWELL: # BB#0: +; BROADWELL-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50] +; BROADWELL-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50] +; BROADWELL-NEXT: #APP +; BROADWELL-NEXT: fsub %st(0), %st(1) # sched: [3:1.00] +; BROADWELL-NEXT: fsub %st(2) # sched: [3:1.00] +; BROADWELL-NEXT: fsubs (%ecx) # sched: [9:1.00] +; BROADWELL-NEXT: fsubl (%eax) # sched: [9:1.00] +; BROADWELL-NEXT: #NO_APP +; BROADWELL-NEXT: retl # sched: [6:0.50] +; +; SKYLAKE-LABEL: test_fsub: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50] +; SKYLAKE-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50] +; SKYLAKE-NEXT: #APP +; SKYLAKE-NEXT: fsub %st(0), %st(1) # sched: [3:1.00] +; SKYLAKE-NEXT: fsub %st(2) # sched: [3:1.00] +; SKYLAKE-NEXT: fsubs (%ecx) # sched: [10:1.00] +; SKYLAKE-NEXT: fsubl (%eax) # sched: [10:1.00] +; SKYLAKE-NEXT: #NO_APP +; SKYLAKE-NEXT: retl # sched: [6:0.50] +; +; SKX-LABEL: test_fsub: +; SKX: # BB#0: +; SKX-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50] +; SKX-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50] +; SKX-NEXT: #APP +; SKX-NEXT: fsub %st(0), %st(1) # sched: [3:1.00] +; SKX-NEXT: fsub %st(2) # sched: [3:1.00] +; SKX-NEXT: fsubs (%ecx) # sched: [10:1.00] +; SKX-NEXT: fsubl (%eax) # sched: [10:1.00] +; SKX-NEXT: #NO_APP +; SKX-NEXT: retl # sched: [6:0.50] +; +; BTVER2-LABEL: test_fsub: +; BTVER2: # BB#0: +; BTVER2-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:1.00] +; BTVER2-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:1.00] +; BTVER2-NEXT: #APP +; BTVER2-NEXT: fsub %st(0), %st(1) # sched: [3:1.00] +; BTVER2-NEXT: fsub %st(2) # sched: [3:1.00] +; BTVER2-NEXT: fsubs (%ecx) # sched: [8:1.00] +; BTVER2-NEXT: fsubl (%eax) # sched: [8:1.00] +; BTVER2-NEXT: #NO_APP +; BTVER2-NEXT: retl # sched: [4:1.00] +; +; ZNVER1-LABEL: test_fsub: +; ZNVER1: # BB#0: +; ZNVER1-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [8:0.50] +; ZNVER1-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [8:0.50] +; ZNVER1-NEXT: #APP +; ZNVER1-NEXT: fsub %st(0), %st(1) # sched: [3:1.00] +; ZNVER1-NEXT: fsub %st(2) # sched: [3:1.00] +; ZNVER1-NEXT: fsubs (%ecx) # sched: [10:1.00] +; ZNVER1-NEXT: fsubl (%eax) # sched: [10:1.00] +; ZNVER1-NEXT: #NO_APP +; ZNVER1-NEXT: retl # sched: [1:0.50] + tail call void asm sideeffect "fsub %st(0), %st(1) \0A\09 fsub %st(2), %st(0) \0A\09 fsubs $0 \0A\09 fsubl $1", "*m,*m"(float *%a0, double *%a1) nounwind + ret void +} + +define void @test_fsubp_fisub(i16 *%a0, i32 *%a1) optsize { +; GENERIC-LABEL: test_fsubp_fisub: +; GENERIC: # BB#0: +; GENERIC-NEXT: movl {{[0-9]+}}(%esp), %eax +; GENERIC-NEXT: movl {{[0-9]+}}(%esp), %ecx +; GENERIC-NEXT: #APP +; GENERIC-NEXT: fsubp %st(1) +; GENERIC-NEXT: fsubp %st(2) +; GENERIC-NEXT: fisubs (%ecx) +; GENERIC-NEXT: fisubl (%eax) +; GENERIC-NEXT: #NO_APP +; GENERIC-NEXT: retl +; +; ATOM-LABEL: test_fsubp_fisub: +; ATOM: # BB#0: +; ATOM-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [1:1.00] +; ATOM-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [1:1.00] +; ATOM-NEXT: #APP +; ATOM-NEXT: fsubp %st(1) +; ATOM-NEXT: fsubp %st(2) +; ATOM-NEXT: fisubs (%ecx) +; ATOM-NEXT: fisubl (%eax) +; ATOM-NEXT: #NO_APP +; ATOM-NEXT: retl # sched: [79:39.50] +; +; SLM-LABEL: test_fsubp_fisub: +; SLM: # BB#0: +; SLM-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [3:1.00] +; SLM-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [3:1.00] +; SLM-NEXT: #APP +; SLM-NEXT: fsubp %st(1) # sched: [3:1.00] +; SLM-NEXT: fsubp %st(2) # sched: [3:1.00] +; SLM-NEXT: fisubs (%ecx) # sched: [6:1.00] +; SLM-NEXT: fisubl (%eax) # sched: [6:1.00] +; SLM-NEXT: #NO_APP +; SLM-NEXT: retl # sched: [4:1.00] +; +; SANDY-LABEL: test_fsubp_fisub: +; SANDY: # BB#0: +; SANDY-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50] +; SANDY-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50] +; SANDY-NEXT: #APP +; SANDY-NEXT: fsubp %st(1) # sched: [3:1.00] +; SANDY-NEXT: fsubp %st(2) # sched: [3:1.00] +; SANDY-NEXT: fisubs (%ecx) # sched: [13:2.00] +; SANDY-NEXT: fisubl (%eax) # sched: [13:2.00] +; SANDY-NEXT: #NO_APP +; SANDY-NEXT: retl # sched: [5:1.00] +; +; HASWELL-LABEL: test_fsubp_fisub: +; HASWELL: # BB#0: +; HASWELL-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [1:0.50] +; HASWELL-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [1:0.50] +; HASWELL-NEXT: #APP +; HASWELL-NEXT: fsubp %st(1) # sched: [3:1.00] +; HASWELL-NEXT: fsubp %st(2) # sched: [3:1.00] +; HASWELL-NEXT: fisubs (%ecx) # sched: [6:2.00] +; HASWELL-NEXT: fisubl (%eax) # sched: [6:2.00] +; HASWELL-NEXT: #NO_APP +; HASWELL-NEXT: retl # sched: [5:0.50] +; +; BROADWELL-LABEL: test_fsubp_fisub: +; BROADWELL: # BB#0: +; BROADWELL-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50] +; BROADWELL-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50] +; BROADWELL-NEXT: #APP +; BROADWELL-NEXT: fsubp %st(1) # sched: [3:1.00] +; BROADWELL-NEXT: fsubp %st(2) # sched: [3:1.00] +; BROADWELL-NEXT: fisubs (%ecx) # sched: [12:2.00] +; BROADWELL-NEXT: fisubl (%eax) # sched: [12:2.00] +; BROADWELL-NEXT: #NO_APP +; BROADWELL-NEXT: retl # sched: [6:0.50] +; +; SKYLAKE-LABEL: test_fsubp_fisub: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50] +; SKYLAKE-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50] +; SKYLAKE-NEXT: #APP +; SKYLAKE-NEXT: fsubp %st(1) # sched: [3:1.00] +; SKYLAKE-NEXT: fsubp %st(2) # sched: [3:1.00] +; SKYLAKE-NEXT: fisubs (%ecx) # sched: [13:2.00] +; SKYLAKE-NEXT: fisubl (%eax) # sched: [13:2.00] +; SKYLAKE-NEXT: #NO_APP +; SKYLAKE-NEXT: retl # sched: [6:0.50] +; +; SKX-LABEL: test_fsubp_fisub: +; SKX: # BB#0: +; SKX-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50] +; SKX-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50] +; SKX-NEXT: #APP +; SKX-NEXT: fsubp %st(1) # sched: [3:1.00] +; SKX-NEXT: fsubp %st(2) # sched: [3:1.00] +; SKX-NEXT: fisubs (%ecx) # sched: [13:2.00] +; SKX-NEXT: fisubl (%eax) # sched: [13:2.00] +; SKX-NEXT: #NO_APP +; SKX-NEXT: retl # sched: [6:0.50] +; +; BTVER2-LABEL: test_fsubp_fisub: +; BTVER2: # BB#0: +; BTVER2-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:1.00] +; BTVER2-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:1.00] +; BTVER2-NEXT: #APP +; BTVER2-NEXT: fsubp %st(1) # sched: [3:1.00] +; BTVER2-NEXT: fsubp %st(2) # sched: [3:1.00] +; BTVER2-NEXT: fisubs (%ecx) # sched: [8:1.00] +; BTVER2-NEXT: fisubl (%eax) # sched: [8:1.00] +; BTVER2-NEXT: #NO_APP +; BTVER2-NEXT: retl # sched: [4:1.00] +; +; ZNVER1-LABEL: test_fsubp_fisub: +; ZNVER1: # BB#0: +; ZNVER1-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [8:0.50] +; ZNVER1-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [8:0.50] +; ZNVER1-NEXT: #APP +; ZNVER1-NEXT: fsubp %st(1) # sched: [3:1.00] +; ZNVER1-NEXT: fsubp %st(2) # sched: [3:1.00] +; ZNVER1-NEXT: fisubs (%ecx) # sched: [10:1.00] +; ZNVER1-NEXT: fisubl (%eax) # sched: [10:1.00] +; ZNVER1-NEXT: #NO_APP +; ZNVER1-NEXT: retl # sched: [1:0.50] + tail call void asm sideeffect "fsubp \0A\09 fsubp %st(2), %st(0) \0A\09 fisubs $0 \0A\09 fisubl $1", "*m,*m"(i16 *%a0, i32 *%a1) nounwind + ret void +} + +define void @test_fsubr(float *%a0, double *%a1) optsize { +; GENERIC-LABEL: test_fsubr: +; GENERIC: # BB#0: +; GENERIC-NEXT: movl {{[0-9]+}}(%esp), %eax +; GENERIC-NEXT: movl {{[0-9]+}}(%esp), %ecx +; GENERIC-NEXT: #APP +; GENERIC-NEXT: fsubr %st(0), %st(1) +; GENERIC-NEXT: fsubr %st(2) +; GENERIC-NEXT: fsubrs (%ecx) +; GENERIC-NEXT: fsubrl (%eax) +; GENERIC-NEXT: #NO_APP +; GENERIC-NEXT: retl +; +; ATOM-LABEL: test_fsubr: +; ATOM: # BB#0: +; ATOM-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [1:1.00] +; ATOM-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [1:1.00] +; ATOM-NEXT: #APP +; ATOM-NEXT: fsubr %st(0), %st(1) +; ATOM-NEXT: fsubr %st(2) +; ATOM-NEXT: fsubrs (%ecx) +; ATOM-NEXT: fsubrl (%eax) +; ATOM-NEXT: #NO_APP +; ATOM-NEXT: retl # sched: [79:39.50] +; +; SLM-LABEL: test_fsubr: +; SLM: # BB#0: +; SLM-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [3:1.00] +; SLM-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [3:1.00] +; SLM-NEXT: #APP +; SLM-NEXT: fsubr %st(0), %st(1) # sched: [3:1.00] +; SLM-NEXT: fsubr %st(2) # sched: [3:1.00] +; SLM-NEXT: fsubrs (%ecx) # sched: [6:1.00] +; SLM-NEXT: fsubrl (%eax) # sched: [6:1.00] +; SLM-NEXT: #NO_APP +; SLM-NEXT: retl # sched: [4:1.00] +; +; SANDY-LABEL: test_fsubr: +; SANDY: # BB#0: +; SANDY-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50] +; SANDY-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50] +; SANDY-NEXT: #APP +; SANDY-NEXT: fsubr %st(0), %st(1) # sched: [3:1.00] +; SANDY-NEXT: fsubr %st(2) # sched: [3:1.00] +; SANDY-NEXT: fsubrs (%ecx) # sched: [10:1.00] +; SANDY-NEXT: fsubrl (%eax) # sched: [10:1.00] +; SANDY-NEXT: #NO_APP +; SANDY-NEXT: retl # sched: [5:1.00] +; +; HASWELL-LABEL: test_fsubr: +; HASWELL: # BB#0: +; HASWELL-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [1:0.50] +; HASWELL-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [1:0.50] +; HASWELL-NEXT: #APP +; HASWELL-NEXT: fsubr %st(0), %st(1) # sched: [3:1.00] +; HASWELL-NEXT: fsubr %st(2) # sched: [3:1.00] +; HASWELL-NEXT: fsubrs (%ecx) # sched: [3:1.00] +; HASWELL-NEXT: fsubrl (%eax) # sched: [3:1.00] +; HASWELL-NEXT: #NO_APP +; HASWELL-NEXT: retl # sched: [5:0.50] +; +; BROADWELL-LABEL: test_fsubr: +; BROADWELL: # BB#0: +; BROADWELL-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50] +; BROADWELL-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50] +; BROADWELL-NEXT: #APP +; BROADWELL-NEXT: fsubr %st(0), %st(1) # sched: [3:1.00] +; BROADWELL-NEXT: fsubr %st(2) # sched: [3:1.00] +; BROADWELL-NEXT: fsubrs (%ecx) # sched: [9:1.00] +; BROADWELL-NEXT: fsubrl (%eax) # sched: [9:1.00] +; BROADWELL-NEXT: #NO_APP +; BROADWELL-NEXT: retl # sched: [6:0.50] +; +; SKYLAKE-LABEL: test_fsubr: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50] +; SKYLAKE-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50] +; SKYLAKE-NEXT: #APP +; SKYLAKE-NEXT: fsubr %st(0), %st(1) # sched: [3:1.00] +; SKYLAKE-NEXT: fsubr %st(2) # sched: [3:1.00] +; SKYLAKE-NEXT: fsubrs (%ecx) # sched: [10:1.00] +; SKYLAKE-NEXT: fsubrl (%eax) # sched: [10:1.00] +; SKYLAKE-NEXT: #NO_APP +; SKYLAKE-NEXT: retl # sched: [6:0.50] +; +; SKX-LABEL: test_fsubr: +; SKX: # BB#0: +; SKX-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50] +; SKX-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50] +; SKX-NEXT: #APP +; SKX-NEXT: fsubr %st(0), %st(1) # sched: [3:1.00] +; SKX-NEXT: fsubr %st(2) # sched: [3:1.00] +; SKX-NEXT: fsubrs (%ecx) # sched: [10:1.00] +; SKX-NEXT: fsubrl (%eax) # sched: [10:1.00] +; SKX-NEXT: #NO_APP +; SKX-NEXT: retl # sched: [6:0.50] +; +; BTVER2-LABEL: test_fsubr: +; BTVER2: # BB#0: +; BTVER2-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:1.00] +; BTVER2-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:1.00] +; BTVER2-NEXT: #APP +; BTVER2-NEXT: fsubr %st(0), %st(1) # sched: [3:1.00] +; BTVER2-NEXT: fsubr %st(2) # sched: [3:1.00] +; BTVER2-NEXT: fsubrs (%ecx) # sched: [8:1.00] +; BTVER2-NEXT: fsubrl (%eax) # sched: [8:1.00] +; BTVER2-NEXT: #NO_APP +; BTVER2-NEXT: retl # sched: [4:1.00] +; +; ZNVER1-LABEL: test_fsubr: +; ZNVER1: # BB#0: +; ZNVER1-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [8:0.50] +; ZNVER1-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [8:0.50] +; ZNVER1-NEXT: #APP +; ZNVER1-NEXT: fsubr %st(0), %st(1) # sched: [3:1.00] +; ZNVER1-NEXT: fsubr %st(2) # sched: [3:1.00] +; ZNVER1-NEXT: fsubrs (%ecx) # sched: [10:1.00] +; ZNVER1-NEXT: fsubrl (%eax) # sched: [10:1.00] +; ZNVER1-NEXT: #NO_APP +; ZNVER1-NEXT: retl # sched: [1:0.50] + tail call void asm sideeffect "fsubr %st(0), %st(1) \0A\09 fsubr %st(2), %st(0) \0A\09 fsubrs $0 \0A\09 fsubrl $1", "*m,*m"(float *%a0, double *%a1) nounwind + ret void +} + +define void @test_fsubrp_fisubr(i16 *%a0, i32 *%a1) optsize { +; GENERIC-LABEL: test_fsubrp_fisubr: +; GENERIC: # BB#0: +; GENERIC-NEXT: movl {{[0-9]+}}(%esp), %eax +; GENERIC-NEXT: movl {{[0-9]+}}(%esp), %ecx +; GENERIC-NEXT: #APP +; GENERIC-NEXT: fsubrp %st(1) +; GENERIC-NEXT: fsubrp %st(2) +; GENERIC-NEXT: fisubrs (%ecx) +; GENERIC-NEXT: fisubrl (%eax) +; GENERIC-NEXT: #NO_APP +; GENERIC-NEXT: retl +; +; ATOM-LABEL: test_fsubrp_fisubr: +; ATOM: # BB#0: +; ATOM-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [1:1.00] +; ATOM-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [1:1.00] +; ATOM-NEXT: #APP +; ATOM-NEXT: fsubrp %st(1) +; ATOM-NEXT: fsubrp %st(2) +; ATOM-NEXT: fisubrs (%ecx) +; ATOM-NEXT: fisubrl (%eax) +; ATOM-NEXT: #NO_APP +; ATOM-NEXT: retl # sched: [79:39.50] +; +; SLM-LABEL: test_fsubrp_fisubr: +; SLM: # BB#0: +; SLM-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [3:1.00] +; SLM-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [3:1.00] +; SLM-NEXT: #APP +; SLM-NEXT: fsubrp %st(1) # sched: [3:1.00] +; SLM-NEXT: fsubrp %st(2) # sched: [3:1.00] +; SLM-NEXT: fisubrs (%ecx) # sched: [6:1.00] +; SLM-NEXT: fisubrl (%eax) # sched: [6:1.00] +; SLM-NEXT: #NO_APP +; SLM-NEXT: retl # sched: [4:1.00] +; +; SANDY-LABEL: test_fsubrp_fisubr: +; SANDY: # BB#0: +; SANDY-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50] +; SANDY-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50] +; SANDY-NEXT: #APP +; SANDY-NEXT: fsubrp %st(1) # sched: [3:1.00] +; SANDY-NEXT: fsubrp %st(2) # sched: [3:1.00] +; SANDY-NEXT: fisubrs (%ecx) # sched: [13:2.00] +; SANDY-NEXT: fisubrl (%eax) # sched: [13:2.00] +; SANDY-NEXT: #NO_APP +; SANDY-NEXT: retl # sched: [5:1.00] +; +; HASWELL-LABEL: test_fsubrp_fisubr: +; HASWELL: # BB#0: +; HASWELL-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [1:0.50] +; HASWELL-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [1:0.50] +; HASWELL-NEXT: #APP +; HASWELL-NEXT: fsubrp %st(1) # sched: [3:1.00] +; HASWELL-NEXT: fsubrp %st(2) # sched: [3:1.00] +; HASWELL-NEXT: fisubrs (%ecx) # sched: [6:2.00] +; HASWELL-NEXT: fisubrl (%eax) # sched: [6:2.00] +; HASWELL-NEXT: #NO_APP +; HASWELL-NEXT: retl # sched: [5:0.50] +; +; BROADWELL-LABEL: test_fsubrp_fisubr: +; BROADWELL: # BB#0: +; BROADWELL-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50] +; BROADWELL-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50] +; BROADWELL-NEXT: #APP +; BROADWELL-NEXT: fsubrp %st(1) # sched: [3:1.00] +; BROADWELL-NEXT: fsubrp %st(2) # sched: [3:1.00] +; BROADWELL-NEXT: fisubrs (%ecx) # sched: [12:2.00] +; BROADWELL-NEXT: fisubrl (%eax) # sched: [12:2.00] +; BROADWELL-NEXT: #NO_APP +; BROADWELL-NEXT: retl # sched: [6:0.50] +; +; SKYLAKE-LABEL: test_fsubrp_fisubr: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50] +; SKYLAKE-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50] +; SKYLAKE-NEXT: #APP +; SKYLAKE-NEXT: fsubrp %st(1) # sched: [3:1.00] +; SKYLAKE-NEXT: fsubrp %st(2) # sched: [3:1.00] +; SKYLAKE-NEXT: fisubrs (%ecx) # sched: [13:2.00] +; SKYLAKE-NEXT: fisubrl (%eax) # sched: [13:2.00] +; SKYLAKE-NEXT: #NO_APP +; SKYLAKE-NEXT: retl # sched: [6:0.50] +; +; SKX-LABEL: test_fsubrp_fisubr: +; SKX: # BB#0: +; SKX-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50] +; SKX-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:0.50] +; SKX-NEXT: #APP +; SKX-NEXT: fsubrp %st(1) # sched: [3:1.00] +; SKX-NEXT: fsubrp %st(2) # sched: [3:1.00] +; SKX-NEXT: fisubrs (%ecx) # sched: [13:2.00] +; SKX-NEXT: fisubrl (%eax) # sched: [13:2.00] +; SKX-NEXT: #NO_APP +; SKX-NEXT: retl # sched: [6:0.50] +; +; BTVER2-LABEL: test_fsubrp_fisubr: +; BTVER2: # BB#0: +; BTVER2-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:1.00] +; BTVER2-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [5:1.00] +; BTVER2-NEXT: #APP +; BTVER2-NEXT: fsubrp %st(1) # sched: [3:1.00] +; BTVER2-NEXT: fsubrp %st(2) # sched: [3:1.00] +; BTVER2-NEXT: fisubrs (%ecx) # sched: [8:1.00] +; BTVER2-NEXT: fisubrl (%eax) # sched: [8:1.00] +; BTVER2-NEXT: #NO_APP +; BTVER2-NEXT: retl # sched: [4:1.00] +; +; ZNVER1-LABEL: test_fsubrp_fisubr: +; ZNVER1: # BB#0: +; ZNVER1-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [8:0.50] +; ZNVER1-NEXT: movl {{[0-9]+}}(%esp), %ecx # sched: [8:0.50] +; ZNVER1-NEXT: #APP +; ZNVER1-NEXT: fsubrp %st(1) # sched: [3:1.00] +; ZNVER1-NEXT: fsubrp %st(2) # sched: [3:1.00] +; ZNVER1-NEXT: fisubrs (%ecx) # sched: [10:1.00] +; ZNVER1-NEXT: fisubrl (%eax) # sched: [10:1.00] +; ZNVER1-NEXT: #NO_APP +; ZNVER1-NEXT: retl # sched: [1:0.50] + tail call void asm sideeffect "fsubrp \0A\09 fsubrp %st(2), %st(0) \0A\09 fisubrs $0 \0A\09 fisubrl $1", "*m,*m"(i16 *%a0, i32 *%a1) nounwind + ret void +} + +define void @test_ftst() optsize { +; GENERIC-LABEL: test_ftst: +; GENERIC: # BB#0: +; GENERIC-NEXT: #APP +; GENERIC-NEXT: ftst +; GENERIC-NEXT: #NO_APP +; GENERIC-NEXT: retl +; +; ATOM-LABEL: test_ftst: +; ATOM: # BB#0: +; ATOM-NEXT: #APP +; ATOM-NEXT: ftst +; ATOM-NEXT: #NO_APP +; ATOM-NEXT: retl # sched: [79:39.50] +; +; SLM-LABEL: test_ftst: +; SLM: # BB#0: +; SLM-NEXT: #APP +; SLM-NEXT: ftst +; SLM-NEXT: #NO_APP +; SLM-NEXT: retl # sched: [4:1.00] +; +; SANDY-LABEL: test_ftst: +; SANDY: # BB#0: +; SANDY-NEXT: #APP +; SANDY-NEXT: ftst +; SANDY-NEXT: #NO_APP +; SANDY-NEXT: retl # sched: [5:1.00] +; +; HASWELL-LABEL: test_ftst: +; HASWELL: # BB#0: +; HASWELL-NEXT: #APP +; HASWELL-NEXT: ftst # sched: [1:1.00] +; HASWELL-NEXT: #NO_APP +; HASWELL-NEXT: retl # sched: [5:0.50] +; +; BROADWELL-LABEL: test_ftst: +; BROADWELL: # BB#0: +; BROADWELL-NEXT: #APP +; BROADWELL-NEXT: ftst +; BROADWELL-NEXT: #NO_APP +; BROADWELL-NEXT: retl # sched: [6:0.50] +; +; SKYLAKE-LABEL: test_ftst: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: #APP +; SKYLAKE-NEXT: ftst +; SKYLAKE-NEXT: #NO_APP +; SKYLAKE-NEXT: retl # sched: [6:0.50] +; +; SKX-LABEL: test_ftst: +; SKX: # BB#0: +; SKX-NEXT: #APP +; SKX-NEXT: ftst +; SKX-NEXT: #NO_APP +; SKX-NEXT: retl # sched: [6:0.50] +; +; BTVER2-LABEL: test_ftst: +; BTVER2: # BB#0: +; BTVER2-NEXT: #APP +; BTVER2-NEXT: ftst +; BTVER2-NEXT: #NO_APP +; BTVER2-NEXT: retl # sched: [4:1.00] +; +; ZNVER1-LABEL: test_ftst: +; ZNVER1: # BB#0: +; ZNVER1-NEXT: #APP +; ZNVER1-NEXT: ftst # sched: [1:1.00] +; ZNVER1-NEXT: #NO_APP +; ZNVER1-NEXT: retl # sched: [1:0.50] + tail call void asm sideeffect "ftst", ""() nounwind + ret void +} + +define void @test_fucom_fucomp_fucompp() optsize { +; GENERIC-LABEL: test_fucom_fucomp_fucompp: +; GENERIC: # BB#0: +; GENERIC-NEXT: #APP +; GENERIC-NEXT: fucom %st(1) +; GENERIC-NEXT: fucom %st(3) +; GENERIC-NEXT: fucomp %st(1) +; GENERIC-NEXT: fucomp %st(3) +; GENERIC-NEXT: fucompp +; GENERIC-NEXT: #NO_APP +; GENERIC-NEXT: retl +; +; ATOM-LABEL: test_fucom_fucomp_fucompp: +; ATOM: # BB#0: +; ATOM-NEXT: #APP +; ATOM-NEXT: fucom %st(1) # sched: [1:1.00] +; ATOM-NEXT: fucom %st(3) # sched: [1:1.00] +; ATOM-NEXT: fucomp %st(1) # sched: [1:1.00] +; ATOM-NEXT: fucomp %st(3) # sched: [1:1.00] +; ATOM-NEXT: fucompp # sched: [1:1.00] +; ATOM-NEXT: #NO_APP +; ATOM-NEXT: retl # sched: [79:39.50] +; +; SLM-LABEL: test_fucom_fucomp_fucompp: +; SLM: # BB#0: +; SLM-NEXT: #APP +; SLM-NEXT: fucom %st(1) # sched: [3:1.00] +; SLM-NEXT: fucom %st(3) # sched: [3:1.00] +; SLM-NEXT: fucomp %st(1) # sched: [3:1.00] +; SLM-NEXT: fucomp %st(3) # sched: [3:1.00] +; SLM-NEXT: fucompp # sched: [3:1.00] +; SLM-NEXT: #NO_APP +; SLM-NEXT: retl # sched: [4:1.00] +; +; SANDY-LABEL: test_fucom_fucomp_fucompp: +; SANDY: # BB#0: +; SANDY-NEXT: #APP +; SANDY-NEXT: fucom %st(1) # sched: [1:1.00] +; SANDY-NEXT: fucom %st(3) # sched: [1:1.00] +; SANDY-NEXT: fucomp %st(1) # sched: [1:1.00] +; SANDY-NEXT: fucomp %st(3) # sched: [1:1.00] +; SANDY-NEXT: fucompp # sched: [3:1.00] +; SANDY-NEXT: #NO_APP +; SANDY-NEXT: retl # sched: [5:1.00] +; +; HASWELL-LABEL: test_fucom_fucomp_fucompp: +; HASWELL: # BB#0: +; HASWELL-NEXT: #APP +; HASWELL-NEXT: fucom %st(1) # sched: [1:1.00] +; HASWELL-NEXT: fucom %st(3) # sched: [1:1.00] +; HASWELL-NEXT: fucomp %st(1) # sched: [1:1.00] +; HASWELL-NEXT: fucomp %st(3) # sched: [1:1.00] +; HASWELL-NEXT: fucompp # sched: [1:0.50] +; HASWELL-NEXT: #NO_APP +; HASWELL-NEXT: retl # sched: [5:0.50] +; +; BROADWELL-LABEL: test_fucom_fucomp_fucompp: +; BROADWELL: # BB#0: +; BROADWELL-NEXT: #APP +; BROADWELL-NEXT: fucom %st(1) # sched: [1:1.00] +; BROADWELL-NEXT: fucom %st(3) # sched: [1:1.00] +; BROADWELL-NEXT: fucomp %st(1) # sched: [1:1.00] +; BROADWELL-NEXT: fucomp %st(3) # sched: [1:1.00] +; BROADWELL-NEXT: fucompp # sched: [3:1.00] +; BROADWELL-NEXT: #NO_APP +; BROADWELL-NEXT: retl # sched: [6:0.50] +; +; SKYLAKE-LABEL: test_fucom_fucomp_fucompp: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: #APP +; SKYLAKE-NEXT: fucom %st(1) # sched: [1:1.00] +; SKYLAKE-NEXT: fucom %st(3) # sched: [1:1.00] +; SKYLAKE-NEXT: fucomp %st(1) # sched: [1:1.00] +; SKYLAKE-NEXT: fucomp %st(3) # sched: [1:1.00] +; SKYLAKE-NEXT: fucompp # sched: [3:1.00] +; SKYLAKE-NEXT: #NO_APP +; SKYLAKE-NEXT: retl # sched: [6:0.50] +; +; SKX-LABEL: test_fucom_fucomp_fucompp: +; SKX: # BB#0: +; SKX-NEXT: #APP +; SKX-NEXT: fucom %st(1) # sched: [1:1.00] +; SKX-NEXT: fucom %st(3) # sched: [1:1.00] +; SKX-NEXT: fucomp %st(1) # sched: [1:1.00] +; SKX-NEXT: fucomp %st(3) # sched: [1:1.00] +; SKX-NEXT: fucompp # sched: [3:1.00] +; SKX-NEXT: #NO_APP +; SKX-NEXT: retl # sched: [6:0.50] +; +; BTVER2-LABEL: test_fucom_fucomp_fucompp: +; BTVER2: # BB#0: +; BTVER2-NEXT: #APP +; BTVER2-NEXT: fucom %st(1) # sched: [3:1.00] +; BTVER2-NEXT: fucom %st(3) # sched: [3:1.00] +; BTVER2-NEXT: fucomp %st(1) # sched: [3:1.00] +; BTVER2-NEXT: fucomp %st(3) # sched: [3:1.00] +; BTVER2-NEXT: fucompp # sched: [3:1.00] +; BTVER2-NEXT: #NO_APP +; BTVER2-NEXT: retl # sched: [4:1.00] +; +; ZNVER1-LABEL: test_fucom_fucomp_fucompp: +; ZNVER1: # BB#0: +; ZNVER1-NEXT: #APP +; ZNVER1-NEXT: fucom %st(1) # sched: [1:1.00] +; ZNVER1-NEXT: fucom %st(3) # sched: [1:1.00] +; ZNVER1-NEXT: fucomp %st(1) # sched: [1:1.00] +; ZNVER1-NEXT: fucomp %st(3) # sched: [1:1.00] +; ZNVER1-NEXT: fucompp # sched: [1:1.00] +; ZNVER1-NEXT: #NO_APP +; ZNVER1-NEXT: retl # sched: [1:0.50] + tail call void asm sideeffect "fucom \0A\09 fucom %st(3) \0A\09 fucomp \0A\09 fucomp %st(3) \0A\09 fucompp", ""() nounwind + ret void +} + +define void @test_fucomi_fucomip() optsize { +; GENERIC-LABEL: test_fucomi_fucomip: +; GENERIC: # BB#0: +; GENERIC-NEXT: #APP +; GENERIC-NEXT: fucomi %st(3) +; GENERIC-NEXT: fucompi %st(3) +; GENERIC-NEXT: #NO_APP +; GENERIC-NEXT: retl +; +; ATOM-LABEL: test_fucomi_fucomip: +; ATOM: # BB#0: +; ATOM-NEXT: #APP +; ATOM-NEXT: fucomi %st(3) # sched: [9:4.50] +; ATOM-NEXT: fucompi %st(3) # sched: [9:4.50] +; ATOM-NEXT: #NO_APP +; ATOM-NEXT: retl # sched: [79:39.50] +; +; SLM-LABEL: test_fucomi_fucomip: +; SLM: # BB#0: +; SLM-NEXT: #APP +; SLM-NEXT: fucomi %st(3) # sched: [3:1.00] +; SLM-NEXT: fucompi %st(3) # sched: [3:1.00] +; SLM-NEXT: #NO_APP +; SLM-NEXT: retl # sched: [4:1.00] +; +; SANDY-LABEL: test_fucomi_fucomip: +; SANDY: # BB#0: +; SANDY-NEXT: #APP +; SANDY-NEXT: fucomi %st(3) # sched: [3:1.00] +; SANDY-NEXT: fucompi %st(3) # sched: [3:1.00] +; SANDY-NEXT: #NO_APP +; SANDY-NEXT: retl # sched: [5:1.00] +; +; HASWELL-LABEL: test_fucomi_fucomip: +; HASWELL: # BB#0: +; HASWELL-NEXT: #APP +; HASWELL-NEXT: fucomi %st(3) # sched: [1:0.50] +; HASWELL-NEXT: fucompi %st(3) # sched: [1:0.50] +; HASWELL-NEXT: #NO_APP +; HASWELL-NEXT: retl # sched: [5:0.50] +; +; BROADWELL-LABEL: test_fucomi_fucomip: +; BROADWELL: # BB#0: +; BROADWELL-NEXT: #APP +; BROADWELL-NEXT: fucomi %st(3) # sched: [3:1.00] +; BROADWELL-NEXT: fucompi %st(3) # sched: [3:1.00] +; BROADWELL-NEXT: #NO_APP +; BROADWELL-NEXT: retl # sched: [6:0.50] +; +; SKYLAKE-LABEL: test_fucomi_fucomip: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: #APP +; SKYLAKE-NEXT: fucomi %st(3) # sched: [3:1.00] +; SKYLAKE-NEXT: fucompi %st(3) # sched: [3:1.00] +; SKYLAKE-NEXT: #NO_APP +; SKYLAKE-NEXT: retl # sched: [6:0.50] +; +; SKX-LABEL: test_fucomi_fucomip: +; SKX: # BB#0: +; SKX-NEXT: #APP +; SKX-NEXT: fucomi %st(3) # sched: [3:1.00] +; SKX-NEXT: fucompi %st(3) # sched: [3:1.00] +; SKX-NEXT: #NO_APP +; SKX-NEXT: retl # sched: [6:0.50] +; +; BTVER2-LABEL: test_fucomi_fucomip: +; BTVER2: # BB#0: +; BTVER2-NEXT: #APP +; BTVER2-NEXT: fucomi %st(3) # sched: [3:1.00] +; BTVER2-NEXT: fucompi %st(3) # sched: [3:1.00] +; BTVER2-NEXT: #NO_APP +; BTVER2-NEXT: retl # sched: [4:1.00] +; +; ZNVER1-LABEL: test_fucomi_fucomip: +; ZNVER1: # BB#0: +; ZNVER1-NEXT: #APP +; ZNVER1-NEXT: fucomi %st(3) # sched: [9:0.50] +; ZNVER1-NEXT: fucompi %st(3) # sched: [9:0.50] +; ZNVER1-NEXT: #NO_APP +; ZNVER1-NEXT: retl # sched: [1:0.50] + tail call void asm sideeffect "fucomi %st(3) \0A\09 fucomip %st(3)", ""() nounwind + ret void +} + +define void @test_fwait() optsize { +; GENERIC-LABEL: test_fwait: +; GENERIC: # BB#0: +; GENERIC-NEXT: #APP +; GENERIC-NEXT: wait +; GENERIC-NEXT: #NO_APP +; GENERIC-NEXT: retl +; +; ATOM-LABEL: test_fwait: +; ATOM: # BB#0: +; ATOM-NEXT: #APP +; ATOM-NEXT: wait # sched: [1:0.50] +; ATOM-NEXT: #NO_APP +; ATOM-NEXT: retl # sched: [79:39.50] +; +; SLM-LABEL: test_fwait: +; SLM: # BB#0: +; SLM-NEXT: #APP +; SLM-NEXT: wait # sched: [100:1.00] +; SLM-NEXT: #NO_APP +; SLM-NEXT: retl # sched: [4:1.00] +; +; SANDY-LABEL: test_fwait: +; SANDY: # BB#0: +; SANDY-NEXT: #APP +; SANDY-NEXT: wait # sched: [100:0.33] +; SANDY-NEXT: #NO_APP +; SANDY-NEXT: retl # sched: [5:1.00] +; +; HASWELL-LABEL: test_fwait: +; HASWELL: # BB#0: +; HASWELL-NEXT: #APP +; HASWELL-NEXT: wait # sched: [1:0.50] +; HASWELL-NEXT: #NO_APP +; HASWELL-NEXT: retl # sched: [5:0.50] +; +; BROADWELL-LABEL: test_fwait: +; BROADWELL: # BB#0: +; BROADWELL-NEXT: #APP +; BROADWELL-NEXT: wait # sched: [2:0.50] +; BROADWELL-NEXT: #NO_APP +; BROADWELL-NEXT: retl # sched: [6:0.50] +; +; SKYLAKE-LABEL: test_fwait: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: #APP +; SKYLAKE-NEXT: wait # sched: [2:0.50] +; SKYLAKE-NEXT: #NO_APP +; SKYLAKE-NEXT: retl # sched: [6:0.50] +; +; SKX-LABEL: test_fwait: +; SKX: # BB#0: +; SKX-NEXT: #APP +; SKX-NEXT: wait # sched: [2:0.50] +; SKX-NEXT: #NO_APP +; SKX-NEXT: retl # sched: [6:0.50] +; +; BTVER2-LABEL: test_fwait: +; BTVER2: # BB#0: +; BTVER2-NEXT: #APP +; BTVER2-NEXT: wait # sched: [100:0.17] +; BTVER2-NEXT: #NO_APP +; BTVER2-NEXT: retl # sched: [4:1.00] +; +; ZNVER1-LABEL: test_fwait: +; ZNVER1: # BB#0: +; ZNVER1-NEXT: #APP +; ZNVER1-NEXT: wait # sched: [1:1.00] +; ZNVER1-NEXT: #NO_APP +; ZNVER1-NEXT: retl # sched: [1:0.50] + tail call void asm sideeffect "fwait", ""() nounwind + ret void +} + +define void @test_fxam() optsize { +; GENERIC-LABEL: test_fxam: +; GENERIC: # BB#0: +; GENERIC-NEXT: #APP +; GENERIC-NEXT: fxam +; GENERIC-NEXT: #NO_APP +; GENERIC-NEXT: retl +; +; ATOM-LABEL: test_fxam: +; ATOM: # BB#0: +; ATOM-NEXT: #APP +; ATOM-NEXT: fxam # sched: [1:1.00] +; ATOM-NEXT: #NO_APP +; ATOM-NEXT: retl # sched: [79:39.50] +; +; SLM-LABEL: test_fxam: +; SLM: # BB#0: +; SLM-NEXT: #APP +; SLM-NEXT: fxam # sched: [100:1.00] +; SLM-NEXT: #NO_APP +; SLM-NEXT: retl # sched: [4:1.00] +; +; SANDY-LABEL: test_fxam: +; SANDY: # BB#0: +; SANDY-NEXT: #APP +; SANDY-NEXT: fxam # sched: [100:0.33] +; SANDY-NEXT: #NO_APP +; SANDY-NEXT: retl # sched: [5:1.00] +; +; HASWELL-LABEL: test_fxam: +; HASWELL: # BB#0: +; HASWELL-NEXT: #APP +; HASWELL-NEXT: fxam # sched: [1:2.00] +; HASWELL-NEXT: #NO_APP +; HASWELL-NEXT: retl # sched: [5:0.50] +; +; BROADWELL-LABEL: test_fxam: +; BROADWELL: # BB#0: +; BROADWELL-NEXT: #APP +; BROADWELL-NEXT: fxam # sched: [100:0.25] +; BROADWELL-NEXT: #NO_APP +; BROADWELL-NEXT: retl # sched: [6:0.50] +; +; SKYLAKE-LABEL: test_fxam: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: #APP +; SKYLAKE-NEXT: fxam # sched: [100:0.25] +; SKYLAKE-NEXT: #NO_APP +; SKYLAKE-NEXT: retl # sched: [6:0.50] +; +; SKX-LABEL: test_fxam: +; SKX: # BB#0: +; SKX-NEXT: #APP +; SKX-NEXT: fxam # sched: [100:0.25] +; SKX-NEXT: #NO_APP +; SKX-NEXT: retl # sched: [6:0.50] +; +; BTVER2-LABEL: test_fxam: +; BTVER2: # BB#0: +; BTVER2-NEXT: #APP +; BTVER2-NEXT: fxam # sched: [100:0.17] +; BTVER2-NEXT: #NO_APP +; BTVER2-NEXT: retl # sched: [4:1.00] +; +; ZNVER1-LABEL: test_fxam: +; ZNVER1: # BB#0: +; ZNVER1-NEXT: #APP +; ZNVER1-NEXT: fxam # sched: [1:1.00] +; ZNVER1-NEXT: #NO_APP +; ZNVER1-NEXT: retl # sched: [1:0.50] + tail call void asm sideeffect "fxam", ""() nounwind + ret void +} + +define void @test_fxch() optsize { +; GENERIC-LABEL: test_fxch: +; GENERIC: # BB#0: +; GENERIC-NEXT: #APP +; GENERIC-NEXT: fxch %st(1) +; GENERIC-NEXT: fxch %st(3) +; GENERIC-NEXT: #NO_APP +; GENERIC-NEXT: retl +; +; ATOM-LABEL: test_fxch: +; ATOM: # BB#0: +; ATOM-NEXT: #APP +; ATOM-NEXT: fxch %st(1) # sched: [1:1.00] +; ATOM-NEXT: fxch %st(3) # sched: [1:1.00] +; ATOM-NEXT: #NO_APP +; ATOM-NEXT: retl # sched: [79:39.50] +; +; SLM-LABEL: test_fxch: +; SLM: # BB#0: +; SLM-NEXT: #APP +; SLM-NEXT: fxch %st(1) # sched: [1:0.50] +; SLM-NEXT: fxch %st(3) # sched: [1:0.50] +; SLM-NEXT: #NO_APP +; SLM-NEXT: retl # sched: [4:1.00] +; +; SANDY-LABEL: test_fxch: +; SANDY: # BB#0: +; SANDY-NEXT: #APP +; SANDY-NEXT: fxch %st(1) # sched: [1:0.33] +; SANDY-NEXT: fxch %st(3) # sched: [1:0.33] +; SANDY-NEXT: #NO_APP +; SANDY-NEXT: retl # sched: [5:1.00] +; +; HASWELL-LABEL: test_fxch: +; HASWELL: # BB#0: +; HASWELL-NEXT: #APP +; HASWELL-NEXT: fxch %st(1) # sched: [17:4.00] +; HASWELL-NEXT: fxch %st(3) # sched: [17:4.00] +; HASWELL-NEXT: #NO_APP +; HASWELL-NEXT: retl # sched: [5:0.50] +; +; BROADWELL-LABEL: test_fxch: +; BROADWELL: # BB#0: +; BROADWELL-NEXT: #APP +; BROADWELL-NEXT: fxch %st(1) # sched: [14:4.00] +; BROADWELL-NEXT: fxch %st(3) # sched: [14:4.00] +; BROADWELL-NEXT: #NO_APP +; BROADWELL-NEXT: retl # sched: [6:0.50] +; +; SKYLAKE-LABEL: test_fxch: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: #APP +; SKYLAKE-NEXT: fxch %st(1) # sched: [17:4.00] +; SKYLAKE-NEXT: fxch %st(3) # sched: [17:4.00] +; SKYLAKE-NEXT: #NO_APP +; SKYLAKE-NEXT: retl # sched: [6:0.50] +; +; SKX-LABEL: test_fxch: +; SKX: # BB#0: +; SKX-NEXT: #APP +; SKX-NEXT: fxch %st(1) # sched: [17:4.00] +; SKX-NEXT: fxch %st(3) # sched: [17:4.00] +; SKX-NEXT: #NO_APP +; SKX-NEXT: retl # sched: [6:0.50] +; +; BTVER2-LABEL: test_fxch: +; BTVER2: # BB#0: +; BTVER2-NEXT: #APP +; BTVER2-NEXT: fxch %st(1) # sched: [1:0.17] +; BTVER2-NEXT: fxch %st(3) # sched: [1:0.17] +; BTVER2-NEXT: #NO_APP +; BTVER2-NEXT: retl # sched: [4:1.00] +; +; ZNVER1-LABEL: test_fxch: +; ZNVER1: # BB#0: +; ZNVER1-NEXT: #APP +; ZNVER1-NEXT: fxch %st(1) # sched: [1:0.25] +; ZNVER1-NEXT: fxch %st(3) # sched: [1:0.25] +; ZNVER1-NEXT: #NO_APP +; ZNVER1-NEXT: retl # sched: [1:0.50] + tail call void asm sideeffect "fxch \0A\09 fxch %st(3)", ""() nounwind + ret void +} + +define void @test_fxrstor_fxsave(i8* %a0) optsize { +; GENERIC-LABEL: test_fxrstor_fxsave: +; GENERIC: # BB#0: +; GENERIC-NEXT: movl {{[0-9]+}}(%esp), %eax +; GENERIC-NEXT: #APP +; GENERIC-NEXT: fxrstor (%eax) +; GENERIC-NEXT: fxsave (%eax) +; GENERIC-NEXT: #NO_APP +; GENERIC-NEXT: retl +; +; ATOM-LABEL: test_fxrstor_fxsave: +; ATOM: # BB#0: +; ATOM-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [1:1.00] +; ATOM-NEXT: #APP +; ATOM-NEXT: fxrstor (%eax) # sched: [141:70.50] +; ATOM-NEXT: fxsave (%eax) # sched: [140:70.00] +; ATOM-NEXT: #NO_APP +; ATOM-NEXT: retl # sched: [79:39.50] +; +; SLM-LABEL: test_fxrstor_fxsave: +; SLM: # BB#0: +; SLM-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [3:1.00] +; SLM-NEXT: #APP +; SLM-NEXT: fxrstor (%eax) # sched: [100:1.00] +; SLM-NEXT: fxsave (%eax) # sched: [100:1.00] +; SLM-NEXT: #NO_APP +; SLM-NEXT: retl # sched: [4:1.00] +; +; SANDY-LABEL: test_fxrstor_fxsave: +; SANDY: # BB#0: +; SANDY-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50] +; SANDY-NEXT: #APP +; SANDY-NEXT: fxrstor (%eax) # sched: [5:2.00] +; SANDY-NEXT: fxsave (%eax) # sched: [100:0.33] +; SANDY-NEXT: #NO_APP +; SANDY-NEXT: retl # sched: [5:1.00] +; +; HASWELL-LABEL: test_fxrstor_fxsave: +; HASWELL: # BB#0: +; HASWELL-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [1:0.50] +; HASWELL-NEXT: #APP +; HASWELL-NEXT: fxrstor (%eax) # sched: [59:16.50] +; HASWELL-NEXT: fxsave (%eax) # sched: [100:0.25] +; HASWELL-NEXT: #NO_APP +; HASWELL-NEXT: retl # sched: [5:0.50] +; +; BROADWELL-LABEL: test_fxrstor_fxsave: +; BROADWELL: # BB#0: +; BROADWELL-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50] +; BROADWELL-NEXT: #APP +; BROADWELL-NEXT: fxrstor (%eax) # sched: [63:16.50] +; BROADWELL-NEXT: fxsave (%eax) # sched: [100:0.25] +; BROADWELL-NEXT: #NO_APP +; BROADWELL-NEXT: retl # sched: [6:0.50] +; +; SKYLAKE-LABEL: test_fxrstor_fxsave: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50] +; SKYLAKE-NEXT: #APP +; SKYLAKE-NEXT: fxrstor (%eax) # sched: [63:16.50] +; SKYLAKE-NEXT: fxsave (%eax) # sched: [100:0.25] +; SKYLAKE-NEXT: #NO_APP +; SKYLAKE-NEXT: retl # sched: [6:0.50] +; +; SKX-LABEL: test_fxrstor_fxsave: +; SKX: # BB#0: +; SKX-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:0.50] +; SKX-NEXT: #APP +; SKX-NEXT: fxrstor (%eax) # sched: [63:16.50] +; SKX-NEXT: fxsave (%eax) # sched: [100:0.25] +; SKX-NEXT: #NO_APP +; SKX-NEXT: retl # sched: [6:0.50] +; +; BTVER2-LABEL: test_fxrstor_fxsave: +; BTVER2: # BB#0: +; BTVER2-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [5:1.00] +; BTVER2-NEXT: #APP +; BTVER2-NEXT: fxrstor (%eax) # sched: [100:0.17] +; BTVER2-NEXT: fxsave (%eax) # sched: [100:0.17] +; BTVER2-NEXT: #NO_APP +; BTVER2-NEXT: retl # sched: [4:1.00] +; +; ZNVER1-LABEL: test_fxrstor_fxsave: +; ZNVER1: # BB#0: +; ZNVER1-NEXT: movl {{[0-9]+}}(%esp), %eax # sched: [8:0.50] +; ZNVER1-NEXT: #APP +; ZNVER1-NEXT: fxrstor (%eax) # sched: [100:?] +; ZNVER1-NEXT: fxsave (%eax) # sched: [100:?] +; ZNVER1-NEXT: #NO_APP +; ZNVER1-NEXT: retl # sched: [1:0.50] + tail call void asm sideeffect "fxrstor $0 \0A\09 fxsave $0", "*m"(i8 *%a0) nounwind + ret void +} + +define void @test_fxtract() optsize { +; GENERIC-LABEL: test_fxtract: +; GENERIC: # BB#0: +; GENERIC-NEXT: #APP +; GENERIC-NEXT: fxtract +; GENERIC-NEXT: #NO_APP +; GENERIC-NEXT: retl +; +; ATOM-LABEL: test_fxtract: +; ATOM: # BB#0: +; ATOM-NEXT: #APP +; ATOM-NEXT: fxtract # sched: [25:12.50] +; ATOM-NEXT: #NO_APP +; ATOM-NEXT: retl # sched: [79:39.50] +; +; SLM-LABEL: test_fxtract: +; SLM: # BB#0: +; SLM-NEXT: #APP +; SLM-NEXT: fxtract # sched: [100:1.00] +; SLM-NEXT: #NO_APP +; SLM-NEXT: retl # sched: [4:1.00] +; +; SANDY-LABEL: test_fxtract: +; SANDY: # BB#0: +; SANDY-NEXT: #APP +; SANDY-NEXT: fxtract # sched: [100:0.33] +; SANDY-NEXT: #NO_APP +; SANDY-NEXT: retl # sched: [5:1.00] +; +; HASWELL-LABEL: test_fxtract: +; HASWELL: # BB#0: +; HASWELL-NEXT: #APP +; HASWELL-NEXT: fxtract # sched: [15:?] +; HASWELL-NEXT: #NO_APP +; HASWELL-NEXT: retl # sched: [5:0.50] +; +; BROADWELL-LABEL: test_fxtract: +; BROADWELL: # BB#0: +; BROADWELL-NEXT: #APP +; BROADWELL-NEXT: fxtract # sched: [100:0.25] +; BROADWELL-NEXT: #NO_APP +; BROADWELL-NEXT: retl # sched: [6:0.50] +; +; SKYLAKE-LABEL: test_fxtract: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: #APP +; SKYLAKE-NEXT: fxtract # sched: [100:0.25] +; SKYLAKE-NEXT: #NO_APP +; SKYLAKE-NEXT: retl # sched: [6:0.50] +; +; SKX-LABEL: test_fxtract: +; SKX: # BB#0: +; SKX-NEXT: #APP +; SKX-NEXT: fxtract # sched: [100:0.25] +; SKX-NEXT: #NO_APP +; SKX-NEXT: retl # sched: [6:0.50] +; +; BTVER2-LABEL: test_fxtract: +; BTVER2: # BB#0: +; BTVER2-NEXT: #APP +; BTVER2-NEXT: fxtract # sched: [100:0.17] +; BTVER2-NEXT: #NO_APP +; BTVER2-NEXT: retl # sched: [4:1.00] +; +; ZNVER1-LABEL: test_fxtract: +; ZNVER1: # BB#0: +; ZNVER1-NEXT: #APP +; ZNVER1-NEXT: fxtract # sched: [100:?] +; ZNVER1-NEXT: #NO_APP +; ZNVER1-NEXT: retl # sched: [1:0.50] + tail call void asm sideeffect "fxtract", ""() nounwind + ret void +} + +define void @test_fyl2x() optsize { +; GENERIC-LABEL: test_fyl2x: +; GENERIC: # BB#0: +; GENERIC-NEXT: #APP +; GENERIC-NEXT: fyl2x +; GENERIC-NEXT: #NO_APP +; GENERIC-NEXT: retl +; +; ATOM-LABEL: test_fyl2x: +; ATOM: # BB#0: +; ATOM-NEXT: #APP +; ATOM-NEXT: fyl2x # sched: [146:73.00] +; ATOM-NEXT: #NO_APP +; ATOM-NEXT: retl # sched: [79:39.50] +; +; SLM-LABEL: test_fyl2x: +; SLM: # BB#0: +; SLM-NEXT: #APP +; SLM-NEXT: fyl2x # sched: [100:1.00] +; SLM-NEXT: #NO_APP +; SLM-NEXT: retl # sched: [4:1.00] +; +; SANDY-LABEL: test_fyl2x: +; SANDY: # BB#0: +; SANDY-NEXT: #APP +; SANDY-NEXT: fyl2x # sched: [100:0.33] +; SANDY-NEXT: #NO_APP +; SANDY-NEXT: retl # sched: [5:1.00] +; +; HASWELL-LABEL: test_fyl2x: +; HASWELL: # BB#0: +; HASWELL-NEXT: #APP +; HASWELL-NEXT: fyl2x # sched: [100:0.25] +; HASWELL-NEXT: #NO_APP +; HASWELL-NEXT: retl # sched: [5:0.50] +; +; BROADWELL-LABEL: test_fyl2x: +; BROADWELL: # BB#0: +; BROADWELL-NEXT: #APP +; BROADWELL-NEXT: fyl2x # sched: [100:0.25] +; BROADWELL-NEXT: #NO_APP +; BROADWELL-NEXT: retl # sched: [6:0.50] +; +; SKYLAKE-LABEL: test_fyl2x: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: #APP +; SKYLAKE-NEXT: fyl2x # sched: [100:0.25] +; SKYLAKE-NEXT: #NO_APP +; SKYLAKE-NEXT: retl # sched: [6:0.50] +; +; SKX-LABEL: test_fyl2x: +; SKX: # BB#0: +; SKX-NEXT: #APP +; SKX-NEXT: fyl2x # sched: [100:0.25] +; SKX-NEXT: #NO_APP +; SKX-NEXT: retl # sched: [6:0.50] +; +; BTVER2-LABEL: test_fyl2x: +; BTVER2: # BB#0: +; BTVER2-NEXT: #APP +; BTVER2-NEXT: fyl2x # sched: [100:0.17] +; BTVER2-NEXT: #NO_APP +; BTVER2-NEXT: retl # sched: [4:1.00] +; +; ZNVER1-LABEL: test_fyl2x: +; ZNVER1: # BB#0: +; ZNVER1-NEXT: #APP +; ZNVER1-NEXT: fyl2x # sched: [100:?] +; ZNVER1-NEXT: #NO_APP +; ZNVER1-NEXT: retl # sched: [1:0.50] + tail call void asm sideeffect "fyl2x", ""() nounwind + ret void +} + +define void @test_fyl2xp1() optsize { +; GENERIC-LABEL: test_fyl2xp1: +; GENERIC: # BB#0: +; GENERIC-NEXT: #APP +; GENERIC-NEXT: fyl2xp1 +; GENERIC-NEXT: #NO_APP +; GENERIC-NEXT: retl +; +; ATOM-LABEL: test_fyl2xp1: +; ATOM: # BB#0: +; ATOM-NEXT: #APP +; ATOM-NEXT: fyl2xp1 # sched: [147:73.50] +; ATOM-NEXT: #NO_APP +; ATOM-NEXT: retl # sched: [79:39.50] +; +; SLM-LABEL: test_fyl2xp1: +; SLM: # BB#0: +; SLM-NEXT: #APP +; SLM-NEXT: fyl2xp1 # sched: [100:1.00] +; SLM-NEXT: #NO_APP +; SLM-NEXT: retl # sched: [4:1.00] +; +; SANDY-LABEL: test_fyl2xp1: +; SANDY: # BB#0: +; SANDY-NEXT: #APP +; SANDY-NEXT: fyl2xp1 # sched: [100:0.33] +; SANDY-NEXT: #NO_APP +; SANDY-NEXT: retl # sched: [5:1.00] +; +; HASWELL-LABEL: test_fyl2xp1: +; HASWELL: # BB#0: +; HASWELL-NEXT: #APP +; HASWELL-NEXT: fyl2xp1 # sched: [100:0.25] +; HASWELL-NEXT: #NO_APP +; HASWELL-NEXT: retl # sched: [5:0.50] +; +; BROADWELL-LABEL: test_fyl2xp1: +; BROADWELL: # BB#0: +; BROADWELL-NEXT: #APP +; BROADWELL-NEXT: fyl2xp1 # sched: [100:0.25] +; BROADWELL-NEXT: #NO_APP +; BROADWELL-NEXT: retl # sched: [6:0.50] +; +; SKYLAKE-LABEL: test_fyl2xp1: +; SKYLAKE: # BB#0: +; SKYLAKE-NEXT: #APP +; SKYLAKE-NEXT: fyl2xp1 # sched: [100:0.25] +; SKYLAKE-NEXT: #NO_APP +; SKYLAKE-NEXT: retl # sched: [6:0.50] +; +; SKX-LABEL: test_fyl2xp1: +; SKX: # BB#0: +; SKX-NEXT: #APP +; SKX-NEXT: fyl2xp1 # sched: [100:0.25] +; SKX-NEXT: #NO_APP +; SKX-NEXT: retl # sched: [6:0.50] +; +; BTVER2-LABEL: test_fyl2xp1: +; BTVER2: # BB#0: +; BTVER2-NEXT: #APP +; BTVER2-NEXT: fyl2xp1 # sched: [100:0.17] +; BTVER2-NEXT: #NO_APP +; BTVER2-NEXT: retl # sched: [4:1.00] +; +; ZNVER1-LABEL: test_fyl2xp1: +; ZNVER1: # BB#0: +; ZNVER1-NEXT: #APP +; ZNVER1-NEXT: fyl2xp1 # sched: [100:?] +; ZNVER1-NEXT: #NO_APP +; ZNVER1-NEXT: retl # sched: [1:0.50] + tail call void asm sideeffect "fyl2xp1", ""() nounwind + ret void +}