; This tries to be a comprehensive test of f32 and f64 arith operations. ; The CHECK lines are only checking for basic instruction patterns ; that should be present regardless of the optimization level, so ; there are no special OPTM1 match lines. ; RUN: %if --need=target_X8632 --command %p2i --filetype=obj --disassemble \ ; RUN: --target x8632 -i %s --args -O2 \ ; RUN: | %if --need=target_X8632 --command FileCheck %s ; RUN: %if --need=target_X8632 --command %p2i --filetype=obj --disassemble \ ; RUN: --target x8632 -i %s --args -Om1 \ ; RUN: | %if --need=target_X8632 --command FileCheck %s ; RUN: %if --need=target_ARM32 \ ; RUN: --command %p2i --filetype=obj --disassemble --target arm32 \ ; RUN: -i %s --args -O2 \ ; RUN: | %if --need=target_ARM32 \ ; RUN: --command FileCheck --check-prefix ARM32 %s ; RUN: %if --need=target_ARM32 \ ; RUN: --command %p2i --filetype=obj --disassemble --target arm32 \ ; RUN: -i %s --args -Om1 \ ; RUN: | %if --need=target_ARM32 \ ; RUN: --command FileCheck --check-prefix ARM32 %s ; RUN: %if --need=target_MIPS32 --need=allow_dump \ ; RUN: --command %p2i --filetype=asm --assemble --disassemble --target \ ; RUN: mips32 -i %s --args -O2 \ ; RUN: | %if --need=target_MIPS32 --need=allow_dump \ ; RUN: --command FileCheck --check-prefix MIPS32 %s ; RUN: %if --need=target_MIPS32 --need=allow_dump \ ; RUN: --command %p2i --filetype=asm --assemble --disassemble --target \ ; RUN: mips32 -i %s --args -Om1 \ ; RUN: | %if --need=target_MIPS32 --need=allow_dump \ ; RUN: --command FileCheck --check-prefix MIPS32 %s define internal float @addFloat(float %a, float %b) { entry: %add = fadd float %a, %b ret float %add } ; CHECK-LABEL: addFloat ; CHECK: addss ; CHECK: fld ; ARM32-LABEL: addFloat ; ARM32: vadd.f32 s{{[0-9]+}}, s ; MIPS32-LABEL: addFloat ; MIPS32: add.s define internal double @addDouble(double %a, double %b) { entry: %add = fadd double %a, %b ret double %add } ; CHECK-LABEL: addDouble ; CHECK: addsd ; CHECK: fld ; ARM32-LABEL: addDouble ; ARM32: vadd.f64 d{{[0-9]+}}, d ; MIPS32-LABEL: addDouble ; MIPS32: add.d define internal float @subFloat(float %a, float %b) { entry: %sub = fsub float %a, %b ret float %sub } ; CHECK-LABEL: subFloat ; CHECK: subss ; CHECK: fld ; ARM32-LABEL: subFloat ; ARM32: vsub.f32 s{{[0-9]+}}, s ; MIPS32-LABEL: subFloat ; MIPS32: sub.s define internal double @subDouble(double %a, double %b) { entry: %sub = fsub double %a, %b ret double %sub } ; CHECK-LABEL: subDouble ; CHECK: subsd ; CHECK: fld ; ARM32-LABEL: subDouble ; ARM32: vsub.f64 d{{[0-9]+}}, d ; MIPS32-LABEL: subDouble ; MIPS32: sub.d define internal float @mulFloat(float %a, float %b) { entry: %mul = fmul float %a, %b ret float %mul } ; CHECK-LABEL: mulFloat ; CHECK: mulss ; CHECK: fld ; ARM32-LABEL: mulFloat ; ARM32: vmul.f32 s{{[0-9]+}}, s ; MIPS32-LABEL: mulFloat ; MIPS32: mul.s define internal double @mulDouble(double %a, double %b) { entry: %mul = fmul double %a, %b ret double %mul } ; CHECK-LABEL: mulDouble ; CHECK: mulsd ; CHECK: fld ; ARM32-LABEL: mulDouble ; ARM32: vmul.f64 d{{[0-9]+}}, d ; MIPS32-LABEL: mulDouble ; MIPS32: mul.d define internal float @divFloat(float %a, float %b) { entry: %div = fdiv float %a, %b ret float %div } ; CHECK-LABEL: divFloat ; CHECK: divss ; CHECK: fld ; ARM32-LABEL: divFloat ; ARM32: vdiv.f32 s{{[0-9]+}}, s ; MIPS32-LABEL: divFloat ; MIPS32: div.s define internal double @divDouble(double %a, double %b) { entry: %div = fdiv double %a, %b ret double %div } ; CHECK-LABEL: divDouble ; CHECK: divsd ; CHECK: fld ; ARM32-LABEL: divDouble ; ARM32: vdiv.f64 d{{[0-9]+}}, d ; MIPS32-LABEL: divDouble ; MIPS32: div.d define internal float @remFloat(float %a, float %b) { entry: %div = frem float %a, %b ret float %div } ; CHECK-LABEL: remFloat ; CHECK: call {{.*}} R_{{.*}} fmodf ; ARM32-LABEL: remFloat ; ARM32: bl {{.*}} fmodf ; MIPS32-LABEL: remFloat ; MIPS32: jal {{.*}} fmodf define internal double @remDouble(double %a, double %b) { entry: %div = frem double %a, %b ret double %div } ; CHECK-LABEL: remDouble ; CHECK: call {{.*}} R_{{.*}} fmod ; ARM32-LABEL: remDouble ; ARM32: bl {{.*}} fmod ; MIPS32-LABEL: remDouble ; MIPS32: jal {{.*}} fmod