File: arith.s

package info (click to toggle)
llvm-toolchain-15 1%3A15.0.6-4
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 1,554,644 kB
  • sloc: cpp: 5,922,452; ansic: 1,012,136; asm: 674,362; python: 191,568; objc: 73,855; f90: 42,327; lisp: 31,913; pascal: 11,973; javascript: 10,144; sh: 9,421; perl: 7,447; ml: 5,527; awk: 3,523; makefile: 2,520; xml: 885; cs: 573; fortran: 567
file content (212 lines) | stat: -rw-r--r-- 6,137 bytes parent folder | download | duplicates (13)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
## Test valid arithmetic operation instructions

# RUN: llvm-mc %s --triple=loongarch32 --show-encoding \
# RUN:     | FileCheck --check-prefixes=CHECK-ASM,CHECK-ASM-AND-OBJ %s
# RUN: llvm-mc %s --triple=loongarch64 --show-encoding --defsym=LA64=1 \
# RUN:     | FileCheck --check-prefixes=CHECK-ASM,CHECK-ASM-AND-OBJ,CHECK64-ASM,CHECK64-ASM-AND-OBJ %s
# RUN: llvm-mc %s --triple=loongarch32 --filetype=obj | llvm-objdump -d - \
# RUN:     | FileCheck --check-prefix=CHECK-ASM-AND-OBJ %s
# RUN: llvm-mc %s --triple=loongarch64 --filetype=obj --defsym=LA64=1 | llvm-objdump -d - \
# RUN:     | FileCheck --check-prefixes=CHECK-ASM-AND-OBJ,CHECK64-ASM-AND-OBJ %s

#############################################################
## Instructions for both loongarch32 and loongarch64
#############################################################

# CHECK-ASM-AND-OBJ: add.w $a5, $ra, $s8
# CHECK-ASM: encoding: [0x29,0x7c,0x10,0x00]
add.w $a5, $ra, $s8

# CHECK-ASM-AND-OBJ: sub.w $r21, $s2, $t7
# CHECK-ASM: encoding: [0x35,0x4f,0x11,0x00]
sub.w $r21, $s2, $t7

# CHECK-ASM-AND-OBJ: addi.w $a1, $a3, 246
# CHECK-ASM: encoding: [0xe5,0xd8,0x83,0x02]
addi.w $a1, $a3, 246

# CHECK-ASM-AND-OBJ: alsl.w $tp, $t5, $tp, 4
# CHECK-ASM: encoding: [0x22,0x8a,0x05,0x00]
alsl.w $tp, $t5, $tp, 4

# CHECK-ASM-AND-OBJ: lu12i.w $t4, 49
# CHECK-ASM: encoding: [0x30,0x06,0x00,0x14]
lu12i.w $t4, 49

# CHECK-ASM-AND-OBJ: lu12i.w $a0, -1
# CHECK-ASM: encoding: [0xe4,0xff,0xff,0x15]
lu12i.w $a0, -1

# CHECK-ASM-AND-OBJ: slt $s6, $s3, $tp
# CHECK-ASM: encoding: [0x5d,0x0b,0x12,0x00]
slt $s6, $s3, $tp

# CHECK-ASM-AND-OBJ: sltu $a7, $r21, $s6
# CHECK-ASM: encoding: [0xab,0xf6,0x12,0x00]
sltu $a7, $r21, $s6

# CHECK-ASM-AND-OBJ: slti $s4, $ra, 235
# CHECK-ASM: encoding: [0x3b,0xac,0x03,0x02]
slti $s4, $ra, 235

# CHECK-ASM-AND-OBJ: sltui $zero, $a4, 162
# CHECK-ASM: encoding: [0x00,0x89,0x42,0x02]
sltui $zero, $a4, 162

# CHECK-ASM-AND-OBJ: pcaddi $a5, 187
# CHECK-ASM: encoding: [0x69,0x17,0x00,0x18]
pcaddi $a5, 187

