Adding support for instructions mfc0, mfc2, mtc0, mtc2
[oota-llvm.git] / test / MC / Mips / mips-fpu-instructions.s
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]
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
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)
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