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
|
## 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
|