blob: a126c6f7188cd5128f9e65fd2d584111cc6dbab8 [file] [log] [blame]
Jack Cartera63b16a2012-09-07 00:23:42 +00001# 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 Cartere948ec52012-10-06 01:17:37 +0000152# 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 Cartera63b16a2012-09-07 00:23:42 +0000160
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 Cartere948ec52012-10-06 01:17:37 +0000171 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