# CHECK-ASM-AND-OBJ: pcaddu12i $zero, 37
# CHECK-ASM: encoding: [0xa0,0x04,0x00,0x1c]
pcaddu12i $zero, 37

# CHECK-ASM-AND-OBJ: pcalau12i $a6, 89
# CHECK-ASM: encoding: [0x2a,0x0b,0x00,0x1a]
pcalau12i $a6, 89

# CHECK-ASM-AND-OBJ: and $t7, $s8, $ra
# CHECK-ASM: encoding: [0xf3,0x87,0x14,0x00]
and $t7, $s8, $ra

# CHECK-ASM-AND-OBJ: or $t5, $t4, $s7
# CHECK-ASM: encoding: [0x11,0x7a,0x15,0x00]
or $t5, $t4, $s7

# CHECK-ASM-AND-OBJ: nor $a1, $t6, $a1
# CHECK-ASM: encoding: [0x45,0x16,0x14,0x00]
nor $a1, $t6, $a1

# CHECK-ASM-AND-OBJ: xor $t3, $t7, $a4
# CHECK-ASM: encoding: [0x6f,0xa2,0x15,0x00]
xor $t3, $t7, $a4

# CHECK-ASM-AND-OBJ: andn $s5, $s2, $a1
# CHECK-ASM: encoding: [0x3c,0x97,0x16,0x00]
andn $s5, $s2, $a1

# CHECK-ASM-AND-OBJ: orn $tp, $sp, $s2
# CHECK-ASM: encoding: [0x62,0x64,0x16,0x00]
orn $tp, $sp, $s2

# CHECK-ASM-AND-OBJ: andi $s2, $zero, 106
# CHECK-ASM: encoding: [0x19,0xa8,0x41,0x03]
andi $s2, $zero, 106

# CHECK-ASM-AND-OBJ: ori $t5, $a1, 47
# CHECK-ASM: encoding: [0xb1,0xbc,0x80,0x03]
ori $t5, $a1, 47

# CHECK-ASM-AND-OBJ: xori $t6, $s0, 99
# CHECK-ASM: encoding: [0xf2,0x8e,0xc1,0x03]
xori $t6, $s0, 99

# CHECK-ASM-AND-OBJ: mul.w $a0, $t6, $sp
# CHECK-ASM: encoding: [0x44,0x0e,0x1c,0x00]
mul.w $a0, $t6, $sp

# CHECK-ASM-AND-OBJ: mulh.w $s4, $s0, $zero
# CHECK-ASM: encoding: [0xfb,0x82,0x1c,0x00]
mulh.w $s4, $s0, $zero

# CHECK-ASM-AND-OBJ: mulh.wu $a6, $t5, $s1
# CHECK-ASM: encoding: [0x2a,0x62,0x1d,0x00]
mulh.wu $a6, $t5, $s1

# CHECK-ASM-AND-OBJ: div.w $s7, $t1, $s2
# CHECK-ASM: encoding: [0xbe,0x65,0x20,0x00]
div.w $s7, $t1, $s2

# CHECK-ASM-AND-OBJ: mod.w $ra, $s3, $a6
# CHECK-ASM: encoding: [0x41,0xab,0x20,0x00]
mod.w $ra, $s3, $a6

# CHECK-ASM-AND-OBJ: div.wu $t7, $s0, $zero
# CHECK-ASM: encoding: [0xf3,0x02,0x21,0x00]
div.wu $t7, $s0, $zero

# CHECK-ASM-AND-OBJ: mod.wu $s4, $a5, $t5
# CHECK-ASM: encoding: [0x3b,0xc5,0x21,0x00]
mod.wu $s4, $a5, $t5


#############################################################
## Instructions only for loongarch64
#############################################################

.ifdef LA64

