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