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