| ## Test valid bit manipulation 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-prefixes=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: ext.w.b $t8, $t6 |
| # CHECK-ASM: encoding: [0x54,0x5e,0x00,0x00] |
| ext.w.b $t8, $t6 |
| |
| # CHECK-ASM: ext.w.h $s0, $s0 |
| # CHECK-ASM: encoding: [0xf7,0x5a,0x00,0x00] |
| ext.w.h $s0, $s0 |
| |
| # CHECK-ASM-AND-OBJ: clo.w $ra, $sp |
| # CHECK-ASM: encoding: [0x61,0x10,0x00,0x00] |
| clo.w $ra, $sp |
| |
| # CHECK-ASM-AND-OBJ: clz.w $a3, $a6 |
| # CHECK-ASM: encoding: [0x47,0x15,0x00,0x00] |
| clz.w $a3, $a6 |
| |
| # CHECK-ASM-AND-OBJ: cto.w $tp, $a2 |
| # CHECK-ASM: encoding: [0xc2,0x18,0x00,0x00] |
| cto.w $tp, $a2 |
| |
| # CHECK-ASM-AND-OBJ: ctz.w $a1, $fp |
| # CHECK-ASM: encoding: [0xc5,0x1e,0x00,0x00] |
| ctz.w $a1, $fp |
| |
| # CHECK-ASM-AND-OBJ: bytepick.w $s6, $zero, $t4, 0 |
| # CHECK-ASM: encoding: [0x1d,0x40,0x08,0x00] |
| bytepick.w $s6, $zero, $t4, 0 |
| |
| # CHECK-ASM-AND-OBJ: revb.2h $t8, $a7 |
| # CHECK-ASM: encoding: [0x74,0x31,0x00,0x00] |
| revb.2h $t8, $a7 |
| |
| # CHECK-ASM-AND-OBJ: bitrev.4b $r21, $s4 |
| # CHECK-ASM: encoding: [0x75,0x4b,0x00,0x00] |
| bitrev.4b $r21, $s4 |
| |
| # CHECK-ASM-AND-OBJ: bitrev.w $s2, $a1 |
| # CHECK-ASM: encoding: [0xb9,0x50,0x00,0x00] |
| bitrev.w $s2, $a1 |
| |
| # CHECK-ASM-AND-OBJ: bstrins.w $a4, $a7, 7, 2 |
| # CHECK-ASM: encoding: [0x68,0x09,0x67,0x00] |
| bstrins.w $a4, $a7, 7, 2 |
| |
| # CHECK-ASM-AND-OBJ: bstrpick.w $ra, $a5, 10, 4 |
| # CHECK-ASM: encoding: [0x21,0x91,0x6a,0x00] |
| bstrpick.w $ra, $a5, 10, 4 |
| |
| # CHECK-ASM-AND-OBJ: maskeqz $t8, $a7, $t6 |
| # CHECK-ASM: encoding: [0x74,0x49,0x13,0x00] |
| maskeqz $t8, $a7, $t6 |
| |
| # CHECK-ASM-AND-OBJ: masknez $t8, $t1, $s3 |
| # CHECK-ASM: encoding: [0xb4,0xe9,0x13,0x00] |
| masknez $t8, $t1, $s3 |
| |
| |
| ############################################################# |
| ## Instructions only for loongarch64 |
| ############################################################# |
| |
| .ifdef LA64 |
| |
| # CHECK64-ASM-AND-OBJ: clo.d $s6, $ra |
| # CHECK64-ASM: encoding: [0x3d,0x20,0x00,0x00] |
| clo.d $s6, $ra |
| |
| # CHECK64-ASM-AND-OBJ: clz.d $s3, $s3 |
| # CHECK64-ASM: encoding: [0x5a,0x27,0x00,0x00] |
| clz.d $s3, $s3 |
| |
| # CHECK64-ASM-AND-OBJ: cto.d $t6, $t8 |
| # CHECK64-ASM: encoding: [0x92,0x2a,0x00,0x00] |
| cto.d $t6, $t8 |
| |
| # CHECK64-ASM-AND-OBJ: ctz.d $t5, $a6 |
| # CHECK64-ASM: encoding: [0x51,0x2d,0x00,0x00] |
| ctz.d $t5, $a6 |
| |
| # CHECK64-ASM-AND-OBJ: bytepick.d $t3, $t5, $t8, 4 |
| # CHECK64-ASM: encoding: [0x2f,0x52,0x0e,0x00] |
| bytepick.d $t3, $t5, $t8, 4 |
| |
| # CHECK64-ASM-AND-OBJ: revb.4h $t1, $t7 |
| # CHECK64-ASM: encoding: [0x6d,0x36,0x00,0x00] |
| revb.4h $t1, $t7 |
| |
| # CHECK64-ASM-AND-OBJ: revb.2w $s5, $s4 |
| # CHECK64-ASM: encoding: [0x7c,0x3b,0x00,0x00] |
| revb.2w $s5, $s4 |
| |
| # CHECK64-ASM-AND-OBJ: revb.d $zero, $s0 |
| # CHECK64-ASM: encoding: [0xe0,0x3e,0x00,0x00] |
| revb.d $zero, $s0 |
| |
| # CHECK64-ASM-AND-OBJ: revh.2w $s5, $a6 |
| # CHECK64-ASM: encoding: [0x5c,0x41,0x00,0x00] |
| revh.2w $s5, $a6 |
| |
| # CHECK64-ASM-AND-OBJ: revh.d $a5, $a3 |
| # CHECK64-ASM: encoding: [0xe9,0x44,0x00,0x00] |
| revh.d $a5, $a3 |
| |
| # CHECK64-ASM-AND-OBJ: bitrev.8b $t1, $s2 |
| # CHECK64-ASM: encoding: [0x2d,0x4f,0x00,0x00] |
| bitrev.8b $t1, $s2 |
| |
| # CHECK64-ASM-AND-OBJ: bitrev.d $t7, $s0 |
| # CHECK64-ASM: encoding: [0xf3,0x56,0x00,0x00] |
| bitrev.d $t7, $s0 |
| |
| # CHECK64-ASM-AND-OBJ: bstrins.d $a4, $a7, 7, 2 |
| # CHECK64-ASM: encoding: [0x68,0x09,0x87,0x00] |
| bstrins.d $a4, $a7, 7, 2 |
| |
| # CHECK64-ASM-AND-OBJ: bstrpick.d $s8, $s4, 39, 22 |
| # CHECK64-ASM: encoding: [0x7f,0x5b,0xe7,0x00] |
| bstrpick.d $s8, $s4, 39, 22 |
| |
| .endif |
| |