Jack Carter | a63b16a | 2012-09-07 00:23:42 +0000 | [diff] [blame] | 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 | # CHECK: .section __TEXT,__text,regular,pure_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: cvt.s.d $f12, $f14 # encoding: [0x20,0x73,0x20,0x46] |
| 127 | # CHECK: cvt.s.w $f6, $f7 # encoding: [0xa0,0x39,0x80,0x46] |
| 128 | # CHECK: cvt.w.d $f12, $f14 # encoding: [0x24,0x73,0x20,0x46] |
| 129 | # CHECK: cvt.w.s $f6, $f7 # encoding: [0xa4,0x39,0x00,0x46] |
| 130 | |
| 131 | cvt.d.s $f6,$f7 |
| 132 | cvt.d.w $f12,$f14 |
| 133 | cvt.s.d $f12,$f14 |
| 134 | cvt.s.w $f6,$f7 |
| 135 | cvt.w.d $f12,$f14 |
| 136 | cvt.w.s $f6,$f7 |
| 137 | |
| 138 | #------------------------------------------------------------------------------ |
| 139 | # FP move instructions |
| 140 | #------------------------------------------------------------------------------ |
| 141 | |
| 142 | # CHECK: cfc1 $6, $fcc0 # encoding: [0x00,0x00,0x46,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] |
Jack Carter | e948ec5 | 2012-10-06 01:17:37 +0000 | [diff] [blame] | 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] |
Jack Carter | a63b16a | 2012-09-07 00:23:42 +0000 | [diff] [blame] | 160 | |
| 161 | cfc1 $a2,$0 |
| 162 | mfc1 $a2,$f7 |
| 163 | mfhi $a1 |
| 164 | mflo $a1 |
| 165 | mov.d $f6,$f8 |
| 166 | mov.s $f6,$f7 |
| 167 | mtc1 $a2,$f7 |
| 168 | mthi $a3 |
| 169 | mtlo $a3 |
| 170 | swc1 $f9,9158($a3) |
Jack Carter | e948ec5 | 2012-10-06 01:17:37 +0000 | [diff] [blame] | 171 | mfc0 $6, $7 |
| 172 | mtc0 $9, $8 |
| 173 | mfc2 $5, $7 |
| 174 | mtc2 $9, $4 |
| 175 | mfc0 $6, $7, 2 |
| 176 | mtc0 $9, $8, 3 |
| 177 | mfc2 $5, $7, 4 |
| 178 | mtc2 $9, $4, 5 |