# CHECK64-ASM-AND-OBJ: add.d $tp, $t6, $s4
# CHECK64-ASM: encoding: [0x42,0xee,0x10,0x00]
add.d $tp, $t6, $s4

# CHECK64-ASM-AND-OBJ: sub.d $a3, $t0, $a3
# CHECK64-ASM: encoding: [0x87,0x9d,0x11,0x00]
sub.d $a3, $t0, $a3

# CHECK64-ASM-AND-OBJ: addi.d $s5, $a2, 75
# CHECK64-ASM: encoding: [0xdc,0x2c,0xc1,0x02]
addi.d $s5, $a2, 75

# CHECK64-ASM-AND-OBJ: addu16i.d $a5, $s0, 23
# CHECK64-ASM: encoding: [0xe9,0x5e,0x00,0x10]
addu16i.d $a5, $s0, 23

# CHECK64-ASM-AND-OBJ: alsl.wu $t7, $a4, $s2, 1
# CHECK64-ASM: encoding: [0x13,0x65,0x06,0x00]
alsl.wu $t7, $a4, $s2, 1

# CHECK64-ASM-AND-OBJ: alsl.d $t5, $a7, $a1, 3
# CHECK64-ASM: encoding: [0x71,0x15,0x2d,0x00]
alsl.d $t5, $a7, $a1, 3

# CHECK64-ASM-AND-OBJ: lu32i.d $sp, 196
# CHECK64-ASM: encoding: [0x83,0x18,0x00,0x16]
lu32i.d $sp, 196

# CHECK64-ASM-AND-OBJ: lu52i.d $t1, $a0, 195
# CHECK64-ASM: encoding: [0x8d,0x0c,0x03,0x03]
lu52i.d $t1, $a0, 195

# CHECK64-ASM-AND-OBJ: pcaddu18i $t0, 26
# CHECK64-ASM: encoding: [0x4c,0x03,0x00,0x1e]
pcaddu18i $t0, 26

# CHECK64-ASM-AND-OBJ: mul.d $ra, $t2, $s1
# CHECK64-ASM: encoding: [0xc1,0xe1,0x1d,0x00]
mul.d $ra, $t2, $s1

# CHECK64-ASM-AND-OBJ: mulh.d $s5, $ra, $s4
# CHECK64-ASM: encoding: [0x3c,0x6c,0x1e,0x00]
mulh.d $s5, $ra, $s4

# CHECK64-ASM-AND-OBJ: mulh.du $t1, $s4, $s6
# CHECK64-ASM: encoding: [0x6d,0xf7,0x1e,0x00]
mulh.du $t1, $s4, $s6

# CHECK64-ASM-AND-OBJ: mulw.d.w $s4, $a2, $t5
# CHECK64-ASM: encoding: [0xdb,0x44,0x1f,0x00]
mulw.d.w $s4, $a2, $t5

# CHECK64-ASM-AND-OBJ: mulw.d.wu $t5, $fp, $s7
# CHECK64-ASM: encoding: [0xd1,0xfa,0x1f,0x00]
mulw.d.wu $t5, $fp, $s7

# CHECK64-ASM-AND-OBJ: div.d $s0, $a2, $r21
# CHECK64-ASM: encoding: [0xd7,0x54,0x22,0x00]
div.d $s0, $a2, $r21

# CHECK64-ASM-AND-OBJ: mod.d $t4, $sp, $t3
# CHECK64-ASM: encoding: [0x70,0xbc,0x22,0x00]
mod.d $t4, $sp, $t3

# CHECK64-ASM-AND-OBJ: div.du $s8, $s1, $t2
# CHECK64-ASM: encoding: [0x1f,0x3b,0x23,0x00]
div.du $s8, $s1, $t2

# CHECK64-ASM-AND-OBJ: mod.du $s2, $s0, $s1
# CHECK64-ASM: encoding: [0xf9,0xe2,0x23,0x00]
mod.du $s2, $s0, $s1

.endif