xref: /llvm-project/llvm/test/MC/LoongArch/Basic/Integer/bit-manipu.s (revision 7898587e948cc24af6e22f86c921949169f4f87b)
1## Test valid bit manipulation instructions.
2
3# RUN: llvm-mc %s --triple=loongarch32 --show-encoding \
4# RUN:     | FileCheck --check-prefixes=CHECK-ASM,CHECK-ASM-AND-OBJ %s
5# RUN: llvm-mc %s --triple=loongarch64 --show-encoding --defsym=LA64=1 \
6# RUN:     | FileCheck --check-prefixes=CHECK-ASM,CHECK-ASM-AND-OBJ,CHECK64-ASM,CHECK64-ASM-AND-OBJ %s
7# RUN: llvm-mc %s --triple=loongarch32 --filetype=obj | llvm-objdump -d - \
8# RUN:     | FileCheck --check-prefixes=CHECK-ASM-AND-OBJ %s
9# RUN: llvm-mc %s --triple=loongarch64 --filetype=obj --defsym=LA64=1 | llvm-objdump -d - \
10# RUN:     | FileCheck --check-prefixes=CHECK-ASM-AND-OBJ,CHECK64-ASM-AND-OBJ %s
11
12#############################################################
13## Instructions for both loongarch32 and loongarch64
14#############################################################
15
16# CHECK-ASM: ext.w.b $t8, $t6
17# CHECK-ASM: encoding: [0x54,0x5e,0x00,0x00]
18ext.w.b $t8, $t6
19
20# CHECK-ASM: ext.w.h $s0, $s0
21# CHECK-ASM: encoding: [0xf7,0x5a,0x00,0x00]
22ext.w.h $s0, $s0
23
24# CHECK-ASM-AND-OBJ: clo.w $ra, $sp
25# CHECK-ASM: encoding: [0x61,0x10,0x00,0x00]
26clo.w $ra, $sp
27
28# CHECK-ASM-AND-OBJ: clz.w $a3, $a6
29# CHECK-ASM: encoding: [0x47,0x15,0x00,0x00]
30clz.w $a3, $a6
31
32# CHECK-ASM-AND-OBJ: cto.w $tp, $a2
33# CHECK-ASM: encoding: [0xc2,0x18,0x00,0x00]
34cto.w $tp, $a2
35
36# CHECK-ASM-AND-OBJ: ctz.w $a1, $fp
37# CHECK-ASM: encoding: [0xc5,0x1e,0x00,0x00]
38ctz.w $a1, $fp
39
40# CHECK-ASM-AND-OBJ: bytepick.w $s6, $zero, $t4, 0
41# CHECK-ASM: encoding: [0x1d,0x40,0x08,0x00]
42bytepick.w $s6, $zero, $t4, 0
43
44# CHECK-ASM-AND-OBJ: revb.2h $t8, $a7
45# CHECK-ASM: encoding: [0x74,0x31,0x00,0x00]
46revb.2h $t8, $a7
47
48# CHECK-ASM-AND-OBJ: bitrev.4b $r21, $s4
49# CHECK-ASM: encoding: [0x75,0x4b,0x00,0x00]
50bitrev.4b $r21, $s4
51
52# CHECK-ASM-AND-OBJ: bitrev.w $s2, $a1
53# CHECK-ASM: encoding: [0xb9,0x50,0x00,0x00]
54bitrev.w $s2, $a1
55
56# CHECK-ASM-AND-OBJ: bstrins.w $a4, $a7, 7, 2
57# CHECK-ASM: encoding: [0x68,0x09,0x67,0x00]
58bstrins.w $a4, $a7, 7, 2
59
60# CHECK-ASM-AND-OBJ: bstrpick.w $ra, $a5, 10, 4
61# CHECK-ASM: encoding: [0x21,0x91,0x6a,0x00]
62bstrpick.w $ra, $a5, 10, 4
63
64# CHECK-ASM-AND-OBJ: maskeqz $t8, $a7, $t6
65# CHECK-ASM: encoding: [0x74,0x49,0x13,0x00]
66maskeqz $t8, $a7, $t6
67
68# CHECK-ASM-AND-OBJ: masknez $t8, $t1, $s3
69# CHECK-ASM: encoding: [0xb4,0xe9,0x13,0x00]
70masknez $t8, $t1, $s3
71
72
73#############################################################
74## Instructions only for loongarch64
75#############################################################
76
77.ifdef LA64
78
79# CHECK64-ASM-AND-OBJ: clo.d $s6, $ra
80# CHECK64-ASM: encoding: [0x3d,0x20,0x00,0x00]
81clo.d $s6, $ra
82
83# CHECK64-ASM-AND-OBJ: clz.d $s3, $s3
84# CHECK64-ASM: encoding: [0x5a,0x27,0x00,0x00]
85clz.d $s3, $s3
86
87# CHECK64-ASM-AND-OBJ: cto.d $t6, $t8
88# CHECK64-ASM: encoding: [0x92,0x2a,0x00,0x00]
89cto.d $t6, $t8
90
91# CHECK64-ASM-AND-OBJ: ctz.d $t5, $a6
92# CHECK64-ASM: encoding: [0x51,0x2d,0x00,0x00]
93ctz.d $t5, $a6
94
95# CHECK64-ASM-AND-OBJ: bytepick.d $t3, $t5, $t8, 4
96# CHECK64-ASM: encoding: [0x2f,0x52,0x0e,0x00]
97bytepick.d $t3, $t5, $t8, 4
98
99# CHECK64-ASM-AND-OBJ: revb.4h $t1, $t7
100# CHECK64-ASM: encoding: [0x6d,0x36,0x00,0x00]
101revb.4h $t1, $t7
102
103# CHECK64-ASM-AND-OBJ: revb.2w $s5, $s4
104# CHECK64-ASM: encoding: [0x7c,0x3b,0x00,0x00]
105revb.2w $s5, $s4
106
107# CHECK64-ASM-AND-OBJ: revb.d $zero, $s0
108# CHECK64-ASM: encoding: [0xe0,0x3e,0x00,0x00]
109revb.d $zero, $s0
110
111# CHECK64-ASM-AND-OBJ: revh.2w $s5, $a6
112# CHECK64-ASM: encoding: [0x5c,0x41,0x00,0x00]
113revh.2w $s5, $a6
114
115# CHECK64-ASM-AND-OBJ: revh.d $a5, $a3
116# CHECK64-ASM: encoding: [0xe9,0x44,0x00,0x00]
117revh.d $a5, $a3
118
119# CHECK64-ASM-AND-OBJ: bitrev.8b $t1, $s2
120# CHECK64-ASM: encoding: [0x2d,0x4f,0x00,0x00]
121bitrev.8b $t1, $s2
122
123# CHECK64-ASM-AND-OBJ: bitrev.d $t7, $s0
124# CHECK64-ASM: encoding: [0xf3,0x56,0x00,0x00]
125bitrev.d $t7, $s0
126
127# CHECK64-ASM-AND-OBJ: bstrins.d $a4, $a7, 7, 2
128# CHECK64-ASM: encoding: [0x68,0x09,0x87,0x00]
129bstrins.d $a4, $a7, 7, 2
130
131# CHECK64-ASM-AND-OBJ: bstrpick.d $s8, $s4, 39, 22
132# CHECK64-ASM: encoding: [0x7f,0x5b,0xe7,0x00]
133bstrpick.d $s8, $s4, 39, 22
134
135.endif
136
137