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