[InstCombine] Signed saturation patterns
[llvm-core.git] / test / MC / Mips / mips-fpu-instructions.s
blob733231afb793cc90964300c9c409ad660060a35f
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 #------------------------------------------------------------------------------
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]
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
51 #------------------------------------------------------------------------------
52 # FP compare instructions
53 #------------------------------------------------------------------------------
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]
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
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]
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
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
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)