| Index: tests_lit/assembler/mips32/encoding_test_arith_fp.ll
|
| diff --git a/tests_lit/assembler/mips32/encoding_test_arith_fp.ll b/tests_lit/assembler/mips32/encoding_test_arith_fp.ll
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..c29dc2230e67b6eb93b3f3bddde51fff4263b992
|
| --- /dev/null
|
| +++ b/tests_lit/assembler/mips32/encoding_test_arith_fp.ll
|
| @@ -0,0 +1,472 @@
|
| +; Test encoding of MIPS32 floating point arithmetic instructions
|
| +
|
| +; REQUIRES: allow_dump
|
| +
|
| +; Compile using standalone assembler.
|
| +; RUN: %p2i --filetype=asm -i %s --target=mips32 --args -O2 \
|
| +; RUN: --allow-externally-defined-symbols --skip-unimplemented \
|
| +; RUN: | FileCheck %s --check-prefix=ASM
|
| +
|
| +; Show bytes in assembled standalone code.
|
| +; RUN: %p2i --filetype=asm -i %s --target=mips32 --assemble --disassemble \
|
| +; RUN: --args -O2 --allow-externally-defined-symbols --skip-unimplemented \
|
| +; RUN: | FileCheck %s --check-prefix=DIS
|
| +
|
| +; Compile using integrated assembler.
|
| +; RUN: %p2i --filetype=iasm -i %s --target=mips32 --args -O2 \
|
| +; RUN: --allow-externally-defined-symbols --skip-unimplemented \
|
| +; RUN: | FileCheck %s --check-prefix=IASM
|
| +
|
| +; Show bytes in assembled integrated code.
|
| +; RUN: %p2i --filetype=iasm -i %s --target=mips32 --assemble --disassemble \
|
| +; RUN: --args -O2 --allow-externally-defined-symbols --skip-unimplemented \
|
| +; RUN: | FileCheck %s --check-prefix=DIS
|
| +
|
| +declare float @llvm.fabs.f32(float)
|
| +declare double @llvm.fabs.f64(double)
|
| +declare float @llvm.sqrt.f32(float)
|
| +declare double @llvm.sqrt.f64(double)
|
| +
|
| +define internal float @encAbsFloat(float %a) {
|
| +entry:
|
| + %c = call float @llvm.fabs.f32(float %a)
|
| + ret float %c
|
| +}
|
| +
|
| +; ASM-LABEL: encAbsFloat
|
| +; ASM-NEXT: .LencAbsFloat$entry:
|
| +; ASM-NEXT: abs.s $f12, $f12
|
| +; ASM-NEXT: mov.s $f0, $f12
|
| +; ASM-NEXT: jr $ra
|
| +
|
| +; DIS-LABEL: 00000000 <encAbsFloat>:
|
| +; DIS-NEXT: 0: 46006305 abs.s $f12,$f12
|
| +; DIS-NEXT: 4: 46006006 mov.s $f0,$f12
|
| +; DIS-NEXT: 8: 03e00008 jr ra
|
| +; DIS-NEXT: c: 00000000 nop
|
| +
|
| +; IASM-LABEL: encAbsFloat:
|
| +; IASM-NEXT: .LencAbsFloat$entry:
|
| +; IASM-NEXT: .byte 0x5
|
| +; IASM-NEXT: .byte 0x63
|
| +; IASM-NEXT: .byte 0x0
|
| +; IASM-NEXT: .byte 0x46
|
| +; IASM-NEXT: .byte 0x6
|
| +; IASM-NEXT: .byte 0x60
|
| +; IASM-NEXT: .byte 0x0
|
| +; IASM-NEXT: .byte 0x46
|
| +; IASM-NEXT: .byte 0x8
|
| +; IASM-NEXT: .byte 0x0
|
| +; IASM-NEXT: .byte 0xe0
|
| +; IASM-NEXT: .byte 0x3
|
| +; IASM-NEXT: .byte 0x0
|
| +; IASM-NEXT: .byte 0x0
|
| +; IASM-NEXT: .byte 0x0
|
| +; IASM-NEXT: .byte 0x0
|
| +
|
| +define internal double @encAbsDouble(double %a) {
|
| +entry:
|
| + %c = call double @llvm.fabs.f64(double %a)
|
| + ret double %c
|
| +}
|
| +
|
| +; ASM-LABEL: encAbsDouble:
|
| +; ASM-NEXT: .LencAbsDouble$entry:
|
| +; ASM-NEXT: abs.d $f12, $f12
|
| +; ASM-NEXT: mov.d $f0, $f12
|
| +; ASM-NEXT: jr $ra
|
| +
|
| +; DIS-LABEL: 00000010 <encAbsDouble>:
|
| +; DIS-NEXT: 10: 46206305 abs.d $f12,$f12
|
| +; DIS-NEXT: 14: 46206006 mov.d $f0,$f12
|
| +; DIS-NEXT: 18: 03e00008 jr ra
|
| +; DIS-NEXT: 1c: 00000000 nop
|
| +
|
| +; IASM-LABEL: encAbsDouble:
|
| +; IASM-NEXT: .LencAbsDouble$entry:
|
| +; IASM-NEXT: .byte 0x5
|
| +; IASM-NEXT: .byte 0x63
|
| +; IASM-NEXT: .byte 0x20
|
| +; IASM-NEXT: .byte 0x46
|
| +; IASM-NEXT: .byte 0x6
|
| +; IASM-NEXT: .byte 0x60
|
| +; IASM-NEXT: .byte 0x20
|
| +; IASM-NEXT: .byte 0x46
|
| +; IASM-NEXT: .byte 0x8
|
| +; IASM-NEXT: .byte 0x0
|
| +; IASM-NEXT: .byte 0xe0
|
| +; IASM-NEXT: .byte 0x3
|
| +; IASM-NEXT: .byte 0x0
|
| +; IASM-NEXT: .byte 0x0
|
| +; IASM-NEXT: .byte 0x0
|
| +; IASM-NEXT: .byte 0x0
|
| +
|
| +define internal float @encAddFloat(float %a, float %b) {
|
| +entry:
|
| + %c = fadd float %a, %b
|
| + ret float %c
|
| +}
|
| +
|
| +; ASM-LABEL: encAddFloat
|
| +; ASM-NEXT: .LencAddFloat$entry:
|
| +; ASM-NEXT: add.s $f12, $f12, $f14
|
| +; ASM-NEXT: mov.s $f0, $f12
|
| +; ASM-NEXT: jr $ra
|
| +
|
| +; DIS-LABEL: 00000020 <encAddFloat>:
|
| +; DIS-NEXT: 20: 460e6300 add.s $f12,$f12,$f14
|
| +; DIS-NEXT: 24: 46006006 mov.s $f0,$f12
|
| +; DIS-NEXT: 28: 03e00008 jr ra
|
| +; DIS-NEXT: 2c: 00000000 nop
|
| +
|
| +; IASM-LABEL: encAddFloat:
|
| +; IASM-NEXT: .LencAddFloat$entry:
|
| +; IASM-NEXT: .byte 0x0
|
| +; IASM-NEXT: .byte 0x63
|
| +; IASM-NEXT: .byte 0xe
|
| +; IASM-NEXT: .byte 0x46
|
| +; IASM-NEXT: .byte 0x6
|
| +; IASM-NEXT: .byte 0x60
|
| +; IASM-NEXT: .byte 0x0
|
| +; IASM-NEXT: .byte 0x46
|
| +; IASM-NEXT: .byte 0x8
|
| +; IASM-NEXT: .byte 0x0
|
| +; IASM-NEXT: .byte 0xe0
|
| +; IASM-NEXT: .byte 0x3
|
| +; IASM-NEXT: .byte 0x0
|
| +; IASM-NEXT: .byte 0x0
|
| +; IASM-NEXT: .byte 0x0
|
| +; IASM-NEXT: .byte 0x0
|
| +
|
| +define internal double @encAddDouble(double %a, double %b) {
|
| +entry:
|
| + %c = fadd double %a, %b
|
| + ret double %c
|
| +}
|
| +
|
| +; ASM-LABEL: encAddDouble
|
| +; ASM-NEXT: .LencAddDouble$entry:
|
| +; ASM-NEXT: add.d $f12, $f12, $f14
|
| +; ASM-NEXT: mov.d $f0, $f12
|
| +; ASM-NEXT: jr $ra
|
| +
|
| +; DIS-LABEL: 00000030 <encAddDouble>:
|
| +; DIS-NEXT: 30: 462e6300 add.d $f12,$f12,$f14
|
| +; DIS-NEXT: 34: 46206006 mov.d $f0,$f12
|
| +; DIS-NEXT: 38: 03e00008 jr ra
|
| +; DIS-NEXT: 3c: 00000000 nop
|
| +
|
| +; IASM-LABEL: encAddDouble:
|
| +; IASM-NEXT: .LencAddDouble$entry:
|
| +; IASM-NEXT: .byte 0x0
|
| +; IASM-NEXT: .byte 0x63
|
| +; IASM-NEXT: .byte 0x2e
|
| +; IASM-NEXT: .byte 0x46
|
| +; IASM-NEXT: .byte 0x6
|
| +; IASM-NEXT: .byte 0x60
|
| +; IASM-NEXT: .byte 0x20
|
| +; IASM-NEXT: .byte 0x46
|
| +; IASM-NEXT: .byte 0x8
|
| +; IASM-NEXT: .byte 0x0
|
| +; IASM-NEXT: .byte 0xe0
|
| +; IASM-NEXT: .byte 0x3
|
| +; IASM-NEXT: .byte 0x0
|
| +; IASM-NEXT: .byte 0x0
|
| +; IASM-NEXT: .byte 0x0
|
| +; IASM-NEXT: .byte 0x0
|
| +
|
| +define internal float @encDivFloat(float %a, float %b) {
|
| +entry:
|
| + %c = fdiv float %a, %b
|
| + ret float %c
|
| +}
|
| +
|
| +; ASM-LABEL: encDivFloat
|
| +; ASM-NEXT: .LencDivFloat$entry:
|
| +; ASM-NEXT: div.s $f12, $f12, $f14
|
| +; ASM-NEXT: mov.s $f0, $f12
|
| +; ASM-NEXT: jr $ra
|
| +
|
| +; DIS-LABEL: 00000040 <encDivFloat>:
|
| +; DIS-NEXT: 40: 460e6303 div.s $f12,$f12,$f14
|
| +; DIS-NEXT: 44: 46006006 mov.s $f0,$f12
|
| +; DIS-NEXT: 48: 03e00008 jr ra
|
| +; DIS-NEXT: 4c: 00000000 nop
|
| +
|
| +; IASM-LABEL: encDivFloat:
|
| +; IASM-NEXT: .LencDivFloat$entry:
|
| +; IASM-NEXT: .byte 0x3
|
| +; IASM-NEXT: .byte 0x63
|
| +; IASM-NEXT: .byte 0xe
|
| +; IASM-NEXT: .byte 0x46
|
| +; IASM-NEXT: .byte 0x6
|
| +; IASM-NEXT: .byte 0x60
|
| +; IASM-NEXT: .byte 0x0
|
| +; IASM-NEXT: .byte 0x46
|
| +; IASM-NEXT: .byte 0x8
|
| +; IASM-NEXT: .byte 0x0
|
| +; IASM-NEXT: .byte 0xe0
|
| +; IASM-NEXT: .byte 0x3
|
| +; IASM-NEXT: .byte 0x0
|
| +; IASM-NEXT: .byte 0x0
|
| +; IASM-NEXT: .byte 0x0
|
| +; IASM-NEXT: .byte 0x0
|
| +
|
| +define internal double @encDivDouble(double %a, double %b) {
|
| +entry:
|
| + %c = fdiv double %a, %b
|
| + ret double %c
|
| +}
|
| +
|
| +; ASM-LABEL: encDivDouble
|
| +; ASM-NEXT: .LencDivDouble$entry:
|
| +; ASM-NEXT: div.d $f12, $f12, $f14
|
| +; ASM-NEXT: mov.d $f0, $f12
|
| +; ASM-NEXT: jr $ra
|
| +
|
| +; DIS-LABEL: 00000050 <encDivDouble>:
|
| +; DIS-NEXT: 50: 462e6303 div.d $f12,$f12,$f14
|
| +; DIS-NEXT: 54: 46206006 mov.d $f0,$f12
|
| +; DIS-NEXT: 58: 03e00008 jr ra
|
| +; DIS-NEXT: 5c: 00000000 nop
|
| +
|
| +; IASM-LABEL: encDivDouble:
|
| +; IASM-NEXT: .LencDivDouble$entry:
|
| +; IASM-NEXT: .byte 0x3
|
| +; IASM-NEXT: .byte 0x63
|
| +; IASM-NEXT: .byte 0x2e
|
| +; IASM-NEXT: .byte 0x46
|
| +; IASM-NEXT: .byte 0x6
|
| +; IASM-NEXT: .byte 0x60
|
| +; IASM-NEXT: .byte 0x20
|
| +; IASM-NEXT: .byte 0x46
|
| +; IASM-NEXT: .byte 0x8
|
| +; IASM-NEXT: .byte 0x0
|
| +; IASM-NEXT: .byte 0xe0
|
| +; IASM-NEXT: .byte 0x3
|
| +; IASM-NEXT: .byte 0x0
|
| +; IASM-NEXT: .byte 0x0
|
| +; IASM-NEXT: .byte 0x0
|
| +; IASM-NEXT: .byte 0x0
|
| +
|
| +define internal float @encMulFloat(float %a, float %b) {
|
| +entry:
|
| + %c = fmul float %a, %b
|
| + ret float %c
|
| +}
|
| +
|
| +; ASM-LABEL: encMulFloat
|
| +; ASM-NEXT: .LencMulFloat$entry:
|
| +; ASM-NEXT: mul.s $f12, $f12, $f14
|
| +; ASM-NEXT: mov.s $f0, $f12
|
| +; ASM-NEXT: jr $ra
|
| +
|
| +; DIS-LABEL: 00000060 <encMulFloat>:
|
| +; DIS-NEXT: 60: 460e6302 mul.s $f12,$f12,$f14
|
| +; DIS-NEXT: 64: 46006006 mov.s $f0,$f12
|
| +; DIS-NEXT: 68: 03e00008 jr ra
|
| +; DIS-NEXT: 6c: 00000000 nop
|
| +
|
| +; IASM-LABEL: encMulFloat:
|
| +; IASM-NEXT: .LencMulFloat$entry:
|
| +; IASM-NEXT: .byte 0x2
|
| +; IASM-NEXT: .byte 0x63
|
| +; IASM-NEXT: .byte 0xe
|
| +; IASM-NEXT: .byte 0x46
|
| +; IASM-NEXT: .byte 0x6
|
| +; IASM-NEXT: .byte 0x60
|
| +; IASM-NEXT: .byte 0x0
|
| +; IASM-NEXT: .byte 0x46
|
| +; IASM-NEXT: .byte 0x8
|
| +; IASM-NEXT: .byte 0x0
|
| +; IASM-NEXT: .byte 0xe0
|
| +; IASM-NEXT: .byte 0x3
|
| +; IASM-NEXT: .byte 0x0
|
| +; IASM-NEXT: .byte 0x0
|
| +; IASM-NEXT: .byte 0x0
|
| +; IASM-NEXT: .byte 0x0
|
| +
|
| +define internal double @encMulDouble(double %a, double %b) {
|
| +entry:
|
| + %c = fmul double %a, %b
|
| + ret double %c
|
| +}
|
| +
|
| +; ASM-LABEL: encMulDouble
|
| +; ASM-NEXT: .LencMulDouble$entry:
|
| +; ASM-NEXT: mul.d $f12, $f12, $f14
|
| +; ASM-NEXT: mov.d $f0, $f12
|
| +; ASM-NEXT: jr $ra
|
| +
|
| +; DIS-LABEL: 00000070 <encMulDouble>:
|
| +; DIS-NEXT: 70: 462e6302 mul.d $f12,$f12,$f14
|
| +; DIS-NEXT: 74: 46206006 mov.d $f0,$f12
|
| +; DIS-NEXT: 78: 03e00008 jr ra
|
| +; DIS-NEXT: 7c: 00000000 nop
|
| +
|
| +; IASM-LABEL: encMulDouble:
|
| +; IASM-NEXT: .LencMulDouble$entry:
|
| +; IASM-NEXT: .byte 0x2
|
| +; IASM-NEXT: .byte 0x63
|
| +; IASM-NEXT: .byte 0x2e
|
| +; IASM-NEXT: .byte 0x46
|
| +; IASM-NEXT: .byte 0x6
|
| +; IASM-NEXT: .byte 0x60
|
| +; IASM-NEXT: .byte 0x20
|
| +; IASM-NEXT: .byte 0x46
|
| +; IASM-NEXT: .byte 0x8
|
| +; IASM-NEXT: .byte 0x0
|
| +; IASM-NEXT: .byte 0xe0
|
| +; IASM-NEXT: .byte 0x3
|
| +; IASM-NEXT: .byte 0x0
|
| +; IASM-NEXT: .byte 0x0
|
| +; IASM-NEXT: .byte 0x0
|
| +; IASM-NEXT: .byte 0x0
|
| +
|
| +define internal float @encSqrtFloat(float %a) {
|
| +entry:
|
| + %c = call float @llvm.sqrt.f32(float %a)
|
| + ret float %c
|
| +}
|
| +
|
| +; ASM-LABEL: encSqrtFloat
|
| +; ASM-NEXT: .LencSqrtFloat$entry:
|
| +; ASM-NEXT: sqrt.s $f12, $f12
|
| +; ASM-NEXT: mov.s $f0, $f12
|
| +; ASM-NEXT: jr $ra
|
| +
|
| +; DIS-LABEL: 00000080 <encSqrtFloat>:
|
| +; DIS-NEXT: 80: 46006304 sqrt.s $f12,$f12
|
| +; DIS-NEXT: 84: 46006006 mov.s $f0,$f12
|
| +; DIS-NEXT: 88: 03e00008 jr ra
|
| +; DIS-NEXT: 8c: 00000000 nop
|
| +
|
| +; IASM-LABEL: encSqrtFloat:
|
| +; IASM-NEXT: .LencSqrtFloat$entry:
|
| +; IASM-NEXT: .byte 0x4
|
| +; IASM-NEXT: .byte 0x63
|
| +; IASM-NEXT: .byte 0x0
|
| +; IASM-NEXT: .byte 0x46
|
| +; IASM-NEXT: .byte 0x6
|
| +; IASM-NEXT: .byte 0x60
|
| +; IASM-NEXT: .byte 0x0
|
| +; IASM-NEXT: .byte 0x46
|
| +; IASM-NEXT: .byte 0x8
|
| +; IASM-NEXT: .byte 0x0
|
| +; IASM-NEXT: .byte 0xe0
|
| +; IASM-NEXT: .byte 0x3
|
| +; IASM-NEXT: .byte 0x0
|
| +; IASM-NEXT: .byte 0x0
|
| +; IASM-NEXT: .byte 0x0
|
| +; IASM-NEXT: .byte 0x0
|
| +
|
| +define internal double @encSqrtDouble(double %a) {
|
| +entry:
|
| + %c = call double @llvm.sqrt.f64(double %a)
|
| + ret double %c
|
| +}
|
| +
|
| +; ASM-LABEL: encSqrtDouble
|
| +; ASM-NEXT: .LencSqrtDouble$entry:
|
| +; ASM-NEXT: sqrt.d $f12, $f12
|
| +; ASM-NEXT: mov.d $f0, $f12
|
| +; ASM-NEXT: jr $ra
|
| +
|
| +; DIS-LABEL: 00000090 <encSqrtDouble>:
|
| +; DIS-NEXT: 90: 46206304 sqrt.d $f12,$f12
|
| +; DIS-NEXT: 94: 46206006 mov.d $f0,$f12
|
| +; DIS-NEXT: 98: 03e00008 jr ra
|
| +; DIS-NEXT: 9c: 00000000 nop
|
| +
|
| +; IASM-LABEL: encSqrtDouble:
|
| +; IASM-NEXT: .LencSqrtDouble$entry:
|
| +; IASM-NEXT: .byte 0x4
|
| +; IASM-NEXT: .byte 0x63
|
| +; IASM-NEXT: .byte 0x20
|
| +; IASM-NEXT: .byte 0x46
|
| +; IASM-NEXT: .byte 0x6
|
| +; IASM-NEXT: .byte 0x60
|
| +; IASM-NEXT: .byte 0x20
|
| +; IASM-NEXT: .byte 0x46
|
| +; IASM-NEXT: .byte 0x8
|
| +; IASM-NEXT: .byte 0x0
|
| +; IASM-NEXT: .byte 0xe0
|
| +; IASM-NEXT: .byte 0x3
|
| +; IASM-NEXT: .byte 0x0
|
| +; IASM-NEXT: .byte 0x0
|
| +; IASM-NEXT: .byte 0x0
|
| +; IASM-NEXT: .byte 0x0
|
| +
|
| +define internal float @encSubFloat(float %a, float %b) {
|
| +entry:
|
| + %c = fsub float %a, %b
|
| + ret float %c
|
| +}
|
| +
|
| +; ASM-LABEL: encSubFloat
|
| +; ASM-NEXT: .LencSubFloat$entry:
|
| +; ASM-NEXT: sub.s $f12, $f12, $f14
|
| +; ASM-NEXT: mov.s $f0, $f12
|
| +; ASM-NEXT: jr $ra
|
| +
|
| +; DIS-LABEL: 000000a0 <encSubFloat>:
|
| +; DIS-NEXT: a0: 460e6301 sub.s $f12,$f12,$f14
|
| +; DIS-NEXT: a4: 46006006 mov.s $f0,$f12
|
| +; DIS-NEXT: a8: 03e00008 jr ra
|
| +; DIS-NEXT: ac: 00000000 nop
|
| +
|
| +; IASM-LABEL: encSubFloat:
|
| +; IASM-NEXT: .LencSubFloat$entry:
|
| +; IASM-NEXT: .byte 0x1
|
| +; IASM-NEXT: .byte 0x63
|
| +; IASM-NEXT: .byte 0xe
|
| +; IASM-NEXT: .byte 0x46
|
| +; IASM-NEXT: .byte 0x6
|
| +; IASM-NEXT: .byte 0x60
|
| +; IASM-NEXT: .byte 0x0
|
| +; IASM-NEXT: .byte 0x46
|
| +; IASM-NEXT: .byte 0x8
|
| +; IASM-NEXT: .byte 0x0
|
| +; IASM-NEXT: .byte 0xe0
|
| +; IASM-NEXT: .byte 0x3
|
| +; IASM-NEXT: .byte 0x0
|
| +; IASM-NEXT: .byte 0x0
|
| +; IASM-NEXT: .byte 0x0
|
| +; IASM-NEXT: .byte 0x0
|
| +
|
| +define internal double @encSubDouble(double %a, double %b) {
|
| +entry:
|
| + %c = fsub double %a, %b
|
| + ret double %c
|
| +}
|
| +
|
| +; ASM-LABEL: encSubDouble
|
| +; ASM-NEXT: .LencSubDouble$entry:
|
| +; ASM-NEXT: sub.d $f12, $f12, $f14
|
| +; ASM-NEXT: mov.d $f0, $f12
|
| +; ASM-NEXT: jr $ra
|
| +
|
| +; DIS-LABEL: 000000b0 <encSubDouble>:
|
| +; DIS-NEXT: b0: 462e6301 sub.d $f12,$f12,$f14
|
| +; DIS-NEXT: b4: 46206006 mov.d $f0,$f12
|
| +; DIS-NEXT: b8: 03e00008 jr ra
|
| +; DIS-NEXT: bc: 00000000 nop
|
| +
|
| +; IASM-LABEL: encSubDouble:
|
| +; IASM-NEXT: .LencSubDouble$entry:
|
| +; IASM-NEXT: .byte 0x1
|
| +; IASM-NEXT: .byte 0x63
|
| +; IASM-NEXT: .byte 0x2e
|
| +; IASM-NEXT: .byte 0x46
|
| +; IASM-NEXT: .byte 0x6
|
| +; IASM-NEXT: .byte 0x60
|
| +; IASM-NEXT: .byte 0x20
|
| +; IASM-NEXT: .byte 0x46
|
| +; IASM-NEXT: .byte 0x8
|
| +; IASM-NEXT: .byte 0x0
|
| +; IASM-NEXT: .byte 0xe0
|
| +; IASM-NEXT: .byte 0x3
|
| +; IASM-NEXT: .byte 0x0
|
| +; IASM-NEXT: .byte 0x0
|
| +; IASM-NEXT: .byte 0x0
|
| +; IASM-NEXT: .byte 0x0
|
|
|