1# RUN: llvm-mc  %s -triple mips-unknown-linux -show-encoding -mcpu=mips64r2 | FileCheck %s
2# RUN: llvm-mc  %s -triple mips-unknown-linux -show-encoding -mcpu=mips64r3 | FileCheck %s
3# RUN: llvm-mc  %s -triple mips-unknown-linux -show-encoding -mcpu=mips64r5 | FileCheck %s
4
5# RUN: llvm-mc  %s -triple mips-unknown-linux -show-encoding -mattr=use-tcc-in-div -mcpu=mips64 | FileCheck %s --check-prefix=CHECK-TRAP
6# RUN: llvm-mc  %s -triple mips-unknown-linux -show-encoding -mattr=use-tcc-in-div -mcpu=mips64r2 | FileCheck %s --check-prefix=CHECK-TRAP
7# RUN: llvm-mc  %s -triple mips-unknown-linux -show-encoding -mattr=use-tcc-in-div -mcpu=mips64r3 | FileCheck %s --check-prefix=CHECK-TRAP
8# RUN: llvm-mc  %s -triple mips-unknown-linux -show-encoding -mattr=use-tcc-in-div -mcpu=mips64r5 | FileCheck %s --check-prefix=CHECK-TRAP
9
10.text
11text_label:
12
13  mul  $4, $5
14# CHECK:        mul     $4, $4, $5              # encoding: [0x70,0x85,0x20,0x02]
15# CHECK-TRAP:   mul     $4, $4, $5              # encoding: [0x70,0x85,0x20,0x02]
16  mul   $4, $5, $6
17# CHECK:        mul     $4, $5, $6              # encoding: [0x70,0xa6,0x20,0x02]
18# CHECK-TRAP:   mul     $4, $5, $6              # encoding: [0x70,0xa6,0x20,0x02]
19  mul  $4, $5, 0
20# CHECK:        addiu   $1, $zero, 0            # encoding: [0x24,0x01,0x00,0x00]
21# CHECK:        mult    $5, $1                  # encoding: [0x00,0xa1,0x00,0x18]
22# CHECK:        mflo    $4                      # encoding: [0x00,0x00,0x20,0x12]
23# CHECK-TRAP:   addiu   $1, $zero, 0            # encoding: [0x24,0x01,0x00,0x00]
24# CHECK-TRAP:   mult    $5, $1                  # encoding: [0x00,0xa1,0x00,0x18]
25# CHECK-TRAP:   mflo    $4                      # encoding: [0x00,0x00,0x20,0x12]
26  mul   $4, $5, 1
27# CHECK:        addiu   $1, $zero, 1            # encoding: [0x24,0x01,0x00,0x01]
28# CHECK:        mult    $5, $1                  # encoding: [0x00,0xa1,0x00,0x18]
29# CHECK:        mflo    $4                      # encoding: [0x00,0x00,0x20,0x12]
30# CHECK-TRAP:   addiu   $1, $zero, 1            # encoding: [0x24,0x01,0x00,0x01]
31# CHECK-TRAP:   mult    $5, $1                  # encoding: [0x00,0xa1,0x00,0x18]
32# CHECK-TRAP:   mflo    $4                      # encoding: [0x00,0x00,0x20,0x12]
33  mul  $4, $5, 0x8000
34# CHECK:        ori     $1, $zero, 32768        # encoding: [0x34,0x01,0x80,0x00]
35# CHECK:        mult    $5, $1                  # encoding: [0x00,0xa1,0x00,0x18]
36# CHECK:        mflo    $4                      # encoding: [0x00,0x00,0x20,0x12]
37# CHECK-TRAP:   ori     $1, $zero, 32768        # encoding: [0x34,0x01,0x80,0x00]
38# CHECK-TRAP:   mult    $5, $1                  # encoding: [0x00,0xa1,0x00,0x18]
39# CHECK-TRAP:   mflo    $4                      # encoding: [0x00,0x00,0x20,0x12]
40  mul  $4, $5, -0x8000
41# CHECK:        addiu   $1, $zero, -32768       # encoding: [0x24,0x01,0x80,0x00]
42# CHECK:        mult    $5, $1                  # encoding: [0x00,0xa1,0x00,0x18]
43# CHECK:        mflo    $4                      # encoding: [0x00,0x00,0x20,0x12]
44# CHECK-TRAP:   addiu   $1, $zero, -32768       # encoding: [0x24,0x01,0x80,0x00]
45# CHECK-TRAP:   mult    $5, $1                  # encoding: [0x00,0xa1,0x00,0x18]
46# CHECK-TRAP:   mflo    $4                      # encoding: [0x00,0x00,0x20,0x12]
47  mul  $4, $5, 0x10000
48# CHECK:        lui     $1, 1                   # encoding: [0x3c,0x01,0x00,0x01]
49# CHECK:        mult    $5, $1                  # encoding: [0x00,0xa1,0x00,0x18]
50# CHECK:        mflo    $4                      # encoding: [0x00,0x00,0x20,0x12]
51# CHECK-TRAP:   lui     $1, 1                   # encoding: [0x3c,0x01,0x00,0x01]
52# CHECK-TRAP:   mult    $5, $1                  # encoding: [0x00,0xa1,0x00,0x18]
53# CHECK-TRAP:   mflo    $4                      # encoding: [0x00,0x00,0x20,0x12]
54  mul  $4, $5, 0x1a5a5
55# CHECK:        lui     $1, 1                   # encoding: [0x3c,0x01,0x00,0x01]
56# CHECK:        ori     $1, $1, 42405           # encoding: [0x34,0x21,0xa5,0xa5]
57# CHECK:        mult    $5, $1                  # encoding: [0x00,0xa1,0x00,0x18]
58# CHECK:        mflo    $4                      # encoding: [0x00,0x00,0x20,0x12]
59# CHECK-TRAP:   lui     $1, 1                   # encoding: [0x3c,0x01,0x00,0x01]
60# CHECK-TRAP:   ori     $1, $1, 42405           # encoding: [0x34,0x21,0xa5,0xa5]
61# CHECK-TRAP:   mult    $5, $1                  # encoding: [0x00,0xa1,0x00,0x18]
62# CHECK-TRAP:   mflo    $4                      # encoding: [0x00,0x00,0x20,0x12]
63  mulo  $4, $5
64# CHECK:        mult    $4, $5                  # encoding: [0x00,0x85,0x00,0x18]
65# CHECK:        mflo    $4                      # encoding: [0x00,0x00,0x20,0x12]
66# CHECK:        sra     $4, $4, 31              # encoding: [0x00,0x04,0x27,0xc3]
67# CHECK:        mfhi    $1                      # encoding: [0x00,0x00,0x08,0x10]
68# CHECK:        beq     $4, $1, $tmp0           # encoding: [0x10,0x81,A,A]
69# CHECK:        nop                             # encoding: [0x00,0x00,0x00,0x00]
70# CHECK:        break   6                       # encoding: [0x00,0x06,0x00,0x0d]
71# CHECK:        mflo    $4                      # encoding: [0x00,0x00,0x20,0x12]
72# CHECK-TRAP:   mult    $4, $5                  # encoding: [0x00,0x85,0x00,0x18]
73# CHECK-TRAP:   mflo    $4                      # encoding: [0x00,0x00,0x20,0x12]
74# CHECK-TRAP:   sra     $4, $4, 31              # encoding: [0x00,0x04,0x27,0xc3]
75# CHECK-TRAP:   mfhi    $1                      # encoding: [0x00,0x00,0x08,0x10]
76# CHECK-TRAP:   tne     $4, $1, 6               # encoding: [0x00,0x81,0x01,0xb6]
77# CHECK-TRAP:   mflo    $4                      # encoding: [0x00,0x00,0x20,0x12]
78
79  mulo  $4, $5, $6
80# CHECK:        mult    $5, $6                  # encoding: [0x00,0xa6,0x00,0x18]
81# CHECK:        mflo    $4                      # encoding: [0x00,0x00,0x20,0x12]
82# CHECK:        sra     $4, $4, 31              # encoding: [0x00,0x04,0x27,0xc3]
83# CHECK:        mfhi    $1                      # encoding: [0x00,0x00,0x08,0x10]
84# CHECK:        beq     $4, $1, $tmp1           # encoding: [0x10,0x81,A,A]
85# CHECK:        nop                             # encoding: [0x00,0x00,0x00,0x00]
86# CHECK:        break   6                       # encoding: [0x00,0x06,0x00,0x0d]
87# CHECK:        mflo    $4                      # encoding: [0x00,0x00,0x20,0x12]
88# CHECK-TRAP:   mult    $5, $6                  # encoding: [0x00,0xa6,0x00,0x18]
89# CHECK-TRAP:   mflo    $4                      # encoding: [0x00,0x00,0x20,0x12]
90# CHECK-TRAP:   sra     $4, $4, 31              # encoding: [0x00,0x04,0x27,0xc3]
91# CHECK-TRAP:   mfhi    $1                      # encoding: [0x00,0x00,0x08,0x10]
92# CHECK-TRAP:   tne     $4, $1, 6               # encoding: [0x00,0x81,0x01,0xb6]
93# CHECK-TRAP:   mflo    $4                      # encoding: [0x00,0x00,0x20,0x12]
94 mulou  $4,$5
95# CHECK:        multu   $4, $5                  # encoding: [0x00,0x85,0x00,0x19]
96# CHECK:        mfhi    $1                      # encoding: [0x00,0x00,0x08,0x10]
97# CHECK:        mflo    $4                      # encoding: [0x00,0x00,0x20,0x12]
98# CHECK:        beqz    $1, $tmp2               # encoding: [0x10,0x20,A,A]
99# CHECK:        nop                             # encoding: [0x00,0x00,0x00,0x00]
100# CHECK:        break   6                       # encoding: [0x00,0x06,0x00,0x0d]
101# CHECK-TRAP:   multu   $4, $5                  # encoding: [0x00,0x85,0x00,0x19]
102# CHECK-TRAP:   mfhi    $1                      # encoding: [0x00,0x00,0x08,0x10]
103# CHECK-TRAP:   mflo    $4                      # encoding: [0x00,0x00,0x20,0x12]
104# CHECK-TRAP:   tne     $1, $zero, 6            # encoding: [0x00,0x20,0x01,0xb6]
105 mulou $4, $5, $6
106# CHECK:        multu   $5, $6                  # encoding: [0x00,0xa6,0x00,0x19]
107# CHECK:        mfhi    $1                      # encoding: [0x00,0x00,0x08,0x10]
108# CHECK:        mflo    $4                      # encoding: [0x00,0x00,0x20,0x12]
109# CHECK:        beqz    $1, $tmp3               # encoding: [0x10,0x20,A,A]
110# CHECK:        nop                             # encoding: [0x00,0x00,0x00,0x00]
111# CHECK:        break   6                       # encoding: [0x00,0x06,0x00,0x0d]
112# CHECK-TRAP:   multu   $5, $6                  # encoding: [0x00,0xa6,0x00,0x19]
113# CHECK-TRAP:   mfhi    $1                      # encoding: [0x00,0x00,0x08,0x10]
114# CHECK-TRAP:   mflo    $4                      # encoding: [0x00,0x00,0x20,0x12]
115# CHECK-TRAP:   tne     $1, $zero, 6            # encoding: [0x00,0x20,0x01,0xb6]
116
117 dmul $4, $5, $6
118# CHECK:        dmultu  $5, $6                  # encoding: [0x00,0xa6,0x00,0x1d]
119# CHECK:        mflo    $4                      # encoding: [0x00,0x00,0x20,0x12]
120# CHECK-TRAP    dmultu  $5, $6                  # encoding: [0x00,0xa6,0x00,0x1d]
121# CHECK-TRAP:   mflo    $4                      # encoding: [0x00,0x00,0x20,0x12]
122 dmul $4, $5, 1
123# CHECK:        addiu   $1, $zero, 1            # encoding: [0x24,0x01,0x00,0x01]
124# CHECK:        dmult   $5, $1                  # encoding: [0x00,0xa1,0x00,0x1c]
125# CHECK:        mflo    $4                      # encoding: [0x00,0x00,0x20,0x12]
126# CHECK-TRAP:   addiu   $1, $zero, 1            # encoding: [0x24,0x01,0x00,0x01]
127# CHECK-TRAP:   dmult   $5, $1                  # encoding: [0x00,0xa1,0x00,0x1c]
128# CHECK-TRAP:   mflo    $4                      # encoding: [0x00,0x00,0x20,0x12]
129 dmulo $4, $5, $6
130# CHECK:        dmult   $5, $6                  # encoding: [0x00,0xa6,0x00,0x1c]
131# CHECK:        mflo    $4                      # encoding: [0x00,0x00,0x20,0x12]
132# CHECK:        dsra32  $4, $4, 31              # encoding: [0x00,0x04,0x27,0xff]
133# CHECK:        mfhi    $1                      # encoding: [0x00,0x00,0x08,0x10]
134# CHECK:        beq     $4, $1, $tmp4           # encoding: [0x10,0x81,A,A]
135# CHECK:        nop                             # encoding: [0x00,0x00,0x00,0x00]
136# CHECK:        break   6                       # encoding: [0x00,0x06,0x00,0x0d]
137# CHECK:        mflo    $4                      # encoding: [0x00,0x00,0x20,0x12]
138# CHECK-TRAP:   dmult   $5, $6                  # encoding: [0x00,0xa6,0x00,0x1c]
139# CHECK-TRAP:   mflo    $4                      # encoding: [0x00,0x00,0x20,0x12]
140# CHECK-TRAP:   dsra32  $4, $4, 31              # encoding: [0x00,0x04,0x27,0xff]
141# CHECK-TRAP:   mfhi    $1                      # encoding: [0x00,0x00,0x08,0x10]
142# CHECK-TRAP:   tne     $4, $1, 6               # encoding: [0x00,0x81,0x01,0xb6]
143# CHECK-TRAP:   mflo    $4                      # encoding: [0x00,0x00,0x20,0x12]
144 dmulou  $4,$5,$6
145# CHECK:        dmultu  $5, $6                  # encoding: [0x00,0xa6,0x00,0x1d]
146# CHECK:        mfhi    $1                      # encoding: [0x00,0x00,0x08,0x10]
147# CHECK:        mflo    $4                      # encoding: [0x00,0x00,0x20,0x12]
148# CHECK:        beqz    $1, $tmp5               # encoding: [0x10,0x20,A,A]
149# CHECK:        nop                             # encoding: [0x00,0x00,0x00,0x00]
150# CHECK:        break   6                       # encoding: [0x00,0x06,0x00,0x0d]
151# CHECK-TRAP:   dmultu  $5, $6                  # encoding: [0x00,0xa6,0x00,0x1d]
152# CHECK-TRAP:   mfhi    $1                      # encoding: [0x00,0x00,0x08,0x10]
153# CHECK-TRAP:   mflo    $4                      # encoding: [0x00,0x00,0x20,0x12]
154# CHECK-TRAP:   tne     $1, $zero, 6            # encoding: [0x00,0x20,0x01,0xb6]
155