1 # RUN: llvm-mc %s -triple=mipsel-unknown-linux -show-encoding -mcpu=mips32r2 | FileCheck %s 2 # Check that the assembler can handle the documented syntax 3 # for FPU instructions. 4 #------------------------------------------------------------------------------ 5 # FP aritmetic instructions 6 #------------------------------------------------------------------------------ 7 8 # CHECK: abs.d $f12, $f14 # encoding: [0x05,0x73,0x20,0x46] 9 # CHECK: abs.s $f6, $f7 # encoding: [0x85,0x39,0x00,0x46] 10 # CHECK: add.d $f8, $f12, $f14 # encoding: [0x00,0x62,0x2e,0x46] 11 # CHECK: add.s $f9, $f6, $f7 # encoding: [0x40,0x32,0x07,0x46] 12 # CHECK: floor.w.d $f12, $f14 # encoding: [0x0f,0x73,0x20,0x46] 13 # CHECK: floor.w.s $f6, $f7 # encoding: [0x8f,0x39,0x00,0x46] 14 # CHECK: ceil.w.d $f12, $f14 # encoding: [0x0e,0x73,0x20,0x46] 15 # CHECK: ceil.w.s $f6, $f7 # encoding: [0x8e,0x39,0x00,0x46] 16 # CHECK: mul.d $f8, $f12, $f14 # encoding: [0x02,0x62,0x2e,0x46] 17 # CHECK: mul.s $f9, $f6, $f7 # encoding: [0x42,0x32,0x07,0x46] 18 # CHECK: neg.d $f12, $f14 # encoding: [0x07,0x73,0x20,0x46] 19 # CHECK: neg.s $f6, $f7 # encoding: [0x87,0x39,0x00,0x46] 20 # CHECK: round.w.d $f12, $f14 # encoding: [0x0c,0x73,0x20,0x46] 21 # CHECK: round.w.s $f6, $f7 # encoding: [0x8c,0x39,0x00,0x46] 22 # CHECK: sqrt.d $f12, $f14 # encoding: [0x04,0x73,0x20,0x46] 23 # CHECK: sqrt.s $f6, $f7 # encoding: [0x84,0x39,0x00,0x46] 24 # CHECK: sub.d $f8, $f12, $f14 # encoding: [0x01,0x62,0x2e,0x46] 25 # CHECK: sub.s $f9, $f6, $f7 # encoding: [0x41,0x32,0x07,0x46] 26 # CHECK: trunc.w.d $f12, $f14 # encoding: [0x0d,0x73,0x20,0x46] 27 # CHECK: trunc.w.s $f6, $f7 # encoding: [0x8d,0x39,0x00,0x46] 28 29 abs.d $f12,$f14 30 abs.s $f6,$f7 31 add.d $f8,$f12,$f14 32 add.s $f9,$f6,$f7 33 floor.w.d $f12,$f14 34 floor.w.s $f6,$f7 35 ceil.w.d $f12,$f14 36 ceil.w.s $f6,$f7 37 mul.d $f8,$f12,$f14 38 mul.s $f9,$f6, $f7 39 neg.d $f12,$f14 40 neg.s $f6,$f7 41 round.w.d $f12,$f14 42 round.w.s $f6,$f7 43 sqrt.d $f12,$f14 44 sqrt.s $f6,$f7 45 sub.d $f8,$f12,$f14 46 sub.s $f9,$f6,$f7 47 trunc.w.d $f12,$f14 48 trunc.w.s $f6,$f7 49 50 #------------------------------------------------------------------------------ 51 # FP compare instructions 52 #------------------------------------------------------------------------------ 53 54 # CHECK: c.eq.d $f12, $f14 # encoding: [0x32,0x60,0x2e,0x46] 55 # CHECK: c.eq.s $f6, $f7 # encoding: [0x32,0x30,0x07,0x46] 56 # CHECK: c.f.d $f12, $f14 # encoding: [0x30,0x60,0x2e,0x46] 57 # CHECK: c.f.s $f6, $f7 # encoding: [0x30,0x30,0x07,0x46] 58 # CHECK: c.le.d $f12, $f14 # encoding: [0x3e,0x60,0x2e,0x46] 59 # CHECK: c.le.s $f6, $f7 # encoding: [0x3e,0x30,0x07,0x46] 60 # CHECK: c.lt.d $f12, $f14 # encoding: [0x3c,0x60,0x2e,0x46] 61 # CHECK: c.lt.s $f6, $f7 # encoding: [0x3c,0x30,0x07,0x46] 62 # CHECK: c.nge.d $f12, $f14 # encoding: [0x3d,0x60,0x2e,0x46] 63 # CHECK: c.nge.s $f6, $f7 # encoding: [0x3d,0x30,0x07,0x46] 64 # CHECK: c.ngl.d $f12, $f14 # encoding: [0x3b,0x60,0x2e,0x46] 65 # CHECK: c.ngl.s $f6, $f7 # encoding: [0x3b,0x30,0x07,0x46] 66 # CHECK: c.ngle.d $f12, $f14 # encoding: [0x39,0x60,0x2e,0x46] 67 # CHECK: c.ngle.s $f6, $f7 # encoding: [0x39,0x30,0x07,0x46] 68 # CHECK: c.ngt.d $f12, $f14 # encoding: [0x3f,0x60,0x2e,0x46] 69 # CHECK: c.ngt.s $f6, $f7 # encoding: [0x3f,0x30,0x07,0x46] 70 # CHECK: c.ole.d $f12, $f14 # encoding: [0x36,0x60,0x2e,0x46] 71 # CHECK: c.ole.s $f6, $f7 # encoding: [0x36,0x30,0x07,0x46] 72 # CHECK: c.olt.d $f12, $f14 # encoding: [0x34,0x60,0x2e,0x46] 73 # CHECK: c.olt.s $f6, $f7 # encoding: [0x34,0x30,0x07,0x46] 74 # CHECK: c.seq.d $f12, $f14 # encoding: [0x3a,0x60,0x2e,0x46] 75 # CHECK: c.seq.s $f6, $f7 # encoding: [0x3a,0x30,0x07,0x46] 76 # CHECK: c.sf.d $f12, $f14 # encoding: [0x38,0x60,0x2e,0x46] 77 # CHECK: c.sf.s $f6, $f7 # encoding: [0x38,0x30,0x07,0x46] 78 # CHECK: c.ueq.d $f12, $f14 # encoding: [0x33,0x60,0x2e,0x46] 79 # CHECK: c.ueq.s $f28, $f18 # encoding: [0x33,0xe0,0x12,0x46] 80 # CHECK: c.ule.d $f12, $f14 # encoding: [0x37,0x60,0x2e,0x46] 81 # CHECK: c.ule.s $f6, $f7 # encoding: [0x37,0x30,0x07,0x46] 82 # CHECK: c.ult.d $f12, $f14 # encoding: [0x35,0x60,0x2e,0x46] 83 # CHECK: c.ult.s $f6, $f7 # encoding: [0x35,0x30,0x07,0x46] 84 # CHECK: c.un.d $f12, $f14 # encoding: [0x31,0x60,0x2e,0x46] 85 # CHECK: c.un.s $f6, $f7 # encoding: [0x31,0x30,0x07,0x46] 86 87 c.eq.d $f12,$f14 88 c.eq.s $f6,$f7 89 c.f.d $f12,$f14 90 c.f.s $f6,$f7 91 c.le.d $f12,$f14 92 c.le.s $f6,$f7 93 c.lt.d $f12,$f14 94 c.lt.s $f6,$f7 95 c.nge.d $f12,$f14 96 c.nge.s $f6,$f7 97 c.ngl.d $f12,$f14 98 c.ngl.s $f6,$f7 99 c.ngle.d $f12,$f14 100 c.ngle.s $f6,$f7 101 c.ngt.d $f12,$f14 102 c.ngt.s $f6,$f7 103 c.ole.d $f12,$f14 104 c.ole.s $f6,$f7 105 c.olt.d $f12,$f14 106 c.olt.s $f6,$f7 107 c.seq.d $f12,$f14 108 c.seq.s $f6,$f7 109 c.sf.d $f12,$f14 110 c.sf.s $f6,$f7 111 c.ueq.d $f12,$f14 112 c.ueq.s $f28,$f18 113 c.ule.d $f12,$f14 114 c.ule.s $f6,$f7 115 c.ult.d $f12,$f14 116 c.ult.s $f6,$f7 117 c.un.d $f12,$f14 118 c.un.s $f6,$f7 119 120 #------------------------------------------------------------------------------ 121 # FP convert instructions 122 #------------------------------------------------------------------------------ 123 # CHECK: cvt.d.s $f6, $f7 # encoding: [0xa1,0x39,0x00,0x46] 124 # CHECK: cvt.d.w $f12, $f14 # encoding: [0x21,0x73,0x80,0x46] 125 # CHECK: cvt.s.d $f12, $f14 # encoding: [0x20,0x73,0x20,0x46] 126 # CHECK: cvt.s.w $f6, $f7 # encoding: [0xa0,0x39,0x80,0x46] 127 # CHECK: cvt.w.d $f12, $f14 # encoding: [0x24,0x73,0x20,0x46] 128 # CHECK: cvt.w.s $f6, $f7 # encoding: [0xa4,0x39,0x00,0x46] 129 130 cvt.d.s $f6,$f7 131 cvt.d.w $f12,$f14 132 cvt.s.d $f12,$f14 133 cvt.s.w $f6,$f7 134 cvt.w.d $f12,$f14 135 cvt.w.s $f6,$f7 136 137 #------------------------------------------------------------------------------ 138 # FP move instructions 139 #------------------------------------------------------------------------------ 140 141 # CHECK: cfc1 $6, $0 # encoding: [0x00,0x00,0x46,0x44] 142 # CHECK: ctc1 $10, $31 # encoding: [0x00,0xf8,0xca,0x44] 143 # CHECK: mfc1 $6, $f7 # encoding: [0x00,0x38,0x06,0x44] 144 # CHECK: mfhi $5 # encoding: [0x10,0x28,0x00,0x00] 145 # CHECK: mflo $5 # encoding: [0x12,0x28,0x00,0x00] 146 # CHECK: mov.d $f6, $f8 # encoding: [0x86,0x41,0x20,0x46] 147 # CHECK: mov.s $f6, $f7 # encoding: [0x86,0x39,0x00,0x46] 148 # CHECK: mtc1 $6, $f7 # encoding: [0x00,0x38,0x86,0x44] 149 # CHECK: mthi $7 # encoding: [0x11,0x00,0xe0,0x00] 150 # CHECK: mtlo $7 # encoding: [0x13,0x00,0xe0,0x00] 151 # CHECK: swc1 $f9, 9158($7) # encoding: [0xc6,0x23,0xe9,0xe4] 152 # CHECK: mfc0 $6, $7, 0 # encoding: [0x00,0x38,0x06,0x40] 153 # CHECK: mtc0 $9, $8, 0 # encoding: [0x00,0x40,0x89,0x40] 154 # CHECK: mfc2 $5, $7, 0 # encoding: [0x00,0x38,0x05,0x48] 155 # CHECK: mtc2 $9, $4, 0 # encoding: [0x00,0x20,0x89,0x48] 156 # CHECK: mfc0 $6, $7, 2 # encoding: [0x02,0x38,0x06,0x40] 157 # CHECK: mtc0 $9, $8, 3 # encoding: [0x03,0x40,0x89,0x40] 158 # CHECK: mfc2 $5, $7, 4 # encoding: [0x04,0x38,0x05,0x48] 159 # CHECK: mtc2 $9, $4, 5 # encoding: [0x05,0x20,0x89,0x48] 160 # CHECK: movf $2, $1, $fcc0 # encoding: [0x01,0x10,0x20,0x00] 161 # CHECK: movt $2, $1, $fcc0 # encoding: [0x01,0x10,0x21,0x00] 162 # CHECK: movt $4, $5, $fcc4 # encoding: [0x01,0x20,0xb1,0x00] 163 # CHECK: movf.d $f4, $f6, $fcc2 # encoding: [0x11,0x31,0x28,0x46] 164 # CHECK: movf.s $f4, $f6, $fcc5 # encoding: [0x11,0x31,0x14,0x46] 165 # CHECK: luxc1 $f0, $6($5) # encoding: [0x05,0x00,0xa6,0x4c] 166 # CHECK: suxc1 $f4, $24($5) # encoding: [0x0d,0x20,0xb8,0x4c] 167 168 cfc1 $a2,$0 169 ctc1 $10,$31 170 mfc1 $a2,$f7 171 mfhi $a1 172 mflo $a1 173 mov.d $f6,$f8 174 mov.s $f6,$f7 175 mtc1 $a2,$f7 176 mthi $a3 177 mtlo $a3 178 swc1 $f9,9158($a3) 179 mfc0 $6, $7 180 mtc0 $9, $8 181 mfc2 $5, $7 182 mtc2 $9, $4 183 mfc0 $6, $7, 2 184 mtc0 $9, $8, 3 185 mfc2 $5, $7, 4 186 mtc2 $9, $4, 5 187 movf $2, $1, $fcc0 188 movt $2, $1, $fcc0 189 movt $4, $5, $fcc4 190 movf.d $f4, $f6, $fcc2 191 movf.s $f4, $f6, $fcc5 192 luxc1 $f0, $a2($a1) 193 suxc1 $f4, $t8($a1)