xref: /aosp_15_r20/external/llvm/test/CodeGen/Mips/llvm-ir/add.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=mips -mcpu=mips2 | FileCheck %s \
2*9880d681SAndroid Build Coastguard Worker; RUN:    -check-prefixes=ALL,NOT-R2-R6,GP32
3*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=mips -mcpu=mips32 | FileCheck %s \
4*9880d681SAndroid Build Coastguard Worker; RUN:    -check-prefixes=ALL,NOT-R2-R6,GP32
5*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=mips -mcpu=mips32r2 | FileCheck %s \
6*9880d681SAndroid Build Coastguard Worker; RUN:    -check-prefixes=ALL,R2-R6,GP32
7*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=mips -mcpu=mips32r3 | FileCheck %s \
8*9880d681SAndroid Build Coastguard Worker; RUN:    -check-prefixes=ALL,R2-R6,GP32
9*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=mips -mcpu=mips32r5 | FileCheck %s \
10*9880d681SAndroid Build Coastguard Worker; RUN:    -check-prefixes=ALL,R2-R6,GP32
11*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=mips -mcpu=mips32r6 | FileCheck %s \
12*9880d681SAndroid Build Coastguard Worker; RUN:    -check-prefixes=ALL,R2-R6,GP32
13*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=mips64 -mcpu=mips3 | FileCheck %s \
14*9880d681SAndroid Build Coastguard Worker; RUN:    -check-prefixes=ALL,NOT-R2-R6,GP64
15*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=mips64 -mcpu=mips4 | FileCheck %s \
16*9880d681SAndroid Build Coastguard Worker; RUN:    -check-prefixes=ALL,NOT-R2-R6,GP64
17*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=mips64 -mcpu=mips64 | FileCheck %s \
18*9880d681SAndroid Build Coastguard Worker; RUN:    -check-prefixes=ALL,NOT-R2-R6,GP64
19*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=mips64 -mcpu=mips64r2 | FileCheck %s \
20*9880d681SAndroid Build Coastguard Worker; RUN:    -check-prefixes=ALL,R2-R6,GP64
21*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=mips64 -mcpu=mips64r3 | FileCheck %s \
22*9880d681SAndroid Build Coastguard Worker; RUN:    -check-prefixes=ALL,R2-R6,GP64
23*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=mips64 -mcpu=mips64r5 | FileCheck %s \
24*9880d681SAndroid Build Coastguard Worker; RUN:    -check-prefixes=ALL,R2-R6,GP64
25*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=mips64 -mcpu=mips64r6 | FileCheck %s \
26*9880d681SAndroid Build Coastguard Worker; RUN:    -check-prefixes=ALL,R2-R6,GP64
27*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=mips -mcpu=mips32r3 -mattr=+micromips -O2 | FileCheck %s \
28*9880d681SAndroid Build Coastguard Worker; RUN:    -check-prefixes=ALL,MMR6,MM32
29*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=mips -mcpu=mips32r6 -mattr=+micromips -O2 | FileCheck %s \
30*9880d681SAndroid Build Coastguard Worker; RUN:    -check-prefixes=ALL,MMR6,MM32
31*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=mips -mcpu=mips64r6 -target-abi n64 -mattr=+micromips -O2 | FileCheck %s \
32*9880d681SAndroid Build Coastguard Worker; RUN:    -check-prefixes=ALL,MMR6,MM64
33*9880d681SAndroid Build Coastguard Worker
34*9880d681SAndroid Build Coastguard Workerdefine signext i1 @add_i1(i1 signext %a, i1 signext %b) {
35*9880d681SAndroid Build Coastguard Workerentry:
36*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: add_i1:
37*9880d681SAndroid Build Coastguard Worker
38*9880d681SAndroid Build Coastguard Worker  ; NOT-R2-R6:  addu    $[[T0:[0-9]+]], $4, $5
39*9880d681SAndroid Build Coastguard Worker  ; NOT-R2-R6:  sll     $[[T0]], $[[T0]], 31
40*9880d681SAndroid Build Coastguard Worker  ; NOT-R2-R6:  sra     $2, $[[T0]], 31
41*9880d681SAndroid Build Coastguard Worker
42*9880d681SAndroid Build Coastguard Worker  ; R2-R6:      addu    $[[T0:[0-9]+]], $4, $5
43*9880d681SAndroid Build Coastguard Worker  ; R2-R6:      sll     $[[T0]], $[[T0]], 31
44*9880d681SAndroid Build Coastguard Worker  ; R2-R6:      sra     $2, $[[T0]], 31
45*9880d681SAndroid Build Coastguard Worker
46*9880d681SAndroid Build Coastguard Worker  ; MMR6:       addu16  $[[T0:[0-9]+]], $4, $5
47*9880d681SAndroid Build Coastguard Worker  ; MMR6:       sll     $[[T1:[0-9]+]], $[[T0]], 31
48*9880d681SAndroid Build Coastguard Worker  ; MMR6:       sra     $2, $[[T1]], 31
49*9880d681SAndroid Build Coastguard Worker
50*9880d681SAndroid Build Coastguard Worker  %r = add i1 %a, %b
51*9880d681SAndroid Build Coastguard Worker  ret i1 %r
52*9880d681SAndroid Build Coastguard Worker}
53*9880d681SAndroid Build Coastguard Worker
54*9880d681SAndroid Build Coastguard Workerdefine signext i8 @add_i8(i8 signext %a, i8 signext %b) {
55*9880d681SAndroid Build Coastguard Workerentry:
56*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: add_i8:
57*9880d681SAndroid Build Coastguard Worker
58*9880d681SAndroid Build Coastguard Worker  ; NOT-R2-R6:  addu    $[[T0:[0-9]+]], $4, $5
59*9880d681SAndroid Build Coastguard Worker  ; NOT-R2-R6:  sll     $[[T0]], $[[T0]], 24
60*9880d681SAndroid Build Coastguard Worker  ; NOT-R2-R6:  sra     $2, $[[T0]], 24
61*9880d681SAndroid Build Coastguard Worker
62*9880d681SAndroid Build Coastguard Worker  ; R2-R6:      addu    $[[T0:[0-9]+]], $4, $5
63*9880d681SAndroid Build Coastguard Worker  ; R2-R6:      seb     $2, $[[T0:[0-9]+]]
64*9880d681SAndroid Build Coastguard Worker
65*9880d681SAndroid Build Coastguard Worker  ; MMR6:       addu16  $[[T0:[0-9]+]], $4, $5
66*9880d681SAndroid Build Coastguard Worker  ; MMR6:       seb     $2, $[[T0]]
67*9880d681SAndroid Build Coastguard Worker
68*9880d681SAndroid Build Coastguard Worker  %r = add i8 %a, %b
69*9880d681SAndroid Build Coastguard Worker  ret i8 %r
70*9880d681SAndroid Build Coastguard Worker}
71*9880d681SAndroid Build Coastguard Worker
72*9880d681SAndroid Build Coastguard Workerdefine signext i16 @add_i16(i16 signext %a, i16 signext %b) {
73*9880d681SAndroid Build Coastguard Workerentry:
74*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: add_i16:
75*9880d681SAndroid Build Coastguard Worker
76*9880d681SAndroid Build Coastguard Worker  ; NOT-R2-R6:  addu    $[[T0:[0-9]+]], $4, $5
77*9880d681SAndroid Build Coastguard Worker  ; NOT-R2-R6:  sll     $[[T0]], $[[T0]], 16
78*9880d681SAndroid Build Coastguard Worker  ; NOT-R2-R6:  sra     $2, $[[T0]], 16
79*9880d681SAndroid Build Coastguard Worker
80*9880d681SAndroid Build Coastguard Worker  ; R2-R6:      addu    $[[T0:[0-9]+]], $4, $5
81*9880d681SAndroid Build Coastguard Worker  ; R2-R6:      seh     $2, $[[T0]]
82*9880d681SAndroid Build Coastguard Worker
83*9880d681SAndroid Build Coastguard Worker  ; MMR6:       addu16  $[[T0:[0-9]+]], $4, $5
84*9880d681SAndroid Build Coastguard Worker  ; MMR6:       seh     $2, $[[T0]]
85*9880d681SAndroid Build Coastguard Worker
86*9880d681SAndroid Build Coastguard Worker  %r = add i16 %a, %b
87*9880d681SAndroid Build Coastguard Worker  ret i16 %r
88*9880d681SAndroid Build Coastguard Worker}
89*9880d681SAndroid Build Coastguard Worker
90*9880d681SAndroid Build Coastguard Workerdefine signext i32 @add_i32(i32 signext %a, i32 signext %b) {
91*9880d681SAndroid Build Coastguard Workerentry:
92*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: add_i32:
93*9880d681SAndroid Build Coastguard Worker
94*9880d681SAndroid Build Coastguard Worker  ; NOT-R2-R6:  addu    $2, $4, $5
95*9880d681SAndroid Build Coastguard Worker  ; R2-R6:      addu    $2, $4, $5
96*9880d681SAndroid Build Coastguard Worker
97*9880d681SAndroid Build Coastguard Worker  ; MMR6:       addu16  $[[T0:[0-9]+]], $4, $5
98*9880d681SAndroid Build Coastguard Worker
99*9880d681SAndroid Build Coastguard Worker  %r = add i32 %a, %b
100*9880d681SAndroid Build Coastguard Worker  ret i32 %r
101*9880d681SAndroid Build Coastguard Worker}
102*9880d681SAndroid Build Coastguard Worker
103*9880d681SAndroid Build Coastguard Workerdefine signext i64 @add_i64(i64 signext %a, i64 signext %b) {
104*9880d681SAndroid Build Coastguard Workerentry:
105*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: add_i64:
106*9880d681SAndroid Build Coastguard Worker
107*9880d681SAndroid Build Coastguard Worker  ; GP32:       addu    $3, $5, $7
108*9880d681SAndroid Build Coastguard Worker  ; GP32:       sltu    $[[T0:[0-9]+]], $3, $7
109*9880d681SAndroid Build Coastguard Worker  ; GP32:       addu    $[[T1:[0-9]+]], $[[T0]], $6
110*9880d681SAndroid Build Coastguard Worker  ; GP32:       addu    $2, $4, $[[T1]]
111*9880d681SAndroid Build Coastguard Worker
112*9880d681SAndroid Build Coastguard Worker  ; GP64:       daddu   $2, $4, $5
113*9880d681SAndroid Build Coastguard Worker
114*9880d681SAndroid Build Coastguard Worker  ; MM32:       addu    $3, $5, $7
115*9880d681SAndroid Build Coastguard Worker  ; MM32:       sltu    $[[T0:[0-9]+]], $3, $7
116*9880d681SAndroid Build Coastguard Worker  ; MM32:       addu    $[[T1:[0-9]+]], $[[T0]], $6
117*9880d681SAndroid Build Coastguard Worker  ; MM32:       addu    $2, $4, $[[T1]]
118*9880d681SAndroid Build Coastguard Worker
119*9880d681SAndroid Build Coastguard Worker  ; MM64:       daddu   $2, $4, $5
120*9880d681SAndroid Build Coastguard Worker
121*9880d681SAndroid Build Coastguard Worker  %r = add i64 %a, %b
122*9880d681SAndroid Build Coastguard Worker  ret i64 %r
123*9880d681SAndroid Build Coastguard Worker}
124*9880d681SAndroid Build Coastguard Worker
125*9880d681SAndroid Build Coastguard Workerdefine signext i128 @add_i128(i128 signext %a, i128 signext %b) {
126*9880d681SAndroid Build Coastguard Workerentry:
127*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: add_i128:
128*9880d681SAndroid Build Coastguard Worker
129*9880d681SAndroid Build Coastguard Worker  ; GP32:       lw        $[[T0:[0-9]+]], 28($sp)
130*9880d681SAndroid Build Coastguard Worker  ; GP32:       addu      $[[T1:[0-9]+]], $7, $[[T0]]
131*9880d681SAndroid Build Coastguard Worker  ; GP32:       sltu      $[[T2:[0-9]+]], $[[T1]], $[[T0]]
132*9880d681SAndroid Build Coastguard Worker  ; GP32:       lw        $[[T3:[0-9]+]], 24($sp)
133*9880d681SAndroid Build Coastguard Worker  ; GP32:       addu      $[[T4:[0-9]+]], $[[T2]], $[[T3]]
134*9880d681SAndroid Build Coastguard Worker  ; GP32:       addu      $[[T5:[0-9]+]], $6, $[[T4]]
135*9880d681SAndroid Build Coastguard Worker  ; GP32:       lw        $[[T6:[0-9]+]], 16($sp)
136*9880d681SAndroid Build Coastguard Worker  ; GP32:       lw        $[[T7:[0-9]+]], 20($sp)
137*9880d681SAndroid Build Coastguard Worker  ; GP32:       sltu      $[[T8:[0-9]+]], $[[T5]], $[[T3]]
138*9880d681SAndroid Build Coastguard Worker  ; GP32:       addu      $[[T9:[0-9]+]], $[[T8]], $[[T7]]
139*9880d681SAndroid Build Coastguard Worker  ; GP32:       addu      $3, $5, $[[T8]]
140*9880d681SAndroid Build Coastguard Worker  ; GP32:       sltu      $[[T10:[0-9]+]], $3, $[[T7]]
141*9880d681SAndroid Build Coastguard Worker  ; GP32:       addu      $[[T11:[0-9]+]], $[[T10]], $[[T6]]
142*9880d681SAndroid Build Coastguard Worker  ; GP32:       addu      $2, $4, $[[T11]]
143*9880d681SAndroid Build Coastguard Worker  ; GP32:       move      $4, $[[T5]]
144*9880d681SAndroid Build Coastguard Worker  ; GP32:       move      $5, $[[T1]]
145*9880d681SAndroid Build Coastguard Worker
146*9880d681SAndroid Build Coastguard Worker  ; GP64:       daddu     $3, $5, $7
147*9880d681SAndroid Build Coastguard Worker  ; GP64:       sltu      $[[T0:[0-9]+]], $3, $7
148*9880d681SAndroid Build Coastguard Worker  ; GP64:       daddu     $[[T1:[0-9]+]], $[[T0]], $6
149*9880d681SAndroid Build Coastguard Worker  ; GP64:       daddu     $2, $4, $[[T1]]
150*9880d681SAndroid Build Coastguard Worker
151*9880d681SAndroid Build Coastguard Worker  ; MM32:       lw        $[[T0:[0-9]+]], 28($sp)
152*9880d681SAndroid Build Coastguard Worker  ; MM32:       addu      $[[T1:[0-9]+]], $7, $[[T0]]
153*9880d681SAndroid Build Coastguard Worker  ; MM32:       sltu      $[[T2:[0-9]+]], $[[T1]], $[[T0]]
154*9880d681SAndroid Build Coastguard Worker  ; MM32:       lw        $[[T3:[0-9]+]], 24($sp)
155*9880d681SAndroid Build Coastguard Worker  ; MM32:       addu      $[[T4:[0-9]+]], $[[T2]], $[[T3]]
156*9880d681SAndroid Build Coastguard Worker  ; MM32:       addu      $[[T5:[0-9]+]], $6, $[[T4]]
157*9880d681SAndroid Build Coastguard Worker  ; MM32:       sltu      $[[T6:[0-9]+]], $[[T5]], $[[T3]]
158*9880d681SAndroid Build Coastguard Worker  ; MM32:       lw        $[[T7:[0-9]+]], 20($sp)
159*9880d681SAndroid Build Coastguard Worker  ; MM32:       addu      $[[T8:[0-9]+]], $[[T6]], $[[T7]]
160*9880d681SAndroid Build Coastguard Worker  ; MM32:       addu      $[[T9:[0-9]+]], $5, $[[T8]]
161*9880d681SAndroid Build Coastguard Worker  ; MM32:       lw        $[[T10:[0-9]+]], 16($sp)
162*9880d681SAndroid Build Coastguard Worker  ; MM32:       sltu      $[[T11:[0-9]+]], $[[T9]], $[[T7]]
163*9880d681SAndroid Build Coastguard Worker  ; MM32:       addu      $[[T12:[0-9]+]], $[[T11]], $[[T10]]
164*9880d681SAndroid Build Coastguard Worker  ; MM32:       addu      $[[T13:[0-9]+]], $4, $[[T12]]
165*9880d681SAndroid Build Coastguard Worker  ; MM32:       move      $4, $[[T5]]
166*9880d681SAndroid Build Coastguard Worker  ; MM32:       move      $5, $[[T1]]
167*9880d681SAndroid Build Coastguard Worker
168*9880d681SAndroid Build Coastguard Worker  ; MM64:       daddu     $3, $5, $7
169*9880d681SAndroid Build Coastguard Worker  ; MM64:       sltu      $[[T0:[0-9]+]], $3, $7
170*9880d681SAndroid Build Coastguard Worker  ; MM64:       daddu     $[[T1:[0-9]+]], $[[T0]], $6
171*9880d681SAndroid Build Coastguard Worker  ; MM64:       daddu     $2, $4, $[[T1]]
172*9880d681SAndroid Build Coastguard Worker
173*9880d681SAndroid Build Coastguard Worker  %r = add i128 %a, %b
174*9880d681SAndroid Build Coastguard Worker  ret i128 %r
175*9880d681SAndroid Build Coastguard Worker}
176*9880d681SAndroid Build Coastguard Worker
177*9880d681SAndroid Build Coastguard Workerdefine signext i1 @add_i1_4(i1 signext %a) {
178*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: add_i1_4:
179*9880d681SAndroid Build Coastguard Worker
180*9880d681SAndroid Build Coastguard Worker  ; ALL:        move      $2, $4
181*9880d681SAndroid Build Coastguard Worker
182*9880d681SAndroid Build Coastguard Worker  %r = add i1 4, %a
183*9880d681SAndroid Build Coastguard Worker  ret i1 %r
184*9880d681SAndroid Build Coastguard Worker}
185*9880d681SAndroid Build Coastguard Worker
186*9880d681SAndroid Build Coastguard Workerdefine signext i8 @add_i8_4(i8 signext %a) {
187*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: add_i8_4:
188*9880d681SAndroid Build Coastguard Worker
189*9880d681SAndroid Build Coastguard Worker  ; NOT-R2-R6:  sll     $[[T0:[0-9]+]], $4, 24
190*9880d681SAndroid Build Coastguard Worker  ; NOT-R2-R6:  lui     $[[T1:[0-9]+]], 1024
191*9880d681SAndroid Build Coastguard Worker  ; NOT-R2-R6:  addu    $[[T0]], $[[T0]], $[[T1]]
192*9880d681SAndroid Build Coastguard Worker  ; NOT-R2-R6:  sra     $2, $[[T0]], 24
193*9880d681SAndroid Build Coastguard Worker
194*9880d681SAndroid Build Coastguard Worker  ; R2-R6:      addiu   $[[T0:[0-9]+]], $4, 4
195*9880d681SAndroid Build Coastguard Worker  ; R2-R6:      seb     $2, $[[T0]]
196*9880d681SAndroid Build Coastguard Worker
197*9880d681SAndroid Build Coastguard Worker  ; MM32:       addiur2 $[[T0:[0-9]+]], $4, 4
198*9880d681SAndroid Build Coastguard Worker  ; MM32:       seb     $2, $[[T0]]
199*9880d681SAndroid Build Coastguard Worker
200*9880d681SAndroid Build Coastguard Worker  ; MM64:       addiur2 $[[T0:[0-9]+]], $4, 4
201*9880d681SAndroid Build Coastguard Worker  ; MM64:       seb     $2, $[[T0]]
202*9880d681SAndroid Build Coastguard Worker
203*9880d681SAndroid Build Coastguard Worker  %r = add i8 4, %a
204*9880d681SAndroid Build Coastguard Worker  ret i8 %r
205*9880d681SAndroid Build Coastguard Worker}
206*9880d681SAndroid Build Coastguard Worker
207*9880d681SAndroid Build Coastguard Workerdefine signext i16 @add_i16_4(i16 signext %a) {
208*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: add_i16_4:
209*9880d681SAndroid Build Coastguard Worker
210*9880d681SAndroid Build Coastguard Worker  ; NOT-R2-R6:  sll     $[[T0:[0-9]+]], $4, 16
211*9880d681SAndroid Build Coastguard Worker  ; NOT-R2-R6:  lui     $[[T1:[0-9]+]], 4
212*9880d681SAndroid Build Coastguard Worker  ; NOT-R2-R6:  addu    $[[T0]], $[[T0]], $[[T1]]
213*9880d681SAndroid Build Coastguard Worker  ; NOT-R2-R6:  sra     $2, $[[T0]], 16
214*9880d681SAndroid Build Coastguard Worker
215*9880d681SAndroid Build Coastguard Worker  ; R2-R6:      addiu   $[[T0:[0-9]+]], $4, 4
216*9880d681SAndroid Build Coastguard Worker  ; R2-R6:      seh     $2, $[[T0]]
217*9880d681SAndroid Build Coastguard Worker
218*9880d681SAndroid Build Coastguard Worker  ; MM32:       addiur2 $[[T0:[0-9]+]], $4, 4
219*9880d681SAndroid Build Coastguard Worker  ; MM32:       seh     $2, $[[T0]]
220*9880d681SAndroid Build Coastguard Worker
221*9880d681SAndroid Build Coastguard Worker  ; MM64:       addiur2 $[[T0:[0-9]+]], $4, 4
222*9880d681SAndroid Build Coastguard Worker  ; MM64:       seh     $2, $[[T0]]
223*9880d681SAndroid Build Coastguard Worker
224*9880d681SAndroid Build Coastguard Worker  %r = add i16 4, %a
225*9880d681SAndroid Build Coastguard Worker  ret i16 %r
226*9880d681SAndroid Build Coastguard Worker}
227*9880d681SAndroid Build Coastguard Worker
228*9880d681SAndroid Build Coastguard Workerdefine signext i32 @add_i32_4(i32 signext %a) {
229*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: add_i32_4:
230*9880d681SAndroid Build Coastguard Worker
231*9880d681SAndroid Build Coastguard Worker  ; GP32:       addiu   $2, $4, 4
232*9880d681SAndroid Build Coastguard Worker
233*9880d681SAndroid Build Coastguard Worker  ; GP64:       addiu   $2, $4, 4
234*9880d681SAndroid Build Coastguard Worker
235*9880d681SAndroid Build Coastguard Worker  ; MM32:       addiur2 $2, $4, 4
236*9880d681SAndroid Build Coastguard Worker
237*9880d681SAndroid Build Coastguard Worker  ; MM64:       addiur2 $2, $4, 4
238*9880d681SAndroid Build Coastguard Worker
239*9880d681SAndroid Build Coastguard Worker  %r = add i32 4, %a
240*9880d681SAndroid Build Coastguard Worker  ret i32 %r
241*9880d681SAndroid Build Coastguard Worker}
242*9880d681SAndroid Build Coastguard Worker
243*9880d681SAndroid Build Coastguard Workerdefine signext i64 @add_i64_4(i64 signext %a) {
244*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: add_i64_4:
245*9880d681SAndroid Build Coastguard Worker
246*9880d681SAndroid Build Coastguard Worker  ; GP32:       addiu   $[[T0:[0-9]+]], $5, 4
247*9880d681SAndroid Build Coastguard Worker  ; GP32:       addiu   $[[T1:[0-9]+]], $zero, 4
248*9880d681SAndroid Build Coastguard Worker  ; GP32:       sltu    $[[T1]], $[[T0]], $[[T1]]
249*9880d681SAndroid Build Coastguard Worker  ; GP32:       addu    $2, $4, $[[T1]]
250*9880d681SAndroid Build Coastguard Worker
251*9880d681SAndroid Build Coastguard Worker  ; GP64:       daddiu  $2, $4, 4
252*9880d681SAndroid Build Coastguard Worker
253*9880d681SAndroid Build Coastguard Worker  ; MM32:       addiu   $[[T0:[0-9]+]], $5, 4
254*9880d681SAndroid Build Coastguard Worker  ; MM32:       li16    $[[T1:[0-9]+]], 4
255*9880d681SAndroid Build Coastguard Worker  ; MM32:       sltu    $[[T2:[0-9]+]], $[[T0]], $[[T1]]
256*9880d681SAndroid Build Coastguard Worker  ; MM32:       addu    $2, $4, $[[T2]]
257*9880d681SAndroid Build Coastguard Worker
258*9880d681SAndroid Build Coastguard Worker  ; MM64:       daddiu  $2, $4, 4
259*9880d681SAndroid Build Coastguard Worker
260*9880d681SAndroid Build Coastguard Worker  %r = add i64 4, %a
261*9880d681SAndroid Build Coastguard Worker  ret i64 %r
262*9880d681SAndroid Build Coastguard Worker}
263*9880d681SAndroid Build Coastguard Worker
264*9880d681SAndroid Build Coastguard Workerdefine signext i128 @add_i128_4(i128 signext %a) {
265*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: add_i128_4:
266*9880d681SAndroid Build Coastguard Worker
267*9880d681SAndroid Build Coastguard Worker  ; GP32:       addiu   $[[T0:[0-9]+]], $7, 4
268*9880d681SAndroid Build Coastguard Worker  ; GP32:       addiu   $[[T1:[0-9]+]], $zero, 4
269*9880d681SAndroid Build Coastguard Worker  ; GP32:       sltu    $[[T1]], $[[T0]], $[[T1]]
270*9880d681SAndroid Build Coastguard Worker  ; GP32:       addu    $[[T2:[0-9]+]], $6, $[[T1]]
271*9880d681SAndroid Build Coastguard Worker  ; GP32:       sltu    $[[T1]], $[[T2]], $zero
272*9880d681SAndroid Build Coastguard Worker  ; GP32:       addu    $[[T3:[0-9]+]], $5, $[[T1]]
273*9880d681SAndroid Build Coastguard Worker  ; GP32:       sltu    $[[T1]], $[[T3]], $zero
274*9880d681SAndroid Build Coastguard Worker  ; GP32:       addu    $[[T1]], $4, $[[T1]]
275*9880d681SAndroid Build Coastguard Worker  ; GP32:       move    $4, $[[T2]]
276*9880d681SAndroid Build Coastguard Worker  ; GP32:       move    $5, $[[T0]]
277*9880d681SAndroid Build Coastguard Worker
278*9880d681SAndroid Build Coastguard Worker  ; GP64:       daddiu  $[[T0:[0-9]+]], $5, 4
279*9880d681SAndroid Build Coastguard Worker  ; GP64:       daddiu  $[[T1:[0-9]+]], $zero, 4
280*9880d681SAndroid Build Coastguard Worker  ; GP64:       sltu    $[[T1]], $[[T0]], $[[T1]]
281*9880d681SAndroid Build Coastguard Worker  ; GP64:       daddu   $2, $4, $[[T1]]
282*9880d681SAndroid Build Coastguard Worker
283*9880d681SAndroid Build Coastguard Worker  ; MM32:       addiu   $[[T0:[0-9]+]], $7, 4
284*9880d681SAndroid Build Coastguard Worker  ; MM32:       li16    $[[T1:[0-9]+]], 4
285*9880d681SAndroid Build Coastguard Worker  ; MM32:       sltu    $[[T1]], $[[T0]], $[[T1]]
286*9880d681SAndroid Build Coastguard Worker  ; MM32:       addu    $[[T2:[0-9]+]], $6, $[[T1]]
287*9880d681SAndroid Build Coastguard Worker  ; MM32:       lui     $[[T1]], 0
288*9880d681SAndroid Build Coastguard Worker  ; MM32:       sltu    $[[T3:[0-9]+]], $[[T2]], $[[T1]]
289*9880d681SAndroid Build Coastguard Worker  ; MM32:       addu    $[[T3]], $5, $[[T3]]
290*9880d681SAndroid Build Coastguard Worker  ; MM32:       sltu    $[[T1]], $[[T3]], $[[T1]]
291*9880d681SAndroid Build Coastguard Worker  ; MM32:       addu    $[[T1]], $4, $[[T1]]
292*9880d681SAndroid Build Coastguard Worker  ; MM32:       move    $4, $[[T2]]
293*9880d681SAndroid Build Coastguard Worker  ; MM32:       move    $5, $[[T0]]
294*9880d681SAndroid Build Coastguard Worker
295*9880d681SAndroid Build Coastguard Worker  ; MM64:       daddiu  $[[T0:[0-9]+]], $5, 4
296*9880d681SAndroid Build Coastguard Worker  ; MM64:       daddiu  $[[T1:[0-9]+]], $zero, 4
297*9880d681SAndroid Build Coastguard Worker  ; MM64:       sltu    $[[T1]], $[[T0]], $[[T1]]
298*9880d681SAndroid Build Coastguard Worker  ; MM64:       daddu   $2, $4, $[[T1]]
299*9880d681SAndroid Build Coastguard Worker
300*9880d681SAndroid Build Coastguard Worker  %r = add i128 4, %a
301*9880d681SAndroid Build Coastguard Worker  ret i128 %r
302*9880d681SAndroid Build Coastguard Worker}
303*9880d681SAndroid Build Coastguard Worker
304*9880d681SAndroid Build Coastguard Workerdefine signext i1 @add_i1_3(i1 signext %a) {
305*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: add_i1_3:
306*9880d681SAndroid Build Coastguard Worker
307*9880d681SAndroid Build Coastguard Worker  ; ALL:        sll     $[[T0:[0-9]+]], $4, 31
308*9880d681SAndroid Build Coastguard Worker  ; ALL:        lui     $[[T1:[0-9]+]], 32768
309*9880d681SAndroid Build Coastguard Worker
310*9880d681SAndroid Build Coastguard Worker  ; GP32:       addu    $[[T0]], $[[T0]], $[[T1]]
311*9880d681SAndroid Build Coastguard Worker  ; GP32:       sra     $[[T1]], $[[T0]], 31
312*9880d681SAndroid Build Coastguard Worker
313*9880d681SAndroid Build Coastguard Worker  ; GP64:       addu    $[[T0]], $[[T0]], $[[T1]]
314*9880d681SAndroid Build Coastguard Worker  ; GP64:       sra     $[[T1]], $[[T0]], 31
315*9880d681SAndroid Build Coastguard Worker
316*9880d681SAndroid Build Coastguard Worker  ; MMR6:       addu16  $[[T0]], $[[T0]], $[[T1]]
317*9880d681SAndroid Build Coastguard Worker  ; MMR6:       sra     $[[T0]], $[[T0]], 31
318*9880d681SAndroid Build Coastguard Worker
319*9880d681SAndroid Build Coastguard Worker  %r = add i1 3, %a
320*9880d681SAndroid Build Coastguard Worker  ret i1 %r
321*9880d681SAndroid Build Coastguard Worker}
322*9880d681SAndroid Build Coastguard Worker
323*9880d681SAndroid Build Coastguard Workerdefine signext i8 @add_i8_3(i8 signext %a) {
324*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: add_i8_3:
325*9880d681SAndroid Build Coastguard Worker
326*9880d681SAndroid Build Coastguard Worker  ; NOT-R2-R6:  sll     $[[T0:[0-9]+]], $4, 24
327*9880d681SAndroid Build Coastguard Worker  ; NOT-R2-R6:  lui     $[[T1:[0-9]+]], 768
328*9880d681SAndroid Build Coastguard Worker  ; NOT-R2-R6:  addu    $[[T0]], $[[T0]], $[[T1]]
329*9880d681SAndroid Build Coastguard Worker  ; NOT-R2-R6:  sra     $2, $[[T0]], 24
330*9880d681SAndroid Build Coastguard Worker
331*9880d681SAndroid Build Coastguard Worker  ; R2-R6:      addiu   $[[T0:[0-9]+]], $4, 3
332*9880d681SAndroid Build Coastguard Worker  ; R2-R6:      seb     $2, $[[T0]]
333*9880d681SAndroid Build Coastguard Worker
334*9880d681SAndroid Build Coastguard Worker  ; MMR6:       addius5 $[[T0:[0-9]+]], 3
335*9880d681SAndroid Build Coastguard Worker  ; MMR6:       seb     $2, $[[T0]]
336*9880d681SAndroid Build Coastguard Worker
337*9880d681SAndroid Build Coastguard Worker  %r = add i8 3, %a
338*9880d681SAndroid Build Coastguard Worker  ret i8 %r
339*9880d681SAndroid Build Coastguard Worker}
340*9880d681SAndroid Build Coastguard Worker
341*9880d681SAndroid Build Coastguard Workerdefine signext i16 @add_i16_3(i16 signext %a) {
342*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: add_i16_3:
343*9880d681SAndroid Build Coastguard Worker
344*9880d681SAndroid Build Coastguard Worker  ; NOT-R2-R6:  sll     $[[T0:[0-9]+]], $4, 16
345*9880d681SAndroid Build Coastguard Worker  ; NOT-R2-R6:  lui     $[[T1:[0-9]+]], 3
346*9880d681SAndroid Build Coastguard Worker  ; NOT-R2-R6:  addu    $[[T0]], $[[T0]], $[[T1]]
347*9880d681SAndroid Build Coastguard Worker  ; NOT-R2-R6:  sra     $2, $[[T0]], 16
348*9880d681SAndroid Build Coastguard Worker
349*9880d681SAndroid Build Coastguard Worker  ; R2-R6:      addiu   $[[T0:[0-9]+]], $4, 3
350*9880d681SAndroid Build Coastguard Worker  ; R2-R6:      seh     $2, $[[T0]]
351*9880d681SAndroid Build Coastguard Worker
352*9880d681SAndroid Build Coastguard Worker  ; MMR6:       addius5 $[[T0:[0-9]+]], 3
353*9880d681SAndroid Build Coastguard Worker  ; MMR6:       seh     $2, $[[T0]]
354*9880d681SAndroid Build Coastguard Worker
355*9880d681SAndroid Build Coastguard Worker  %r = add i16 3, %a
356*9880d681SAndroid Build Coastguard Worker  ret i16 %r
357*9880d681SAndroid Build Coastguard Worker}
358*9880d681SAndroid Build Coastguard Worker
359*9880d681SAndroid Build Coastguard Workerdefine signext i32 @add_i32_3(i32 signext %a) {
360*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: add_i32_3:
361*9880d681SAndroid Build Coastguard Worker
362*9880d681SAndroid Build Coastguard Worker  ; NOT-R2-R6:  addiu   $2, $4, 3
363*9880d681SAndroid Build Coastguard Worker
364*9880d681SAndroid Build Coastguard Worker  ; R2-R6:      addiu   $2, $4, 3
365*9880d681SAndroid Build Coastguard Worker
366*9880d681SAndroid Build Coastguard Worker  ; MMR6:       addius5 $[[T0:[0-9]+]], 3
367*9880d681SAndroid Build Coastguard Worker  ; MMR6:       move    $2, $[[T0]]
368*9880d681SAndroid Build Coastguard Worker
369*9880d681SAndroid Build Coastguard Worker  %r = add i32 3, %a
370*9880d681SAndroid Build Coastguard Worker  ret i32 %r
371*9880d681SAndroid Build Coastguard Worker}
372*9880d681SAndroid Build Coastguard Worker
373*9880d681SAndroid Build Coastguard Workerdefine signext i64 @add_i64_3(i64 signext %a) {
374*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: add_i64_3:
375*9880d681SAndroid Build Coastguard Worker
376*9880d681SAndroid Build Coastguard Worker  ; GP32:       addiu   $[[T0:[0-9]+]], $5, 3
377*9880d681SAndroid Build Coastguard Worker  ; GP32:       addiu   $[[T1:[0-9]+]], $zero, 3
378*9880d681SAndroid Build Coastguard Worker  ; GP32:       sltu    $[[T1]], $[[T0]], $[[T1]]
379*9880d681SAndroid Build Coastguard Worker  ; GP32:       addu    $2, $4, $[[T1]]
380*9880d681SAndroid Build Coastguard Worker
381*9880d681SAndroid Build Coastguard Worker  ; GP64:       daddiu  $2, $4, 3
382*9880d681SAndroid Build Coastguard Worker
383*9880d681SAndroid Build Coastguard Worker  ; MM32:       addiu   $[[T0:[0-9]+]], $5, 3
384*9880d681SAndroid Build Coastguard Worker  ; MM32:       li16    $[[T1:[0-9]+]], 3
385*9880d681SAndroid Build Coastguard Worker  ; MM32:       sltu    $[[T2:[0-9]+]], $[[T0]], $[[T1]]
386*9880d681SAndroid Build Coastguard Worker  ; MM32:       addu    $2, $4, $[[T2]]
387*9880d681SAndroid Build Coastguard Worker
388*9880d681SAndroid Build Coastguard Worker  ; MM64:       daddiu  $2, $4, 3
389*9880d681SAndroid Build Coastguard Worker
390*9880d681SAndroid Build Coastguard Worker  %r = add i64 3, %a
391*9880d681SAndroid Build Coastguard Worker  ret i64 %r
392*9880d681SAndroid Build Coastguard Worker}
393*9880d681SAndroid Build Coastguard Worker
394*9880d681SAndroid Build Coastguard Workerdefine signext i128 @add_i128_3(i128 signext %a) {
395*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: add_i128_3:
396*9880d681SAndroid Build Coastguard Worker
397*9880d681SAndroid Build Coastguard Worker  ; GP32:       addiu   $[[T0:[0-9]+]], $7, 3
398*9880d681SAndroid Build Coastguard Worker  ; GP32:       addiu   $[[T1:[0-9]+]], $zero, 3
399*9880d681SAndroid Build Coastguard Worker  ; GP32:       sltu    $[[T1]], $[[T0]], $[[T1]]
400*9880d681SAndroid Build Coastguard Worker  ; GP32:       addu    $[[T2:[0-9]+]], $6, $[[T1]]
401*9880d681SAndroid Build Coastguard Worker  ; GP32:       sltu    $[[T3:[0-9]+]], $[[T2]], $zero
402*9880d681SAndroid Build Coastguard Worker  ; GP32:       addu    $[[T4:[0-9]+]], $5, $[[T3]]
403*9880d681SAndroid Build Coastguard Worker  ; GP32:       sltu    $[[T5:[0-9]+]], $[[T4]], $zero
404*9880d681SAndroid Build Coastguard Worker  ; GP32:       addu    $[[T5]], $4, $[[T5]]
405*9880d681SAndroid Build Coastguard Worker  ; GP32:       move    $4, $[[T2]]
406*9880d681SAndroid Build Coastguard Worker  ; GP32:       move    $5, $[[T0]]
407*9880d681SAndroid Build Coastguard Worker
408*9880d681SAndroid Build Coastguard Worker  ; GP64:       daddiu  $[[T0:[0-9]+]], $5, 3
409*9880d681SAndroid Build Coastguard Worker  ; GP64:       daddiu  $[[T1:[0-9]+]], $zero, 3
410*9880d681SAndroid Build Coastguard Worker  ; GP64:       sltu    $[[T1]], $[[T0]], $[[T1]]
411*9880d681SAndroid Build Coastguard Worker  ; GP64:       daddu   $2, $4, $[[T1]]
412*9880d681SAndroid Build Coastguard Worker
413*9880d681SAndroid Build Coastguard Worker  ; MM32:       addiu   $[[T0:[0-9]+]], $7, 3
414*9880d681SAndroid Build Coastguard Worker  ; MM32:       li16    $[[T1:[0-9]+]], 3
415*9880d681SAndroid Build Coastguard Worker  ; MM32:       sltu    $[[T1]], $[[T0]], $[[T1]]
416*9880d681SAndroid Build Coastguard Worker  ; MM32:       addu    $[[T2:[0-9]+]], $6, $[[T1]]
417*9880d681SAndroid Build Coastguard Worker  ; MM32:       lui     $[[T3:[0-9]+]], 0
418*9880d681SAndroid Build Coastguard Worker  ; MM32:       sltu    $[[T4:[0-9]+]], $[[T2]], $[[T3]]
419*9880d681SAndroid Build Coastguard Worker  ; MM32:       addu    $[[T4]], $5, $[[T4]]
420*9880d681SAndroid Build Coastguard Worker  ; MM32:       sltu    $[[T5:[0-9]+]], $[[T4]], $[[T3]]
421*9880d681SAndroid Build Coastguard Worker  ; MM32:       addu    $[[T5]], $4, $[[T5]]
422*9880d681SAndroid Build Coastguard Worker  ; MM32:       move    $4, $[[T2]]
423*9880d681SAndroid Build Coastguard Worker  ; MM32:       move    $5, $[[T0]]
424*9880d681SAndroid Build Coastguard Worker
425*9880d681SAndroid Build Coastguard Worker  ; MM64:       daddiu  $[[T0:[0-9]+]], $5, 3
426*9880d681SAndroid Build Coastguard Worker  ; MM64:       daddiu  $[[T1:[0-9]+]], $zero, 3
427*9880d681SAndroid Build Coastguard Worker  ; MM64:       sltu    $[[T1]], $[[T0]], $[[T1]]
428*9880d681SAndroid Build Coastguard Worker  ; MM64:       daddu   $2, $4, $[[T1]]
429*9880d681SAndroid Build Coastguard Worker
430*9880d681SAndroid Build Coastguard Worker  %r = add i128 3, %a
431*9880d681SAndroid Build Coastguard Worker  ret i128 %r
432*9880d681SAndroid Build Coastguard Worker}
433