OLD | NEW |
1 ; Test encoding of MIPS32 instructions used in intrinsic calls | 1 ; Test encoding of MIPS32 instructions used in intrinsic calls |
2 | 2 |
3 ; REQUIRES: allow_dump | 3 ; REQUIRES: allow_dump |
4 | 4 |
5 ; Compile using standalone assembler. | 5 ; Compile using standalone assembler. |
6 ; RUN: %p2i --filetype=asm -i %s --target=mips32 --args -O2 \ | 6 ; RUN: %p2i --filetype=asm -i %s --target=mips32 --args -O2 \ |
7 ; RUN: --allow-externally-defined-symbols --skip-unimplemented \ | 7 ; RUN: --allow-externally-defined-symbols --skip-unimplemented \ |
8 ; RUN: | FileCheck %s --check-prefix=ASM | 8 ; RUN: | FileCheck %s --check-prefix=ASM |
9 | 9 |
10 ; Show bytes in assembled standalone code. | 10 ; Show bytes in assembled standalone code. |
11 ; RUN: %p2i --filetype=asm -i %s --target=mips32 --assemble --disassemble \ | 11 ; RUN: %p2i --filetype=asm -i %s --target=mips32 --assemble --disassemble \ |
12 ; RUN: --args -O2 --allow-externally-defined-symbols --skip-unimplemented \ | 12 ; RUN: --args -O2 --allow-externally-defined-symbols --skip-unimplemented \ |
13 ; RUN: | FileCheck %s --check-prefix=DIS | 13 ; RUN: | FileCheck %s --check-prefix=DIS |
14 | 14 |
15 ; Compile using integrated assembler. | 15 ; Compile using integrated assembler. |
16 ; RUN: %p2i --filetype=iasm -i %s --target=mips32 --args -O2 \ | 16 ; RUN: %p2i --filetype=iasm -i %s --target=mips32 --args -O2 \ |
17 ; RUN: --allow-externally-defined-symbols --skip-unimplemented \ | 17 ; RUN: --allow-externally-defined-symbols --skip-unimplemented \ |
18 ; RUN: | FileCheck %s --check-prefix=IASM | 18 ; RUN: | FileCheck %s --check-prefix=IASM |
19 | 19 |
20 ; Show bytes in assembled integrated code. | 20 ; Show bytes in assembled integrated code. |
21 ; RUN: %p2i --filetype=iasm -i %s --target=mips32 --assemble --disassemble \ | 21 ; RUN: %p2i --filetype=iasm -i %s --target=mips32 --assemble --disassemble \ |
22 ; RUN: --args -O2 --allow-externally-defined-symbols --skip-unimplemented \ | 22 ; RUN: --args -O2 --allow-externally-defined-symbols --skip-unimplemented \ |
23 ; RUN: | FileCheck %s --check-prefix=DIS | 23 ; RUN: | FileCheck %s --check-prefix=DIS |
24 | 24 |
| 25 declare i16 @llvm.bswap.i16(i16) |
| 26 declare i32 @llvm.bswap.i32(i32) |
| 27 declare i64 @llvm.bswap.i64(i64) |
25 declare i32 @llvm.ctlz.i32(i32, i1) | 28 declare i32 @llvm.ctlz.i32(i32, i1) |
26 declare i64 @llvm.ctlz.i64(i64, i1) | 29 declare i64 @llvm.ctlz.i64(i64, i1) |
27 declare i32 @llvm.cttz.i32(i32, i1) | 30 declare i32 @llvm.cttz.i32(i32, i1) |
28 declare i64 @llvm.cttz.i64(i64, i1) | 31 declare i64 @llvm.cttz.i64(i64, i1) |
29 declare void @llvm.trap() | 32 declare void @llvm.trap() |
30 | 33 |
| 34 define internal i32 @encBswap16(i32 %x) { |
| 35 entry: |
| 36 %x_trunc = trunc i32 %x to i16 |
| 37 %r = call i16 @llvm.bswap.i16(i16 %x_trunc) |
| 38 %r_zext = zext i16 %r to i32 |
| 39 ret i32 %r_zext |
| 40 } |
| 41 |
| 42 ; ASM-LABEL: encBswap16 |
| 43 ; ASM-NEXT: .LencBswap16$entry: |
| 44 ; ASM-NEXT: sll $v0, $a0, 8 |
| 45 ; ASM-NEXT: lui $v1, 255 |
| 46 ; ASM-NEXT: and $v0, $v0, $v1 |
| 47 ; ASM-NEXT: sll $a0, $a0, 24 |
| 48 ; ASM-NEXT: or $v0, $a0, $v0 |
| 49 ; ASM-NEXT: srl $v0, $v0, 16 |
| 50 ; ASM-NEXT: andi $v0, $v0, 65535 |
| 51 ; ASM-NEXT: jr $ra |
| 52 |
| 53 ; DIS-LABEL: {{.*}} <encBswap16>: |
| 54 ; DIS-NEXT: {{.*}} 00041200 sll v0,a0,0x8 |
| 55 ; DIS-NEXT: {{.*}} 3c0300ff lui v1,0xff |
| 56 ; DIS-NEXT: {{.*}} 00431024 and v0,v0,v1 |
| 57 ; DIS-NEXT: {{.*}} 00042600 sll a0,a0,0x18 |
| 58 ; DIS-NEXT: {{.*}} 00821025 or v0,a0,v0 |
| 59 ; DIS-NEXT: {{.*}} 00021402 srl v0,v0,0x10 |
| 60 ; DIS-NEXT: {{.*}} 3042ffff andi v0,v0,0xffff |
| 61 ; DIS-NEXT: {{.*}} 03e00008 jr ra |
| 62 |
| 63 ; IASM-LABEL: encBswap16 |
| 64 ; IASM-NEXT: .LencBswap16$entry: |
| 65 ; IASM-NEXT: .byte 0x0 |
| 66 ; IASM-NEXT: .byte 0x12 |
| 67 ; IASM-NEXT: .byte 0x4 |
| 68 ; IASM-NEXT: .byte 0x0 |
| 69 ; IASM-NEXT: .byte 0xff |
| 70 ; IASM-NEXT: .byte 0x0 |
| 71 ; IASM-NEXT: .byte 0x3 |
| 72 ; IASM-NEXT: .byte 0x3c |
| 73 ; IASM-NEXT: .byte 0x24 |
| 74 ; IASM-NEXT: .byte 0x10 |
| 75 ; IASM-NEXT: .byte 0x43 |
| 76 ; IASM-NEXT: .byte 0x0 |
| 77 ; IASM-NEXT: .byte 0x0 |
| 78 ; IASM-NEXT: .byte 0x26 |
| 79 ; IASM-NEXT: .byte 0x4 |
| 80 ; IASM-NEXT: .byte 0x0 |
| 81 ; IASM-NEXT: .byte 0x25 |
| 82 ; IASM-NEXT: .byte 0x10 |
| 83 ; IASM-NEXT: .byte 0x82 |
| 84 ; IASM-NEXT: .byte 0x0 |
| 85 ; IASM-NEXT: .byte 0x2 |
| 86 ; IASM-NEXT: .byte 0x14 |
| 87 ; IASM-NEXT: .byte 0x2 |
| 88 ; IASM-NEXT: .byte 0x0 |
| 89 ; IASM-NEXT: .byte 0xff |
| 90 ; IASM-NEXT: .byte 0xff |
| 91 ; IASM-NEXT: .byte 0x42 |
| 92 ; IASM-NEXT: .byte 0x30 |
| 93 ; IASM-NEXT: .byte 0x8 |
| 94 ; IASM-NEXT: .byte 0x0 |
| 95 ; IASM-NEXT: .byte 0xe0 |
| 96 ; IASM-NEXT: .byte 0x3 |
| 97 |
| 98 define internal i32 @encBswap32(i32 %x) { |
| 99 entry: |
| 100 %r = call i32 @llvm.bswap.i32(i32 %x) |
| 101 ret i32 %r |
| 102 } |
| 103 |
| 104 ; ASM-LABEL: encBswap32 |
| 105 ; ASM-NEXT: .LencBswap32$entry: |
| 106 ; ASM-NEXT: srl $v0, $a0, 24 |
| 107 ; ASM-NEXT: srl $v1, $a0, 8 |
| 108 ; ASM-NEXT: andi $v1, $v1, 65280 |
| 109 ; ASM-NEXT: or $v0, $v1, $v0 |
| 110 ; ASM-NEXT: sll $v1, $a0, 8 |
| 111 ; ASM-NEXT: lui $a1, 255 |
| 112 ; ASM-NEXT: and $v1, $v1, $a1 |
| 113 ; ASM-NEXT: sll $a0, $a0, 24 |
| 114 ; ASM-NEXT: or $v1, $a0, $v1 |
| 115 ; ASM-NEXT: or $v1, $v1, $v0 |
| 116 ; ASM-NEXT: move $v0, $v1 |
| 117 ; ASM-NEXT: jr $ra |
| 118 |
| 119 ; DIS-LABEL: {{.*}} <encBswap32>: |
| 120 ; DIS-NEXT: {{.*}} 00041602 srl v0,a0,0x18 |
| 121 ; DIS-NEXT: {{.*}} 00041a02 srl v1,a0,0x8 |
| 122 ; DIS-NEXT: {{.*}} 3063ff00 andi v1,v1,0xff00 |
| 123 ; DIS-NEXT: {{.*}} 00621025 or v0,v1,v0 |
| 124 ; DIS-NEXT: {{.*}} 00041a00 sll v1,a0,0x8 |
| 125 ; DIS-NEXT: {{.*}} 3c0500ff lui a1,0xff |
| 126 ; DIS-NEXT: {{.*}} 00651824 and v1,v1,a1 |
| 127 ; DIS-NEXT: {{.*}} 00042600 sll a0,a0,0x18 |
| 128 ; DIS-NEXT: {{.*}} 00831825 or v1,a0,v1 |
| 129 ; DIS-NEXT: {{.*}} 00621825 or v1,v1,v0 |
| 130 ; DIS-NEXT: {{.*}} 00601021 move v0,v1 |
| 131 ; DIS-NEXT: {{.*}} 03e00008 jr ra |
| 132 |
| 133 ; IASM-LABEL: encBswap32 |
| 134 ; IASM-NEXT: .LencBswap32$entry: |
| 135 ; IASM-NEXT: .byte 0x2 |
| 136 ; IASM-NEXT: .byte 0x16 |
| 137 ; IASM-NEXT: .byte 0x4 |
| 138 ; IASM-NEXT: .byte 0x0 |
| 139 ; IASM-NEXT: .byte 0x2 |
| 140 ; IASM-NEXT: .byte 0x1a |
| 141 ; IASM-NEXT: .byte 0x4 |
| 142 ; IASM-NEXT: .byte 0x0 |
| 143 ; IASM-NEXT: .byte 0x0 |
| 144 ; IASM-NEXT: .byte 0xff |
| 145 ; IASM-NEXT: .byte 0x63 |
| 146 ; IASM-NEXT: .byte 0x30 |
| 147 ; IASM-NEXT: .byte 0x25 |
| 148 ; IASM-NEXT: .byte 0x10 |
| 149 ; IASM-NEXT: .byte 0x62 |
| 150 ; IASM-NEXT: .byte 0x0 |
| 151 ; IASM-NEXT: .byte 0x0 |
| 152 ; IASM-NEXT: .byte 0x1a |
| 153 ; IASM-NEXT: .byte 0x4 |
| 154 ; IASM-NEXT: .byte 0x0 |
| 155 ; IASM-NEXT: .byte 0xff |
| 156 ; IASM-NEXT: .byte 0x0 |
| 157 ; IASM-NEXT: .byte 0x5 |
| 158 ; IASM-NEXT: .byte 0x3c |
| 159 ; IASM-NEXT: .byte 0x24 |
| 160 ; IASM-NEXT: .byte 0x18 |
| 161 ; IASM-NEXT: .byte 0x65 |
| 162 ; IASM-NEXT: .byte 0x0 |
| 163 ; IASM-NEXT: .byte 0x0 |
| 164 ; IASM-NEXT: .byte 0x26 |
| 165 ; IASM-NEXT: .byte 0x4 |
| 166 ; IASM-NEXT: .byte 0x0 |
| 167 ; IASM-NEXT: .byte 0x25 |
| 168 ; IASM-NEXT: .byte 0x18 |
| 169 ; IASM-NEXT: .byte 0x83 |
| 170 ; IASM-NEXT: .byte 0x0 |
| 171 ; IASM-NEXT: .byte 0x25 |
| 172 ; IASM-NEXT: .byte 0x18 |
| 173 ; IASM-NEXT: .byte 0x62 |
| 174 ; IASM-NEXT: .byte 0x0 |
| 175 ; IASM-NEXT: .byte 0x21 |
| 176 ; IASM-NEXT: .byte 0x10 |
| 177 ; IASM-NEXT: .byte 0x60 |
| 178 ; IASM-NEXT: .byte 0x0 |
| 179 ; IASM-NEXT: .byte 0x8 |
| 180 ; IASM-NEXT: .byte 0x0 |
| 181 ; IASM-NEXT: .byte 0xe0 |
| 182 ; IASM-NEXT: .byte 0x3 |
| 183 |
| 184 define internal i64 @encBswap64(i64 %x) { |
| 185 entry: |
| 186 %r = call i64 @llvm.bswap.i64(i64 %x) |
| 187 ret i64 %r |
| 188 } |
| 189 |
| 190 ; ASM-LABEL: encBswap64 |
| 191 ; ASM-NEXT: .LencBswap64$entry: |
| 192 ; ASM-NEXT: sll $v0, $a1, 8 |
| 193 ; ASM-NEXT: srl $v1, $a1, 24 |
| 194 ; ASM-NEXT: srl $a2, $a1, 8 |
| 195 ; ASM-NEXT: andi $a2, $a2, 65280 |
| 196 ; ASM-NEXT: lui $a3, 255 |
| 197 ; ASM-NEXT: or $a2, $a2, $v1 |
| 198 ; ASM-NEXT: and $v0, $v0, $a3 |
| 199 ; ASM-NEXT: sll $a1, $a1, 24 |
| 200 ; ASM-NEXT: or $a1, $a1, $v0 |
| 201 ; ASM-NEXT: srl $v0, $a0, 24 |
| 202 ; ASM-NEXT: srl $v1, $a0, 8 |
| 203 ; ASM-NEXT: andi $v1, $v1, 65280 |
| 204 ; ASM-NEXT: or $a1, $a1, $a2 |
| 205 ; ASM-NEXT: or $v1, $v1, $v0 |
| 206 ; ASM-NEXT: sll $v0, $a0, 8 |
| 207 ; ASM-NEXT: and $v0, $v0, $a3 |
| 208 ; ASM-NEXT: sll $a0, $a0, 24 |
| 209 ; ASM-NEXT: or $a0, $a0, $v0 |
| 210 ; ASM-NEXT: or $a0, $a0, $v1 |
| 211 ; ASM-NEXT: move $v0, $a1 |
| 212 ; ASM-NEXT: move $v1, $a0 |
| 213 ; ASM-NEXT: jr $ra |
| 214 |
| 215 ; DIS-LABEL: {{.*}} <encBswap64>: |
| 216 ; DIS-NEXT: {{.*}} 00051200 sll v0,a1,0x8 |
| 217 ; DIS-NEXT: {{.*}} 00051e02 srl v1,a1,0x18 |
| 218 ; DIS-NEXT: {{.*}} 00053202 srl a2,a1,0x8 |
| 219 ; DIS-NEXT: {{.*}} 30c6ff00 andi a2,a2,0xff00 |
| 220 ; DIS-NEXT: {{.*}} 3c0700ff lui a3,0xff |
| 221 ; DIS-NEXT: {{.*}} 00c33025 or a2,a2,v1 |
| 222 ; DIS-NEXT: {{.*}} 00471024 and v0,v0,a3 |
| 223 ; DIS-NEXT: {{.*}} 00052e00 sll a1,a1,0x18 |
| 224 ; DIS-NEXT: {{.*}} 00a22825 or a1,a1,v0 |
| 225 ; DIS-NEXT: {{.*}} 00041602 srl v0,a0,0x18 |
| 226 ; DIS-NEXT: {{.*}} 00041a02 srl v1,a0,0x8 |
| 227 ; DIS-NEXT: {{.*}} 3063ff00 andi v1,v1,0xff00 |
| 228 ; DIS-NEXT: {{.*}} 00a62825 or a1,a1,a2 |
| 229 ; DIS-NEXT: {{.*}} 00621825 or v1,v1,v0 |
| 230 ; DIS-NEXT: {{.*}} 00041200 sll v0,a0,0x8 |
| 231 ; DIS-NEXT: {{.*}} 00471024 and v0,v0,a3 |
| 232 ; DIS-NEXT: {{.*}} 00042600 sll a0,a0,0x18 |
| 233 ; DIS-NEXT: {{.*}} 00822025 or a0,a0,v0 |
| 234 ; DIS-NEXT: {{.*}} 00832025 or a0,a0,v1 |
| 235 ; DIS-NEXT: {{.*}} 00a01021 move v0,a1 |
| 236 ; DIS-NEXT: {{.*}} 00801821 move v1,a0 |
| 237 ; DIS-NEXT: {{.*}} 03e00008 jr ra |
| 238 |
| 239 |
| 240 ; IASM-LABEL: encBswap64 |
| 241 ; IASM-NEXT: .LencBswap64$entry: |
| 242 ; IASM-NEXT: .byte 0x0 |
| 243 ; IASM-NEXT: .byte 0x12 |
| 244 ; IASM-NEXT: .byte 0x5 |
| 245 ; IASM-NEXT: .byte 0x0 |
| 246 ; IASM-NEXT: .byte 0x2 |
| 247 ; IASM-NEXT: .byte 0x1e |
| 248 ; IASM-NEXT: .byte 0x5 |
| 249 ; IASM-NEXT: .byte 0x0 |
| 250 ; IASM-NEXT: .byte 0x2 |
| 251 ; IASM-NEXT: .byte 0x32 |
| 252 ; IASM-NEXT: .byte 0x5 |
| 253 ; IASM-NEXT: .byte 0x0 |
| 254 ; IASM-NEXT: .byte 0x0 |
| 255 ; IASM-NEXT: .byte 0xff |
| 256 ; IASM-NEXT: .byte 0xc6 |
| 257 ; IASM-NEXT: .byte 0x30 |
| 258 ; IASM-NEXT: .byte 0xff |
| 259 ; IASM-NEXT: .byte 0x0 |
| 260 ; IASM-NEXT: .byte 0x7 |
| 261 ; IASM-NEXT: .byte 0x3c |
| 262 ; IASM-NEXT: .byte 0x25 |
| 263 ; IASM-NEXT: .byte 0x30 |
| 264 ; IASM-NEXT: .byte 0xc3 |
| 265 ; IASM-NEXT: .byte 0x0 |
| 266 ; IASM-NEXT: .byte 0x24 |
| 267 ; IASM-NEXT: .byte 0x10 |
| 268 ; IASM-NEXT: .byte 0x47 |
| 269 ; IASM-NEXT: .byte 0x0 |
| 270 ; IASM-NEXT: .byte 0x0 |
| 271 ; IASM-NEXT: .byte 0x2e |
| 272 ; IASM-NEXT: .byte 0x5 |
| 273 ; IASM-NEXT: .byte 0x0 |
| 274 ; IASM-NEXT: .byte 0x25 |
| 275 ; IASM-NEXT: .byte 0x28 |
| 276 ; IASM-NEXT: .byte 0xa2 |
| 277 ; IASM-NEXT: .byte 0x0 |
| 278 ; IASM-NEXT: .byte 0x2 |
| 279 ; IASM-NEXT: .byte 0x16 |
| 280 ; IASM-NEXT: .byte 0x4 |
| 281 ; IASM-NEXT: .byte 0x0 |
| 282 ; IASM-NEXT: .byte 0x2 |
| 283 ; IASM-NEXT: .byte 0x1a |
| 284 ; IASM-NEXT: .byte 0x4 |
| 285 ; IASM-NEXT: .byte 0x0 |
| 286 ; IASM-NEXT: .byte 0x0 |
| 287 ; IASM-NEXT: .byte 0xff |
| 288 ; IASM-NEXT: .byte 0x63 |
| 289 ; IASM-NEXT: .byte 0x30 |
| 290 ; IASM-NEXT: .byte 0x25 |
| 291 ; IASM-NEXT: .byte 0x28 |
| 292 ; IASM-NEXT: .byte 0xa6 |
| 293 ; IASM-NEXT: .byte 0x0 |
| 294 ; IASM-NEXT: .byte 0x25 |
| 295 ; IASM-NEXT: .byte 0x18 |
| 296 ; IASM-NEXT: .byte 0x62 |
| 297 ; IASM-NEXT: .byte 0x0 |
| 298 ; IASM-NEXT: .byte 0x0 |
| 299 ; IASM-NEXT: .byte 0x12 |
| 300 ; IASM-NEXT: .byte 0x4 |
| 301 ; IASM-NEXT: .byte 0x0 |
| 302 ; IASM-NEXT: .byte 0x24 |
| 303 ; IASM-NEXT: .byte 0x10 |
| 304 ; IASM-NEXT: .byte 0x47 |
| 305 ; IASM-NEXT: .byte 0x0 |
| 306 ; IASM-NEXT: .byte 0x0 |
| 307 ; IASM-NEXT: .byte 0x26 |
| 308 ; IASM-NEXT: .byte 0x4 |
| 309 ; IASM-NEXT: .byte 0x0 |
| 310 ; IASM-NEXT: .byte 0x25 |
| 311 ; IASM-NEXT: .byte 0x20 |
| 312 ; IASM-NEXT: .byte 0x82 |
| 313 ; IASM-NEXT: .byte 0x0 |
| 314 ; IASM-NEXT: .byte 0x25 |
| 315 ; IASM-NEXT: .byte 0x20 |
| 316 ; IASM-NEXT: .byte 0x83 |
| 317 ; IASM-NEXT: .byte 0x0 |
| 318 ; IASM-NEXT: .byte 0x21 |
| 319 ; IASM-NEXT: .byte 0x10 |
| 320 ; IASM-NEXT: .byte 0xa0 |
| 321 ; IASM-NEXT: .byte 0x0 |
| 322 ; IASM-NEXT: .byte 0x21 |
| 323 ; IASM-NEXT: .byte 0x18 |
| 324 ; IASM-NEXT: .byte 0x80 |
| 325 ; IASM-NEXT: .byte 0x0 |
| 326 ; IASM-NEXT: .byte 0x8 |
| 327 ; IASM-NEXT: .byte 0x0 |
| 328 ; IASM-NEXT: .byte 0xe0 |
| 329 ; IASM-NEXT: .byte 0x3 |
| 330 |
| 331 define internal i64 @encBswap64Undef() { |
| 332 entry: |
| 333 %r = call i64 @llvm.bswap.i64(i64 undef) |
| 334 ret i64 %r |
| 335 } |
| 336 |
| 337 ; ASM-LABEL: encBswap64Undef |
| 338 ; ASM-NEXT: .LencBswap64Undef$entry: |
| 339 ; ASM-NEXT: # $zero = def.pseudo |
| 340 ; ASM-NEXT: addiu $v0, $zero, 0 |
| 341 ; ASM-NEXT: # $zero = def.pseudo |
| 342 ; ASM-NEXT: addiu $v1, $zero, 0 |
| 343 ; ASM-NEXT: sll $a0, $v1, 8 |
| 344 ; ASM-NEXT: srl $a1, $v1, 24 |
| 345 ; ASM-NEXT: srl $a2, $v1, 8 |
| 346 ; ASM-NEXT: andi $a2, $a2, 65280 |
| 347 ; ASM-NEXT: lui $a3, 255 |
| 348 ; ASM-NEXT: or $a2, $a2, $a1 |
| 349 ; ASM-NEXT: and $a0, $a0, $a3 |
| 350 ; ASM-NEXT: sll $v1, $v1, 24 |
| 351 ; ASM-NEXT: or $v1, $v1, $a0 |
| 352 ; ASM-NEXT: srl $a0, $v0, 24 |
| 353 ; ASM-NEXT: srl $a1, $v0, 8 |
| 354 ; ASM-NEXT: andi $a1, $a1, 65280 |
| 355 ; ASM-NEXT: or $v1, $v1, $a2 |
| 356 ; ASM-NEXT: or $a1, $a1, $a0 |
| 357 ; ASM-NEXT: sll $a0, $v0, 8 |
| 358 ; ASM-NEXT: and $a0, $a0, $a3 |
| 359 ; ASM-NEXT: sll $v0, $v0, 24 |
| 360 ; ASM-NEXT: or $v0, $v0, $a0 |
| 361 ; ASM-NEXT: or $v0, $v0, $a1 |
| 362 ; ASM-NEXT: move $a0, $v0 |
| 363 ; ASM-NEXT: move $v0, $v1 |
| 364 ; ASM-NEXT: move $v1, $a0 |
| 365 ; ASM-NEXT: jr $ra |
| 366 |
| 367 ; DIS-LABEL: {{.*}} <encBswap64Undef>: |
| 368 ; DIS-NEXT: {{.*}} 24020000 li v0,0 |
| 369 ; DIS-NEXT: {{.*}} 24030000 li v1,0 |
| 370 ; DIS-NEXT: {{.*}} 00032200 sll a0,v1,0x8 |
| 371 ; DIS-NEXT: {{.*}} 00032e02 srl a1,v1,0x18 |
| 372 ; DIS-NEXT: {{.*}} 00033202 srl a2,v1,0x8 |
| 373 ; DIS-NEXT: {{.*}} 30c6ff00 andi a2,a2,0xff00 |
| 374 ; DIS-NEXT: {{.*}} 3c0700ff lui a3,0xff |
| 375 ; DIS-NEXT: {{.*}} 00c53025 or a2,a2,a1 |
| 376 ; DIS-NEXT: {{.*}} 00872024 and a0,a0,a3 |
| 377 ; DIS-NEXT: {{.*}} 00031e00 sll v1,v1,0x18 |
| 378 ; DIS-NEXT: {{.*}} 00641825 or v1,v1,a0 |
| 379 ; DIS-NEXT: {{.*}} 00022602 srl a0,v0,0x18 |
| 380 ; DIS-NEXT: {{.*}} 00022a02 srl a1,v0,0x8 |
| 381 ; DIS-NEXT: {{.*}} 30a5ff00 andi a1,a1,0xff00 |
| 382 ; DIS-NEXT: {{.*}} 00661825 or v1,v1,a2 |
| 383 ; DIS-NEXT: {{.*}} 00a42825 or a1,a1,a0 |
| 384 ; DIS-NEXT: {{.*}} 00022200 sll a0,v0,0x8 |
| 385 ; DIS-NEXT: {{.*}} 00872024 and a0,a0,a3 |
| 386 ; DIS-NEXT: {{.*}} 00021600 sll v0,v0,0x18 |
| 387 ; DIS-NEXT: {{.*}} 00441025 or v0,v0,a0 |
| 388 ; DIS-NEXT: {{.*}} 00451025 or v0,v0,a1 |
| 389 ; DIS-NEXT: {{.*}} 00402021 move a0,v0 |
| 390 ; DIS-NEXT: {{.*}} 00601021 move v0,v1 |
| 391 ; DIS-NEXT: {{.*}} 00801821 move v1,a0 |
| 392 ; DIS-NEXT: {{.*}} 03e00008 jr ra |
| 393 |
| 394 ; IASM-LABEL: encBswap64Undef |
| 395 ; IASM-NEXT: .LencBswap64Undef$entry: |
| 396 ; IASM-NEXT: .byte 0x0 |
| 397 ; IASM-NEXT: .byte 0x0 |
| 398 ; IASM-NEXT: .byte 0x2 |
| 399 ; IASM-NEXT: .byte 0x24 |
| 400 ; IASM-NEXT: .byte 0x0 |
| 401 ; IASM-NEXT: .byte 0x0 |
| 402 ; IASM-NEXT: .byte 0x3 |
| 403 ; IASM-NEXT: .byte 0x24 |
| 404 ; IASM-NEXT: .byte 0x0 |
| 405 ; IASM-NEXT: .byte 0x22 |
| 406 ; IASM-NEXT: .byte 0x3 |
| 407 ; IASM-NEXT: .byte 0x0 |
| 408 ; IASM-NEXT: .byte 0x2 |
| 409 ; IASM-NEXT: .byte 0x2e |
| 410 ; IASM-NEXT: .byte 0x3 |
| 411 ; IASM-NEXT: .byte 0x0 |
| 412 ; IASM-NEXT: .byte 0x2 |
| 413 ; IASM-NEXT: .byte 0x32 |
| 414 ; IASM-NEXT: .byte 0x3 |
| 415 ; IASM-NEXT: .byte 0x0 |
| 416 ; IASM-NEXT: .byte 0x0 |
| 417 ; IASM-NEXT: .byte 0xff |
| 418 ; IASM-NEXT: .byte 0xc6 |
| 419 ; IASM-NEXT: .byte 0x30 |
| 420 ; IASM-NEXT: .byte 0xff |
| 421 ; IASM-NEXT: .byte 0x0 |
| 422 ; IASM-NEXT: .byte 0x7 |
| 423 ; IASM-NEXT: .byte 0x3c |
| 424 ; IASM-NEXT: .byte 0x25 |
| 425 ; IASM-NEXT: .byte 0x30 |
| 426 ; IASM-NEXT: .byte 0xc5 |
| 427 ; IASM-NEXT: .byte 0x0 |
| 428 ; IASM-NEXT: .byte 0x24 |
| 429 ; IASM-NEXT: .byte 0x20 |
| 430 ; IASM-NEXT: .byte 0x87 |
| 431 ; IASM-NEXT: .byte 0x0 |
| 432 ; IASM-NEXT: .byte 0x0 |
| 433 ; IASM-NEXT: .byte 0x1e |
| 434 ; IASM-NEXT: .byte 0x3 |
| 435 ; IASM-NEXT: .byte 0x0 |
| 436 ; IASM-NEXT: .byte 0x25 |
| 437 ; IASM-NEXT: .byte 0x18 |
| 438 ; IASM-NEXT: .byte 0x64 |
| 439 ; IASM-NEXT: .byte 0x0 |
| 440 ; IASM-NEXT: .byte 0x2 |
| 441 ; IASM-NEXT: .byte 0x26 |
| 442 ; IASM-NEXT: .byte 0x2 |
| 443 ; IASM-NEXT: .byte 0x0 |
| 444 ; IASM-NEXT: .byte 0x2 |
| 445 ; IASM-NEXT: .byte 0x2a |
| 446 ; IASM-NEXT: .byte 0x2 |
| 447 ; IASM-NEXT: .byte 0x0 |
| 448 ; IASM-NEXT: .byte 0x0 |
| 449 ; IASM-NEXT: .byte 0xff |
| 450 ; IASM-NEXT: .byte 0xa5 |
| 451 ; IASM-NEXT: .byte 0x30 |
| 452 ; IASM-NEXT: .byte 0x25 |
| 453 ; IASM-NEXT: .byte 0x18 |
| 454 ; IASM-NEXT: .byte 0x66 |
| 455 ; IASM-NEXT: .byte 0x0 |
| 456 ; IASM-NEXT: .byte 0x25 |
| 457 ; IASM-NEXT: .byte 0x28 |
| 458 ; IASM-NEXT: .byte 0xa4 |
| 459 ; IASM-NEXT: .byte 0x0 |
| 460 ; IASM-NEXT: .byte 0x0 |
| 461 ; IASM-NEXT: .byte 0x22 |
| 462 ; IASM-NEXT: .byte 0x2 |
| 463 ; IASM-NEXT: .byte 0x0 |
| 464 ; IASM-NEXT: .byte 0x24 |
| 465 ; IASM-NEXT: .byte 0x20 |
| 466 ; IASM-NEXT: .byte 0x87 |
| 467 ; IASM-NEXT: .byte 0x0 |
| 468 ; IASM-NEXT: .byte 0x0 |
| 469 ; IASM-NEXT: .byte 0x16 |
| 470 ; IASM-NEXT: .byte 0x2 |
| 471 ; IASM-NEXT: .byte 0x0 |
| 472 ; IASM-NEXT: .byte 0x25 |
| 473 ; IASM-NEXT: .byte 0x10 |
| 474 ; IASM-NEXT: .byte 0x44 |
| 475 ; IASM-NEXT: .byte 0x0 |
| 476 ; IASM-NEXT: .byte 0x25 |
| 477 ; IASM-NEXT: .byte 0x10 |
| 478 ; IASM-NEXT: .byte 0x45 |
| 479 ; IASM-NEXT: .byte 0x0 |
| 480 ; IASM-NEXT: .byte 0x21 |
| 481 ; IASM-NEXT: .byte 0x20 |
| 482 ; IASM-NEXT: .byte 0x40 |
| 483 ; IASM-NEXT: .byte 0x0 |
| 484 ; IASM-NEXT: .byte 0x21 |
| 485 ; IASM-NEXT: .byte 0x10 |
| 486 ; IASM-NEXT: .byte 0x60 |
| 487 ; IASM-NEXT: .byte 0x0 |
| 488 ; IASM-NEXT: .byte 0x21 |
| 489 ; IASM-NEXT: .byte 0x18 |
| 490 ; IASM-NEXT: .byte 0x80 |
| 491 ; IASM-NEXT: .byte 0x0 |
| 492 ; IASM-NEXT: .byte 0x8 |
| 493 ; IASM-NEXT: .byte 0x0 |
| 494 ; IASM-NEXT: .byte 0xe0 |
| 495 ; IASM-NEXT: .byte 0x3 |
| 496 |
31 define internal i32 @encCtlz32(i32 %x) { | 497 define internal i32 @encCtlz32(i32 %x) { |
32 entry: | 498 entry: |
33 %r = call i32 @llvm.ctlz.i32(i32 %x, i1 false) | 499 %r = call i32 @llvm.ctlz.i32(i32 %x, i1 false) |
34 ret i32 %r | 500 ret i32 %r |
35 } | 501 } |
36 | 502 |
37 ; ASM-LABEL: encCtlz32 | 503 ; ASM-LABEL: encCtlz32 |
38 ; ASM-NEXT: .LencCtlz32$entry: | 504 ; ASM-NEXT: .LencCtlz32$entry: |
39 ; ASM-NEXT: clz $a0, $a0 | 505 ; ASM-NEXT: clz $a0, $a0 |
40 ; ASM-NEXT: move $v0, $a0 | 506 ; ASM-NEXT: move $v0, $a0 |
(...skipping 568 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
609 | 1075 |
610 ; DIS-LABEL: {{.*}} <encTrap>: | 1076 ; DIS-LABEL: {{.*}} <encTrap>: |
611 ; DIS-NEXT: {{.*}} 00000034 teq zero,zero | 1077 ; DIS-NEXT: {{.*}} 00000034 teq zero,zero |
612 | 1078 |
613 ; IASM-LABEL: encTrap: | 1079 ; IASM-LABEL: encTrap: |
614 ; IASM-NEXT: .LencTrap$__0: | 1080 ; IASM-NEXT: .LencTrap$__0: |
615 ; IASM-NEXT: .byte 0x34 | 1081 ; IASM-NEXT: .byte 0x34 |
616 ; IASM-NEXT: .byte 0x0 | 1082 ; IASM-NEXT: .byte 0x0 |
617 ; IASM-NEXT: .byte 0x0 | 1083 ; IASM-NEXT: .byte 0x0 |
618 ; IASM-NEXT: .byte 0x0 | 1084 ; IASM-NEXT: .byte 0x0 |
OLD | NEW |