| 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. |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 43 ; ASM-NEXT: .LencBswap16$entry: | 43 ; ASM-NEXT: .LencBswap16$entry: |
| 44 ; ASM-NEXT: sll $v0, $a0, 8 | 44 ; ASM-NEXT: sll $v0, $a0, 8 |
| 45 ; ASM-NEXT: lui $v1, 255 | 45 ; ASM-NEXT: lui $v1, 255 |
| 46 ; ASM-NEXT: and $v0, $v0, $v1 | 46 ; ASM-NEXT: and $v0, $v0, $v1 |
| 47 ; ASM-NEXT: sll $a0, $a0, 24 | 47 ; ASM-NEXT: sll $a0, $a0, 24 |
| 48 ; ASM-NEXT: or $v0, $a0, $v0 | 48 ; ASM-NEXT: or $v0, $a0, $v0 |
| 49 ; ASM-NEXT: srl $v0, $v0, 16 | 49 ; ASM-NEXT: srl $v0, $v0, 16 |
| 50 ; ASM-NEXT: andi $v0, $v0, 65535 | 50 ; ASM-NEXT: andi $v0, $v0, 65535 |
| 51 ; ASM-NEXT: jr $ra | 51 ; ASM-NEXT: jr $ra |
| 52 | 52 |
| 53 ; DIS-LABEL: {{.*}} <encBswap16>: | 53 ; DIS-LABEL: <encBswap16>: |
| 54 ; DIS-NEXT: {{.*}} 00041200 » sll» v0,a0,0x8 | 54 ; DIS-NEXT: 00041200 » sll» v0,a0,0x8 |
| 55 ; DIS-NEXT: {{.*}} 3c0300ff » lui» v1,0xff | 55 ; DIS-NEXT: 3c0300ff » lui» v1,0xff |
| 56 ; DIS-NEXT: {{.*}} 00431024 » and» v0,v0,v1 | 56 ; DIS-NEXT: 00431024 » and» v0,v0,v1 |
| 57 ; DIS-NEXT: {{.*}} 00042600 » sll» a0,a0,0x18 | 57 ; DIS-NEXT: 00042600 » sll» a0,a0,0x18 |
| 58 ; DIS-NEXT: {{.*}} 00821025 » or» v0,a0,v0 | 58 ; DIS-NEXT: 00821025 » or» v0,a0,v0 |
| 59 ; DIS-NEXT: {{.*}} 00021402 » srl» v0,v0,0x10 | 59 ; DIS-NEXT: 00021402 » srl» v0,v0,0x10 |
| 60 ; DIS-NEXT: {{.*}} 3042ffff » andi» v0,v0,0xffff | 60 ; DIS-NEXT: 3042ffff » andi» v0,v0,0xffff |
| 61 ; DIS-NEXT: {{.*}} 03e00008 » jr» ra | 61 ; DIS-NEXT: 03e00008 » jr» ra |
| 62 | 62 |
| 63 ; IASM-LABEL: encBswap16 | 63 ; IASM-LABEL: encBswap16 |
| 64 ; IASM-NEXT: .LencBswap16$entry: | 64 ; IASM-NEXT: .LencBswap16$entry: |
| 65 ; IASM-NEXT: .byte 0x0 | 65 ; IASM-NEXT: .byte 0x0 |
| 66 ; IASM-NEXT: .byte 0x12 | 66 ; IASM-NEXT: .byte 0x12 |
| 67 ; IASM-NEXT: .byte 0x4 | 67 ; IASM-NEXT: .byte 0x4 |
| 68 ; IASM-NEXT: .byte 0x0 | 68 ; IASM-NEXT: .byte 0x0 |
| 69 ; IASM-NEXT: .byte 0xff | 69 ; IASM-NEXT: .byte 0xff |
| 70 ; IASM-NEXT: .byte 0x0 | 70 ; IASM-NEXT: .byte 0x0 |
| 71 ; IASM-NEXT: .byte 0x3 | 71 ; IASM-NEXT: .byte 0x3 |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 109 ; ASM-NEXT: or $v0, $v1, $v0 | 109 ; ASM-NEXT: or $v0, $v1, $v0 |
| 110 ; ASM-NEXT: sll $v1, $a0, 8 | 110 ; ASM-NEXT: sll $v1, $a0, 8 |
| 111 ; ASM-NEXT: lui $a1, 255 | 111 ; ASM-NEXT: lui $a1, 255 |
| 112 ; ASM-NEXT: and $v1, $v1, $a1 | 112 ; ASM-NEXT: and $v1, $v1, $a1 |
| 113 ; ASM-NEXT: sll $a0, $a0, 24 | 113 ; ASM-NEXT: sll $a0, $a0, 24 |
| 114 ; ASM-NEXT: or $v1, $a0, $v1 | 114 ; ASM-NEXT: or $v1, $a0, $v1 |
| 115 ; ASM-NEXT: or $v1, $v1, $v0 | 115 ; ASM-NEXT: or $v1, $v1, $v0 |
| 116 ; ASM-NEXT: move $v0, $v1 | 116 ; ASM-NEXT: move $v0, $v1 |
| 117 ; ASM-NEXT: jr $ra | 117 ; ASM-NEXT: jr $ra |
| 118 | 118 |
| 119 ; DIS-LABEL: {{.*}} <encBswap32>: | 119 ; DIS-LABEL: <encBswap32>: |
| 120 ; DIS-NEXT: {{.*}} 00041602 » srl» v0,a0,0x18 | 120 ; DIS-NEXT: 00041602 » srl» v0,a0,0x18 |
| 121 ; DIS-NEXT: {{.*}} 00041a02 » srl» v1,a0,0x8 | 121 ; DIS-NEXT: 00041a02 » srl» v1,a0,0x8 |
| 122 ; DIS-NEXT: {{.*}} 3063ff00 » andi» v1,v1,0xff00 | 122 ; DIS-NEXT: 3063ff00 » andi» v1,v1,0xff00 |
| 123 ; DIS-NEXT: {{.*}} 00621025 » or» v0,v1,v0 | 123 ; DIS-NEXT: 00621025 » or» v0,v1,v0 |
| 124 ; DIS-NEXT: {{.*}} 00041a00 » sll» v1,a0,0x8 | 124 ; DIS-NEXT: 00041a00 » sll» v1,a0,0x8 |
| 125 ; DIS-NEXT: {{.*}} 3c0500ff » lui» a1,0xff | 125 ; DIS-NEXT: 3c0500ff » lui» a1,0xff |
| 126 ; DIS-NEXT: {{.*}} 00651824 » and» v1,v1,a1 | 126 ; DIS-NEXT: 00651824 » and» v1,v1,a1 |
| 127 ; DIS-NEXT: {{.*}} 00042600 » sll» a0,a0,0x18 | 127 ; DIS-NEXT: 00042600 » sll» a0,a0,0x18 |
| 128 ; DIS-NEXT: {{.*}} 00831825 » or» v1,a0,v1 | 128 ; DIS-NEXT: 00831825 » or» v1,a0,v1 |
| 129 ; DIS-NEXT: {{.*}} 00621825 » or» v1,v1,v0 | 129 ; DIS-NEXT: 00621825 » or» v1,v1,v0 |
| 130 ; DIS-NEXT: {{.*}} 00601021 » move» v0,v1 | 130 ; DIS-NEXT: 00601021 » move» v0,v1 |
| 131 ; DIS-NEXT: {{.*}} 03e00008 » jr» ra | 131 ; DIS-NEXT: 03e00008 » jr» ra |
| 132 | 132 |
| 133 ; IASM-LABEL: encBswap32 | 133 ; IASM-LABEL: encBswap32 |
| 134 ; IASM-NEXT: .LencBswap32$entry: | 134 ; IASM-NEXT: .LencBswap32$entry: |
| 135 ; IASM-NEXT: .byte 0x2 | 135 ; IASM-NEXT: .byte 0x2 |
| 136 ; IASM-NEXT: .byte 0x16 | 136 ; IASM-NEXT: .byte 0x16 |
| 137 ; IASM-NEXT: .byte 0x4 | 137 ; IASM-NEXT: .byte 0x4 |
| 138 ; IASM-NEXT: .byte 0x0 | 138 ; IASM-NEXT: .byte 0x0 |
| 139 ; IASM-NEXT: .byte 0x2 | 139 ; IASM-NEXT: .byte 0x2 |
| 140 ; IASM-NEXT: .byte 0x1a | 140 ; IASM-NEXT: .byte 0x1a |
| 141 ; IASM-NEXT: .byte 0x4 | 141 ; IASM-NEXT: .byte 0x4 |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 205 ; ASM-NEXT: or $v1, $v1, $v0 | 205 ; ASM-NEXT: or $v1, $v1, $v0 |
| 206 ; ASM-NEXT: sll $v0, $a0, 8 | 206 ; ASM-NEXT: sll $v0, $a0, 8 |
| 207 ; ASM-NEXT: and $v0, $v0, $a3 | 207 ; ASM-NEXT: and $v0, $v0, $a3 |
| 208 ; ASM-NEXT: sll $a0, $a0, 24 | 208 ; ASM-NEXT: sll $a0, $a0, 24 |
| 209 ; ASM-NEXT: or $a0, $a0, $v0 | 209 ; ASM-NEXT: or $a0, $a0, $v0 |
| 210 ; ASM-NEXT: or $a0, $a0, $v1 | 210 ; ASM-NEXT: or $a0, $a0, $v1 |
| 211 ; ASM-NEXT: move $v0, $a1 | 211 ; ASM-NEXT: move $v0, $a1 |
| 212 ; ASM-NEXT: move $v1, $a0 | 212 ; ASM-NEXT: move $v1, $a0 |
| 213 ; ASM-NEXT: jr $ra | 213 ; ASM-NEXT: jr $ra |
| 214 | 214 |
| 215 ; DIS-LABEL: {{.*}} <encBswap64>: | 215 ; DIS-LABEL: <encBswap64>: |
| 216 ; DIS-NEXT: {{.*}} 00051200 » sll» v0,a1,0x8 | 216 ; DIS-NEXT: 00051200 » sll» v0,a1,0x8 |
| 217 ; DIS-NEXT: {{.*}} 00051e02 » srl» v1,a1,0x18 | 217 ; DIS-NEXT: 00051e02 » srl» v1,a1,0x18 |
| 218 ; DIS-NEXT: {{.*}} 00053202 » srl» a2,a1,0x8 | 218 ; DIS-NEXT: 00053202 » srl» a2,a1,0x8 |
| 219 ; DIS-NEXT: {{.*}} 30c6ff00 » andi» a2,a2,0xff00 | 219 ; DIS-NEXT: 30c6ff00 » andi» a2,a2,0xff00 |
| 220 ; DIS-NEXT: {{.*}} 3c0700ff » lui» a3,0xff | 220 ; DIS-NEXT: 3c0700ff » lui» a3,0xff |
| 221 ; DIS-NEXT: {{.*}} 00c33025 » or» a2,a2,v1 | 221 ; DIS-NEXT: 00c33025 » or» a2,a2,v1 |
| 222 ; DIS-NEXT: {{.*}} 00471024 » and» v0,v0,a3 | 222 ; DIS-NEXT: 00471024 » and» v0,v0,a3 |
| 223 ; DIS-NEXT: {{.*}} 00052e00 » sll» a1,a1,0x18 | 223 ; DIS-NEXT: 00052e00 » sll» a1,a1,0x18 |
| 224 ; DIS-NEXT: {{.*}} 00a22825 » or» a1,a1,v0 | 224 ; DIS-NEXT: 00a22825 » or» a1,a1,v0 |
| 225 ; DIS-NEXT: {{.*}} 00041602 » srl» v0,a0,0x18 | 225 ; DIS-NEXT: 00041602 » srl» v0,a0,0x18 |
| 226 ; DIS-NEXT: {{.*}} 00041a02 » srl» v1,a0,0x8 | 226 ; DIS-NEXT: 00041a02 » srl» v1,a0,0x8 |
| 227 ; DIS-NEXT: {{.*}} 3063ff00 » andi» v1,v1,0xff00 | 227 ; DIS-NEXT: 3063ff00 » andi» v1,v1,0xff00 |
| 228 ; DIS-NEXT: {{.*}} 00a62825 » or» a1,a1,a2 | 228 ; DIS-NEXT: 00a62825 » or» a1,a1,a2 |
| 229 ; DIS-NEXT: {{.*}} 00621825 » or» v1,v1,v0 | 229 ; DIS-NEXT: 00621825 » or» v1,v1,v0 |
| 230 ; DIS-NEXT: {{.*}} 00041200 » sll» v0,a0,0x8 | 230 ; DIS-NEXT: 00041200 » sll» v0,a0,0x8 |
| 231 ; DIS-NEXT: {{.*}} 00471024 » and» v0,v0,a3 | 231 ; DIS-NEXT: 00471024 » and» v0,v0,a3 |
| 232 ; DIS-NEXT: {{.*}} 00042600 » sll» a0,a0,0x18 | 232 ; DIS-NEXT: 00042600 » sll» a0,a0,0x18 |
| 233 ; DIS-NEXT: {{.*}} 00822025 » or» a0,a0,v0 | 233 ; DIS-NEXT: 00822025 » or» a0,a0,v0 |
| 234 ; DIS-NEXT: {{.*}} 00832025 » or» a0,a0,v1 | 234 ; DIS-NEXT: 00832025 » or» a0,a0,v1 |
| 235 ; DIS-NEXT: {{.*}} 00a01021 » move» v0,a1 | 235 ; DIS-NEXT: 00a01021 » move» v0,a1 |
| 236 ; DIS-NEXT: {{.*}} 00801821 » move» v1,a0 | 236 ; DIS-NEXT: 00801821 » move» v1,a0 |
| 237 ; DIS-NEXT: {{.*}} 03e00008 » jr» ra | 237 ; DIS-NEXT: 03e00008 » jr» ra |
| 238 | 238 |
| 239 | 239 |
| 240 ; IASM-LABEL: encBswap64 | 240 ; IASM-LABEL: encBswap64 |
| 241 ; IASM-NEXT: .LencBswap64$entry: | 241 ; IASM-NEXT: .LencBswap64$entry: |
| 242 ; IASM-NEXT: .byte 0x0 | 242 ; IASM-NEXT: .byte 0x0 |
| 243 ; IASM-NEXT: .byte 0x12 | 243 ; IASM-NEXT: .byte 0x12 |
| 244 ; IASM-NEXT: .byte 0x5 | 244 ; IASM-NEXT: .byte 0x5 |
| 245 ; IASM-NEXT: .byte 0x0 | 245 ; IASM-NEXT: .byte 0x0 |
| 246 ; IASM-NEXT: .byte 0x2 | 246 ; IASM-NEXT: .byte 0x2 |
| 247 ; IASM-NEXT: .byte 0x1e | 247 ; IASM-NEXT: .byte 0x1e |
| (...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 357 ; ASM-NEXT: sll $a0, $v0, 8 | 357 ; ASM-NEXT: sll $a0, $v0, 8 |
| 358 ; ASM-NEXT: and $a0, $a0, $a3 | 358 ; ASM-NEXT: and $a0, $a0, $a3 |
| 359 ; ASM-NEXT: sll $v0, $v0, 24 | 359 ; ASM-NEXT: sll $v0, $v0, 24 |
| 360 ; ASM-NEXT: or $v0, $v0, $a0 | 360 ; ASM-NEXT: or $v0, $v0, $a0 |
| 361 ; ASM-NEXT: or $v0, $v0, $a1 | 361 ; ASM-NEXT: or $v0, $v0, $a1 |
| 362 ; ASM-NEXT: move $a0, $v0 | 362 ; ASM-NEXT: move $a0, $v0 |
| 363 ; ASM-NEXT: move $v0, $v1 | 363 ; ASM-NEXT: move $v0, $v1 |
| 364 ; ASM-NEXT: move $v1, $a0 | 364 ; ASM-NEXT: move $v1, $a0 |
| 365 ; ASM-NEXT: jr $ra | 365 ; ASM-NEXT: jr $ra |
| 366 | 366 |
| 367 ; DIS-LABEL: {{.*}} <encBswap64Undef>: | 367 ; DIS-LABEL: <encBswap64Undef>: |
| 368 ; DIS-NEXT: {{.*}} 24020000 » li» v0,0 | 368 ; DIS-NEXT: 24020000 » li» v0,0 |
| 369 ; DIS-NEXT: {{.*}} 24030000 » li» v1,0 | 369 ; DIS-NEXT: 24030000 » li» v1,0 |
| 370 ; DIS-NEXT: {{.*}} 00032200 » sll» a0,v1,0x8 | 370 ; DIS-NEXT: 00032200 » sll» a0,v1,0x8 |
| 371 ; DIS-NEXT: {{.*}} 00032e02 » srl» a1,v1,0x18 | 371 ; DIS-NEXT: 00032e02 » srl» a1,v1,0x18 |
| 372 ; DIS-NEXT: {{.*}} 00033202 » srl» a2,v1,0x8 | 372 ; DIS-NEXT: 00033202 » srl» a2,v1,0x8 |
| 373 ; DIS-NEXT: {{.*}} 30c6ff00 » andi» a2,a2,0xff00 | 373 ; DIS-NEXT: 30c6ff00 » andi» a2,a2,0xff00 |
| 374 ; DIS-NEXT: {{.*}} 3c0700ff » lui» a3,0xff | 374 ; DIS-NEXT: 3c0700ff » lui» a3,0xff |
| 375 ; DIS-NEXT: {{.*}} 00c53025 » or» a2,a2,a1 | 375 ; DIS-NEXT: 00c53025 » or» a2,a2,a1 |
| 376 ; DIS-NEXT: {{.*}} 00872024 » and» a0,a0,a3 | 376 ; DIS-NEXT: 00872024 » and» a0,a0,a3 |
| 377 ; DIS-NEXT: {{.*}} 00031e00 » sll» v1,v1,0x18 | 377 ; DIS-NEXT: 00031e00 » sll» v1,v1,0x18 |
| 378 ; DIS-NEXT: {{.*}} 00641825 » or» v1,v1,a0 | 378 ; DIS-NEXT: 00641825 » or» v1,v1,a0 |
| 379 ; DIS-NEXT: {{.*}} 00022602 » srl» a0,v0,0x18 | 379 ; DIS-NEXT: 00022602 » srl» a0,v0,0x18 |
| 380 ; DIS-NEXT: {{.*}} 00022a02 » srl» a1,v0,0x8 | 380 ; DIS-NEXT: 00022a02 » srl» a1,v0,0x8 |
| 381 ; DIS-NEXT: {{.*}} 30a5ff00 » andi» a1,a1,0xff00 | 381 ; DIS-NEXT: 30a5ff00 » andi» a1,a1,0xff00 |
| 382 ; DIS-NEXT: {{.*}} 00661825 » or» v1,v1,a2 | 382 ; DIS-NEXT: 00661825 » or» v1,v1,a2 |
| 383 ; DIS-NEXT: {{.*}} 00a42825 » or» a1,a1,a0 | 383 ; DIS-NEXT: 00a42825 » or» a1,a1,a0 |
| 384 ; DIS-NEXT: {{.*}} 00022200 » sll» a0,v0,0x8 | 384 ; DIS-NEXT: 00022200 » sll» a0,v0,0x8 |
| 385 ; DIS-NEXT: {{.*}} 00872024 » and» a0,a0,a3 | 385 ; DIS-NEXT: 00872024 » and» a0,a0,a3 |
| 386 ; DIS-NEXT: {{.*}} 00021600 » sll» v0,v0,0x18 | 386 ; DIS-NEXT: 00021600 » sll» v0,v0,0x18 |
| 387 ; DIS-NEXT: {{.*}} 00441025 » or» v0,v0,a0 | 387 ; DIS-NEXT: 00441025 » or» v0,v0,a0 |
| 388 ; DIS-NEXT: {{.*}} 00451025 » or» v0,v0,a1 | 388 ; DIS-NEXT: 00451025 » or» v0,v0,a1 |
| 389 ; DIS-NEXT: {{.*}} 00402021 » move» a0,v0 | 389 ; DIS-NEXT: 00402021 » move» a0,v0 |
| 390 ; DIS-NEXT: {{.*}} 00601021 » move» v0,v1 | 390 ; DIS-NEXT: 00601021 » move» v0,v1 |
| 391 ; DIS-NEXT: {{.*}} 00801821 » move» v1,a0 | 391 ; DIS-NEXT: 00801821 » move» v1,a0 |
| 392 ; DIS-NEXT: {{.*}} 03e00008 » jr» ra | 392 ; DIS-NEXT: 03e00008 » jr» ra |
| 393 | 393 |
| 394 ; IASM-LABEL: encBswap64Undef | 394 ; IASM-LABEL: encBswap64Undef |
| 395 ; IASM-NEXT: .LencBswap64Undef$entry: | 395 ; IASM-NEXT: .LencBswap64Undef$entry: |
| 396 ; IASM-NEXT: .byte 0x0 | 396 ; IASM-NEXT: .byte 0x0 |
| 397 ; IASM-NEXT: .byte 0x0 | 397 ; IASM-NEXT: .byte 0x0 |
| 398 ; IASM-NEXT: .byte 0x2 | 398 ; IASM-NEXT: .byte 0x2 |
| 399 ; IASM-NEXT: .byte 0x24 | 399 ; IASM-NEXT: .byte 0x24 |
| 400 ; IASM-NEXT: .byte 0x0 | 400 ; IASM-NEXT: .byte 0x0 |
| 401 ; IASM-NEXT: .byte 0x0 | 401 ; IASM-NEXT: .byte 0x0 |
| 402 ; IASM-NEXT: .byte 0x3 | 402 ; IASM-NEXT: .byte 0x3 |
| (...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 499 %r = call i32 @llvm.ctlz.i32(i32 %x, i1 false) | 499 %r = call i32 @llvm.ctlz.i32(i32 %x, i1 false) |
| 500 ret i32 %r | 500 ret i32 %r |
| 501 } | 501 } |
| 502 | 502 |
| 503 ; ASM-LABEL: encCtlz32 | 503 ; ASM-LABEL: encCtlz32 |
| 504 ; ASM-NEXT: .LencCtlz32$entry: | 504 ; ASM-NEXT: .LencCtlz32$entry: |
| 505 ; ASM-NEXT: clz $a0, $a0 | 505 ; ASM-NEXT: clz $a0, $a0 |
| 506 ; ASM-NEXT: move $v0, $a0 | 506 ; ASM-NEXT: move $v0, $a0 |
| 507 ; ASM-NEXT: jr $ra | 507 ; ASM-NEXT: jr $ra |
| 508 | 508 |
| 509 ; DIS-LABEL: {{.*}} <encCtlz32>: | 509 ; DIS-LABEL: <encCtlz32>: |
| 510 ; DIS-NEXT: {{.*}} 70842020 » clz» a0,a0 | 510 ; DIS-NEXT: 70842020 » clz» a0,a0 |
| 511 ; DIS-NEXT: {{.*}} 00801021 » move» v0,a0 | 511 ; DIS-NEXT: 00801021 » move» v0,a0 |
| 512 ; DIS-NEXT: {{.*}} 03e00008 » jr» ra | 512 ; DIS-NEXT: 03e00008 » jr» ra |
| 513 | 513 |
| 514 ; IASM-LABEL: encCtlz32 | 514 ; IASM-LABEL: encCtlz32 |
| 515 ; IASM-NEXT: .LencCtlz32$entry: | 515 ; IASM-NEXT: .LencCtlz32$entry: |
| 516 ; IASM-NEXT: .byte 0x20 | 516 ; IASM-NEXT: .byte 0x20 |
| 517 ; IASM-NEXT: .byte 0x20 | 517 ; IASM-NEXT: .byte 0x20 |
| 518 ; IASM-NEXT: .byte 0x84 | 518 ; IASM-NEXT: .byte 0x84 |
| 519 ; IASM-NEXT: .byte 0x70 | 519 ; IASM-NEXT: .byte 0x70 |
| 520 ; IASM-NEXT: .byte 0x21 | 520 ; IASM-NEXT: .byte 0x21 |
| 521 ; IASM-NEXT: .byte 0x10 | 521 ; IASM-NEXT: .byte 0x10 |
| 522 ; IASM-NEXT: .byte 0x80 | 522 ; IASM-NEXT: .byte 0x80 |
| 523 ; IASM-NEXT: .byte 0x0 | 523 ; IASM-NEXT: .byte 0x0 |
| 524 ; IASM-NEXT: .byte 0x8 | 524 ; IASM-NEXT: .byte 0x8 |
| 525 ; IASM-NEXT: .byte 0x0 | 525 ; IASM-NEXT: .byte 0x0 |
| 526 ; IASM-NEXT: .byte 0xe0 | 526 ; IASM-NEXT: .byte 0xe0 |
| 527 ; IASM-NEXT: .byte 0x3 | 527 ; IASM-NEXT: .byte 0x3 |
| 528 | 528 |
| 529 define internal i32 @encCtlz32Const() { | 529 define internal i32 @encCtlz32Const() { |
| 530 entry: | 530 entry: |
| 531 %r = call i32 @llvm.ctlz.i32(i32 123456, i1 false) | 531 %r = call i32 @llvm.ctlz.i32(i32 123456, i1 false) |
| 532 ret i32 %r | 532 ret i32 %r |
| 533 } | 533 } |
| 534 | 534 |
| 535 ; ASM-LABEL: encCtlz32Const | 535 ; ASM-LABEL: encCtlz32Const |
| 536 ; ASM-NEXT: .LencCtlz32Const$entry: | 536 ; ASM-NEXT: .LencCtlz32Const$entry: |
| 537 ; ASM-NEXT: lui $v0, 1 | 537 ; ASM-NEXT: lui $v0, 1 |
| 538 ; ASM-NEXT: ori $v0, $v0, 57920 | 538 ; ASM-NEXT: ori $v0, $v0, 57920 |
| 539 ; ASM-NEXT: clz $v0, $v0 | 539 ; ASM-NEXT: clz $v0, $v0 |
| 540 ; ASM-NEXT: jr $ra | 540 ; ASM-NEXT: jr $ra |
| 541 | 541 |
| 542 ; DIS-LABEL: {{.*}} <encCtlz32Const>: | 542 ; DIS-LABEL: <encCtlz32Const>: |
| 543 ; DIS-NEXT: {{.*}} 3c020001 » lui» v0,0x1 | 543 ; DIS-NEXT: 3c020001 » lui» v0,0x1 |
| 544 ; DIS-NEXT: {{.*}} 3442e240 » ori» v0,v0,0xe240 | 544 ; DIS-NEXT: 3442e240 » ori» v0,v0,0xe240 |
| 545 ; DIS-NEXT: {{.*}} 70421020 » clz» v0,v0 | 545 ; DIS-NEXT: 70421020 » clz» v0,v0 |
| 546 ; DIS-NEXT: {{.*}} 03e00008 » jr» ra | 546 ; DIS-NEXT: 03e00008 » jr» ra |
| 547 | 547 |
| 548 ; IASM-LABEL: encCtlz32Const | 548 ; IASM-LABEL: encCtlz32Const |
| 549 ; IASM-NEXT: .LencCtlz32Const$entry: | 549 ; IASM-NEXT: .LencCtlz32Const$entry: |
| 550 ; IASM-NEXT: .byte 0x1 | 550 ; IASM-NEXT: .byte 0x1 |
| 551 ; IASM-NEXT: .byte 0x0 | 551 ; IASM-NEXT: .byte 0x0 |
| 552 ; IASM-NEXT: .byte 0x2 | 552 ; IASM-NEXT: .byte 0x2 |
| 553 ; IASM-NEXT: .byte 0x3c | 553 ; IASM-NEXT: .byte 0x3c |
| 554 ; IASM-NEXT: .byte 0x40 | 554 ; IASM-NEXT: .byte 0x40 |
| 555 ; IASM-NEXT: .byte 0xe2 | 555 ; IASM-NEXT: .byte 0xe2 |
| 556 ; IASM-NEXT: .byte 0x42 | 556 ; IASM-NEXT: .byte 0x42 |
| (...skipping 17 matching lines...) Expand all Loading... |
| 574 ; ASM-NEXT: .LencCtlz64$entry: | 574 ; ASM-NEXT: .LencCtlz64$entry: |
| 575 ; ASM-NEXT: clz $v0, $a1 | 575 ; ASM-NEXT: clz $v0, $a1 |
| 576 ; ASM-NEXT: clz $a0, $a0 | 576 ; ASM-NEXT: clz $a0, $a0 |
| 577 ; ASM-NEXT: addiu $a0, $a0, 32 | 577 ; ASM-NEXT: addiu $a0, $a0, 32 |
| 578 ; ASM-NEXT: movn $a0, $v0, $a1 | 578 ; ASM-NEXT: movn $a0, $v0, $a1 |
| 579 ; ASM-NEXT: addiu $v0, $zero, 0 | 579 ; ASM-NEXT: addiu $v0, $zero, 0 |
| 580 ; ASM-NEXT: move $v1, $v0 | 580 ; ASM-NEXT: move $v1, $v0 |
| 581 ; ASM-NEXT: move $v0, $a0 | 581 ; ASM-NEXT: move $v0, $a0 |
| 582 ; ASM-NEXT: jr $ra | 582 ; ASM-NEXT: jr $ra |
| 583 | 583 |
| 584 ; DIS-LABEL: {{.*}} <encCtlz64>: | 584 ; DIS-LABEL: <encCtlz64>: |
| 585 ; DIS-NEXT: {{.*}} 70a21020 » clz» v0,a1 | 585 ; DIS-NEXT: 70a21020 » clz» v0,a1 |
| 586 ; DIS-NEXT: {{.*}} 70842020 » clz» a0,a0 | 586 ; DIS-NEXT: 70842020 » clz» a0,a0 |
| 587 ; DIS-NEXT: {{.*}} 24840020 » addiu» a0,a0,32 | 587 ; DIS-NEXT: 24840020 » addiu» a0,a0,32 |
| 588 ; DIS-NEXT: {{.*}} {{.*}}0b » movn» {{.*}} | 588 ; DIS-NEXT: 0045200b » movn» a0,v0,a1 |
| 589 ; DIS-NEXT: {{.*}} 24020000 » li» v0,0 | 589 ; DIS-NEXT: 24020000 » li» v0,0 |
| 590 ; DIS-NEXT: {{.*}} 00401821 » move» v1,v0 | 590 ; DIS-NEXT: 00401821 » move» v1,v0 |
| 591 ; DIS-NEXT: {{.*}} 00801021 » move» v0,a0 | 591 ; DIS-NEXT: 00801021 » move» v0,a0 |
| 592 ; DIS-NEXT: {{.*}} 03e00008 » jr» ra | 592 ; DIS-NEXT: 03e00008 » jr» ra |
| 593 | 593 |
| 594 ; IASM-LABEL: encCtlz64 | 594 ; IASM-LABEL: encCtlz64 |
| 595 ; IASM-NEXT: .LencCtlz64$entry: | 595 ; IASM-NEXT: .LencCtlz64$entry: |
| 596 ; IASM-NEXT: » .byte 0x20 | 596 ; IASM-NEXT:» .byte 0x20 |
| 597 ; IASM-NEXT: » .byte 0x10 | 597 ; IASM-NEXT:» .byte 0x10 |
| 598 ; IASM-NEXT: » .byte 0xa2 | 598 ; IASM-NEXT:» .byte 0xa2 |
| 599 ; IASM-NEXT: » .byte 0x70 | 599 ; IASM-NEXT:» .byte 0x70 |
| 600 ; IASM-NEXT: » .byte 0x20 | 600 ; IASM-NEXT:» .byte 0x20 |
| 601 ; IASM-NEXT: » .byte 0x20 | 601 ; IASM-NEXT:» .byte 0x20 |
| 602 ; IASM-NEXT: » .byte 0x84 | 602 ; IASM-NEXT:» .byte 0x84 |
| 603 ; IASM-NEXT: » .byte 0x70 | 603 ; IASM-NEXT:» .byte 0x70 |
| 604 ; IASM-NEXT: » .byte 0x20 | 604 ; IASM-NEXT:» .byte 0x20 |
| 605 ; IASM-NEXT: » .byte 0x0 | 605 ; IASM-NEXT:» .byte 0x0 |
| 606 ; IASM-NEXT: » .byte 0x84 | 606 ; IASM-NEXT:» .byte 0x84 |
| 607 ; IASM-NEXT: » .byte 0x24 | 607 ; IASM-NEXT:» .byte 0x24 |
| 608 ; IASM-NEXT: » .byte 0xb | 608 ; IASM-NEXT:» .byte 0xb |
| 609 ; IASM-NEXT: » .byte 0x20 | 609 ; IASM-NEXT:» .byte 0x20 |
| 610 ; IASM-NEXT: » .byte 0x82 | 610 ; IASM-NEXT:» .byte 0x45 |
| 611 ; IASM-NEXT: » .byte 0x0 | 611 ; IASM-NEXT:» .byte 0x0 |
| 612 ; IASM-NEXT: » .byte 0x0 | 612 ; IASM-NEXT:» .byte 0x0 |
| 613 ; IASM-NEXT: » .byte 0x0 | 613 ; IASM-NEXT:» .byte 0x0 |
| 614 ; IASM-NEXT: » .byte 0x2 | 614 ; IASM-NEXT:» .byte 0x2 |
| 615 ; IASM-NEXT: » .byte 0x24 | 615 ; IASM-NEXT:» .byte 0x24 |
| 616 ; IASM-NEXT: » .byte 0x21 | 616 ; IASM-NEXT:» .byte 0x21 |
| 617 ; IASM-NEXT: » .byte 0x18 | 617 ; IASM-NEXT:» .byte 0x18 |
| 618 ; IASM-NEXT: » .byte 0x40 | 618 ; IASM-NEXT:» .byte 0x40 |
| 619 ; IASM-NEXT: » .byte 0x0 | 619 ; IASM-NEXT:» .byte 0x0 |
| 620 ; IASM-NEXT: » .byte 0x21 | 620 ; IASM-NEXT:» .byte 0x21 |
| 621 ; IASM-NEXT: » .byte 0x10 | 621 ; IASM-NEXT:» .byte 0x10 |
| 622 ; IASM-NEXT: » .byte 0x80 | 622 ; IASM-NEXT:» .byte 0x80 |
| 623 ; IASM-NEXT: » .byte 0x0 | 623 ; IASM-NEXT:» .byte 0x0 |
| 624 ; IASM-NEXT: » .byte 0x8 | 624 ; IASM-NEXT:» .byte 0x8 |
| 625 ; IASM-NEXT: » .byte 0x0 | 625 ; IASM-NEXT:» .byte 0x0 |
| 626 ; IASM-NEXT: » .byte 0xe0 | 626 ; IASM-NEXT:» .byte 0xe0 |
| 627 ; IASM-NEXT: » .byte 0x3 | 627 ; IASM-NEXT:» .byte 0x3 |
| 628 | 628 |
| 629 define internal i32 @encCtlz64Const(i64 %x) { | 629 define internal i32 @encCtlz64Const(i64 %x) { |
| 630 entry: | 630 entry: |
| 631 %r = call i64 @llvm.ctlz.i64(i64 123456789012, i1 false) | 631 %r = call i64 @llvm.ctlz.i64(i64 123456789012, i1 false) |
| 632 %r2 = trunc i64 %r to i32 | 632 %r2 = trunc i64 %r to i32 |
| 633 ret i32 %r2 | 633 ret i32 %r2 |
| 634 } | 634 } |
| 635 | 635 |
| 636 ; ASM-LABEL: encCtlz64Const | 636 ; ASM-LABEL: encCtlz64Const |
| 637 ; ASM-NEXT: .LencCtlz64Const$entry: | 637 ; ASM-NEXT: .LencCtlz64Const$entry: |
| 638 ; ASM-NEXT: # $zero = def.pseudo | 638 ; ASM-NEXT: # $zero = def.pseudo |
| 639 ; ASM-NEXT: addiu $v0, $zero, 28 | 639 ; ASM-NEXT: addiu $v0, $zero, 28 |
| 640 ; ASM-NEXT: lui $v1, 48793 | 640 ; ASM-NEXT: lui $v1, 48793 |
| 641 ; ASM-NEXT: ori $v1, $v1, 6676 | 641 ; ASM-NEXT: ori $v1, $v1, 6676 |
| 642 ; ASM-NEXT: clz $a0, $v0 | 642 ; ASM-NEXT: clz $a0, $v0 |
| 643 ; ASM-NEXT: clz $v1, $v1 | 643 ; ASM-NEXT: clz $v1, $v1 |
| 644 ; ASM-NEXT: addiu $v1, $v1, 32 | 644 ; ASM-NEXT: addiu $v1, $v1, 32 |
| 645 ; ASM-NEXT: movn $v1, $a0, $v0 | 645 ; ASM-NEXT: movn $v1, $a0, $v0 |
| 646 ; ASM-NEXT: move $v0, $v1 | 646 ; ASM-NEXT: move $v0, $v1 |
| 647 ; ASM-NEXT: jr $ra | 647 ; ASM-NEXT: jr $ra |
| 648 | 648 |
| 649 ; DIS-LABEL: {{.*}} <encCtlz64Const>: | 649 ; DIS-LABEL: <encCtlz64Const>: |
| 650 ; DIS-NEXT: {{.*}} 2402001c » li» v0,28 | 650 ; DIS-NEXT: 2402001c » li» v0,28 |
| 651 ; DIS-NEXT: {{.*}} 3c03be99 » lui» v1,0xbe99 | 651 ; DIS-NEXT: 3c03be99 » lui» v1,0xbe99 |
| 652 ; DIS-NEXT: {{.*}} 34631a14 » ori» v1,v1,0x1a14 | 652 ; DIS-NEXT: 34631a14 » ori» v1,v1,0x1a14 |
| 653 ; DIS-NEXT: {{.*}} 70442020 » clz» a0,v0 | 653 ; DIS-NEXT: 70442020 » clz» a0,v0 |
| 654 ; DIS-NEXT: {{.*}} 70631820 » clz» v1,v1 | 654 ; DIS-NEXT: 70631820 » clz» v1,v1 |
| 655 ; DIS-NEXT: {{.*}} 24630020 » addiu» v1,v1,32 | 655 ; DIS-NEXT: 24630020 » addiu» v1,v1,32 |
| 656 ; DIS-NEXT: {{.*}} {{.*}}0b » movn» {{.*}} | 656 ; DIS-NEXT: 0082180b » movn» v1,a0,v0 |
| 657 ; DIS-NEXT: {{.*}} 00601021 » move» v0,v1 | 657 ; DIS-NEXT: 00601021 » move» v0,v1 |
| 658 ; DIS-NEXT: {{.*}} 03e00008 » jr» ra | 658 ; DIS-NEXT: 03e00008 » jr» ra |
| 659 | 659 |
| 660 ; IASM-LABEL: encCtlz64Const | 660 ; IASM-LABEL: encCtlz64Const |
| 661 ; IASM-NEXT: .LencCtlz64Const$entry: | 661 ; IASM-NEXT: .LencCtlz64Const$entry: |
| 662 ; IASM-NEXT: » .byte 0x1c | 662 ; IASM-NEXT:» .byte 0x1c |
| 663 ; IASM-NEXT: » .byte 0x0 | 663 ; IASM-NEXT:» .byte 0x0 |
| 664 ; IASM-NEXT: » .byte 0x2 | 664 ; IASM-NEXT:» .byte 0x2 |
| 665 ; IASM-NEXT: » .byte 0x24 | 665 ; IASM-NEXT:» .byte 0x24 |
| 666 ; IASM-NEXT: » .byte 0x99 | 666 ; IASM-NEXT:» .byte 0x99 |
| 667 ; IASM-NEXT: » .byte 0xbe | 667 ; IASM-NEXT:» .byte 0xbe |
| 668 ; IASM-NEXT: » .byte 0x3 | 668 ; IASM-NEXT:» .byte 0x3 |
| 669 ; IASM-NEXT: » .byte 0x3c | 669 ; IASM-NEXT:» .byte 0x3c |
| 670 ; IASM-NEXT: » .byte 0x14 | 670 ; IASM-NEXT:» .byte 0x14 |
| 671 ; IASM-NEXT: » .byte 0x1a | 671 ; IASM-NEXT:» .byte 0x1a |
| 672 ; IASM-NEXT: » .byte 0x63 | 672 ; IASM-NEXT:» .byte 0x63 |
| 673 ; IASM-NEXT: » .byte 0x34 | 673 ; IASM-NEXT:» .byte 0x34 |
| 674 ; IASM-NEXT: » .byte 0x20 | 674 ; IASM-NEXT:» .byte 0x20 |
| 675 ; IASM-NEXT: » .byte 0x20 | 675 ; IASM-NEXT:» .byte 0x20 |
| 676 ; IASM-NEXT: » .byte 0x44 | 676 ; IASM-NEXT:» .byte 0x44 |
| 677 ; IASM-NEXT: » .byte 0x70 | 677 ; IASM-NEXT:» .byte 0x70 |
| 678 ; IASM-NEXT: » .byte 0x20 | 678 ; IASM-NEXT:» .byte 0x20 |
| 679 ; IASM-NEXT: » .byte 0x18 | 679 ; IASM-NEXT:» .byte 0x18 |
| 680 ; IASM-NEXT: » .byte 0x63 | 680 ; IASM-NEXT:» .byte 0x63 |
| 681 ; IASM-NEXT: » .byte 0x70 | 681 ; IASM-NEXT:» .byte 0x70 |
| 682 ; IASM-NEXT: » .byte 0x20 | 682 ; IASM-NEXT:» .byte 0x20 |
| 683 ; IASM-NEXT: » .byte 0x0 | 683 ; IASM-NEXT:» .byte 0x0 |
| 684 ; IASM-NEXT: » .byte 0x63 | 684 ; IASM-NEXT:» .byte 0x63 |
| 685 ; IASM-NEXT: » .byte 0x24 | 685 ; IASM-NEXT:» .byte 0x24 |
| 686 ; IASM-NEXT: » .byte 0xb | 686 ; IASM-NEXT:» .byte 0xb |
| 687 ; IASM-NEXT: » .byte 0x18 | 687 ; IASM-NEXT:» .byte 0x18 |
| 688 ; IASM-NEXT: » .byte 0x64 | 688 ; IASM-NEXT:» .byte 0x82 |
| 689 ; IASM-NEXT: » .byte 0x0 | 689 ; IASM-NEXT:» .byte 0x0 |
| 690 ; IASM-NEXT: » .byte 0x21 | 690 ; IASM-NEXT:» .byte 0x21 |
| 691 ; IASM-NEXT: » .byte 0x10 | 691 ; IASM-NEXT:» .byte 0x10 |
| 692 ; IASM-NEXT: » .byte 0x60 | 692 ; IASM-NEXT:» .byte 0x60 |
| 693 ; IASM-NEXT: » .byte 0x0 | 693 ; IASM-NEXT:» .byte 0x0 |
| 694 ; IASM-NEXT: » .byte 0x8 | 694 ; IASM-NEXT:» .byte 0x8 |
| 695 ; IASM-NEXT: » .byte 0x0 | 695 ; IASM-NEXT:» .byte 0x0 |
| 696 ; IASM-NEXT: » .byte 0xe0 | 696 ; IASM-NEXT:» .byte 0xe0 |
| 697 ; IASM-NEXT: » .byte 0x3 | 697 ; IASM-NEXT:» .byte 0x3 |
| 698 | 698 |
| 699 define internal i32 @encCttz32(i32 %x) { | 699 define internal i32 @encCttz32(i32 %x) { |
| 700 entry: | 700 entry: |
| 701 %r = call i32 @llvm.cttz.i32(i32 %x, i1 false) | 701 %r = call i32 @llvm.cttz.i32(i32 %x, i1 false) |
| 702 ret i32 %r | 702 ret i32 %r |
| 703 } | 703 } |
| 704 | 704 |
| 705 ; ASM-LABEL: encCttz32 | 705 ; ASM-LABEL: encCttz32 |
| 706 ; ASM-NEXT: .LencCttz32$entry: | 706 ; ASM-NEXT: .LencCttz32$entry: |
| 707 ; ASM-NEXT: addiu $v0, $a0, -1 | 707 ; ASM-NEXT: addiu $v0, $a0, -1 |
| 708 ; ASM-NEXT: nor $a0, $a0, $zero | 708 ; ASM-NEXT: nor $a0, $a0, $zero |
| 709 ; ASM-NEXT: and $a0, $a0, $v0 | 709 ; ASM-NEXT: and $a0, $a0, $v0 |
| 710 ; ASM-NEXT: clz $a0, $a0 | 710 ; ASM-NEXT: clz $a0, $a0 |
| 711 ; ASM-NEXT: addiu $v0, $zero, 32 | 711 ; ASM-NEXT: addiu $v0, $zero, 32 |
| 712 ; ASM-NEXT: subu $v0, $v0, $a0 | 712 ; ASM-NEXT: subu $v0, $v0, $a0 |
| 713 ; ASM-NEXT: jr $ra | 713 ; ASM-NEXT: jr $ra |
| 714 | 714 |
| 715 ; DIS-LABEL: {{.*}} <encCttz32>: | 715 ; DIS-LABEL: <encCttz32>: |
| 716 ; DIS-NEXT: {{.*}} 2482ffff » addiu» v0,a0,-1 | 716 ; DIS-NEXT: 2482ffff » addiu» v0,a0,-1 |
| 717 ; DIS-NEXT: {{.*}} 00802027 » nor» a0,a0,zero | 717 ; DIS-NEXT: 00802027 » nor» a0,a0,zero |
| 718 ; DIS-NEXT: {{.*}} 00822024 » and» a0,a0,v0 | 718 ; DIS-NEXT: 00822024 » and» a0,a0,v0 |
| 719 ; DIS-NEXT: {{.*}} 70842020 » clz» a0,a0 | 719 ; DIS-NEXT: 70842020 » clz» a0,a0 |
| 720 ; DIS-NEXT: {{.*}} 24020020 » li» v0,32 | 720 ; DIS-NEXT: 24020020 » li» v0,32 |
| 721 ; DIS-NEXT: {{.*}} 00441023 » subu» v0,v0,a0 | 721 ; DIS-NEXT: 00441023 » subu» v0,v0,a0 |
| 722 ; DIS-NEXT: {{.*}} 03e00008 » jr» ra | 722 ; DIS-NEXT: 03e00008 » jr» ra |
| 723 | 723 |
| 724 ; IASM-LABEL: encCttz32 | 724 ; IASM-LABEL: encCttz32 |
| 725 ; IASM-NEXT: .LencCttz32$entry: | 725 ; IASM-NEXT: .LencCttz32$entry: |
| 726 ; IASM-NEXT: .byte 0xff | 726 ; IASM-NEXT: .byte 0xff |
| 727 ; IASM-NEXT: .byte 0xff | 727 ; IASM-NEXT: .byte 0xff |
| 728 ; IASM-NEXT: .byte 0x82 | 728 ; IASM-NEXT: .byte 0x82 |
| 729 ; IASM-NEXT: .byte 0x24 | 729 ; IASM-NEXT: .byte 0x24 |
| 730 ; IASM-NEXT: .byte 0x27 | 730 ; IASM-NEXT: .byte 0x27 |
| 731 ; IASM-NEXT: .byte 0x20 | 731 ; IASM-NEXT: .byte 0x20 |
| 732 ; IASM-NEXT: .byte 0x80 | 732 ; IASM-NEXT: .byte 0x80 |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 764 ; ASM-NEXT: ori $v0, $v0, 57920 | 764 ; ASM-NEXT: ori $v0, $v0, 57920 |
| 765 ; ASM-NEXT: addiu $v1, $v0, -1 | 765 ; ASM-NEXT: addiu $v1, $v0, -1 |
| 766 ; ASM-NEXT: nor $v0, $v0, $zero | 766 ; ASM-NEXT: nor $v0, $v0, $zero |
| 767 ; ASM-NEXT: and $v0, $v0, $v1 | 767 ; ASM-NEXT: and $v0, $v0, $v1 |
| 768 ; ASM-NEXT: clz $v0, $v0 | 768 ; ASM-NEXT: clz $v0, $v0 |
| 769 ; ASM-NEXT: addiu $v1, $zero, 32 | 769 ; ASM-NEXT: addiu $v1, $zero, 32 |
| 770 ; ASM-NEXT: subu $v1, $v1, $v0 | 770 ; ASM-NEXT: subu $v1, $v1, $v0 |
| 771 ; ASM-NEXT: move $v0, $v1 | 771 ; ASM-NEXT: move $v0, $v1 |
| 772 ; ASM-NEXT: jr $ra | 772 ; ASM-NEXT: jr $ra |
| 773 | 773 |
| 774 ; DIS-LABEL: {{.*}} <encCttz32Const>: | 774 ; DIS-LABEL: <encCttz32Const>: |
| 775 ; DIS-NEXT: {{.*}} 3c020001 » lui» v0,0x1 | 775 ; DIS-NEXT: 3c020001 » lui» v0,0x1 |
| 776 ; DIS-NEXT: {{.*}} ori»v0,v0,0xe240 | 776 ; DIS-NEXT: 3442e240 » ori» v0,v0,0xe240 |
| 777 ; DIS-NEXT: {{.*}} addiu» v1,v0,-1 | 777 ; DIS-NEXT: 2443ffff » addiu» v1,v0,-1 |
| 778 ; DIS-NEXT: {{.*}} nor»v0,v0,zero | 778 ; DIS-NEXT: 00401027 » nor» v0,v0,zero |
| 779 ; DIS-NEXT: {{.*}} and»v0,v0,v1 | 779 ; DIS-NEXT: 00431024 » and» v0,v0,v1 |
| 780 ; DIS-NEXT: {{.*}} clz»v0,v0 | 780 ; DIS-NEXT: 70421020 » clz» v0,v0 |
| 781 ; DIS-NEXT: {{.*}} li» v1,32 | 781 ; DIS-NEXT: 24030020 » li» v1,32 |
| 782 ; DIS-NEXT: {{.*}} subu» v1,v1,v0 | 782 ; DIS-NEXT: 00621823 » subu» v1,v1,v0 |
| 783 ; DIS-NEXT: {{.*}} move» v0,v1 | 783 ; DIS-NEXT: 00601021 » move» v0,v1 |
| 784 ; DIS-NEXT: {{.*}} jr» ra | 784 ; DIS-NEXT: 03e00008 » jr» ra |
| 785 | 785 |
| 786 ; IASM-LABEL: encCttz32Const: | 786 ; IASM-LABEL: encCttz32Const: |
| 787 ; IASM-NEXT: .LencCttz32Const$entry: | 787 ; IASM-NEXT: .LencCttz32Const$entry: |
| 788 ; IASM-NEXT: .byte 0x1 | 788 ; IASM-NEXT: .byte 0x1 |
| 789 ; IASM-NEXT: .byte 0x0 | 789 ; IASM-NEXT: .byte 0x0 |
| 790 ; IASM-NEXT: .byte 0x2 | 790 ; IASM-NEXT: .byte 0x2 |
| 791 ; IASM-NEXT: .byte 0x3c | 791 ; IASM-NEXT: .byte 0x3c |
| 792 ; IASM-NEXT: .byte 0x40 | 792 ; IASM-NEXT: .byte 0x40 |
| 793 ; IASM-NEXT: .byte 0xe2 | 793 ; IASM-NEXT: .byte 0xe2 |
| 794 ; IASM-NEXT: .byte 0x42 | 794 ; IASM-NEXT: .byte 0x42 |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 843 ; ASM-NEXT: addiu $v1, $a0, -1 | 843 ; ASM-NEXT: addiu $v1, $a0, -1 |
| 844 ; ASM-NEXT: nor $a1, $a0, $zero | 844 ; ASM-NEXT: nor $a1, $a0, $zero |
| 845 ; ASM-NEXT: and $a1, $a1, $v1 | 845 ; ASM-NEXT: and $a1, $a1, $v1 |
| 846 ; ASM-NEXT: clz $a1, $a1 | 846 ; ASM-NEXT: clz $a1, $a1 |
| 847 ; ASM-NEXT: addiu $v1, $zero, 32 | 847 ; ASM-NEXT: addiu $v1, $zero, 32 |
| 848 ; ASM-NEXT: subu $v1, $v1, $a1 | 848 ; ASM-NEXT: subu $v1, $v1, $a1 |
| 849 ; ASM-NEXT: movn $v0, $v1, $a0 | 849 ; ASM-NEXT: movn $v0, $v1, $a0 |
| 850 ; ASM-NEXT: addiu $v1, $zero, 0 | 850 ; ASM-NEXT: addiu $v1, $zero, 0 |
| 851 ; ASM-NEXT: jr $ra | 851 ; ASM-NEXT: jr $ra |
| 852 | 852 |
| 853 ; DIS-LABEL: {{.*}} <encCttz64>: | 853 ; DIS-LABEL: <encCttz64>: |
| 854 ; DIS-NEXT: {{.*}} 24a2ffff » addiu» v0,a1,-1 | 854 ; DIS-NEXT: 24a2ffff »addiu» v0,a1,-1 |
| 855 ; DIS-NEXT: {{.*}} 00a02827 » nor» a1,a1,zero | 855 ; DIS-NEXT: 00a02827 »nor» a1,a1,zero |
| 856 ; DIS-NEXT: {{.*}} 00a22824 » and» a1,a1,v0 | 856 ; DIS-NEXT: 00a22824 »and» a1,a1,v0 |
| 857 ; DIS-NEXT: {{.*}} 70a52820 » clz» a1,a1 | 857 ; DIS-NEXT: 70a52820 »clz» a1,a1 |
| 858 ; DIS-NEXT: {{.*}} 24020040 » li» v0,64 | 858 ; DIS-NEXT: 24020040 »li» v0,64 |
| 859 ; DIS-NEXT: {{.*}} 00451023 » subu» v0,v0,a1 | 859 ; DIS-NEXT: 00451023 »subu» v0,v0,a1 |
| 860 ; DIS-NEXT: {{.*}} 2483ffff » addiu» v1,a0,-1 | 860 ; DIS-NEXT: 2483ffff »addiu» v1,a0,-1 |
| 861 ; DIS-NEXT: {{.*}} 00802827 » nor» a1,a0,zero | 861 ; DIS-NEXT: 00802827 »nor» a1,a0,zero |
| 862 ; DIS-NEXT: {{.*}} 00a32824 » and» a1,a1,v1 | 862 ; DIS-NEXT: 00a32824 »and» a1,a1,v1 |
| 863 ; DIS-NEXT: {{.*}} 70a52820 » clz» a1,a1 | 863 ; DIS-NEXT: 70a52820 »clz» a1,a1 |
| 864 ; DIS-NEXT: {{.*}} 24030020 » li» v1,32 | 864 ; DIS-NEXT: 24030020 »li» v1,32 |
| 865 ; DIS-NEXT: {{.*}} 00651823 » subu» v1,v1,a1 | 865 ; DIS-NEXT: 00651823 »subu» v1,v1,a1 |
| 866 ; DIS-NEXT: {{.*}} {{.*}}0b » movn» {{.*}} | 866 ; DIS-NEXT: 0064100b »movn» v0,v1,a0 |
| 867 ; DIS-NEXT: {{.*}} 24030000 » li» v1,0 | 867 ; DIS-NEXT: 24030000 »li» v1,0 |
| 868 ; DIS-NEXT: {{.*}} 03e00008 » jr» ra | 868 ; DIS-NEXT: 03e00008 »jr» ra |
| 869 ; DIS-NEXT: 00000000 »nop |
| 869 | 870 |
| 870 ; IASM-LABEL: encCttz64: | 871 ; IASM-LABEL: encCttz64: |
| 871 ; IASM-NEXT: .LencCttz64$entry: | 872 ; IASM-NEXT: .LencCttz64$entry: |
| 872 ; IASM-NEXT: .byte 0xff | 873 ; IASM-NEXT: .byte 0xff |
| 873 ; IASM-NEXT: .byte 0xff | 874 ; IASM-NEXT: .byte 0xff |
| 874 ; IASM-NEXT: .byte 0xa2 | 875 ; IASM-NEXT: .byte 0xa2 |
| 875 ; IASM-NEXT: .byte 0x24 | 876 ; IASM-NEXT: .byte 0x24 |
| 876 ; IASM-NEXT: .byte 0x27 | 877 ; IASM-NEXT: .byte 0x27 |
| 877 ; IASM-NEXT: .byte 0x28 | 878 ; IASM-NEXT: .byte 0x28 |
| 878 ; IASM-NEXT: .byte 0xa0 | 879 ; IASM-NEXT: .byte 0xa0 |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 912 ; IASM-NEXT: .byte 0x20 | 913 ; IASM-NEXT: .byte 0x20 |
| 913 ; IASM-NEXT: .byte 0x0 | 914 ; IASM-NEXT: .byte 0x0 |
| 914 ; IASM-NEXT: .byte 0x3 | 915 ; IASM-NEXT: .byte 0x3 |
| 915 ; IASM-NEXT: .byte 0x24 | 916 ; IASM-NEXT: .byte 0x24 |
| 916 ; IASM-NEXT: .byte 0x23 | 917 ; IASM-NEXT: .byte 0x23 |
| 917 ; IASM-NEXT: .byte 0x18 | 918 ; IASM-NEXT: .byte 0x18 |
| 918 ; IASM-NEXT: .byte 0x65 | 919 ; IASM-NEXT: .byte 0x65 |
| 919 ; IASM-NEXT: .byte 0x0 | 920 ; IASM-NEXT: .byte 0x0 |
| 920 ; IASM-NEXT: .byte 0xb | 921 ; IASM-NEXT: .byte 0xb |
| 921 ; IASM-NEXT: .byte 0x10 | 922 ; IASM-NEXT: .byte 0x10 |
| 922 ; IASM-NEXT: » .byte 0x43 | 923 ; IASM-NEXT: » .byte 0x64 |
| 923 ; IASM-NEXT: .byte 0x0 | 924 ; IASM-NEXT: .byte 0x0 |
| 924 ; IASM-NEXT: .byte 0x0 | 925 ; IASM-NEXT: .byte 0x0 |
| 925 ; IASM-NEXT: .byte 0x0 | 926 ; IASM-NEXT: .byte 0x0 |
| 926 ; IASM-NEXT: .byte 0x3 | 927 ; IASM-NEXT: .byte 0x3 |
| 927 ; IASM-NEXT: .byte 0x24 | 928 ; IASM-NEXT: .byte 0x24 |
| 928 ; IASM-NEXT: .byte 0x8 | 929 ; IASM-NEXT: .byte 0x8 |
| 929 ; IASM-NEXT: .byte 0x0 | 930 ; IASM-NEXT: .byte 0x0 |
| 930 ; IASM-NEXT: .byte 0xe0 | 931 ; IASM-NEXT: .byte 0xe0 |
| 931 ; IASM-NEXT: .byte 0x3 | 932 ; IASM-NEXT: .byte 0x3 |
| 932 | 933 |
| (...skipping 20 matching lines...) Expand all Loading... |
| 953 ; ASM-NEXT: and $a1, $a1, $v0 | 954 ; ASM-NEXT: and $a1, $a1, $v0 |
| 954 ; ASM-NEXT: clz $a1, $a1 | 955 ; ASM-NEXT: clz $a1, $a1 |
| 955 ; ASM-NEXT: addiu $v0, $zero, 32 | 956 ; ASM-NEXT: addiu $v0, $zero, 32 |
| 956 ; ASM-NEXT: subu $v0, $v0, $a1 | 957 ; ASM-NEXT: subu $v0, $v0, $a1 |
| 957 ; ASM-NEXT: movn $a0, $v0, $v1 | 958 ; ASM-NEXT: movn $a0, $v0, $v1 |
| 958 ; ASM-NEXT: addiu $v0, $zero, 0 | 959 ; ASM-NEXT: addiu $v0, $zero, 0 |
| 959 ; ASM-NEXT: move $v1, $v0 | 960 ; ASM-NEXT: move $v1, $v0 |
| 960 ; ASM-NEXT: move $v0, $a0 | 961 ; ASM-NEXT: move $v0, $a0 |
| 961 ; ASM-NEXT: jr $ra | 962 ; ASM-NEXT: jr $ra |
| 962 | 963 |
| 963 ; DIS-LABEL: {{.*}} <encCttz64Const>: | 964 ; DIS-LABEL: <encCttz64Const>: |
| 964 ; DIS-NEXT: {{.*}} 2402001c » li» v0,28 | 965 ; DIS-NEXT: 2402001c » li» v0,28 |
| 965 ; DIS-NEXT: {{.*}} 3c03be99 » lui» v1,0xbe99 | 966 ; DIS-NEXT: 3c03be99 » lui» v1,0xbe99 |
| 966 ; DIS-NEXT: {{.*}} 34631a14 » ori» v1,v1,0x1a14 | 967 ; DIS-NEXT: 34631a14 » ori» v1,v1,0x1a14 |
| 967 ; DIS-NEXT: {{.*}} 2444ffff » addiu» a0,v0,-1 | 968 ; DIS-NEXT: 2444ffff » addiu» a0,v0,-1 |
| 968 ; DIS-NEXT: {{.*}} 00401027 » nor» v0,v0,zero | 969 ; DIS-NEXT: 00401027 » nor» v0,v0,zero |
| 969 ; DIS-NEXT: {{.*}} 00441024 » and» v0,v0,a0 | 970 ; DIS-NEXT: 00441024 » and» v0,v0,a0 |
| 970 ; DIS-NEXT: {{.*}} 70421020 » clz» v0,v0 | 971 ; DIS-NEXT: 70421020 » clz» v0,v0 |
| 971 ; DIS-NEXT: {{.*}} 24040040 » li» a0,64 | 972 ; DIS-NEXT: 24040040 » li» a0,64 |
| 972 ; DIS-NEXT: {{.*}} 00822023 » subu» a0,a0,v0 | 973 ; DIS-NEXT: 00822023 » subu» a0,a0,v0 |
| 973 ; DIS-NEXT: {{.*}} 2462ffff » addiu» v0,v1,-1 | 974 ; DIS-NEXT: 2462ffff » addiu» v0,v1,-1 |
| 974 ; DIS-NEXT: {{.*}} 00602827 » nor» a1,v1,zero | 975 ; DIS-NEXT: 00602827 » nor» a1,v1,zero |
| 975 ; DIS-NEXT: {{.*}} 00a22824 » and» a1,a1,v0 | 976 ; DIS-NEXT: 00a22824 » and» a1,a1,v0 |
| 976 ; DIS-NEXT: {{.*}} 70a52820 » clz» a1,a1 | 977 ; DIS-NEXT: 70a52820 » clz» a1,a1 |
| 977 ; DIS-NEXT: {{.*}} 24020020 » li» v0,32 | 978 ; DIS-NEXT: 24020020 » li» v0,32 |
| 978 ; DIS-NEXT: {{.*}} 00451023 » subu» v0,v0,a1 | 979 ; DIS-NEXT: 00451023 » subu» v0,v0,a1 |
| 979 ; DIS-NEXT: {{.*}} {{.*}}0b » movn» {{.*}} | 980 ; DIS-NEXT: 0043200b » movn» a0,v0,v1 |
| 980 ; DIS-NEXT: {{.*}} 24{{.*}} » li» {{.*}},0 | 981 ; DIS-NEXT: 24020000 » li» v0,0 |
| 981 ; DIS-NEXT: {{.*}} {{.*}}21 » move» v1,{{.*}} | 982 ; DIS-NEXT: 00401821 » move» v1,v0 |
| 982 ; DIS-NEXT: {{.*}} {{.*}}21 » move» v0,{{.*}} | 983 ; DIS-NEXT: 00801021 » move» v0,a0 |
| 983 ; DIS-NEXT: {{.*}} 03e00008 » jr» ra | 984 ; DIS-NEXT: 03e00008 » jr» ra |
| 984 | 985 |
| 985 ; IASM-LABEL: encCttz64Const: | 986 ; IASM-LABEL: encCttz64Const: |
| 986 ; IASM-NEXT: .LencCttz64Const$entry: | 987 ; IASM-NEXT: .LencCttz64Const$entry: |
| 987 ; IASM-NEXT: .byte 0x1c | 988 ; IASM-NEXT: .byte 0x1c |
| 988 ; IASM-NEXT: .byte 0x0 | 989 ; IASM-NEXT: .byte 0x0 |
| 989 ; IASM-NEXT: .byte 0x2 | 990 ; IASM-NEXT: .byte 0x2 |
| 990 ; IASM-NEXT: .byte 0x24 | 991 ; IASM-NEXT: .byte 0x24 |
| 991 ; IASM-NEXT: .byte 0x99 | 992 ; IASM-NEXT: .byte 0x99 |
| 992 ; IASM-NEXT: .byte 0xbe | 993 ; IASM-NEXT: .byte 0xbe |
| 993 ; IASM-NEXT: .byte 0x3 | 994 ; IASM-NEXT: .byte 0x3 |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1039 ; IASM-NEXT: .byte 0x20 | 1040 ; IASM-NEXT: .byte 0x20 |
| 1040 ; IASM-NEXT: .byte 0x0 | 1041 ; IASM-NEXT: .byte 0x0 |
| 1041 ; IASM-NEXT: .byte 0x2 | 1042 ; IASM-NEXT: .byte 0x2 |
| 1042 ; IASM-NEXT: .byte 0x24 | 1043 ; IASM-NEXT: .byte 0x24 |
| 1043 ; IASM-NEXT: .byte 0x23 | 1044 ; IASM-NEXT: .byte 0x23 |
| 1044 ; IASM-NEXT: .byte 0x10 | 1045 ; IASM-NEXT: .byte 0x10 |
| 1045 ; IASM-NEXT: .byte 0x45 | 1046 ; IASM-NEXT: .byte 0x45 |
| 1046 ; IASM-NEXT: .byte 0x0 | 1047 ; IASM-NEXT: .byte 0x0 |
| 1047 ; IASM-NEXT: .byte 0xb | 1048 ; IASM-NEXT: .byte 0xb |
| 1048 ; IASM-NEXT: .byte 0x20 | 1049 ; IASM-NEXT: .byte 0x20 |
| 1049 ; IASM-NEXT: » .byte 0x82 | 1050 ; IASM-NEXT: » .byte 0x43 |
| 1050 ; IASM-NEXT: .byte 0x0 | 1051 ; IASM-NEXT: .byte 0x0 |
| 1051 ; IASM-NEXT: .byte 0x0 | 1052 ; IASM-NEXT: .byte 0x0 |
| 1052 ; IASM-NEXT: .byte 0x0 | 1053 ; IASM-NEXT: .byte 0x0 |
| 1053 ; IASM-NEXT: .byte 0x2 | 1054 ; IASM-NEXT: .byte 0x2 |
| 1054 ; IASM-NEXT: .byte 0x24 | 1055 ; IASM-NEXT: .byte 0x24 |
| 1055 ; IASM-NEXT: .byte 0x21 | 1056 ; IASM-NEXT: .byte 0x21 |
| 1056 ; IASM-NEXT: .byte 0x18 | 1057 ; IASM-NEXT: .byte 0x18 |
| 1057 ; IASM-NEXT: .byte 0x40 | 1058 ; IASM-NEXT: .byte 0x40 |
| 1058 ; IASM-NEXT: .byte 0x0 | 1059 ; IASM-NEXT: .byte 0x0 |
| 1059 ; IASM-NEXT: .byte 0x21 | 1060 ; IASM-NEXT: .byte 0x21 |
| 1060 ; IASM-NEXT: .byte 0x10 | 1061 ; IASM-NEXT: .byte 0x10 |
| 1061 ; IASM-NEXT: .byte 0x80 | 1062 ; IASM-NEXT: .byte 0x80 |
| 1062 ; IASM-NEXT: .byte 0x0 | 1063 ; IASM-NEXT: .byte 0x0 |
| 1063 ; IASM-NEXT: .byte 0x8 | 1064 ; IASM-NEXT: .byte 0x8 |
| 1064 ; IASM-NEXT: .byte 0x0 | 1065 ; IASM-NEXT: .byte 0x0 |
| 1065 ; IASM-NEXT: .byte 0xe0 | 1066 ; IASM-NEXT: .byte 0xe0 |
| 1066 ; IASM-NEXT: .byte 0x3 | 1067 ; IASM-NEXT: .byte 0x3 |
| 1067 | 1068 |
| 1068 define internal void @encTrap() { | 1069 define internal void @encTrap() { |
| 1069 unreachable | 1070 unreachable |
| 1070 } | 1071 } |
| 1071 | 1072 |
| 1072 ; ASM-LABEL: encTrap | 1073 ; ASM-LABEL: encTrap |
| 1073 ; ASM-NEXT: .LencTrap$__0: | 1074 ; ASM-NEXT: .LencTrap$__0: |
| 1074 ; ASM-NEXT: teq $zero, $zero, 0 | 1075 ; ASM-NEXT: teq $zero, $zero, 0 |
| 1075 | 1076 |
| 1076 ; DIS-LABEL: {{.*}} <encTrap>: | 1077 ; DIS-LABEL: <encTrap>: |
| 1077 ; DIS-NEXT: {{.*}} 00000034 » teq» zero,zero | 1078 ; DIS-NEXT: 00000034 » teq» zero,zero |
| 1078 | 1079 |
| 1079 ; IASM-LABEL: encTrap: | 1080 ; IASM-LABEL: encTrap: |
| 1080 ; IASM-NEXT: .LencTrap$__0: | 1081 ; IASM-NEXT: .LencTrap$__0: |
| 1081 ; IASM-NEXT: .byte 0x34 | 1082 ; IASM-NEXT: .byte 0x34 |
| 1082 ; IASM-NEXT: .byte 0x0 | 1083 ; IASM-NEXT: .byte 0x0 |
| 1083 ; IASM-NEXT: .byte 0x0 | 1084 ; IASM-NEXT: .byte 0x0 |
| 1084 ; IASM-NEXT: .byte 0x0 | 1085 ; IASM-NEXT: .byte 0x0 |
| OLD | NEW |