• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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)