| ; Test encoding of MIPS32 floating point comparison |
| |
| ; REQUIRES: allow_dump |
| |
| ; Compile using standalone assembler. |
| ; RUN: %p2i --filetype=asm -i %s --target=mips32 --args -O2 \ |
| ; RUN: --allow-externally-defined-symbols \ |
| ; 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 \ |
| ; 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 \ |
| ; 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 \ |
| ; RUN: | FileCheck %s --check-prefix=DIS |
| |
| define internal i32 @fcmpFalseFloat(float %a, float %b) { |
| entry: |
| %cmp = fcmp false float %a, %b |
| %cmp.ret_ext = zext i1 %cmp to i32 |
| ret i32 %cmp.ret_ext |
| } |
| |
| ; ASM-LABEL: fcmpFalseFloat: |
| ; ASM-NEXT: .LfcmpFalseFloat$entry: |
| ; ASM: addiu $v0, $zero, 0 |
| ; ASM-NEXT: andi $v0, $v0, 1 |
| ; ASM-NEXT: jr $ra |
| |
| ; DIS-LABEL: 00000000 <fcmpFalseFloat>: |
| ; DIS-NEXT: 0: 24020000 li v0,0 |
| ; DIS-NEXT: 4: 30420001 andi v0,v0,0x1 |
| ; DIS-NEXT: 8: 03e00008 jr ra |
| |
| ; IASM-LABEL: fcmpFalseFloat: |
| ; IASM-NEXT: .LfcmpFalseFloat$entry: |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x2 |
| ; IASM-NEXT: .byte 0x24 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x42 |
| ; IASM-NEXT: .byte 0x30 |
| ; IASM-NEXT: .byte 0x8 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0xe0 |
| ; IASM-NEXT: .byte 0x3 |
| |
| define internal i32 @fcmpFalseDouble(double %a, double %b) { |
| entry: |
| %cmp = fcmp false double %a, %b |
| %cmp.ret_ext = zext i1 %cmp to i32 |
| ret i32 %cmp.ret_ext |
| } |
| |
| ; ASM-LABEL: fcmpFalseDouble: |
| ; ASM-NEXT: .LfcmpFalseDouble$entry: |
| ; ASM: addiu $v0, $zero, 0 |
| ; ASM-NEXT: andi $v0, $v0, 1 |
| ; ASM-NEXT: jr $ra |
| |
| ; DIS-LABEL: 00000010 <fcmpFalseDouble>: |
| ; DIS-NEXT: 10: 24020000 li v0,0 |
| ; DIS-NEXT: 14: 30420001 andi v0,v0,0x1 |
| ; DIS-NEXT: 18: 03e00008 jr ra |
| |
| ; IASM-LABEL: fcmpFalseDouble: |
| ; IASM-NEXT: .LfcmpFalseDouble$entry: |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x2 |
| ; IASM-NEXT: .byte 0x24 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x42 |
| ; IASM-NEXT: .byte 0x30 |
| ; IASM-NEXT: .byte 0x8 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0xe0 |
| ; IASM-NEXT: .byte 0x3 |
| |
| define internal i32 @fcmpOeqFloat(float %a, float %b) { |
| entry: |
| %cmp = fcmp oeq float %a, %b |
| %cmp.ret_ext = zext i1 %cmp to i32 |
| ret i32 %cmp.ret_ext |
| } |
| |
| ; ASM-LABEL: fcmpOeqFloat |
| ; ASM-NEXT: .LfcmpOeqFloat$entry: |
| ; ASM: c.eq.s $f12, $f14 |
| ; ASM: addiu $v0, $zero, 1 |
| ; ASM: movf $v0, $zero, $fcc0 |
| ; ASM-NEXT: andi $v0, $v0, 1 |
| ; ASM-NEXT: jr $ra |
| |
| ; DIS-LABEL: 00000020 <fcmpOeqFloat>: |
| ; DIS-NEXT: 20: 460e6032 c.eq.s $f12,$f14 |
| ; DIS-NEXT: 24: 24020001 li v0,1 |
| ; DIS-NEXT: 28: 00001001 movf v0,zero,$fcc0 |
| ; DIS-NEXT: 2c: 30420001 andi v0,v0,0x1 |
| ; DIS-NEXT: 30: 03e00008 jr ra |
| |
| ; IASM-LABEL: fcmpOeqFloat: |
| ; IASM-NEXT: .LfcmpOeqFloat$entry: |
| ; IASM-NEXT: .byte 0x32 |
| ; IASM-NEXT: .byte 0x60 |
| ; IASM-NEXT: .byte 0xe |
| ; IASM-NEXT: .byte 0x46 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x2 |
| ; IASM-NEXT: .byte 0x24 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x10 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x42 |
| ; IASM-NEXT: .byte 0x30 |
| ; IASM-NEXT: .byte 0x8 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0xe0 |
| ; IASM-NEXT: .byte 0x3 |
| |
| define internal i32 @fcmpOeqDouble(double %a, double %b) { |
| entry: |
| %cmp = fcmp oeq double %a, %b |
| %cmp.ret_ext = zext i1 %cmp to i32 |
| ret i32 %cmp.ret_ext |
| } |
| |
| ; ASM-LABEL: fcmpOeqDouble |
| ; ASM-NEXT: .LfcmpOeqDouble$entry: |
| ; ASM: c.eq.d $f12, $f14 |
| ; ASM: addiu $v0, $zero, 1 |
| ; ASM: movf $v0, $zero, $fcc0 |
| ; ASM-NEXT: andi $v0, $v0, 1 |
| ; ASM-NEXT: jr $ra |
| |
| ; DIS-LABEL: 00000040 <fcmpOeqDouble>: |
| ; DIS-NEXT: 40: 462e6032 c.eq.d $f12,$f14 |
| ; DIS-NEXT: 44: 24020001 li v0,1 |
| ; DIS-NEXT: 48: 00001001 movf v0,zero,$fcc0 |
| ; DIS-NEXT: 4c: 30420001 andi v0,v0,0x1 |
| ; DIS-NEXT: 50: 03e00008 jr ra |
| |
| ; IASM-LABEL: fcmpOeqDouble: |
| ; IASM-NEXT: .LfcmpOeqDouble$entry: |
| ; IASM-NEXT: .byte 0x32 |
| ; IASM-NEXT: .byte 0x60 |
| ; IASM-NEXT: .byte 0x2e |
| ; IASM-NEXT: .byte 0x46 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x2 |
| ; IASM-NEXT: .byte 0x24 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x10 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x42 |
| ; IASM-NEXT: .byte 0x30 |
| ; IASM-NEXT: .byte 0x8 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0xe0 |
| ; IASM-NEXT: .byte 0x3 |
| |
| define internal i32 @fcmpOgtFloat(float %a, float %b) { |
| entry: |
| %cmp = fcmp ogt float %a, %b |
| %cmp.ret_ext = zext i1 %cmp to i32 |
| ret i32 %cmp.ret_ext |
| } |
| |
| ; ASM-LABEL: fcmpOgtFloat |
| ; ASM-NEXT: .LfcmpOgtFloat$entry: |
| ; ASM: c.ule.s $f12, $f14 |
| ; ASM: addiu $v0, $zero, 1 |
| ; ASM: movt $v0, $zero, $fcc0 |
| ; ASM-NEXT: andi $v0, $v0, 1 |
| ; ASM-NEXT: jr $ra |
| |
| ; DIS-LABEL: 00000060 <fcmpOgtFloat>: |
| ; DIS-NEXT: 60: 460e6037 c.ule.s $f12,$f14 |
| ; DIS-NEXT: 64: 24020001 li v0,1 |
| ; DIS-NEXT: 68: 00011001 movt v0,zero,$fcc0 |
| ; DIS-NEXT: 6c: 30420001 andi v0,v0,0x1 |
| ; DIS-NEXT: 70: 03e00008 jr ra |
| |
| ; IASM-LABEL: fcmpOgtFloat: |
| ; IASM-NEXT: .LfcmpOgtFloat$entry: |
| ; IASM-NEXT: .byte 0x37 |
| ; IASM-NEXT: .byte 0x60 |
| ; IASM-NEXT: .byte 0xe |
| ; IASM-NEXT: .byte 0x46 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x2 |
| ; IASM-NEXT: .byte 0x24 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x10 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x42 |
| ; IASM-NEXT: .byte 0x30 |
| ; IASM-NEXT: .byte 0x8 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0xe0 |
| ; IASM-NEXT: .byte 0x3 |
| |
| define internal i32 @fcmpOgtDouble(double %a, double %b) { |
| entry: |
| %cmp = fcmp ogt double %a, %b |
| %cmp.ret_ext = zext i1 %cmp to i32 |
| ret i32 %cmp.ret_ext |
| } |
| |
| ; ASM-LABEL: fcmpOgtDouble |
| ; ASM-NEXT: .LfcmpOgtDouble$entry: |
| ; ASM: c.ule.d $f12, $f14 |
| ; ASM: addiu $v0, $zero, 1 |
| ; ASM: movt $v0, $zero, $fcc0 |
| ; ASM-NEXT: andi $v0, $v0, 1 |
| ; ASM-NEXT: jr $ra |
| |
| ; DIS-LABEL: 00000080 <fcmpOgtDouble>: |
| ; DIS-NEXT: 80: 462e6037 c.ule.d $f12,$f14 |
| ; DIS-NEXT: 84: 24020001 li v0,1 |
| ; DIS-NEXT: 88: 00011001 movt v0,zero,$fcc0 |
| ; DIS-NEXT: 8c: 30420001 andi v0,v0,0x1 |
| ; DIS-NEXT: 90: 03e00008 jr ra |
| |
| ; IASM-LABEL: fcmpOgtDouble: |
| ; IASM-NEXT: .LfcmpOgtDouble$entry: |
| ; IASM-NEXT: .byte 0x37 |
| ; IASM-NEXT: .byte 0x60 |
| ; IASM-NEXT: .byte 0x2e |
| ; IASM-NEXT: .byte 0x46 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x2 |
| ; IASM-NEXT: .byte 0x24 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x10 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x42 |
| ; IASM-NEXT: .byte 0x30 |
| ; IASM-NEXT: .byte 0x8 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0xe0 |
| ; IASM-NEXT: .byte 0x3 |
| |
| define internal i32 @fcmpOgeFloat(float %a, float %b) { |
| entry: |
| %cmp = fcmp oge float %a, %b |
| %cmp.ret_ext = zext i1 %cmp to i32 |
| ret i32 %cmp.ret_ext |
| } |
| |
| ; ASM-LABEL: fcmpOgeFloat |
| ; ASM-NEXT: .LfcmpOgeFloat$entry: |
| ; ASM: c.ult.s $f12, $f14 |
| ; ASM: addiu $v0, $zero, 1 |
| ; ASM: movt $v0, $zero, $fcc0 |
| ; ASM-NEXT: andi $v0, $v0, 1 |
| ; ASM-NEXT: jr $ra |
| |
| ; DIS-LABEL: 000000a0 <fcmpOgeFloat>: |
| ; DIS-NEXT: a0: 460e6035 c.ult.s $f12,$f14 |
| ; DIS-NEXT: a4: 24020001 li v0,1 |
| ; DIS-NEXT: a8: 00011001 movt v0,zero,$fcc0 |
| ; DIS-NEXT: ac: 30420001 andi v0,v0,0x1 |
| ; DIS-NEXT: b0: 03e00008 jr ra |
| |
| ; IASM-LABEL: fcmpOgeFloat: |
| ; IASM-NEXT: .LfcmpOgeFloat$entry: |
| ; IASM-NEXT: .byte 0x35 |
| ; IASM-NEXT: .byte 0x60 |
| ; IASM-NEXT: .byte 0xe |
| ; IASM-NEXT: .byte 0x46 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x2 |
| ; IASM-NEXT: .byte 0x24 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x10 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x42 |
| ; IASM-NEXT: .byte 0x30 |
| ; IASM-NEXT: .byte 0x8 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0xe0 |
| ; IASM-NEXT: .byte 0x3 |
| |
| define internal i32 @fcmpOgeDouble(double %a, double %b) { |
| entry: |
| %cmp = fcmp oge double %a, %b |
| %cmp.ret_ext = zext i1 %cmp to i32 |
| ret i32 %cmp.ret_ext |
| } |
| |
| ; ASM-LABEL: fcmpOgeDouble |
| ; ASM-NEXT: .LfcmpOgeDouble$entry: |
| ; ASM: c.ult.d $f12, $f14 |
| ; ASM: addiu $v0, $zero, 1 |
| ; ASM: movt $v0, $zero, $fcc0 |
| ; ASM-NEXT: andi $v0, $v0, 1 |
| ; ASM-NEXT: jr $ra |
| |
| ; DIS-LABEL: 000000c0 <fcmpOgeDouble>: |
| ; DIS-NEXT: c0: 462e6035 c.ult.d $f12,$f14 |
| ; DIS-NEXT: c4: 24020001 li v0,1 |
| ; DIS-NEXT: c8: 00011001 movt v0,zero,$fcc0 |
| ; DIS-NEXT: cc: 30420001 andi v0,v0,0x1 |
| ; DIS-NEXT: d0: 03e00008 jr ra |
| |
| ; IASM-LABEL: fcmpOgeDouble: |
| ; IASM-NEXT: .LfcmpOgeDouble$entry: |
| ; IASM-NEXT: .byte 0x35 |
| ; IASM-NEXT: .byte 0x60 |
| ; IASM-NEXT: .byte 0x2e |
| ; IASM-NEXT: .byte 0x46 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x2 |
| ; IASM-NEXT: .byte 0x24 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x10 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x42 |
| ; IASM-NEXT: .byte 0x30 |
| ; IASM-NEXT: .byte 0x8 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0xe0 |
| ; IASM-NEXT: .byte 0x3 |
| |
| define internal i32 @fcmpOltFloat(float %a, float %b) { |
| entry: |
| %cmp = fcmp olt float %a, %b |
| %cmp.ret_ext = zext i1 %cmp to i32 |
| ret i32 %cmp.ret_ext |
| } |
| |
| ; ASM-LABEL: fcmpOltFloat |
| ; ASM-NEXT: .LfcmpOltFloat$entry: |
| ; ASM: c.olt.s $f12, $f14 |
| ; ASM: addiu $v0, $zero, 1 |
| ; ASM: movf $v0, $zero, $fcc0 |
| ; ASM-NEXT: andi $v0, $v0, 1 |
| ; ASM-NEXT: jr $ra |
| |
| ; DIS-LABEL: 000000e0 <fcmpOltFloat>: |
| ; DIS-NEXT: e0: 460e6034 c.olt.s $f12,$f14 |
| ; DIS-NEXT: e4: 24020001 li v0,1 |
| ; DIS-NEXT: e8: 00001001 movf v0,zero,$fcc0 |
| ; DIS-NEXT: ec: 30420001 andi v0,v0,0x1 |
| ; DIS-NEXT: f0: 03e00008 jr ra |
| |
| ; IASM-LABEL: fcmpOltFloat: |
| ; IASM-NEXT: .LfcmpOltFloat$entry: |
| ; IASM-NEXT: .byte 0x34 |
| ; IASM-NEXT: .byte 0x60 |
| ; IASM-NEXT: .byte 0xe |
| ; IASM-NEXT: .byte 0x46 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x2 |
| ; IASM-NEXT: .byte 0x24 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x10 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x42 |
| ; IASM-NEXT: .byte 0x30 |
| ; IASM-NEXT: .byte 0x8 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0xe0 |
| ; IASM-NEXT: .byte 0x3 |
| |
| define internal i32 @fcmpOltDouble(double %a, double %b) { |
| entry: |
| %cmp = fcmp olt double %a, %b |
| %cmp.ret_ext = zext i1 %cmp to i32 |
| ret i32 %cmp.ret_ext |
| } |
| |
| ; ASM-LABEL: fcmpOltDouble |
| ; ASM-NEXT: .LfcmpOltDouble$entry: |
| ; ASM: c.olt.d $f12, $f14 |
| ; ASM: addiu $v0, $zero, 1 |
| ; ASM: movf $v0, $zero, $fcc0 |
| ; ASM-NEXT: andi $v0, $v0, 1 |
| ; ASM-NEXT: jr $ra |
| |
| ; DIS-LABEL: 00000100 <fcmpOltDouble>: |
| ; DIS-NEXT: 100: 462e6034 c.olt.d $f12,$f14 |
| ; DIS-NEXT: 104: 24020001 li v0,1 |
| ; DIS-NEXT: 108: 00001001 movf v0,zero,$fcc0 |
| ; DIS-NEXT: 10c: 30420001 andi v0,v0,0x1 |
| ; DIS-NEXT: 110: 03e00008 jr ra |
| |
| ; IASM-LABEL: fcmpOltDouble: |
| ; IASM-NEXT: .LfcmpOltDouble$entry: |
| ; IASM-NEXT: .byte 0x34 |
| ; IASM-NEXT: .byte 0x60 |
| ; IASM-NEXT: .byte 0x2e |
| ; IASM-NEXT: .byte 0x46 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x2 |
| ; IASM-NEXT: .byte 0x24 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x10 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x42 |
| ; IASM-NEXT: .byte 0x30 |
| ; IASM-NEXT: .byte 0x8 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0xe0 |
| ; IASM-NEXT: .byte 0x3 |
| |
| define internal i32 @fcmpOleFloat(float %a, float %b) { |
| entry: |
| %cmp = fcmp ole float %a, %b |
| %cmp.ret_ext = zext i1 %cmp to i32 |
| ret i32 %cmp.ret_ext |
| } |
| |
| ; ASM-LABEL: fcmpOleFloat |
| ; ASM-NEXT: .LfcmpOleFloat$entry: |
| ; ASM: c.ole.s $f12, $f14 |
| ; ASM: addiu $v0, $zero, 1 |
| ; ASM: movf $v0, $zero, $fcc0 |
| ; ASM-NEXT: andi $v0, $v0, 1 |
| ; ASM-NEXT: jr $ra |
| |
| ; DIS-LABEL: 00000120 <fcmpOleFloat>: |
| ; DIS-NEXT: 120: 460e6036 c.ole.s $f12,$f14 |
| ; DIS-NEXT: 124: 24020001 li v0,1 |
| ; DIS-NEXT: 128: 00001001 movf v0,zero,$fcc0 |
| ; DIS-NEXT: 12c: 30420001 andi v0,v0,0x1 |
| ; DIS-NEXT: 130: 03e00008 jr ra |
| |
| ; IASM-LABEL: fcmpOleFloat: |
| ; IASM-NEXT: .LfcmpOleFloat$entry: |
| ; IASM-NEXT: .byte 0x36 |
| ; IASM-NEXT: .byte 0x60 |
| ; IASM-NEXT: .byte 0xe |
| ; IASM-NEXT: .byte 0x46 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x2 |
| ; IASM-NEXT: .byte 0x24 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x10 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x42 |
| ; IASM-NEXT: .byte 0x30 |
| ; IASM-NEXT: .byte 0x8 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0xe0 |
| ; IASM-NEXT: .byte 0x3 |
| |
| define internal i32 @fcmpOleDouble(double %a, double %b) { |
| entry: |
| %cmp = fcmp ole double %a, %b |
| %cmp.ret_ext = zext i1 %cmp to i32 |
| ret i32 %cmp.ret_ext |
| } |
| |
| ; ASM-LABEL: fcmpOleDouble |
| ; ASM-NEXT: .LfcmpOleDouble$entry: |
| ; ASM: c.ole.d $f12, $f14 |
| ; ASM: addiu $v0, $zero, 1 |
| ; ASM: movf $v0, $zero, $fcc0 |
| ; ASM-NEXT: andi $v0, $v0, 1 |
| ; ASM-NEXT: jr $ra |
| |
| ; DIS-LABEL: 00000140 <fcmpOleDouble>: |
| ; DIS-NEXT: 140: 462e6036 c.ole.d $f12,$f14 |
| ; DIS-NEXT: 144: 24020001 li v0,1 |
| ; DIS-NEXT: 148: 00001001 movf v0,zero,$fcc0 |
| ; DIS-NEXT: 14c: 30420001 andi v0,v0,0x1 |
| ; DIS-NEXT: 150: 03e00008 jr ra |
| |
| ; IASM-LABEL: fcmpOleDouble: |
| ; IASM-NEXT: .LfcmpOleDouble$entry: |
| ; IASM-NEXT: .byte 0x36 |
| ; IASM-NEXT: .byte 0x60 |
| ; IASM-NEXT: .byte 0x2e |
| ; IASM-NEXT: .byte 0x46 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x2 |
| ; IASM-NEXT: .byte 0x24 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x10 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x42 |
| ; IASM-NEXT: .byte 0x30 |
| ; IASM-NEXT: .byte 0x8 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0xe0 |
| ; IASM-NEXT: .byte 0x3 |
| |
| define internal i32 @fcmpOneFloat(float %a, float %b) { |
| entry: |
| %cmp = fcmp one float %a, %b |
| %cmp.ret_ext = zext i1 %cmp to i32 |
| ret i32 %cmp.ret_ext |
| } |
| |
| ; ASM-LABEL: fcmpOneFloat |
| ; ASM-NEXT: .LfcmpOneFloat$entry: |
| ; ASM: c.ueq.s $f12, $f14 |
| ; ASM: addiu $v0, $zero, 1 |
| ; ASM: movt $v0, $zero, $fcc0 |
| ; ASM-NEXT: andi $v0, $v0, 1 |
| ; ASM-NEXT: jr $ra |
| |
| ; DIS-LABEL: 00000160 <fcmpOneFloat>: |
| ; DIS-NEXT: 160: 460e6033 c.ueq.s $f12,$f14 |
| ; DIS-NEXT: 164: 24020001 li v0,1 |
| ; DIS-NEXT: 168: 00011001 movt v0,zero,$fcc0 |
| ; DIS-NEXT: 16c: 30420001 andi v0,v0,0x1 |
| ; DIS-NEXT: 170: 03e00008 jr ra |
| |
| ; IASM-LABEL: fcmpOneFloat: |
| ; IASM-NEXT: .LfcmpOneFloat$entry: |
| ; IASM-NEXT: .byte 0x33 |
| ; IASM-NEXT: .byte 0x60 |
| ; IASM-NEXT: .byte 0xe |
| ; IASM-NEXT: .byte 0x46 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x2 |
| ; IASM-NEXT: .byte 0x24 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x10 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x42 |
| ; IASM-NEXT: .byte 0x30 |
| ; IASM-NEXT: .byte 0x8 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0xe0 |
| ; IASM-NEXT: .byte 0x3 |
| |
| define internal i32 @fcmpOneDouble(double %a, double %b) { |
| entry: |
| %cmp = fcmp one double %a, %b |
| %cmp.ret_ext = zext i1 %cmp to i32 |
| ret i32 %cmp.ret_ext |
| } |
| |
| ; ASM-LABEL: fcmpOneDouble |
| ; ASM-NEXT: .LfcmpOneDouble$entry: |
| ; ASM: c.ueq.d $f12, $f14 |
| ; ASM: addiu $v0, $zero, 1 |
| ; ASM: movt $v0, $zero, $fcc0 |
| ; ASM-NEXT: andi $v0, $v0, 1 |
| ; ASM-NEXT: jr $ra |
| |
| ; DIS-LABEL: 00000180 <fcmpOneDouble>: |
| ; DIS-NEXT: 180: 462e6033 c.ueq.d $f12,$f14 |
| ; DIS-NEXT: 184: 24020001 li v0,1 |
| ; DIS-NEXT: 188: 00011001 movt v0,zero,$fcc0 |
| ; DIS-NEXT: 18c: 30420001 andi v0,v0,0x1 |
| ; DIS-NEXT: 190: 03e00008 jr ra |
| |
| ; IASM-LABEL: fcmpOneDouble: |
| ; IASM-NEXT: .LfcmpOneDouble$entry: |
| ; IASM-NEXT: .byte 0x33 |
| ; IASM-NEXT: .byte 0x60 |
| ; IASM-NEXT: .byte 0x2e |
| ; IASM-NEXT: .byte 0x46 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x2 |
| ; IASM-NEXT: .byte 0x24 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x10 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x42 |
| ; IASM-NEXT: .byte 0x30 |
| ; IASM-NEXT: .byte 0x8 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0xe0 |
| ; IASM-NEXT: .byte 0x3 |
| |
| define internal i32 @fcmpOrdFloat(float %a, float %b) { |
| entry: |
| %cmp = fcmp ord float %a, %b |
| %cmp.ret_ext = zext i1 %cmp to i32 |
| ret i32 %cmp.ret_ext |
| } |
| |
| ; ASM-LABEL: fcmpOrdFloat: |
| ; ASM-NEXT: .LfcmpOrdFloat$entry: |
| ; ASM: c.un.s $f12, $f14 |
| ; ASM: addiu $v0, $zero, 1 |
| ; ASM: movt $v0, $zero, $fcc0 |
| ; ASM-NEXT: andi $v0, $v0, 1 |
| ; ASM-NEXT: jr $ra |
| |
| ; DIS-LABEL: 000001a0 <fcmpOrdFloat>: |
| ; DIS-NEXT: 1a0: 460e6031 c.un.s $f12,$f14 |
| ; DIS-NEXT: 1a4: 24020001 li v0,1 |
| ; DIS-NEXT: 1a8: 00011001 movt v0,zero,$fcc0 |
| ; DIS-NEXT: 1ac: 30420001 andi v0,v0,0x1 |
| ; DIS-NEXT: 1b0: 03e00008 jr ra |
| |
| ; IASM-LABEL: fcmpOrdFloat: |
| ; IASM-NEXT: .LfcmpOrdFloat$entry: |
| ; IASM-NEXT: .byte 0x31 |
| ; IASM-NEXT: .byte 0x60 |
| ; IASM-NEXT: .byte 0xe |
| ; IASM-NEXT: .byte 0x46 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x2 |
| ; IASM-NEXT: .byte 0x24 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x10 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x42 |
| ; IASM-NEXT: .byte 0x30 |
| ; IASM-NEXT: .byte 0x8 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0xe0 |
| ; IASM-NEXT: .byte 0x3 |
| |
| define internal i32 @fcmpOrdDouble(double %a, double %b) { |
| entry: |
| %cmp = fcmp ord double %a, %b |
| %cmp.ret_ext = zext i1 %cmp to i32 |
| ret i32 %cmp.ret_ext |
| } |
| |
| ; ASM-LABEL: fcmpOrdDouble: |
| ; ASM-NEXT: .LfcmpOrdDouble$entry: |
| ; ASM: c.un.d $f12, $f14 |
| ; ASM: addiu $v0, $zero, 1 |
| ; ASM: movt $v0, $zero, $fcc0 |
| ; ASM-NEXT: andi $v0, $v0, 1 |
| ; ASM-NEXT: jr $ra |
| |
| ; DIS-LABEL: 000001c0 <fcmpOrdDouble>: |
| ; DIS-NEXT: 1c0: 462e6031 c.un.d $f12,$f14 |
| ; DIS-NEXT: 1c4: 24020001 li v0,1 |
| ; DIS-NEXT: 1c8: 00011001 movt v0,zero,$fcc0 |
| ; DIS-NEXT: 1cc: 30420001 andi v0,v0,0x1 |
| ; DIS-NEXT: 1d0: 03e00008 jr ra |
| |
| ; IASM-LABEL: fcmpOrdDouble: |
| ; IASM-NEXT: .LfcmpOrdDouble$entry: |
| ; IASM-NEXT: .byte 0x31 |
| ; IASM-NEXT: .byte 0x60 |
| ; IASM-NEXT: .byte 0x2e |
| ; IASM-NEXT: .byte 0x46 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x2 |
| ; IASM-NEXT: .byte 0x24 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x10 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x42 |
| ; IASM-NEXT: .byte 0x30 |
| ; IASM-NEXT: .byte 0x8 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0xe0 |
| ; IASM-NEXT: .byte 0x3 |
| |
| define internal i32 @fcmpUeqFloat(float %a, float %b) { |
| entry: |
| %cmp = fcmp ueq float %a, %b |
| %cmp.ret_ext = zext i1 %cmp to i32 |
| ret i32 %cmp.ret_ext |
| } |
| |
| ; ASM-LABEL: fcmpUeqFloat |
| ; ASM-NEXT: .LfcmpUeqFloat$entry: |
| ; ASM: c.ueq.s $f12, $f14 |
| ; ASM: addiu $v0, $zero, 1 |
| ; ASM: movf $v0, $zero, $fcc0 |
| ; ASM-NEXT: andi $v0, $v0, 1 |
| ; ASM-NEXT: jr $ra |
| |
| ; DIS-LABEL: 000001e0 <fcmpUeqFloat>: |
| ; DIS-NEXT: 1e0: 460e6033 c.ueq.s $f12,$f14 |
| ; DIS-NEXT: 1e4: 24020001 li v0,1 |
| ; DIS-NEXT: 1e8: 00001001 movf v0,zero,$fcc0 |
| ; DIS-NEXT: 1ec: 30420001 andi v0,v0,0x1 |
| ; DIS-NEXT: 1f0: 03e00008 jr ra |
| |
| ; IASM-LABEL: fcmpUeqFloat: |
| ; IASM-NEXT: .LfcmpUeqFloat$entry: |
| ; IASM-NEXT: .byte 0x33 |
| ; IASM-NEXT: .byte 0x60 |
| ; IASM-NEXT: .byte 0xe |
| ; IASM-NEXT: .byte 0x46 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x2 |
| ; IASM-NEXT: .byte 0x24 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x10 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x42 |
| ; IASM-NEXT: .byte 0x30 |
| ; IASM-NEXT: .byte 0x8 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0xe0 |
| ; IASM-NEXT: .byte 0x3 |
| |
| define internal i32 @fcmpUeqDouble(double %a, double %b) { |
| entry: |
| %cmp = fcmp ueq double %a, %b |
| %cmp.ret_ext = zext i1 %cmp to i32 |
| ret i32 %cmp.ret_ext |
| } |
| |
| ; ASM-LABEL: fcmpUeqDouble |
| ; ASM-NEXT: .LfcmpUeqDouble$entry: |
| ; ASM: c.ueq.d $f12, $f14 |
| ; ASM: addiu $v0, $zero, 1 |
| ; ASM: movf $v0, $zero, $fcc0 |
| ; ASM-NEXT: andi $v0, $v0, 1 |
| ; ASM-NEXT: jr $ra |
| |
| ; DIS-LABEL: 00000200 <fcmpUeqDouble>: |
| ; DIS-NEXT: 200: 462e6033 c.ueq.d $f12,$f14 |
| ; DIS-NEXT: 204: 24020001 li v0,1 |
| ; DIS-NEXT: 208: 00001001 movf v0,zero,$fcc0 |
| ; DIS-NEXT: 20c: 30420001 andi v0,v0,0x1 |
| ; DIS-NEXT: 210: 03e00008 jr ra |
| |
| ; IASM-LABEL: fcmpUeqDouble: |
| ; IASM-NEXT: .LfcmpUeqDouble$entry: |
| ; IASM-NEXT: .byte 0x33 |
| ; IASM-NEXT: .byte 0x60 |
| ; IASM-NEXT: .byte 0x2e |
| ; IASM-NEXT: .byte 0x46 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x2 |
| ; IASM-NEXT: .byte 0x24 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x10 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x42 |
| ; IASM-NEXT: .byte 0x30 |
| ; IASM-NEXT: .byte 0x8 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0xe0 |
| ; IASM-NEXT: .byte 0x3 |
| |
| define internal i32 @fcmpUgtFloat(float %a, float %b) { |
| entry: |
| %cmp = fcmp ugt float %a, %b |
| %cmp.ret_ext = zext i1 %cmp to i32 |
| ret i32 %cmp.ret_ext |
| } |
| |
| ; ASM-LABEL: fcmpUgtFloat |
| ; ASM-NEXT: .LfcmpUgtFloat$entry: |
| ; ASM: c.ole.s $f12, $f14 |
| ; ASM: addiu $v0, $zero, 1 |
| ; ASM: movt $v0, $zero, $fcc0 |
| ; ASM-NEXT: andi $v0, $v0, 1 |
| ; ASM-NEXT: jr $ra |
| |
| ; DIS-LABEL: 00000220 <fcmpUgtFloat>: |
| ; DIS-NEXT: 220: 460e6036 c.ole.s $f12,$f14 |
| ; DIS-NEXT: 224: 24020001 li v0,1 |
| ; DIS-NEXT: 228: 00011001 movt v0,zero,$fcc0 |
| ; DIS-NEXT: 22c: 30420001 andi v0,v0,0x1 |
| ; DIS-NEXT: 230: 03e00008 jr ra |
| |
| ; IASM-LABEL: fcmpUgtFloat: |
| ; IASM-NEXT: .LfcmpUgtFloat$entry: |
| ; IASM-NEXT: .byte 0x36 |
| ; IASM-NEXT: .byte 0x60 |
| ; IASM-NEXT: .byte 0xe |
| ; IASM-NEXT: .byte 0x46 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x2 |
| ; IASM-NEXT: .byte 0x24 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x10 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x42 |
| ; IASM-NEXT: .byte 0x30 |
| ; IASM-NEXT: .byte 0x8 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0xe0 |
| ; IASM-NEXT: .byte 0x3 |
| |
| define internal i32 @fcmpUgtDouble(double %a, double %b) { |
| entry: |
| %cmp = fcmp ugt double %a, %b |
| %cmp.ret_ext = zext i1 %cmp to i32 |
| ret i32 %cmp.ret_ext |
| } |
| |
| ; ASM-LABEL: fcmpUgtDouble |
| ; ASM-NEXT: .LfcmpUgtDouble$entry: |
| ; ASM: c.ole.d $f12, $f14 |
| ; ASM: addiu $v0, $zero, 1 |
| ; ASM: movt $v0, $zero, $fcc0 |
| ; ASM-NEXT: andi $v0, $v0, 1 |
| ; ASM-NEXT: jr $ra |
| |
| ; DIS-LABEL: 00000240 <fcmpUgtDouble>: |
| ; DIS-NEXT: 240: 462e6036 c.ole.d $f12,$f14 |
| ; DIS-NEXT: 244: 24020001 li v0,1 |
| ; DIS-NEXT: 248: 00011001 movt v0,zero,$fcc0 |
| ; DIS-NEXT: 24c: 30420001 andi v0,v0,0x1 |
| ; DIS-NEXT: 250: 03e00008 jr ra |
| |
| ; IASM-LABEL: fcmpUgtDouble: |
| ; IASM-NEXT: .LfcmpUgtDouble$entry: |
| ; IASM-NEXT: .byte 0x36 |
| ; IASM-NEXT: .byte 0x60 |
| ; IASM-NEXT: .byte 0x2e |
| ; IASM-NEXT: .byte 0x46 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x2 |
| ; IASM-NEXT: .byte 0x24 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x10 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x42 |
| ; IASM-NEXT: .byte 0x30 |
| ; IASM-NEXT: .byte 0x8 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0xe0 |
| ; IASM-NEXT: .byte 0x3 |
| |
| define internal i32 @fcmpUgeFloat(float %a, float %b) { |
| entry: |
| %cmp = fcmp uge float %a, %b |
| %cmp.ret_ext = zext i1 %cmp to i32 |
| ret i32 %cmp.ret_ext |
| } |
| |
| ; ASM-LABEL: fcmpUgeFloat |
| ; ASM-NEXT: .LfcmpUgeFloat$entry: |
| ; ASM: c.olt.s $f12, $f14 |
| ; ASM: addiu $v0, $zero, 1 |
| ; ASM: movt $v0, $zero, $fcc0 |
| ; ASM-NEXT: andi $v0, $v0, 1 |
| ; ASM-NEXT: jr $ra |
| |
| ; DIS-LABEL: 00000260 <fcmpUgeFloat>: |
| ; DIS-NEXT: 260: 460e6034 c.olt.s $f12,$f14 |
| ; DIS-NEXT: 264: 24020001 li v0,1 |
| ; DIS-NEXT: 268: 00011001 movt v0,zero,$fcc0 |
| ; DIS-NEXT: 26c: 30420001 andi v0,v0,0x1 |
| ; DIS-NEXT: 270: 03e00008 jr ra |
| |
| ; IASM-LABEL: fcmpUgeFloat: |
| ; IASM-NEXT: .LfcmpUgeFloat$entry: |
| ; IASM-NEXT: .byte 0x34 |
| ; IASM-NEXT: .byte 0x60 |
| ; IASM-NEXT: .byte 0xe |
| ; IASM-NEXT: .byte 0x46 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x2 |
| ; IASM-NEXT: .byte 0x24 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x10 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x42 |
| ; IASM-NEXT: .byte 0x30 |
| ; IASM-NEXT: .byte 0x8 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0xe0 |
| ; IASM-NEXT: .byte 0x3 |
| |
| define internal i32 @fcmpUgeDouble(double %a, double %b) { |
| entry: |
| %cmp = fcmp uge double %a, %b |
| %cmp.ret_ext = zext i1 %cmp to i32 |
| ret i32 %cmp.ret_ext |
| } |
| |
| ; ASM-LABEL: fcmpUgeDouble |
| ; ASM-NEXT: .LfcmpUgeDouble$entry: |
| ; ASM: c.olt.d $f12, $f14 |
| ; ASM: addiu $v0, $zero, 1 |
| ; ASM: movt $v0, $zero, $fcc0 |
| ; ASM-NEXT: andi $v0, $v0, 1 |
| ; ASM-NEXT: jr $ra |
| |
| ; DIS-LABEL: 00000280 <fcmpUgeDouble>: |
| ; DIS-NEXT: 280: 462e6034 c.olt.d $f12,$f14 |
| ; DIS-NEXT: 284: 24020001 li v0,1 |
| ; DIS-NEXT: 288: 00011001 movt v0,zero,$fcc0 |
| ; DIS-NEXT: 28c: 30420001 andi v0,v0,0x1 |
| ; DIS-NEXT: 290: 03e00008 jr ra |
| |
| ; IASM-LABEL: fcmpUgeDouble: |
| ; IASM-NEXT: .LfcmpUgeDouble$entry: |
| ; IASM-NEXT: .byte 0x34 |
| ; IASM-NEXT: .byte 0x60 |
| ; IASM-NEXT: .byte 0x2e |
| ; IASM-NEXT: .byte 0x46 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x2 |
| ; IASM-NEXT: .byte 0x24 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x10 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x42 |
| ; IASM-NEXT: .byte 0x30 |
| ; IASM-NEXT: .byte 0x8 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0xe0 |
| ; IASM-NEXT: .byte 0x3 |
| |
| define internal i32 @fcmpUltFloat(float %a, float %b) { |
| entry: |
| %cmp = fcmp ult float %a, %b |
| %cmp.ret_ext = zext i1 %cmp to i32 |
| ret i32 %cmp.ret_ext |
| } |
| |
| ; ASM-LABEL: fcmpUltFloat |
| ; ASM-NEXT: .LfcmpUltFloat$entry: |
| ; ASM: c.ult.s $f12, $f14 |
| ; ASM: addiu $v0, $zero, 1 |
| ; ASM: movf $v0, $zero, $fcc0 |
| ; ASM-NEXT: andi $v0, $v0, 1 |
| ; ASM-NEXT: jr $ra |
| |
| ; DIS-LABEL: 000002a0 <fcmpUltFloat>: |
| ; DIS-NEXT: 2a0: 460e6035 c.ult.s $f12,$f14 |
| ; DIS-NEXT: 2a4: 24020001 li v0,1 |
| ; DIS-NEXT: 2a8: 00001001 movf v0,zero,$fcc0 |
| ; DIS-NEXT: 2ac: 30420001 andi v0,v0,0x1 |
| ; DIS-NEXT: 2b0: 03e00008 jr ra |
| |
| ; IASM-LABEL: fcmpUltFloat: |
| ; IASM-NEXT: .LfcmpUltFloat$entry: |
| ; IASM-NEXT: .byte 0x35 |
| ; IASM-NEXT: .byte 0x60 |
| ; IASM-NEXT: .byte 0xe |
| ; IASM-NEXT: .byte 0x46 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x2 |
| ; IASM-NEXT: .byte 0x24 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x10 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x42 |
| ; IASM-NEXT: .byte 0x30 |
| ; IASM-NEXT: .byte 0x8 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0xe0 |
| ; IASM-NEXT: .byte 0x3 |
| |
| define internal i32 @fcmpUltDouble(double %a, double %b) { |
| entry: |
| %cmp = fcmp ult double %a, %b |
| %cmp.ret_ext = zext i1 %cmp to i32 |
| ret i32 %cmp.ret_ext |
| } |
| |
| ; ASM-LABEL: fcmpUltDouble |
| ; ASM-NEXT: .LfcmpUltDouble$entry: |
| ; ASM: c.ult.d $f12, $f14 |
| ; ASM: addiu $v0, $zero, 1 |
| ; ASM: movf $v0, $zero, $fcc0 |
| ; ASM-NEXT: andi $v0, $v0, 1 |
| ; ASM-NEXT: jr $ra |
| |
| ; DIS-LABEL: 000002c0 <fcmpUltDouble>: |
| ; DIS-NEXT: 2c0: 462e6035 c.ult.d $f12,$f14 |
| ; DIS-NEXT: 2c4: 24020001 li v0,1 |
| ; DIS-NEXT: 2c8: 00001001 movf v0,zero,$fcc0 |
| ; DIS-NEXT: 2cc: 30420001 andi v0,v0,0x1 |
| ; DIS-NEXT: 2d0: 03e00008 jr ra |
| |
| ; IASM-LABEL: fcmpUltDouble: |
| ; IASM-NEXT: .LfcmpUltDouble$entry: |
| ; IASM-NEXT: .byte 0x35 |
| ; IASM-NEXT: .byte 0x60 |
| ; IASM-NEXT: .byte 0x2e |
| ; IASM-NEXT: .byte 0x46 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x2 |
| ; IASM-NEXT: .byte 0x24 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x10 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x42 |
| ; IASM-NEXT: .byte 0x30 |
| ; IASM-NEXT: .byte 0x8 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0xe0 |
| ; IASM-NEXT: .byte 0x3 |
| |
| define internal i32 @fcmpUleFloat(float %a, float %b) { |
| entry: |
| %cmp = fcmp ule float %a, %b |
| %cmp.ret_ext = zext i1 %cmp to i32 |
| ret i32 %cmp.ret_ext |
| } |
| |
| ; ASM-LABEL: fcmpUleFloat |
| ; ASM-NEXT: .LfcmpUleFloat$entry: |
| ; ASM: c.ule.s $f12, $f14 |
| ; ASM: addiu $v0, $zero, 1 |
| ; ASM: movf $v0, $zero, $fcc0 |
| ; ASM-NEXT: andi $v0, $v0, 1 |
| ; ASM-NEXT: jr $ra |
| |
| ; DIS-LABEL: 000002e0 <fcmpUleFloat>: |
| ; DIS-NEXT: 2e0: 460e6037 c.ule.s $f12,$f14 |
| ; DIS-NEXT: 2e4: 24020001 li v0,1 |
| ; DIS-NEXT: 2e8: 00001001 movf v0,zero,$fcc0 |
| ; DIS-NEXT: 2ec: 30420001 andi v0,v0,0x1 |
| ; DIS-NEXT: 2f0: 03e00008 jr ra |
| |
| ; IASM-LABEL: fcmpUleFloat: |
| ; IASM-NEXT: .LfcmpUleFloat$entry: |
| ; IASM-NEXT: .byte 0x37 |
| ; IASM-NEXT: .byte 0x60 |
| ; IASM-NEXT: .byte 0xe |
| ; IASM-NEXT: .byte 0x46 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x2 |
| ; IASM-NEXT: .byte 0x24 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x10 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x42 |
| ; IASM-NEXT: .byte 0x30 |
| ; IASM-NEXT: .byte 0x8 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0xe0 |
| ; IASM-NEXT: .byte 0x3 |
| |
| define internal i32 @fcmpUleDouble(double %a, double %b) { |
| entry: |
| %cmp = fcmp ule double %a, %b |
| %cmp.ret_ext = zext i1 %cmp to i32 |
| ret i32 %cmp.ret_ext |
| } |
| |
| ; ASM-LABEL: fcmpUleDouble |
| ; ASM-NEXT: .LfcmpUleDouble$entry: |
| ; ASM: c.ule.d $f12, $f14 |
| ; ASM: addiu $v0, $zero, 1 |
| ; ASM: movf $v0, $zero, $fcc0 |
| ; ASM-NEXT: andi $v0, $v0, 1 |
| ; ASM-NEXT: jr $ra |
| |
| ; DIS-LABEL: 00000300 <fcmpUleDouble>: |
| ; DIS-NEXT: 300: 462e6037 c.ule.d $f12,$f14 |
| ; DIS-NEXT: 304: 24020001 li v0,1 |
| ; DIS-NEXT: 308: 00001001 movf v0,zero,$fcc0 |
| ; DIS-NEXT: 30c: 30420001 andi v0,v0,0x1 |
| ; DIS-NEXT: 310: 03e00008 jr ra |
| |
| ; IASM-LABEL: fcmpUleDouble: |
| ; IASM-NEXT: .LfcmpUleDouble$entry: |
| ; IASM-NEXT: .byte 0x37 |
| ; IASM-NEXT: .byte 0x60 |
| ; IASM-NEXT: .byte 0x2e |
| ; IASM-NEXT: .byte 0x46 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x2 |
| ; IASM-NEXT: .byte 0x24 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x10 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x42 |
| ; IASM-NEXT: .byte 0x30 |
| ; IASM-NEXT: .byte 0x8 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0xe0 |
| ; IASM-NEXT: .byte 0x3 |
| |
| define internal i32 @fcmpUneFloat(float %a, float %b) { |
| entry: |
| %cmp = fcmp une float %a, %b |
| %cmp.ret_ext = zext i1 %cmp to i32 |
| ret i32 %cmp.ret_ext |
| } |
| |
| ; ASM-LABEL: fcmpUneFloat |
| ; ASM-NEXT: .LfcmpUneFloat$entry: |
| ; ASM: c.eq.s $f12, $f14 |
| ; ASM: addiu $v0, $zero, 1 |
| ; ASM: movt $v0, $zero, $fcc0 |
| ; ASM-NEXT: andi $v0, $v0, 1 |
| ; ASM-NEXT: jr $ra |
| |
| ; DIS-LABEL: 00000320 <fcmpUneFloat>: |
| ; DIS-NEXT: 320: 460e6032 c.eq.s $f12,$f14 |
| ; DIS-NEXT: 324: 24020001 li v0,1 |
| ; DIS-NEXT: 328: 00011001 movt v0,zero,$fcc0 |
| ; DIS-NEXT: 32c: 30420001 andi v0,v0,0x1 |
| ; DIS-NEXT: 330: 03e00008 jr ra |
| |
| ; IASM-LABEL: fcmpUneFloat: |
| ; IASM-NEXT: .LfcmpUneFloat$entry: |
| ; IASM-NEXT: .byte 0x32 |
| ; IASM-NEXT: .byte 0x60 |
| ; IASM-NEXT: .byte 0xe |
| ; IASM-NEXT: .byte 0x46 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x2 |
| ; IASM-NEXT: .byte 0x24 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x10 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x42 |
| ; IASM-NEXT: .byte 0x30 |
| ; IASM-NEXT: .byte 0x8 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0xe0 |
| ; IASM-NEXT: .byte 0x3 |
| |
| define internal i32 @fcmpUneDouble(double %a, double %b) { |
| entry: |
| %cmp = fcmp une double %a, %b |
| %cmp.ret_ext = zext i1 %cmp to i32 |
| ret i32 %cmp.ret_ext |
| } |
| |
| ; ASM-LABEL: fcmpUneDouble |
| ; ASM-NEXT: .LfcmpUneDouble$entry: |
| ; ASM: c.eq.d $f12, $f14 |
| ; ASM: addiu $v0, $zero, 1 |
| ; ASM: movt $v0, $zero, $fcc0 |
| ; ASM-NEXT: andi $v0, $v0, 1 |
| ; ASM-NEXT: jr $ra |
| |
| ; DIS-LABEL: 00000340 <fcmpUneDouble>: |
| ; DIS-NEXT: 340: 462e6032 c.eq.d $f12,$f14 |
| ; DIS-NEXT: 344: 24020001 li v0,1 |
| ; DIS-NEXT: 348: 00011001 movt v0,zero,$fcc0 |
| ; DIS-NEXT: 34c: 30420001 andi v0,v0,0x1 |
| ; DIS-NEXT: 350: 03e00008 jr ra |
| |
| ; IASM-LABEL: fcmpUneDouble: |
| ; IASM-NEXT: .LfcmpUneDouble$entry: |
| ; IASM-NEXT: .byte 0x32 |
| ; IASM-NEXT: .byte 0x60 |
| ; IASM-NEXT: .byte 0x2e |
| ; IASM-NEXT: .byte 0x46 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x2 |
| ; IASM-NEXT: .byte 0x24 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x10 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x42 |
| ; IASM-NEXT: .byte 0x30 |
| ; IASM-NEXT: .byte 0x8 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0xe0 |
| ; IASM-NEXT: .byte 0x3 |
| |
| define internal i32 @fcmpUnoFloat(float %a, float %b) { |
| entry: |
| %cmp = fcmp uno float %a, %b |
| %cmp.ret_ext = zext i1 %cmp to i32 |
| ret i32 %cmp.ret_ext |
| } |
| |
| ; ASM-LABEL: fcmpUnoFloat |
| ; ASM-NEXT: .LfcmpUnoFloat$entry: |
| ; ASM: c.un.s $f12, $f14 |
| ; ASM: addiu $v0, $zero, 1 |
| ; ASM: movf $v0, $zero, $fcc0 |
| ; ASM-NEXT: andi $v0, $v0, 1 |
| ; ASM-NEXT: jr $ra |
| |
| ; DIS-LABEL: 00000360 <fcmpUnoFloat>: |
| ; DIS-NEXT: 360: 460e6031 c.un.s $f12,$f14 |
| ; DIS-NEXT: 364: 24020001 li v0,1 |
| ; DIS-NEXT: 368: 00001001 movf v0,zero,$fcc0 |
| ; DIS-NEXT: 36c: 30420001 andi v0,v0,0x1 |
| ; DIS-NEXT: 370: 03e00008 jr ra |
| |
| ; IASM-LABEL: fcmpUnoFloat: |
| ; IASM-NEXT: .LfcmpUnoFloat$entry: |
| ; IASM-NEXT: .byte 0x31 |
| ; IASM-NEXT: .byte 0x60 |
| ; IASM-NEXT: .byte 0xe |
| ; IASM-NEXT: .byte 0x46 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x2 |
| ; IASM-NEXT: .byte 0x24 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x10 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x42 |
| ; IASM-NEXT: .byte 0x30 |
| ; IASM-NEXT: .byte 0x8 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0xe0 |
| ; IASM-NEXT: .byte 0x3 |
| |
| define internal i32 @fcmpUnoDouble(double %a, double %b) { |
| entry: |
| %cmp = fcmp uno double %a, %b |
| %cmp.ret_ext = zext i1 %cmp to i32 |
| ret i32 %cmp.ret_ext |
| } |
| |
| ; ASM-LABEL: fcmpUnoDouble |
| ; ASM-NEXT: .LfcmpUnoDouble$entry: |
| ; ASM: c.un.d $f12, $f14 |
| ; ASM: addiu $v0, $zero, 1 |
| ; ASM: movf $v0, $zero, $fcc0 |
| ; ASM-NEXT: andi $v0, $v0, 1 |
| ; ASM-NEXT: jr $ra |
| |
| ; DIS-LABEL: 00000380 <fcmpUnoDouble>: |
| ; DIS-NEXT: 380: 462e6031 c.un.d $f12,$f14 |
| ; DIS-NEXT: 384: 24020001 li v0,1 |
| ; DIS-NEXT: 388: 00001001 movf v0,zero,$fcc0 |
| ; DIS-NEXT: 38c: 30420001 andi v0,v0,0x1 |
| ; DIS-NEXT: 390: 03e00008 jr ra |
| |
| ; IASM-LABEL: fcmpUnoDouble: |
| ; IASM-NEXT: .LfcmpUnoDouble$entry: |
| ; IASM-NEXT: .byte 0x31 |
| ; IASM-NEXT: .byte 0x60 |
| ; IASM-NEXT: .byte 0x2e |
| ; IASM-NEXT: .byte 0x46 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x2 |
| ; IASM-NEXT: .byte 0x24 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x10 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x42 |
| ; IASM-NEXT: .byte 0x30 |
| ; IASM-NEXT: .byte 0x8 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0xe0 |
| ; IASM-NEXT: .byte 0x3 |
| |
| define internal i32 @fcmpTrueFloat(float %a, float %b) { |
| entry: |
| %cmp = fcmp true float %a, %b |
| %cmp.ret_ext = zext i1 %cmp to i32 |
| ret i32 %cmp.ret_ext |
| } |
| |
| ; ASM-LABEL: fcmpTrueFloat |
| ; ASM-NEXT: .LfcmpTrueFloat$entry: |
| ; ASM: addiu $v0, $zero, 1 |
| ; ASM-NEXT: andi $v0, $v0, 1 |
| ; ASM-NEXT: jr $ra |
| |
| ; DIS-LABEL: 000003a0 <fcmpTrueFloat>: |
| ; DIS-NEXT: 3a0: 24020001 li v0,1 |
| ; DIS-NEXT: 3a4: 30420001 andi v0,v0,0x1 |
| ; DIS-NEXT: 3a8: 03e00008 jr ra |
| |
| ; IASM-LABEL: fcmpTrueFloat: |
| ; IASM-NEXT: .LfcmpTrueFloat$entry: |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x2 |
| ; IASM-NEXT: .byte 0x24 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x42 |
| ; IASM-NEXT: .byte 0x30 |
| ; IASM-NEXT: .byte 0x8 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0xe0 |
| ; IASM-NEXT: .byte 0x3 |
| |
| define internal i32 @fcmpTrueDouble(double %a, double %b) { |
| entry: |
| %cmp = fcmp true double %a, %b |
| %cmp.ret_ext = zext i1 %cmp to i32 |
| ret i32 %cmp.ret_ext |
| } |
| |
| ; ASM-LABEL: fcmpTrueDouble |
| ; ASM-NEXT: .LfcmpTrueDouble$entry: |
| ; ASM: addiu $v0, $zero, 1 |
| ; ASM-NEXT: andi $v0, $v0, 1 |
| ; ASM-NEXT: jr $ra |
| |
| ; DIS-LABEL: 000003b0 <fcmpTrueDouble>: |
| ; DIS-NEXT: 3b0: 24020001 li v0,1 |
| ; DIS-NEXT: 3b4: 30420001 andi v0,v0,0x1 |
| ; DIS-NEXT: 3b8: 03e00008 jr ra |
| |
| ; IASM-LABEL: fcmpTrueDouble: |
| ; IASM-NEXT: .LfcmpTrueDouble$entry: |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x2 |
| ; IASM-NEXT: .byte 0x24 |
| ; IASM-NEXT: .byte 0x1 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0x42 |
| ; IASM-NEXT: .byte 0x30 |
| ; IASM-NEXT: .byte 0x8 |
| ; IASM-NEXT: .byte 0x0 |
| ; IASM-NEXT: .byte 0xe0 |
| ; IASM-NEXT: .byte 0x3 |