1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -mtriple=riscv32 -mattr=+m,+experimental-v -riscv-v-vector-bits-min=128 -riscv-v-fixed-length-vector-lmul-max=2 -verify-machineinstrs < %s | FileCheck %s --check-prefixes=LMULMAX2-RV32 3; RUN: llc -mtriple=riscv64 -mattr=+m,+experimental-v -riscv-v-vector-bits-min=128 -riscv-v-fixed-length-vector-lmul-max=2 -verify-machineinstrs < %s | FileCheck %s --check-prefixes=LMULMAX2-RV64 4; RUN: llc -mtriple=riscv32 -mattr=+m,+experimental-v -riscv-v-vector-bits-min=128 -riscv-v-fixed-length-vector-lmul-max=1 -verify-machineinstrs < %s | FileCheck %s --check-prefixes=LMULMAX1-RV32 5; RUN: llc -mtriple=riscv64 -mattr=+m,+experimental-v -riscv-v-vector-bits-min=128 -riscv-v-fixed-length-vector-lmul-max=1 -verify-machineinstrs < %s | FileCheck %s --check-prefixes=LMULMAX1-RV64 6 7define void @cttz_v16i8(<16 x i8>* %x, <16 x i8>* %y) { 8; LMULMAX2-RV32-LABEL: cttz_v16i8: 9; LMULMAX2-RV32: # %bb.0: 10; LMULMAX2-RV32-NEXT: addi sp, sp, -32 11; LMULMAX2-RV32-NEXT: .cfi_def_cfa_offset 32 12; LMULMAX2-RV32-NEXT: vsetivli zero, 16, e8, m1, ta, mu 13; LMULMAX2-RV32-NEXT: vle8.v v25, (a0) 14; LMULMAX2-RV32-NEXT: vmv.x.s a1, v25 15; LMULMAX2-RV32-NEXT: ori a1, a1, 256 16; LMULMAX2-RV32-NEXT: addi a2, a1, -1 17; LMULMAX2-RV32-NEXT: not a1, a1 18; LMULMAX2-RV32-NEXT: and a2, a1, a2 19; LMULMAX2-RV32-NEXT: srli a3, a2, 1 20; LMULMAX2-RV32-NEXT: lui a1, 349525 21; LMULMAX2-RV32-NEXT: addi a6, a1, 1365 22; LMULMAX2-RV32-NEXT: and a3, a3, a6 23; LMULMAX2-RV32-NEXT: sub a3, a2, a3 24; LMULMAX2-RV32-NEXT: lui a2, 209715 25; LMULMAX2-RV32-NEXT: addi a2, a2, 819 26; LMULMAX2-RV32-NEXT: and a4, a3, a2 27; LMULMAX2-RV32-NEXT: srli a3, a3, 2 28; LMULMAX2-RV32-NEXT: and a3, a3, a2 29; LMULMAX2-RV32-NEXT: add a3, a4, a3 30; LMULMAX2-RV32-NEXT: srli a4, a3, 4 31; LMULMAX2-RV32-NEXT: add a4, a3, a4 32; LMULMAX2-RV32-NEXT: lui a3, 61681 33; LMULMAX2-RV32-NEXT: addi a3, a3, -241 34; LMULMAX2-RV32-NEXT: and a5, a4, a3 35; LMULMAX2-RV32-NEXT: lui a4, 4112 36; LMULMAX2-RV32-NEXT: addi a4, a4, 257 37; LMULMAX2-RV32-NEXT: mul a5, a5, a4 38; LMULMAX2-RV32-NEXT: srli a5, a5, 24 39; LMULMAX2-RV32-NEXT: sb a5, 16(sp) 40; LMULMAX2-RV32-NEXT: vsetivli zero, 1, e8, m1, ta, mu 41; LMULMAX2-RV32-NEXT: vslidedown.vi v26, v25, 15 42; LMULMAX2-RV32-NEXT: vmv.x.s a5, v26 43; LMULMAX2-RV32-NEXT: ori a5, a5, 256 44; LMULMAX2-RV32-NEXT: addi a1, a5, -1 45; LMULMAX2-RV32-NEXT: not a5, a5 46; LMULMAX2-RV32-NEXT: and a1, a5, a1 47; LMULMAX2-RV32-NEXT: srli a5, a1, 1 48; LMULMAX2-RV32-NEXT: and a5, a5, a6 49; LMULMAX2-RV32-NEXT: sub a1, a1, a5 50; LMULMAX2-RV32-NEXT: and a5, a1, a2 51; LMULMAX2-RV32-NEXT: srli a1, a1, 2 52; LMULMAX2-RV32-NEXT: and a1, a1, a2 53; LMULMAX2-RV32-NEXT: add a1, a5, a1 54; LMULMAX2-RV32-NEXT: srli a5, a1, 4 55; LMULMAX2-RV32-NEXT: add a1, a1, a5 56; LMULMAX2-RV32-NEXT: and a1, a1, a3 57; LMULMAX2-RV32-NEXT: mul a1, a1, a4 58; LMULMAX2-RV32-NEXT: srli a1, a1, 24 59; LMULMAX2-RV32-NEXT: sb a1, 31(sp) 60; LMULMAX2-RV32-NEXT: vslidedown.vi v26, v25, 14 61; LMULMAX2-RV32-NEXT: vmv.x.s a1, v26 62; LMULMAX2-RV32-NEXT: ori a1, a1, 256 63; LMULMAX2-RV32-NEXT: addi a5, a1, -1 64; LMULMAX2-RV32-NEXT: not a1, a1 65; LMULMAX2-RV32-NEXT: and a1, a1, a5 66; LMULMAX2-RV32-NEXT: srli a5, a1, 1 67; LMULMAX2-RV32-NEXT: and a5, a5, a6 68; LMULMAX2-RV32-NEXT: sub a1, a1, a5 69; LMULMAX2-RV32-NEXT: and a5, a1, a2 70; LMULMAX2-RV32-NEXT: srli a1, a1, 2 71; LMULMAX2-RV32-NEXT: and a1, a1, a2 72; LMULMAX2-RV32-NEXT: add a1, a5, a1 73; LMULMAX2-RV32-NEXT: srli a5, a1, 4 74; LMULMAX2-RV32-NEXT: add a1, a1, a5 75; LMULMAX2-RV32-NEXT: and a1, a1, a3 76; LMULMAX2-RV32-NEXT: mul a1, a1, a4 77; LMULMAX2-RV32-NEXT: srli a1, a1, 24 78; LMULMAX2-RV32-NEXT: sb a1, 30(sp) 79; LMULMAX2-RV32-NEXT: vslidedown.vi v26, v25, 13 80; LMULMAX2-RV32-NEXT: vmv.x.s a1, v26 81; LMULMAX2-RV32-NEXT: ori a1, a1, 256 82; LMULMAX2-RV32-NEXT: addi a5, a1, -1 83; LMULMAX2-RV32-NEXT: not a1, a1 84; LMULMAX2-RV32-NEXT: and a1, a1, a5 85; LMULMAX2-RV32-NEXT: srli a5, a1, 1 86; LMULMAX2-RV32-NEXT: and a5, a5, a6 87; LMULMAX2-RV32-NEXT: sub a1, a1, a5 88; LMULMAX2-RV32-NEXT: and a5, a1, a2 89; LMULMAX2-RV32-NEXT: srli a1, a1, 2 90; LMULMAX2-RV32-NEXT: and a1, a1, a2 91; LMULMAX2-RV32-NEXT: add a1, a5, a1 92; LMULMAX2-RV32-NEXT: srli a5, a1, 4 93; LMULMAX2-RV32-NEXT: add a1, a1, a5 94; LMULMAX2-RV32-NEXT: and a1, a1, a3 95; LMULMAX2-RV32-NEXT: mul a1, a1, a4 96; LMULMAX2-RV32-NEXT: srli a1, a1, 24 97; LMULMAX2-RV32-NEXT: sb a1, 29(sp) 98; LMULMAX2-RV32-NEXT: vslidedown.vi v26, v25, 12 99; LMULMAX2-RV32-NEXT: vmv.x.s a1, v26 100; LMULMAX2-RV32-NEXT: ori a1, a1, 256 101; LMULMAX2-RV32-NEXT: addi a5, a1, -1 102; LMULMAX2-RV32-NEXT: not a1, a1 103; LMULMAX2-RV32-NEXT: and a1, a1, a5 104; LMULMAX2-RV32-NEXT: srli a5, a1, 1 105; LMULMAX2-RV32-NEXT: and a5, a5, a6 106; LMULMAX2-RV32-NEXT: sub a1, a1, a5 107; LMULMAX2-RV32-NEXT: and a5, a1, a2 108; LMULMAX2-RV32-NEXT: srli a1, a1, 2 109; LMULMAX2-RV32-NEXT: and a1, a1, a2 110; LMULMAX2-RV32-NEXT: add a1, a5, a1 111; LMULMAX2-RV32-NEXT: srli a5, a1, 4 112; LMULMAX2-RV32-NEXT: add a1, a1, a5 113; LMULMAX2-RV32-NEXT: and a1, a1, a3 114; LMULMAX2-RV32-NEXT: mul a1, a1, a4 115; LMULMAX2-RV32-NEXT: srli a1, a1, 24 116; LMULMAX2-RV32-NEXT: sb a1, 28(sp) 117; LMULMAX2-RV32-NEXT: vslidedown.vi v26, v25, 11 118; LMULMAX2-RV32-NEXT: vmv.x.s a1, v26 119; LMULMAX2-RV32-NEXT: ori a1, a1, 256 120; LMULMAX2-RV32-NEXT: addi a5, a1, -1 121; LMULMAX2-RV32-NEXT: not a1, a1 122; LMULMAX2-RV32-NEXT: and a1, a1, a5 123; LMULMAX2-RV32-NEXT: srli a5, a1, 1 124; LMULMAX2-RV32-NEXT: and a5, a5, a6 125; LMULMAX2-RV32-NEXT: sub a1, a1, a5 126; LMULMAX2-RV32-NEXT: and a5, a1, a2 127; LMULMAX2-RV32-NEXT: srli a1, a1, 2 128; LMULMAX2-RV32-NEXT: and a1, a1, a2 129; LMULMAX2-RV32-NEXT: add a1, a5, a1 130; LMULMAX2-RV32-NEXT: srli a5, a1, 4 131; LMULMAX2-RV32-NEXT: add a1, a1, a5 132; LMULMAX2-RV32-NEXT: and a1, a1, a3 133; LMULMAX2-RV32-NEXT: mul a1, a1, a4 134; LMULMAX2-RV32-NEXT: srli a1, a1, 24 135; LMULMAX2-RV32-NEXT: sb a1, 27(sp) 136; LMULMAX2-RV32-NEXT: vslidedown.vi v26, v25, 10 137; LMULMAX2-RV32-NEXT: vmv.x.s a1, v26 138; LMULMAX2-RV32-NEXT: ori a1, a1, 256 139; LMULMAX2-RV32-NEXT: addi a5, a1, -1 140; LMULMAX2-RV32-NEXT: not a1, a1 141; LMULMAX2-RV32-NEXT: and a1, a1, a5 142; LMULMAX2-RV32-NEXT: srli a5, a1, 1 143; LMULMAX2-RV32-NEXT: and a5, a5, a6 144; LMULMAX2-RV32-NEXT: sub a1, a1, a5 145; LMULMAX2-RV32-NEXT: and a5, a1, a2 146; LMULMAX2-RV32-NEXT: srli a1, a1, 2 147; LMULMAX2-RV32-NEXT: and a1, a1, a2 148; LMULMAX2-RV32-NEXT: add a1, a5, a1 149; LMULMAX2-RV32-NEXT: srli a5, a1, 4 150; LMULMAX2-RV32-NEXT: add a1, a1, a5 151; LMULMAX2-RV32-NEXT: and a1, a1, a3 152; LMULMAX2-RV32-NEXT: mul a1, a1, a4 153; LMULMAX2-RV32-NEXT: srli a1, a1, 24 154; LMULMAX2-RV32-NEXT: sb a1, 26(sp) 155; LMULMAX2-RV32-NEXT: vslidedown.vi v26, v25, 9 156; LMULMAX2-RV32-NEXT: vmv.x.s a1, v26 157; LMULMAX2-RV32-NEXT: ori a1, a1, 256 158; LMULMAX2-RV32-NEXT: addi a5, a1, -1 159; LMULMAX2-RV32-NEXT: not a1, a1 160; LMULMAX2-RV32-NEXT: and a1, a1, a5 161; LMULMAX2-RV32-NEXT: srli a5, a1, 1 162; LMULMAX2-RV32-NEXT: and a5, a5, a6 163; LMULMAX2-RV32-NEXT: sub a1, a1, a5 164; LMULMAX2-RV32-NEXT: and a5, a1, a2 165; LMULMAX2-RV32-NEXT: srli a1, a1, 2 166; LMULMAX2-RV32-NEXT: and a1, a1, a2 167; LMULMAX2-RV32-NEXT: add a1, a5, a1 168; LMULMAX2-RV32-NEXT: srli a5, a1, 4 169; LMULMAX2-RV32-NEXT: add a1, a1, a5 170; LMULMAX2-RV32-NEXT: and a1, a1, a3 171; LMULMAX2-RV32-NEXT: mul a1, a1, a4 172; LMULMAX2-RV32-NEXT: srli a1, a1, 24 173; LMULMAX2-RV32-NEXT: sb a1, 25(sp) 174; LMULMAX2-RV32-NEXT: vslidedown.vi v26, v25, 8 175; LMULMAX2-RV32-NEXT: vmv.x.s a1, v26 176; LMULMAX2-RV32-NEXT: ori a1, a1, 256 177; LMULMAX2-RV32-NEXT: addi a5, a1, -1 178; LMULMAX2-RV32-NEXT: not a1, a1 179; LMULMAX2-RV32-NEXT: and a1, a1, a5 180; LMULMAX2-RV32-NEXT: srli a5, a1, 1 181; LMULMAX2-RV32-NEXT: and a5, a5, a6 182; LMULMAX2-RV32-NEXT: sub a1, a1, a5 183; LMULMAX2-RV32-NEXT: and a5, a1, a2 184; LMULMAX2-RV32-NEXT: srli a1, a1, 2 185; LMULMAX2-RV32-NEXT: and a1, a1, a2 186; LMULMAX2-RV32-NEXT: add a1, a5, a1 187; LMULMAX2-RV32-NEXT: srli a5, a1, 4 188; LMULMAX2-RV32-NEXT: add a1, a1, a5 189; LMULMAX2-RV32-NEXT: and a1, a1, a3 190; LMULMAX2-RV32-NEXT: mul a1, a1, a4 191; LMULMAX2-RV32-NEXT: srli a1, a1, 24 192; LMULMAX2-RV32-NEXT: sb a1, 24(sp) 193; LMULMAX2-RV32-NEXT: vslidedown.vi v26, v25, 7 194; LMULMAX2-RV32-NEXT: vmv.x.s a1, v26 195; LMULMAX2-RV32-NEXT: ori a1, a1, 256 196; LMULMAX2-RV32-NEXT: addi a5, a1, -1 197; LMULMAX2-RV32-NEXT: not a1, a1 198; LMULMAX2-RV32-NEXT: and a1, a1, a5 199; LMULMAX2-RV32-NEXT: srli a5, a1, 1 200; LMULMAX2-RV32-NEXT: and a5, a5, a6 201; LMULMAX2-RV32-NEXT: sub a1, a1, a5 202; LMULMAX2-RV32-NEXT: and a5, a1, a2 203; LMULMAX2-RV32-NEXT: srli a1, a1, 2 204; LMULMAX2-RV32-NEXT: and a1, a1, a2 205; LMULMAX2-RV32-NEXT: add a1, a5, a1 206; LMULMAX2-RV32-NEXT: srli a5, a1, 4 207; LMULMAX2-RV32-NEXT: add a1, a1, a5 208; LMULMAX2-RV32-NEXT: and a1, a1, a3 209; LMULMAX2-RV32-NEXT: mul a1, a1, a4 210; LMULMAX2-RV32-NEXT: srli a1, a1, 24 211; LMULMAX2-RV32-NEXT: sb a1, 23(sp) 212; LMULMAX2-RV32-NEXT: vslidedown.vi v26, v25, 6 213; LMULMAX2-RV32-NEXT: vmv.x.s a1, v26 214; LMULMAX2-RV32-NEXT: ori a1, a1, 256 215; LMULMAX2-RV32-NEXT: addi a5, a1, -1 216; LMULMAX2-RV32-NEXT: not a1, a1 217; LMULMAX2-RV32-NEXT: and a1, a1, a5 218; LMULMAX2-RV32-NEXT: srli a5, a1, 1 219; LMULMAX2-RV32-NEXT: and a5, a5, a6 220; LMULMAX2-RV32-NEXT: sub a1, a1, a5 221; LMULMAX2-RV32-NEXT: and a5, a1, a2 222; LMULMAX2-RV32-NEXT: srli a1, a1, 2 223; LMULMAX2-RV32-NEXT: and a1, a1, a2 224; LMULMAX2-RV32-NEXT: add a1, a5, a1 225; LMULMAX2-RV32-NEXT: srli a5, a1, 4 226; LMULMAX2-RV32-NEXT: add a1, a1, a5 227; LMULMAX2-RV32-NEXT: and a1, a1, a3 228; LMULMAX2-RV32-NEXT: mul a1, a1, a4 229; LMULMAX2-RV32-NEXT: srli a1, a1, 24 230; LMULMAX2-RV32-NEXT: sb a1, 22(sp) 231; LMULMAX2-RV32-NEXT: vslidedown.vi v26, v25, 5 232; LMULMAX2-RV32-NEXT: vmv.x.s a1, v26 233; LMULMAX2-RV32-NEXT: ori a1, a1, 256 234; LMULMAX2-RV32-NEXT: addi a5, a1, -1 235; LMULMAX2-RV32-NEXT: not a1, a1 236; LMULMAX2-RV32-NEXT: and a1, a1, a5 237; LMULMAX2-RV32-NEXT: srli a5, a1, 1 238; LMULMAX2-RV32-NEXT: and a5, a5, a6 239; LMULMAX2-RV32-NEXT: sub a1, a1, a5 240; LMULMAX2-RV32-NEXT: and a5, a1, a2 241; LMULMAX2-RV32-NEXT: srli a1, a1, 2 242; LMULMAX2-RV32-NEXT: and a1, a1, a2 243; LMULMAX2-RV32-NEXT: add a1, a5, a1 244; LMULMAX2-RV32-NEXT: srli a5, a1, 4 245; LMULMAX2-RV32-NEXT: add a1, a1, a5 246; LMULMAX2-RV32-NEXT: and a1, a1, a3 247; LMULMAX2-RV32-NEXT: mul a1, a1, a4 248; LMULMAX2-RV32-NEXT: srli a1, a1, 24 249; LMULMAX2-RV32-NEXT: sb a1, 21(sp) 250; LMULMAX2-RV32-NEXT: vslidedown.vi v26, v25, 4 251; LMULMAX2-RV32-NEXT: vmv.x.s a1, v26 252; LMULMAX2-RV32-NEXT: ori a1, a1, 256 253; LMULMAX2-RV32-NEXT: addi a5, a1, -1 254; LMULMAX2-RV32-NEXT: not a1, a1 255; LMULMAX2-RV32-NEXT: and a1, a1, a5 256; LMULMAX2-RV32-NEXT: srli a5, a1, 1 257; LMULMAX2-RV32-NEXT: and a5, a5, a6 258; LMULMAX2-RV32-NEXT: sub a1, a1, a5 259; LMULMAX2-RV32-NEXT: and a5, a1, a2 260; LMULMAX2-RV32-NEXT: srli a1, a1, 2 261; LMULMAX2-RV32-NEXT: and a1, a1, a2 262; LMULMAX2-RV32-NEXT: add a1, a5, a1 263; LMULMAX2-RV32-NEXT: srli a5, a1, 4 264; LMULMAX2-RV32-NEXT: add a1, a1, a5 265; LMULMAX2-RV32-NEXT: and a1, a1, a3 266; LMULMAX2-RV32-NEXT: mul a1, a1, a4 267; LMULMAX2-RV32-NEXT: srli a1, a1, 24 268; LMULMAX2-RV32-NEXT: sb a1, 20(sp) 269; LMULMAX2-RV32-NEXT: vslidedown.vi v26, v25, 3 270; LMULMAX2-RV32-NEXT: vmv.x.s a1, v26 271; LMULMAX2-RV32-NEXT: ori a1, a1, 256 272; LMULMAX2-RV32-NEXT: addi a5, a1, -1 273; LMULMAX2-RV32-NEXT: not a1, a1 274; LMULMAX2-RV32-NEXT: and a1, a1, a5 275; LMULMAX2-RV32-NEXT: srli a5, a1, 1 276; LMULMAX2-RV32-NEXT: and a5, a5, a6 277; LMULMAX2-RV32-NEXT: sub a1, a1, a5 278; LMULMAX2-RV32-NEXT: and a5, a1, a2 279; LMULMAX2-RV32-NEXT: srli a1, a1, 2 280; LMULMAX2-RV32-NEXT: and a1, a1, a2 281; LMULMAX2-RV32-NEXT: add a1, a5, a1 282; LMULMAX2-RV32-NEXT: srli a5, a1, 4 283; LMULMAX2-RV32-NEXT: add a1, a1, a5 284; LMULMAX2-RV32-NEXT: and a1, a1, a3 285; LMULMAX2-RV32-NEXT: mul a1, a1, a4 286; LMULMAX2-RV32-NEXT: srli a1, a1, 24 287; LMULMAX2-RV32-NEXT: sb a1, 19(sp) 288; LMULMAX2-RV32-NEXT: vslidedown.vi v26, v25, 2 289; LMULMAX2-RV32-NEXT: vmv.x.s a1, v26 290; LMULMAX2-RV32-NEXT: ori a1, a1, 256 291; LMULMAX2-RV32-NEXT: addi a5, a1, -1 292; LMULMAX2-RV32-NEXT: not a1, a1 293; LMULMAX2-RV32-NEXT: and a1, a1, a5 294; LMULMAX2-RV32-NEXT: srli a5, a1, 1 295; LMULMAX2-RV32-NEXT: and a5, a5, a6 296; LMULMAX2-RV32-NEXT: sub a1, a1, a5 297; LMULMAX2-RV32-NEXT: and a5, a1, a2 298; LMULMAX2-RV32-NEXT: srli a1, a1, 2 299; LMULMAX2-RV32-NEXT: and a1, a1, a2 300; LMULMAX2-RV32-NEXT: add a1, a5, a1 301; LMULMAX2-RV32-NEXT: srli a5, a1, 4 302; LMULMAX2-RV32-NEXT: add a1, a1, a5 303; LMULMAX2-RV32-NEXT: and a1, a1, a3 304; LMULMAX2-RV32-NEXT: mul a1, a1, a4 305; LMULMAX2-RV32-NEXT: srli a1, a1, 24 306; LMULMAX2-RV32-NEXT: sb a1, 18(sp) 307; LMULMAX2-RV32-NEXT: vslidedown.vi v25, v25, 1 308; LMULMAX2-RV32-NEXT: vmv.x.s a1, v25 309; LMULMAX2-RV32-NEXT: ori a1, a1, 256 310; LMULMAX2-RV32-NEXT: addi a5, a1, -1 311; LMULMAX2-RV32-NEXT: not a1, a1 312; LMULMAX2-RV32-NEXT: and a1, a1, a5 313; LMULMAX2-RV32-NEXT: srli a5, a1, 1 314; LMULMAX2-RV32-NEXT: and a5, a5, a6 315; LMULMAX2-RV32-NEXT: sub a1, a1, a5 316; LMULMAX2-RV32-NEXT: and a5, a1, a2 317; LMULMAX2-RV32-NEXT: srli a1, a1, 2 318; LMULMAX2-RV32-NEXT: and a1, a1, a2 319; LMULMAX2-RV32-NEXT: add a1, a5, a1 320; LMULMAX2-RV32-NEXT: srli a2, a1, 4 321; LMULMAX2-RV32-NEXT: add a1, a1, a2 322; LMULMAX2-RV32-NEXT: and a1, a1, a3 323; LMULMAX2-RV32-NEXT: mul a1, a1, a4 324; LMULMAX2-RV32-NEXT: srli a1, a1, 24 325; LMULMAX2-RV32-NEXT: sb a1, 17(sp) 326; LMULMAX2-RV32-NEXT: vsetivli zero, 16, e8, m1, ta, mu 327; LMULMAX2-RV32-NEXT: addi a1, sp, 16 328; LMULMAX2-RV32-NEXT: vle8.v v25, (a1) 329; LMULMAX2-RV32-NEXT: vse8.v v25, (a0) 330; LMULMAX2-RV32-NEXT: addi sp, sp, 32 331; LMULMAX2-RV32-NEXT: ret 332; 333; LMULMAX2-RV64-LABEL: cttz_v16i8: 334; LMULMAX2-RV64: # %bb.0: 335; LMULMAX2-RV64-NEXT: addi sp, sp, -32 336; LMULMAX2-RV64-NEXT: .cfi_def_cfa_offset 32 337; LMULMAX2-RV64-NEXT: vsetivli zero, 16, e8, m1, ta, mu 338; LMULMAX2-RV64-NEXT: vle8.v v25, (a0) 339; LMULMAX2-RV64-NEXT: vsetivli zero, 1, e8, m1, ta, mu 340; LMULMAX2-RV64-NEXT: vslidedown.vi v26, v25, 15 341; LMULMAX2-RV64-NEXT: vmv.x.s a1, v26 342; LMULMAX2-RV64-NEXT: ori a1, a1, 256 343; LMULMAX2-RV64-NEXT: addi a2, a1, -1 344; LMULMAX2-RV64-NEXT: not a1, a1 345; LMULMAX2-RV64-NEXT: and a2, a1, a2 346; LMULMAX2-RV64-NEXT: srli a3, a2, 1 347; LMULMAX2-RV64-NEXT: lui a1, 21845 348; LMULMAX2-RV64-NEXT: addiw a1, a1, 1365 349; LMULMAX2-RV64-NEXT: slli a1, a1, 12 350; LMULMAX2-RV64-NEXT: addi a1, a1, 1365 351; LMULMAX2-RV64-NEXT: slli a1, a1, 12 352; LMULMAX2-RV64-NEXT: addi a1, a1, 1365 353; LMULMAX2-RV64-NEXT: slli a1, a1, 12 354; LMULMAX2-RV64-NEXT: addi a6, a1, 1365 355; LMULMAX2-RV64-NEXT: and a3, a3, a6 356; LMULMAX2-RV64-NEXT: sub a3, a2, a3 357; LMULMAX2-RV64-NEXT: lui a2, 13107 358; LMULMAX2-RV64-NEXT: addiw a2, a2, 819 359; LMULMAX2-RV64-NEXT: slli a2, a2, 12 360; LMULMAX2-RV64-NEXT: addi a2, a2, 819 361; LMULMAX2-RV64-NEXT: slli a2, a2, 12 362; LMULMAX2-RV64-NEXT: addi a2, a2, 819 363; LMULMAX2-RV64-NEXT: slli a2, a2, 12 364; LMULMAX2-RV64-NEXT: addi a2, a2, 819 365; LMULMAX2-RV64-NEXT: and a4, a3, a2 366; LMULMAX2-RV64-NEXT: srli a3, a3, 2 367; LMULMAX2-RV64-NEXT: and a3, a3, a2 368; LMULMAX2-RV64-NEXT: add a3, a4, a3 369; LMULMAX2-RV64-NEXT: srli a4, a3, 4 370; LMULMAX2-RV64-NEXT: add a4, a3, a4 371; LMULMAX2-RV64-NEXT: lui a3, 3855 372; LMULMAX2-RV64-NEXT: addiw a3, a3, 241 373; LMULMAX2-RV64-NEXT: slli a3, a3, 12 374; LMULMAX2-RV64-NEXT: addi a3, a3, -241 375; LMULMAX2-RV64-NEXT: slli a3, a3, 12 376; LMULMAX2-RV64-NEXT: addi a3, a3, 241 377; LMULMAX2-RV64-NEXT: slli a3, a3, 12 378; LMULMAX2-RV64-NEXT: addi a3, a3, -241 379; LMULMAX2-RV64-NEXT: and a5, a4, a3 380; LMULMAX2-RV64-NEXT: lui a4, 4112 381; LMULMAX2-RV64-NEXT: addiw a4, a4, 257 382; LMULMAX2-RV64-NEXT: slli a4, a4, 16 383; LMULMAX2-RV64-NEXT: addi a4, a4, 257 384; LMULMAX2-RV64-NEXT: slli a4, a4, 16 385; LMULMAX2-RV64-NEXT: addi a4, a4, 257 386; LMULMAX2-RV64-NEXT: mul a5, a5, a4 387; LMULMAX2-RV64-NEXT: srli a5, a5, 56 388; LMULMAX2-RV64-NEXT: sb a5, 31(sp) 389; LMULMAX2-RV64-NEXT: vslidedown.vi v26, v25, 14 390; LMULMAX2-RV64-NEXT: vmv.x.s a5, v26 391; LMULMAX2-RV64-NEXT: ori a5, a5, 256 392; LMULMAX2-RV64-NEXT: addi a1, a5, -1 393; LMULMAX2-RV64-NEXT: not a5, a5 394; LMULMAX2-RV64-NEXT: and a1, a5, a1 395; LMULMAX2-RV64-NEXT: srli a5, a1, 1 396; LMULMAX2-RV64-NEXT: and a5, a5, a6 397; LMULMAX2-RV64-NEXT: sub a1, a1, a5 398; LMULMAX2-RV64-NEXT: and a5, a1, a2 399; LMULMAX2-RV64-NEXT: srli a1, a1, 2 400; LMULMAX2-RV64-NEXT: and a1, a1, a2 401; LMULMAX2-RV64-NEXT: add a1, a5, a1 402; LMULMAX2-RV64-NEXT: srli a5, a1, 4 403; LMULMAX2-RV64-NEXT: add a1, a1, a5 404; LMULMAX2-RV64-NEXT: and a1, a1, a3 405; LMULMAX2-RV64-NEXT: mul a1, a1, a4 406; LMULMAX2-RV64-NEXT: srli a1, a1, 56 407; LMULMAX2-RV64-NEXT: sb a1, 30(sp) 408; LMULMAX2-RV64-NEXT: vslidedown.vi v26, v25, 13 409; LMULMAX2-RV64-NEXT: vmv.x.s a1, v26 410; LMULMAX2-RV64-NEXT: ori a1, a1, 256 411; LMULMAX2-RV64-NEXT: addi a5, a1, -1 412; LMULMAX2-RV64-NEXT: not a1, a1 413; LMULMAX2-RV64-NEXT: and a1, a1, a5 414; LMULMAX2-RV64-NEXT: srli a5, a1, 1 415; LMULMAX2-RV64-NEXT: and a5, a5, a6 416; LMULMAX2-RV64-NEXT: sub a1, a1, a5 417; LMULMAX2-RV64-NEXT: and a5, a1, a2 418; LMULMAX2-RV64-NEXT: srli a1, a1, 2 419; LMULMAX2-RV64-NEXT: and a1, a1, a2 420; LMULMAX2-RV64-NEXT: add a1, a5, a1 421; LMULMAX2-RV64-NEXT: srli a5, a1, 4 422; LMULMAX2-RV64-NEXT: add a1, a1, a5 423; LMULMAX2-RV64-NEXT: and a1, a1, a3 424; LMULMAX2-RV64-NEXT: mul a1, a1, a4 425; LMULMAX2-RV64-NEXT: srli a1, a1, 56 426; LMULMAX2-RV64-NEXT: sb a1, 29(sp) 427; LMULMAX2-RV64-NEXT: vslidedown.vi v26, v25, 12 428; LMULMAX2-RV64-NEXT: vmv.x.s a1, v26 429; LMULMAX2-RV64-NEXT: ori a1, a1, 256 430; LMULMAX2-RV64-NEXT: addi a5, a1, -1 431; LMULMAX2-RV64-NEXT: not a1, a1 432; LMULMAX2-RV64-NEXT: and a1, a1, a5 433; LMULMAX2-RV64-NEXT: srli a5, a1, 1 434; LMULMAX2-RV64-NEXT: and a5, a5, a6 435; LMULMAX2-RV64-NEXT: sub a1, a1, a5 436; LMULMAX2-RV64-NEXT: and a5, a1, a2 437; LMULMAX2-RV64-NEXT: srli a1, a1, 2 438; LMULMAX2-RV64-NEXT: and a1, a1, a2 439; LMULMAX2-RV64-NEXT: add a1, a5, a1 440; LMULMAX2-RV64-NEXT: srli a5, a1, 4 441; LMULMAX2-RV64-NEXT: add a1, a1, a5 442; LMULMAX2-RV64-NEXT: and a1, a1, a3 443; LMULMAX2-RV64-NEXT: mul a1, a1, a4 444; LMULMAX2-RV64-NEXT: srli a1, a1, 56 445; LMULMAX2-RV64-NEXT: sb a1, 28(sp) 446; LMULMAX2-RV64-NEXT: vslidedown.vi v26, v25, 11 447; LMULMAX2-RV64-NEXT: vmv.x.s a1, v26 448; LMULMAX2-RV64-NEXT: ori a1, a1, 256 449; LMULMAX2-RV64-NEXT: addi a5, a1, -1 450; LMULMAX2-RV64-NEXT: not a1, a1 451; LMULMAX2-RV64-NEXT: and a1, a1, a5 452; LMULMAX2-RV64-NEXT: srli a5, a1, 1 453; LMULMAX2-RV64-NEXT: and a5, a5, a6 454; LMULMAX2-RV64-NEXT: sub a1, a1, a5 455; LMULMAX2-RV64-NEXT: and a5, a1, a2 456; LMULMAX2-RV64-NEXT: srli a1, a1, 2 457; LMULMAX2-RV64-NEXT: and a1, a1, a2 458; LMULMAX2-RV64-NEXT: add a1, a5, a1 459; LMULMAX2-RV64-NEXT: srli a5, a1, 4 460; LMULMAX2-RV64-NEXT: add a1, a1, a5 461; LMULMAX2-RV64-NEXT: and a1, a1, a3 462; LMULMAX2-RV64-NEXT: mul a1, a1, a4 463; LMULMAX2-RV64-NEXT: srli a1, a1, 56 464; LMULMAX2-RV64-NEXT: sb a1, 27(sp) 465; LMULMAX2-RV64-NEXT: vslidedown.vi v26, v25, 10 466; LMULMAX2-RV64-NEXT: vmv.x.s a1, v26 467; LMULMAX2-RV64-NEXT: ori a1, a1, 256 468; LMULMAX2-RV64-NEXT: addi a5, a1, -1 469; LMULMAX2-RV64-NEXT: not a1, a1 470; LMULMAX2-RV64-NEXT: and a1, a1, a5 471; LMULMAX2-RV64-NEXT: srli a5, a1, 1 472; LMULMAX2-RV64-NEXT: and a5, a5, a6 473; LMULMAX2-RV64-NEXT: sub a1, a1, a5 474; LMULMAX2-RV64-NEXT: and a5, a1, a2 475; LMULMAX2-RV64-NEXT: srli a1, a1, 2 476; LMULMAX2-RV64-NEXT: and a1, a1, a2 477; LMULMAX2-RV64-NEXT: add a1, a5, a1 478; LMULMAX2-RV64-NEXT: srli a5, a1, 4 479; LMULMAX2-RV64-NEXT: add a1, a1, a5 480; LMULMAX2-RV64-NEXT: and a1, a1, a3 481; LMULMAX2-RV64-NEXT: mul a1, a1, a4 482; LMULMAX2-RV64-NEXT: srli a1, a1, 56 483; LMULMAX2-RV64-NEXT: sb a1, 26(sp) 484; LMULMAX2-RV64-NEXT: vslidedown.vi v26, v25, 9 485; LMULMAX2-RV64-NEXT: vmv.x.s a1, v26 486; LMULMAX2-RV64-NEXT: ori a1, a1, 256 487; LMULMAX2-RV64-NEXT: addi a5, a1, -1 488; LMULMAX2-RV64-NEXT: not a1, a1 489; LMULMAX2-RV64-NEXT: and a1, a1, a5 490; LMULMAX2-RV64-NEXT: srli a5, a1, 1 491; LMULMAX2-RV64-NEXT: and a5, a5, a6 492; LMULMAX2-RV64-NEXT: sub a1, a1, a5 493; LMULMAX2-RV64-NEXT: and a5, a1, a2 494; LMULMAX2-RV64-NEXT: srli a1, a1, 2 495; LMULMAX2-RV64-NEXT: and a1, a1, a2 496; LMULMAX2-RV64-NEXT: add a1, a5, a1 497; LMULMAX2-RV64-NEXT: srli a5, a1, 4 498; LMULMAX2-RV64-NEXT: add a1, a1, a5 499; LMULMAX2-RV64-NEXT: and a1, a1, a3 500; LMULMAX2-RV64-NEXT: mul a1, a1, a4 501; LMULMAX2-RV64-NEXT: srli a1, a1, 56 502; LMULMAX2-RV64-NEXT: sb a1, 25(sp) 503; LMULMAX2-RV64-NEXT: vslidedown.vi v26, v25, 8 504; LMULMAX2-RV64-NEXT: vmv.x.s a1, v26 505; LMULMAX2-RV64-NEXT: ori a1, a1, 256 506; LMULMAX2-RV64-NEXT: addi a5, a1, -1 507; LMULMAX2-RV64-NEXT: not a1, a1 508; LMULMAX2-RV64-NEXT: and a1, a1, a5 509; LMULMAX2-RV64-NEXT: srli a5, a1, 1 510; LMULMAX2-RV64-NEXT: and a5, a5, a6 511; LMULMAX2-RV64-NEXT: sub a1, a1, a5 512; LMULMAX2-RV64-NEXT: and a5, a1, a2 513; LMULMAX2-RV64-NEXT: srli a1, a1, 2 514; LMULMAX2-RV64-NEXT: and a1, a1, a2 515; LMULMAX2-RV64-NEXT: add a1, a5, a1 516; LMULMAX2-RV64-NEXT: srli a5, a1, 4 517; LMULMAX2-RV64-NEXT: add a1, a1, a5 518; LMULMAX2-RV64-NEXT: and a1, a1, a3 519; LMULMAX2-RV64-NEXT: mul a1, a1, a4 520; LMULMAX2-RV64-NEXT: srli a1, a1, 56 521; LMULMAX2-RV64-NEXT: sb a1, 24(sp) 522; LMULMAX2-RV64-NEXT: vslidedown.vi v26, v25, 7 523; LMULMAX2-RV64-NEXT: vmv.x.s a1, v26 524; LMULMAX2-RV64-NEXT: ori a1, a1, 256 525; LMULMAX2-RV64-NEXT: addi a5, a1, -1 526; LMULMAX2-RV64-NEXT: not a1, a1 527; LMULMAX2-RV64-NEXT: and a1, a1, a5 528; LMULMAX2-RV64-NEXT: srli a5, a1, 1 529; LMULMAX2-RV64-NEXT: and a5, a5, a6 530; LMULMAX2-RV64-NEXT: sub a1, a1, a5 531; LMULMAX2-RV64-NEXT: and a5, a1, a2 532; LMULMAX2-RV64-NEXT: srli a1, a1, 2 533; LMULMAX2-RV64-NEXT: and a1, a1, a2 534; LMULMAX2-RV64-NEXT: add a1, a5, a1 535; LMULMAX2-RV64-NEXT: srli a5, a1, 4 536; LMULMAX2-RV64-NEXT: add a1, a1, a5 537; LMULMAX2-RV64-NEXT: and a1, a1, a3 538; LMULMAX2-RV64-NEXT: mul a1, a1, a4 539; LMULMAX2-RV64-NEXT: srli a1, a1, 56 540; LMULMAX2-RV64-NEXT: sb a1, 23(sp) 541; LMULMAX2-RV64-NEXT: vslidedown.vi v26, v25, 6 542; LMULMAX2-RV64-NEXT: vmv.x.s a1, v26 543; LMULMAX2-RV64-NEXT: ori a1, a1, 256 544; LMULMAX2-RV64-NEXT: addi a5, a1, -1 545; LMULMAX2-RV64-NEXT: not a1, a1 546; LMULMAX2-RV64-NEXT: and a1, a1, a5 547; LMULMAX2-RV64-NEXT: srli a5, a1, 1 548; LMULMAX2-RV64-NEXT: and a5, a5, a6 549; LMULMAX2-RV64-NEXT: sub a1, a1, a5 550; LMULMAX2-RV64-NEXT: and a5, a1, a2 551; LMULMAX2-RV64-NEXT: srli a1, a1, 2 552; LMULMAX2-RV64-NEXT: and a1, a1, a2 553; LMULMAX2-RV64-NEXT: add a1, a5, a1 554; LMULMAX2-RV64-NEXT: srli a5, a1, 4 555; LMULMAX2-RV64-NEXT: add a1, a1, a5 556; LMULMAX2-RV64-NEXT: and a1, a1, a3 557; LMULMAX2-RV64-NEXT: mul a1, a1, a4 558; LMULMAX2-RV64-NEXT: srli a1, a1, 56 559; LMULMAX2-RV64-NEXT: sb a1, 22(sp) 560; LMULMAX2-RV64-NEXT: vslidedown.vi v26, v25, 5 561; LMULMAX2-RV64-NEXT: vmv.x.s a1, v26 562; LMULMAX2-RV64-NEXT: ori a1, a1, 256 563; LMULMAX2-RV64-NEXT: addi a5, a1, -1 564; LMULMAX2-RV64-NEXT: not a1, a1 565; LMULMAX2-RV64-NEXT: and a1, a1, a5 566; LMULMAX2-RV64-NEXT: srli a5, a1, 1 567; LMULMAX2-RV64-NEXT: and a5, a5, a6 568; LMULMAX2-RV64-NEXT: sub a1, a1, a5 569; LMULMAX2-RV64-NEXT: and a5, a1, a2 570; LMULMAX2-RV64-NEXT: srli a1, a1, 2 571; LMULMAX2-RV64-NEXT: and a1, a1, a2 572; LMULMAX2-RV64-NEXT: add a1, a5, a1 573; LMULMAX2-RV64-NEXT: srli a5, a1, 4 574; LMULMAX2-RV64-NEXT: add a1, a1, a5 575; LMULMAX2-RV64-NEXT: and a1, a1, a3 576; LMULMAX2-RV64-NEXT: mul a1, a1, a4 577; LMULMAX2-RV64-NEXT: srli a1, a1, 56 578; LMULMAX2-RV64-NEXT: sb a1, 21(sp) 579; LMULMAX2-RV64-NEXT: vslidedown.vi v26, v25, 4 580; LMULMAX2-RV64-NEXT: vmv.x.s a1, v26 581; LMULMAX2-RV64-NEXT: ori a1, a1, 256 582; LMULMAX2-RV64-NEXT: addi a5, a1, -1 583; LMULMAX2-RV64-NEXT: not a1, a1 584; LMULMAX2-RV64-NEXT: and a1, a1, a5 585; LMULMAX2-RV64-NEXT: srli a5, a1, 1 586; LMULMAX2-RV64-NEXT: and a5, a5, a6 587; LMULMAX2-RV64-NEXT: sub a1, a1, a5 588; LMULMAX2-RV64-NEXT: and a5, a1, a2 589; LMULMAX2-RV64-NEXT: srli a1, a1, 2 590; LMULMAX2-RV64-NEXT: and a1, a1, a2 591; LMULMAX2-RV64-NEXT: add a1, a5, a1 592; LMULMAX2-RV64-NEXT: srli a5, a1, 4 593; LMULMAX2-RV64-NEXT: add a1, a1, a5 594; LMULMAX2-RV64-NEXT: and a1, a1, a3 595; LMULMAX2-RV64-NEXT: mul a1, a1, a4 596; LMULMAX2-RV64-NEXT: srli a1, a1, 56 597; LMULMAX2-RV64-NEXT: sb a1, 20(sp) 598; LMULMAX2-RV64-NEXT: vslidedown.vi v26, v25, 3 599; LMULMAX2-RV64-NEXT: vmv.x.s a1, v26 600; LMULMAX2-RV64-NEXT: ori a1, a1, 256 601; LMULMAX2-RV64-NEXT: addi a5, a1, -1 602; LMULMAX2-RV64-NEXT: not a1, a1 603; LMULMAX2-RV64-NEXT: and a1, a1, a5 604; LMULMAX2-RV64-NEXT: srli a5, a1, 1 605; LMULMAX2-RV64-NEXT: and a5, a5, a6 606; LMULMAX2-RV64-NEXT: sub a1, a1, a5 607; LMULMAX2-RV64-NEXT: and a5, a1, a2 608; LMULMAX2-RV64-NEXT: srli a1, a1, 2 609; LMULMAX2-RV64-NEXT: and a1, a1, a2 610; LMULMAX2-RV64-NEXT: add a1, a5, a1 611; LMULMAX2-RV64-NEXT: srli a5, a1, 4 612; LMULMAX2-RV64-NEXT: add a1, a1, a5 613; LMULMAX2-RV64-NEXT: and a1, a1, a3 614; LMULMAX2-RV64-NEXT: mul a1, a1, a4 615; LMULMAX2-RV64-NEXT: srli a1, a1, 56 616; LMULMAX2-RV64-NEXT: sb a1, 19(sp) 617; LMULMAX2-RV64-NEXT: vslidedown.vi v26, v25, 2 618; LMULMAX2-RV64-NEXT: vmv.x.s a1, v26 619; LMULMAX2-RV64-NEXT: ori a1, a1, 256 620; LMULMAX2-RV64-NEXT: addi a5, a1, -1 621; LMULMAX2-RV64-NEXT: not a1, a1 622; LMULMAX2-RV64-NEXT: and a1, a1, a5 623; LMULMAX2-RV64-NEXT: srli a5, a1, 1 624; LMULMAX2-RV64-NEXT: and a5, a5, a6 625; LMULMAX2-RV64-NEXT: sub a1, a1, a5 626; LMULMAX2-RV64-NEXT: and a5, a1, a2 627; LMULMAX2-RV64-NEXT: srli a1, a1, 2 628; LMULMAX2-RV64-NEXT: and a1, a1, a2 629; LMULMAX2-RV64-NEXT: add a1, a5, a1 630; LMULMAX2-RV64-NEXT: srli a5, a1, 4 631; LMULMAX2-RV64-NEXT: add a1, a1, a5 632; LMULMAX2-RV64-NEXT: and a1, a1, a3 633; LMULMAX2-RV64-NEXT: mul a1, a1, a4 634; LMULMAX2-RV64-NEXT: srli a1, a1, 56 635; LMULMAX2-RV64-NEXT: sb a1, 18(sp) 636; LMULMAX2-RV64-NEXT: vslidedown.vi v26, v25, 1 637; LMULMAX2-RV64-NEXT: vmv.x.s a1, v26 638; LMULMAX2-RV64-NEXT: ori a1, a1, 256 639; LMULMAX2-RV64-NEXT: addi a5, a1, -1 640; LMULMAX2-RV64-NEXT: not a1, a1 641; LMULMAX2-RV64-NEXT: and a1, a1, a5 642; LMULMAX2-RV64-NEXT: srli a5, a1, 1 643; LMULMAX2-RV64-NEXT: and a5, a5, a6 644; LMULMAX2-RV64-NEXT: sub a1, a1, a5 645; LMULMAX2-RV64-NEXT: and a5, a1, a2 646; LMULMAX2-RV64-NEXT: srli a1, a1, 2 647; LMULMAX2-RV64-NEXT: and a1, a1, a2 648; LMULMAX2-RV64-NEXT: add a1, a5, a1 649; LMULMAX2-RV64-NEXT: srli a5, a1, 4 650; LMULMAX2-RV64-NEXT: add a1, a1, a5 651; LMULMAX2-RV64-NEXT: and a1, a1, a3 652; LMULMAX2-RV64-NEXT: mul a1, a1, a4 653; LMULMAX2-RV64-NEXT: srli a1, a1, 56 654; LMULMAX2-RV64-NEXT: sb a1, 17(sp) 655; LMULMAX2-RV64-NEXT: vmv.x.s a1, v25 656; LMULMAX2-RV64-NEXT: ori a1, a1, 256 657; LMULMAX2-RV64-NEXT: addi a5, a1, -1 658; LMULMAX2-RV64-NEXT: not a1, a1 659; LMULMAX2-RV64-NEXT: and a1, a1, a5 660; LMULMAX2-RV64-NEXT: srli a5, a1, 1 661; LMULMAX2-RV64-NEXT: and a5, a5, a6 662; LMULMAX2-RV64-NEXT: sub a1, a1, a5 663; LMULMAX2-RV64-NEXT: and a5, a1, a2 664; LMULMAX2-RV64-NEXT: srli a1, a1, 2 665; LMULMAX2-RV64-NEXT: and a1, a1, a2 666; LMULMAX2-RV64-NEXT: add a1, a5, a1 667; LMULMAX2-RV64-NEXT: srli a2, a1, 4 668; LMULMAX2-RV64-NEXT: add a1, a1, a2 669; LMULMAX2-RV64-NEXT: and a1, a1, a3 670; LMULMAX2-RV64-NEXT: mul a1, a1, a4 671; LMULMAX2-RV64-NEXT: srli a1, a1, 56 672; LMULMAX2-RV64-NEXT: sb a1, 16(sp) 673; LMULMAX2-RV64-NEXT: vsetivli zero, 16, e8, m1, ta, mu 674; LMULMAX2-RV64-NEXT: addi a1, sp, 16 675; LMULMAX2-RV64-NEXT: vle8.v v25, (a1) 676; LMULMAX2-RV64-NEXT: vse8.v v25, (a0) 677; LMULMAX2-RV64-NEXT: addi sp, sp, 32 678; LMULMAX2-RV64-NEXT: ret 679; 680; LMULMAX1-RV32-LABEL: cttz_v16i8: 681; LMULMAX1-RV32: # %bb.0: 682; LMULMAX1-RV32-NEXT: addi sp, sp, -32 683; LMULMAX1-RV32-NEXT: .cfi_def_cfa_offset 32 684; LMULMAX1-RV32-NEXT: vsetivli zero, 16, e8, m1, ta, mu 685; LMULMAX1-RV32-NEXT: vle8.v v25, (a0) 686; LMULMAX1-RV32-NEXT: vmv.x.s a1, v25 687; LMULMAX1-RV32-NEXT: ori a1, a1, 256 688; LMULMAX1-RV32-NEXT: addi a2, a1, -1 689; LMULMAX1-RV32-NEXT: not a1, a1 690; LMULMAX1-RV32-NEXT: and a2, a1, a2 691; LMULMAX1-RV32-NEXT: srli a3, a2, 1 692; LMULMAX1-RV32-NEXT: lui a1, 349525 693; LMULMAX1-RV32-NEXT: addi a6, a1, 1365 694; LMULMAX1-RV32-NEXT: and a3, a3, a6 695; LMULMAX1-RV32-NEXT: sub a3, a2, a3 696; LMULMAX1-RV32-NEXT: lui a2, 209715 697; LMULMAX1-RV32-NEXT: addi a2, a2, 819 698; LMULMAX1-RV32-NEXT: and a4, a3, a2 699; LMULMAX1-RV32-NEXT: srli a3, a3, 2 700; LMULMAX1-RV32-NEXT: and a3, a3, a2 701; LMULMAX1-RV32-NEXT: add a3, a4, a3 702; LMULMAX1-RV32-NEXT: srli a4, a3, 4 703; LMULMAX1-RV32-NEXT: add a4, a3, a4 704; LMULMAX1-RV32-NEXT: lui a3, 61681 705; LMULMAX1-RV32-NEXT: addi a3, a3, -241 706; LMULMAX1-RV32-NEXT: and a5, a4, a3 707; LMULMAX1-RV32-NEXT: lui a4, 4112 708; LMULMAX1-RV32-NEXT: addi a4, a4, 257 709; LMULMAX1-RV32-NEXT: mul a5, a5, a4 710; LMULMAX1-RV32-NEXT: srli a5, a5, 24 711; LMULMAX1-RV32-NEXT: sb a5, 16(sp) 712; LMULMAX1-RV32-NEXT: vsetivli zero, 1, e8, m1, ta, mu 713; LMULMAX1-RV32-NEXT: vslidedown.vi v26, v25, 15 714; LMULMAX1-RV32-NEXT: vmv.x.s a5, v26 715; LMULMAX1-RV32-NEXT: ori a5, a5, 256 716; LMULMAX1-RV32-NEXT: addi a1, a5, -1 717; LMULMAX1-RV32-NEXT: not a5, a5 718; LMULMAX1-RV32-NEXT: and a1, a5, a1 719; LMULMAX1-RV32-NEXT: srli a5, a1, 1 720; LMULMAX1-RV32-NEXT: and a5, a5, a6 721; LMULMAX1-RV32-NEXT: sub a1, a1, a5 722; LMULMAX1-RV32-NEXT: and a5, a1, a2 723; LMULMAX1-RV32-NEXT: srli a1, a1, 2 724; LMULMAX1-RV32-NEXT: and a1, a1, a2 725; LMULMAX1-RV32-NEXT: add a1, a5, a1 726; LMULMAX1-RV32-NEXT: srli a5, a1, 4 727; LMULMAX1-RV32-NEXT: add a1, a1, a5 728; LMULMAX1-RV32-NEXT: and a1, a1, a3 729; LMULMAX1-RV32-NEXT: mul a1, a1, a4 730; LMULMAX1-RV32-NEXT: srli a1, a1, 24 731; LMULMAX1-RV32-NEXT: sb a1, 31(sp) 732; LMULMAX1-RV32-NEXT: vslidedown.vi v26, v25, 14 733; LMULMAX1-RV32-NEXT: vmv.x.s a1, v26 734; LMULMAX1-RV32-NEXT: ori a1, a1, 256 735; LMULMAX1-RV32-NEXT: addi a5, a1, -1 736; LMULMAX1-RV32-NEXT: not a1, a1 737; LMULMAX1-RV32-NEXT: and a1, a1, a5 738; LMULMAX1-RV32-NEXT: srli a5, a1, 1 739; LMULMAX1-RV32-NEXT: and a5, a5, a6 740; LMULMAX1-RV32-NEXT: sub a1, a1, a5 741; LMULMAX1-RV32-NEXT: and a5, a1, a2 742; LMULMAX1-RV32-NEXT: srli a1, a1, 2 743; LMULMAX1-RV32-NEXT: and a1, a1, a2 744; LMULMAX1-RV32-NEXT: add a1, a5, a1 745; LMULMAX1-RV32-NEXT: srli a5, a1, 4 746; LMULMAX1-RV32-NEXT: add a1, a1, a5 747; LMULMAX1-RV32-NEXT: and a1, a1, a3 748; LMULMAX1-RV32-NEXT: mul a1, a1, a4 749; LMULMAX1-RV32-NEXT: srli a1, a1, 24 750; LMULMAX1-RV32-NEXT: sb a1, 30(sp) 751; LMULMAX1-RV32-NEXT: vslidedown.vi v26, v25, 13 752; LMULMAX1-RV32-NEXT: vmv.x.s a1, v26 753; LMULMAX1-RV32-NEXT: ori a1, a1, 256 754; LMULMAX1-RV32-NEXT: addi a5, a1, -1 755; LMULMAX1-RV32-NEXT: not a1, a1 756; LMULMAX1-RV32-NEXT: and a1, a1, a5 757; LMULMAX1-RV32-NEXT: srli a5, a1, 1 758; LMULMAX1-RV32-NEXT: and a5, a5, a6 759; LMULMAX1-RV32-NEXT: sub a1, a1, a5 760; LMULMAX1-RV32-NEXT: and a5, a1, a2 761; LMULMAX1-RV32-NEXT: srli a1, a1, 2 762; LMULMAX1-RV32-NEXT: and a1, a1, a2 763; LMULMAX1-RV32-NEXT: add a1, a5, a1 764; LMULMAX1-RV32-NEXT: srli a5, a1, 4 765; LMULMAX1-RV32-NEXT: add a1, a1, a5 766; LMULMAX1-RV32-NEXT: and a1, a1, a3 767; LMULMAX1-RV32-NEXT: mul a1, a1, a4 768; LMULMAX1-RV32-NEXT: srli a1, a1, 24 769; LMULMAX1-RV32-NEXT: sb a1, 29(sp) 770; LMULMAX1-RV32-NEXT: vslidedown.vi v26, v25, 12 771; LMULMAX1-RV32-NEXT: vmv.x.s a1, v26 772; LMULMAX1-RV32-NEXT: ori a1, a1, 256 773; LMULMAX1-RV32-NEXT: addi a5, a1, -1 774; LMULMAX1-RV32-NEXT: not a1, a1 775; LMULMAX1-RV32-NEXT: and a1, a1, a5 776; LMULMAX1-RV32-NEXT: srli a5, a1, 1 777; LMULMAX1-RV32-NEXT: and a5, a5, a6 778; LMULMAX1-RV32-NEXT: sub a1, a1, a5 779; LMULMAX1-RV32-NEXT: and a5, a1, a2 780; LMULMAX1-RV32-NEXT: srli a1, a1, 2 781; LMULMAX1-RV32-NEXT: and a1, a1, a2 782; LMULMAX1-RV32-NEXT: add a1, a5, a1 783; LMULMAX1-RV32-NEXT: srli a5, a1, 4 784; LMULMAX1-RV32-NEXT: add a1, a1, a5 785; LMULMAX1-RV32-NEXT: and a1, a1, a3 786; LMULMAX1-RV32-NEXT: mul a1, a1, a4 787; LMULMAX1-RV32-NEXT: srli a1, a1, 24 788; LMULMAX1-RV32-NEXT: sb a1, 28(sp) 789; LMULMAX1-RV32-NEXT: vslidedown.vi v26, v25, 11 790; LMULMAX1-RV32-NEXT: vmv.x.s a1, v26 791; LMULMAX1-RV32-NEXT: ori a1, a1, 256 792; LMULMAX1-RV32-NEXT: addi a5, a1, -1 793; LMULMAX1-RV32-NEXT: not a1, a1 794; LMULMAX1-RV32-NEXT: and a1, a1, a5 795; LMULMAX1-RV32-NEXT: srli a5, a1, 1 796; LMULMAX1-RV32-NEXT: and a5, a5, a6 797; LMULMAX1-RV32-NEXT: sub a1, a1, a5 798; LMULMAX1-RV32-NEXT: and a5, a1, a2 799; LMULMAX1-RV32-NEXT: srli a1, a1, 2 800; LMULMAX1-RV32-NEXT: and a1, a1, a2 801; LMULMAX1-RV32-NEXT: add a1, a5, a1 802; LMULMAX1-RV32-NEXT: srli a5, a1, 4 803; LMULMAX1-RV32-NEXT: add a1, a1, a5 804; LMULMAX1-RV32-NEXT: and a1, a1, a3 805; LMULMAX1-RV32-NEXT: mul a1, a1, a4 806; LMULMAX1-RV32-NEXT: srli a1, a1, 24 807; LMULMAX1-RV32-NEXT: sb a1, 27(sp) 808; LMULMAX1-RV32-NEXT: vslidedown.vi v26, v25, 10 809; LMULMAX1-RV32-NEXT: vmv.x.s a1, v26 810; LMULMAX1-RV32-NEXT: ori a1, a1, 256 811; LMULMAX1-RV32-NEXT: addi a5, a1, -1 812; LMULMAX1-RV32-NEXT: not a1, a1 813; LMULMAX1-RV32-NEXT: and a1, a1, a5 814; LMULMAX1-RV32-NEXT: srli a5, a1, 1 815; LMULMAX1-RV32-NEXT: and a5, a5, a6 816; LMULMAX1-RV32-NEXT: sub a1, a1, a5 817; LMULMAX1-RV32-NEXT: and a5, a1, a2 818; LMULMAX1-RV32-NEXT: srli a1, a1, 2 819; LMULMAX1-RV32-NEXT: and a1, a1, a2 820; LMULMAX1-RV32-NEXT: add a1, a5, a1 821; LMULMAX1-RV32-NEXT: srli a5, a1, 4 822; LMULMAX1-RV32-NEXT: add a1, a1, a5 823; LMULMAX1-RV32-NEXT: and a1, a1, a3 824; LMULMAX1-RV32-NEXT: mul a1, a1, a4 825; LMULMAX1-RV32-NEXT: srli a1, a1, 24 826; LMULMAX1-RV32-NEXT: sb a1, 26(sp) 827; LMULMAX1-RV32-NEXT: vslidedown.vi v26, v25, 9 828; LMULMAX1-RV32-NEXT: vmv.x.s a1, v26 829; LMULMAX1-RV32-NEXT: ori a1, a1, 256 830; LMULMAX1-RV32-NEXT: addi a5, a1, -1 831; LMULMAX1-RV32-NEXT: not a1, a1 832; LMULMAX1-RV32-NEXT: and a1, a1, a5 833; LMULMAX1-RV32-NEXT: srli a5, a1, 1 834; LMULMAX1-RV32-NEXT: and a5, a5, a6 835; LMULMAX1-RV32-NEXT: sub a1, a1, a5 836; LMULMAX1-RV32-NEXT: and a5, a1, a2 837; LMULMAX1-RV32-NEXT: srli a1, a1, 2 838; LMULMAX1-RV32-NEXT: and a1, a1, a2 839; LMULMAX1-RV32-NEXT: add a1, a5, a1 840; LMULMAX1-RV32-NEXT: srli a5, a1, 4 841; LMULMAX1-RV32-NEXT: add a1, a1, a5 842; LMULMAX1-RV32-NEXT: and a1, a1, a3 843; LMULMAX1-RV32-NEXT: mul a1, a1, a4 844; LMULMAX1-RV32-NEXT: srli a1, a1, 24 845; LMULMAX1-RV32-NEXT: sb a1, 25(sp) 846; LMULMAX1-RV32-NEXT: vslidedown.vi v26, v25, 8 847; LMULMAX1-RV32-NEXT: vmv.x.s a1, v26 848; LMULMAX1-RV32-NEXT: ori a1, a1, 256 849; LMULMAX1-RV32-NEXT: addi a5, a1, -1 850; LMULMAX1-RV32-NEXT: not a1, a1 851; LMULMAX1-RV32-NEXT: and a1, a1, a5 852; LMULMAX1-RV32-NEXT: srli a5, a1, 1 853; LMULMAX1-RV32-NEXT: and a5, a5, a6 854; LMULMAX1-RV32-NEXT: sub a1, a1, a5 855; LMULMAX1-RV32-NEXT: and a5, a1, a2 856; LMULMAX1-RV32-NEXT: srli a1, a1, 2 857; LMULMAX1-RV32-NEXT: and a1, a1, a2 858; LMULMAX1-RV32-NEXT: add a1, a5, a1 859; LMULMAX1-RV32-NEXT: srli a5, a1, 4 860; LMULMAX1-RV32-NEXT: add a1, a1, a5 861; LMULMAX1-RV32-NEXT: and a1, a1, a3 862; LMULMAX1-RV32-NEXT: mul a1, a1, a4 863; LMULMAX1-RV32-NEXT: srli a1, a1, 24 864; LMULMAX1-RV32-NEXT: sb a1, 24(sp) 865; LMULMAX1-RV32-NEXT: vslidedown.vi v26, v25, 7 866; LMULMAX1-RV32-NEXT: vmv.x.s a1, v26 867; LMULMAX1-RV32-NEXT: ori a1, a1, 256 868; LMULMAX1-RV32-NEXT: addi a5, a1, -1 869; LMULMAX1-RV32-NEXT: not a1, a1 870; LMULMAX1-RV32-NEXT: and a1, a1, a5 871; LMULMAX1-RV32-NEXT: srli a5, a1, 1 872; LMULMAX1-RV32-NEXT: and a5, a5, a6 873; LMULMAX1-RV32-NEXT: sub a1, a1, a5 874; LMULMAX1-RV32-NEXT: and a5, a1, a2 875; LMULMAX1-RV32-NEXT: srli a1, a1, 2 876; LMULMAX1-RV32-NEXT: and a1, a1, a2 877; LMULMAX1-RV32-NEXT: add a1, a5, a1 878; LMULMAX1-RV32-NEXT: srli a5, a1, 4 879; LMULMAX1-RV32-NEXT: add a1, a1, a5 880; LMULMAX1-RV32-NEXT: and a1, a1, a3 881; LMULMAX1-RV32-NEXT: mul a1, a1, a4 882; LMULMAX1-RV32-NEXT: srli a1, a1, 24 883; LMULMAX1-RV32-NEXT: sb a1, 23(sp) 884; LMULMAX1-RV32-NEXT: vslidedown.vi v26, v25, 6 885; LMULMAX1-RV32-NEXT: vmv.x.s a1, v26 886; LMULMAX1-RV32-NEXT: ori a1, a1, 256 887; LMULMAX1-RV32-NEXT: addi a5, a1, -1 888; LMULMAX1-RV32-NEXT: not a1, a1 889; LMULMAX1-RV32-NEXT: and a1, a1, a5 890; LMULMAX1-RV32-NEXT: srli a5, a1, 1 891; LMULMAX1-RV32-NEXT: and a5, a5, a6 892; LMULMAX1-RV32-NEXT: sub a1, a1, a5 893; LMULMAX1-RV32-NEXT: and a5, a1, a2 894; LMULMAX1-RV32-NEXT: srli a1, a1, 2 895; LMULMAX1-RV32-NEXT: and a1, a1, a2 896; LMULMAX1-RV32-NEXT: add a1, a5, a1 897; LMULMAX1-RV32-NEXT: srli a5, a1, 4 898; LMULMAX1-RV32-NEXT: add a1, a1, a5 899; LMULMAX1-RV32-NEXT: and a1, a1, a3 900; LMULMAX1-RV32-NEXT: mul a1, a1, a4 901; LMULMAX1-RV32-NEXT: srli a1, a1, 24 902; LMULMAX1-RV32-NEXT: sb a1, 22(sp) 903; LMULMAX1-RV32-NEXT: vslidedown.vi v26, v25, 5 904; LMULMAX1-RV32-NEXT: vmv.x.s a1, v26 905; LMULMAX1-RV32-NEXT: ori a1, a1, 256 906; LMULMAX1-RV32-NEXT: addi a5, a1, -1 907; LMULMAX1-RV32-NEXT: not a1, a1 908; LMULMAX1-RV32-NEXT: and a1, a1, a5 909; LMULMAX1-RV32-NEXT: srli a5, a1, 1 910; LMULMAX1-RV32-NEXT: and a5, a5, a6 911; LMULMAX1-RV32-NEXT: sub a1, a1, a5 912; LMULMAX1-RV32-NEXT: and a5, a1, a2 913; LMULMAX1-RV32-NEXT: srli a1, a1, 2 914; LMULMAX1-RV32-NEXT: and a1, a1, a2 915; LMULMAX1-RV32-NEXT: add a1, a5, a1 916; LMULMAX1-RV32-NEXT: srli a5, a1, 4 917; LMULMAX1-RV32-NEXT: add a1, a1, a5 918; LMULMAX1-RV32-NEXT: and a1, a1, a3 919; LMULMAX1-RV32-NEXT: mul a1, a1, a4 920; LMULMAX1-RV32-NEXT: srli a1, a1, 24 921; LMULMAX1-RV32-NEXT: sb a1, 21(sp) 922; LMULMAX1-RV32-NEXT: vslidedown.vi v26, v25, 4 923; LMULMAX1-RV32-NEXT: vmv.x.s a1, v26 924; LMULMAX1-RV32-NEXT: ori a1, a1, 256 925; LMULMAX1-RV32-NEXT: addi a5, a1, -1 926; LMULMAX1-RV32-NEXT: not a1, a1 927; LMULMAX1-RV32-NEXT: and a1, a1, a5 928; LMULMAX1-RV32-NEXT: srli a5, a1, 1 929; LMULMAX1-RV32-NEXT: and a5, a5, a6 930; LMULMAX1-RV32-NEXT: sub a1, a1, a5 931; LMULMAX1-RV32-NEXT: and a5, a1, a2 932; LMULMAX1-RV32-NEXT: srli a1, a1, 2 933; LMULMAX1-RV32-NEXT: and a1, a1, a2 934; LMULMAX1-RV32-NEXT: add a1, a5, a1 935; LMULMAX1-RV32-NEXT: srli a5, a1, 4 936; LMULMAX1-RV32-NEXT: add a1, a1, a5 937; LMULMAX1-RV32-NEXT: and a1, a1, a3 938; LMULMAX1-RV32-NEXT: mul a1, a1, a4 939; LMULMAX1-RV32-NEXT: srli a1, a1, 24 940; LMULMAX1-RV32-NEXT: sb a1, 20(sp) 941; LMULMAX1-RV32-NEXT: vslidedown.vi v26, v25, 3 942; LMULMAX1-RV32-NEXT: vmv.x.s a1, v26 943; LMULMAX1-RV32-NEXT: ori a1, a1, 256 944; LMULMAX1-RV32-NEXT: addi a5, a1, -1 945; LMULMAX1-RV32-NEXT: not a1, a1 946; LMULMAX1-RV32-NEXT: and a1, a1, a5 947; LMULMAX1-RV32-NEXT: srli a5, a1, 1 948; LMULMAX1-RV32-NEXT: and a5, a5, a6 949; LMULMAX1-RV32-NEXT: sub a1, a1, a5 950; LMULMAX1-RV32-NEXT: and a5, a1, a2 951; LMULMAX1-RV32-NEXT: srli a1, a1, 2 952; LMULMAX1-RV32-NEXT: and a1, a1, a2 953; LMULMAX1-RV32-NEXT: add a1, a5, a1 954; LMULMAX1-RV32-NEXT: srli a5, a1, 4 955; LMULMAX1-RV32-NEXT: add a1, a1, a5 956; LMULMAX1-RV32-NEXT: and a1, a1, a3 957; LMULMAX1-RV32-NEXT: mul a1, a1, a4 958; LMULMAX1-RV32-NEXT: srli a1, a1, 24 959; LMULMAX1-RV32-NEXT: sb a1, 19(sp) 960; LMULMAX1-RV32-NEXT: vslidedown.vi v26, v25, 2 961; LMULMAX1-RV32-NEXT: vmv.x.s a1, v26 962; LMULMAX1-RV32-NEXT: ori a1, a1, 256 963; LMULMAX1-RV32-NEXT: addi a5, a1, -1 964; LMULMAX1-RV32-NEXT: not a1, a1 965; LMULMAX1-RV32-NEXT: and a1, a1, a5 966; LMULMAX1-RV32-NEXT: srli a5, a1, 1 967; LMULMAX1-RV32-NEXT: and a5, a5, a6 968; LMULMAX1-RV32-NEXT: sub a1, a1, a5 969; LMULMAX1-RV32-NEXT: and a5, a1, a2 970; LMULMAX1-RV32-NEXT: srli a1, a1, 2 971; LMULMAX1-RV32-NEXT: and a1, a1, a2 972; LMULMAX1-RV32-NEXT: add a1, a5, a1 973; LMULMAX1-RV32-NEXT: srli a5, a1, 4 974; LMULMAX1-RV32-NEXT: add a1, a1, a5 975; LMULMAX1-RV32-NEXT: and a1, a1, a3 976; LMULMAX1-RV32-NEXT: mul a1, a1, a4 977; LMULMAX1-RV32-NEXT: srli a1, a1, 24 978; LMULMAX1-RV32-NEXT: sb a1, 18(sp) 979; LMULMAX1-RV32-NEXT: vslidedown.vi v25, v25, 1 980; LMULMAX1-RV32-NEXT: vmv.x.s a1, v25 981; LMULMAX1-RV32-NEXT: ori a1, a1, 256 982; LMULMAX1-RV32-NEXT: addi a5, a1, -1 983; LMULMAX1-RV32-NEXT: not a1, a1 984; LMULMAX1-RV32-NEXT: and a1, a1, a5 985; LMULMAX1-RV32-NEXT: srli a5, a1, 1 986; LMULMAX1-RV32-NEXT: and a5, a5, a6 987; LMULMAX1-RV32-NEXT: sub a1, a1, a5 988; LMULMAX1-RV32-NEXT: and a5, a1, a2 989; LMULMAX1-RV32-NEXT: srli a1, a1, 2 990; LMULMAX1-RV32-NEXT: and a1, a1, a2 991; LMULMAX1-RV32-NEXT: add a1, a5, a1 992; LMULMAX1-RV32-NEXT: srli a2, a1, 4 993; LMULMAX1-RV32-NEXT: add a1, a1, a2 994; LMULMAX1-RV32-NEXT: and a1, a1, a3 995; LMULMAX1-RV32-NEXT: mul a1, a1, a4 996; LMULMAX1-RV32-NEXT: srli a1, a1, 24 997; LMULMAX1-RV32-NEXT: sb a1, 17(sp) 998; LMULMAX1-RV32-NEXT: vsetivli zero, 16, e8, m1, ta, mu 999; LMULMAX1-RV32-NEXT: addi a1, sp, 16 1000; LMULMAX1-RV32-NEXT: vle8.v v25, (a1) 1001; LMULMAX1-RV32-NEXT: vse8.v v25, (a0) 1002; LMULMAX1-RV32-NEXT: addi sp, sp, 32 1003; LMULMAX1-RV32-NEXT: ret 1004; 1005; LMULMAX1-RV64-LABEL: cttz_v16i8: 1006; LMULMAX1-RV64: # %bb.0: 1007; LMULMAX1-RV64-NEXT: addi sp, sp, -32 1008; LMULMAX1-RV64-NEXT: .cfi_def_cfa_offset 32 1009; LMULMAX1-RV64-NEXT: vsetivli zero, 16, e8, m1, ta, mu 1010; LMULMAX1-RV64-NEXT: vle8.v v25, (a0) 1011; LMULMAX1-RV64-NEXT: vsetivli zero, 1, e8, m1, ta, mu 1012; LMULMAX1-RV64-NEXT: vslidedown.vi v26, v25, 15 1013; LMULMAX1-RV64-NEXT: vmv.x.s a1, v26 1014; LMULMAX1-RV64-NEXT: ori a1, a1, 256 1015; LMULMAX1-RV64-NEXT: addi a2, a1, -1 1016; LMULMAX1-RV64-NEXT: not a1, a1 1017; LMULMAX1-RV64-NEXT: and a2, a1, a2 1018; LMULMAX1-RV64-NEXT: srli a3, a2, 1 1019; LMULMAX1-RV64-NEXT: lui a1, 21845 1020; LMULMAX1-RV64-NEXT: addiw a1, a1, 1365 1021; LMULMAX1-RV64-NEXT: slli a1, a1, 12 1022; LMULMAX1-RV64-NEXT: addi a1, a1, 1365 1023; LMULMAX1-RV64-NEXT: slli a1, a1, 12 1024; LMULMAX1-RV64-NEXT: addi a1, a1, 1365 1025; LMULMAX1-RV64-NEXT: slli a1, a1, 12 1026; LMULMAX1-RV64-NEXT: addi a6, a1, 1365 1027; LMULMAX1-RV64-NEXT: and a3, a3, a6 1028; LMULMAX1-RV64-NEXT: sub a3, a2, a3 1029; LMULMAX1-RV64-NEXT: lui a2, 13107 1030; LMULMAX1-RV64-NEXT: addiw a2, a2, 819 1031; LMULMAX1-RV64-NEXT: slli a2, a2, 12 1032; LMULMAX1-RV64-NEXT: addi a2, a2, 819 1033; LMULMAX1-RV64-NEXT: slli a2, a2, 12 1034; LMULMAX1-RV64-NEXT: addi a2, a2, 819 1035; LMULMAX1-RV64-NEXT: slli a2, a2, 12 1036; LMULMAX1-RV64-NEXT: addi a2, a2, 819 1037; LMULMAX1-RV64-NEXT: and a4, a3, a2 1038; LMULMAX1-RV64-NEXT: srli a3, a3, 2 1039; LMULMAX1-RV64-NEXT: and a3, a3, a2 1040; LMULMAX1-RV64-NEXT: add a3, a4, a3 1041; LMULMAX1-RV64-NEXT: srli a4, a3, 4 1042; LMULMAX1-RV64-NEXT: add a4, a3, a4 1043; LMULMAX1-RV64-NEXT: lui a3, 3855 1044; LMULMAX1-RV64-NEXT: addiw a3, a3, 241 1045; LMULMAX1-RV64-NEXT: slli a3, a3, 12 1046; LMULMAX1-RV64-NEXT: addi a3, a3, -241 1047; LMULMAX1-RV64-NEXT: slli a3, a3, 12 1048; LMULMAX1-RV64-NEXT: addi a3, a3, 241 1049; LMULMAX1-RV64-NEXT: slli a3, a3, 12 1050; LMULMAX1-RV64-NEXT: addi a3, a3, -241 1051; LMULMAX1-RV64-NEXT: and a5, a4, a3 1052; LMULMAX1-RV64-NEXT: lui a4, 4112 1053; LMULMAX1-RV64-NEXT: addiw a4, a4, 257 1054; LMULMAX1-RV64-NEXT: slli a4, a4, 16 1055; LMULMAX1-RV64-NEXT: addi a4, a4, 257 1056; LMULMAX1-RV64-NEXT: slli a4, a4, 16 1057; LMULMAX1-RV64-NEXT: addi a4, a4, 257 1058; LMULMAX1-RV64-NEXT: mul a5, a5, a4 1059; LMULMAX1-RV64-NEXT: srli a5, a5, 56 1060; LMULMAX1-RV64-NEXT: sb a5, 31(sp) 1061; LMULMAX1-RV64-NEXT: vslidedown.vi v26, v25, 14 1062; LMULMAX1-RV64-NEXT: vmv.x.s a5, v26 1063; LMULMAX1-RV64-NEXT: ori a5, a5, 256 1064; LMULMAX1-RV64-NEXT: addi a1, a5, -1 1065; LMULMAX1-RV64-NEXT: not a5, a5 1066; LMULMAX1-RV64-NEXT: and a1, a5, a1 1067; LMULMAX1-RV64-NEXT: srli a5, a1, 1 1068; LMULMAX1-RV64-NEXT: and a5, a5, a6 1069; LMULMAX1-RV64-NEXT: sub a1, a1, a5 1070; LMULMAX1-RV64-NEXT: and a5, a1, a2 1071; LMULMAX1-RV64-NEXT: srli a1, a1, 2 1072; LMULMAX1-RV64-NEXT: and a1, a1, a2 1073; LMULMAX1-RV64-NEXT: add a1, a5, a1 1074; LMULMAX1-RV64-NEXT: srli a5, a1, 4 1075; LMULMAX1-RV64-NEXT: add a1, a1, a5 1076; LMULMAX1-RV64-NEXT: and a1, a1, a3 1077; LMULMAX1-RV64-NEXT: mul a1, a1, a4 1078; LMULMAX1-RV64-NEXT: srli a1, a1, 56 1079; LMULMAX1-RV64-NEXT: sb a1, 30(sp) 1080; LMULMAX1-RV64-NEXT: vslidedown.vi v26, v25, 13 1081; LMULMAX1-RV64-NEXT: vmv.x.s a1, v26 1082; LMULMAX1-RV64-NEXT: ori a1, a1, 256 1083; LMULMAX1-RV64-NEXT: addi a5, a1, -1 1084; LMULMAX1-RV64-NEXT: not a1, a1 1085; LMULMAX1-RV64-NEXT: and a1, a1, a5 1086; LMULMAX1-RV64-NEXT: srli a5, a1, 1 1087; LMULMAX1-RV64-NEXT: and a5, a5, a6 1088; LMULMAX1-RV64-NEXT: sub a1, a1, a5 1089; LMULMAX1-RV64-NEXT: and a5, a1, a2 1090; LMULMAX1-RV64-NEXT: srli a1, a1, 2 1091; LMULMAX1-RV64-NEXT: and a1, a1, a2 1092; LMULMAX1-RV64-NEXT: add a1, a5, a1 1093; LMULMAX1-RV64-NEXT: srli a5, a1, 4 1094; LMULMAX1-RV64-NEXT: add a1, a1, a5 1095; LMULMAX1-RV64-NEXT: and a1, a1, a3 1096; LMULMAX1-RV64-NEXT: mul a1, a1, a4 1097; LMULMAX1-RV64-NEXT: srli a1, a1, 56 1098; LMULMAX1-RV64-NEXT: sb a1, 29(sp) 1099; LMULMAX1-RV64-NEXT: vslidedown.vi v26, v25, 12 1100; LMULMAX1-RV64-NEXT: vmv.x.s a1, v26 1101; LMULMAX1-RV64-NEXT: ori a1, a1, 256 1102; LMULMAX1-RV64-NEXT: addi a5, a1, -1 1103; LMULMAX1-RV64-NEXT: not a1, a1 1104; LMULMAX1-RV64-NEXT: and a1, a1, a5 1105; LMULMAX1-RV64-NEXT: srli a5, a1, 1 1106; LMULMAX1-RV64-NEXT: and a5, a5, a6 1107; LMULMAX1-RV64-NEXT: sub a1, a1, a5 1108; LMULMAX1-RV64-NEXT: and a5, a1, a2 1109; LMULMAX1-RV64-NEXT: srli a1, a1, 2 1110; LMULMAX1-RV64-NEXT: and a1, a1, a2 1111; LMULMAX1-RV64-NEXT: add a1, a5, a1 1112; LMULMAX1-RV64-NEXT: srli a5, a1, 4 1113; LMULMAX1-RV64-NEXT: add a1, a1, a5 1114; LMULMAX1-RV64-NEXT: and a1, a1, a3 1115; LMULMAX1-RV64-NEXT: mul a1, a1, a4 1116; LMULMAX1-RV64-NEXT: srli a1, a1, 56 1117; LMULMAX1-RV64-NEXT: sb a1, 28(sp) 1118; LMULMAX1-RV64-NEXT: vslidedown.vi v26, v25, 11 1119; LMULMAX1-RV64-NEXT: vmv.x.s a1, v26 1120; LMULMAX1-RV64-NEXT: ori a1, a1, 256 1121; LMULMAX1-RV64-NEXT: addi a5, a1, -1 1122; LMULMAX1-RV64-NEXT: not a1, a1 1123; LMULMAX1-RV64-NEXT: and a1, a1, a5 1124; LMULMAX1-RV64-NEXT: srli a5, a1, 1 1125; LMULMAX1-RV64-NEXT: and a5, a5, a6 1126; LMULMAX1-RV64-NEXT: sub a1, a1, a5 1127; LMULMAX1-RV64-NEXT: and a5, a1, a2 1128; LMULMAX1-RV64-NEXT: srli a1, a1, 2 1129; LMULMAX1-RV64-NEXT: and a1, a1, a2 1130; LMULMAX1-RV64-NEXT: add a1, a5, a1 1131; LMULMAX1-RV64-NEXT: srli a5, a1, 4 1132; LMULMAX1-RV64-NEXT: add a1, a1, a5 1133; LMULMAX1-RV64-NEXT: and a1, a1, a3 1134; LMULMAX1-RV64-NEXT: mul a1, a1, a4 1135; LMULMAX1-RV64-NEXT: srli a1, a1, 56 1136; LMULMAX1-RV64-NEXT: sb a1, 27(sp) 1137; LMULMAX1-RV64-NEXT: vslidedown.vi v26, v25, 10 1138; LMULMAX1-RV64-NEXT: vmv.x.s a1, v26 1139; LMULMAX1-RV64-NEXT: ori a1, a1, 256 1140; LMULMAX1-RV64-NEXT: addi a5, a1, -1 1141; LMULMAX1-RV64-NEXT: not a1, a1 1142; LMULMAX1-RV64-NEXT: and a1, a1, a5 1143; LMULMAX1-RV64-NEXT: srli a5, a1, 1 1144; LMULMAX1-RV64-NEXT: and a5, a5, a6 1145; LMULMAX1-RV64-NEXT: sub a1, a1, a5 1146; LMULMAX1-RV64-NEXT: and a5, a1, a2 1147; LMULMAX1-RV64-NEXT: srli a1, a1, 2 1148; LMULMAX1-RV64-NEXT: and a1, a1, a2 1149; LMULMAX1-RV64-NEXT: add a1, a5, a1 1150; LMULMAX1-RV64-NEXT: srli a5, a1, 4 1151; LMULMAX1-RV64-NEXT: add a1, a1, a5 1152; LMULMAX1-RV64-NEXT: and a1, a1, a3 1153; LMULMAX1-RV64-NEXT: mul a1, a1, a4 1154; LMULMAX1-RV64-NEXT: srli a1, a1, 56 1155; LMULMAX1-RV64-NEXT: sb a1, 26(sp) 1156; LMULMAX1-RV64-NEXT: vslidedown.vi v26, v25, 9 1157; LMULMAX1-RV64-NEXT: vmv.x.s a1, v26 1158; LMULMAX1-RV64-NEXT: ori a1, a1, 256 1159; LMULMAX1-RV64-NEXT: addi a5, a1, -1 1160; LMULMAX1-RV64-NEXT: not a1, a1 1161; LMULMAX1-RV64-NEXT: and a1, a1, a5 1162; LMULMAX1-RV64-NEXT: srli a5, a1, 1 1163; LMULMAX1-RV64-NEXT: and a5, a5, a6 1164; LMULMAX1-RV64-NEXT: sub a1, a1, a5 1165; LMULMAX1-RV64-NEXT: and a5, a1, a2 1166; LMULMAX1-RV64-NEXT: srli a1, a1, 2 1167; LMULMAX1-RV64-NEXT: and a1, a1, a2 1168; LMULMAX1-RV64-NEXT: add a1, a5, a1 1169; LMULMAX1-RV64-NEXT: srli a5, a1, 4 1170; LMULMAX1-RV64-NEXT: add a1, a1, a5 1171; LMULMAX1-RV64-NEXT: and a1, a1, a3 1172; LMULMAX1-RV64-NEXT: mul a1, a1, a4 1173; LMULMAX1-RV64-NEXT: srli a1, a1, 56 1174; LMULMAX1-RV64-NEXT: sb a1, 25(sp) 1175; LMULMAX1-RV64-NEXT: vslidedown.vi v26, v25, 8 1176; LMULMAX1-RV64-NEXT: vmv.x.s a1, v26 1177; LMULMAX1-RV64-NEXT: ori a1, a1, 256 1178; LMULMAX1-RV64-NEXT: addi a5, a1, -1 1179; LMULMAX1-RV64-NEXT: not a1, a1 1180; LMULMAX1-RV64-NEXT: and a1, a1, a5 1181; LMULMAX1-RV64-NEXT: srli a5, a1, 1 1182; LMULMAX1-RV64-NEXT: and a5, a5, a6 1183; LMULMAX1-RV64-NEXT: sub a1, a1, a5 1184; LMULMAX1-RV64-NEXT: and a5, a1, a2 1185; LMULMAX1-RV64-NEXT: srli a1, a1, 2 1186; LMULMAX1-RV64-NEXT: and a1, a1, a2 1187; LMULMAX1-RV64-NEXT: add a1, a5, a1 1188; LMULMAX1-RV64-NEXT: srli a5, a1, 4 1189; LMULMAX1-RV64-NEXT: add a1, a1, a5 1190; LMULMAX1-RV64-NEXT: and a1, a1, a3 1191; LMULMAX1-RV64-NEXT: mul a1, a1, a4 1192; LMULMAX1-RV64-NEXT: srli a1, a1, 56 1193; LMULMAX1-RV64-NEXT: sb a1, 24(sp) 1194; LMULMAX1-RV64-NEXT: vslidedown.vi v26, v25, 7 1195; LMULMAX1-RV64-NEXT: vmv.x.s a1, v26 1196; LMULMAX1-RV64-NEXT: ori a1, a1, 256 1197; LMULMAX1-RV64-NEXT: addi a5, a1, -1 1198; LMULMAX1-RV64-NEXT: not a1, a1 1199; LMULMAX1-RV64-NEXT: and a1, a1, a5 1200; LMULMAX1-RV64-NEXT: srli a5, a1, 1 1201; LMULMAX1-RV64-NEXT: and a5, a5, a6 1202; LMULMAX1-RV64-NEXT: sub a1, a1, a5 1203; LMULMAX1-RV64-NEXT: and a5, a1, a2 1204; LMULMAX1-RV64-NEXT: srli a1, a1, 2 1205; LMULMAX1-RV64-NEXT: and a1, a1, a2 1206; LMULMAX1-RV64-NEXT: add a1, a5, a1 1207; LMULMAX1-RV64-NEXT: srli a5, a1, 4 1208; LMULMAX1-RV64-NEXT: add a1, a1, a5 1209; LMULMAX1-RV64-NEXT: and a1, a1, a3 1210; LMULMAX1-RV64-NEXT: mul a1, a1, a4 1211; LMULMAX1-RV64-NEXT: srli a1, a1, 56 1212; LMULMAX1-RV64-NEXT: sb a1, 23(sp) 1213; LMULMAX1-RV64-NEXT: vslidedown.vi v26, v25, 6 1214; LMULMAX1-RV64-NEXT: vmv.x.s a1, v26 1215; LMULMAX1-RV64-NEXT: ori a1, a1, 256 1216; LMULMAX1-RV64-NEXT: addi a5, a1, -1 1217; LMULMAX1-RV64-NEXT: not a1, a1 1218; LMULMAX1-RV64-NEXT: and a1, a1, a5 1219; LMULMAX1-RV64-NEXT: srli a5, a1, 1 1220; LMULMAX1-RV64-NEXT: and a5, a5, a6 1221; LMULMAX1-RV64-NEXT: sub a1, a1, a5 1222; LMULMAX1-RV64-NEXT: and a5, a1, a2 1223; LMULMAX1-RV64-NEXT: srli a1, a1, 2 1224; LMULMAX1-RV64-NEXT: and a1, a1, a2 1225; LMULMAX1-RV64-NEXT: add a1, a5, a1 1226; LMULMAX1-RV64-NEXT: srli a5, a1, 4 1227; LMULMAX1-RV64-NEXT: add a1, a1, a5 1228; LMULMAX1-RV64-NEXT: and a1, a1, a3 1229; LMULMAX1-RV64-NEXT: mul a1, a1, a4 1230; LMULMAX1-RV64-NEXT: srli a1, a1, 56 1231; LMULMAX1-RV64-NEXT: sb a1, 22(sp) 1232; LMULMAX1-RV64-NEXT: vslidedown.vi v26, v25, 5 1233; LMULMAX1-RV64-NEXT: vmv.x.s a1, v26 1234; LMULMAX1-RV64-NEXT: ori a1, a1, 256 1235; LMULMAX1-RV64-NEXT: addi a5, a1, -1 1236; LMULMAX1-RV64-NEXT: not a1, a1 1237; LMULMAX1-RV64-NEXT: and a1, a1, a5 1238; LMULMAX1-RV64-NEXT: srli a5, a1, 1 1239; LMULMAX1-RV64-NEXT: and a5, a5, a6 1240; LMULMAX1-RV64-NEXT: sub a1, a1, a5 1241; LMULMAX1-RV64-NEXT: and a5, a1, a2 1242; LMULMAX1-RV64-NEXT: srli a1, a1, 2 1243; LMULMAX1-RV64-NEXT: and a1, a1, a2 1244; LMULMAX1-RV64-NEXT: add a1, a5, a1 1245; LMULMAX1-RV64-NEXT: srli a5, a1, 4 1246; LMULMAX1-RV64-NEXT: add a1, a1, a5 1247; LMULMAX1-RV64-NEXT: and a1, a1, a3 1248; LMULMAX1-RV64-NEXT: mul a1, a1, a4 1249; LMULMAX1-RV64-NEXT: srli a1, a1, 56 1250; LMULMAX1-RV64-NEXT: sb a1, 21(sp) 1251; LMULMAX1-RV64-NEXT: vslidedown.vi v26, v25, 4 1252; LMULMAX1-RV64-NEXT: vmv.x.s a1, v26 1253; LMULMAX1-RV64-NEXT: ori a1, a1, 256 1254; LMULMAX1-RV64-NEXT: addi a5, a1, -1 1255; LMULMAX1-RV64-NEXT: not a1, a1 1256; LMULMAX1-RV64-NEXT: and a1, a1, a5 1257; LMULMAX1-RV64-NEXT: srli a5, a1, 1 1258; LMULMAX1-RV64-NEXT: and a5, a5, a6 1259; LMULMAX1-RV64-NEXT: sub a1, a1, a5 1260; LMULMAX1-RV64-NEXT: and a5, a1, a2 1261; LMULMAX1-RV64-NEXT: srli a1, a1, 2 1262; LMULMAX1-RV64-NEXT: and a1, a1, a2 1263; LMULMAX1-RV64-NEXT: add a1, a5, a1 1264; LMULMAX1-RV64-NEXT: srli a5, a1, 4 1265; LMULMAX1-RV64-NEXT: add a1, a1, a5 1266; LMULMAX1-RV64-NEXT: and a1, a1, a3 1267; LMULMAX1-RV64-NEXT: mul a1, a1, a4 1268; LMULMAX1-RV64-NEXT: srli a1, a1, 56 1269; LMULMAX1-RV64-NEXT: sb a1, 20(sp) 1270; LMULMAX1-RV64-NEXT: vslidedown.vi v26, v25, 3 1271; LMULMAX1-RV64-NEXT: vmv.x.s a1, v26 1272; LMULMAX1-RV64-NEXT: ori a1, a1, 256 1273; LMULMAX1-RV64-NEXT: addi a5, a1, -1 1274; LMULMAX1-RV64-NEXT: not a1, a1 1275; LMULMAX1-RV64-NEXT: and a1, a1, a5 1276; LMULMAX1-RV64-NEXT: srli a5, a1, 1 1277; LMULMAX1-RV64-NEXT: and a5, a5, a6 1278; LMULMAX1-RV64-NEXT: sub a1, a1, a5 1279; LMULMAX1-RV64-NEXT: and a5, a1, a2 1280; LMULMAX1-RV64-NEXT: srli a1, a1, 2 1281; LMULMAX1-RV64-NEXT: and a1, a1, a2 1282; LMULMAX1-RV64-NEXT: add a1, a5, a1 1283; LMULMAX1-RV64-NEXT: srli a5, a1, 4 1284; LMULMAX1-RV64-NEXT: add a1, a1, a5 1285; LMULMAX1-RV64-NEXT: and a1, a1, a3 1286; LMULMAX1-RV64-NEXT: mul a1, a1, a4 1287; LMULMAX1-RV64-NEXT: srli a1, a1, 56 1288; LMULMAX1-RV64-NEXT: sb a1, 19(sp) 1289; LMULMAX1-RV64-NEXT: vslidedown.vi v26, v25, 2 1290; LMULMAX1-RV64-NEXT: vmv.x.s a1, v26 1291; LMULMAX1-RV64-NEXT: ori a1, a1, 256 1292; LMULMAX1-RV64-NEXT: addi a5, a1, -1 1293; LMULMAX1-RV64-NEXT: not a1, a1 1294; LMULMAX1-RV64-NEXT: and a1, a1, a5 1295; LMULMAX1-RV64-NEXT: srli a5, a1, 1 1296; LMULMAX1-RV64-NEXT: and a5, a5, a6 1297; LMULMAX1-RV64-NEXT: sub a1, a1, a5 1298; LMULMAX1-RV64-NEXT: and a5, a1, a2 1299; LMULMAX1-RV64-NEXT: srli a1, a1, 2 1300; LMULMAX1-RV64-NEXT: and a1, a1, a2 1301; LMULMAX1-RV64-NEXT: add a1, a5, a1 1302; LMULMAX1-RV64-NEXT: srli a5, a1, 4 1303; LMULMAX1-RV64-NEXT: add a1, a1, a5 1304; LMULMAX1-RV64-NEXT: and a1, a1, a3 1305; LMULMAX1-RV64-NEXT: mul a1, a1, a4 1306; LMULMAX1-RV64-NEXT: srli a1, a1, 56 1307; LMULMAX1-RV64-NEXT: sb a1, 18(sp) 1308; LMULMAX1-RV64-NEXT: vslidedown.vi v26, v25, 1 1309; LMULMAX1-RV64-NEXT: vmv.x.s a1, v26 1310; LMULMAX1-RV64-NEXT: ori a1, a1, 256 1311; LMULMAX1-RV64-NEXT: addi a5, a1, -1 1312; LMULMAX1-RV64-NEXT: not a1, a1 1313; LMULMAX1-RV64-NEXT: and a1, a1, a5 1314; LMULMAX1-RV64-NEXT: srli a5, a1, 1 1315; LMULMAX1-RV64-NEXT: and a5, a5, a6 1316; LMULMAX1-RV64-NEXT: sub a1, a1, a5 1317; LMULMAX1-RV64-NEXT: and a5, a1, a2 1318; LMULMAX1-RV64-NEXT: srli a1, a1, 2 1319; LMULMAX1-RV64-NEXT: and a1, a1, a2 1320; LMULMAX1-RV64-NEXT: add a1, a5, a1 1321; LMULMAX1-RV64-NEXT: srli a5, a1, 4 1322; LMULMAX1-RV64-NEXT: add a1, a1, a5 1323; LMULMAX1-RV64-NEXT: and a1, a1, a3 1324; LMULMAX1-RV64-NEXT: mul a1, a1, a4 1325; LMULMAX1-RV64-NEXT: srli a1, a1, 56 1326; LMULMAX1-RV64-NEXT: sb a1, 17(sp) 1327; LMULMAX1-RV64-NEXT: vmv.x.s a1, v25 1328; LMULMAX1-RV64-NEXT: ori a1, a1, 256 1329; LMULMAX1-RV64-NEXT: addi a5, a1, -1 1330; LMULMAX1-RV64-NEXT: not a1, a1 1331; LMULMAX1-RV64-NEXT: and a1, a1, a5 1332; LMULMAX1-RV64-NEXT: srli a5, a1, 1 1333; LMULMAX1-RV64-NEXT: and a5, a5, a6 1334; LMULMAX1-RV64-NEXT: sub a1, a1, a5 1335; LMULMAX1-RV64-NEXT: and a5, a1, a2 1336; LMULMAX1-RV64-NEXT: srli a1, a1, 2 1337; LMULMAX1-RV64-NEXT: and a1, a1, a2 1338; LMULMAX1-RV64-NEXT: add a1, a5, a1 1339; LMULMAX1-RV64-NEXT: srli a2, a1, 4 1340; LMULMAX1-RV64-NEXT: add a1, a1, a2 1341; LMULMAX1-RV64-NEXT: and a1, a1, a3 1342; LMULMAX1-RV64-NEXT: mul a1, a1, a4 1343; LMULMAX1-RV64-NEXT: srli a1, a1, 56 1344; LMULMAX1-RV64-NEXT: sb a1, 16(sp) 1345; LMULMAX1-RV64-NEXT: vsetivli zero, 16, e8, m1, ta, mu 1346; LMULMAX1-RV64-NEXT: addi a1, sp, 16 1347; LMULMAX1-RV64-NEXT: vle8.v v25, (a1) 1348; LMULMAX1-RV64-NEXT: vse8.v v25, (a0) 1349; LMULMAX1-RV64-NEXT: addi sp, sp, 32 1350; LMULMAX1-RV64-NEXT: ret 1351 %a = load <16 x i8>, <16 x i8>* %x 1352 %b = load <16 x i8>, <16 x i8>* %y 1353 %c = call <16 x i8> @llvm.cttz.v16i8(<16 x i8> %a, i1 false) 1354 store <16 x i8> %c, <16 x i8>* %x 1355 ret void 1356} 1357declare <16 x i8> @llvm.cttz.v16i8(<16 x i8>, i1) 1358 1359define void @cttz_v8i16(<8 x i16>* %x, <8 x i16>* %y) { 1360; LMULMAX2-RV32-LABEL: cttz_v8i16: 1361; LMULMAX2-RV32: # %bb.0: 1362; LMULMAX2-RV32-NEXT: addi sp, sp, -32 1363; LMULMAX2-RV32-NEXT: .cfi_def_cfa_offset 32 1364; LMULMAX2-RV32-NEXT: vsetivli zero, 8, e16, m1, ta, mu 1365; LMULMAX2-RV32-NEXT: vle16.v v25, (a0) 1366; LMULMAX2-RV32-NEXT: vmv.x.s a2, v25 1367; LMULMAX2-RV32-NEXT: lui a6, 16 1368; LMULMAX2-RV32-NEXT: or a2, a2, a6 1369; LMULMAX2-RV32-NEXT: addi a3, a2, -1 1370; LMULMAX2-RV32-NEXT: not a2, a2 1371; LMULMAX2-RV32-NEXT: and a3, a2, a3 1372; LMULMAX2-RV32-NEXT: srli a4, a3, 1 1373; LMULMAX2-RV32-NEXT: lui a2, 349525 1374; LMULMAX2-RV32-NEXT: addi a7, a2, 1365 1375; LMULMAX2-RV32-NEXT: and a4, a4, a7 1376; LMULMAX2-RV32-NEXT: sub a4, a3, a4 1377; LMULMAX2-RV32-NEXT: lui a3, 209715 1378; LMULMAX2-RV32-NEXT: addi a3, a3, 819 1379; LMULMAX2-RV32-NEXT: and a5, a4, a3 1380; LMULMAX2-RV32-NEXT: srli a4, a4, 2 1381; LMULMAX2-RV32-NEXT: and a4, a4, a3 1382; LMULMAX2-RV32-NEXT: add a4, a5, a4 1383; LMULMAX2-RV32-NEXT: srli a5, a4, 4 1384; LMULMAX2-RV32-NEXT: add a5, a4, a5 1385; LMULMAX2-RV32-NEXT: lui a4, 61681 1386; LMULMAX2-RV32-NEXT: addi a4, a4, -241 1387; LMULMAX2-RV32-NEXT: and a1, a5, a4 1388; LMULMAX2-RV32-NEXT: lui a5, 4112 1389; LMULMAX2-RV32-NEXT: addi a5, a5, 257 1390; LMULMAX2-RV32-NEXT: mul a1, a1, a5 1391; LMULMAX2-RV32-NEXT: srli a1, a1, 24 1392; LMULMAX2-RV32-NEXT: sh a1, 16(sp) 1393; LMULMAX2-RV32-NEXT: vsetivli zero, 1, e16, m1, ta, mu 1394; LMULMAX2-RV32-NEXT: vslidedown.vi v26, v25, 7 1395; LMULMAX2-RV32-NEXT: vmv.x.s a1, v26 1396; LMULMAX2-RV32-NEXT: or a1, a1, a6 1397; LMULMAX2-RV32-NEXT: addi a2, a1, -1 1398; LMULMAX2-RV32-NEXT: not a1, a1 1399; LMULMAX2-RV32-NEXT: and a1, a1, a2 1400; LMULMAX2-RV32-NEXT: srli a2, a1, 1 1401; LMULMAX2-RV32-NEXT: and a2, a2, a7 1402; LMULMAX2-RV32-NEXT: sub a1, a1, a2 1403; LMULMAX2-RV32-NEXT: and a2, a1, a3 1404; LMULMAX2-RV32-NEXT: srli a1, a1, 2 1405; LMULMAX2-RV32-NEXT: and a1, a1, a3 1406; LMULMAX2-RV32-NEXT: add a1, a2, a1 1407; LMULMAX2-RV32-NEXT: srli a2, a1, 4 1408; LMULMAX2-RV32-NEXT: add a1, a1, a2 1409; LMULMAX2-RV32-NEXT: and a1, a1, a4 1410; LMULMAX2-RV32-NEXT: mul a1, a1, a5 1411; LMULMAX2-RV32-NEXT: srli a1, a1, 24 1412; LMULMAX2-RV32-NEXT: sh a1, 30(sp) 1413; LMULMAX2-RV32-NEXT: vslidedown.vi v26, v25, 6 1414; LMULMAX2-RV32-NEXT: vmv.x.s a1, v26 1415; LMULMAX2-RV32-NEXT: or a1, a1, a6 1416; LMULMAX2-RV32-NEXT: addi a2, a1, -1 1417; LMULMAX2-RV32-NEXT: not a1, a1 1418; LMULMAX2-RV32-NEXT: and a1, a1, a2 1419; LMULMAX2-RV32-NEXT: srli a2, a1, 1 1420; LMULMAX2-RV32-NEXT: and a2, a2, a7 1421; LMULMAX2-RV32-NEXT: sub a1, a1, a2 1422; LMULMAX2-RV32-NEXT: and a2, a1, a3 1423; LMULMAX2-RV32-NEXT: srli a1, a1, 2 1424; LMULMAX2-RV32-NEXT: and a1, a1, a3 1425; LMULMAX2-RV32-NEXT: add a1, a2, a1 1426; LMULMAX2-RV32-NEXT: srli a2, a1, 4 1427; LMULMAX2-RV32-NEXT: add a1, a1, a2 1428; LMULMAX2-RV32-NEXT: and a1, a1, a4 1429; LMULMAX2-RV32-NEXT: mul a1, a1, a5 1430; LMULMAX2-RV32-NEXT: srli a1, a1, 24 1431; LMULMAX2-RV32-NEXT: sh a1, 28(sp) 1432; LMULMAX2-RV32-NEXT: vslidedown.vi v26, v25, 5 1433; LMULMAX2-RV32-NEXT: vmv.x.s a1, v26 1434; LMULMAX2-RV32-NEXT: or a1, a1, a6 1435; LMULMAX2-RV32-NEXT: addi a2, a1, -1 1436; LMULMAX2-RV32-NEXT: not a1, a1 1437; LMULMAX2-RV32-NEXT: and a1, a1, a2 1438; LMULMAX2-RV32-NEXT: srli a2, a1, 1 1439; LMULMAX2-RV32-NEXT: and a2, a2, a7 1440; LMULMAX2-RV32-NEXT: sub a1, a1, a2 1441; LMULMAX2-RV32-NEXT: and a2, a1, a3 1442; LMULMAX2-RV32-NEXT: srli a1, a1, 2 1443; LMULMAX2-RV32-NEXT: and a1, a1, a3 1444; LMULMAX2-RV32-NEXT: add a1, a2, a1 1445; LMULMAX2-RV32-NEXT: srli a2, a1, 4 1446; LMULMAX2-RV32-NEXT: add a1, a1, a2 1447; LMULMAX2-RV32-NEXT: and a1, a1, a4 1448; LMULMAX2-RV32-NEXT: mul a1, a1, a5 1449; LMULMAX2-RV32-NEXT: srli a1, a1, 24 1450; LMULMAX2-RV32-NEXT: sh a1, 26(sp) 1451; LMULMAX2-RV32-NEXT: vslidedown.vi v26, v25, 4 1452; LMULMAX2-RV32-NEXT: vmv.x.s a1, v26 1453; LMULMAX2-RV32-NEXT: or a1, a1, a6 1454; LMULMAX2-RV32-NEXT: addi a2, a1, -1 1455; LMULMAX2-RV32-NEXT: not a1, a1 1456; LMULMAX2-RV32-NEXT: and a1, a1, a2 1457; LMULMAX2-RV32-NEXT: srli a2, a1, 1 1458; LMULMAX2-RV32-NEXT: and a2, a2, a7 1459; LMULMAX2-RV32-NEXT: sub a1, a1, a2 1460; LMULMAX2-RV32-NEXT: and a2, a1, a3 1461; LMULMAX2-RV32-NEXT: srli a1, a1, 2 1462; LMULMAX2-RV32-NEXT: and a1, a1, a3 1463; LMULMAX2-RV32-NEXT: add a1, a2, a1 1464; LMULMAX2-RV32-NEXT: srli a2, a1, 4 1465; LMULMAX2-RV32-NEXT: add a1, a1, a2 1466; LMULMAX2-RV32-NEXT: and a1, a1, a4 1467; LMULMAX2-RV32-NEXT: mul a1, a1, a5 1468; LMULMAX2-RV32-NEXT: srli a1, a1, 24 1469; LMULMAX2-RV32-NEXT: sh a1, 24(sp) 1470; LMULMAX2-RV32-NEXT: vslidedown.vi v26, v25, 3 1471; LMULMAX2-RV32-NEXT: vmv.x.s a1, v26 1472; LMULMAX2-RV32-NEXT: or a1, a1, a6 1473; LMULMAX2-RV32-NEXT: addi a2, a1, -1 1474; LMULMAX2-RV32-NEXT: not a1, a1 1475; LMULMAX2-RV32-NEXT: and a1, a1, a2 1476; LMULMAX2-RV32-NEXT: srli a2, a1, 1 1477; LMULMAX2-RV32-NEXT: and a2, a2, a7 1478; LMULMAX2-RV32-NEXT: sub a1, a1, a2 1479; LMULMAX2-RV32-NEXT: and a2, a1, a3 1480; LMULMAX2-RV32-NEXT: srli a1, a1, 2 1481; LMULMAX2-RV32-NEXT: and a1, a1, a3 1482; LMULMAX2-RV32-NEXT: add a1, a2, a1 1483; LMULMAX2-RV32-NEXT: srli a2, a1, 4 1484; LMULMAX2-RV32-NEXT: add a1, a1, a2 1485; LMULMAX2-RV32-NEXT: and a1, a1, a4 1486; LMULMAX2-RV32-NEXT: mul a1, a1, a5 1487; LMULMAX2-RV32-NEXT: srli a1, a1, 24 1488; LMULMAX2-RV32-NEXT: sh a1, 22(sp) 1489; LMULMAX2-RV32-NEXT: vslidedown.vi v26, v25, 2 1490; LMULMAX2-RV32-NEXT: vmv.x.s a1, v26 1491; LMULMAX2-RV32-NEXT: or a1, a1, a6 1492; LMULMAX2-RV32-NEXT: addi a2, a1, -1 1493; LMULMAX2-RV32-NEXT: not a1, a1 1494; LMULMAX2-RV32-NEXT: and a1, a1, a2 1495; LMULMAX2-RV32-NEXT: srli a2, a1, 1 1496; LMULMAX2-RV32-NEXT: and a2, a2, a7 1497; LMULMAX2-RV32-NEXT: sub a1, a1, a2 1498; LMULMAX2-RV32-NEXT: and a2, a1, a3 1499; LMULMAX2-RV32-NEXT: srli a1, a1, 2 1500; LMULMAX2-RV32-NEXT: and a1, a1, a3 1501; LMULMAX2-RV32-NEXT: add a1, a2, a1 1502; LMULMAX2-RV32-NEXT: srli a2, a1, 4 1503; LMULMAX2-RV32-NEXT: add a1, a1, a2 1504; LMULMAX2-RV32-NEXT: and a1, a1, a4 1505; LMULMAX2-RV32-NEXT: mul a1, a1, a5 1506; LMULMAX2-RV32-NEXT: srli a1, a1, 24 1507; LMULMAX2-RV32-NEXT: sh a1, 20(sp) 1508; LMULMAX2-RV32-NEXT: vslidedown.vi v25, v25, 1 1509; LMULMAX2-RV32-NEXT: vmv.x.s a1, v25 1510; LMULMAX2-RV32-NEXT: or a1, a1, a6 1511; LMULMAX2-RV32-NEXT: addi a2, a1, -1 1512; LMULMAX2-RV32-NEXT: not a1, a1 1513; LMULMAX2-RV32-NEXT: and a1, a1, a2 1514; LMULMAX2-RV32-NEXT: srli a2, a1, 1 1515; LMULMAX2-RV32-NEXT: and a2, a2, a7 1516; LMULMAX2-RV32-NEXT: sub a1, a1, a2 1517; LMULMAX2-RV32-NEXT: and a2, a1, a3 1518; LMULMAX2-RV32-NEXT: srli a1, a1, 2 1519; LMULMAX2-RV32-NEXT: and a1, a1, a3 1520; LMULMAX2-RV32-NEXT: add a1, a2, a1 1521; LMULMAX2-RV32-NEXT: srli a2, a1, 4 1522; LMULMAX2-RV32-NEXT: add a1, a1, a2 1523; LMULMAX2-RV32-NEXT: and a1, a1, a4 1524; LMULMAX2-RV32-NEXT: mul a1, a1, a5 1525; LMULMAX2-RV32-NEXT: srli a1, a1, 24 1526; LMULMAX2-RV32-NEXT: sh a1, 18(sp) 1527; LMULMAX2-RV32-NEXT: vsetivli zero, 8, e16, m1, ta, mu 1528; LMULMAX2-RV32-NEXT: addi a1, sp, 16 1529; LMULMAX2-RV32-NEXT: vle16.v v25, (a1) 1530; LMULMAX2-RV32-NEXT: vse16.v v25, (a0) 1531; LMULMAX2-RV32-NEXT: addi sp, sp, 32 1532; LMULMAX2-RV32-NEXT: ret 1533; 1534; LMULMAX2-RV64-LABEL: cttz_v8i16: 1535; LMULMAX2-RV64: # %bb.0: 1536; LMULMAX2-RV64-NEXT: addi sp, sp, -32 1537; LMULMAX2-RV64-NEXT: .cfi_def_cfa_offset 32 1538; LMULMAX2-RV64-NEXT: vsetivli zero, 8, e16, m1, ta, mu 1539; LMULMAX2-RV64-NEXT: vle16.v v25, (a0) 1540; LMULMAX2-RV64-NEXT: vsetivli zero, 1, e16, m1, ta, mu 1541; LMULMAX2-RV64-NEXT: vslidedown.vi v26, v25, 7 1542; LMULMAX2-RV64-NEXT: vmv.x.s a2, v26 1543; LMULMAX2-RV64-NEXT: lui a6, 16 1544; LMULMAX2-RV64-NEXT: or a2, a2, a6 1545; LMULMAX2-RV64-NEXT: addi a3, a2, -1 1546; LMULMAX2-RV64-NEXT: not a2, a2 1547; LMULMAX2-RV64-NEXT: and a3, a2, a3 1548; LMULMAX2-RV64-NEXT: srli a4, a3, 1 1549; LMULMAX2-RV64-NEXT: lui a2, 21845 1550; LMULMAX2-RV64-NEXT: addiw a2, a2, 1365 1551; LMULMAX2-RV64-NEXT: slli a2, a2, 12 1552; LMULMAX2-RV64-NEXT: addi a2, a2, 1365 1553; LMULMAX2-RV64-NEXT: slli a2, a2, 12 1554; LMULMAX2-RV64-NEXT: addi a2, a2, 1365 1555; LMULMAX2-RV64-NEXT: slli a2, a2, 12 1556; LMULMAX2-RV64-NEXT: addi a7, a2, 1365 1557; LMULMAX2-RV64-NEXT: and a4, a4, a7 1558; LMULMAX2-RV64-NEXT: sub a4, a3, a4 1559; LMULMAX2-RV64-NEXT: lui a3, 13107 1560; LMULMAX2-RV64-NEXT: addiw a3, a3, 819 1561; LMULMAX2-RV64-NEXT: slli a3, a3, 12 1562; LMULMAX2-RV64-NEXT: addi a3, a3, 819 1563; LMULMAX2-RV64-NEXT: slli a3, a3, 12 1564; LMULMAX2-RV64-NEXT: addi a3, a3, 819 1565; LMULMAX2-RV64-NEXT: slli a3, a3, 12 1566; LMULMAX2-RV64-NEXT: addi a3, a3, 819 1567; LMULMAX2-RV64-NEXT: and a5, a4, a3 1568; LMULMAX2-RV64-NEXT: srli a4, a4, 2 1569; LMULMAX2-RV64-NEXT: and a4, a4, a3 1570; LMULMAX2-RV64-NEXT: add a4, a5, a4 1571; LMULMAX2-RV64-NEXT: srli a5, a4, 4 1572; LMULMAX2-RV64-NEXT: add a5, a4, a5 1573; LMULMAX2-RV64-NEXT: lui a4, 3855 1574; LMULMAX2-RV64-NEXT: addiw a4, a4, 241 1575; LMULMAX2-RV64-NEXT: slli a4, a4, 12 1576; LMULMAX2-RV64-NEXT: addi a4, a4, -241 1577; LMULMAX2-RV64-NEXT: slli a4, a4, 12 1578; LMULMAX2-RV64-NEXT: addi a4, a4, 241 1579; LMULMAX2-RV64-NEXT: slli a4, a4, 12 1580; LMULMAX2-RV64-NEXT: addi a4, a4, -241 1581; LMULMAX2-RV64-NEXT: and a1, a5, a4 1582; LMULMAX2-RV64-NEXT: lui a5, 4112 1583; LMULMAX2-RV64-NEXT: addiw a5, a5, 257 1584; LMULMAX2-RV64-NEXT: slli a5, a5, 16 1585; LMULMAX2-RV64-NEXT: addi a5, a5, 257 1586; LMULMAX2-RV64-NEXT: slli a5, a5, 16 1587; LMULMAX2-RV64-NEXT: addi a5, a5, 257 1588; LMULMAX2-RV64-NEXT: mul a1, a1, a5 1589; LMULMAX2-RV64-NEXT: srli a1, a1, 56 1590; LMULMAX2-RV64-NEXT: sh a1, 30(sp) 1591; LMULMAX2-RV64-NEXT: vslidedown.vi v26, v25, 6 1592; LMULMAX2-RV64-NEXT: vmv.x.s a1, v26 1593; LMULMAX2-RV64-NEXT: or a1, a1, a6 1594; LMULMAX2-RV64-NEXT: addi a2, a1, -1 1595; LMULMAX2-RV64-NEXT: not a1, a1 1596; LMULMAX2-RV64-NEXT: and a1, a1, a2 1597; LMULMAX2-RV64-NEXT: srli a2, a1, 1 1598; LMULMAX2-RV64-NEXT: and a2, a2, a7 1599; LMULMAX2-RV64-NEXT: sub a1, a1, a2 1600; LMULMAX2-RV64-NEXT: and a2, a1, a3 1601; LMULMAX2-RV64-NEXT: srli a1, a1, 2 1602; LMULMAX2-RV64-NEXT: and a1, a1, a3 1603; LMULMAX2-RV64-NEXT: add a1, a2, a1 1604; LMULMAX2-RV64-NEXT: srli a2, a1, 4 1605; LMULMAX2-RV64-NEXT: add a1, a1, a2 1606; LMULMAX2-RV64-NEXT: and a1, a1, a4 1607; LMULMAX2-RV64-NEXT: mul a1, a1, a5 1608; LMULMAX2-RV64-NEXT: srli a1, a1, 56 1609; LMULMAX2-RV64-NEXT: sh a1, 28(sp) 1610; LMULMAX2-RV64-NEXT: vslidedown.vi v26, v25, 5 1611; LMULMAX2-RV64-NEXT: vmv.x.s a1, v26 1612; LMULMAX2-RV64-NEXT: or a1, a1, a6 1613; LMULMAX2-RV64-NEXT: addi a2, a1, -1 1614; LMULMAX2-RV64-NEXT: not a1, a1 1615; LMULMAX2-RV64-NEXT: and a1, a1, a2 1616; LMULMAX2-RV64-NEXT: srli a2, a1, 1 1617; LMULMAX2-RV64-NEXT: and a2, a2, a7 1618; LMULMAX2-RV64-NEXT: sub a1, a1, a2 1619; LMULMAX2-RV64-NEXT: and a2, a1, a3 1620; LMULMAX2-RV64-NEXT: srli a1, a1, 2 1621; LMULMAX2-RV64-NEXT: and a1, a1, a3 1622; LMULMAX2-RV64-NEXT: add a1, a2, a1 1623; LMULMAX2-RV64-NEXT: srli a2, a1, 4 1624; LMULMAX2-RV64-NEXT: add a1, a1, a2 1625; LMULMAX2-RV64-NEXT: and a1, a1, a4 1626; LMULMAX2-RV64-NEXT: mul a1, a1, a5 1627; LMULMAX2-RV64-NEXT: srli a1, a1, 56 1628; LMULMAX2-RV64-NEXT: sh a1, 26(sp) 1629; LMULMAX2-RV64-NEXT: vslidedown.vi v26, v25, 4 1630; LMULMAX2-RV64-NEXT: vmv.x.s a1, v26 1631; LMULMAX2-RV64-NEXT: or a1, a1, a6 1632; LMULMAX2-RV64-NEXT: addi a2, a1, -1 1633; LMULMAX2-RV64-NEXT: not a1, a1 1634; LMULMAX2-RV64-NEXT: and a1, a1, a2 1635; LMULMAX2-RV64-NEXT: srli a2, a1, 1 1636; LMULMAX2-RV64-NEXT: and a2, a2, a7 1637; LMULMAX2-RV64-NEXT: sub a1, a1, a2 1638; LMULMAX2-RV64-NEXT: and a2, a1, a3 1639; LMULMAX2-RV64-NEXT: srli a1, a1, 2 1640; LMULMAX2-RV64-NEXT: and a1, a1, a3 1641; LMULMAX2-RV64-NEXT: add a1, a2, a1 1642; LMULMAX2-RV64-NEXT: srli a2, a1, 4 1643; LMULMAX2-RV64-NEXT: add a1, a1, a2 1644; LMULMAX2-RV64-NEXT: and a1, a1, a4 1645; LMULMAX2-RV64-NEXT: mul a1, a1, a5 1646; LMULMAX2-RV64-NEXT: srli a1, a1, 56 1647; LMULMAX2-RV64-NEXT: sh a1, 24(sp) 1648; LMULMAX2-RV64-NEXT: vslidedown.vi v26, v25, 3 1649; LMULMAX2-RV64-NEXT: vmv.x.s a1, v26 1650; LMULMAX2-RV64-NEXT: or a1, a1, a6 1651; LMULMAX2-RV64-NEXT: addi a2, a1, -1 1652; LMULMAX2-RV64-NEXT: not a1, a1 1653; LMULMAX2-RV64-NEXT: and a1, a1, a2 1654; LMULMAX2-RV64-NEXT: srli a2, a1, 1 1655; LMULMAX2-RV64-NEXT: and a2, a2, a7 1656; LMULMAX2-RV64-NEXT: sub a1, a1, a2 1657; LMULMAX2-RV64-NEXT: and a2, a1, a3 1658; LMULMAX2-RV64-NEXT: srli a1, a1, 2 1659; LMULMAX2-RV64-NEXT: and a1, a1, a3 1660; LMULMAX2-RV64-NEXT: add a1, a2, a1 1661; LMULMAX2-RV64-NEXT: srli a2, a1, 4 1662; LMULMAX2-RV64-NEXT: add a1, a1, a2 1663; LMULMAX2-RV64-NEXT: and a1, a1, a4 1664; LMULMAX2-RV64-NEXT: mul a1, a1, a5 1665; LMULMAX2-RV64-NEXT: srli a1, a1, 56 1666; LMULMAX2-RV64-NEXT: sh a1, 22(sp) 1667; LMULMAX2-RV64-NEXT: vslidedown.vi v26, v25, 2 1668; LMULMAX2-RV64-NEXT: vmv.x.s a1, v26 1669; LMULMAX2-RV64-NEXT: or a1, a1, a6 1670; LMULMAX2-RV64-NEXT: addi a2, a1, -1 1671; LMULMAX2-RV64-NEXT: not a1, a1 1672; LMULMAX2-RV64-NEXT: and a1, a1, a2 1673; LMULMAX2-RV64-NEXT: srli a2, a1, 1 1674; LMULMAX2-RV64-NEXT: and a2, a2, a7 1675; LMULMAX2-RV64-NEXT: sub a1, a1, a2 1676; LMULMAX2-RV64-NEXT: and a2, a1, a3 1677; LMULMAX2-RV64-NEXT: srli a1, a1, 2 1678; LMULMAX2-RV64-NEXT: and a1, a1, a3 1679; LMULMAX2-RV64-NEXT: add a1, a2, a1 1680; LMULMAX2-RV64-NEXT: srli a2, a1, 4 1681; LMULMAX2-RV64-NEXT: add a1, a1, a2 1682; LMULMAX2-RV64-NEXT: and a1, a1, a4 1683; LMULMAX2-RV64-NEXT: mul a1, a1, a5 1684; LMULMAX2-RV64-NEXT: srli a1, a1, 56 1685; LMULMAX2-RV64-NEXT: sh a1, 20(sp) 1686; LMULMAX2-RV64-NEXT: vslidedown.vi v26, v25, 1 1687; LMULMAX2-RV64-NEXT: vmv.x.s a1, v26 1688; LMULMAX2-RV64-NEXT: or a1, a1, a6 1689; LMULMAX2-RV64-NEXT: addi a2, a1, -1 1690; LMULMAX2-RV64-NEXT: not a1, a1 1691; LMULMAX2-RV64-NEXT: and a1, a1, a2 1692; LMULMAX2-RV64-NEXT: srli a2, a1, 1 1693; LMULMAX2-RV64-NEXT: and a2, a2, a7 1694; LMULMAX2-RV64-NEXT: sub a1, a1, a2 1695; LMULMAX2-RV64-NEXT: and a2, a1, a3 1696; LMULMAX2-RV64-NEXT: srli a1, a1, 2 1697; LMULMAX2-RV64-NEXT: and a1, a1, a3 1698; LMULMAX2-RV64-NEXT: add a1, a2, a1 1699; LMULMAX2-RV64-NEXT: srli a2, a1, 4 1700; LMULMAX2-RV64-NEXT: add a1, a1, a2 1701; LMULMAX2-RV64-NEXT: and a1, a1, a4 1702; LMULMAX2-RV64-NEXT: mul a1, a1, a5 1703; LMULMAX2-RV64-NEXT: srli a1, a1, 56 1704; LMULMAX2-RV64-NEXT: sh a1, 18(sp) 1705; LMULMAX2-RV64-NEXT: vmv.x.s a1, v25 1706; LMULMAX2-RV64-NEXT: or a1, a1, a6 1707; LMULMAX2-RV64-NEXT: addi a2, a1, -1 1708; LMULMAX2-RV64-NEXT: not a1, a1 1709; LMULMAX2-RV64-NEXT: and a1, a1, a2 1710; LMULMAX2-RV64-NEXT: srli a2, a1, 1 1711; LMULMAX2-RV64-NEXT: and a2, a2, a7 1712; LMULMAX2-RV64-NEXT: sub a1, a1, a2 1713; LMULMAX2-RV64-NEXT: and a2, a1, a3 1714; LMULMAX2-RV64-NEXT: srli a1, a1, 2 1715; LMULMAX2-RV64-NEXT: and a1, a1, a3 1716; LMULMAX2-RV64-NEXT: add a1, a2, a1 1717; LMULMAX2-RV64-NEXT: srli a2, a1, 4 1718; LMULMAX2-RV64-NEXT: add a1, a1, a2 1719; LMULMAX2-RV64-NEXT: and a1, a1, a4 1720; LMULMAX2-RV64-NEXT: mul a1, a1, a5 1721; LMULMAX2-RV64-NEXT: srli a1, a1, 56 1722; LMULMAX2-RV64-NEXT: sh a1, 16(sp) 1723; LMULMAX2-RV64-NEXT: vsetivli zero, 8, e16, m1, ta, mu 1724; LMULMAX2-RV64-NEXT: addi a1, sp, 16 1725; LMULMAX2-RV64-NEXT: vle16.v v25, (a1) 1726; LMULMAX2-RV64-NEXT: vse16.v v25, (a0) 1727; LMULMAX2-RV64-NEXT: addi sp, sp, 32 1728; LMULMAX2-RV64-NEXT: ret 1729; 1730; LMULMAX1-RV32-LABEL: cttz_v8i16: 1731; LMULMAX1-RV32: # %bb.0: 1732; LMULMAX1-RV32-NEXT: addi sp, sp, -32 1733; LMULMAX1-RV32-NEXT: .cfi_def_cfa_offset 32 1734; LMULMAX1-RV32-NEXT: vsetivli zero, 8, e16, m1, ta, mu 1735; LMULMAX1-RV32-NEXT: vle16.v v25, (a0) 1736; LMULMAX1-RV32-NEXT: vmv.x.s a2, v25 1737; LMULMAX1-RV32-NEXT: lui a6, 16 1738; LMULMAX1-RV32-NEXT: or a2, a2, a6 1739; LMULMAX1-RV32-NEXT: addi a3, a2, -1 1740; LMULMAX1-RV32-NEXT: not a2, a2 1741; LMULMAX1-RV32-NEXT: and a3, a2, a3 1742; LMULMAX1-RV32-NEXT: srli a4, a3, 1 1743; LMULMAX1-RV32-NEXT: lui a2, 349525 1744; LMULMAX1-RV32-NEXT: addi a7, a2, 1365 1745; LMULMAX1-RV32-NEXT: and a4, a4, a7 1746; LMULMAX1-RV32-NEXT: sub a4, a3, a4 1747; LMULMAX1-RV32-NEXT: lui a3, 209715 1748; LMULMAX1-RV32-NEXT: addi a3, a3, 819 1749; LMULMAX1-RV32-NEXT: and a5, a4, a3 1750; LMULMAX1-RV32-NEXT: srli a4, a4, 2 1751; LMULMAX1-RV32-NEXT: and a4, a4, a3 1752; LMULMAX1-RV32-NEXT: add a4, a5, a4 1753; LMULMAX1-RV32-NEXT: srli a5, a4, 4 1754; LMULMAX1-RV32-NEXT: add a5, a4, a5 1755; LMULMAX1-RV32-NEXT: lui a4, 61681 1756; LMULMAX1-RV32-NEXT: addi a4, a4, -241 1757; LMULMAX1-RV32-NEXT: and a1, a5, a4 1758; LMULMAX1-RV32-NEXT: lui a5, 4112 1759; LMULMAX1-RV32-NEXT: addi a5, a5, 257 1760; LMULMAX1-RV32-NEXT: mul a1, a1, a5 1761; LMULMAX1-RV32-NEXT: srli a1, a1, 24 1762; LMULMAX1-RV32-NEXT: sh a1, 16(sp) 1763; LMULMAX1-RV32-NEXT: vsetivli zero, 1, e16, m1, ta, mu 1764; LMULMAX1-RV32-NEXT: vslidedown.vi v26, v25, 7 1765; LMULMAX1-RV32-NEXT: vmv.x.s a1, v26 1766; LMULMAX1-RV32-NEXT: or a1, a1, a6 1767; LMULMAX1-RV32-NEXT: addi a2, a1, -1 1768; LMULMAX1-RV32-NEXT: not a1, a1 1769; LMULMAX1-RV32-NEXT: and a1, a1, a2 1770; LMULMAX1-RV32-NEXT: srli a2, a1, 1 1771; LMULMAX1-RV32-NEXT: and a2, a2, a7 1772; LMULMAX1-RV32-NEXT: sub a1, a1, a2 1773; LMULMAX1-RV32-NEXT: and a2, a1, a3 1774; LMULMAX1-RV32-NEXT: srli a1, a1, 2 1775; LMULMAX1-RV32-NEXT: and a1, a1, a3 1776; LMULMAX1-RV32-NEXT: add a1, a2, a1 1777; LMULMAX1-RV32-NEXT: srli a2, a1, 4 1778; LMULMAX1-RV32-NEXT: add a1, a1, a2 1779; LMULMAX1-RV32-NEXT: and a1, a1, a4 1780; LMULMAX1-RV32-NEXT: mul a1, a1, a5 1781; LMULMAX1-RV32-NEXT: srli a1, a1, 24 1782; LMULMAX1-RV32-NEXT: sh a1, 30(sp) 1783; LMULMAX1-RV32-NEXT: vslidedown.vi v26, v25, 6 1784; LMULMAX1-RV32-NEXT: vmv.x.s a1, v26 1785; LMULMAX1-RV32-NEXT: or a1, a1, a6 1786; LMULMAX1-RV32-NEXT: addi a2, a1, -1 1787; LMULMAX1-RV32-NEXT: not a1, a1 1788; LMULMAX1-RV32-NEXT: and a1, a1, a2 1789; LMULMAX1-RV32-NEXT: srli a2, a1, 1 1790; LMULMAX1-RV32-NEXT: and a2, a2, a7 1791; LMULMAX1-RV32-NEXT: sub a1, a1, a2 1792; LMULMAX1-RV32-NEXT: and a2, a1, a3 1793; LMULMAX1-RV32-NEXT: srli a1, a1, 2 1794; LMULMAX1-RV32-NEXT: and a1, a1, a3 1795; LMULMAX1-RV32-NEXT: add a1, a2, a1 1796; LMULMAX1-RV32-NEXT: srli a2, a1, 4 1797; LMULMAX1-RV32-NEXT: add a1, a1, a2 1798; LMULMAX1-RV32-NEXT: and a1, a1, a4 1799; LMULMAX1-RV32-NEXT: mul a1, a1, a5 1800; LMULMAX1-RV32-NEXT: srli a1, a1, 24 1801; LMULMAX1-RV32-NEXT: sh a1, 28(sp) 1802; LMULMAX1-RV32-NEXT: vslidedown.vi v26, v25, 5 1803; LMULMAX1-RV32-NEXT: vmv.x.s a1, v26 1804; LMULMAX1-RV32-NEXT: or a1, a1, a6 1805; LMULMAX1-RV32-NEXT: addi a2, a1, -1 1806; LMULMAX1-RV32-NEXT: not a1, a1 1807; LMULMAX1-RV32-NEXT: and a1, a1, a2 1808; LMULMAX1-RV32-NEXT: srli a2, a1, 1 1809; LMULMAX1-RV32-NEXT: and a2, a2, a7 1810; LMULMAX1-RV32-NEXT: sub a1, a1, a2 1811; LMULMAX1-RV32-NEXT: and a2, a1, a3 1812; LMULMAX1-RV32-NEXT: srli a1, a1, 2 1813; LMULMAX1-RV32-NEXT: and a1, a1, a3 1814; LMULMAX1-RV32-NEXT: add a1, a2, a1 1815; LMULMAX1-RV32-NEXT: srli a2, a1, 4 1816; LMULMAX1-RV32-NEXT: add a1, a1, a2 1817; LMULMAX1-RV32-NEXT: and a1, a1, a4 1818; LMULMAX1-RV32-NEXT: mul a1, a1, a5 1819; LMULMAX1-RV32-NEXT: srli a1, a1, 24 1820; LMULMAX1-RV32-NEXT: sh a1, 26(sp) 1821; LMULMAX1-RV32-NEXT: vslidedown.vi v26, v25, 4 1822; LMULMAX1-RV32-NEXT: vmv.x.s a1, v26 1823; LMULMAX1-RV32-NEXT: or a1, a1, a6 1824; LMULMAX1-RV32-NEXT: addi a2, a1, -1 1825; LMULMAX1-RV32-NEXT: not a1, a1 1826; LMULMAX1-RV32-NEXT: and a1, a1, a2 1827; LMULMAX1-RV32-NEXT: srli a2, a1, 1 1828; LMULMAX1-RV32-NEXT: and a2, a2, a7 1829; LMULMAX1-RV32-NEXT: sub a1, a1, a2 1830; LMULMAX1-RV32-NEXT: and a2, a1, a3 1831; LMULMAX1-RV32-NEXT: srli a1, a1, 2 1832; LMULMAX1-RV32-NEXT: and a1, a1, a3 1833; LMULMAX1-RV32-NEXT: add a1, a2, a1 1834; LMULMAX1-RV32-NEXT: srli a2, a1, 4 1835; LMULMAX1-RV32-NEXT: add a1, a1, a2 1836; LMULMAX1-RV32-NEXT: and a1, a1, a4 1837; LMULMAX1-RV32-NEXT: mul a1, a1, a5 1838; LMULMAX1-RV32-NEXT: srli a1, a1, 24 1839; LMULMAX1-RV32-NEXT: sh a1, 24(sp) 1840; LMULMAX1-RV32-NEXT: vslidedown.vi v26, v25, 3 1841; LMULMAX1-RV32-NEXT: vmv.x.s a1, v26 1842; LMULMAX1-RV32-NEXT: or a1, a1, a6 1843; LMULMAX1-RV32-NEXT: addi a2, a1, -1 1844; LMULMAX1-RV32-NEXT: not a1, a1 1845; LMULMAX1-RV32-NEXT: and a1, a1, a2 1846; LMULMAX1-RV32-NEXT: srli a2, a1, 1 1847; LMULMAX1-RV32-NEXT: and a2, a2, a7 1848; LMULMAX1-RV32-NEXT: sub a1, a1, a2 1849; LMULMAX1-RV32-NEXT: and a2, a1, a3 1850; LMULMAX1-RV32-NEXT: srli a1, a1, 2 1851; LMULMAX1-RV32-NEXT: and a1, a1, a3 1852; LMULMAX1-RV32-NEXT: add a1, a2, a1 1853; LMULMAX1-RV32-NEXT: srli a2, a1, 4 1854; LMULMAX1-RV32-NEXT: add a1, a1, a2 1855; LMULMAX1-RV32-NEXT: and a1, a1, a4 1856; LMULMAX1-RV32-NEXT: mul a1, a1, a5 1857; LMULMAX1-RV32-NEXT: srli a1, a1, 24 1858; LMULMAX1-RV32-NEXT: sh a1, 22(sp) 1859; LMULMAX1-RV32-NEXT: vslidedown.vi v26, v25, 2 1860; LMULMAX1-RV32-NEXT: vmv.x.s a1, v26 1861; LMULMAX1-RV32-NEXT: or a1, a1, a6 1862; LMULMAX1-RV32-NEXT: addi a2, a1, -1 1863; LMULMAX1-RV32-NEXT: not a1, a1 1864; LMULMAX1-RV32-NEXT: and a1, a1, a2 1865; LMULMAX1-RV32-NEXT: srli a2, a1, 1 1866; LMULMAX1-RV32-NEXT: and a2, a2, a7 1867; LMULMAX1-RV32-NEXT: sub a1, a1, a2 1868; LMULMAX1-RV32-NEXT: and a2, a1, a3 1869; LMULMAX1-RV32-NEXT: srli a1, a1, 2 1870; LMULMAX1-RV32-NEXT: and a1, a1, a3 1871; LMULMAX1-RV32-NEXT: add a1, a2, a1 1872; LMULMAX1-RV32-NEXT: srli a2, a1, 4 1873; LMULMAX1-RV32-NEXT: add a1, a1, a2 1874; LMULMAX1-RV32-NEXT: and a1, a1, a4 1875; LMULMAX1-RV32-NEXT: mul a1, a1, a5 1876; LMULMAX1-RV32-NEXT: srli a1, a1, 24 1877; LMULMAX1-RV32-NEXT: sh a1, 20(sp) 1878; LMULMAX1-RV32-NEXT: vslidedown.vi v25, v25, 1 1879; LMULMAX1-RV32-NEXT: vmv.x.s a1, v25 1880; LMULMAX1-RV32-NEXT: or a1, a1, a6 1881; LMULMAX1-RV32-NEXT: addi a2, a1, -1 1882; LMULMAX1-RV32-NEXT: not a1, a1 1883; LMULMAX1-RV32-NEXT: and a1, a1, a2 1884; LMULMAX1-RV32-NEXT: srli a2, a1, 1 1885; LMULMAX1-RV32-NEXT: and a2, a2, a7 1886; LMULMAX1-RV32-NEXT: sub a1, a1, a2 1887; LMULMAX1-RV32-NEXT: and a2, a1, a3 1888; LMULMAX1-RV32-NEXT: srli a1, a1, 2 1889; LMULMAX1-RV32-NEXT: and a1, a1, a3 1890; LMULMAX1-RV32-NEXT: add a1, a2, a1 1891; LMULMAX1-RV32-NEXT: srli a2, a1, 4 1892; LMULMAX1-RV32-NEXT: add a1, a1, a2 1893; LMULMAX1-RV32-NEXT: and a1, a1, a4 1894; LMULMAX1-RV32-NEXT: mul a1, a1, a5 1895; LMULMAX1-RV32-NEXT: srli a1, a1, 24 1896; LMULMAX1-RV32-NEXT: sh a1, 18(sp) 1897; LMULMAX1-RV32-NEXT: vsetivli zero, 8, e16, m1, ta, mu 1898; LMULMAX1-RV32-NEXT: addi a1, sp, 16 1899; LMULMAX1-RV32-NEXT: vle16.v v25, (a1) 1900; LMULMAX1-RV32-NEXT: vse16.v v25, (a0) 1901; LMULMAX1-RV32-NEXT: addi sp, sp, 32 1902; LMULMAX1-RV32-NEXT: ret 1903; 1904; LMULMAX1-RV64-LABEL: cttz_v8i16: 1905; LMULMAX1-RV64: # %bb.0: 1906; LMULMAX1-RV64-NEXT: addi sp, sp, -32 1907; LMULMAX1-RV64-NEXT: .cfi_def_cfa_offset 32 1908; LMULMAX1-RV64-NEXT: vsetivli zero, 8, e16, m1, ta, mu 1909; LMULMAX1-RV64-NEXT: vle16.v v25, (a0) 1910; LMULMAX1-RV64-NEXT: vsetivli zero, 1, e16, m1, ta, mu 1911; LMULMAX1-RV64-NEXT: vslidedown.vi v26, v25, 7 1912; LMULMAX1-RV64-NEXT: vmv.x.s a2, v26 1913; LMULMAX1-RV64-NEXT: lui a6, 16 1914; LMULMAX1-RV64-NEXT: or a2, a2, a6 1915; LMULMAX1-RV64-NEXT: addi a3, a2, -1 1916; LMULMAX1-RV64-NEXT: not a2, a2 1917; LMULMAX1-RV64-NEXT: and a3, a2, a3 1918; LMULMAX1-RV64-NEXT: srli a4, a3, 1 1919; LMULMAX1-RV64-NEXT: lui a2, 21845 1920; LMULMAX1-RV64-NEXT: addiw a2, a2, 1365 1921; LMULMAX1-RV64-NEXT: slli a2, a2, 12 1922; LMULMAX1-RV64-NEXT: addi a2, a2, 1365 1923; LMULMAX1-RV64-NEXT: slli a2, a2, 12 1924; LMULMAX1-RV64-NEXT: addi a2, a2, 1365 1925; LMULMAX1-RV64-NEXT: slli a2, a2, 12 1926; LMULMAX1-RV64-NEXT: addi a7, a2, 1365 1927; LMULMAX1-RV64-NEXT: and a4, a4, a7 1928; LMULMAX1-RV64-NEXT: sub a4, a3, a4 1929; LMULMAX1-RV64-NEXT: lui a3, 13107 1930; LMULMAX1-RV64-NEXT: addiw a3, a3, 819 1931; LMULMAX1-RV64-NEXT: slli a3, a3, 12 1932; LMULMAX1-RV64-NEXT: addi a3, a3, 819 1933; LMULMAX1-RV64-NEXT: slli a3, a3, 12 1934; LMULMAX1-RV64-NEXT: addi a3, a3, 819 1935; LMULMAX1-RV64-NEXT: slli a3, a3, 12 1936; LMULMAX1-RV64-NEXT: addi a3, a3, 819 1937; LMULMAX1-RV64-NEXT: and a5, a4, a3 1938; LMULMAX1-RV64-NEXT: srli a4, a4, 2 1939; LMULMAX1-RV64-NEXT: and a4, a4, a3 1940; LMULMAX1-RV64-NEXT: add a4, a5, a4 1941; LMULMAX1-RV64-NEXT: srli a5, a4, 4 1942; LMULMAX1-RV64-NEXT: add a5, a4, a5 1943; LMULMAX1-RV64-NEXT: lui a4, 3855 1944; LMULMAX1-RV64-NEXT: addiw a4, a4, 241 1945; LMULMAX1-RV64-NEXT: slli a4, a4, 12 1946; LMULMAX1-RV64-NEXT: addi a4, a4, -241 1947; LMULMAX1-RV64-NEXT: slli a4, a4, 12 1948; LMULMAX1-RV64-NEXT: addi a4, a4, 241 1949; LMULMAX1-RV64-NEXT: slli a4, a4, 12 1950; LMULMAX1-RV64-NEXT: addi a4, a4, -241 1951; LMULMAX1-RV64-NEXT: and a1, a5, a4 1952; LMULMAX1-RV64-NEXT: lui a5, 4112 1953; LMULMAX1-RV64-NEXT: addiw a5, a5, 257 1954; LMULMAX1-RV64-NEXT: slli a5, a5, 16 1955; LMULMAX1-RV64-NEXT: addi a5, a5, 257 1956; LMULMAX1-RV64-NEXT: slli a5, a5, 16 1957; LMULMAX1-RV64-NEXT: addi a5, a5, 257 1958; LMULMAX1-RV64-NEXT: mul a1, a1, a5 1959; LMULMAX1-RV64-NEXT: srli a1, a1, 56 1960; LMULMAX1-RV64-NEXT: sh a1, 30(sp) 1961; LMULMAX1-RV64-NEXT: vslidedown.vi v26, v25, 6 1962; LMULMAX1-RV64-NEXT: vmv.x.s a1, v26 1963; LMULMAX1-RV64-NEXT: or a1, a1, a6 1964; LMULMAX1-RV64-NEXT: addi a2, a1, -1 1965; LMULMAX1-RV64-NEXT: not a1, a1 1966; LMULMAX1-RV64-NEXT: and a1, a1, a2 1967; LMULMAX1-RV64-NEXT: srli a2, a1, 1 1968; LMULMAX1-RV64-NEXT: and a2, a2, a7 1969; LMULMAX1-RV64-NEXT: sub a1, a1, a2 1970; LMULMAX1-RV64-NEXT: and a2, a1, a3 1971; LMULMAX1-RV64-NEXT: srli a1, a1, 2 1972; LMULMAX1-RV64-NEXT: and a1, a1, a3 1973; LMULMAX1-RV64-NEXT: add a1, a2, a1 1974; LMULMAX1-RV64-NEXT: srli a2, a1, 4 1975; LMULMAX1-RV64-NEXT: add a1, a1, a2 1976; LMULMAX1-RV64-NEXT: and a1, a1, a4 1977; LMULMAX1-RV64-NEXT: mul a1, a1, a5 1978; LMULMAX1-RV64-NEXT: srli a1, a1, 56 1979; LMULMAX1-RV64-NEXT: sh a1, 28(sp) 1980; LMULMAX1-RV64-NEXT: vslidedown.vi v26, v25, 5 1981; LMULMAX1-RV64-NEXT: vmv.x.s a1, v26 1982; LMULMAX1-RV64-NEXT: or a1, a1, a6 1983; LMULMAX1-RV64-NEXT: addi a2, a1, -1 1984; LMULMAX1-RV64-NEXT: not a1, a1 1985; LMULMAX1-RV64-NEXT: and a1, a1, a2 1986; LMULMAX1-RV64-NEXT: srli a2, a1, 1 1987; LMULMAX1-RV64-NEXT: and a2, a2, a7 1988; LMULMAX1-RV64-NEXT: sub a1, a1, a2 1989; LMULMAX1-RV64-NEXT: and a2, a1, a3 1990; LMULMAX1-RV64-NEXT: srli a1, a1, 2 1991; LMULMAX1-RV64-NEXT: and a1, a1, a3 1992; LMULMAX1-RV64-NEXT: add a1, a2, a1 1993; LMULMAX1-RV64-NEXT: srli a2, a1, 4 1994; LMULMAX1-RV64-NEXT: add a1, a1, a2 1995; LMULMAX1-RV64-NEXT: and a1, a1, a4 1996; LMULMAX1-RV64-NEXT: mul a1, a1, a5 1997; LMULMAX1-RV64-NEXT: srli a1, a1, 56 1998; LMULMAX1-RV64-NEXT: sh a1, 26(sp) 1999; LMULMAX1-RV64-NEXT: vslidedown.vi v26, v25, 4 2000; LMULMAX1-RV64-NEXT: vmv.x.s a1, v26 2001; LMULMAX1-RV64-NEXT: or a1, a1, a6 2002; LMULMAX1-RV64-NEXT: addi a2, a1, -1 2003; LMULMAX1-RV64-NEXT: not a1, a1 2004; LMULMAX1-RV64-NEXT: and a1, a1, a2 2005; LMULMAX1-RV64-NEXT: srli a2, a1, 1 2006; LMULMAX1-RV64-NEXT: and a2, a2, a7 2007; LMULMAX1-RV64-NEXT: sub a1, a1, a2 2008; LMULMAX1-RV64-NEXT: and a2, a1, a3 2009; LMULMAX1-RV64-NEXT: srli a1, a1, 2 2010; LMULMAX1-RV64-NEXT: and a1, a1, a3 2011; LMULMAX1-RV64-NEXT: add a1, a2, a1 2012; LMULMAX1-RV64-NEXT: srli a2, a1, 4 2013; LMULMAX1-RV64-NEXT: add a1, a1, a2 2014; LMULMAX1-RV64-NEXT: and a1, a1, a4 2015; LMULMAX1-RV64-NEXT: mul a1, a1, a5 2016; LMULMAX1-RV64-NEXT: srli a1, a1, 56 2017; LMULMAX1-RV64-NEXT: sh a1, 24(sp) 2018; LMULMAX1-RV64-NEXT: vslidedown.vi v26, v25, 3 2019; LMULMAX1-RV64-NEXT: vmv.x.s a1, v26 2020; LMULMAX1-RV64-NEXT: or a1, a1, a6 2021; LMULMAX1-RV64-NEXT: addi a2, a1, -1 2022; LMULMAX1-RV64-NEXT: not a1, a1 2023; LMULMAX1-RV64-NEXT: and a1, a1, a2 2024; LMULMAX1-RV64-NEXT: srli a2, a1, 1 2025; LMULMAX1-RV64-NEXT: and a2, a2, a7 2026; LMULMAX1-RV64-NEXT: sub a1, a1, a2 2027; LMULMAX1-RV64-NEXT: and a2, a1, a3 2028; LMULMAX1-RV64-NEXT: srli a1, a1, 2 2029; LMULMAX1-RV64-NEXT: and a1, a1, a3 2030; LMULMAX1-RV64-NEXT: add a1, a2, a1 2031; LMULMAX1-RV64-NEXT: srli a2, a1, 4 2032; LMULMAX1-RV64-NEXT: add a1, a1, a2 2033; LMULMAX1-RV64-NEXT: and a1, a1, a4 2034; LMULMAX1-RV64-NEXT: mul a1, a1, a5 2035; LMULMAX1-RV64-NEXT: srli a1, a1, 56 2036; LMULMAX1-RV64-NEXT: sh a1, 22(sp) 2037; LMULMAX1-RV64-NEXT: vslidedown.vi v26, v25, 2 2038; LMULMAX1-RV64-NEXT: vmv.x.s a1, v26 2039; LMULMAX1-RV64-NEXT: or a1, a1, a6 2040; LMULMAX1-RV64-NEXT: addi a2, a1, -1 2041; LMULMAX1-RV64-NEXT: not a1, a1 2042; LMULMAX1-RV64-NEXT: and a1, a1, a2 2043; LMULMAX1-RV64-NEXT: srli a2, a1, 1 2044; LMULMAX1-RV64-NEXT: and a2, a2, a7 2045; LMULMAX1-RV64-NEXT: sub a1, a1, a2 2046; LMULMAX1-RV64-NEXT: and a2, a1, a3 2047; LMULMAX1-RV64-NEXT: srli a1, a1, 2 2048; LMULMAX1-RV64-NEXT: and a1, a1, a3 2049; LMULMAX1-RV64-NEXT: add a1, a2, a1 2050; LMULMAX1-RV64-NEXT: srli a2, a1, 4 2051; LMULMAX1-RV64-NEXT: add a1, a1, a2 2052; LMULMAX1-RV64-NEXT: and a1, a1, a4 2053; LMULMAX1-RV64-NEXT: mul a1, a1, a5 2054; LMULMAX1-RV64-NEXT: srli a1, a1, 56 2055; LMULMAX1-RV64-NEXT: sh a1, 20(sp) 2056; LMULMAX1-RV64-NEXT: vslidedown.vi v26, v25, 1 2057; LMULMAX1-RV64-NEXT: vmv.x.s a1, v26 2058; LMULMAX1-RV64-NEXT: or a1, a1, a6 2059; LMULMAX1-RV64-NEXT: addi a2, a1, -1 2060; LMULMAX1-RV64-NEXT: not a1, a1 2061; LMULMAX1-RV64-NEXT: and a1, a1, a2 2062; LMULMAX1-RV64-NEXT: srli a2, a1, 1 2063; LMULMAX1-RV64-NEXT: and a2, a2, a7 2064; LMULMAX1-RV64-NEXT: sub a1, a1, a2 2065; LMULMAX1-RV64-NEXT: and a2, a1, a3 2066; LMULMAX1-RV64-NEXT: srli a1, a1, 2 2067; LMULMAX1-RV64-NEXT: and a1, a1, a3 2068; LMULMAX1-RV64-NEXT: add a1, a2, a1 2069; LMULMAX1-RV64-NEXT: srli a2, a1, 4 2070; LMULMAX1-RV64-NEXT: add a1, a1, a2 2071; LMULMAX1-RV64-NEXT: and a1, a1, a4 2072; LMULMAX1-RV64-NEXT: mul a1, a1, a5 2073; LMULMAX1-RV64-NEXT: srli a1, a1, 56 2074; LMULMAX1-RV64-NEXT: sh a1, 18(sp) 2075; LMULMAX1-RV64-NEXT: vmv.x.s a1, v25 2076; LMULMAX1-RV64-NEXT: or a1, a1, a6 2077; LMULMAX1-RV64-NEXT: addi a2, a1, -1 2078; LMULMAX1-RV64-NEXT: not a1, a1 2079; LMULMAX1-RV64-NEXT: and a1, a1, a2 2080; LMULMAX1-RV64-NEXT: srli a2, a1, 1 2081; LMULMAX1-RV64-NEXT: and a2, a2, a7 2082; LMULMAX1-RV64-NEXT: sub a1, a1, a2 2083; LMULMAX1-RV64-NEXT: and a2, a1, a3 2084; LMULMAX1-RV64-NEXT: srli a1, a1, 2 2085; LMULMAX1-RV64-NEXT: and a1, a1, a3 2086; LMULMAX1-RV64-NEXT: add a1, a2, a1 2087; LMULMAX1-RV64-NEXT: srli a2, a1, 4 2088; LMULMAX1-RV64-NEXT: add a1, a1, a2 2089; LMULMAX1-RV64-NEXT: and a1, a1, a4 2090; LMULMAX1-RV64-NEXT: mul a1, a1, a5 2091; LMULMAX1-RV64-NEXT: srli a1, a1, 56 2092; LMULMAX1-RV64-NEXT: sh a1, 16(sp) 2093; LMULMAX1-RV64-NEXT: vsetivli zero, 8, e16, m1, ta, mu 2094; LMULMAX1-RV64-NEXT: addi a1, sp, 16 2095; LMULMAX1-RV64-NEXT: vle16.v v25, (a1) 2096; LMULMAX1-RV64-NEXT: vse16.v v25, (a0) 2097; LMULMAX1-RV64-NEXT: addi sp, sp, 32 2098; LMULMAX1-RV64-NEXT: ret 2099 %a = load <8 x i16>, <8 x i16>* %x 2100 %b = load <8 x i16>, <8 x i16>* %y 2101 %c = call <8 x i16> @llvm.cttz.v8i16(<8 x i16> %a, i1 false) 2102 store <8 x i16> %c, <8 x i16>* %x 2103 ret void 2104} 2105declare <8 x i16> @llvm.cttz.v8i16(<8 x i16>, i1) 2106 2107define void @cttz_v4i32(<4 x i32>* %x, <4 x i32>* %y) { 2108; LMULMAX2-RV32-LABEL: cttz_v4i32: 2109; LMULMAX2-RV32: # %bb.0: 2110; LMULMAX2-RV32-NEXT: addi sp, sp, -32 2111; LMULMAX2-RV32-NEXT: .cfi_def_cfa_offset 32 2112; LMULMAX2-RV32-NEXT: vsetivli zero, 4, e32, m1, ta, mu 2113; LMULMAX2-RV32-NEXT: vle32.v v25, (a0) 2114; LMULMAX2-RV32-NEXT: vmv.x.s a1, v25 2115; LMULMAX2-RV32-NEXT: addi a2, a1, -1 2116; LMULMAX2-RV32-NEXT: not a1, a1 2117; LMULMAX2-RV32-NEXT: and a1, a1, a2 2118; LMULMAX2-RV32-NEXT: srli a2, a1, 1 2119; LMULMAX2-RV32-NEXT: lui a3, 349525 2120; LMULMAX2-RV32-NEXT: addi a6, a3, 1365 2121; LMULMAX2-RV32-NEXT: and a2, a2, a6 2122; LMULMAX2-RV32-NEXT: sub a1, a1, a2 2123; LMULMAX2-RV32-NEXT: lui a2, 209715 2124; LMULMAX2-RV32-NEXT: addi a2, a2, 819 2125; LMULMAX2-RV32-NEXT: and a4, a1, a2 2126; LMULMAX2-RV32-NEXT: srli a1, a1, 2 2127; LMULMAX2-RV32-NEXT: and a1, a1, a2 2128; LMULMAX2-RV32-NEXT: add a1, a4, a1 2129; LMULMAX2-RV32-NEXT: srli a4, a1, 4 2130; LMULMAX2-RV32-NEXT: add a1, a1, a4 2131; LMULMAX2-RV32-NEXT: lui a4, 61681 2132; LMULMAX2-RV32-NEXT: addi a4, a4, -241 2133; LMULMAX2-RV32-NEXT: and a1, a1, a4 2134; LMULMAX2-RV32-NEXT: lui a5, 4112 2135; LMULMAX2-RV32-NEXT: addi a5, a5, 257 2136; LMULMAX2-RV32-NEXT: mul a1, a1, a5 2137; LMULMAX2-RV32-NEXT: srli a1, a1, 24 2138; LMULMAX2-RV32-NEXT: sw a1, 16(sp) 2139; LMULMAX2-RV32-NEXT: vsetivli zero, 1, e32, m1, ta, mu 2140; LMULMAX2-RV32-NEXT: vslidedown.vi v26, v25, 3 2141; LMULMAX2-RV32-NEXT: vmv.x.s a1, v26 2142; LMULMAX2-RV32-NEXT: addi a3, a1, -1 2143; LMULMAX2-RV32-NEXT: not a1, a1 2144; LMULMAX2-RV32-NEXT: and a1, a1, a3 2145; LMULMAX2-RV32-NEXT: srli a3, a1, 1 2146; LMULMAX2-RV32-NEXT: and a3, a3, a6 2147; LMULMAX2-RV32-NEXT: sub a1, a1, a3 2148; LMULMAX2-RV32-NEXT: and a3, a1, a2 2149; LMULMAX2-RV32-NEXT: srli a1, a1, 2 2150; LMULMAX2-RV32-NEXT: and a1, a1, a2 2151; LMULMAX2-RV32-NEXT: add a1, a3, a1 2152; LMULMAX2-RV32-NEXT: srli a3, a1, 4 2153; LMULMAX2-RV32-NEXT: add a1, a1, a3 2154; LMULMAX2-RV32-NEXT: and a1, a1, a4 2155; LMULMAX2-RV32-NEXT: mul a1, a1, a5 2156; LMULMAX2-RV32-NEXT: srli a1, a1, 24 2157; LMULMAX2-RV32-NEXT: sw a1, 28(sp) 2158; LMULMAX2-RV32-NEXT: vslidedown.vi v26, v25, 2 2159; LMULMAX2-RV32-NEXT: vmv.x.s a1, v26 2160; LMULMAX2-RV32-NEXT: addi a3, a1, -1 2161; LMULMAX2-RV32-NEXT: not a1, a1 2162; LMULMAX2-RV32-NEXT: and a1, a1, a3 2163; LMULMAX2-RV32-NEXT: srli a3, a1, 1 2164; LMULMAX2-RV32-NEXT: and a3, a3, a6 2165; LMULMAX2-RV32-NEXT: sub a1, a1, a3 2166; LMULMAX2-RV32-NEXT: and a3, a1, a2 2167; LMULMAX2-RV32-NEXT: srli a1, a1, 2 2168; LMULMAX2-RV32-NEXT: and a1, a1, a2 2169; LMULMAX2-RV32-NEXT: add a1, a3, a1 2170; LMULMAX2-RV32-NEXT: srli a3, a1, 4 2171; LMULMAX2-RV32-NEXT: add a1, a1, a3 2172; LMULMAX2-RV32-NEXT: and a1, a1, a4 2173; LMULMAX2-RV32-NEXT: mul a1, a1, a5 2174; LMULMAX2-RV32-NEXT: srli a1, a1, 24 2175; LMULMAX2-RV32-NEXT: sw a1, 24(sp) 2176; LMULMAX2-RV32-NEXT: vslidedown.vi v25, v25, 1 2177; LMULMAX2-RV32-NEXT: vmv.x.s a1, v25 2178; LMULMAX2-RV32-NEXT: addi a3, a1, -1 2179; LMULMAX2-RV32-NEXT: not a1, a1 2180; LMULMAX2-RV32-NEXT: and a1, a1, a3 2181; LMULMAX2-RV32-NEXT: srli a3, a1, 1 2182; LMULMAX2-RV32-NEXT: and a3, a3, a6 2183; LMULMAX2-RV32-NEXT: sub a1, a1, a3 2184; LMULMAX2-RV32-NEXT: and a3, a1, a2 2185; LMULMAX2-RV32-NEXT: srli a1, a1, 2 2186; LMULMAX2-RV32-NEXT: and a1, a1, a2 2187; LMULMAX2-RV32-NEXT: add a1, a3, a1 2188; LMULMAX2-RV32-NEXT: srli a2, a1, 4 2189; LMULMAX2-RV32-NEXT: add a1, a1, a2 2190; LMULMAX2-RV32-NEXT: and a1, a1, a4 2191; LMULMAX2-RV32-NEXT: mul a1, a1, a5 2192; LMULMAX2-RV32-NEXT: srli a1, a1, 24 2193; LMULMAX2-RV32-NEXT: sw a1, 20(sp) 2194; LMULMAX2-RV32-NEXT: vsetivli zero, 4, e32, m1, ta, mu 2195; LMULMAX2-RV32-NEXT: addi a1, sp, 16 2196; LMULMAX2-RV32-NEXT: vle32.v v25, (a1) 2197; LMULMAX2-RV32-NEXT: vse32.v v25, (a0) 2198; LMULMAX2-RV32-NEXT: addi sp, sp, 32 2199; LMULMAX2-RV32-NEXT: ret 2200; 2201; LMULMAX2-RV64-LABEL: cttz_v4i32: 2202; LMULMAX2-RV64: # %bb.0: 2203; LMULMAX2-RV64-NEXT: addi sp, sp, -32 2204; LMULMAX2-RV64-NEXT: .cfi_def_cfa_offset 32 2205; LMULMAX2-RV64-NEXT: vsetivli zero, 4, e32, m1, ta, mu 2206; LMULMAX2-RV64-NEXT: vle32.v v25, (a0) 2207; LMULMAX2-RV64-NEXT: vsetivli zero, 1, e32, m1, ta, mu 2208; LMULMAX2-RV64-NEXT: vslidedown.vi v26, v25, 3 2209; LMULMAX2-RV64-NEXT: vmv.x.s a2, v26 2210; LMULMAX2-RV64-NEXT: addi a1, zero, 1 2211; LMULMAX2-RV64-NEXT: slli a6, a1, 32 2212; LMULMAX2-RV64-NEXT: or a2, a2, a6 2213; LMULMAX2-RV64-NEXT: addi a3, a2, -1 2214; LMULMAX2-RV64-NEXT: not a2, a2 2215; LMULMAX2-RV64-NEXT: and a3, a2, a3 2216; LMULMAX2-RV64-NEXT: srli a4, a3, 1 2217; LMULMAX2-RV64-NEXT: lui a2, 21845 2218; LMULMAX2-RV64-NEXT: addiw a2, a2, 1365 2219; LMULMAX2-RV64-NEXT: slli a2, a2, 12 2220; LMULMAX2-RV64-NEXT: addi a2, a2, 1365 2221; LMULMAX2-RV64-NEXT: slli a2, a2, 12 2222; LMULMAX2-RV64-NEXT: addi a2, a2, 1365 2223; LMULMAX2-RV64-NEXT: slli a2, a2, 12 2224; LMULMAX2-RV64-NEXT: addi a7, a2, 1365 2225; LMULMAX2-RV64-NEXT: and a4, a4, a7 2226; LMULMAX2-RV64-NEXT: sub a4, a3, a4 2227; LMULMAX2-RV64-NEXT: lui a3, 13107 2228; LMULMAX2-RV64-NEXT: addiw a3, a3, 819 2229; LMULMAX2-RV64-NEXT: slli a3, a3, 12 2230; LMULMAX2-RV64-NEXT: addi a3, a3, 819 2231; LMULMAX2-RV64-NEXT: slli a3, a3, 12 2232; LMULMAX2-RV64-NEXT: addi a3, a3, 819 2233; LMULMAX2-RV64-NEXT: slli a3, a3, 12 2234; LMULMAX2-RV64-NEXT: addi a3, a3, 819 2235; LMULMAX2-RV64-NEXT: and a5, a4, a3 2236; LMULMAX2-RV64-NEXT: srli a4, a4, 2 2237; LMULMAX2-RV64-NEXT: and a4, a4, a3 2238; LMULMAX2-RV64-NEXT: add a4, a5, a4 2239; LMULMAX2-RV64-NEXT: srli a5, a4, 4 2240; LMULMAX2-RV64-NEXT: add a4, a4, a5 2241; LMULMAX2-RV64-NEXT: lui a5, 3855 2242; LMULMAX2-RV64-NEXT: addiw a5, a5, 241 2243; LMULMAX2-RV64-NEXT: slli a5, a5, 12 2244; LMULMAX2-RV64-NEXT: addi a5, a5, -241 2245; LMULMAX2-RV64-NEXT: slli a5, a5, 12 2246; LMULMAX2-RV64-NEXT: addi a5, a5, 241 2247; LMULMAX2-RV64-NEXT: slli a5, a5, 12 2248; LMULMAX2-RV64-NEXT: addi a5, a5, -241 2249; LMULMAX2-RV64-NEXT: and a4, a4, a5 2250; LMULMAX2-RV64-NEXT: lui a1, 4112 2251; LMULMAX2-RV64-NEXT: addiw a1, a1, 257 2252; LMULMAX2-RV64-NEXT: slli a1, a1, 16 2253; LMULMAX2-RV64-NEXT: addi a1, a1, 257 2254; LMULMAX2-RV64-NEXT: slli a1, a1, 16 2255; LMULMAX2-RV64-NEXT: addi a1, a1, 257 2256; LMULMAX2-RV64-NEXT: mul a4, a4, a1 2257; LMULMAX2-RV64-NEXT: srli a4, a4, 56 2258; LMULMAX2-RV64-NEXT: sw a4, 28(sp) 2259; LMULMAX2-RV64-NEXT: vslidedown.vi v26, v25, 2 2260; LMULMAX2-RV64-NEXT: vmv.x.s a4, v26 2261; LMULMAX2-RV64-NEXT: or a4, a4, a6 2262; LMULMAX2-RV64-NEXT: addi a2, a4, -1 2263; LMULMAX2-RV64-NEXT: not a4, a4 2264; LMULMAX2-RV64-NEXT: and a2, a4, a2 2265; LMULMAX2-RV64-NEXT: srli a4, a2, 1 2266; LMULMAX2-RV64-NEXT: and a4, a4, a7 2267; LMULMAX2-RV64-NEXT: sub a2, a2, a4 2268; LMULMAX2-RV64-NEXT: and a4, a2, a3 2269; LMULMAX2-RV64-NEXT: srli a2, a2, 2 2270; LMULMAX2-RV64-NEXT: and a2, a2, a3 2271; LMULMAX2-RV64-NEXT: add a2, a4, a2 2272; LMULMAX2-RV64-NEXT: srli a4, a2, 4 2273; LMULMAX2-RV64-NEXT: add a2, a2, a4 2274; LMULMAX2-RV64-NEXT: and a2, a2, a5 2275; LMULMAX2-RV64-NEXT: mul a2, a2, a1 2276; LMULMAX2-RV64-NEXT: srli a2, a2, 56 2277; LMULMAX2-RV64-NEXT: sw a2, 24(sp) 2278; LMULMAX2-RV64-NEXT: vslidedown.vi v26, v25, 1 2279; LMULMAX2-RV64-NEXT: vmv.x.s a2, v26 2280; LMULMAX2-RV64-NEXT: or a2, a2, a6 2281; LMULMAX2-RV64-NEXT: addi a4, a2, -1 2282; LMULMAX2-RV64-NEXT: not a2, a2 2283; LMULMAX2-RV64-NEXT: and a2, a2, a4 2284; LMULMAX2-RV64-NEXT: srli a4, a2, 1 2285; LMULMAX2-RV64-NEXT: and a4, a4, a7 2286; LMULMAX2-RV64-NEXT: sub a2, a2, a4 2287; LMULMAX2-RV64-NEXT: and a4, a2, a3 2288; LMULMAX2-RV64-NEXT: srli a2, a2, 2 2289; LMULMAX2-RV64-NEXT: and a2, a2, a3 2290; LMULMAX2-RV64-NEXT: add a2, a4, a2 2291; LMULMAX2-RV64-NEXT: srli a4, a2, 4 2292; LMULMAX2-RV64-NEXT: add a2, a2, a4 2293; LMULMAX2-RV64-NEXT: and a2, a2, a5 2294; LMULMAX2-RV64-NEXT: mul a2, a2, a1 2295; LMULMAX2-RV64-NEXT: srli a2, a2, 56 2296; LMULMAX2-RV64-NEXT: sw a2, 20(sp) 2297; LMULMAX2-RV64-NEXT: vmv.x.s a2, v25 2298; LMULMAX2-RV64-NEXT: or a2, a2, a6 2299; LMULMAX2-RV64-NEXT: addi a4, a2, -1 2300; LMULMAX2-RV64-NEXT: not a2, a2 2301; LMULMAX2-RV64-NEXT: and a2, a2, a4 2302; LMULMAX2-RV64-NEXT: srli a4, a2, 1 2303; LMULMAX2-RV64-NEXT: and a4, a4, a7 2304; LMULMAX2-RV64-NEXT: sub a2, a2, a4 2305; LMULMAX2-RV64-NEXT: and a4, a2, a3 2306; LMULMAX2-RV64-NEXT: srli a2, a2, 2 2307; LMULMAX2-RV64-NEXT: and a2, a2, a3 2308; LMULMAX2-RV64-NEXT: add a2, a4, a2 2309; LMULMAX2-RV64-NEXT: srli a3, a2, 4 2310; LMULMAX2-RV64-NEXT: add a2, a2, a3 2311; LMULMAX2-RV64-NEXT: and a2, a2, a5 2312; LMULMAX2-RV64-NEXT: mul a1, a2, a1 2313; LMULMAX2-RV64-NEXT: srli a1, a1, 56 2314; LMULMAX2-RV64-NEXT: sw a1, 16(sp) 2315; LMULMAX2-RV64-NEXT: vsetivli zero, 4, e32, m1, ta, mu 2316; LMULMAX2-RV64-NEXT: addi a1, sp, 16 2317; LMULMAX2-RV64-NEXT: vle32.v v25, (a1) 2318; LMULMAX2-RV64-NEXT: vse32.v v25, (a0) 2319; LMULMAX2-RV64-NEXT: addi sp, sp, 32 2320; LMULMAX2-RV64-NEXT: ret 2321; 2322; LMULMAX1-RV32-LABEL: cttz_v4i32: 2323; LMULMAX1-RV32: # %bb.0: 2324; LMULMAX1-RV32-NEXT: addi sp, sp, -32 2325; LMULMAX1-RV32-NEXT: .cfi_def_cfa_offset 32 2326; LMULMAX1-RV32-NEXT: vsetivli zero, 4, e32, m1, ta, mu 2327; LMULMAX1-RV32-NEXT: vle32.v v25, (a0) 2328; LMULMAX1-RV32-NEXT: vmv.x.s a1, v25 2329; LMULMAX1-RV32-NEXT: addi a2, a1, -1 2330; LMULMAX1-RV32-NEXT: not a1, a1 2331; LMULMAX1-RV32-NEXT: and a1, a1, a2 2332; LMULMAX1-RV32-NEXT: srli a2, a1, 1 2333; LMULMAX1-RV32-NEXT: lui a3, 349525 2334; LMULMAX1-RV32-NEXT: addi a6, a3, 1365 2335; LMULMAX1-RV32-NEXT: and a2, a2, a6 2336; LMULMAX1-RV32-NEXT: sub a1, a1, a2 2337; LMULMAX1-RV32-NEXT: lui a2, 209715 2338; LMULMAX1-RV32-NEXT: addi a2, a2, 819 2339; LMULMAX1-RV32-NEXT: and a4, a1, a2 2340; LMULMAX1-RV32-NEXT: srli a1, a1, 2 2341; LMULMAX1-RV32-NEXT: and a1, a1, a2 2342; LMULMAX1-RV32-NEXT: add a1, a4, a1 2343; LMULMAX1-RV32-NEXT: srli a4, a1, 4 2344; LMULMAX1-RV32-NEXT: add a1, a1, a4 2345; LMULMAX1-RV32-NEXT: lui a4, 61681 2346; LMULMAX1-RV32-NEXT: addi a4, a4, -241 2347; LMULMAX1-RV32-NEXT: and a1, a1, a4 2348; LMULMAX1-RV32-NEXT: lui a5, 4112 2349; LMULMAX1-RV32-NEXT: addi a5, a5, 257 2350; LMULMAX1-RV32-NEXT: mul a1, a1, a5 2351; LMULMAX1-RV32-NEXT: srli a1, a1, 24 2352; LMULMAX1-RV32-NEXT: sw a1, 16(sp) 2353; LMULMAX1-RV32-NEXT: vsetivli zero, 1, e32, m1, ta, mu 2354; LMULMAX1-RV32-NEXT: vslidedown.vi v26, v25, 3 2355; LMULMAX1-RV32-NEXT: vmv.x.s a1, v26 2356; LMULMAX1-RV32-NEXT: addi a3, a1, -1 2357; LMULMAX1-RV32-NEXT: not a1, a1 2358; LMULMAX1-RV32-NEXT: and a1, a1, a3 2359; LMULMAX1-RV32-NEXT: srli a3, a1, 1 2360; LMULMAX1-RV32-NEXT: and a3, a3, a6 2361; LMULMAX1-RV32-NEXT: sub a1, a1, a3 2362; LMULMAX1-RV32-NEXT: and a3, a1, a2 2363; LMULMAX1-RV32-NEXT: srli a1, a1, 2 2364; LMULMAX1-RV32-NEXT: and a1, a1, a2 2365; LMULMAX1-RV32-NEXT: add a1, a3, a1 2366; LMULMAX1-RV32-NEXT: srli a3, a1, 4 2367; LMULMAX1-RV32-NEXT: add a1, a1, a3 2368; LMULMAX1-RV32-NEXT: and a1, a1, a4 2369; LMULMAX1-RV32-NEXT: mul a1, a1, a5 2370; LMULMAX1-RV32-NEXT: srli a1, a1, 24 2371; LMULMAX1-RV32-NEXT: sw a1, 28(sp) 2372; LMULMAX1-RV32-NEXT: vslidedown.vi v26, v25, 2 2373; LMULMAX1-RV32-NEXT: vmv.x.s a1, v26 2374; LMULMAX1-RV32-NEXT: addi a3, a1, -1 2375; LMULMAX1-RV32-NEXT: not a1, a1 2376; LMULMAX1-RV32-NEXT: and a1, a1, a3 2377; LMULMAX1-RV32-NEXT: srli a3, a1, 1 2378; LMULMAX1-RV32-NEXT: and a3, a3, a6 2379; LMULMAX1-RV32-NEXT: sub a1, a1, a3 2380; LMULMAX1-RV32-NEXT: and a3, a1, a2 2381; LMULMAX1-RV32-NEXT: srli a1, a1, 2 2382; LMULMAX1-RV32-NEXT: and a1, a1, a2 2383; LMULMAX1-RV32-NEXT: add a1, a3, a1 2384; LMULMAX1-RV32-NEXT: srli a3, a1, 4 2385; LMULMAX1-RV32-NEXT: add a1, a1, a3 2386; LMULMAX1-RV32-NEXT: and a1, a1, a4 2387; LMULMAX1-RV32-NEXT: mul a1, a1, a5 2388; LMULMAX1-RV32-NEXT: srli a1, a1, 24 2389; LMULMAX1-RV32-NEXT: sw a1, 24(sp) 2390; LMULMAX1-RV32-NEXT: vslidedown.vi v25, v25, 1 2391; LMULMAX1-RV32-NEXT: vmv.x.s a1, v25 2392; LMULMAX1-RV32-NEXT: addi a3, a1, -1 2393; LMULMAX1-RV32-NEXT: not a1, a1 2394; LMULMAX1-RV32-NEXT: and a1, a1, a3 2395; LMULMAX1-RV32-NEXT: srli a3, a1, 1 2396; LMULMAX1-RV32-NEXT: and a3, a3, a6 2397; LMULMAX1-RV32-NEXT: sub a1, a1, a3 2398; LMULMAX1-RV32-NEXT: and a3, a1, a2 2399; LMULMAX1-RV32-NEXT: srli a1, a1, 2 2400; LMULMAX1-RV32-NEXT: and a1, a1, a2 2401; LMULMAX1-RV32-NEXT: add a1, a3, a1 2402; LMULMAX1-RV32-NEXT: srli a2, a1, 4 2403; LMULMAX1-RV32-NEXT: add a1, a1, a2 2404; LMULMAX1-RV32-NEXT: and a1, a1, a4 2405; LMULMAX1-RV32-NEXT: mul a1, a1, a5 2406; LMULMAX1-RV32-NEXT: srli a1, a1, 24 2407; LMULMAX1-RV32-NEXT: sw a1, 20(sp) 2408; LMULMAX1-RV32-NEXT: vsetivli zero, 4, e32, m1, ta, mu 2409; LMULMAX1-RV32-NEXT: addi a1, sp, 16 2410; LMULMAX1-RV32-NEXT: vle32.v v25, (a1) 2411; LMULMAX1-RV32-NEXT: vse32.v v25, (a0) 2412; LMULMAX1-RV32-NEXT: addi sp, sp, 32 2413; LMULMAX1-RV32-NEXT: ret 2414; 2415; LMULMAX1-RV64-LABEL: cttz_v4i32: 2416; LMULMAX1-RV64: # %bb.0: 2417; LMULMAX1-RV64-NEXT: addi sp, sp, -32 2418; LMULMAX1-RV64-NEXT: .cfi_def_cfa_offset 32 2419; LMULMAX1-RV64-NEXT: vsetivli zero, 4, e32, m1, ta, mu 2420; LMULMAX1-RV64-NEXT: vle32.v v25, (a0) 2421; LMULMAX1-RV64-NEXT: vsetivli zero, 1, e32, m1, ta, mu 2422; LMULMAX1-RV64-NEXT: vslidedown.vi v26, v25, 3 2423; LMULMAX1-RV64-NEXT: vmv.x.s a2, v26 2424; LMULMAX1-RV64-NEXT: addi a1, zero, 1 2425; LMULMAX1-RV64-NEXT: slli a6, a1, 32 2426; LMULMAX1-RV64-NEXT: or a2, a2, a6 2427; LMULMAX1-RV64-NEXT: addi a3, a2, -1 2428; LMULMAX1-RV64-NEXT: not a2, a2 2429; LMULMAX1-RV64-NEXT: and a3, a2, a3 2430; LMULMAX1-RV64-NEXT: srli a4, a3, 1 2431; LMULMAX1-RV64-NEXT: lui a2, 21845 2432; LMULMAX1-RV64-NEXT: addiw a2, a2, 1365 2433; LMULMAX1-RV64-NEXT: slli a2, a2, 12 2434; LMULMAX1-RV64-NEXT: addi a2, a2, 1365 2435; LMULMAX1-RV64-NEXT: slli a2, a2, 12 2436; LMULMAX1-RV64-NEXT: addi a2, a2, 1365 2437; LMULMAX1-RV64-NEXT: slli a2, a2, 12 2438; LMULMAX1-RV64-NEXT: addi a7, a2, 1365 2439; LMULMAX1-RV64-NEXT: and a4, a4, a7 2440; LMULMAX1-RV64-NEXT: sub a4, a3, a4 2441; LMULMAX1-RV64-NEXT: lui a3, 13107 2442; LMULMAX1-RV64-NEXT: addiw a3, a3, 819 2443; LMULMAX1-RV64-NEXT: slli a3, a3, 12 2444; LMULMAX1-RV64-NEXT: addi a3, a3, 819 2445; LMULMAX1-RV64-NEXT: slli a3, a3, 12 2446; LMULMAX1-RV64-NEXT: addi a3, a3, 819 2447; LMULMAX1-RV64-NEXT: slli a3, a3, 12 2448; LMULMAX1-RV64-NEXT: addi a3, a3, 819 2449; LMULMAX1-RV64-NEXT: and a5, a4, a3 2450; LMULMAX1-RV64-NEXT: srli a4, a4, 2 2451; LMULMAX1-RV64-NEXT: and a4, a4, a3 2452; LMULMAX1-RV64-NEXT: add a4, a5, a4 2453; LMULMAX1-RV64-NEXT: srli a5, a4, 4 2454; LMULMAX1-RV64-NEXT: add a4, a4, a5 2455; LMULMAX1-RV64-NEXT: lui a5, 3855 2456; LMULMAX1-RV64-NEXT: addiw a5, a5, 241 2457; LMULMAX1-RV64-NEXT: slli a5, a5, 12 2458; LMULMAX1-RV64-NEXT: addi a5, a5, -241 2459; LMULMAX1-RV64-NEXT: slli a5, a5, 12 2460; LMULMAX1-RV64-NEXT: addi a5, a5, 241 2461; LMULMAX1-RV64-NEXT: slli a5, a5, 12 2462; LMULMAX1-RV64-NEXT: addi a5, a5, -241 2463; LMULMAX1-RV64-NEXT: and a4, a4, a5 2464; LMULMAX1-RV64-NEXT: lui a1, 4112 2465; LMULMAX1-RV64-NEXT: addiw a1, a1, 257 2466; LMULMAX1-RV64-NEXT: slli a1, a1, 16 2467; LMULMAX1-RV64-NEXT: addi a1, a1, 257 2468; LMULMAX1-RV64-NEXT: slli a1, a1, 16 2469; LMULMAX1-RV64-NEXT: addi a1, a1, 257 2470; LMULMAX1-RV64-NEXT: mul a4, a4, a1 2471; LMULMAX1-RV64-NEXT: srli a4, a4, 56 2472; LMULMAX1-RV64-NEXT: sw a4, 28(sp) 2473; LMULMAX1-RV64-NEXT: vslidedown.vi v26, v25, 2 2474; LMULMAX1-RV64-NEXT: vmv.x.s a4, v26 2475; LMULMAX1-RV64-NEXT: or a4, a4, a6 2476; LMULMAX1-RV64-NEXT: addi a2, a4, -1 2477; LMULMAX1-RV64-NEXT: not a4, a4 2478; LMULMAX1-RV64-NEXT: and a2, a4, a2 2479; LMULMAX1-RV64-NEXT: srli a4, a2, 1 2480; LMULMAX1-RV64-NEXT: and a4, a4, a7 2481; LMULMAX1-RV64-NEXT: sub a2, a2, a4 2482; LMULMAX1-RV64-NEXT: and a4, a2, a3 2483; LMULMAX1-RV64-NEXT: srli a2, a2, 2 2484; LMULMAX1-RV64-NEXT: and a2, a2, a3 2485; LMULMAX1-RV64-NEXT: add a2, a4, a2 2486; LMULMAX1-RV64-NEXT: srli a4, a2, 4 2487; LMULMAX1-RV64-NEXT: add a2, a2, a4 2488; LMULMAX1-RV64-NEXT: and a2, a2, a5 2489; LMULMAX1-RV64-NEXT: mul a2, a2, a1 2490; LMULMAX1-RV64-NEXT: srli a2, a2, 56 2491; LMULMAX1-RV64-NEXT: sw a2, 24(sp) 2492; LMULMAX1-RV64-NEXT: vslidedown.vi v26, v25, 1 2493; LMULMAX1-RV64-NEXT: vmv.x.s a2, v26 2494; LMULMAX1-RV64-NEXT: or a2, a2, a6 2495; LMULMAX1-RV64-NEXT: addi a4, a2, -1 2496; LMULMAX1-RV64-NEXT: not a2, a2 2497; LMULMAX1-RV64-NEXT: and a2, a2, a4 2498; LMULMAX1-RV64-NEXT: srli a4, a2, 1 2499; LMULMAX1-RV64-NEXT: and a4, a4, a7 2500; LMULMAX1-RV64-NEXT: sub a2, a2, a4 2501; LMULMAX1-RV64-NEXT: and a4, a2, a3 2502; LMULMAX1-RV64-NEXT: srli a2, a2, 2 2503; LMULMAX1-RV64-NEXT: and a2, a2, a3 2504; LMULMAX1-RV64-NEXT: add a2, a4, a2 2505; LMULMAX1-RV64-NEXT: srli a4, a2, 4 2506; LMULMAX1-RV64-NEXT: add a2, a2, a4 2507; LMULMAX1-RV64-NEXT: and a2, a2, a5 2508; LMULMAX1-RV64-NEXT: mul a2, a2, a1 2509; LMULMAX1-RV64-NEXT: srli a2, a2, 56 2510; LMULMAX1-RV64-NEXT: sw a2, 20(sp) 2511; LMULMAX1-RV64-NEXT: vmv.x.s a2, v25 2512; LMULMAX1-RV64-NEXT: or a2, a2, a6 2513; LMULMAX1-RV64-NEXT: addi a4, a2, -1 2514; LMULMAX1-RV64-NEXT: not a2, a2 2515; LMULMAX1-RV64-NEXT: and a2, a2, a4 2516; LMULMAX1-RV64-NEXT: srli a4, a2, 1 2517; LMULMAX1-RV64-NEXT: and a4, a4, a7 2518; LMULMAX1-RV64-NEXT: sub a2, a2, a4 2519; LMULMAX1-RV64-NEXT: and a4, a2, a3 2520; LMULMAX1-RV64-NEXT: srli a2, a2, 2 2521; LMULMAX1-RV64-NEXT: and a2, a2, a3 2522; LMULMAX1-RV64-NEXT: add a2, a4, a2 2523; LMULMAX1-RV64-NEXT: srli a3, a2, 4 2524; LMULMAX1-RV64-NEXT: add a2, a2, a3 2525; LMULMAX1-RV64-NEXT: and a2, a2, a5 2526; LMULMAX1-RV64-NEXT: mul a1, a2, a1 2527; LMULMAX1-RV64-NEXT: srli a1, a1, 56 2528; LMULMAX1-RV64-NEXT: sw a1, 16(sp) 2529; LMULMAX1-RV64-NEXT: vsetivli zero, 4, e32, m1, ta, mu 2530; LMULMAX1-RV64-NEXT: addi a1, sp, 16 2531; LMULMAX1-RV64-NEXT: vle32.v v25, (a1) 2532; LMULMAX1-RV64-NEXT: vse32.v v25, (a0) 2533; LMULMAX1-RV64-NEXT: addi sp, sp, 32 2534; LMULMAX1-RV64-NEXT: ret 2535 %a = load <4 x i32>, <4 x i32>* %x 2536 %b = load <4 x i32>, <4 x i32>* %y 2537 %c = call <4 x i32> @llvm.cttz.v4i32(<4 x i32> %a, i1 false) 2538 store <4 x i32> %c, <4 x i32>* %x 2539 ret void 2540} 2541declare <4 x i32> @llvm.cttz.v4i32(<4 x i32>, i1) 2542 2543define void @cttz_v2i64(<2 x i64>* %x, <2 x i64>* %y) { 2544; LMULMAX2-RV32-LABEL: cttz_v2i64: 2545; LMULMAX2-RV32: # %bb.0: 2546; LMULMAX2-RV32-NEXT: addi sp, sp, -32 2547; LMULMAX2-RV32-NEXT: .cfi_def_cfa_offset 32 2548; LMULMAX2-RV32-NEXT: vsetivli zero, 2, e64, m1, ta, mu 2549; LMULMAX2-RV32-NEXT: vle64.v v25, (a0) 2550; LMULMAX2-RV32-NEXT: sw zero, 28(sp) 2551; LMULMAX2-RV32-NEXT: sw zero, 20(sp) 2552; LMULMAX2-RV32-NEXT: addi a6, zero, 32 2553; LMULMAX2-RV32-NEXT: lui a1, 349525 2554; LMULMAX2-RV32-NEXT: addi a4, a1, 1365 2555; LMULMAX2-RV32-NEXT: lui a1, 209715 2556; LMULMAX2-RV32-NEXT: addi a3, a1, 819 2557; LMULMAX2-RV32-NEXT: lui a1, 61681 2558; LMULMAX2-RV32-NEXT: addi a7, a1, -241 2559; LMULMAX2-RV32-NEXT: lui a2, 4112 2560; LMULMAX2-RV32-NEXT: vmv.x.s a5, v25 2561; LMULMAX2-RV32-NEXT: addi a2, a2, 257 2562; LMULMAX2-RV32-NEXT: bnez a5, .LBB3_2 2563; LMULMAX2-RV32-NEXT: # %bb.1: 2564; LMULMAX2-RV32-NEXT: vsetivli zero, 1, e64, m1, ta, mu 2565; LMULMAX2-RV32-NEXT: vsrl.vx v26, v25, a6 2566; LMULMAX2-RV32-NEXT: vmv.x.s a1, v26 2567; LMULMAX2-RV32-NEXT: addi a5, a1, -1 2568; LMULMAX2-RV32-NEXT: not a1, a1 2569; LMULMAX2-RV32-NEXT: and a1, a1, a5 2570; LMULMAX2-RV32-NEXT: srli a5, a1, 1 2571; LMULMAX2-RV32-NEXT: and a5, a5, a4 2572; LMULMAX2-RV32-NEXT: sub a1, a1, a5 2573; LMULMAX2-RV32-NEXT: and a5, a1, a3 2574; LMULMAX2-RV32-NEXT: srli a1, a1, 2 2575; LMULMAX2-RV32-NEXT: and a1, a1, a3 2576; LMULMAX2-RV32-NEXT: add a1, a5, a1 2577; LMULMAX2-RV32-NEXT: srli a5, a1, 4 2578; LMULMAX2-RV32-NEXT: add a1, a1, a5 2579; LMULMAX2-RV32-NEXT: and a1, a1, a7 2580; LMULMAX2-RV32-NEXT: mul a1, a1, a2 2581; LMULMAX2-RV32-NEXT: srli a1, a1, 24 2582; LMULMAX2-RV32-NEXT: addi a5, a1, 32 2583; LMULMAX2-RV32-NEXT: j .LBB3_3 2584; LMULMAX2-RV32-NEXT: .LBB3_2: 2585; LMULMAX2-RV32-NEXT: addi a1, a5, -1 2586; LMULMAX2-RV32-NEXT: not a5, a5 2587; LMULMAX2-RV32-NEXT: and a1, a5, a1 2588; LMULMAX2-RV32-NEXT: srli a5, a1, 1 2589; LMULMAX2-RV32-NEXT: and a5, a5, a4 2590; LMULMAX2-RV32-NEXT: sub a1, a1, a5 2591; LMULMAX2-RV32-NEXT: and a5, a1, a3 2592; LMULMAX2-RV32-NEXT: srli a1, a1, 2 2593; LMULMAX2-RV32-NEXT: and a1, a1, a3 2594; LMULMAX2-RV32-NEXT: add a1, a5, a1 2595; LMULMAX2-RV32-NEXT: srli a5, a1, 4 2596; LMULMAX2-RV32-NEXT: add a1, a1, a5 2597; LMULMAX2-RV32-NEXT: and a1, a1, a7 2598; LMULMAX2-RV32-NEXT: mul a1, a1, a2 2599; LMULMAX2-RV32-NEXT: srli a5, a1, 24 2600; LMULMAX2-RV32-NEXT: .LBB3_3: 2601; LMULMAX2-RV32-NEXT: sw a5, 16(sp) 2602; LMULMAX2-RV32-NEXT: vsetivli zero, 1, e64, m1, ta, mu 2603; LMULMAX2-RV32-NEXT: vslidedown.vi v25, v25, 1 2604; LMULMAX2-RV32-NEXT: vmv.x.s a5, v25 2605; LMULMAX2-RV32-NEXT: bnez a5, .LBB3_5 2606; LMULMAX2-RV32-NEXT: # %bb.4: 2607; LMULMAX2-RV32-NEXT: vsrl.vx v25, v25, a6 2608; LMULMAX2-RV32-NEXT: vmv.x.s a1, v25 2609; LMULMAX2-RV32-NEXT: addi a5, a1, -1 2610; LMULMAX2-RV32-NEXT: not a1, a1 2611; LMULMAX2-RV32-NEXT: and a1, a1, a5 2612; LMULMAX2-RV32-NEXT: srli a5, a1, 1 2613; LMULMAX2-RV32-NEXT: and a4, a5, a4 2614; LMULMAX2-RV32-NEXT: sub a1, a1, a4 2615; LMULMAX2-RV32-NEXT: and a4, a1, a3 2616; LMULMAX2-RV32-NEXT: srli a1, a1, 2 2617; LMULMAX2-RV32-NEXT: and a1, a1, a3 2618; LMULMAX2-RV32-NEXT: add a1, a4, a1 2619; LMULMAX2-RV32-NEXT: srli a3, a1, 4 2620; LMULMAX2-RV32-NEXT: add a1, a1, a3 2621; LMULMAX2-RV32-NEXT: and a1, a1, a7 2622; LMULMAX2-RV32-NEXT: mul a1, a1, a2 2623; LMULMAX2-RV32-NEXT: srli a1, a1, 24 2624; LMULMAX2-RV32-NEXT: addi a1, a1, 32 2625; LMULMAX2-RV32-NEXT: j .LBB3_6 2626; LMULMAX2-RV32-NEXT: .LBB3_5: 2627; LMULMAX2-RV32-NEXT: addi a1, a5, -1 2628; LMULMAX2-RV32-NEXT: not a5, a5 2629; LMULMAX2-RV32-NEXT: and a1, a5, a1 2630; LMULMAX2-RV32-NEXT: srli a5, a1, 1 2631; LMULMAX2-RV32-NEXT: and a4, a5, a4 2632; LMULMAX2-RV32-NEXT: sub a1, a1, a4 2633; LMULMAX2-RV32-NEXT: and a4, a1, a3 2634; LMULMAX2-RV32-NEXT: srli a1, a1, 2 2635; LMULMAX2-RV32-NEXT: and a1, a1, a3 2636; LMULMAX2-RV32-NEXT: add a1, a4, a1 2637; LMULMAX2-RV32-NEXT: srli a3, a1, 4 2638; LMULMAX2-RV32-NEXT: add a1, a1, a3 2639; LMULMAX2-RV32-NEXT: and a1, a1, a7 2640; LMULMAX2-RV32-NEXT: mul a1, a1, a2 2641; LMULMAX2-RV32-NEXT: srli a1, a1, 24 2642; LMULMAX2-RV32-NEXT: .LBB3_6: 2643; LMULMAX2-RV32-NEXT: sw a1, 24(sp) 2644; LMULMAX2-RV32-NEXT: vsetivli zero, 4, e32, m1, ta, mu 2645; LMULMAX2-RV32-NEXT: addi a1, sp, 16 2646; LMULMAX2-RV32-NEXT: vle32.v v25, (a1) 2647; LMULMAX2-RV32-NEXT: vsetivli zero, 2, e64, m1, ta, mu 2648; LMULMAX2-RV32-NEXT: vse64.v v25, (a0) 2649; LMULMAX2-RV32-NEXT: addi sp, sp, 32 2650; LMULMAX2-RV32-NEXT: ret 2651; 2652; LMULMAX2-RV64-LABEL: cttz_v2i64: 2653; LMULMAX2-RV64: # %bb.0: 2654; LMULMAX2-RV64-NEXT: vsetivli zero, 2, e64, m1, ta, mu 2655; LMULMAX2-RV64-NEXT: vle64.v v25, (a0) 2656; LMULMAX2-RV64-NEXT: vsetivli zero, 1, e64, m1, ta, mu 2657; LMULMAX2-RV64-NEXT: vslidedown.vi v26, v25, 1 2658; LMULMAX2-RV64-NEXT: vmv.x.s a1, v26 2659; LMULMAX2-RV64-NEXT: addi a2, a1, -1 2660; LMULMAX2-RV64-NEXT: not a1, a1 2661; LMULMAX2-RV64-NEXT: and a1, a1, a2 2662; LMULMAX2-RV64-NEXT: srli a2, a1, 1 2663; LMULMAX2-RV64-NEXT: lui a3, 21845 2664; LMULMAX2-RV64-NEXT: addiw a3, a3, 1365 2665; LMULMAX2-RV64-NEXT: slli a3, a3, 12 2666; LMULMAX2-RV64-NEXT: addi a3, a3, 1365 2667; LMULMAX2-RV64-NEXT: slli a3, a3, 12 2668; LMULMAX2-RV64-NEXT: addi a3, a3, 1365 2669; LMULMAX2-RV64-NEXT: slli a3, a3, 12 2670; LMULMAX2-RV64-NEXT: addi a6, a3, 1365 2671; LMULMAX2-RV64-NEXT: and a2, a2, a6 2672; LMULMAX2-RV64-NEXT: sub a1, a1, a2 2673; LMULMAX2-RV64-NEXT: lui a2, 13107 2674; LMULMAX2-RV64-NEXT: addiw a2, a2, 819 2675; LMULMAX2-RV64-NEXT: slli a2, a2, 12 2676; LMULMAX2-RV64-NEXT: addi a2, a2, 819 2677; LMULMAX2-RV64-NEXT: slli a2, a2, 12 2678; LMULMAX2-RV64-NEXT: addi a2, a2, 819 2679; LMULMAX2-RV64-NEXT: slli a2, a2, 12 2680; LMULMAX2-RV64-NEXT: addi a2, a2, 819 2681; LMULMAX2-RV64-NEXT: and a4, a1, a2 2682; LMULMAX2-RV64-NEXT: srli a1, a1, 2 2683; LMULMAX2-RV64-NEXT: and a1, a1, a2 2684; LMULMAX2-RV64-NEXT: add a1, a4, a1 2685; LMULMAX2-RV64-NEXT: srli a4, a1, 4 2686; LMULMAX2-RV64-NEXT: add a1, a1, a4 2687; LMULMAX2-RV64-NEXT: lui a4, 3855 2688; LMULMAX2-RV64-NEXT: addiw a4, a4, 241 2689; LMULMAX2-RV64-NEXT: slli a4, a4, 12 2690; LMULMAX2-RV64-NEXT: addi a4, a4, -241 2691; LMULMAX2-RV64-NEXT: slli a4, a4, 12 2692; LMULMAX2-RV64-NEXT: addi a4, a4, 241 2693; LMULMAX2-RV64-NEXT: slli a4, a4, 12 2694; LMULMAX2-RV64-NEXT: addi a4, a4, -241 2695; LMULMAX2-RV64-NEXT: and a1, a1, a4 2696; LMULMAX2-RV64-NEXT: lui a5, 4112 2697; LMULMAX2-RV64-NEXT: addiw a5, a5, 257 2698; LMULMAX2-RV64-NEXT: slli a5, a5, 16 2699; LMULMAX2-RV64-NEXT: addi a5, a5, 257 2700; LMULMAX2-RV64-NEXT: slli a5, a5, 16 2701; LMULMAX2-RV64-NEXT: addi a5, a5, 257 2702; LMULMAX2-RV64-NEXT: mul a1, a1, a5 2703; LMULMAX2-RV64-NEXT: srli a1, a1, 56 2704; LMULMAX2-RV64-NEXT: vsetivli zero, 2, e64, m1, ta, mu 2705; LMULMAX2-RV64-NEXT: vmv.v.x v26, a1 2706; LMULMAX2-RV64-NEXT: vmv.x.s a1, v25 2707; LMULMAX2-RV64-NEXT: addi a3, a1, -1 2708; LMULMAX2-RV64-NEXT: not a1, a1 2709; LMULMAX2-RV64-NEXT: and a1, a1, a3 2710; LMULMAX2-RV64-NEXT: srli a3, a1, 1 2711; LMULMAX2-RV64-NEXT: and a3, a3, a6 2712; LMULMAX2-RV64-NEXT: sub a1, a1, a3 2713; LMULMAX2-RV64-NEXT: and a3, a1, a2 2714; LMULMAX2-RV64-NEXT: srli a1, a1, 2 2715; LMULMAX2-RV64-NEXT: and a1, a1, a2 2716; LMULMAX2-RV64-NEXT: add a1, a3, a1 2717; LMULMAX2-RV64-NEXT: srli a2, a1, 4 2718; LMULMAX2-RV64-NEXT: add a1, a1, a2 2719; LMULMAX2-RV64-NEXT: and a1, a1, a4 2720; LMULMAX2-RV64-NEXT: mul a1, a1, a5 2721; LMULMAX2-RV64-NEXT: srli a1, a1, 56 2722; LMULMAX2-RV64-NEXT: vsetvli zero, zero, e64, m1, tu, mu 2723; LMULMAX2-RV64-NEXT: vmv.s.x v26, a1 2724; LMULMAX2-RV64-NEXT: vsetvli zero, zero, e64, m1, ta, mu 2725; LMULMAX2-RV64-NEXT: vse64.v v26, (a0) 2726; LMULMAX2-RV64-NEXT: ret 2727; 2728; LMULMAX1-RV32-LABEL: cttz_v2i64: 2729; LMULMAX1-RV32: # %bb.0: 2730; LMULMAX1-RV32-NEXT: addi sp, sp, -32 2731; LMULMAX1-RV32-NEXT: .cfi_def_cfa_offset 32 2732; LMULMAX1-RV32-NEXT: vsetivli zero, 2, e64, m1, ta, mu 2733; LMULMAX1-RV32-NEXT: vle64.v v25, (a0) 2734; LMULMAX1-RV32-NEXT: sw zero, 28(sp) 2735; LMULMAX1-RV32-NEXT: sw zero, 20(sp) 2736; LMULMAX1-RV32-NEXT: addi a6, zero, 32 2737; LMULMAX1-RV32-NEXT: lui a1, 349525 2738; LMULMAX1-RV32-NEXT: addi a4, a1, 1365 2739; LMULMAX1-RV32-NEXT: lui a1, 209715 2740; LMULMAX1-RV32-NEXT: addi a3, a1, 819 2741; LMULMAX1-RV32-NEXT: lui a1, 61681 2742; LMULMAX1-RV32-NEXT: addi a7, a1, -241 2743; LMULMAX1-RV32-NEXT: lui a2, 4112 2744; LMULMAX1-RV32-NEXT: vmv.x.s a5, v25 2745; LMULMAX1-RV32-NEXT: addi a2, a2, 257 2746; LMULMAX1-RV32-NEXT: bnez a5, .LBB3_2 2747; LMULMAX1-RV32-NEXT: # %bb.1: 2748; LMULMAX1-RV32-NEXT: vsetivli zero, 1, e64, m1, ta, mu 2749; LMULMAX1-RV32-NEXT: vsrl.vx v26, v25, a6 2750; LMULMAX1-RV32-NEXT: vmv.x.s a1, v26 2751; LMULMAX1-RV32-NEXT: addi a5, a1, -1 2752; LMULMAX1-RV32-NEXT: not a1, a1 2753; LMULMAX1-RV32-NEXT: and a1, a1, a5 2754; LMULMAX1-RV32-NEXT: srli a5, a1, 1 2755; LMULMAX1-RV32-NEXT: and a5, a5, a4 2756; LMULMAX1-RV32-NEXT: sub a1, a1, a5 2757; LMULMAX1-RV32-NEXT: and a5, a1, a3 2758; LMULMAX1-RV32-NEXT: srli a1, a1, 2 2759; LMULMAX1-RV32-NEXT: and a1, a1, a3 2760; LMULMAX1-RV32-NEXT: add a1, a5, a1 2761; LMULMAX1-RV32-NEXT: srli a5, a1, 4 2762; LMULMAX1-RV32-NEXT: add a1, a1, a5 2763; LMULMAX1-RV32-NEXT: and a1, a1, a7 2764; LMULMAX1-RV32-NEXT: mul a1, a1, a2 2765; LMULMAX1-RV32-NEXT: srli a1, a1, 24 2766; LMULMAX1-RV32-NEXT: addi a5, a1, 32 2767; LMULMAX1-RV32-NEXT: j .LBB3_3 2768; LMULMAX1-RV32-NEXT: .LBB3_2: 2769; LMULMAX1-RV32-NEXT: addi a1, a5, -1 2770; LMULMAX1-RV32-NEXT: not a5, a5 2771; LMULMAX1-RV32-NEXT: and a1, a5, a1 2772; LMULMAX1-RV32-NEXT: srli a5, a1, 1 2773; LMULMAX1-RV32-NEXT: and a5, a5, a4 2774; LMULMAX1-RV32-NEXT: sub a1, a1, a5 2775; LMULMAX1-RV32-NEXT: and a5, a1, a3 2776; LMULMAX1-RV32-NEXT: srli a1, a1, 2 2777; LMULMAX1-RV32-NEXT: and a1, a1, a3 2778; LMULMAX1-RV32-NEXT: add a1, a5, a1 2779; LMULMAX1-RV32-NEXT: srli a5, a1, 4 2780; LMULMAX1-RV32-NEXT: add a1, a1, a5 2781; LMULMAX1-RV32-NEXT: and a1, a1, a7 2782; LMULMAX1-RV32-NEXT: mul a1, a1, a2 2783; LMULMAX1-RV32-NEXT: srli a5, a1, 24 2784; LMULMAX1-RV32-NEXT: .LBB3_3: 2785; LMULMAX1-RV32-NEXT: sw a5, 16(sp) 2786; LMULMAX1-RV32-NEXT: vsetivli zero, 1, e64, m1, ta, mu 2787; LMULMAX1-RV32-NEXT: vslidedown.vi v25, v25, 1 2788; LMULMAX1-RV32-NEXT: vmv.x.s a5, v25 2789; LMULMAX1-RV32-NEXT: bnez a5, .LBB3_5 2790; LMULMAX1-RV32-NEXT: # %bb.4: 2791; LMULMAX1-RV32-NEXT: vsrl.vx v25, v25, a6 2792; LMULMAX1-RV32-NEXT: vmv.x.s a1, v25 2793; LMULMAX1-RV32-NEXT: addi a5, a1, -1 2794; LMULMAX1-RV32-NEXT: not a1, a1 2795; LMULMAX1-RV32-NEXT: and a1, a1, a5 2796; LMULMAX1-RV32-NEXT: srli a5, a1, 1 2797; LMULMAX1-RV32-NEXT: and a4, a5, a4 2798; LMULMAX1-RV32-NEXT: sub a1, a1, a4 2799; LMULMAX1-RV32-NEXT: and a4, a1, a3 2800; LMULMAX1-RV32-NEXT: srli a1, a1, 2 2801; LMULMAX1-RV32-NEXT: and a1, a1, a3 2802; LMULMAX1-RV32-NEXT: add a1, a4, a1 2803; LMULMAX1-RV32-NEXT: srli a3, a1, 4 2804; LMULMAX1-RV32-NEXT: add a1, a1, a3 2805; LMULMAX1-RV32-NEXT: and a1, a1, a7 2806; LMULMAX1-RV32-NEXT: mul a1, a1, a2 2807; LMULMAX1-RV32-NEXT: srli a1, a1, 24 2808; LMULMAX1-RV32-NEXT: addi a1, a1, 32 2809; LMULMAX1-RV32-NEXT: j .LBB3_6 2810; LMULMAX1-RV32-NEXT: .LBB3_5: 2811; LMULMAX1-RV32-NEXT: addi a1, a5, -1 2812; LMULMAX1-RV32-NEXT: not a5, a5 2813; LMULMAX1-RV32-NEXT: and a1, a5, a1 2814; LMULMAX1-RV32-NEXT: srli a5, a1, 1 2815; LMULMAX1-RV32-NEXT: and a4, a5, a4 2816; LMULMAX1-RV32-NEXT: sub a1, a1, a4 2817; LMULMAX1-RV32-NEXT: and a4, a1, a3 2818; LMULMAX1-RV32-NEXT: srli a1, a1, 2 2819; LMULMAX1-RV32-NEXT: and a1, a1, a3 2820; LMULMAX1-RV32-NEXT: add a1, a4, a1 2821; LMULMAX1-RV32-NEXT: srli a3, a1, 4 2822; LMULMAX1-RV32-NEXT: add a1, a1, a3 2823; LMULMAX1-RV32-NEXT: and a1, a1, a7 2824; LMULMAX1-RV32-NEXT: mul a1, a1, a2 2825; LMULMAX1-RV32-NEXT: srli a1, a1, 24 2826; LMULMAX1-RV32-NEXT: .LBB3_6: 2827; LMULMAX1-RV32-NEXT: sw a1, 24(sp) 2828; LMULMAX1-RV32-NEXT: vsetivli zero, 4, e32, m1, ta, mu 2829; LMULMAX1-RV32-NEXT: addi a1, sp, 16 2830; LMULMAX1-RV32-NEXT: vle32.v v25, (a1) 2831; LMULMAX1-RV32-NEXT: vsetivli zero, 2, e64, m1, ta, mu 2832; LMULMAX1-RV32-NEXT: vse64.v v25, (a0) 2833; LMULMAX1-RV32-NEXT: addi sp, sp, 32 2834; LMULMAX1-RV32-NEXT: ret 2835; 2836; LMULMAX1-RV64-LABEL: cttz_v2i64: 2837; LMULMAX1-RV64: # %bb.0: 2838; LMULMAX1-RV64-NEXT: vsetivli zero, 2, e64, m1, ta, mu 2839; LMULMAX1-RV64-NEXT: vle64.v v25, (a0) 2840; LMULMAX1-RV64-NEXT: vsetivli zero, 1, e64, m1, ta, mu 2841; LMULMAX1-RV64-NEXT: vslidedown.vi v26, v25, 1 2842; LMULMAX1-RV64-NEXT: vmv.x.s a1, v26 2843; LMULMAX1-RV64-NEXT: addi a2, a1, -1 2844; LMULMAX1-RV64-NEXT: not a1, a1 2845; LMULMAX1-RV64-NEXT: and a1, a1, a2 2846; LMULMAX1-RV64-NEXT: srli a2, a1, 1 2847; LMULMAX1-RV64-NEXT: lui a3, 21845 2848; LMULMAX1-RV64-NEXT: addiw a3, a3, 1365 2849; LMULMAX1-RV64-NEXT: slli a3, a3, 12 2850; LMULMAX1-RV64-NEXT: addi a3, a3, 1365 2851; LMULMAX1-RV64-NEXT: slli a3, a3, 12 2852; LMULMAX1-RV64-NEXT: addi a3, a3, 1365 2853; LMULMAX1-RV64-NEXT: slli a3, a3, 12 2854; LMULMAX1-RV64-NEXT: addi a6, a3, 1365 2855; LMULMAX1-RV64-NEXT: and a2, a2, a6 2856; LMULMAX1-RV64-NEXT: sub a1, a1, a2 2857; LMULMAX1-RV64-NEXT: lui a2, 13107 2858; LMULMAX1-RV64-NEXT: addiw a2, a2, 819 2859; LMULMAX1-RV64-NEXT: slli a2, a2, 12 2860; LMULMAX1-RV64-NEXT: addi a2, a2, 819 2861; LMULMAX1-RV64-NEXT: slli a2, a2, 12 2862; LMULMAX1-RV64-NEXT: addi a2, a2, 819 2863; LMULMAX1-RV64-NEXT: slli a2, a2, 12 2864; LMULMAX1-RV64-NEXT: addi a2, a2, 819 2865; LMULMAX1-RV64-NEXT: and a4, a1, a2 2866; LMULMAX1-RV64-NEXT: srli a1, a1, 2 2867; LMULMAX1-RV64-NEXT: and a1, a1, a2 2868; LMULMAX1-RV64-NEXT: add a1, a4, a1 2869; LMULMAX1-RV64-NEXT: srli a4, a1, 4 2870; LMULMAX1-RV64-NEXT: add a1, a1, a4 2871; LMULMAX1-RV64-NEXT: lui a4, 3855 2872; LMULMAX1-RV64-NEXT: addiw a4, a4, 241 2873; LMULMAX1-RV64-NEXT: slli a4, a4, 12 2874; LMULMAX1-RV64-NEXT: addi a4, a4, -241 2875; LMULMAX1-RV64-NEXT: slli a4, a4, 12 2876; LMULMAX1-RV64-NEXT: addi a4, a4, 241 2877; LMULMAX1-RV64-NEXT: slli a4, a4, 12 2878; LMULMAX1-RV64-NEXT: addi a4, a4, -241 2879; LMULMAX1-RV64-NEXT: and a1, a1, a4 2880; LMULMAX1-RV64-NEXT: lui a5, 4112 2881; LMULMAX1-RV64-NEXT: addiw a5, a5, 257 2882; LMULMAX1-RV64-NEXT: slli a5, a5, 16 2883; LMULMAX1-RV64-NEXT: addi a5, a5, 257 2884; LMULMAX1-RV64-NEXT: slli a5, a5, 16 2885; LMULMAX1-RV64-NEXT: addi a5, a5, 257 2886; LMULMAX1-RV64-NEXT: mul a1, a1, a5 2887; LMULMAX1-RV64-NEXT: srli a1, a1, 56 2888; LMULMAX1-RV64-NEXT: vsetivli zero, 2, e64, m1, ta, mu 2889; LMULMAX1-RV64-NEXT: vmv.v.x v26, a1 2890; LMULMAX1-RV64-NEXT: vmv.x.s a1, v25 2891; LMULMAX1-RV64-NEXT: addi a3, a1, -1 2892; LMULMAX1-RV64-NEXT: not a1, a1 2893; LMULMAX1-RV64-NEXT: and a1, a1, a3 2894; LMULMAX1-RV64-NEXT: srli a3, a1, 1 2895; LMULMAX1-RV64-NEXT: and a3, a3, a6 2896; LMULMAX1-RV64-NEXT: sub a1, a1, a3 2897; LMULMAX1-RV64-NEXT: and a3, a1, a2 2898; LMULMAX1-RV64-NEXT: srli a1, a1, 2 2899; LMULMAX1-RV64-NEXT: and a1, a1, a2 2900; LMULMAX1-RV64-NEXT: add a1, a3, a1 2901; LMULMAX1-RV64-NEXT: srli a2, a1, 4 2902; LMULMAX1-RV64-NEXT: add a1, a1, a2 2903; LMULMAX1-RV64-NEXT: and a1, a1, a4 2904; LMULMAX1-RV64-NEXT: mul a1, a1, a5 2905; LMULMAX1-RV64-NEXT: srli a1, a1, 56 2906; LMULMAX1-RV64-NEXT: vsetvli zero, zero, e64, m1, tu, mu 2907; LMULMAX1-RV64-NEXT: vmv.s.x v26, a1 2908; LMULMAX1-RV64-NEXT: vsetvli zero, zero, e64, m1, ta, mu 2909; LMULMAX1-RV64-NEXT: vse64.v v26, (a0) 2910; LMULMAX1-RV64-NEXT: ret 2911 %a = load <2 x i64>, <2 x i64>* %x 2912 %b = load <2 x i64>, <2 x i64>* %y 2913 %c = call <2 x i64> @llvm.cttz.v2i64(<2 x i64> %a, i1 false) 2914 store <2 x i64> %c, <2 x i64>* %x 2915 ret void 2916} 2917declare <2 x i64> @llvm.cttz.v2i64(<2 x i64>, i1) 2918 2919define void @cttz_v32i8(<32 x i8>* %x, <32 x i8>* %y) { 2920; LMULMAX2-RV32-LABEL: cttz_v32i8: 2921; LMULMAX2-RV32: # %bb.0: 2922; LMULMAX2-RV32-NEXT: addi sp, sp, -96 2923; LMULMAX2-RV32-NEXT: .cfi_def_cfa_offset 96 2924; LMULMAX2-RV32-NEXT: sw ra, 92(sp) # 4-byte Folded Spill 2925; LMULMAX2-RV32-NEXT: sw s0, 88(sp) # 4-byte Folded Spill 2926; LMULMAX2-RV32-NEXT: .cfi_offset ra, -4 2927; LMULMAX2-RV32-NEXT: .cfi_offset s0, -8 2928; LMULMAX2-RV32-NEXT: addi s0, sp, 96 2929; LMULMAX2-RV32-NEXT: .cfi_def_cfa s0, 0 2930; LMULMAX2-RV32-NEXT: andi sp, sp, -32 2931; LMULMAX2-RV32-NEXT: addi a6, zero, 32 2932; LMULMAX2-RV32-NEXT: vsetvli zero, a6, e8, m2, ta, mu 2933; LMULMAX2-RV32-NEXT: vle8.v v26, (a0) 2934; LMULMAX2-RV32-NEXT: vmv.x.s a2, v26 2935; LMULMAX2-RV32-NEXT: ori a2, a2, 256 2936; LMULMAX2-RV32-NEXT: addi a3, a2, -1 2937; LMULMAX2-RV32-NEXT: not a2, a2 2938; LMULMAX2-RV32-NEXT: and a3, a2, a3 2939; LMULMAX2-RV32-NEXT: srli a4, a3, 1 2940; LMULMAX2-RV32-NEXT: lui a2, 349525 2941; LMULMAX2-RV32-NEXT: addi a7, a2, 1365 2942; LMULMAX2-RV32-NEXT: and a4, a4, a7 2943; LMULMAX2-RV32-NEXT: sub a4, a3, a4 2944; LMULMAX2-RV32-NEXT: lui a3, 209715 2945; LMULMAX2-RV32-NEXT: addi a3, a3, 819 2946; LMULMAX2-RV32-NEXT: and a5, a4, a3 2947; LMULMAX2-RV32-NEXT: srli a4, a4, 2 2948; LMULMAX2-RV32-NEXT: and a4, a4, a3 2949; LMULMAX2-RV32-NEXT: add a4, a5, a4 2950; LMULMAX2-RV32-NEXT: srli a5, a4, 4 2951; LMULMAX2-RV32-NEXT: add a5, a4, a5 2952; LMULMAX2-RV32-NEXT: lui a4, 61681 2953; LMULMAX2-RV32-NEXT: addi a4, a4, -241 2954; LMULMAX2-RV32-NEXT: and a1, a5, a4 2955; LMULMAX2-RV32-NEXT: lui a5, 4112 2956; LMULMAX2-RV32-NEXT: addi a5, a5, 257 2957; LMULMAX2-RV32-NEXT: mul a1, a1, a5 2958; LMULMAX2-RV32-NEXT: srli a1, a1, 24 2959; LMULMAX2-RV32-NEXT: sb a1, 32(sp) 2960; LMULMAX2-RV32-NEXT: vsetivli zero, 1, e8, m2, ta, mu 2961; LMULMAX2-RV32-NEXT: vslidedown.vi v28, v26, 31 2962; LMULMAX2-RV32-NEXT: vmv.x.s a1, v28 2963; LMULMAX2-RV32-NEXT: ori a1, a1, 256 2964; LMULMAX2-RV32-NEXT: addi a2, a1, -1 2965; LMULMAX2-RV32-NEXT: not a1, a1 2966; LMULMAX2-RV32-NEXT: and a1, a1, a2 2967; LMULMAX2-RV32-NEXT: srli a2, a1, 1 2968; LMULMAX2-RV32-NEXT: and a2, a2, a7 2969; LMULMAX2-RV32-NEXT: sub a1, a1, a2 2970; LMULMAX2-RV32-NEXT: and a2, a1, a3 2971; LMULMAX2-RV32-NEXT: srli a1, a1, 2 2972; LMULMAX2-RV32-NEXT: and a1, a1, a3 2973; LMULMAX2-RV32-NEXT: add a1, a2, a1 2974; LMULMAX2-RV32-NEXT: srli a2, a1, 4 2975; LMULMAX2-RV32-NEXT: add a1, a1, a2 2976; LMULMAX2-RV32-NEXT: and a1, a1, a4 2977; LMULMAX2-RV32-NEXT: mul a1, a1, a5 2978; LMULMAX2-RV32-NEXT: srli a1, a1, 24 2979; LMULMAX2-RV32-NEXT: sb a1, 63(sp) 2980; LMULMAX2-RV32-NEXT: vslidedown.vi v28, v26, 30 2981; LMULMAX2-RV32-NEXT: vmv.x.s a1, v28 2982; LMULMAX2-RV32-NEXT: ori a1, a1, 256 2983; LMULMAX2-RV32-NEXT: addi a2, a1, -1 2984; LMULMAX2-RV32-NEXT: not a1, a1 2985; LMULMAX2-RV32-NEXT: and a1, a1, a2 2986; LMULMAX2-RV32-NEXT: srli a2, a1, 1 2987; LMULMAX2-RV32-NEXT: and a2, a2, a7 2988; LMULMAX2-RV32-NEXT: sub a1, a1, a2 2989; LMULMAX2-RV32-NEXT: and a2, a1, a3 2990; LMULMAX2-RV32-NEXT: srli a1, a1, 2 2991; LMULMAX2-RV32-NEXT: and a1, a1, a3 2992; LMULMAX2-RV32-NEXT: add a1, a2, a1 2993; LMULMAX2-RV32-NEXT: srli a2, a1, 4 2994; LMULMAX2-RV32-NEXT: add a1, a1, a2 2995; LMULMAX2-RV32-NEXT: and a1, a1, a4 2996; LMULMAX2-RV32-NEXT: mul a1, a1, a5 2997; LMULMAX2-RV32-NEXT: srli a1, a1, 24 2998; LMULMAX2-RV32-NEXT: sb a1, 62(sp) 2999; LMULMAX2-RV32-NEXT: vslidedown.vi v28, v26, 29 3000; LMULMAX2-RV32-NEXT: vmv.x.s a1, v28 3001; LMULMAX2-RV32-NEXT: ori a1, a1, 256 3002; LMULMAX2-RV32-NEXT: addi a2, a1, -1 3003; LMULMAX2-RV32-NEXT: not a1, a1 3004; LMULMAX2-RV32-NEXT: and a1, a1, a2 3005; LMULMAX2-RV32-NEXT: srli a2, a1, 1 3006; LMULMAX2-RV32-NEXT: and a2, a2, a7 3007; LMULMAX2-RV32-NEXT: sub a1, a1, a2 3008; LMULMAX2-RV32-NEXT: and a2, a1, a3 3009; LMULMAX2-RV32-NEXT: srli a1, a1, 2 3010; LMULMAX2-RV32-NEXT: and a1, a1, a3 3011; LMULMAX2-RV32-NEXT: add a1, a2, a1 3012; LMULMAX2-RV32-NEXT: srli a2, a1, 4 3013; LMULMAX2-RV32-NEXT: add a1, a1, a2 3014; LMULMAX2-RV32-NEXT: and a1, a1, a4 3015; LMULMAX2-RV32-NEXT: mul a1, a1, a5 3016; LMULMAX2-RV32-NEXT: srli a1, a1, 24 3017; LMULMAX2-RV32-NEXT: sb a1, 61(sp) 3018; LMULMAX2-RV32-NEXT: vslidedown.vi v28, v26, 28 3019; LMULMAX2-RV32-NEXT: vmv.x.s a1, v28 3020; LMULMAX2-RV32-NEXT: ori a1, a1, 256 3021; LMULMAX2-RV32-NEXT: addi a2, a1, -1 3022; LMULMAX2-RV32-NEXT: not a1, a1 3023; LMULMAX2-RV32-NEXT: and a1, a1, a2 3024; LMULMAX2-RV32-NEXT: srli a2, a1, 1 3025; LMULMAX2-RV32-NEXT: and a2, a2, a7 3026; LMULMAX2-RV32-NEXT: sub a1, a1, a2 3027; LMULMAX2-RV32-NEXT: and a2, a1, a3 3028; LMULMAX2-RV32-NEXT: srli a1, a1, 2 3029; LMULMAX2-RV32-NEXT: and a1, a1, a3 3030; LMULMAX2-RV32-NEXT: add a1, a2, a1 3031; LMULMAX2-RV32-NEXT: srli a2, a1, 4 3032; LMULMAX2-RV32-NEXT: add a1, a1, a2 3033; LMULMAX2-RV32-NEXT: and a1, a1, a4 3034; LMULMAX2-RV32-NEXT: mul a1, a1, a5 3035; LMULMAX2-RV32-NEXT: srli a1, a1, 24 3036; LMULMAX2-RV32-NEXT: sb a1, 60(sp) 3037; LMULMAX2-RV32-NEXT: vslidedown.vi v28, v26, 27 3038; LMULMAX2-RV32-NEXT: vmv.x.s a1, v28 3039; LMULMAX2-RV32-NEXT: ori a1, a1, 256 3040; LMULMAX2-RV32-NEXT: addi a2, a1, -1 3041; LMULMAX2-RV32-NEXT: not a1, a1 3042; LMULMAX2-RV32-NEXT: and a1, a1, a2 3043; LMULMAX2-RV32-NEXT: srli a2, a1, 1 3044; LMULMAX2-RV32-NEXT: and a2, a2, a7 3045; LMULMAX2-RV32-NEXT: sub a1, a1, a2 3046; LMULMAX2-RV32-NEXT: and a2, a1, a3 3047; LMULMAX2-RV32-NEXT: srli a1, a1, 2 3048; LMULMAX2-RV32-NEXT: and a1, a1, a3 3049; LMULMAX2-RV32-NEXT: add a1, a2, a1 3050; LMULMAX2-RV32-NEXT: srli a2, a1, 4 3051; LMULMAX2-RV32-NEXT: add a1, a1, a2 3052; LMULMAX2-RV32-NEXT: and a1, a1, a4 3053; LMULMAX2-RV32-NEXT: mul a1, a1, a5 3054; LMULMAX2-RV32-NEXT: srli a1, a1, 24 3055; LMULMAX2-RV32-NEXT: sb a1, 59(sp) 3056; LMULMAX2-RV32-NEXT: vslidedown.vi v28, v26, 26 3057; LMULMAX2-RV32-NEXT: vmv.x.s a1, v28 3058; LMULMAX2-RV32-NEXT: ori a1, a1, 256 3059; LMULMAX2-RV32-NEXT: addi a2, a1, -1 3060; LMULMAX2-RV32-NEXT: not a1, a1 3061; LMULMAX2-RV32-NEXT: and a1, a1, a2 3062; LMULMAX2-RV32-NEXT: srli a2, a1, 1 3063; LMULMAX2-RV32-NEXT: and a2, a2, a7 3064; LMULMAX2-RV32-NEXT: sub a1, a1, a2 3065; LMULMAX2-RV32-NEXT: and a2, a1, a3 3066; LMULMAX2-RV32-NEXT: srli a1, a1, 2 3067; LMULMAX2-RV32-NEXT: and a1, a1, a3 3068; LMULMAX2-RV32-NEXT: add a1, a2, a1 3069; LMULMAX2-RV32-NEXT: srli a2, a1, 4 3070; LMULMAX2-RV32-NEXT: add a1, a1, a2 3071; LMULMAX2-RV32-NEXT: and a1, a1, a4 3072; LMULMAX2-RV32-NEXT: mul a1, a1, a5 3073; LMULMAX2-RV32-NEXT: srli a1, a1, 24 3074; LMULMAX2-RV32-NEXT: sb a1, 58(sp) 3075; LMULMAX2-RV32-NEXT: vslidedown.vi v28, v26, 25 3076; LMULMAX2-RV32-NEXT: vmv.x.s a1, v28 3077; LMULMAX2-RV32-NEXT: ori a1, a1, 256 3078; LMULMAX2-RV32-NEXT: addi a2, a1, -1 3079; LMULMAX2-RV32-NEXT: not a1, a1 3080; LMULMAX2-RV32-NEXT: and a1, a1, a2 3081; LMULMAX2-RV32-NEXT: srli a2, a1, 1 3082; LMULMAX2-RV32-NEXT: and a2, a2, a7 3083; LMULMAX2-RV32-NEXT: sub a1, a1, a2 3084; LMULMAX2-RV32-NEXT: and a2, a1, a3 3085; LMULMAX2-RV32-NEXT: srli a1, a1, 2 3086; LMULMAX2-RV32-NEXT: and a1, a1, a3 3087; LMULMAX2-RV32-NEXT: add a1, a2, a1 3088; LMULMAX2-RV32-NEXT: srli a2, a1, 4 3089; LMULMAX2-RV32-NEXT: add a1, a1, a2 3090; LMULMAX2-RV32-NEXT: and a1, a1, a4 3091; LMULMAX2-RV32-NEXT: mul a1, a1, a5 3092; LMULMAX2-RV32-NEXT: srli a1, a1, 24 3093; LMULMAX2-RV32-NEXT: sb a1, 57(sp) 3094; LMULMAX2-RV32-NEXT: vslidedown.vi v28, v26, 24 3095; LMULMAX2-RV32-NEXT: vmv.x.s a1, v28 3096; LMULMAX2-RV32-NEXT: ori a1, a1, 256 3097; LMULMAX2-RV32-NEXT: addi a2, a1, -1 3098; LMULMAX2-RV32-NEXT: not a1, a1 3099; LMULMAX2-RV32-NEXT: and a1, a1, a2 3100; LMULMAX2-RV32-NEXT: srli a2, a1, 1 3101; LMULMAX2-RV32-NEXT: and a2, a2, a7 3102; LMULMAX2-RV32-NEXT: sub a1, a1, a2 3103; LMULMAX2-RV32-NEXT: and a2, a1, a3 3104; LMULMAX2-RV32-NEXT: srli a1, a1, 2 3105; LMULMAX2-RV32-NEXT: and a1, a1, a3 3106; LMULMAX2-RV32-NEXT: add a1, a2, a1 3107; LMULMAX2-RV32-NEXT: srli a2, a1, 4 3108; LMULMAX2-RV32-NEXT: add a1, a1, a2 3109; LMULMAX2-RV32-NEXT: and a1, a1, a4 3110; LMULMAX2-RV32-NEXT: mul a1, a1, a5 3111; LMULMAX2-RV32-NEXT: srli a1, a1, 24 3112; LMULMAX2-RV32-NEXT: sb a1, 56(sp) 3113; LMULMAX2-RV32-NEXT: vslidedown.vi v28, v26, 23 3114; LMULMAX2-RV32-NEXT: vmv.x.s a1, v28 3115; LMULMAX2-RV32-NEXT: ori a1, a1, 256 3116; LMULMAX2-RV32-NEXT: addi a2, a1, -1 3117; LMULMAX2-RV32-NEXT: not a1, a1 3118; LMULMAX2-RV32-NEXT: and a1, a1, a2 3119; LMULMAX2-RV32-NEXT: srli a2, a1, 1 3120; LMULMAX2-RV32-NEXT: and a2, a2, a7 3121; LMULMAX2-RV32-NEXT: sub a1, a1, a2 3122; LMULMAX2-RV32-NEXT: and a2, a1, a3 3123; LMULMAX2-RV32-NEXT: srli a1, a1, 2 3124; LMULMAX2-RV32-NEXT: and a1, a1, a3 3125; LMULMAX2-RV32-NEXT: add a1, a2, a1 3126; LMULMAX2-RV32-NEXT: srli a2, a1, 4 3127; LMULMAX2-RV32-NEXT: add a1, a1, a2 3128; LMULMAX2-RV32-NEXT: and a1, a1, a4 3129; LMULMAX2-RV32-NEXT: mul a1, a1, a5 3130; LMULMAX2-RV32-NEXT: srli a1, a1, 24 3131; LMULMAX2-RV32-NEXT: sb a1, 55(sp) 3132; LMULMAX2-RV32-NEXT: vslidedown.vi v28, v26, 22 3133; LMULMAX2-RV32-NEXT: vmv.x.s a1, v28 3134; LMULMAX2-RV32-NEXT: ori a1, a1, 256 3135; LMULMAX2-RV32-NEXT: addi a2, a1, -1 3136; LMULMAX2-RV32-NEXT: not a1, a1 3137; LMULMAX2-RV32-NEXT: and a1, a1, a2 3138; LMULMAX2-RV32-NEXT: srli a2, a1, 1 3139; LMULMAX2-RV32-NEXT: and a2, a2, a7 3140; LMULMAX2-RV32-NEXT: sub a1, a1, a2 3141; LMULMAX2-RV32-NEXT: and a2, a1, a3 3142; LMULMAX2-RV32-NEXT: srli a1, a1, 2 3143; LMULMAX2-RV32-NEXT: and a1, a1, a3 3144; LMULMAX2-RV32-NEXT: add a1, a2, a1 3145; LMULMAX2-RV32-NEXT: srli a2, a1, 4 3146; LMULMAX2-RV32-NEXT: add a1, a1, a2 3147; LMULMAX2-RV32-NEXT: and a1, a1, a4 3148; LMULMAX2-RV32-NEXT: mul a1, a1, a5 3149; LMULMAX2-RV32-NEXT: srli a1, a1, 24 3150; LMULMAX2-RV32-NEXT: sb a1, 54(sp) 3151; LMULMAX2-RV32-NEXT: vslidedown.vi v28, v26, 21 3152; LMULMAX2-RV32-NEXT: vmv.x.s a1, v28 3153; LMULMAX2-RV32-NEXT: ori a1, a1, 256 3154; LMULMAX2-RV32-NEXT: addi a2, a1, -1 3155; LMULMAX2-RV32-NEXT: not a1, a1 3156; LMULMAX2-RV32-NEXT: and a1, a1, a2 3157; LMULMAX2-RV32-NEXT: srli a2, a1, 1 3158; LMULMAX2-RV32-NEXT: and a2, a2, a7 3159; LMULMAX2-RV32-NEXT: sub a1, a1, a2 3160; LMULMAX2-RV32-NEXT: and a2, a1, a3 3161; LMULMAX2-RV32-NEXT: srli a1, a1, 2 3162; LMULMAX2-RV32-NEXT: and a1, a1, a3 3163; LMULMAX2-RV32-NEXT: add a1, a2, a1 3164; LMULMAX2-RV32-NEXT: srli a2, a1, 4 3165; LMULMAX2-RV32-NEXT: add a1, a1, a2 3166; LMULMAX2-RV32-NEXT: and a1, a1, a4 3167; LMULMAX2-RV32-NEXT: mul a1, a1, a5 3168; LMULMAX2-RV32-NEXT: srli a1, a1, 24 3169; LMULMAX2-RV32-NEXT: sb a1, 53(sp) 3170; LMULMAX2-RV32-NEXT: vslidedown.vi v28, v26, 20 3171; LMULMAX2-RV32-NEXT: vmv.x.s a1, v28 3172; LMULMAX2-RV32-NEXT: ori a1, a1, 256 3173; LMULMAX2-RV32-NEXT: addi a2, a1, -1 3174; LMULMAX2-RV32-NEXT: not a1, a1 3175; LMULMAX2-RV32-NEXT: and a1, a1, a2 3176; LMULMAX2-RV32-NEXT: srli a2, a1, 1 3177; LMULMAX2-RV32-NEXT: and a2, a2, a7 3178; LMULMAX2-RV32-NEXT: sub a1, a1, a2 3179; LMULMAX2-RV32-NEXT: and a2, a1, a3 3180; LMULMAX2-RV32-NEXT: srli a1, a1, 2 3181; LMULMAX2-RV32-NEXT: and a1, a1, a3 3182; LMULMAX2-RV32-NEXT: add a1, a2, a1 3183; LMULMAX2-RV32-NEXT: srli a2, a1, 4 3184; LMULMAX2-RV32-NEXT: add a1, a1, a2 3185; LMULMAX2-RV32-NEXT: and a1, a1, a4 3186; LMULMAX2-RV32-NEXT: mul a1, a1, a5 3187; LMULMAX2-RV32-NEXT: srli a1, a1, 24 3188; LMULMAX2-RV32-NEXT: sb a1, 52(sp) 3189; LMULMAX2-RV32-NEXT: vslidedown.vi v28, v26, 19 3190; LMULMAX2-RV32-NEXT: vmv.x.s a1, v28 3191; LMULMAX2-RV32-NEXT: ori a1, a1, 256 3192; LMULMAX2-RV32-NEXT: addi a2, a1, -1 3193; LMULMAX2-RV32-NEXT: not a1, a1 3194; LMULMAX2-RV32-NEXT: and a1, a1, a2 3195; LMULMAX2-RV32-NEXT: srli a2, a1, 1 3196; LMULMAX2-RV32-NEXT: and a2, a2, a7 3197; LMULMAX2-RV32-NEXT: sub a1, a1, a2 3198; LMULMAX2-RV32-NEXT: and a2, a1, a3 3199; LMULMAX2-RV32-NEXT: srli a1, a1, 2 3200; LMULMAX2-RV32-NEXT: and a1, a1, a3 3201; LMULMAX2-RV32-NEXT: add a1, a2, a1 3202; LMULMAX2-RV32-NEXT: srli a2, a1, 4 3203; LMULMAX2-RV32-NEXT: add a1, a1, a2 3204; LMULMAX2-RV32-NEXT: and a1, a1, a4 3205; LMULMAX2-RV32-NEXT: mul a1, a1, a5 3206; LMULMAX2-RV32-NEXT: srli a1, a1, 24 3207; LMULMAX2-RV32-NEXT: sb a1, 51(sp) 3208; LMULMAX2-RV32-NEXT: vslidedown.vi v28, v26, 18 3209; LMULMAX2-RV32-NEXT: vmv.x.s a1, v28 3210; LMULMAX2-RV32-NEXT: ori a1, a1, 256 3211; LMULMAX2-RV32-NEXT: addi a2, a1, -1 3212; LMULMAX2-RV32-NEXT: not a1, a1 3213; LMULMAX2-RV32-NEXT: and a1, a1, a2 3214; LMULMAX2-RV32-NEXT: srli a2, a1, 1 3215; LMULMAX2-RV32-NEXT: and a2, a2, a7 3216; LMULMAX2-RV32-NEXT: sub a1, a1, a2 3217; LMULMAX2-RV32-NEXT: and a2, a1, a3 3218; LMULMAX2-RV32-NEXT: srli a1, a1, 2 3219; LMULMAX2-RV32-NEXT: and a1, a1, a3 3220; LMULMAX2-RV32-NEXT: add a1, a2, a1 3221; LMULMAX2-RV32-NEXT: srli a2, a1, 4 3222; LMULMAX2-RV32-NEXT: add a1, a1, a2 3223; LMULMAX2-RV32-NEXT: and a1, a1, a4 3224; LMULMAX2-RV32-NEXT: mul a1, a1, a5 3225; LMULMAX2-RV32-NEXT: srli a1, a1, 24 3226; LMULMAX2-RV32-NEXT: sb a1, 50(sp) 3227; LMULMAX2-RV32-NEXT: vslidedown.vi v28, v26, 17 3228; LMULMAX2-RV32-NEXT: vmv.x.s a1, v28 3229; LMULMAX2-RV32-NEXT: ori a1, a1, 256 3230; LMULMAX2-RV32-NEXT: addi a2, a1, -1 3231; LMULMAX2-RV32-NEXT: not a1, a1 3232; LMULMAX2-RV32-NEXT: and a1, a1, a2 3233; LMULMAX2-RV32-NEXT: srli a2, a1, 1 3234; LMULMAX2-RV32-NEXT: and a2, a2, a7 3235; LMULMAX2-RV32-NEXT: sub a1, a1, a2 3236; LMULMAX2-RV32-NEXT: and a2, a1, a3 3237; LMULMAX2-RV32-NEXT: srli a1, a1, 2 3238; LMULMAX2-RV32-NEXT: and a1, a1, a3 3239; LMULMAX2-RV32-NEXT: add a1, a2, a1 3240; LMULMAX2-RV32-NEXT: srli a2, a1, 4 3241; LMULMAX2-RV32-NEXT: add a1, a1, a2 3242; LMULMAX2-RV32-NEXT: and a1, a1, a4 3243; LMULMAX2-RV32-NEXT: mul a1, a1, a5 3244; LMULMAX2-RV32-NEXT: srli a1, a1, 24 3245; LMULMAX2-RV32-NEXT: sb a1, 49(sp) 3246; LMULMAX2-RV32-NEXT: vslidedown.vi v28, v26, 16 3247; LMULMAX2-RV32-NEXT: vmv.x.s a1, v28 3248; LMULMAX2-RV32-NEXT: ori a1, a1, 256 3249; LMULMAX2-RV32-NEXT: addi a2, a1, -1 3250; LMULMAX2-RV32-NEXT: not a1, a1 3251; LMULMAX2-RV32-NEXT: and a1, a1, a2 3252; LMULMAX2-RV32-NEXT: srli a2, a1, 1 3253; LMULMAX2-RV32-NEXT: and a2, a2, a7 3254; LMULMAX2-RV32-NEXT: sub a1, a1, a2 3255; LMULMAX2-RV32-NEXT: and a2, a1, a3 3256; LMULMAX2-RV32-NEXT: srli a1, a1, 2 3257; LMULMAX2-RV32-NEXT: and a1, a1, a3 3258; LMULMAX2-RV32-NEXT: add a1, a2, a1 3259; LMULMAX2-RV32-NEXT: srli a2, a1, 4 3260; LMULMAX2-RV32-NEXT: add a1, a1, a2 3261; LMULMAX2-RV32-NEXT: and a1, a1, a4 3262; LMULMAX2-RV32-NEXT: mul a1, a1, a5 3263; LMULMAX2-RV32-NEXT: srli a1, a1, 24 3264; LMULMAX2-RV32-NEXT: sb a1, 48(sp) 3265; LMULMAX2-RV32-NEXT: vslidedown.vi v28, v26, 15 3266; LMULMAX2-RV32-NEXT: vmv.x.s a1, v28 3267; LMULMAX2-RV32-NEXT: ori a1, a1, 256 3268; LMULMAX2-RV32-NEXT: addi a2, a1, -1 3269; LMULMAX2-RV32-NEXT: not a1, a1 3270; LMULMAX2-RV32-NEXT: and a1, a1, a2 3271; LMULMAX2-RV32-NEXT: srli a2, a1, 1 3272; LMULMAX2-RV32-NEXT: and a2, a2, a7 3273; LMULMAX2-RV32-NEXT: sub a1, a1, a2 3274; LMULMAX2-RV32-NEXT: and a2, a1, a3 3275; LMULMAX2-RV32-NEXT: srli a1, a1, 2 3276; LMULMAX2-RV32-NEXT: and a1, a1, a3 3277; LMULMAX2-RV32-NEXT: add a1, a2, a1 3278; LMULMAX2-RV32-NEXT: srli a2, a1, 4 3279; LMULMAX2-RV32-NEXT: add a1, a1, a2 3280; LMULMAX2-RV32-NEXT: and a1, a1, a4 3281; LMULMAX2-RV32-NEXT: mul a1, a1, a5 3282; LMULMAX2-RV32-NEXT: srli a1, a1, 24 3283; LMULMAX2-RV32-NEXT: sb a1, 47(sp) 3284; LMULMAX2-RV32-NEXT: vslidedown.vi v28, v26, 14 3285; LMULMAX2-RV32-NEXT: vmv.x.s a1, v28 3286; LMULMAX2-RV32-NEXT: ori a1, a1, 256 3287; LMULMAX2-RV32-NEXT: addi a2, a1, -1 3288; LMULMAX2-RV32-NEXT: not a1, a1 3289; LMULMAX2-RV32-NEXT: and a1, a1, a2 3290; LMULMAX2-RV32-NEXT: srli a2, a1, 1 3291; LMULMAX2-RV32-NEXT: and a2, a2, a7 3292; LMULMAX2-RV32-NEXT: sub a1, a1, a2 3293; LMULMAX2-RV32-NEXT: and a2, a1, a3 3294; LMULMAX2-RV32-NEXT: srli a1, a1, 2 3295; LMULMAX2-RV32-NEXT: and a1, a1, a3 3296; LMULMAX2-RV32-NEXT: add a1, a2, a1 3297; LMULMAX2-RV32-NEXT: srli a2, a1, 4 3298; LMULMAX2-RV32-NEXT: add a1, a1, a2 3299; LMULMAX2-RV32-NEXT: and a1, a1, a4 3300; LMULMAX2-RV32-NEXT: mul a1, a1, a5 3301; LMULMAX2-RV32-NEXT: srli a1, a1, 24 3302; LMULMAX2-RV32-NEXT: sb a1, 46(sp) 3303; LMULMAX2-RV32-NEXT: vslidedown.vi v28, v26, 13 3304; LMULMAX2-RV32-NEXT: vmv.x.s a1, v28 3305; LMULMAX2-RV32-NEXT: ori a1, a1, 256 3306; LMULMAX2-RV32-NEXT: addi a2, a1, -1 3307; LMULMAX2-RV32-NEXT: not a1, a1 3308; LMULMAX2-RV32-NEXT: and a1, a1, a2 3309; LMULMAX2-RV32-NEXT: srli a2, a1, 1 3310; LMULMAX2-RV32-NEXT: and a2, a2, a7 3311; LMULMAX2-RV32-NEXT: sub a1, a1, a2 3312; LMULMAX2-RV32-NEXT: and a2, a1, a3 3313; LMULMAX2-RV32-NEXT: srli a1, a1, 2 3314; LMULMAX2-RV32-NEXT: and a1, a1, a3 3315; LMULMAX2-RV32-NEXT: add a1, a2, a1 3316; LMULMAX2-RV32-NEXT: srli a2, a1, 4 3317; LMULMAX2-RV32-NEXT: add a1, a1, a2 3318; LMULMAX2-RV32-NEXT: and a1, a1, a4 3319; LMULMAX2-RV32-NEXT: mul a1, a1, a5 3320; LMULMAX2-RV32-NEXT: srli a1, a1, 24 3321; LMULMAX2-RV32-NEXT: sb a1, 45(sp) 3322; LMULMAX2-RV32-NEXT: vslidedown.vi v28, v26, 12 3323; LMULMAX2-RV32-NEXT: vmv.x.s a1, v28 3324; LMULMAX2-RV32-NEXT: ori a1, a1, 256 3325; LMULMAX2-RV32-NEXT: addi a2, a1, -1 3326; LMULMAX2-RV32-NEXT: not a1, a1 3327; LMULMAX2-RV32-NEXT: and a1, a1, a2 3328; LMULMAX2-RV32-NEXT: srli a2, a1, 1 3329; LMULMAX2-RV32-NEXT: and a2, a2, a7 3330; LMULMAX2-RV32-NEXT: sub a1, a1, a2 3331; LMULMAX2-RV32-NEXT: and a2, a1, a3 3332; LMULMAX2-RV32-NEXT: srli a1, a1, 2 3333; LMULMAX2-RV32-NEXT: and a1, a1, a3 3334; LMULMAX2-RV32-NEXT: add a1, a2, a1 3335; LMULMAX2-RV32-NEXT: srli a2, a1, 4 3336; LMULMAX2-RV32-NEXT: add a1, a1, a2 3337; LMULMAX2-RV32-NEXT: and a1, a1, a4 3338; LMULMAX2-RV32-NEXT: mul a1, a1, a5 3339; LMULMAX2-RV32-NEXT: srli a1, a1, 24 3340; LMULMAX2-RV32-NEXT: sb a1, 44(sp) 3341; LMULMAX2-RV32-NEXT: vslidedown.vi v28, v26, 11 3342; LMULMAX2-RV32-NEXT: vmv.x.s a1, v28 3343; LMULMAX2-RV32-NEXT: ori a1, a1, 256 3344; LMULMAX2-RV32-NEXT: addi a2, a1, -1 3345; LMULMAX2-RV32-NEXT: not a1, a1 3346; LMULMAX2-RV32-NEXT: and a1, a1, a2 3347; LMULMAX2-RV32-NEXT: srli a2, a1, 1 3348; LMULMAX2-RV32-NEXT: and a2, a2, a7 3349; LMULMAX2-RV32-NEXT: sub a1, a1, a2 3350; LMULMAX2-RV32-NEXT: and a2, a1, a3 3351; LMULMAX2-RV32-NEXT: srli a1, a1, 2 3352; LMULMAX2-RV32-NEXT: and a1, a1, a3 3353; LMULMAX2-RV32-NEXT: add a1, a2, a1 3354; LMULMAX2-RV32-NEXT: srli a2, a1, 4 3355; LMULMAX2-RV32-NEXT: add a1, a1, a2 3356; LMULMAX2-RV32-NEXT: and a1, a1, a4 3357; LMULMAX2-RV32-NEXT: mul a1, a1, a5 3358; LMULMAX2-RV32-NEXT: srli a1, a1, 24 3359; LMULMAX2-RV32-NEXT: sb a1, 43(sp) 3360; LMULMAX2-RV32-NEXT: vslidedown.vi v28, v26, 10 3361; LMULMAX2-RV32-NEXT: vmv.x.s a1, v28 3362; LMULMAX2-RV32-NEXT: ori a1, a1, 256 3363; LMULMAX2-RV32-NEXT: addi a2, a1, -1 3364; LMULMAX2-RV32-NEXT: not a1, a1 3365; LMULMAX2-RV32-NEXT: and a1, a1, a2 3366; LMULMAX2-RV32-NEXT: srli a2, a1, 1 3367; LMULMAX2-RV32-NEXT: and a2, a2, a7 3368; LMULMAX2-RV32-NEXT: sub a1, a1, a2 3369; LMULMAX2-RV32-NEXT: and a2, a1, a3 3370; LMULMAX2-RV32-NEXT: srli a1, a1, 2 3371; LMULMAX2-RV32-NEXT: and a1, a1, a3 3372; LMULMAX2-RV32-NEXT: add a1, a2, a1 3373; LMULMAX2-RV32-NEXT: srli a2, a1, 4 3374; LMULMAX2-RV32-NEXT: add a1, a1, a2 3375; LMULMAX2-RV32-NEXT: and a1, a1, a4 3376; LMULMAX2-RV32-NEXT: mul a1, a1, a5 3377; LMULMAX2-RV32-NEXT: srli a1, a1, 24 3378; LMULMAX2-RV32-NEXT: sb a1, 42(sp) 3379; LMULMAX2-RV32-NEXT: vslidedown.vi v28, v26, 9 3380; LMULMAX2-RV32-NEXT: vmv.x.s a1, v28 3381; LMULMAX2-RV32-NEXT: ori a1, a1, 256 3382; LMULMAX2-RV32-NEXT: addi a2, a1, -1 3383; LMULMAX2-RV32-NEXT: not a1, a1 3384; LMULMAX2-RV32-NEXT: and a1, a1, a2 3385; LMULMAX2-RV32-NEXT: srli a2, a1, 1 3386; LMULMAX2-RV32-NEXT: and a2, a2, a7 3387; LMULMAX2-RV32-NEXT: sub a1, a1, a2 3388; LMULMAX2-RV32-NEXT: and a2, a1, a3 3389; LMULMAX2-RV32-NEXT: srli a1, a1, 2 3390; LMULMAX2-RV32-NEXT: and a1, a1, a3 3391; LMULMAX2-RV32-NEXT: add a1, a2, a1 3392; LMULMAX2-RV32-NEXT: srli a2, a1, 4 3393; LMULMAX2-RV32-NEXT: add a1, a1, a2 3394; LMULMAX2-RV32-NEXT: and a1, a1, a4 3395; LMULMAX2-RV32-NEXT: mul a1, a1, a5 3396; LMULMAX2-RV32-NEXT: srli a1, a1, 24 3397; LMULMAX2-RV32-NEXT: sb a1, 41(sp) 3398; LMULMAX2-RV32-NEXT: vslidedown.vi v28, v26, 8 3399; LMULMAX2-RV32-NEXT: vmv.x.s a1, v28 3400; LMULMAX2-RV32-NEXT: ori a1, a1, 256 3401; LMULMAX2-RV32-NEXT: addi a2, a1, -1 3402; LMULMAX2-RV32-NEXT: not a1, a1 3403; LMULMAX2-RV32-NEXT: and a1, a1, a2 3404; LMULMAX2-RV32-NEXT: srli a2, a1, 1 3405; LMULMAX2-RV32-NEXT: and a2, a2, a7 3406; LMULMAX2-RV32-NEXT: sub a1, a1, a2 3407; LMULMAX2-RV32-NEXT: and a2, a1, a3 3408; LMULMAX2-RV32-NEXT: srli a1, a1, 2 3409; LMULMAX2-RV32-NEXT: and a1, a1, a3 3410; LMULMAX2-RV32-NEXT: add a1, a2, a1 3411; LMULMAX2-RV32-NEXT: srli a2, a1, 4 3412; LMULMAX2-RV32-NEXT: add a1, a1, a2 3413; LMULMAX2-RV32-NEXT: and a1, a1, a4 3414; LMULMAX2-RV32-NEXT: mul a1, a1, a5 3415; LMULMAX2-RV32-NEXT: srli a1, a1, 24 3416; LMULMAX2-RV32-NEXT: sb a1, 40(sp) 3417; LMULMAX2-RV32-NEXT: vslidedown.vi v28, v26, 7 3418; LMULMAX2-RV32-NEXT: vmv.x.s a1, v28 3419; LMULMAX2-RV32-NEXT: ori a1, a1, 256 3420; LMULMAX2-RV32-NEXT: addi a2, a1, -1 3421; LMULMAX2-RV32-NEXT: not a1, a1 3422; LMULMAX2-RV32-NEXT: and a1, a1, a2 3423; LMULMAX2-RV32-NEXT: srli a2, a1, 1 3424; LMULMAX2-RV32-NEXT: and a2, a2, a7 3425; LMULMAX2-RV32-NEXT: sub a1, a1, a2 3426; LMULMAX2-RV32-NEXT: and a2, a1, a3 3427; LMULMAX2-RV32-NEXT: srli a1, a1, 2 3428; LMULMAX2-RV32-NEXT: and a1, a1, a3 3429; LMULMAX2-RV32-NEXT: add a1, a2, a1 3430; LMULMAX2-RV32-NEXT: srli a2, a1, 4 3431; LMULMAX2-RV32-NEXT: add a1, a1, a2 3432; LMULMAX2-RV32-NEXT: and a1, a1, a4 3433; LMULMAX2-RV32-NEXT: mul a1, a1, a5 3434; LMULMAX2-RV32-NEXT: srli a1, a1, 24 3435; LMULMAX2-RV32-NEXT: sb a1, 39(sp) 3436; LMULMAX2-RV32-NEXT: vslidedown.vi v28, v26, 6 3437; LMULMAX2-RV32-NEXT: vmv.x.s a1, v28 3438; LMULMAX2-RV32-NEXT: ori a1, a1, 256 3439; LMULMAX2-RV32-NEXT: addi a2, a1, -1 3440; LMULMAX2-RV32-NEXT: not a1, a1 3441; LMULMAX2-RV32-NEXT: and a1, a1, a2 3442; LMULMAX2-RV32-NEXT: srli a2, a1, 1 3443; LMULMAX2-RV32-NEXT: and a2, a2, a7 3444; LMULMAX2-RV32-NEXT: sub a1, a1, a2 3445; LMULMAX2-RV32-NEXT: and a2, a1, a3 3446; LMULMAX2-RV32-NEXT: srli a1, a1, 2 3447; LMULMAX2-RV32-NEXT: and a1, a1, a3 3448; LMULMAX2-RV32-NEXT: add a1, a2, a1 3449; LMULMAX2-RV32-NEXT: srli a2, a1, 4 3450; LMULMAX2-RV32-NEXT: add a1, a1, a2 3451; LMULMAX2-RV32-NEXT: and a1, a1, a4 3452; LMULMAX2-RV32-NEXT: mul a1, a1, a5 3453; LMULMAX2-RV32-NEXT: srli a1, a1, 24 3454; LMULMAX2-RV32-NEXT: sb a1, 38(sp) 3455; LMULMAX2-RV32-NEXT: vslidedown.vi v28, v26, 5 3456; LMULMAX2-RV32-NEXT: vmv.x.s a1, v28 3457; LMULMAX2-RV32-NEXT: ori a1, a1, 256 3458; LMULMAX2-RV32-NEXT: addi a2, a1, -1 3459; LMULMAX2-RV32-NEXT: not a1, a1 3460; LMULMAX2-RV32-NEXT: and a1, a1, a2 3461; LMULMAX2-RV32-NEXT: srli a2, a1, 1 3462; LMULMAX2-RV32-NEXT: and a2, a2, a7 3463; LMULMAX2-RV32-NEXT: sub a1, a1, a2 3464; LMULMAX2-RV32-NEXT: and a2, a1, a3 3465; LMULMAX2-RV32-NEXT: srli a1, a1, 2 3466; LMULMAX2-RV32-NEXT: and a1, a1, a3 3467; LMULMAX2-RV32-NEXT: add a1, a2, a1 3468; LMULMAX2-RV32-NEXT: srli a2, a1, 4 3469; LMULMAX2-RV32-NEXT: add a1, a1, a2 3470; LMULMAX2-RV32-NEXT: and a1, a1, a4 3471; LMULMAX2-RV32-NEXT: mul a1, a1, a5 3472; LMULMAX2-RV32-NEXT: srli a1, a1, 24 3473; LMULMAX2-RV32-NEXT: sb a1, 37(sp) 3474; LMULMAX2-RV32-NEXT: vslidedown.vi v28, v26, 4 3475; LMULMAX2-RV32-NEXT: vmv.x.s a1, v28 3476; LMULMAX2-RV32-NEXT: ori a1, a1, 256 3477; LMULMAX2-RV32-NEXT: addi a2, a1, -1 3478; LMULMAX2-RV32-NEXT: not a1, a1 3479; LMULMAX2-RV32-NEXT: and a1, a1, a2 3480; LMULMAX2-RV32-NEXT: srli a2, a1, 1 3481; LMULMAX2-RV32-NEXT: and a2, a2, a7 3482; LMULMAX2-RV32-NEXT: sub a1, a1, a2 3483; LMULMAX2-RV32-NEXT: and a2, a1, a3 3484; LMULMAX2-RV32-NEXT: srli a1, a1, 2 3485; LMULMAX2-RV32-NEXT: and a1, a1, a3 3486; LMULMAX2-RV32-NEXT: add a1, a2, a1 3487; LMULMAX2-RV32-NEXT: srli a2, a1, 4 3488; LMULMAX2-RV32-NEXT: add a1, a1, a2 3489; LMULMAX2-RV32-NEXT: and a1, a1, a4 3490; LMULMAX2-RV32-NEXT: mul a1, a1, a5 3491; LMULMAX2-RV32-NEXT: srli a1, a1, 24 3492; LMULMAX2-RV32-NEXT: sb a1, 36(sp) 3493; LMULMAX2-RV32-NEXT: vslidedown.vi v28, v26, 3 3494; LMULMAX2-RV32-NEXT: vmv.x.s a1, v28 3495; LMULMAX2-RV32-NEXT: ori a1, a1, 256 3496; LMULMAX2-RV32-NEXT: addi a2, a1, -1 3497; LMULMAX2-RV32-NEXT: not a1, a1 3498; LMULMAX2-RV32-NEXT: and a1, a1, a2 3499; LMULMAX2-RV32-NEXT: srli a2, a1, 1 3500; LMULMAX2-RV32-NEXT: and a2, a2, a7 3501; LMULMAX2-RV32-NEXT: sub a1, a1, a2 3502; LMULMAX2-RV32-NEXT: and a2, a1, a3 3503; LMULMAX2-RV32-NEXT: srli a1, a1, 2 3504; LMULMAX2-RV32-NEXT: and a1, a1, a3 3505; LMULMAX2-RV32-NEXT: add a1, a2, a1 3506; LMULMAX2-RV32-NEXT: srli a2, a1, 4 3507; LMULMAX2-RV32-NEXT: add a1, a1, a2 3508; LMULMAX2-RV32-NEXT: and a1, a1, a4 3509; LMULMAX2-RV32-NEXT: mul a1, a1, a5 3510; LMULMAX2-RV32-NEXT: srli a1, a1, 24 3511; LMULMAX2-RV32-NEXT: sb a1, 35(sp) 3512; LMULMAX2-RV32-NEXT: vslidedown.vi v28, v26, 2 3513; LMULMAX2-RV32-NEXT: vmv.x.s a1, v28 3514; LMULMAX2-RV32-NEXT: ori a1, a1, 256 3515; LMULMAX2-RV32-NEXT: addi a2, a1, -1 3516; LMULMAX2-RV32-NEXT: not a1, a1 3517; LMULMAX2-RV32-NEXT: and a1, a1, a2 3518; LMULMAX2-RV32-NEXT: srli a2, a1, 1 3519; LMULMAX2-RV32-NEXT: and a2, a2, a7 3520; LMULMAX2-RV32-NEXT: sub a1, a1, a2 3521; LMULMAX2-RV32-NEXT: and a2, a1, a3 3522; LMULMAX2-RV32-NEXT: srli a1, a1, 2 3523; LMULMAX2-RV32-NEXT: and a1, a1, a3 3524; LMULMAX2-RV32-NEXT: add a1, a2, a1 3525; LMULMAX2-RV32-NEXT: srli a2, a1, 4 3526; LMULMAX2-RV32-NEXT: add a1, a1, a2 3527; LMULMAX2-RV32-NEXT: and a1, a1, a4 3528; LMULMAX2-RV32-NEXT: mul a1, a1, a5 3529; LMULMAX2-RV32-NEXT: srli a1, a1, 24 3530; LMULMAX2-RV32-NEXT: sb a1, 34(sp) 3531; LMULMAX2-RV32-NEXT: vslidedown.vi v26, v26, 1 3532; LMULMAX2-RV32-NEXT: vmv.x.s a1, v26 3533; LMULMAX2-RV32-NEXT: ori a1, a1, 256 3534; LMULMAX2-RV32-NEXT: addi a2, a1, -1 3535; LMULMAX2-RV32-NEXT: not a1, a1 3536; LMULMAX2-RV32-NEXT: and a1, a1, a2 3537; LMULMAX2-RV32-NEXT: srli a2, a1, 1 3538; LMULMAX2-RV32-NEXT: and a2, a2, a7 3539; LMULMAX2-RV32-NEXT: sub a1, a1, a2 3540; LMULMAX2-RV32-NEXT: and a2, a1, a3 3541; LMULMAX2-RV32-NEXT: srli a1, a1, 2 3542; LMULMAX2-RV32-NEXT: and a1, a1, a3 3543; LMULMAX2-RV32-NEXT: add a1, a2, a1 3544; LMULMAX2-RV32-NEXT: srli a2, a1, 4 3545; LMULMAX2-RV32-NEXT: add a1, a1, a2 3546; LMULMAX2-RV32-NEXT: and a1, a1, a4 3547; LMULMAX2-RV32-NEXT: mul a1, a1, a5 3548; LMULMAX2-RV32-NEXT: srli a1, a1, 24 3549; LMULMAX2-RV32-NEXT: sb a1, 33(sp) 3550; LMULMAX2-RV32-NEXT: vsetvli zero, a6, e8, m2, ta, mu 3551; LMULMAX2-RV32-NEXT: addi a1, sp, 32 3552; LMULMAX2-RV32-NEXT: vle8.v v26, (a1) 3553; LMULMAX2-RV32-NEXT: vse8.v v26, (a0) 3554; LMULMAX2-RV32-NEXT: addi sp, s0, -96 3555; LMULMAX2-RV32-NEXT: lw s0, 88(sp) # 4-byte Folded Reload 3556; LMULMAX2-RV32-NEXT: lw ra, 92(sp) # 4-byte Folded Reload 3557; LMULMAX2-RV32-NEXT: addi sp, sp, 96 3558; LMULMAX2-RV32-NEXT: ret 3559; 3560; LMULMAX2-RV64-LABEL: cttz_v32i8: 3561; LMULMAX2-RV64: # %bb.0: 3562; LMULMAX2-RV64-NEXT: addi sp, sp, -96 3563; LMULMAX2-RV64-NEXT: .cfi_def_cfa_offset 96 3564; LMULMAX2-RV64-NEXT: sd ra, 88(sp) # 8-byte Folded Spill 3565; LMULMAX2-RV64-NEXT: sd s0, 80(sp) # 8-byte Folded Spill 3566; LMULMAX2-RV64-NEXT: .cfi_offset ra, -8 3567; LMULMAX2-RV64-NEXT: .cfi_offset s0, -16 3568; LMULMAX2-RV64-NEXT: addi s0, sp, 96 3569; LMULMAX2-RV64-NEXT: .cfi_def_cfa s0, 0 3570; LMULMAX2-RV64-NEXT: andi sp, sp, -32 3571; LMULMAX2-RV64-NEXT: addi a6, zero, 32 3572; LMULMAX2-RV64-NEXT: vsetvli zero, a6, e8, m2, ta, mu 3573; LMULMAX2-RV64-NEXT: vle8.v v26, (a0) 3574; LMULMAX2-RV64-NEXT: vsetivli zero, 1, e8, m2, ta, mu 3575; LMULMAX2-RV64-NEXT: vslidedown.vi v28, v26, 31 3576; LMULMAX2-RV64-NEXT: vmv.x.s a2, v28 3577; LMULMAX2-RV64-NEXT: ori a2, a2, 256 3578; LMULMAX2-RV64-NEXT: addi a3, a2, -1 3579; LMULMAX2-RV64-NEXT: not a2, a2 3580; LMULMAX2-RV64-NEXT: and a3, a2, a3 3581; LMULMAX2-RV64-NEXT: srli a4, a3, 1 3582; LMULMAX2-RV64-NEXT: lui a2, 21845 3583; LMULMAX2-RV64-NEXT: addiw a2, a2, 1365 3584; LMULMAX2-RV64-NEXT: slli a2, a2, 12 3585; LMULMAX2-RV64-NEXT: addi a2, a2, 1365 3586; LMULMAX2-RV64-NEXT: slli a2, a2, 12 3587; LMULMAX2-RV64-NEXT: addi a2, a2, 1365 3588; LMULMAX2-RV64-NEXT: slli a2, a2, 12 3589; LMULMAX2-RV64-NEXT: addi a7, a2, 1365 3590; LMULMAX2-RV64-NEXT: and a4, a4, a7 3591; LMULMAX2-RV64-NEXT: sub a4, a3, a4 3592; LMULMAX2-RV64-NEXT: lui a3, 13107 3593; LMULMAX2-RV64-NEXT: addiw a3, a3, 819 3594; LMULMAX2-RV64-NEXT: slli a3, a3, 12 3595; LMULMAX2-RV64-NEXT: addi a3, a3, 819 3596; LMULMAX2-RV64-NEXT: slli a3, a3, 12 3597; LMULMAX2-RV64-NEXT: addi a3, a3, 819 3598; LMULMAX2-RV64-NEXT: slli a3, a3, 12 3599; LMULMAX2-RV64-NEXT: addi a3, a3, 819 3600; LMULMAX2-RV64-NEXT: and a5, a4, a3 3601; LMULMAX2-RV64-NEXT: srli a4, a4, 2 3602; LMULMAX2-RV64-NEXT: and a4, a4, a3 3603; LMULMAX2-RV64-NEXT: add a4, a5, a4 3604; LMULMAX2-RV64-NEXT: srli a5, a4, 4 3605; LMULMAX2-RV64-NEXT: add a5, a4, a5 3606; LMULMAX2-RV64-NEXT: lui a4, 3855 3607; LMULMAX2-RV64-NEXT: addiw a4, a4, 241 3608; LMULMAX2-RV64-NEXT: slli a4, a4, 12 3609; LMULMAX2-RV64-NEXT: addi a4, a4, -241 3610; LMULMAX2-RV64-NEXT: slli a4, a4, 12 3611; LMULMAX2-RV64-NEXT: addi a4, a4, 241 3612; LMULMAX2-RV64-NEXT: slli a4, a4, 12 3613; LMULMAX2-RV64-NEXT: addi a4, a4, -241 3614; LMULMAX2-RV64-NEXT: and a1, a5, a4 3615; LMULMAX2-RV64-NEXT: lui a5, 4112 3616; LMULMAX2-RV64-NEXT: addiw a5, a5, 257 3617; LMULMAX2-RV64-NEXT: slli a5, a5, 16 3618; LMULMAX2-RV64-NEXT: addi a5, a5, 257 3619; LMULMAX2-RV64-NEXT: slli a5, a5, 16 3620; LMULMAX2-RV64-NEXT: addi a5, a5, 257 3621; LMULMAX2-RV64-NEXT: mul a1, a1, a5 3622; LMULMAX2-RV64-NEXT: srli a1, a1, 56 3623; LMULMAX2-RV64-NEXT: sb a1, 63(sp) 3624; LMULMAX2-RV64-NEXT: vslidedown.vi v28, v26, 30 3625; LMULMAX2-RV64-NEXT: vmv.x.s a1, v28 3626; LMULMAX2-RV64-NEXT: ori a1, a1, 256 3627; LMULMAX2-RV64-NEXT: addi a2, a1, -1 3628; LMULMAX2-RV64-NEXT: not a1, a1 3629; LMULMAX2-RV64-NEXT: and a1, a1, a2 3630; LMULMAX2-RV64-NEXT: srli a2, a1, 1 3631; LMULMAX2-RV64-NEXT: and a2, a2, a7 3632; LMULMAX2-RV64-NEXT: sub a1, a1, a2 3633; LMULMAX2-RV64-NEXT: and a2, a1, a3 3634; LMULMAX2-RV64-NEXT: srli a1, a1, 2 3635; LMULMAX2-RV64-NEXT: and a1, a1, a3 3636; LMULMAX2-RV64-NEXT: add a1, a2, a1 3637; LMULMAX2-RV64-NEXT: srli a2, a1, 4 3638; LMULMAX2-RV64-NEXT: add a1, a1, a2 3639; LMULMAX2-RV64-NEXT: and a1, a1, a4 3640; LMULMAX2-RV64-NEXT: mul a1, a1, a5 3641; LMULMAX2-RV64-NEXT: srli a1, a1, 56 3642; LMULMAX2-RV64-NEXT: sb a1, 62(sp) 3643; LMULMAX2-RV64-NEXT: vslidedown.vi v28, v26, 29 3644; LMULMAX2-RV64-NEXT: vmv.x.s a1, v28 3645; LMULMAX2-RV64-NEXT: ori a1, a1, 256 3646; LMULMAX2-RV64-NEXT: addi a2, a1, -1 3647; LMULMAX2-RV64-NEXT: not a1, a1 3648; LMULMAX2-RV64-NEXT: and a1, a1, a2 3649; LMULMAX2-RV64-NEXT: srli a2, a1, 1 3650; LMULMAX2-RV64-NEXT: and a2, a2, a7 3651; LMULMAX2-RV64-NEXT: sub a1, a1, a2 3652; LMULMAX2-RV64-NEXT: and a2, a1, a3 3653; LMULMAX2-RV64-NEXT: srli a1, a1, 2 3654; LMULMAX2-RV64-NEXT: and a1, a1, a3 3655; LMULMAX2-RV64-NEXT: add a1, a2, a1 3656; LMULMAX2-RV64-NEXT: srli a2, a1, 4 3657; LMULMAX2-RV64-NEXT: add a1, a1, a2 3658; LMULMAX2-RV64-NEXT: and a1, a1, a4 3659; LMULMAX2-RV64-NEXT: mul a1, a1, a5 3660; LMULMAX2-RV64-NEXT: srli a1, a1, 56 3661; LMULMAX2-RV64-NEXT: sb a1, 61(sp) 3662; LMULMAX2-RV64-NEXT: vslidedown.vi v28, v26, 28 3663; LMULMAX2-RV64-NEXT: vmv.x.s a1, v28 3664; LMULMAX2-RV64-NEXT: ori a1, a1, 256 3665; LMULMAX2-RV64-NEXT: addi a2, a1, -1 3666; LMULMAX2-RV64-NEXT: not a1, a1 3667; LMULMAX2-RV64-NEXT: and a1, a1, a2 3668; LMULMAX2-RV64-NEXT: srli a2, a1, 1 3669; LMULMAX2-RV64-NEXT: and a2, a2, a7 3670; LMULMAX2-RV64-NEXT: sub a1, a1, a2 3671; LMULMAX2-RV64-NEXT: and a2, a1, a3 3672; LMULMAX2-RV64-NEXT: srli a1, a1, 2 3673; LMULMAX2-RV64-NEXT: and a1, a1, a3 3674; LMULMAX2-RV64-NEXT: add a1, a2, a1 3675; LMULMAX2-RV64-NEXT: srli a2, a1, 4 3676; LMULMAX2-RV64-NEXT: add a1, a1, a2 3677; LMULMAX2-RV64-NEXT: and a1, a1, a4 3678; LMULMAX2-RV64-NEXT: mul a1, a1, a5 3679; LMULMAX2-RV64-NEXT: srli a1, a1, 56 3680; LMULMAX2-RV64-NEXT: sb a1, 60(sp) 3681; LMULMAX2-RV64-NEXT: vslidedown.vi v28, v26, 27 3682; LMULMAX2-RV64-NEXT: vmv.x.s a1, v28 3683; LMULMAX2-RV64-NEXT: ori a1, a1, 256 3684; LMULMAX2-RV64-NEXT: addi a2, a1, -1 3685; LMULMAX2-RV64-NEXT: not a1, a1 3686; LMULMAX2-RV64-NEXT: and a1, a1, a2 3687; LMULMAX2-RV64-NEXT: srli a2, a1, 1 3688; LMULMAX2-RV64-NEXT: and a2, a2, a7 3689; LMULMAX2-RV64-NEXT: sub a1, a1, a2 3690; LMULMAX2-RV64-NEXT: and a2, a1, a3 3691; LMULMAX2-RV64-NEXT: srli a1, a1, 2 3692; LMULMAX2-RV64-NEXT: and a1, a1, a3 3693; LMULMAX2-RV64-NEXT: add a1, a2, a1 3694; LMULMAX2-RV64-NEXT: srli a2, a1, 4 3695; LMULMAX2-RV64-NEXT: add a1, a1, a2 3696; LMULMAX2-RV64-NEXT: and a1, a1, a4 3697; LMULMAX2-RV64-NEXT: mul a1, a1, a5 3698; LMULMAX2-RV64-NEXT: srli a1, a1, 56 3699; LMULMAX2-RV64-NEXT: sb a1, 59(sp) 3700; LMULMAX2-RV64-NEXT: vslidedown.vi v28, v26, 26 3701; LMULMAX2-RV64-NEXT: vmv.x.s a1, v28 3702; LMULMAX2-RV64-NEXT: ori a1, a1, 256 3703; LMULMAX2-RV64-NEXT: addi a2, a1, -1 3704; LMULMAX2-RV64-NEXT: not a1, a1 3705; LMULMAX2-RV64-NEXT: and a1, a1, a2 3706; LMULMAX2-RV64-NEXT: srli a2, a1, 1 3707; LMULMAX2-RV64-NEXT: and a2, a2, a7 3708; LMULMAX2-RV64-NEXT: sub a1, a1, a2 3709; LMULMAX2-RV64-NEXT: and a2, a1, a3 3710; LMULMAX2-RV64-NEXT: srli a1, a1, 2 3711; LMULMAX2-RV64-NEXT: and a1, a1, a3 3712; LMULMAX2-RV64-NEXT: add a1, a2, a1 3713; LMULMAX2-RV64-NEXT: srli a2, a1, 4 3714; LMULMAX2-RV64-NEXT: add a1, a1, a2 3715; LMULMAX2-RV64-NEXT: and a1, a1, a4 3716; LMULMAX2-RV64-NEXT: mul a1, a1, a5 3717; LMULMAX2-RV64-NEXT: srli a1, a1, 56 3718; LMULMAX2-RV64-NEXT: sb a1, 58(sp) 3719; LMULMAX2-RV64-NEXT: vslidedown.vi v28, v26, 25 3720; LMULMAX2-RV64-NEXT: vmv.x.s a1, v28 3721; LMULMAX2-RV64-NEXT: ori a1, a1, 256 3722; LMULMAX2-RV64-NEXT: addi a2, a1, -1 3723; LMULMAX2-RV64-NEXT: not a1, a1 3724; LMULMAX2-RV64-NEXT: and a1, a1, a2 3725; LMULMAX2-RV64-NEXT: srli a2, a1, 1 3726; LMULMAX2-RV64-NEXT: and a2, a2, a7 3727; LMULMAX2-RV64-NEXT: sub a1, a1, a2 3728; LMULMAX2-RV64-NEXT: and a2, a1, a3 3729; LMULMAX2-RV64-NEXT: srli a1, a1, 2 3730; LMULMAX2-RV64-NEXT: and a1, a1, a3 3731; LMULMAX2-RV64-NEXT: add a1, a2, a1 3732; LMULMAX2-RV64-NEXT: srli a2, a1, 4 3733; LMULMAX2-RV64-NEXT: add a1, a1, a2 3734; LMULMAX2-RV64-NEXT: and a1, a1, a4 3735; LMULMAX2-RV64-NEXT: mul a1, a1, a5 3736; LMULMAX2-RV64-NEXT: srli a1, a1, 56 3737; LMULMAX2-RV64-NEXT: sb a1, 57(sp) 3738; LMULMAX2-RV64-NEXT: vslidedown.vi v28, v26, 24 3739; LMULMAX2-RV64-NEXT: vmv.x.s a1, v28 3740; LMULMAX2-RV64-NEXT: ori a1, a1, 256 3741; LMULMAX2-RV64-NEXT: addi a2, a1, -1 3742; LMULMAX2-RV64-NEXT: not a1, a1 3743; LMULMAX2-RV64-NEXT: and a1, a1, a2 3744; LMULMAX2-RV64-NEXT: srli a2, a1, 1 3745; LMULMAX2-RV64-NEXT: and a2, a2, a7 3746; LMULMAX2-RV64-NEXT: sub a1, a1, a2 3747; LMULMAX2-RV64-NEXT: and a2, a1, a3 3748; LMULMAX2-RV64-NEXT: srli a1, a1, 2 3749; LMULMAX2-RV64-NEXT: and a1, a1, a3 3750; LMULMAX2-RV64-NEXT: add a1, a2, a1 3751; LMULMAX2-RV64-NEXT: srli a2, a1, 4 3752; LMULMAX2-RV64-NEXT: add a1, a1, a2 3753; LMULMAX2-RV64-NEXT: and a1, a1, a4 3754; LMULMAX2-RV64-NEXT: mul a1, a1, a5 3755; LMULMAX2-RV64-NEXT: srli a1, a1, 56 3756; LMULMAX2-RV64-NEXT: sb a1, 56(sp) 3757; LMULMAX2-RV64-NEXT: vslidedown.vi v28, v26, 23 3758; LMULMAX2-RV64-NEXT: vmv.x.s a1, v28 3759; LMULMAX2-RV64-NEXT: ori a1, a1, 256 3760; LMULMAX2-RV64-NEXT: addi a2, a1, -1 3761; LMULMAX2-RV64-NEXT: not a1, a1 3762; LMULMAX2-RV64-NEXT: and a1, a1, a2 3763; LMULMAX2-RV64-NEXT: srli a2, a1, 1 3764; LMULMAX2-RV64-NEXT: and a2, a2, a7 3765; LMULMAX2-RV64-NEXT: sub a1, a1, a2 3766; LMULMAX2-RV64-NEXT: and a2, a1, a3 3767; LMULMAX2-RV64-NEXT: srli a1, a1, 2 3768; LMULMAX2-RV64-NEXT: and a1, a1, a3 3769; LMULMAX2-RV64-NEXT: add a1, a2, a1 3770; LMULMAX2-RV64-NEXT: srli a2, a1, 4 3771; LMULMAX2-RV64-NEXT: add a1, a1, a2 3772; LMULMAX2-RV64-NEXT: and a1, a1, a4 3773; LMULMAX2-RV64-NEXT: mul a1, a1, a5 3774; LMULMAX2-RV64-NEXT: srli a1, a1, 56 3775; LMULMAX2-RV64-NEXT: sb a1, 55(sp) 3776; LMULMAX2-RV64-NEXT: vslidedown.vi v28, v26, 22 3777; LMULMAX2-RV64-NEXT: vmv.x.s a1, v28 3778; LMULMAX2-RV64-NEXT: ori a1, a1, 256 3779; LMULMAX2-RV64-NEXT: addi a2, a1, -1 3780; LMULMAX2-RV64-NEXT: not a1, a1 3781; LMULMAX2-RV64-NEXT: and a1, a1, a2 3782; LMULMAX2-RV64-NEXT: srli a2, a1, 1 3783; LMULMAX2-RV64-NEXT: and a2, a2, a7 3784; LMULMAX2-RV64-NEXT: sub a1, a1, a2 3785; LMULMAX2-RV64-NEXT: and a2, a1, a3 3786; LMULMAX2-RV64-NEXT: srli a1, a1, 2 3787; LMULMAX2-RV64-NEXT: and a1, a1, a3 3788; LMULMAX2-RV64-NEXT: add a1, a2, a1 3789; LMULMAX2-RV64-NEXT: srli a2, a1, 4 3790; LMULMAX2-RV64-NEXT: add a1, a1, a2 3791; LMULMAX2-RV64-NEXT: and a1, a1, a4 3792; LMULMAX2-RV64-NEXT: mul a1, a1, a5 3793; LMULMAX2-RV64-NEXT: srli a1, a1, 56 3794; LMULMAX2-RV64-NEXT: sb a1, 54(sp) 3795; LMULMAX2-RV64-NEXT: vslidedown.vi v28, v26, 21 3796; LMULMAX2-RV64-NEXT: vmv.x.s a1, v28 3797; LMULMAX2-RV64-NEXT: ori a1, a1, 256 3798; LMULMAX2-RV64-NEXT: addi a2, a1, -1 3799; LMULMAX2-RV64-NEXT: not a1, a1 3800; LMULMAX2-RV64-NEXT: and a1, a1, a2 3801; LMULMAX2-RV64-NEXT: srli a2, a1, 1 3802; LMULMAX2-RV64-NEXT: and a2, a2, a7 3803; LMULMAX2-RV64-NEXT: sub a1, a1, a2 3804; LMULMAX2-RV64-NEXT: and a2, a1, a3 3805; LMULMAX2-RV64-NEXT: srli a1, a1, 2 3806; LMULMAX2-RV64-NEXT: and a1, a1, a3 3807; LMULMAX2-RV64-NEXT: add a1, a2, a1 3808; LMULMAX2-RV64-NEXT: srli a2, a1, 4 3809; LMULMAX2-RV64-NEXT: add a1, a1, a2 3810; LMULMAX2-RV64-NEXT: and a1, a1, a4 3811; LMULMAX2-RV64-NEXT: mul a1, a1, a5 3812; LMULMAX2-RV64-NEXT: srli a1, a1, 56 3813; LMULMAX2-RV64-NEXT: sb a1, 53(sp) 3814; LMULMAX2-RV64-NEXT: vslidedown.vi v28, v26, 20 3815; LMULMAX2-RV64-NEXT: vmv.x.s a1, v28 3816; LMULMAX2-RV64-NEXT: ori a1, a1, 256 3817; LMULMAX2-RV64-NEXT: addi a2, a1, -1 3818; LMULMAX2-RV64-NEXT: not a1, a1 3819; LMULMAX2-RV64-NEXT: and a1, a1, a2 3820; LMULMAX2-RV64-NEXT: srli a2, a1, 1 3821; LMULMAX2-RV64-NEXT: and a2, a2, a7 3822; LMULMAX2-RV64-NEXT: sub a1, a1, a2 3823; LMULMAX2-RV64-NEXT: and a2, a1, a3 3824; LMULMAX2-RV64-NEXT: srli a1, a1, 2 3825; LMULMAX2-RV64-NEXT: and a1, a1, a3 3826; LMULMAX2-RV64-NEXT: add a1, a2, a1 3827; LMULMAX2-RV64-NEXT: srli a2, a1, 4 3828; LMULMAX2-RV64-NEXT: add a1, a1, a2 3829; LMULMAX2-RV64-NEXT: and a1, a1, a4 3830; LMULMAX2-RV64-NEXT: mul a1, a1, a5 3831; LMULMAX2-RV64-NEXT: srli a1, a1, 56 3832; LMULMAX2-RV64-NEXT: sb a1, 52(sp) 3833; LMULMAX2-RV64-NEXT: vslidedown.vi v28, v26, 19 3834; LMULMAX2-RV64-NEXT: vmv.x.s a1, v28 3835; LMULMAX2-RV64-NEXT: ori a1, a1, 256 3836; LMULMAX2-RV64-NEXT: addi a2, a1, -1 3837; LMULMAX2-RV64-NEXT: not a1, a1 3838; LMULMAX2-RV64-NEXT: and a1, a1, a2 3839; LMULMAX2-RV64-NEXT: srli a2, a1, 1 3840; LMULMAX2-RV64-NEXT: and a2, a2, a7 3841; LMULMAX2-RV64-NEXT: sub a1, a1, a2 3842; LMULMAX2-RV64-NEXT: and a2, a1, a3 3843; LMULMAX2-RV64-NEXT: srli a1, a1, 2 3844; LMULMAX2-RV64-NEXT: and a1, a1, a3 3845; LMULMAX2-RV64-NEXT: add a1, a2, a1 3846; LMULMAX2-RV64-NEXT: srli a2, a1, 4 3847; LMULMAX2-RV64-NEXT: add a1, a1, a2 3848; LMULMAX2-RV64-NEXT: and a1, a1, a4 3849; LMULMAX2-RV64-NEXT: mul a1, a1, a5 3850; LMULMAX2-RV64-NEXT: srli a1, a1, 56 3851; LMULMAX2-RV64-NEXT: sb a1, 51(sp) 3852; LMULMAX2-RV64-NEXT: vslidedown.vi v28, v26, 18 3853; LMULMAX2-RV64-NEXT: vmv.x.s a1, v28 3854; LMULMAX2-RV64-NEXT: ori a1, a1, 256 3855; LMULMAX2-RV64-NEXT: addi a2, a1, -1 3856; LMULMAX2-RV64-NEXT: not a1, a1 3857; LMULMAX2-RV64-NEXT: and a1, a1, a2 3858; LMULMAX2-RV64-NEXT: srli a2, a1, 1 3859; LMULMAX2-RV64-NEXT: and a2, a2, a7 3860; LMULMAX2-RV64-NEXT: sub a1, a1, a2 3861; LMULMAX2-RV64-NEXT: and a2, a1, a3 3862; LMULMAX2-RV64-NEXT: srli a1, a1, 2 3863; LMULMAX2-RV64-NEXT: and a1, a1, a3 3864; LMULMAX2-RV64-NEXT: add a1, a2, a1 3865; LMULMAX2-RV64-NEXT: srli a2, a1, 4 3866; LMULMAX2-RV64-NEXT: add a1, a1, a2 3867; LMULMAX2-RV64-NEXT: and a1, a1, a4 3868; LMULMAX2-RV64-NEXT: mul a1, a1, a5 3869; LMULMAX2-RV64-NEXT: srli a1, a1, 56 3870; LMULMAX2-RV64-NEXT: sb a1, 50(sp) 3871; LMULMAX2-RV64-NEXT: vslidedown.vi v28, v26, 17 3872; LMULMAX2-RV64-NEXT: vmv.x.s a1, v28 3873; LMULMAX2-RV64-NEXT: ori a1, a1, 256 3874; LMULMAX2-RV64-NEXT: addi a2, a1, -1 3875; LMULMAX2-RV64-NEXT: not a1, a1 3876; LMULMAX2-RV64-NEXT: and a1, a1, a2 3877; LMULMAX2-RV64-NEXT: srli a2, a1, 1 3878; LMULMAX2-RV64-NEXT: and a2, a2, a7 3879; LMULMAX2-RV64-NEXT: sub a1, a1, a2 3880; LMULMAX2-RV64-NEXT: and a2, a1, a3 3881; LMULMAX2-RV64-NEXT: srli a1, a1, 2 3882; LMULMAX2-RV64-NEXT: and a1, a1, a3 3883; LMULMAX2-RV64-NEXT: add a1, a2, a1 3884; LMULMAX2-RV64-NEXT: srli a2, a1, 4 3885; LMULMAX2-RV64-NEXT: add a1, a1, a2 3886; LMULMAX2-RV64-NEXT: and a1, a1, a4 3887; LMULMAX2-RV64-NEXT: mul a1, a1, a5 3888; LMULMAX2-RV64-NEXT: srli a1, a1, 56 3889; LMULMAX2-RV64-NEXT: sb a1, 49(sp) 3890; LMULMAX2-RV64-NEXT: vslidedown.vi v28, v26, 16 3891; LMULMAX2-RV64-NEXT: vmv.x.s a1, v28 3892; LMULMAX2-RV64-NEXT: ori a1, a1, 256 3893; LMULMAX2-RV64-NEXT: addi a2, a1, -1 3894; LMULMAX2-RV64-NEXT: not a1, a1 3895; LMULMAX2-RV64-NEXT: and a1, a1, a2 3896; LMULMAX2-RV64-NEXT: srli a2, a1, 1 3897; LMULMAX2-RV64-NEXT: and a2, a2, a7 3898; LMULMAX2-RV64-NEXT: sub a1, a1, a2 3899; LMULMAX2-RV64-NEXT: and a2, a1, a3 3900; LMULMAX2-RV64-NEXT: srli a1, a1, 2 3901; LMULMAX2-RV64-NEXT: and a1, a1, a3 3902; LMULMAX2-RV64-NEXT: add a1, a2, a1 3903; LMULMAX2-RV64-NEXT: srli a2, a1, 4 3904; LMULMAX2-RV64-NEXT: add a1, a1, a2 3905; LMULMAX2-RV64-NEXT: and a1, a1, a4 3906; LMULMAX2-RV64-NEXT: mul a1, a1, a5 3907; LMULMAX2-RV64-NEXT: srli a1, a1, 56 3908; LMULMAX2-RV64-NEXT: sb a1, 48(sp) 3909; LMULMAX2-RV64-NEXT: vslidedown.vi v28, v26, 15 3910; LMULMAX2-RV64-NEXT: vmv.x.s a1, v28 3911; LMULMAX2-RV64-NEXT: ori a1, a1, 256 3912; LMULMAX2-RV64-NEXT: addi a2, a1, -1 3913; LMULMAX2-RV64-NEXT: not a1, a1 3914; LMULMAX2-RV64-NEXT: and a1, a1, a2 3915; LMULMAX2-RV64-NEXT: srli a2, a1, 1 3916; LMULMAX2-RV64-NEXT: and a2, a2, a7 3917; LMULMAX2-RV64-NEXT: sub a1, a1, a2 3918; LMULMAX2-RV64-NEXT: and a2, a1, a3 3919; LMULMAX2-RV64-NEXT: srli a1, a1, 2 3920; LMULMAX2-RV64-NEXT: and a1, a1, a3 3921; LMULMAX2-RV64-NEXT: add a1, a2, a1 3922; LMULMAX2-RV64-NEXT: srli a2, a1, 4 3923; LMULMAX2-RV64-NEXT: add a1, a1, a2 3924; LMULMAX2-RV64-NEXT: and a1, a1, a4 3925; LMULMAX2-RV64-NEXT: mul a1, a1, a5 3926; LMULMAX2-RV64-NEXT: srli a1, a1, 56 3927; LMULMAX2-RV64-NEXT: sb a1, 47(sp) 3928; LMULMAX2-RV64-NEXT: vslidedown.vi v28, v26, 14 3929; LMULMAX2-RV64-NEXT: vmv.x.s a1, v28 3930; LMULMAX2-RV64-NEXT: ori a1, a1, 256 3931; LMULMAX2-RV64-NEXT: addi a2, a1, -1 3932; LMULMAX2-RV64-NEXT: not a1, a1 3933; LMULMAX2-RV64-NEXT: and a1, a1, a2 3934; LMULMAX2-RV64-NEXT: srli a2, a1, 1 3935; LMULMAX2-RV64-NEXT: and a2, a2, a7 3936; LMULMAX2-RV64-NEXT: sub a1, a1, a2 3937; LMULMAX2-RV64-NEXT: and a2, a1, a3 3938; LMULMAX2-RV64-NEXT: srli a1, a1, 2 3939; LMULMAX2-RV64-NEXT: and a1, a1, a3 3940; LMULMAX2-RV64-NEXT: add a1, a2, a1 3941; LMULMAX2-RV64-NEXT: srli a2, a1, 4 3942; LMULMAX2-RV64-NEXT: add a1, a1, a2 3943; LMULMAX2-RV64-NEXT: and a1, a1, a4 3944; LMULMAX2-RV64-NEXT: mul a1, a1, a5 3945; LMULMAX2-RV64-NEXT: srli a1, a1, 56 3946; LMULMAX2-RV64-NEXT: sb a1, 46(sp) 3947; LMULMAX2-RV64-NEXT: vslidedown.vi v28, v26, 13 3948; LMULMAX2-RV64-NEXT: vmv.x.s a1, v28 3949; LMULMAX2-RV64-NEXT: ori a1, a1, 256 3950; LMULMAX2-RV64-NEXT: addi a2, a1, -1 3951; LMULMAX2-RV64-NEXT: not a1, a1 3952; LMULMAX2-RV64-NEXT: and a1, a1, a2 3953; LMULMAX2-RV64-NEXT: srli a2, a1, 1 3954; LMULMAX2-RV64-NEXT: and a2, a2, a7 3955; LMULMAX2-RV64-NEXT: sub a1, a1, a2 3956; LMULMAX2-RV64-NEXT: and a2, a1, a3 3957; LMULMAX2-RV64-NEXT: srli a1, a1, 2 3958; LMULMAX2-RV64-NEXT: and a1, a1, a3 3959; LMULMAX2-RV64-NEXT: add a1, a2, a1 3960; LMULMAX2-RV64-NEXT: srli a2, a1, 4 3961; LMULMAX2-RV64-NEXT: add a1, a1, a2 3962; LMULMAX2-RV64-NEXT: and a1, a1, a4 3963; LMULMAX2-RV64-NEXT: mul a1, a1, a5 3964; LMULMAX2-RV64-NEXT: srli a1, a1, 56 3965; LMULMAX2-RV64-NEXT: sb a1, 45(sp) 3966; LMULMAX2-RV64-NEXT: vslidedown.vi v28, v26, 12 3967; LMULMAX2-RV64-NEXT: vmv.x.s a1, v28 3968; LMULMAX2-RV64-NEXT: ori a1, a1, 256 3969; LMULMAX2-RV64-NEXT: addi a2, a1, -1 3970; LMULMAX2-RV64-NEXT: not a1, a1 3971; LMULMAX2-RV64-NEXT: and a1, a1, a2 3972; LMULMAX2-RV64-NEXT: srli a2, a1, 1 3973; LMULMAX2-RV64-NEXT: and a2, a2, a7 3974; LMULMAX2-RV64-NEXT: sub a1, a1, a2 3975; LMULMAX2-RV64-NEXT: and a2, a1, a3 3976; LMULMAX2-RV64-NEXT: srli a1, a1, 2 3977; LMULMAX2-RV64-NEXT: and a1, a1, a3 3978; LMULMAX2-RV64-NEXT: add a1, a2, a1 3979; LMULMAX2-RV64-NEXT: srli a2, a1, 4 3980; LMULMAX2-RV64-NEXT: add a1, a1, a2 3981; LMULMAX2-RV64-NEXT: and a1, a1, a4 3982; LMULMAX2-RV64-NEXT: mul a1, a1, a5 3983; LMULMAX2-RV64-NEXT: srli a1, a1, 56 3984; LMULMAX2-RV64-NEXT: sb a1, 44(sp) 3985; LMULMAX2-RV64-NEXT: vslidedown.vi v28, v26, 11 3986; LMULMAX2-RV64-NEXT: vmv.x.s a1, v28 3987; LMULMAX2-RV64-NEXT: ori a1, a1, 256 3988; LMULMAX2-RV64-NEXT: addi a2, a1, -1 3989; LMULMAX2-RV64-NEXT: not a1, a1 3990; LMULMAX2-RV64-NEXT: and a1, a1, a2 3991; LMULMAX2-RV64-NEXT: srli a2, a1, 1 3992; LMULMAX2-RV64-NEXT: and a2, a2, a7 3993; LMULMAX2-RV64-NEXT: sub a1, a1, a2 3994; LMULMAX2-RV64-NEXT: and a2, a1, a3 3995; LMULMAX2-RV64-NEXT: srli a1, a1, 2 3996; LMULMAX2-RV64-NEXT: and a1, a1, a3 3997; LMULMAX2-RV64-NEXT: add a1, a2, a1 3998; LMULMAX2-RV64-NEXT: srli a2, a1, 4 3999; LMULMAX2-RV64-NEXT: add a1, a1, a2 4000; LMULMAX2-RV64-NEXT: and a1, a1, a4 4001; LMULMAX2-RV64-NEXT: mul a1, a1, a5 4002; LMULMAX2-RV64-NEXT: srli a1, a1, 56 4003; LMULMAX2-RV64-NEXT: sb a1, 43(sp) 4004; LMULMAX2-RV64-NEXT: vslidedown.vi v28, v26, 10 4005; LMULMAX2-RV64-NEXT: vmv.x.s a1, v28 4006; LMULMAX2-RV64-NEXT: ori a1, a1, 256 4007; LMULMAX2-RV64-NEXT: addi a2, a1, -1 4008; LMULMAX2-RV64-NEXT: not a1, a1 4009; LMULMAX2-RV64-NEXT: and a1, a1, a2 4010; LMULMAX2-RV64-NEXT: srli a2, a1, 1 4011; LMULMAX2-RV64-NEXT: and a2, a2, a7 4012; LMULMAX2-RV64-NEXT: sub a1, a1, a2 4013; LMULMAX2-RV64-NEXT: and a2, a1, a3 4014; LMULMAX2-RV64-NEXT: srli a1, a1, 2 4015; LMULMAX2-RV64-NEXT: and a1, a1, a3 4016; LMULMAX2-RV64-NEXT: add a1, a2, a1 4017; LMULMAX2-RV64-NEXT: srli a2, a1, 4 4018; LMULMAX2-RV64-NEXT: add a1, a1, a2 4019; LMULMAX2-RV64-NEXT: and a1, a1, a4 4020; LMULMAX2-RV64-NEXT: mul a1, a1, a5 4021; LMULMAX2-RV64-NEXT: srli a1, a1, 56 4022; LMULMAX2-RV64-NEXT: sb a1, 42(sp) 4023; LMULMAX2-RV64-NEXT: vslidedown.vi v28, v26, 9 4024; LMULMAX2-RV64-NEXT: vmv.x.s a1, v28 4025; LMULMAX2-RV64-NEXT: ori a1, a1, 256 4026; LMULMAX2-RV64-NEXT: addi a2, a1, -1 4027; LMULMAX2-RV64-NEXT: not a1, a1 4028; LMULMAX2-RV64-NEXT: and a1, a1, a2 4029; LMULMAX2-RV64-NEXT: srli a2, a1, 1 4030; LMULMAX2-RV64-NEXT: and a2, a2, a7 4031; LMULMAX2-RV64-NEXT: sub a1, a1, a2 4032; LMULMAX2-RV64-NEXT: and a2, a1, a3 4033; LMULMAX2-RV64-NEXT: srli a1, a1, 2 4034; LMULMAX2-RV64-NEXT: and a1, a1, a3 4035; LMULMAX2-RV64-NEXT: add a1, a2, a1 4036; LMULMAX2-RV64-NEXT: srli a2, a1, 4 4037; LMULMAX2-RV64-NEXT: add a1, a1, a2 4038; LMULMAX2-RV64-NEXT: and a1, a1, a4 4039; LMULMAX2-RV64-NEXT: mul a1, a1, a5 4040; LMULMAX2-RV64-NEXT: srli a1, a1, 56 4041; LMULMAX2-RV64-NEXT: sb a1, 41(sp) 4042; LMULMAX2-RV64-NEXT: vslidedown.vi v28, v26, 8 4043; LMULMAX2-RV64-NEXT: vmv.x.s a1, v28 4044; LMULMAX2-RV64-NEXT: ori a1, a1, 256 4045; LMULMAX2-RV64-NEXT: addi a2, a1, -1 4046; LMULMAX2-RV64-NEXT: not a1, a1 4047; LMULMAX2-RV64-NEXT: and a1, a1, a2 4048; LMULMAX2-RV64-NEXT: srli a2, a1, 1 4049; LMULMAX2-RV64-NEXT: and a2, a2, a7 4050; LMULMAX2-RV64-NEXT: sub a1, a1, a2 4051; LMULMAX2-RV64-NEXT: and a2, a1, a3 4052; LMULMAX2-RV64-NEXT: srli a1, a1, 2 4053; LMULMAX2-RV64-NEXT: and a1, a1, a3 4054; LMULMAX2-RV64-NEXT: add a1, a2, a1 4055; LMULMAX2-RV64-NEXT: srli a2, a1, 4 4056; LMULMAX2-RV64-NEXT: add a1, a1, a2 4057; LMULMAX2-RV64-NEXT: and a1, a1, a4 4058; LMULMAX2-RV64-NEXT: mul a1, a1, a5 4059; LMULMAX2-RV64-NEXT: srli a1, a1, 56 4060; LMULMAX2-RV64-NEXT: sb a1, 40(sp) 4061; LMULMAX2-RV64-NEXT: vslidedown.vi v28, v26, 7 4062; LMULMAX2-RV64-NEXT: vmv.x.s a1, v28 4063; LMULMAX2-RV64-NEXT: ori a1, a1, 256 4064; LMULMAX2-RV64-NEXT: addi a2, a1, -1 4065; LMULMAX2-RV64-NEXT: not a1, a1 4066; LMULMAX2-RV64-NEXT: and a1, a1, a2 4067; LMULMAX2-RV64-NEXT: srli a2, a1, 1 4068; LMULMAX2-RV64-NEXT: and a2, a2, a7 4069; LMULMAX2-RV64-NEXT: sub a1, a1, a2 4070; LMULMAX2-RV64-NEXT: and a2, a1, a3 4071; LMULMAX2-RV64-NEXT: srli a1, a1, 2 4072; LMULMAX2-RV64-NEXT: and a1, a1, a3 4073; LMULMAX2-RV64-NEXT: add a1, a2, a1 4074; LMULMAX2-RV64-NEXT: srli a2, a1, 4 4075; LMULMAX2-RV64-NEXT: add a1, a1, a2 4076; LMULMAX2-RV64-NEXT: and a1, a1, a4 4077; LMULMAX2-RV64-NEXT: mul a1, a1, a5 4078; LMULMAX2-RV64-NEXT: srli a1, a1, 56 4079; LMULMAX2-RV64-NEXT: sb a1, 39(sp) 4080; LMULMAX2-RV64-NEXT: vslidedown.vi v28, v26, 6 4081; LMULMAX2-RV64-NEXT: vmv.x.s a1, v28 4082; LMULMAX2-RV64-NEXT: ori a1, a1, 256 4083; LMULMAX2-RV64-NEXT: addi a2, a1, -1 4084; LMULMAX2-RV64-NEXT: not a1, a1 4085; LMULMAX2-RV64-NEXT: and a1, a1, a2 4086; LMULMAX2-RV64-NEXT: srli a2, a1, 1 4087; LMULMAX2-RV64-NEXT: and a2, a2, a7 4088; LMULMAX2-RV64-NEXT: sub a1, a1, a2 4089; LMULMAX2-RV64-NEXT: and a2, a1, a3 4090; LMULMAX2-RV64-NEXT: srli a1, a1, 2 4091; LMULMAX2-RV64-NEXT: and a1, a1, a3 4092; LMULMAX2-RV64-NEXT: add a1, a2, a1 4093; LMULMAX2-RV64-NEXT: srli a2, a1, 4 4094; LMULMAX2-RV64-NEXT: add a1, a1, a2 4095; LMULMAX2-RV64-NEXT: and a1, a1, a4 4096; LMULMAX2-RV64-NEXT: mul a1, a1, a5 4097; LMULMAX2-RV64-NEXT: srli a1, a1, 56 4098; LMULMAX2-RV64-NEXT: sb a1, 38(sp) 4099; LMULMAX2-RV64-NEXT: vslidedown.vi v28, v26, 5 4100; LMULMAX2-RV64-NEXT: vmv.x.s a1, v28 4101; LMULMAX2-RV64-NEXT: ori a1, a1, 256 4102; LMULMAX2-RV64-NEXT: addi a2, a1, -1 4103; LMULMAX2-RV64-NEXT: not a1, a1 4104; LMULMAX2-RV64-NEXT: and a1, a1, a2 4105; LMULMAX2-RV64-NEXT: srli a2, a1, 1 4106; LMULMAX2-RV64-NEXT: and a2, a2, a7 4107; LMULMAX2-RV64-NEXT: sub a1, a1, a2 4108; LMULMAX2-RV64-NEXT: and a2, a1, a3 4109; LMULMAX2-RV64-NEXT: srli a1, a1, 2 4110; LMULMAX2-RV64-NEXT: and a1, a1, a3 4111; LMULMAX2-RV64-NEXT: add a1, a2, a1 4112; LMULMAX2-RV64-NEXT: srli a2, a1, 4 4113; LMULMAX2-RV64-NEXT: add a1, a1, a2 4114; LMULMAX2-RV64-NEXT: and a1, a1, a4 4115; LMULMAX2-RV64-NEXT: mul a1, a1, a5 4116; LMULMAX2-RV64-NEXT: srli a1, a1, 56 4117; LMULMAX2-RV64-NEXT: sb a1, 37(sp) 4118; LMULMAX2-RV64-NEXT: vslidedown.vi v28, v26, 4 4119; LMULMAX2-RV64-NEXT: vmv.x.s a1, v28 4120; LMULMAX2-RV64-NEXT: ori a1, a1, 256 4121; LMULMAX2-RV64-NEXT: addi a2, a1, -1 4122; LMULMAX2-RV64-NEXT: not a1, a1 4123; LMULMAX2-RV64-NEXT: and a1, a1, a2 4124; LMULMAX2-RV64-NEXT: srli a2, a1, 1 4125; LMULMAX2-RV64-NEXT: and a2, a2, a7 4126; LMULMAX2-RV64-NEXT: sub a1, a1, a2 4127; LMULMAX2-RV64-NEXT: and a2, a1, a3 4128; LMULMAX2-RV64-NEXT: srli a1, a1, 2 4129; LMULMAX2-RV64-NEXT: and a1, a1, a3 4130; LMULMAX2-RV64-NEXT: add a1, a2, a1 4131; LMULMAX2-RV64-NEXT: srli a2, a1, 4 4132; LMULMAX2-RV64-NEXT: add a1, a1, a2 4133; LMULMAX2-RV64-NEXT: and a1, a1, a4 4134; LMULMAX2-RV64-NEXT: mul a1, a1, a5 4135; LMULMAX2-RV64-NEXT: srli a1, a1, 56 4136; LMULMAX2-RV64-NEXT: sb a1, 36(sp) 4137; LMULMAX2-RV64-NEXT: vslidedown.vi v28, v26, 3 4138; LMULMAX2-RV64-NEXT: vmv.x.s a1, v28 4139; LMULMAX2-RV64-NEXT: ori a1, a1, 256 4140; LMULMAX2-RV64-NEXT: addi a2, a1, -1 4141; LMULMAX2-RV64-NEXT: not a1, a1 4142; LMULMAX2-RV64-NEXT: and a1, a1, a2 4143; LMULMAX2-RV64-NEXT: srli a2, a1, 1 4144; LMULMAX2-RV64-NEXT: and a2, a2, a7 4145; LMULMAX2-RV64-NEXT: sub a1, a1, a2 4146; LMULMAX2-RV64-NEXT: and a2, a1, a3 4147; LMULMAX2-RV64-NEXT: srli a1, a1, 2 4148; LMULMAX2-RV64-NEXT: and a1, a1, a3 4149; LMULMAX2-RV64-NEXT: add a1, a2, a1 4150; LMULMAX2-RV64-NEXT: srli a2, a1, 4 4151; LMULMAX2-RV64-NEXT: add a1, a1, a2 4152; LMULMAX2-RV64-NEXT: and a1, a1, a4 4153; LMULMAX2-RV64-NEXT: mul a1, a1, a5 4154; LMULMAX2-RV64-NEXT: srli a1, a1, 56 4155; LMULMAX2-RV64-NEXT: sb a1, 35(sp) 4156; LMULMAX2-RV64-NEXT: vslidedown.vi v28, v26, 2 4157; LMULMAX2-RV64-NEXT: vmv.x.s a1, v28 4158; LMULMAX2-RV64-NEXT: ori a1, a1, 256 4159; LMULMAX2-RV64-NEXT: addi a2, a1, -1 4160; LMULMAX2-RV64-NEXT: not a1, a1 4161; LMULMAX2-RV64-NEXT: and a1, a1, a2 4162; LMULMAX2-RV64-NEXT: srli a2, a1, 1 4163; LMULMAX2-RV64-NEXT: and a2, a2, a7 4164; LMULMAX2-RV64-NEXT: sub a1, a1, a2 4165; LMULMAX2-RV64-NEXT: and a2, a1, a3 4166; LMULMAX2-RV64-NEXT: srli a1, a1, 2 4167; LMULMAX2-RV64-NEXT: and a1, a1, a3 4168; LMULMAX2-RV64-NEXT: add a1, a2, a1 4169; LMULMAX2-RV64-NEXT: srli a2, a1, 4 4170; LMULMAX2-RV64-NEXT: add a1, a1, a2 4171; LMULMAX2-RV64-NEXT: and a1, a1, a4 4172; LMULMAX2-RV64-NEXT: mul a1, a1, a5 4173; LMULMAX2-RV64-NEXT: srli a1, a1, 56 4174; LMULMAX2-RV64-NEXT: sb a1, 34(sp) 4175; LMULMAX2-RV64-NEXT: vslidedown.vi v28, v26, 1 4176; LMULMAX2-RV64-NEXT: vmv.x.s a1, v28 4177; LMULMAX2-RV64-NEXT: ori a1, a1, 256 4178; LMULMAX2-RV64-NEXT: addi a2, a1, -1 4179; LMULMAX2-RV64-NEXT: not a1, a1 4180; LMULMAX2-RV64-NEXT: and a1, a1, a2 4181; LMULMAX2-RV64-NEXT: srli a2, a1, 1 4182; LMULMAX2-RV64-NEXT: and a2, a2, a7 4183; LMULMAX2-RV64-NEXT: sub a1, a1, a2 4184; LMULMAX2-RV64-NEXT: and a2, a1, a3 4185; LMULMAX2-RV64-NEXT: srli a1, a1, 2 4186; LMULMAX2-RV64-NEXT: and a1, a1, a3 4187; LMULMAX2-RV64-NEXT: add a1, a2, a1 4188; LMULMAX2-RV64-NEXT: srli a2, a1, 4 4189; LMULMAX2-RV64-NEXT: add a1, a1, a2 4190; LMULMAX2-RV64-NEXT: and a1, a1, a4 4191; LMULMAX2-RV64-NEXT: mul a1, a1, a5 4192; LMULMAX2-RV64-NEXT: srli a1, a1, 56 4193; LMULMAX2-RV64-NEXT: sb a1, 33(sp) 4194; LMULMAX2-RV64-NEXT: vmv.x.s a1, v26 4195; LMULMAX2-RV64-NEXT: ori a1, a1, 256 4196; LMULMAX2-RV64-NEXT: addi a2, a1, -1 4197; LMULMAX2-RV64-NEXT: not a1, a1 4198; LMULMAX2-RV64-NEXT: and a1, a1, a2 4199; LMULMAX2-RV64-NEXT: srli a2, a1, 1 4200; LMULMAX2-RV64-NEXT: and a2, a2, a7 4201; LMULMAX2-RV64-NEXT: sub a1, a1, a2 4202; LMULMAX2-RV64-NEXT: and a2, a1, a3 4203; LMULMAX2-RV64-NEXT: srli a1, a1, 2 4204; LMULMAX2-RV64-NEXT: and a1, a1, a3 4205; LMULMAX2-RV64-NEXT: add a1, a2, a1 4206; LMULMAX2-RV64-NEXT: srli a2, a1, 4 4207; LMULMAX2-RV64-NEXT: add a1, a1, a2 4208; LMULMAX2-RV64-NEXT: and a1, a1, a4 4209; LMULMAX2-RV64-NEXT: mul a1, a1, a5 4210; LMULMAX2-RV64-NEXT: srli a1, a1, 56 4211; LMULMAX2-RV64-NEXT: sb a1, 32(sp) 4212; LMULMAX2-RV64-NEXT: vsetvli zero, a6, e8, m2, ta, mu 4213; LMULMAX2-RV64-NEXT: addi a1, sp, 32 4214; LMULMAX2-RV64-NEXT: vle8.v v26, (a1) 4215; LMULMAX2-RV64-NEXT: vse8.v v26, (a0) 4216; LMULMAX2-RV64-NEXT: addi sp, s0, -96 4217; LMULMAX2-RV64-NEXT: ld s0, 80(sp) # 8-byte Folded Reload 4218; LMULMAX2-RV64-NEXT: ld ra, 88(sp) # 8-byte Folded Reload 4219; LMULMAX2-RV64-NEXT: addi sp, sp, 96 4220; LMULMAX2-RV64-NEXT: ret 4221; 4222; LMULMAX1-RV32-LABEL: cttz_v32i8: 4223; LMULMAX1-RV32: # %bb.0: 4224; LMULMAX1-RV32-NEXT: addi sp, sp, -48 4225; LMULMAX1-RV32-NEXT: .cfi_def_cfa_offset 48 4226; LMULMAX1-RV32-NEXT: vsetivli zero, 16, e8, m1, ta, mu 4227; LMULMAX1-RV32-NEXT: addi a6, a0, 16 4228; LMULMAX1-RV32-NEXT: vle8.v v26, (a6) 4229; LMULMAX1-RV32-NEXT: vle8.v v25, (a0) 4230; LMULMAX1-RV32-NEXT: vmv.x.s a2, v26 4231; LMULMAX1-RV32-NEXT: ori a2, a2, 256 4232; LMULMAX1-RV32-NEXT: addi a3, a2, -1 4233; LMULMAX1-RV32-NEXT: not a2, a2 4234; LMULMAX1-RV32-NEXT: and a3, a2, a3 4235; LMULMAX1-RV32-NEXT: srli a4, a3, 1 4236; LMULMAX1-RV32-NEXT: lui a2, 349525 4237; LMULMAX1-RV32-NEXT: addi a7, a2, 1365 4238; LMULMAX1-RV32-NEXT: and a4, a4, a7 4239; LMULMAX1-RV32-NEXT: sub a4, a3, a4 4240; LMULMAX1-RV32-NEXT: lui a3, 209715 4241; LMULMAX1-RV32-NEXT: addi a3, a3, 819 4242; LMULMAX1-RV32-NEXT: and a5, a4, a3 4243; LMULMAX1-RV32-NEXT: srli a4, a4, 2 4244; LMULMAX1-RV32-NEXT: and a4, a4, a3 4245; LMULMAX1-RV32-NEXT: add a4, a5, a4 4246; LMULMAX1-RV32-NEXT: srli a5, a4, 4 4247; LMULMAX1-RV32-NEXT: add a5, a4, a5 4248; LMULMAX1-RV32-NEXT: lui a4, 61681 4249; LMULMAX1-RV32-NEXT: addi a4, a4, -241 4250; LMULMAX1-RV32-NEXT: and a1, a5, a4 4251; LMULMAX1-RV32-NEXT: lui a5, 4112 4252; LMULMAX1-RV32-NEXT: addi a5, a5, 257 4253; LMULMAX1-RV32-NEXT: mul a1, a1, a5 4254; LMULMAX1-RV32-NEXT: srli a1, a1, 24 4255; LMULMAX1-RV32-NEXT: sb a1, 32(sp) 4256; LMULMAX1-RV32-NEXT: vsetivli zero, 1, e8, m1, ta, mu 4257; LMULMAX1-RV32-NEXT: vslidedown.vi v27, v26, 15 4258; LMULMAX1-RV32-NEXT: vmv.x.s a1, v27 4259; LMULMAX1-RV32-NEXT: ori a1, a1, 256 4260; LMULMAX1-RV32-NEXT: addi a2, a1, -1 4261; LMULMAX1-RV32-NEXT: not a1, a1 4262; LMULMAX1-RV32-NEXT: and a1, a1, a2 4263; LMULMAX1-RV32-NEXT: srli a2, a1, 1 4264; LMULMAX1-RV32-NEXT: and a2, a2, a7 4265; LMULMAX1-RV32-NEXT: sub a1, a1, a2 4266; LMULMAX1-RV32-NEXT: and a2, a1, a3 4267; LMULMAX1-RV32-NEXT: srli a1, a1, 2 4268; LMULMAX1-RV32-NEXT: and a1, a1, a3 4269; LMULMAX1-RV32-NEXT: add a1, a2, a1 4270; LMULMAX1-RV32-NEXT: srli a2, a1, 4 4271; LMULMAX1-RV32-NEXT: add a1, a1, a2 4272; LMULMAX1-RV32-NEXT: and a1, a1, a4 4273; LMULMAX1-RV32-NEXT: mul a1, a1, a5 4274; LMULMAX1-RV32-NEXT: srli a1, a1, 24 4275; LMULMAX1-RV32-NEXT: sb a1, 47(sp) 4276; LMULMAX1-RV32-NEXT: vslidedown.vi v27, v26, 14 4277; LMULMAX1-RV32-NEXT: vmv.x.s a1, v27 4278; LMULMAX1-RV32-NEXT: ori a1, a1, 256 4279; LMULMAX1-RV32-NEXT: addi a2, a1, -1 4280; LMULMAX1-RV32-NEXT: not a1, a1 4281; LMULMAX1-RV32-NEXT: and a1, a1, a2 4282; LMULMAX1-RV32-NEXT: srli a2, a1, 1 4283; LMULMAX1-RV32-NEXT: and a2, a2, a7 4284; LMULMAX1-RV32-NEXT: sub a1, a1, a2 4285; LMULMAX1-RV32-NEXT: and a2, a1, a3 4286; LMULMAX1-RV32-NEXT: srli a1, a1, 2 4287; LMULMAX1-RV32-NEXT: and a1, a1, a3 4288; LMULMAX1-RV32-NEXT: add a1, a2, a1 4289; LMULMAX1-RV32-NEXT: srli a2, a1, 4 4290; LMULMAX1-RV32-NEXT: add a1, a1, a2 4291; LMULMAX1-RV32-NEXT: and a1, a1, a4 4292; LMULMAX1-RV32-NEXT: mul a1, a1, a5 4293; LMULMAX1-RV32-NEXT: srli a1, a1, 24 4294; LMULMAX1-RV32-NEXT: sb a1, 46(sp) 4295; LMULMAX1-RV32-NEXT: vslidedown.vi v27, v26, 13 4296; LMULMAX1-RV32-NEXT: vmv.x.s a1, v27 4297; LMULMAX1-RV32-NEXT: ori a1, a1, 256 4298; LMULMAX1-RV32-NEXT: addi a2, a1, -1 4299; LMULMAX1-RV32-NEXT: not a1, a1 4300; LMULMAX1-RV32-NEXT: and a1, a1, a2 4301; LMULMAX1-RV32-NEXT: srli a2, a1, 1 4302; LMULMAX1-RV32-NEXT: and a2, a2, a7 4303; LMULMAX1-RV32-NEXT: sub a1, a1, a2 4304; LMULMAX1-RV32-NEXT: and a2, a1, a3 4305; LMULMAX1-RV32-NEXT: srli a1, a1, 2 4306; LMULMAX1-RV32-NEXT: and a1, a1, a3 4307; LMULMAX1-RV32-NEXT: add a1, a2, a1 4308; LMULMAX1-RV32-NEXT: srli a2, a1, 4 4309; LMULMAX1-RV32-NEXT: add a1, a1, a2 4310; LMULMAX1-RV32-NEXT: and a1, a1, a4 4311; LMULMAX1-RV32-NEXT: mul a1, a1, a5 4312; LMULMAX1-RV32-NEXT: srli a1, a1, 24 4313; LMULMAX1-RV32-NEXT: sb a1, 45(sp) 4314; LMULMAX1-RV32-NEXT: vslidedown.vi v27, v26, 12 4315; LMULMAX1-RV32-NEXT: vmv.x.s a1, v27 4316; LMULMAX1-RV32-NEXT: ori a1, a1, 256 4317; LMULMAX1-RV32-NEXT: addi a2, a1, -1 4318; LMULMAX1-RV32-NEXT: not a1, a1 4319; LMULMAX1-RV32-NEXT: and a1, a1, a2 4320; LMULMAX1-RV32-NEXT: srli a2, a1, 1 4321; LMULMAX1-RV32-NEXT: and a2, a2, a7 4322; LMULMAX1-RV32-NEXT: sub a1, a1, a2 4323; LMULMAX1-RV32-NEXT: and a2, a1, a3 4324; LMULMAX1-RV32-NEXT: srli a1, a1, 2 4325; LMULMAX1-RV32-NEXT: and a1, a1, a3 4326; LMULMAX1-RV32-NEXT: add a1, a2, a1 4327; LMULMAX1-RV32-NEXT: srli a2, a1, 4 4328; LMULMAX1-RV32-NEXT: add a1, a1, a2 4329; LMULMAX1-RV32-NEXT: and a1, a1, a4 4330; LMULMAX1-RV32-NEXT: mul a1, a1, a5 4331; LMULMAX1-RV32-NEXT: srli a1, a1, 24 4332; LMULMAX1-RV32-NEXT: sb a1, 44(sp) 4333; LMULMAX1-RV32-NEXT: vslidedown.vi v27, v26, 11 4334; LMULMAX1-RV32-NEXT: vmv.x.s a1, v27 4335; LMULMAX1-RV32-NEXT: ori a1, a1, 256 4336; LMULMAX1-RV32-NEXT: addi a2, a1, -1 4337; LMULMAX1-RV32-NEXT: not a1, a1 4338; LMULMAX1-RV32-NEXT: and a1, a1, a2 4339; LMULMAX1-RV32-NEXT: srli a2, a1, 1 4340; LMULMAX1-RV32-NEXT: and a2, a2, a7 4341; LMULMAX1-RV32-NEXT: sub a1, a1, a2 4342; LMULMAX1-RV32-NEXT: and a2, a1, a3 4343; LMULMAX1-RV32-NEXT: srli a1, a1, 2 4344; LMULMAX1-RV32-NEXT: and a1, a1, a3 4345; LMULMAX1-RV32-NEXT: add a1, a2, a1 4346; LMULMAX1-RV32-NEXT: srli a2, a1, 4 4347; LMULMAX1-RV32-NEXT: add a1, a1, a2 4348; LMULMAX1-RV32-NEXT: and a1, a1, a4 4349; LMULMAX1-RV32-NEXT: mul a1, a1, a5 4350; LMULMAX1-RV32-NEXT: srli a1, a1, 24 4351; LMULMAX1-RV32-NEXT: sb a1, 43(sp) 4352; LMULMAX1-RV32-NEXT: vslidedown.vi v27, v26, 10 4353; LMULMAX1-RV32-NEXT: vmv.x.s a1, v27 4354; LMULMAX1-RV32-NEXT: ori a1, a1, 256 4355; LMULMAX1-RV32-NEXT: addi a2, a1, -1 4356; LMULMAX1-RV32-NEXT: not a1, a1 4357; LMULMAX1-RV32-NEXT: and a1, a1, a2 4358; LMULMAX1-RV32-NEXT: srli a2, a1, 1 4359; LMULMAX1-RV32-NEXT: and a2, a2, a7 4360; LMULMAX1-RV32-NEXT: sub a1, a1, a2 4361; LMULMAX1-RV32-NEXT: and a2, a1, a3 4362; LMULMAX1-RV32-NEXT: srli a1, a1, 2 4363; LMULMAX1-RV32-NEXT: and a1, a1, a3 4364; LMULMAX1-RV32-NEXT: add a1, a2, a1 4365; LMULMAX1-RV32-NEXT: srli a2, a1, 4 4366; LMULMAX1-RV32-NEXT: add a1, a1, a2 4367; LMULMAX1-RV32-NEXT: and a1, a1, a4 4368; LMULMAX1-RV32-NEXT: mul a1, a1, a5 4369; LMULMAX1-RV32-NEXT: srli a1, a1, 24 4370; LMULMAX1-RV32-NEXT: sb a1, 42(sp) 4371; LMULMAX1-RV32-NEXT: vslidedown.vi v27, v26, 9 4372; LMULMAX1-RV32-NEXT: vmv.x.s a1, v27 4373; LMULMAX1-RV32-NEXT: ori a1, a1, 256 4374; LMULMAX1-RV32-NEXT: addi a2, a1, -1 4375; LMULMAX1-RV32-NEXT: not a1, a1 4376; LMULMAX1-RV32-NEXT: and a1, a1, a2 4377; LMULMAX1-RV32-NEXT: srli a2, a1, 1 4378; LMULMAX1-RV32-NEXT: and a2, a2, a7 4379; LMULMAX1-RV32-NEXT: sub a1, a1, a2 4380; LMULMAX1-RV32-NEXT: and a2, a1, a3 4381; LMULMAX1-RV32-NEXT: srli a1, a1, 2 4382; LMULMAX1-RV32-NEXT: and a1, a1, a3 4383; LMULMAX1-RV32-NEXT: add a1, a2, a1 4384; LMULMAX1-RV32-NEXT: srli a2, a1, 4 4385; LMULMAX1-RV32-NEXT: add a1, a1, a2 4386; LMULMAX1-RV32-NEXT: and a1, a1, a4 4387; LMULMAX1-RV32-NEXT: mul a1, a1, a5 4388; LMULMAX1-RV32-NEXT: srli a1, a1, 24 4389; LMULMAX1-RV32-NEXT: sb a1, 41(sp) 4390; LMULMAX1-RV32-NEXT: vslidedown.vi v27, v26, 8 4391; LMULMAX1-RV32-NEXT: vmv.x.s a1, v27 4392; LMULMAX1-RV32-NEXT: ori a1, a1, 256 4393; LMULMAX1-RV32-NEXT: addi a2, a1, -1 4394; LMULMAX1-RV32-NEXT: not a1, a1 4395; LMULMAX1-RV32-NEXT: and a1, a1, a2 4396; LMULMAX1-RV32-NEXT: srli a2, a1, 1 4397; LMULMAX1-RV32-NEXT: and a2, a2, a7 4398; LMULMAX1-RV32-NEXT: sub a1, a1, a2 4399; LMULMAX1-RV32-NEXT: and a2, a1, a3 4400; LMULMAX1-RV32-NEXT: srli a1, a1, 2 4401; LMULMAX1-RV32-NEXT: and a1, a1, a3 4402; LMULMAX1-RV32-NEXT: add a1, a2, a1 4403; LMULMAX1-RV32-NEXT: srli a2, a1, 4 4404; LMULMAX1-RV32-NEXT: add a1, a1, a2 4405; LMULMAX1-RV32-NEXT: and a1, a1, a4 4406; LMULMAX1-RV32-NEXT: mul a1, a1, a5 4407; LMULMAX1-RV32-NEXT: srli a1, a1, 24 4408; LMULMAX1-RV32-NEXT: sb a1, 40(sp) 4409; LMULMAX1-RV32-NEXT: vslidedown.vi v27, v26, 7 4410; LMULMAX1-RV32-NEXT: vmv.x.s a1, v27 4411; LMULMAX1-RV32-NEXT: ori a1, a1, 256 4412; LMULMAX1-RV32-NEXT: addi a2, a1, -1 4413; LMULMAX1-RV32-NEXT: not a1, a1 4414; LMULMAX1-RV32-NEXT: and a1, a1, a2 4415; LMULMAX1-RV32-NEXT: srli a2, a1, 1 4416; LMULMAX1-RV32-NEXT: and a2, a2, a7 4417; LMULMAX1-RV32-NEXT: sub a1, a1, a2 4418; LMULMAX1-RV32-NEXT: and a2, a1, a3 4419; LMULMAX1-RV32-NEXT: srli a1, a1, 2 4420; LMULMAX1-RV32-NEXT: and a1, a1, a3 4421; LMULMAX1-RV32-NEXT: add a1, a2, a1 4422; LMULMAX1-RV32-NEXT: srli a2, a1, 4 4423; LMULMAX1-RV32-NEXT: add a1, a1, a2 4424; LMULMAX1-RV32-NEXT: and a1, a1, a4 4425; LMULMAX1-RV32-NEXT: mul a1, a1, a5 4426; LMULMAX1-RV32-NEXT: srli a1, a1, 24 4427; LMULMAX1-RV32-NEXT: sb a1, 39(sp) 4428; LMULMAX1-RV32-NEXT: vslidedown.vi v27, v26, 6 4429; LMULMAX1-RV32-NEXT: vmv.x.s a1, v27 4430; LMULMAX1-RV32-NEXT: ori a1, a1, 256 4431; LMULMAX1-RV32-NEXT: addi a2, a1, -1 4432; LMULMAX1-RV32-NEXT: not a1, a1 4433; LMULMAX1-RV32-NEXT: and a1, a1, a2 4434; LMULMAX1-RV32-NEXT: srli a2, a1, 1 4435; LMULMAX1-RV32-NEXT: and a2, a2, a7 4436; LMULMAX1-RV32-NEXT: sub a1, a1, a2 4437; LMULMAX1-RV32-NEXT: and a2, a1, a3 4438; LMULMAX1-RV32-NEXT: srli a1, a1, 2 4439; LMULMAX1-RV32-NEXT: and a1, a1, a3 4440; LMULMAX1-RV32-NEXT: add a1, a2, a1 4441; LMULMAX1-RV32-NEXT: srli a2, a1, 4 4442; LMULMAX1-RV32-NEXT: add a1, a1, a2 4443; LMULMAX1-RV32-NEXT: and a1, a1, a4 4444; LMULMAX1-RV32-NEXT: mul a1, a1, a5 4445; LMULMAX1-RV32-NEXT: srli a1, a1, 24 4446; LMULMAX1-RV32-NEXT: sb a1, 38(sp) 4447; LMULMAX1-RV32-NEXT: vslidedown.vi v27, v26, 5 4448; LMULMAX1-RV32-NEXT: vmv.x.s a1, v27 4449; LMULMAX1-RV32-NEXT: ori a1, a1, 256 4450; LMULMAX1-RV32-NEXT: addi a2, a1, -1 4451; LMULMAX1-RV32-NEXT: not a1, a1 4452; LMULMAX1-RV32-NEXT: and a1, a1, a2 4453; LMULMAX1-RV32-NEXT: srli a2, a1, 1 4454; LMULMAX1-RV32-NEXT: and a2, a2, a7 4455; LMULMAX1-RV32-NEXT: sub a1, a1, a2 4456; LMULMAX1-RV32-NEXT: and a2, a1, a3 4457; LMULMAX1-RV32-NEXT: srli a1, a1, 2 4458; LMULMAX1-RV32-NEXT: and a1, a1, a3 4459; LMULMAX1-RV32-NEXT: add a1, a2, a1 4460; LMULMAX1-RV32-NEXT: srli a2, a1, 4 4461; LMULMAX1-RV32-NEXT: add a1, a1, a2 4462; LMULMAX1-RV32-NEXT: and a1, a1, a4 4463; LMULMAX1-RV32-NEXT: mul a1, a1, a5 4464; LMULMAX1-RV32-NEXT: srli a1, a1, 24 4465; LMULMAX1-RV32-NEXT: sb a1, 37(sp) 4466; LMULMAX1-RV32-NEXT: vslidedown.vi v27, v26, 4 4467; LMULMAX1-RV32-NEXT: vmv.x.s a1, v27 4468; LMULMAX1-RV32-NEXT: ori a1, a1, 256 4469; LMULMAX1-RV32-NEXT: addi a2, a1, -1 4470; LMULMAX1-RV32-NEXT: not a1, a1 4471; LMULMAX1-RV32-NEXT: and a1, a1, a2 4472; LMULMAX1-RV32-NEXT: srli a2, a1, 1 4473; LMULMAX1-RV32-NEXT: and a2, a2, a7 4474; LMULMAX1-RV32-NEXT: sub a1, a1, a2 4475; LMULMAX1-RV32-NEXT: and a2, a1, a3 4476; LMULMAX1-RV32-NEXT: srli a1, a1, 2 4477; LMULMAX1-RV32-NEXT: and a1, a1, a3 4478; LMULMAX1-RV32-NEXT: add a1, a2, a1 4479; LMULMAX1-RV32-NEXT: srli a2, a1, 4 4480; LMULMAX1-RV32-NEXT: add a1, a1, a2 4481; LMULMAX1-RV32-NEXT: and a1, a1, a4 4482; LMULMAX1-RV32-NEXT: mul a1, a1, a5 4483; LMULMAX1-RV32-NEXT: srli a1, a1, 24 4484; LMULMAX1-RV32-NEXT: sb a1, 36(sp) 4485; LMULMAX1-RV32-NEXT: vslidedown.vi v27, v26, 3 4486; LMULMAX1-RV32-NEXT: vmv.x.s a1, v27 4487; LMULMAX1-RV32-NEXT: ori a1, a1, 256 4488; LMULMAX1-RV32-NEXT: addi a2, a1, -1 4489; LMULMAX1-RV32-NEXT: not a1, a1 4490; LMULMAX1-RV32-NEXT: and a1, a1, a2 4491; LMULMAX1-RV32-NEXT: srli a2, a1, 1 4492; LMULMAX1-RV32-NEXT: and a2, a2, a7 4493; LMULMAX1-RV32-NEXT: sub a1, a1, a2 4494; LMULMAX1-RV32-NEXT: and a2, a1, a3 4495; LMULMAX1-RV32-NEXT: srli a1, a1, 2 4496; LMULMAX1-RV32-NEXT: and a1, a1, a3 4497; LMULMAX1-RV32-NEXT: add a1, a2, a1 4498; LMULMAX1-RV32-NEXT: srli a2, a1, 4 4499; LMULMAX1-RV32-NEXT: add a1, a1, a2 4500; LMULMAX1-RV32-NEXT: and a1, a1, a4 4501; LMULMAX1-RV32-NEXT: mul a1, a1, a5 4502; LMULMAX1-RV32-NEXT: srli a1, a1, 24 4503; LMULMAX1-RV32-NEXT: sb a1, 35(sp) 4504; LMULMAX1-RV32-NEXT: vslidedown.vi v27, v26, 2 4505; LMULMAX1-RV32-NEXT: vmv.x.s a1, v27 4506; LMULMAX1-RV32-NEXT: ori a1, a1, 256 4507; LMULMAX1-RV32-NEXT: addi a2, a1, -1 4508; LMULMAX1-RV32-NEXT: not a1, a1 4509; LMULMAX1-RV32-NEXT: and a1, a1, a2 4510; LMULMAX1-RV32-NEXT: srli a2, a1, 1 4511; LMULMAX1-RV32-NEXT: and a2, a2, a7 4512; LMULMAX1-RV32-NEXT: sub a1, a1, a2 4513; LMULMAX1-RV32-NEXT: and a2, a1, a3 4514; LMULMAX1-RV32-NEXT: srli a1, a1, 2 4515; LMULMAX1-RV32-NEXT: and a1, a1, a3 4516; LMULMAX1-RV32-NEXT: add a1, a2, a1 4517; LMULMAX1-RV32-NEXT: srli a2, a1, 4 4518; LMULMAX1-RV32-NEXT: add a1, a1, a2 4519; LMULMAX1-RV32-NEXT: and a1, a1, a4 4520; LMULMAX1-RV32-NEXT: mul a1, a1, a5 4521; LMULMAX1-RV32-NEXT: srli a1, a1, 24 4522; LMULMAX1-RV32-NEXT: sb a1, 34(sp) 4523; LMULMAX1-RV32-NEXT: vslidedown.vi v26, v26, 1 4524; LMULMAX1-RV32-NEXT: vmv.x.s a1, v26 4525; LMULMAX1-RV32-NEXT: ori a1, a1, 256 4526; LMULMAX1-RV32-NEXT: addi a2, a1, -1 4527; LMULMAX1-RV32-NEXT: not a1, a1 4528; LMULMAX1-RV32-NEXT: and a1, a1, a2 4529; LMULMAX1-RV32-NEXT: srli a2, a1, 1 4530; LMULMAX1-RV32-NEXT: and a2, a2, a7 4531; LMULMAX1-RV32-NEXT: sub a1, a1, a2 4532; LMULMAX1-RV32-NEXT: and a2, a1, a3 4533; LMULMAX1-RV32-NEXT: srli a1, a1, 2 4534; LMULMAX1-RV32-NEXT: and a1, a1, a3 4535; LMULMAX1-RV32-NEXT: add a1, a2, a1 4536; LMULMAX1-RV32-NEXT: srli a2, a1, 4 4537; LMULMAX1-RV32-NEXT: add a1, a1, a2 4538; LMULMAX1-RV32-NEXT: and a1, a1, a4 4539; LMULMAX1-RV32-NEXT: mul a1, a1, a5 4540; LMULMAX1-RV32-NEXT: srli a1, a1, 24 4541; LMULMAX1-RV32-NEXT: sb a1, 33(sp) 4542; LMULMAX1-RV32-NEXT: vmv.x.s a1, v25 4543; LMULMAX1-RV32-NEXT: ori a1, a1, 256 4544; LMULMAX1-RV32-NEXT: addi a2, a1, -1 4545; LMULMAX1-RV32-NEXT: not a1, a1 4546; LMULMAX1-RV32-NEXT: and a1, a1, a2 4547; LMULMAX1-RV32-NEXT: srli a2, a1, 1 4548; LMULMAX1-RV32-NEXT: and a2, a2, a7 4549; LMULMAX1-RV32-NEXT: sub a1, a1, a2 4550; LMULMAX1-RV32-NEXT: and a2, a1, a3 4551; LMULMAX1-RV32-NEXT: srli a1, a1, 2 4552; LMULMAX1-RV32-NEXT: and a1, a1, a3 4553; LMULMAX1-RV32-NEXT: add a1, a2, a1 4554; LMULMAX1-RV32-NEXT: srli a2, a1, 4 4555; LMULMAX1-RV32-NEXT: add a1, a1, a2 4556; LMULMAX1-RV32-NEXT: and a1, a1, a4 4557; LMULMAX1-RV32-NEXT: mul a1, a1, a5 4558; LMULMAX1-RV32-NEXT: srli a1, a1, 24 4559; LMULMAX1-RV32-NEXT: sb a1, 16(sp) 4560; LMULMAX1-RV32-NEXT: vslidedown.vi v26, v25, 15 4561; LMULMAX1-RV32-NEXT: vmv.x.s a1, v26 4562; LMULMAX1-RV32-NEXT: ori a1, a1, 256 4563; LMULMAX1-RV32-NEXT: addi a2, a1, -1 4564; LMULMAX1-RV32-NEXT: not a1, a1 4565; LMULMAX1-RV32-NEXT: and a1, a1, a2 4566; LMULMAX1-RV32-NEXT: srli a2, a1, 1 4567; LMULMAX1-RV32-NEXT: and a2, a2, a7 4568; LMULMAX1-RV32-NEXT: sub a1, a1, a2 4569; LMULMAX1-RV32-NEXT: and a2, a1, a3 4570; LMULMAX1-RV32-NEXT: srli a1, a1, 2 4571; LMULMAX1-RV32-NEXT: and a1, a1, a3 4572; LMULMAX1-RV32-NEXT: add a1, a2, a1 4573; LMULMAX1-RV32-NEXT: srli a2, a1, 4 4574; LMULMAX1-RV32-NEXT: add a1, a1, a2 4575; LMULMAX1-RV32-NEXT: and a1, a1, a4 4576; LMULMAX1-RV32-NEXT: mul a1, a1, a5 4577; LMULMAX1-RV32-NEXT: srli a1, a1, 24 4578; LMULMAX1-RV32-NEXT: sb a1, 31(sp) 4579; LMULMAX1-RV32-NEXT: vslidedown.vi v26, v25, 14 4580; LMULMAX1-RV32-NEXT: vmv.x.s a1, v26 4581; LMULMAX1-RV32-NEXT: ori a1, a1, 256 4582; LMULMAX1-RV32-NEXT: addi a2, a1, -1 4583; LMULMAX1-RV32-NEXT: not a1, a1 4584; LMULMAX1-RV32-NEXT: and a1, a1, a2 4585; LMULMAX1-RV32-NEXT: srli a2, a1, 1 4586; LMULMAX1-RV32-NEXT: and a2, a2, a7 4587; LMULMAX1-RV32-NEXT: sub a1, a1, a2 4588; LMULMAX1-RV32-NEXT: and a2, a1, a3 4589; LMULMAX1-RV32-NEXT: srli a1, a1, 2 4590; LMULMAX1-RV32-NEXT: and a1, a1, a3 4591; LMULMAX1-RV32-NEXT: add a1, a2, a1 4592; LMULMAX1-RV32-NEXT: srli a2, a1, 4 4593; LMULMAX1-RV32-NEXT: add a1, a1, a2 4594; LMULMAX1-RV32-NEXT: and a1, a1, a4 4595; LMULMAX1-RV32-NEXT: mul a1, a1, a5 4596; LMULMAX1-RV32-NEXT: srli a1, a1, 24 4597; LMULMAX1-RV32-NEXT: sb a1, 30(sp) 4598; LMULMAX1-RV32-NEXT: vslidedown.vi v26, v25, 13 4599; LMULMAX1-RV32-NEXT: vmv.x.s a1, v26 4600; LMULMAX1-RV32-NEXT: ori a1, a1, 256 4601; LMULMAX1-RV32-NEXT: addi a2, a1, -1 4602; LMULMAX1-RV32-NEXT: not a1, a1 4603; LMULMAX1-RV32-NEXT: and a1, a1, a2 4604; LMULMAX1-RV32-NEXT: srli a2, a1, 1 4605; LMULMAX1-RV32-NEXT: and a2, a2, a7 4606; LMULMAX1-RV32-NEXT: sub a1, a1, a2 4607; LMULMAX1-RV32-NEXT: and a2, a1, a3 4608; LMULMAX1-RV32-NEXT: srli a1, a1, 2 4609; LMULMAX1-RV32-NEXT: and a1, a1, a3 4610; LMULMAX1-RV32-NEXT: add a1, a2, a1 4611; LMULMAX1-RV32-NEXT: srli a2, a1, 4 4612; LMULMAX1-RV32-NEXT: add a1, a1, a2 4613; LMULMAX1-RV32-NEXT: and a1, a1, a4 4614; LMULMAX1-RV32-NEXT: mul a1, a1, a5 4615; LMULMAX1-RV32-NEXT: srli a1, a1, 24 4616; LMULMAX1-RV32-NEXT: sb a1, 29(sp) 4617; LMULMAX1-RV32-NEXT: vslidedown.vi v26, v25, 12 4618; LMULMAX1-RV32-NEXT: vmv.x.s a1, v26 4619; LMULMAX1-RV32-NEXT: ori a1, a1, 256 4620; LMULMAX1-RV32-NEXT: addi a2, a1, -1 4621; LMULMAX1-RV32-NEXT: not a1, a1 4622; LMULMAX1-RV32-NEXT: and a1, a1, a2 4623; LMULMAX1-RV32-NEXT: srli a2, a1, 1 4624; LMULMAX1-RV32-NEXT: and a2, a2, a7 4625; LMULMAX1-RV32-NEXT: sub a1, a1, a2 4626; LMULMAX1-RV32-NEXT: and a2, a1, a3 4627; LMULMAX1-RV32-NEXT: srli a1, a1, 2 4628; LMULMAX1-RV32-NEXT: and a1, a1, a3 4629; LMULMAX1-RV32-NEXT: add a1, a2, a1 4630; LMULMAX1-RV32-NEXT: srli a2, a1, 4 4631; LMULMAX1-RV32-NEXT: add a1, a1, a2 4632; LMULMAX1-RV32-NEXT: and a1, a1, a4 4633; LMULMAX1-RV32-NEXT: mul a1, a1, a5 4634; LMULMAX1-RV32-NEXT: srli a1, a1, 24 4635; LMULMAX1-RV32-NEXT: sb a1, 28(sp) 4636; LMULMAX1-RV32-NEXT: vslidedown.vi v26, v25, 11 4637; LMULMAX1-RV32-NEXT: vmv.x.s a1, v26 4638; LMULMAX1-RV32-NEXT: ori a1, a1, 256 4639; LMULMAX1-RV32-NEXT: addi a2, a1, -1 4640; LMULMAX1-RV32-NEXT: not a1, a1 4641; LMULMAX1-RV32-NEXT: and a1, a1, a2 4642; LMULMAX1-RV32-NEXT: srli a2, a1, 1 4643; LMULMAX1-RV32-NEXT: and a2, a2, a7 4644; LMULMAX1-RV32-NEXT: sub a1, a1, a2 4645; LMULMAX1-RV32-NEXT: and a2, a1, a3 4646; LMULMAX1-RV32-NEXT: srli a1, a1, 2 4647; LMULMAX1-RV32-NEXT: and a1, a1, a3 4648; LMULMAX1-RV32-NEXT: add a1, a2, a1 4649; LMULMAX1-RV32-NEXT: srli a2, a1, 4 4650; LMULMAX1-RV32-NEXT: add a1, a1, a2 4651; LMULMAX1-RV32-NEXT: and a1, a1, a4 4652; LMULMAX1-RV32-NEXT: mul a1, a1, a5 4653; LMULMAX1-RV32-NEXT: srli a1, a1, 24 4654; LMULMAX1-RV32-NEXT: sb a1, 27(sp) 4655; LMULMAX1-RV32-NEXT: vslidedown.vi v26, v25, 10 4656; LMULMAX1-RV32-NEXT: vmv.x.s a1, v26 4657; LMULMAX1-RV32-NEXT: ori a1, a1, 256 4658; LMULMAX1-RV32-NEXT: addi a2, a1, -1 4659; LMULMAX1-RV32-NEXT: not a1, a1 4660; LMULMAX1-RV32-NEXT: and a1, a1, a2 4661; LMULMAX1-RV32-NEXT: srli a2, a1, 1 4662; LMULMAX1-RV32-NEXT: and a2, a2, a7 4663; LMULMAX1-RV32-NEXT: sub a1, a1, a2 4664; LMULMAX1-RV32-NEXT: and a2, a1, a3 4665; LMULMAX1-RV32-NEXT: srli a1, a1, 2 4666; LMULMAX1-RV32-NEXT: and a1, a1, a3 4667; LMULMAX1-RV32-NEXT: add a1, a2, a1 4668; LMULMAX1-RV32-NEXT: srli a2, a1, 4 4669; LMULMAX1-RV32-NEXT: add a1, a1, a2 4670; LMULMAX1-RV32-NEXT: and a1, a1, a4 4671; LMULMAX1-RV32-NEXT: mul a1, a1, a5 4672; LMULMAX1-RV32-NEXT: srli a1, a1, 24 4673; LMULMAX1-RV32-NEXT: sb a1, 26(sp) 4674; LMULMAX1-RV32-NEXT: vslidedown.vi v26, v25, 9 4675; LMULMAX1-RV32-NEXT: vmv.x.s a1, v26 4676; LMULMAX1-RV32-NEXT: ori a1, a1, 256 4677; LMULMAX1-RV32-NEXT: addi a2, a1, -1 4678; LMULMAX1-RV32-NEXT: not a1, a1 4679; LMULMAX1-RV32-NEXT: and a1, a1, a2 4680; LMULMAX1-RV32-NEXT: srli a2, a1, 1 4681; LMULMAX1-RV32-NEXT: and a2, a2, a7 4682; LMULMAX1-RV32-NEXT: sub a1, a1, a2 4683; LMULMAX1-RV32-NEXT: and a2, a1, a3 4684; LMULMAX1-RV32-NEXT: srli a1, a1, 2 4685; LMULMAX1-RV32-NEXT: and a1, a1, a3 4686; LMULMAX1-RV32-NEXT: add a1, a2, a1 4687; LMULMAX1-RV32-NEXT: srli a2, a1, 4 4688; LMULMAX1-RV32-NEXT: add a1, a1, a2 4689; LMULMAX1-RV32-NEXT: and a1, a1, a4 4690; LMULMAX1-RV32-NEXT: mul a1, a1, a5 4691; LMULMAX1-RV32-NEXT: srli a1, a1, 24 4692; LMULMAX1-RV32-NEXT: sb a1, 25(sp) 4693; LMULMAX1-RV32-NEXT: vslidedown.vi v26, v25, 8 4694; LMULMAX1-RV32-NEXT: vmv.x.s a1, v26 4695; LMULMAX1-RV32-NEXT: ori a1, a1, 256 4696; LMULMAX1-RV32-NEXT: addi a2, a1, -1 4697; LMULMAX1-RV32-NEXT: not a1, a1 4698; LMULMAX1-RV32-NEXT: and a1, a1, a2 4699; LMULMAX1-RV32-NEXT: srli a2, a1, 1 4700; LMULMAX1-RV32-NEXT: and a2, a2, a7 4701; LMULMAX1-RV32-NEXT: sub a1, a1, a2 4702; LMULMAX1-RV32-NEXT: and a2, a1, a3 4703; LMULMAX1-RV32-NEXT: srli a1, a1, 2 4704; LMULMAX1-RV32-NEXT: and a1, a1, a3 4705; LMULMAX1-RV32-NEXT: add a1, a2, a1 4706; LMULMAX1-RV32-NEXT: srli a2, a1, 4 4707; LMULMAX1-RV32-NEXT: add a1, a1, a2 4708; LMULMAX1-RV32-NEXT: and a1, a1, a4 4709; LMULMAX1-RV32-NEXT: mul a1, a1, a5 4710; LMULMAX1-RV32-NEXT: srli a1, a1, 24 4711; LMULMAX1-RV32-NEXT: sb a1, 24(sp) 4712; LMULMAX1-RV32-NEXT: vslidedown.vi v26, v25, 7 4713; LMULMAX1-RV32-NEXT: vmv.x.s a1, v26 4714; LMULMAX1-RV32-NEXT: ori a1, a1, 256 4715; LMULMAX1-RV32-NEXT: addi a2, a1, -1 4716; LMULMAX1-RV32-NEXT: not a1, a1 4717; LMULMAX1-RV32-NEXT: and a1, a1, a2 4718; LMULMAX1-RV32-NEXT: srli a2, a1, 1 4719; LMULMAX1-RV32-NEXT: and a2, a2, a7 4720; LMULMAX1-RV32-NEXT: sub a1, a1, a2 4721; LMULMAX1-RV32-NEXT: and a2, a1, a3 4722; LMULMAX1-RV32-NEXT: srli a1, a1, 2 4723; LMULMAX1-RV32-NEXT: and a1, a1, a3 4724; LMULMAX1-RV32-NEXT: add a1, a2, a1 4725; LMULMAX1-RV32-NEXT: srli a2, a1, 4 4726; LMULMAX1-RV32-NEXT: add a1, a1, a2 4727; LMULMAX1-RV32-NEXT: and a1, a1, a4 4728; LMULMAX1-RV32-NEXT: mul a1, a1, a5 4729; LMULMAX1-RV32-NEXT: srli a1, a1, 24 4730; LMULMAX1-RV32-NEXT: sb a1, 23(sp) 4731; LMULMAX1-RV32-NEXT: vslidedown.vi v26, v25, 6 4732; LMULMAX1-RV32-NEXT: vmv.x.s a1, v26 4733; LMULMAX1-RV32-NEXT: ori a1, a1, 256 4734; LMULMAX1-RV32-NEXT: addi a2, a1, -1 4735; LMULMAX1-RV32-NEXT: not a1, a1 4736; LMULMAX1-RV32-NEXT: and a1, a1, a2 4737; LMULMAX1-RV32-NEXT: srli a2, a1, 1 4738; LMULMAX1-RV32-NEXT: and a2, a2, a7 4739; LMULMAX1-RV32-NEXT: sub a1, a1, a2 4740; LMULMAX1-RV32-NEXT: and a2, a1, a3 4741; LMULMAX1-RV32-NEXT: srli a1, a1, 2 4742; LMULMAX1-RV32-NEXT: and a1, a1, a3 4743; LMULMAX1-RV32-NEXT: add a1, a2, a1 4744; LMULMAX1-RV32-NEXT: srli a2, a1, 4 4745; LMULMAX1-RV32-NEXT: add a1, a1, a2 4746; LMULMAX1-RV32-NEXT: and a1, a1, a4 4747; LMULMAX1-RV32-NEXT: mul a1, a1, a5 4748; LMULMAX1-RV32-NEXT: srli a1, a1, 24 4749; LMULMAX1-RV32-NEXT: sb a1, 22(sp) 4750; LMULMAX1-RV32-NEXT: vslidedown.vi v26, v25, 5 4751; LMULMAX1-RV32-NEXT: vmv.x.s a1, v26 4752; LMULMAX1-RV32-NEXT: ori a1, a1, 256 4753; LMULMAX1-RV32-NEXT: addi a2, a1, -1 4754; LMULMAX1-RV32-NEXT: not a1, a1 4755; LMULMAX1-RV32-NEXT: and a1, a1, a2 4756; LMULMAX1-RV32-NEXT: srli a2, a1, 1 4757; LMULMAX1-RV32-NEXT: and a2, a2, a7 4758; LMULMAX1-RV32-NEXT: sub a1, a1, a2 4759; LMULMAX1-RV32-NEXT: and a2, a1, a3 4760; LMULMAX1-RV32-NEXT: srli a1, a1, 2 4761; LMULMAX1-RV32-NEXT: and a1, a1, a3 4762; LMULMAX1-RV32-NEXT: add a1, a2, a1 4763; LMULMAX1-RV32-NEXT: srli a2, a1, 4 4764; LMULMAX1-RV32-NEXT: add a1, a1, a2 4765; LMULMAX1-RV32-NEXT: and a1, a1, a4 4766; LMULMAX1-RV32-NEXT: mul a1, a1, a5 4767; LMULMAX1-RV32-NEXT: srli a1, a1, 24 4768; LMULMAX1-RV32-NEXT: sb a1, 21(sp) 4769; LMULMAX1-RV32-NEXT: vslidedown.vi v26, v25, 4 4770; LMULMAX1-RV32-NEXT: vmv.x.s a1, v26 4771; LMULMAX1-RV32-NEXT: ori a1, a1, 256 4772; LMULMAX1-RV32-NEXT: addi a2, a1, -1 4773; LMULMAX1-RV32-NEXT: not a1, a1 4774; LMULMAX1-RV32-NEXT: and a1, a1, a2 4775; LMULMAX1-RV32-NEXT: srli a2, a1, 1 4776; LMULMAX1-RV32-NEXT: and a2, a2, a7 4777; LMULMAX1-RV32-NEXT: sub a1, a1, a2 4778; LMULMAX1-RV32-NEXT: and a2, a1, a3 4779; LMULMAX1-RV32-NEXT: srli a1, a1, 2 4780; LMULMAX1-RV32-NEXT: and a1, a1, a3 4781; LMULMAX1-RV32-NEXT: add a1, a2, a1 4782; LMULMAX1-RV32-NEXT: srli a2, a1, 4 4783; LMULMAX1-RV32-NEXT: add a1, a1, a2 4784; LMULMAX1-RV32-NEXT: and a1, a1, a4 4785; LMULMAX1-RV32-NEXT: mul a1, a1, a5 4786; LMULMAX1-RV32-NEXT: srli a1, a1, 24 4787; LMULMAX1-RV32-NEXT: sb a1, 20(sp) 4788; LMULMAX1-RV32-NEXT: vslidedown.vi v26, v25, 3 4789; LMULMAX1-RV32-NEXT: vmv.x.s a1, v26 4790; LMULMAX1-RV32-NEXT: ori a1, a1, 256 4791; LMULMAX1-RV32-NEXT: addi a2, a1, -1 4792; LMULMAX1-RV32-NEXT: not a1, a1 4793; LMULMAX1-RV32-NEXT: and a1, a1, a2 4794; LMULMAX1-RV32-NEXT: srli a2, a1, 1 4795; LMULMAX1-RV32-NEXT: and a2, a2, a7 4796; LMULMAX1-RV32-NEXT: sub a1, a1, a2 4797; LMULMAX1-RV32-NEXT: and a2, a1, a3 4798; LMULMAX1-RV32-NEXT: srli a1, a1, 2 4799; LMULMAX1-RV32-NEXT: and a1, a1, a3 4800; LMULMAX1-RV32-NEXT: add a1, a2, a1 4801; LMULMAX1-RV32-NEXT: srli a2, a1, 4 4802; LMULMAX1-RV32-NEXT: add a1, a1, a2 4803; LMULMAX1-RV32-NEXT: and a1, a1, a4 4804; LMULMAX1-RV32-NEXT: mul a1, a1, a5 4805; LMULMAX1-RV32-NEXT: srli a1, a1, 24 4806; LMULMAX1-RV32-NEXT: sb a1, 19(sp) 4807; LMULMAX1-RV32-NEXT: vslidedown.vi v26, v25, 2 4808; LMULMAX1-RV32-NEXT: vmv.x.s a1, v26 4809; LMULMAX1-RV32-NEXT: ori a1, a1, 256 4810; LMULMAX1-RV32-NEXT: addi a2, a1, -1 4811; LMULMAX1-RV32-NEXT: not a1, a1 4812; LMULMAX1-RV32-NEXT: and a1, a1, a2 4813; LMULMAX1-RV32-NEXT: srli a2, a1, 1 4814; LMULMAX1-RV32-NEXT: and a2, a2, a7 4815; LMULMAX1-RV32-NEXT: sub a1, a1, a2 4816; LMULMAX1-RV32-NEXT: and a2, a1, a3 4817; LMULMAX1-RV32-NEXT: srli a1, a1, 2 4818; LMULMAX1-RV32-NEXT: and a1, a1, a3 4819; LMULMAX1-RV32-NEXT: add a1, a2, a1 4820; LMULMAX1-RV32-NEXT: srli a2, a1, 4 4821; LMULMAX1-RV32-NEXT: add a1, a1, a2 4822; LMULMAX1-RV32-NEXT: and a1, a1, a4 4823; LMULMAX1-RV32-NEXT: mul a1, a1, a5 4824; LMULMAX1-RV32-NEXT: srli a1, a1, 24 4825; LMULMAX1-RV32-NEXT: sb a1, 18(sp) 4826; LMULMAX1-RV32-NEXT: vslidedown.vi v25, v25, 1 4827; LMULMAX1-RV32-NEXT: vmv.x.s a1, v25 4828; LMULMAX1-RV32-NEXT: ori a1, a1, 256 4829; LMULMAX1-RV32-NEXT: addi a2, a1, -1 4830; LMULMAX1-RV32-NEXT: not a1, a1 4831; LMULMAX1-RV32-NEXT: and a1, a1, a2 4832; LMULMAX1-RV32-NEXT: srli a2, a1, 1 4833; LMULMAX1-RV32-NEXT: and a2, a2, a7 4834; LMULMAX1-RV32-NEXT: sub a1, a1, a2 4835; LMULMAX1-RV32-NEXT: and a2, a1, a3 4836; LMULMAX1-RV32-NEXT: srli a1, a1, 2 4837; LMULMAX1-RV32-NEXT: and a1, a1, a3 4838; LMULMAX1-RV32-NEXT: add a1, a2, a1 4839; LMULMAX1-RV32-NEXT: srli a2, a1, 4 4840; LMULMAX1-RV32-NEXT: add a1, a1, a2 4841; LMULMAX1-RV32-NEXT: and a1, a1, a4 4842; LMULMAX1-RV32-NEXT: mul a1, a1, a5 4843; LMULMAX1-RV32-NEXT: srli a1, a1, 24 4844; LMULMAX1-RV32-NEXT: sb a1, 17(sp) 4845; LMULMAX1-RV32-NEXT: vsetivli zero, 16, e8, m1, ta, mu 4846; LMULMAX1-RV32-NEXT: addi a1, sp, 16 4847; LMULMAX1-RV32-NEXT: vle8.v v25, (a1) 4848; LMULMAX1-RV32-NEXT: addi a1, sp, 32 4849; LMULMAX1-RV32-NEXT: vle8.v v26, (a1) 4850; LMULMAX1-RV32-NEXT: vse8.v v25, (a0) 4851; LMULMAX1-RV32-NEXT: vse8.v v26, (a6) 4852; LMULMAX1-RV32-NEXT: addi sp, sp, 48 4853; LMULMAX1-RV32-NEXT: ret 4854; 4855; LMULMAX1-RV64-LABEL: cttz_v32i8: 4856; LMULMAX1-RV64: # %bb.0: 4857; LMULMAX1-RV64-NEXT: addi sp, sp, -48 4858; LMULMAX1-RV64-NEXT: .cfi_def_cfa_offset 48 4859; LMULMAX1-RV64-NEXT: vsetivli zero, 16, e8, m1, ta, mu 4860; LMULMAX1-RV64-NEXT: addi a6, a0, 16 4861; LMULMAX1-RV64-NEXT: vle8.v v26, (a6) 4862; LMULMAX1-RV64-NEXT: vle8.v v25, (a0) 4863; LMULMAX1-RV64-NEXT: vmv.x.s a2, v26 4864; LMULMAX1-RV64-NEXT: ori a2, a2, 256 4865; LMULMAX1-RV64-NEXT: addi a3, a2, -1 4866; LMULMAX1-RV64-NEXT: not a2, a2 4867; LMULMAX1-RV64-NEXT: and a3, a2, a3 4868; LMULMAX1-RV64-NEXT: srli a4, a3, 1 4869; LMULMAX1-RV64-NEXT: lui a2, 21845 4870; LMULMAX1-RV64-NEXT: addiw a2, a2, 1365 4871; LMULMAX1-RV64-NEXT: slli a2, a2, 12 4872; LMULMAX1-RV64-NEXT: addi a2, a2, 1365 4873; LMULMAX1-RV64-NEXT: slli a2, a2, 12 4874; LMULMAX1-RV64-NEXT: addi a2, a2, 1365 4875; LMULMAX1-RV64-NEXT: slli a2, a2, 12 4876; LMULMAX1-RV64-NEXT: addi a7, a2, 1365 4877; LMULMAX1-RV64-NEXT: and a4, a4, a7 4878; LMULMAX1-RV64-NEXT: sub a4, a3, a4 4879; LMULMAX1-RV64-NEXT: lui a3, 13107 4880; LMULMAX1-RV64-NEXT: addiw a3, a3, 819 4881; LMULMAX1-RV64-NEXT: slli a3, a3, 12 4882; LMULMAX1-RV64-NEXT: addi a3, a3, 819 4883; LMULMAX1-RV64-NEXT: slli a3, a3, 12 4884; LMULMAX1-RV64-NEXT: addi a3, a3, 819 4885; LMULMAX1-RV64-NEXT: slli a3, a3, 12 4886; LMULMAX1-RV64-NEXT: addi a3, a3, 819 4887; LMULMAX1-RV64-NEXT: and a5, a4, a3 4888; LMULMAX1-RV64-NEXT: srli a4, a4, 2 4889; LMULMAX1-RV64-NEXT: and a4, a4, a3 4890; LMULMAX1-RV64-NEXT: add a4, a5, a4 4891; LMULMAX1-RV64-NEXT: srli a5, a4, 4 4892; LMULMAX1-RV64-NEXT: add a5, a4, a5 4893; LMULMAX1-RV64-NEXT: lui a4, 3855 4894; LMULMAX1-RV64-NEXT: addiw a4, a4, 241 4895; LMULMAX1-RV64-NEXT: slli a4, a4, 12 4896; LMULMAX1-RV64-NEXT: addi a4, a4, -241 4897; LMULMAX1-RV64-NEXT: slli a4, a4, 12 4898; LMULMAX1-RV64-NEXT: addi a4, a4, 241 4899; LMULMAX1-RV64-NEXT: slli a4, a4, 12 4900; LMULMAX1-RV64-NEXT: addi a4, a4, -241 4901; LMULMAX1-RV64-NEXT: and a1, a5, a4 4902; LMULMAX1-RV64-NEXT: lui a5, 4112 4903; LMULMAX1-RV64-NEXT: addiw a5, a5, 257 4904; LMULMAX1-RV64-NEXT: slli a5, a5, 16 4905; LMULMAX1-RV64-NEXT: addi a5, a5, 257 4906; LMULMAX1-RV64-NEXT: slli a5, a5, 16 4907; LMULMAX1-RV64-NEXT: addi a5, a5, 257 4908; LMULMAX1-RV64-NEXT: mul a1, a1, a5 4909; LMULMAX1-RV64-NEXT: srli a1, a1, 56 4910; LMULMAX1-RV64-NEXT: sb a1, 32(sp) 4911; LMULMAX1-RV64-NEXT: vsetivli zero, 1, e8, m1, ta, mu 4912; LMULMAX1-RV64-NEXT: vslidedown.vi v27, v26, 15 4913; LMULMAX1-RV64-NEXT: vmv.x.s a1, v27 4914; LMULMAX1-RV64-NEXT: ori a1, a1, 256 4915; LMULMAX1-RV64-NEXT: addi a2, a1, -1 4916; LMULMAX1-RV64-NEXT: not a1, a1 4917; LMULMAX1-RV64-NEXT: and a1, a1, a2 4918; LMULMAX1-RV64-NEXT: srli a2, a1, 1 4919; LMULMAX1-RV64-NEXT: and a2, a2, a7 4920; LMULMAX1-RV64-NEXT: sub a1, a1, a2 4921; LMULMAX1-RV64-NEXT: and a2, a1, a3 4922; LMULMAX1-RV64-NEXT: srli a1, a1, 2 4923; LMULMAX1-RV64-NEXT: and a1, a1, a3 4924; LMULMAX1-RV64-NEXT: add a1, a2, a1 4925; LMULMAX1-RV64-NEXT: srli a2, a1, 4 4926; LMULMAX1-RV64-NEXT: add a1, a1, a2 4927; LMULMAX1-RV64-NEXT: and a1, a1, a4 4928; LMULMAX1-RV64-NEXT: mul a1, a1, a5 4929; LMULMAX1-RV64-NEXT: srli a1, a1, 56 4930; LMULMAX1-RV64-NEXT: sb a1, 47(sp) 4931; LMULMAX1-RV64-NEXT: vslidedown.vi v27, v26, 14 4932; LMULMAX1-RV64-NEXT: vmv.x.s a1, v27 4933; LMULMAX1-RV64-NEXT: ori a1, a1, 256 4934; LMULMAX1-RV64-NEXT: addi a2, a1, -1 4935; LMULMAX1-RV64-NEXT: not a1, a1 4936; LMULMAX1-RV64-NEXT: and a1, a1, a2 4937; LMULMAX1-RV64-NEXT: srli a2, a1, 1 4938; LMULMAX1-RV64-NEXT: and a2, a2, a7 4939; LMULMAX1-RV64-NEXT: sub a1, a1, a2 4940; LMULMAX1-RV64-NEXT: and a2, a1, a3 4941; LMULMAX1-RV64-NEXT: srli a1, a1, 2 4942; LMULMAX1-RV64-NEXT: and a1, a1, a3 4943; LMULMAX1-RV64-NEXT: add a1, a2, a1 4944; LMULMAX1-RV64-NEXT: srli a2, a1, 4 4945; LMULMAX1-RV64-NEXT: add a1, a1, a2 4946; LMULMAX1-RV64-NEXT: and a1, a1, a4 4947; LMULMAX1-RV64-NEXT: mul a1, a1, a5 4948; LMULMAX1-RV64-NEXT: srli a1, a1, 56 4949; LMULMAX1-RV64-NEXT: sb a1, 46(sp) 4950; LMULMAX1-RV64-NEXT: vslidedown.vi v27, v26, 13 4951; LMULMAX1-RV64-NEXT: vmv.x.s a1, v27 4952; LMULMAX1-RV64-NEXT: ori a1, a1, 256 4953; LMULMAX1-RV64-NEXT: addi a2, a1, -1 4954; LMULMAX1-RV64-NEXT: not a1, a1 4955; LMULMAX1-RV64-NEXT: and a1, a1, a2 4956; LMULMAX1-RV64-NEXT: srli a2, a1, 1 4957; LMULMAX1-RV64-NEXT: and a2, a2, a7 4958; LMULMAX1-RV64-NEXT: sub a1, a1, a2 4959; LMULMAX1-RV64-NEXT: and a2, a1, a3 4960; LMULMAX1-RV64-NEXT: srli a1, a1, 2 4961; LMULMAX1-RV64-NEXT: and a1, a1, a3 4962; LMULMAX1-RV64-NEXT: add a1, a2, a1 4963; LMULMAX1-RV64-NEXT: srli a2, a1, 4 4964; LMULMAX1-RV64-NEXT: add a1, a1, a2 4965; LMULMAX1-RV64-NEXT: and a1, a1, a4 4966; LMULMAX1-RV64-NEXT: mul a1, a1, a5 4967; LMULMAX1-RV64-NEXT: srli a1, a1, 56 4968; LMULMAX1-RV64-NEXT: sb a1, 45(sp) 4969; LMULMAX1-RV64-NEXT: vslidedown.vi v27, v26, 12 4970; LMULMAX1-RV64-NEXT: vmv.x.s a1, v27 4971; LMULMAX1-RV64-NEXT: ori a1, a1, 256 4972; LMULMAX1-RV64-NEXT: addi a2, a1, -1 4973; LMULMAX1-RV64-NEXT: not a1, a1 4974; LMULMAX1-RV64-NEXT: and a1, a1, a2 4975; LMULMAX1-RV64-NEXT: srli a2, a1, 1 4976; LMULMAX1-RV64-NEXT: and a2, a2, a7 4977; LMULMAX1-RV64-NEXT: sub a1, a1, a2 4978; LMULMAX1-RV64-NEXT: and a2, a1, a3 4979; LMULMAX1-RV64-NEXT: srli a1, a1, 2 4980; LMULMAX1-RV64-NEXT: and a1, a1, a3 4981; LMULMAX1-RV64-NEXT: add a1, a2, a1 4982; LMULMAX1-RV64-NEXT: srli a2, a1, 4 4983; LMULMAX1-RV64-NEXT: add a1, a1, a2 4984; LMULMAX1-RV64-NEXT: and a1, a1, a4 4985; LMULMAX1-RV64-NEXT: mul a1, a1, a5 4986; LMULMAX1-RV64-NEXT: srli a1, a1, 56 4987; LMULMAX1-RV64-NEXT: sb a1, 44(sp) 4988; LMULMAX1-RV64-NEXT: vslidedown.vi v27, v26, 11 4989; LMULMAX1-RV64-NEXT: vmv.x.s a1, v27 4990; LMULMAX1-RV64-NEXT: ori a1, a1, 256 4991; LMULMAX1-RV64-NEXT: addi a2, a1, -1 4992; LMULMAX1-RV64-NEXT: not a1, a1 4993; LMULMAX1-RV64-NEXT: and a1, a1, a2 4994; LMULMAX1-RV64-NEXT: srli a2, a1, 1 4995; LMULMAX1-RV64-NEXT: and a2, a2, a7 4996; LMULMAX1-RV64-NEXT: sub a1, a1, a2 4997; LMULMAX1-RV64-NEXT: and a2, a1, a3 4998; LMULMAX1-RV64-NEXT: srli a1, a1, 2 4999; LMULMAX1-RV64-NEXT: and a1, a1, a3 5000; LMULMAX1-RV64-NEXT: add a1, a2, a1 5001; LMULMAX1-RV64-NEXT: srli a2, a1, 4 5002; LMULMAX1-RV64-NEXT: add a1, a1, a2 5003; LMULMAX1-RV64-NEXT: and a1, a1, a4 5004; LMULMAX1-RV64-NEXT: mul a1, a1, a5 5005; LMULMAX1-RV64-NEXT: srli a1, a1, 56 5006; LMULMAX1-RV64-NEXT: sb a1, 43(sp) 5007; LMULMAX1-RV64-NEXT: vslidedown.vi v27, v26, 10 5008; LMULMAX1-RV64-NEXT: vmv.x.s a1, v27 5009; LMULMAX1-RV64-NEXT: ori a1, a1, 256 5010; LMULMAX1-RV64-NEXT: addi a2, a1, -1 5011; LMULMAX1-RV64-NEXT: not a1, a1 5012; LMULMAX1-RV64-NEXT: and a1, a1, a2 5013; LMULMAX1-RV64-NEXT: srli a2, a1, 1 5014; LMULMAX1-RV64-NEXT: and a2, a2, a7 5015; LMULMAX1-RV64-NEXT: sub a1, a1, a2 5016; LMULMAX1-RV64-NEXT: and a2, a1, a3 5017; LMULMAX1-RV64-NEXT: srli a1, a1, 2 5018; LMULMAX1-RV64-NEXT: and a1, a1, a3 5019; LMULMAX1-RV64-NEXT: add a1, a2, a1 5020; LMULMAX1-RV64-NEXT: srli a2, a1, 4 5021; LMULMAX1-RV64-NEXT: add a1, a1, a2 5022; LMULMAX1-RV64-NEXT: and a1, a1, a4 5023; LMULMAX1-RV64-NEXT: mul a1, a1, a5 5024; LMULMAX1-RV64-NEXT: srli a1, a1, 56 5025; LMULMAX1-RV64-NEXT: sb a1, 42(sp) 5026; LMULMAX1-RV64-NEXT: vslidedown.vi v27, v26, 9 5027; LMULMAX1-RV64-NEXT: vmv.x.s a1, v27 5028; LMULMAX1-RV64-NEXT: ori a1, a1, 256 5029; LMULMAX1-RV64-NEXT: addi a2, a1, -1 5030; LMULMAX1-RV64-NEXT: not a1, a1 5031; LMULMAX1-RV64-NEXT: and a1, a1, a2 5032; LMULMAX1-RV64-NEXT: srli a2, a1, 1 5033; LMULMAX1-RV64-NEXT: and a2, a2, a7 5034; LMULMAX1-RV64-NEXT: sub a1, a1, a2 5035; LMULMAX1-RV64-NEXT: and a2, a1, a3 5036; LMULMAX1-RV64-NEXT: srli a1, a1, 2 5037; LMULMAX1-RV64-NEXT: and a1, a1, a3 5038; LMULMAX1-RV64-NEXT: add a1, a2, a1 5039; LMULMAX1-RV64-NEXT: srli a2, a1, 4 5040; LMULMAX1-RV64-NEXT: add a1, a1, a2 5041; LMULMAX1-RV64-NEXT: and a1, a1, a4 5042; LMULMAX1-RV64-NEXT: mul a1, a1, a5 5043; LMULMAX1-RV64-NEXT: srli a1, a1, 56 5044; LMULMAX1-RV64-NEXT: sb a1, 41(sp) 5045; LMULMAX1-RV64-NEXT: vslidedown.vi v27, v26, 8 5046; LMULMAX1-RV64-NEXT: vmv.x.s a1, v27 5047; LMULMAX1-RV64-NEXT: ori a1, a1, 256 5048; LMULMAX1-RV64-NEXT: addi a2, a1, -1 5049; LMULMAX1-RV64-NEXT: not a1, a1 5050; LMULMAX1-RV64-NEXT: and a1, a1, a2 5051; LMULMAX1-RV64-NEXT: srli a2, a1, 1 5052; LMULMAX1-RV64-NEXT: and a2, a2, a7 5053; LMULMAX1-RV64-NEXT: sub a1, a1, a2 5054; LMULMAX1-RV64-NEXT: and a2, a1, a3 5055; LMULMAX1-RV64-NEXT: srli a1, a1, 2 5056; LMULMAX1-RV64-NEXT: and a1, a1, a3 5057; LMULMAX1-RV64-NEXT: add a1, a2, a1 5058; LMULMAX1-RV64-NEXT: srli a2, a1, 4 5059; LMULMAX1-RV64-NEXT: add a1, a1, a2 5060; LMULMAX1-RV64-NEXT: and a1, a1, a4 5061; LMULMAX1-RV64-NEXT: mul a1, a1, a5 5062; LMULMAX1-RV64-NEXT: srli a1, a1, 56 5063; LMULMAX1-RV64-NEXT: sb a1, 40(sp) 5064; LMULMAX1-RV64-NEXT: vslidedown.vi v27, v26, 7 5065; LMULMAX1-RV64-NEXT: vmv.x.s a1, v27 5066; LMULMAX1-RV64-NEXT: ori a1, a1, 256 5067; LMULMAX1-RV64-NEXT: addi a2, a1, -1 5068; LMULMAX1-RV64-NEXT: not a1, a1 5069; LMULMAX1-RV64-NEXT: and a1, a1, a2 5070; LMULMAX1-RV64-NEXT: srli a2, a1, 1 5071; LMULMAX1-RV64-NEXT: and a2, a2, a7 5072; LMULMAX1-RV64-NEXT: sub a1, a1, a2 5073; LMULMAX1-RV64-NEXT: and a2, a1, a3 5074; LMULMAX1-RV64-NEXT: srli a1, a1, 2 5075; LMULMAX1-RV64-NEXT: and a1, a1, a3 5076; LMULMAX1-RV64-NEXT: add a1, a2, a1 5077; LMULMAX1-RV64-NEXT: srli a2, a1, 4 5078; LMULMAX1-RV64-NEXT: add a1, a1, a2 5079; LMULMAX1-RV64-NEXT: and a1, a1, a4 5080; LMULMAX1-RV64-NEXT: mul a1, a1, a5 5081; LMULMAX1-RV64-NEXT: srli a1, a1, 56 5082; LMULMAX1-RV64-NEXT: sb a1, 39(sp) 5083; LMULMAX1-RV64-NEXT: vslidedown.vi v27, v26, 6 5084; LMULMAX1-RV64-NEXT: vmv.x.s a1, v27 5085; LMULMAX1-RV64-NEXT: ori a1, a1, 256 5086; LMULMAX1-RV64-NEXT: addi a2, a1, -1 5087; LMULMAX1-RV64-NEXT: not a1, a1 5088; LMULMAX1-RV64-NEXT: and a1, a1, a2 5089; LMULMAX1-RV64-NEXT: srli a2, a1, 1 5090; LMULMAX1-RV64-NEXT: and a2, a2, a7 5091; LMULMAX1-RV64-NEXT: sub a1, a1, a2 5092; LMULMAX1-RV64-NEXT: and a2, a1, a3 5093; LMULMAX1-RV64-NEXT: srli a1, a1, 2 5094; LMULMAX1-RV64-NEXT: and a1, a1, a3 5095; LMULMAX1-RV64-NEXT: add a1, a2, a1 5096; LMULMAX1-RV64-NEXT: srli a2, a1, 4 5097; LMULMAX1-RV64-NEXT: add a1, a1, a2 5098; LMULMAX1-RV64-NEXT: and a1, a1, a4 5099; LMULMAX1-RV64-NEXT: mul a1, a1, a5 5100; LMULMAX1-RV64-NEXT: srli a1, a1, 56 5101; LMULMAX1-RV64-NEXT: sb a1, 38(sp) 5102; LMULMAX1-RV64-NEXT: vslidedown.vi v27, v26, 5 5103; LMULMAX1-RV64-NEXT: vmv.x.s a1, v27 5104; LMULMAX1-RV64-NEXT: ori a1, a1, 256 5105; LMULMAX1-RV64-NEXT: addi a2, a1, -1 5106; LMULMAX1-RV64-NEXT: not a1, a1 5107; LMULMAX1-RV64-NEXT: and a1, a1, a2 5108; LMULMAX1-RV64-NEXT: srli a2, a1, 1 5109; LMULMAX1-RV64-NEXT: and a2, a2, a7 5110; LMULMAX1-RV64-NEXT: sub a1, a1, a2 5111; LMULMAX1-RV64-NEXT: and a2, a1, a3 5112; LMULMAX1-RV64-NEXT: srli a1, a1, 2 5113; LMULMAX1-RV64-NEXT: and a1, a1, a3 5114; LMULMAX1-RV64-NEXT: add a1, a2, a1 5115; LMULMAX1-RV64-NEXT: srli a2, a1, 4 5116; LMULMAX1-RV64-NEXT: add a1, a1, a2 5117; LMULMAX1-RV64-NEXT: and a1, a1, a4 5118; LMULMAX1-RV64-NEXT: mul a1, a1, a5 5119; LMULMAX1-RV64-NEXT: srli a1, a1, 56 5120; LMULMAX1-RV64-NEXT: sb a1, 37(sp) 5121; LMULMAX1-RV64-NEXT: vslidedown.vi v27, v26, 4 5122; LMULMAX1-RV64-NEXT: vmv.x.s a1, v27 5123; LMULMAX1-RV64-NEXT: ori a1, a1, 256 5124; LMULMAX1-RV64-NEXT: addi a2, a1, -1 5125; LMULMAX1-RV64-NEXT: not a1, a1 5126; LMULMAX1-RV64-NEXT: and a1, a1, a2 5127; LMULMAX1-RV64-NEXT: srli a2, a1, 1 5128; LMULMAX1-RV64-NEXT: and a2, a2, a7 5129; LMULMAX1-RV64-NEXT: sub a1, a1, a2 5130; LMULMAX1-RV64-NEXT: and a2, a1, a3 5131; LMULMAX1-RV64-NEXT: srli a1, a1, 2 5132; LMULMAX1-RV64-NEXT: and a1, a1, a3 5133; LMULMAX1-RV64-NEXT: add a1, a2, a1 5134; LMULMAX1-RV64-NEXT: srli a2, a1, 4 5135; LMULMAX1-RV64-NEXT: add a1, a1, a2 5136; LMULMAX1-RV64-NEXT: and a1, a1, a4 5137; LMULMAX1-RV64-NEXT: mul a1, a1, a5 5138; LMULMAX1-RV64-NEXT: srli a1, a1, 56 5139; LMULMAX1-RV64-NEXT: sb a1, 36(sp) 5140; LMULMAX1-RV64-NEXT: vslidedown.vi v27, v26, 3 5141; LMULMAX1-RV64-NEXT: vmv.x.s a1, v27 5142; LMULMAX1-RV64-NEXT: ori a1, a1, 256 5143; LMULMAX1-RV64-NEXT: addi a2, a1, -1 5144; LMULMAX1-RV64-NEXT: not a1, a1 5145; LMULMAX1-RV64-NEXT: and a1, a1, a2 5146; LMULMAX1-RV64-NEXT: srli a2, a1, 1 5147; LMULMAX1-RV64-NEXT: and a2, a2, a7 5148; LMULMAX1-RV64-NEXT: sub a1, a1, a2 5149; LMULMAX1-RV64-NEXT: and a2, a1, a3 5150; LMULMAX1-RV64-NEXT: srli a1, a1, 2 5151; LMULMAX1-RV64-NEXT: and a1, a1, a3 5152; LMULMAX1-RV64-NEXT: add a1, a2, a1 5153; LMULMAX1-RV64-NEXT: srli a2, a1, 4 5154; LMULMAX1-RV64-NEXT: add a1, a1, a2 5155; LMULMAX1-RV64-NEXT: and a1, a1, a4 5156; LMULMAX1-RV64-NEXT: mul a1, a1, a5 5157; LMULMAX1-RV64-NEXT: srli a1, a1, 56 5158; LMULMAX1-RV64-NEXT: sb a1, 35(sp) 5159; LMULMAX1-RV64-NEXT: vslidedown.vi v27, v26, 2 5160; LMULMAX1-RV64-NEXT: vmv.x.s a1, v27 5161; LMULMAX1-RV64-NEXT: ori a1, a1, 256 5162; LMULMAX1-RV64-NEXT: addi a2, a1, -1 5163; LMULMAX1-RV64-NEXT: not a1, a1 5164; LMULMAX1-RV64-NEXT: and a1, a1, a2 5165; LMULMAX1-RV64-NEXT: srli a2, a1, 1 5166; LMULMAX1-RV64-NEXT: and a2, a2, a7 5167; LMULMAX1-RV64-NEXT: sub a1, a1, a2 5168; LMULMAX1-RV64-NEXT: and a2, a1, a3 5169; LMULMAX1-RV64-NEXT: srli a1, a1, 2 5170; LMULMAX1-RV64-NEXT: and a1, a1, a3 5171; LMULMAX1-RV64-NEXT: add a1, a2, a1 5172; LMULMAX1-RV64-NEXT: srli a2, a1, 4 5173; LMULMAX1-RV64-NEXT: add a1, a1, a2 5174; LMULMAX1-RV64-NEXT: and a1, a1, a4 5175; LMULMAX1-RV64-NEXT: mul a1, a1, a5 5176; LMULMAX1-RV64-NEXT: srli a1, a1, 56 5177; LMULMAX1-RV64-NEXT: sb a1, 34(sp) 5178; LMULMAX1-RV64-NEXT: vslidedown.vi v26, v26, 1 5179; LMULMAX1-RV64-NEXT: vmv.x.s a1, v26 5180; LMULMAX1-RV64-NEXT: ori a1, a1, 256 5181; LMULMAX1-RV64-NEXT: addi a2, a1, -1 5182; LMULMAX1-RV64-NEXT: not a1, a1 5183; LMULMAX1-RV64-NEXT: and a1, a1, a2 5184; LMULMAX1-RV64-NEXT: srli a2, a1, 1 5185; LMULMAX1-RV64-NEXT: and a2, a2, a7 5186; LMULMAX1-RV64-NEXT: sub a1, a1, a2 5187; LMULMAX1-RV64-NEXT: and a2, a1, a3 5188; LMULMAX1-RV64-NEXT: srli a1, a1, 2 5189; LMULMAX1-RV64-NEXT: and a1, a1, a3 5190; LMULMAX1-RV64-NEXT: add a1, a2, a1 5191; LMULMAX1-RV64-NEXT: srli a2, a1, 4 5192; LMULMAX1-RV64-NEXT: add a1, a1, a2 5193; LMULMAX1-RV64-NEXT: and a1, a1, a4 5194; LMULMAX1-RV64-NEXT: mul a1, a1, a5 5195; LMULMAX1-RV64-NEXT: srli a1, a1, 56 5196; LMULMAX1-RV64-NEXT: sb a1, 33(sp) 5197; LMULMAX1-RV64-NEXT: vslidedown.vi v26, v25, 15 5198; LMULMAX1-RV64-NEXT: vmv.x.s a1, v26 5199; LMULMAX1-RV64-NEXT: ori a1, a1, 256 5200; LMULMAX1-RV64-NEXT: addi a2, a1, -1 5201; LMULMAX1-RV64-NEXT: not a1, a1 5202; LMULMAX1-RV64-NEXT: and a1, a1, a2 5203; LMULMAX1-RV64-NEXT: srli a2, a1, 1 5204; LMULMAX1-RV64-NEXT: and a2, a2, a7 5205; LMULMAX1-RV64-NEXT: sub a1, a1, a2 5206; LMULMAX1-RV64-NEXT: and a2, a1, a3 5207; LMULMAX1-RV64-NEXT: srli a1, a1, 2 5208; LMULMAX1-RV64-NEXT: and a1, a1, a3 5209; LMULMAX1-RV64-NEXT: add a1, a2, a1 5210; LMULMAX1-RV64-NEXT: srli a2, a1, 4 5211; LMULMAX1-RV64-NEXT: add a1, a1, a2 5212; LMULMAX1-RV64-NEXT: and a1, a1, a4 5213; LMULMAX1-RV64-NEXT: mul a1, a1, a5 5214; LMULMAX1-RV64-NEXT: srli a1, a1, 56 5215; LMULMAX1-RV64-NEXT: sb a1, 31(sp) 5216; LMULMAX1-RV64-NEXT: vslidedown.vi v26, v25, 14 5217; LMULMAX1-RV64-NEXT: vmv.x.s a1, v26 5218; LMULMAX1-RV64-NEXT: ori a1, a1, 256 5219; LMULMAX1-RV64-NEXT: addi a2, a1, -1 5220; LMULMAX1-RV64-NEXT: not a1, a1 5221; LMULMAX1-RV64-NEXT: and a1, a1, a2 5222; LMULMAX1-RV64-NEXT: srli a2, a1, 1 5223; LMULMAX1-RV64-NEXT: and a2, a2, a7 5224; LMULMAX1-RV64-NEXT: sub a1, a1, a2 5225; LMULMAX1-RV64-NEXT: and a2, a1, a3 5226; LMULMAX1-RV64-NEXT: srli a1, a1, 2 5227; LMULMAX1-RV64-NEXT: and a1, a1, a3 5228; LMULMAX1-RV64-NEXT: add a1, a2, a1 5229; LMULMAX1-RV64-NEXT: srli a2, a1, 4 5230; LMULMAX1-RV64-NEXT: add a1, a1, a2 5231; LMULMAX1-RV64-NEXT: and a1, a1, a4 5232; LMULMAX1-RV64-NEXT: mul a1, a1, a5 5233; LMULMAX1-RV64-NEXT: srli a1, a1, 56 5234; LMULMAX1-RV64-NEXT: sb a1, 30(sp) 5235; LMULMAX1-RV64-NEXT: vslidedown.vi v26, v25, 13 5236; LMULMAX1-RV64-NEXT: vmv.x.s a1, v26 5237; LMULMAX1-RV64-NEXT: ori a1, a1, 256 5238; LMULMAX1-RV64-NEXT: addi a2, a1, -1 5239; LMULMAX1-RV64-NEXT: not a1, a1 5240; LMULMAX1-RV64-NEXT: and a1, a1, a2 5241; LMULMAX1-RV64-NEXT: srli a2, a1, 1 5242; LMULMAX1-RV64-NEXT: and a2, a2, a7 5243; LMULMAX1-RV64-NEXT: sub a1, a1, a2 5244; LMULMAX1-RV64-NEXT: and a2, a1, a3 5245; LMULMAX1-RV64-NEXT: srli a1, a1, 2 5246; LMULMAX1-RV64-NEXT: and a1, a1, a3 5247; LMULMAX1-RV64-NEXT: add a1, a2, a1 5248; LMULMAX1-RV64-NEXT: srli a2, a1, 4 5249; LMULMAX1-RV64-NEXT: add a1, a1, a2 5250; LMULMAX1-RV64-NEXT: and a1, a1, a4 5251; LMULMAX1-RV64-NEXT: mul a1, a1, a5 5252; LMULMAX1-RV64-NEXT: srli a1, a1, 56 5253; LMULMAX1-RV64-NEXT: sb a1, 29(sp) 5254; LMULMAX1-RV64-NEXT: vslidedown.vi v26, v25, 12 5255; LMULMAX1-RV64-NEXT: vmv.x.s a1, v26 5256; LMULMAX1-RV64-NEXT: ori a1, a1, 256 5257; LMULMAX1-RV64-NEXT: addi a2, a1, -1 5258; LMULMAX1-RV64-NEXT: not a1, a1 5259; LMULMAX1-RV64-NEXT: and a1, a1, a2 5260; LMULMAX1-RV64-NEXT: srli a2, a1, 1 5261; LMULMAX1-RV64-NEXT: and a2, a2, a7 5262; LMULMAX1-RV64-NEXT: sub a1, a1, a2 5263; LMULMAX1-RV64-NEXT: and a2, a1, a3 5264; LMULMAX1-RV64-NEXT: srli a1, a1, 2 5265; LMULMAX1-RV64-NEXT: and a1, a1, a3 5266; LMULMAX1-RV64-NEXT: add a1, a2, a1 5267; LMULMAX1-RV64-NEXT: srli a2, a1, 4 5268; LMULMAX1-RV64-NEXT: add a1, a1, a2 5269; LMULMAX1-RV64-NEXT: and a1, a1, a4 5270; LMULMAX1-RV64-NEXT: mul a1, a1, a5 5271; LMULMAX1-RV64-NEXT: srli a1, a1, 56 5272; LMULMAX1-RV64-NEXT: sb a1, 28(sp) 5273; LMULMAX1-RV64-NEXT: vslidedown.vi v26, v25, 11 5274; LMULMAX1-RV64-NEXT: vmv.x.s a1, v26 5275; LMULMAX1-RV64-NEXT: ori a1, a1, 256 5276; LMULMAX1-RV64-NEXT: addi a2, a1, -1 5277; LMULMAX1-RV64-NEXT: not a1, a1 5278; LMULMAX1-RV64-NEXT: and a1, a1, a2 5279; LMULMAX1-RV64-NEXT: srli a2, a1, 1 5280; LMULMAX1-RV64-NEXT: and a2, a2, a7 5281; LMULMAX1-RV64-NEXT: sub a1, a1, a2 5282; LMULMAX1-RV64-NEXT: and a2, a1, a3 5283; LMULMAX1-RV64-NEXT: srli a1, a1, 2 5284; LMULMAX1-RV64-NEXT: and a1, a1, a3 5285; LMULMAX1-RV64-NEXT: add a1, a2, a1 5286; LMULMAX1-RV64-NEXT: srli a2, a1, 4 5287; LMULMAX1-RV64-NEXT: add a1, a1, a2 5288; LMULMAX1-RV64-NEXT: and a1, a1, a4 5289; LMULMAX1-RV64-NEXT: mul a1, a1, a5 5290; LMULMAX1-RV64-NEXT: srli a1, a1, 56 5291; LMULMAX1-RV64-NEXT: sb a1, 27(sp) 5292; LMULMAX1-RV64-NEXT: vslidedown.vi v26, v25, 10 5293; LMULMAX1-RV64-NEXT: vmv.x.s a1, v26 5294; LMULMAX1-RV64-NEXT: ori a1, a1, 256 5295; LMULMAX1-RV64-NEXT: addi a2, a1, -1 5296; LMULMAX1-RV64-NEXT: not a1, a1 5297; LMULMAX1-RV64-NEXT: and a1, a1, a2 5298; LMULMAX1-RV64-NEXT: srli a2, a1, 1 5299; LMULMAX1-RV64-NEXT: and a2, a2, a7 5300; LMULMAX1-RV64-NEXT: sub a1, a1, a2 5301; LMULMAX1-RV64-NEXT: and a2, a1, a3 5302; LMULMAX1-RV64-NEXT: srli a1, a1, 2 5303; LMULMAX1-RV64-NEXT: and a1, a1, a3 5304; LMULMAX1-RV64-NEXT: add a1, a2, a1 5305; LMULMAX1-RV64-NEXT: srli a2, a1, 4 5306; LMULMAX1-RV64-NEXT: add a1, a1, a2 5307; LMULMAX1-RV64-NEXT: and a1, a1, a4 5308; LMULMAX1-RV64-NEXT: mul a1, a1, a5 5309; LMULMAX1-RV64-NEXT: srli a1, a1, 56 5310; LMULMAX1-RV64-NEXT: sb a1, 26(sp) 5311; LMULMAX1-RV64-NEXT: vslidedown.vi v26, v25, 9 5312; LMULMAX1-RV64-NEXT: vmv.x.s a1, v26 5313; LMULMAX1-RV64-NEXT: ori a1, a1, 256 5314; LMULMAX1-RV64-NEXT: addi a2, a1, -1 5315; LMULMAX1-RV64-NEXT: not a1, a1 5316; LMULMAX1-RV64-NEXT: and a1, a1, a2 5317; LMULMAX1-RV64-NEXT: srli a2, a1, 1 5318; LMULMAX1-RV64-NEXT: and a2, a2, a7 5319; LMULMAX1-RV64-NEXT: sub a1, a1, a2 5320; LMULMAX1-RV64-NEXT: and a2, a1, a3 5321; LMULMAX1-RV64-NEXT: srli a1, a1, 2 5322; LMULMAX1-RV64-NEXT: and a1, a1, a3 5323; LMULMAX1-RV64-NEXT: add a1, a2, a1 5324; LMULMAX1-RV64-NEXT: srli a2, a1, 4 5325; LMULMAX1-RV64-NEXT: add a1, a1, a2 5326; LMULMAX1-RV64-NEXT: and a1, a1, a4 5327; LMULMAX1-RV64-NEXT: mul a1, a1, a5 5328; LMULMAX1-RV64-NEXT: srli a1, a1, 56 5329; LMULMAX1-RV64-NEXT: sb a1, 25(sp) 5330; LMULMAX1-RV64-NEXT: vslidedown.vi v26, v25, 8 5331; LMULMAX1-RV64-NEXT: vmv.x.s a1, v26 5332; LMULMAX1-RV64-NEXT: ori a1, a1, 256 5333; LMULMAX1-RV64-NEXT: addi a2, a1, -1 5334; LMULMAX1-RV64-NEXT: not a1, a1 5335; LMULMAX1-RV64-NEXT: and a1, a1, a2 5336; LMULMAX1-RV64-NEXT: srli a2, a1, 1 5337; LMULMAX1-RV64-NEXT: and a2, a2, a7 5338; LMULMAX1-RV64-NEXT: sub a1, a1, a2 5339; LMULMAX1-RV64-NEXT: and a2, a1, a3 5340; LMULMAX1-RV64-NEXT: srli a1, a1, 2 5341; LMULMAX1-RV64-NEXT: and a1, a1, a3 5342; LMULMAX1-RV64-NEXT: add a1, a2, a1 5343; LMULMAX1-RV64-NEXT: srli a2, a1, 4 5344; LMULMAX1-RV64-NEXT: add a1, a1, a2 5345; LMULMAX1-RV64-NEXT: and a1, a1, a4 5346; LMULMAX1-RV64-NEXT: mul a1, a1, a5 5347; LMULMAX1-RV64-NEXT: srli a1, a1, 56 5348; LMULMAX1-RV64-NEXT: sb a1, 24(sp) 5349; LMULMAX1-RV64-NEXT: vslidedown.vi v26, v25, 7 5350; LMULMAX1-RV64-NEXT: vmv.x.s a1, v26 5351; LMULMAX1-RV64-NEXT: ori a1, a1, 256 5352; LMULMAX1-RV64-NEXT: addi a2, a1, -1 5353; LMULMAX1-RV64-NEXT: not a1, a1 5354; LMULMAX1-RV64-NEXT: and a1, a1, a2 5355; LMULMAX1-RV64-NEXT: srli a2, a1, 1 5356; LMULMAX1-RV64-NEXT: and a2, a2, a7 5357; LMULMAX1-RV64-NEXT: sub a1, a1, a2 5358; LMULMAX1-RV64-NEXT: and a2, a1, a3 5359; LMULMAX1-RV64-NEXT: srli a1, a1, 2 5360; LMULMAX1-RV64-NEXT: and a1, a1, a3 5361; LMULMAX1-RV64-NEXT: add a1, a2, a1 5362; LMULMAX1-RV64-NEXT: srli a2, a1, 4 5363; LMULMAX1-RV64-NEXT: add a1, a1, a2 5364; LMULMAX1-RV64-NEXT: and a1, a1, a4 5365; LMULMAX1-RV64-NEXT: mul a1, a1, a5 5366; LMULMAX1-RV64-NEXT: srli a1, a1, 56 5367; LMULMAX1-RV64-NEXT: sb a1, 23(sp) 5368; LMULMAX1-RV64-NEXT: vslidedown.vi v26, v25, 6 5369; LMULMAX1-RV64-NEXT: vmv.x.s a1, v26 5370; LMULMAX1-RV64-NEXT: ori a1, a1, 256 5371; LMULMAX1-RV64-NEXT: addi a2, a1, -1 5372; LMULMAX1-RV64-NEXT: not a1, a1 5373; LMULMAX1-RV64-NEXT: and a1, a1, a2 5374; LMULMAX1-RV64-NEXT: srli a2, a1, 1 5375; LMULMAX1-RV64-NEXT: and a2, a2, a7 5376; LMULMAX1-RV64-NEXT: sub a1, a1, a2 5377; LMULMAX1-RV64-NEXT: and a2, a1, a3 5378; LMULMAX1-RV64-NEXT: srli a1, a1, 2 5379; LMULMAX1-RV64-NEXT: and a1, a1, a3 5380; LMULMAX1-RV64-NEXT: add a1, a2, a1 5381; LMULMAX1-RV64-NEXT: srli a2, a1, 4 5382; LMULMAX1-RV64-NEXT: add a1, a1, a2 5383; LMULMAX1-RV64-NEXT: and a1, a1, a4 5384; LMULMAX1-RV64-NEXT: mul a1, a1, a5 5385; LMULMAX1-RV64-NEXT: srli a1, a1, 56 5386; LMULMAX1-RV64-NEXT: sb a1, 22(sp) 5387; LMULMAX1-RV64-NEXT: vslidedown.vi v26, v25, 5 5388; LMULMAX1-RV64-NEXT: vmv.x.s a1, v26 5389; LMULMAX1-RV64-NEXT: ori a1, a1, 256 5390; LMULMAX1-RV64-NEXT: addi a2, a1, -1 5391; LMULMAX1-RV64-NEXT: not a1, a1 5392; LMULMAX1-RV64-NEXT: and a1, a1, a2 5393; LMULMAX1-RV64-NEXT: srli a2, a1, 1 5394; LMULMAX1-RV64-NEXT: and a2, a2, a7 5395; LMULMAX1-RV64-NEXT: sub a1, a1, a2 5396; LMULMAX1-RV64-NEXT: and a2, a1, a3 5397; LMULMAX1-RV64-NEXT: srli a1, a1, 2 5398; LMULMAX1-RV64-NEXT: and a1, a1, a3 5399; LMULMAX1-RV64-NEXT: add a1, a2, a1 5400; LMULMAX1-RV64-NEXT: srli a2, a1, 4 5401; LMULMAX1-RV64-NEXT: add a1, a1, a2 5402; LMULMAX1-RV64-NEXT: and a1, a1, a4 5403; LMULMAX1-RV64-NEXT: mul a1, a1, a5 5404; LMULMAX1-RV64-NEXT: srli a1, a1, 56 5405; LMULMAX1-RV64-NEXT: sb a1, 21(sp) 5406; LMULMAX1-RV64-NEXT: vslidedown.vi v26, v25, 4 5407; LMULMAX1-RV64-NEXT: vmv.x.s a1, v26 5408; LMULMAX1-RV64-NEXT: ori a1, a1, 256 5409; LMULMAX1-RV64-NEXT: addi a2, a1, -1 5410; LMULMAX1-RV64-NEXT: not a1, a1 5411; LMULMAX1-RV64-NEXT: and a1, a1, a2 5412; LMULMAX1-RV64-NEXT: srli a2, a1, 1 5413; LMULMAX1-RV64-NEXT: and a2, a2, a7 5414; LMULMAX1-RV64-NEXT: sub a1, a1, a2 5415; LMULMAX1-RV64-NEXT: and a2, a1, a3 5416; LMULMAX1-RV64-NEXT: srli a1, a1, 2 5417; LMULMAX1-RV64-NEXT: and a1, a1, a3 5418; LMULMAX1-RV64-NEXT: add a1, a2, a1 5419; LMULMAX1-RV64-NEXT: srli a2, a1, 4 5420; LMULMAX1-RV64-NEXT: add a1, a1, a2 5421; LMULMAX1-RV64-NEXT: and a1, a1, a4 5422; LMULMAX1-RV64-NEXT: mul a1, a1, a5 5423; LMULMAX1-RV64-NEXT: srli a1, a1, 56 5424; LMULMAX1-RV64-NEXT: sb a1, 20(sp) 5425; LMULMAX1-RV64-NEXT: vslidedown.vi v26, v25, 3 5426; LMULMAX1-RV64-NEXT: vmv.x.s a1, v26 5427; LMULMAX1-RV64-NEXT: ori a1, a1, 256 5428; LMULMAX1-RV64-NEXT: addi a2, a1, -1 5429; LMULMAX1-RV64-NEXT: not a1, a1 5430; LMULMAX1-RV64-NEXT: and a1, a1, a2 5431; LMULMAX1-RV64-NEXT: srli a2, a1, 1 5432; LMULMAX1-RV64-NEXT: and a2, a2, a7 5433; LMULMAX1-RV64-NEXT: sub a1, a1, a2 5434; LMULMAX1-RV64-NEXT: and a2, a1, a3 5435; LMULMAX1-RV64-NEXT: srli a1, a1, 2 5436; LMULMAX1-RV64-NEXT: and a1, a1, a3 5437; LMULMAX1-RV64-NEXT: add a1, a2, a1 5438; LMULMAX1-RV64-NEXT: srli a2, a1, 4 5439; LMULMAX1-RV64-NEXT: add a1, a1, a2 5440; LMULMAX1-RV64-NEXT: and a1, a1, a4 5441; LMULMAX1-RV64-NEXT: mul a1, a1, a5 5442; LMULMAX1-RV64-NEXT: srli a1, a1, 56 5443; LMULMAX1-RV64-NEXT: sb a1, 19(sp) 5444; LMULMAX1-RV64-NEXT: vslidedown.vi v26, v25, 2 5445; LMULMAX1-RV64-NEXT: vmv.x.s a1, v26 5446; LMULMAX1-RV64-NEXT: ori a1, a1, 256 5447; LMULMAX1-RV64-NEXT: addi a2, a1, -1 5448; LMULMAX1-RV64-NEXT: not a1, a1 5449; LMULMAX1-RV64-NEXT: and a1, a1, a2 5450; LMULMAX1-RV64-NEXT: srli a2, a1, 1 5451; LMULMAX1-RV64-NEXT: and a2, a2, a7 5452; LMULMAX1-RV64-NEXT: sub a1, a1, a2 5453; LMULMAX1-RV64-NEXT: and a2, a1, a3 5454; LMULMAX1-RV64-NEXT: srli a1, a1, 2 5455; LMULMAX1-RV64-NEXT: and a1, a1, a3 5456; LMULMAX1-RV64-NEXT: add a1, a2, a1 5457; LMULMAX1-RV64-NEXT: srli a2, a1, 4 5458; LMULMAX1-RV64-NEXT: add a1, a1, a2 5459; LMULMAX1-RV64-NEXT: and a1, a1, a4 5460; LMULMAX1-RV64-NEXT: mul a1, a1, a5 5461; LMULMAX1-RV64-NEXT: srli a1, a1, 56 5462; LMULMAX1-RV64-NEXT: sb a1, 18(sp) 5463; LMULMAX1-RV64-NEXT: vslidedown.vi v26, v25, 1 5464; LMULMAX1-RV64-NEXT: vmv.x.s a1, v26 5465; LMULMAX1-RV64-NEXT: ori a1, a1, 256 5466; LMULMAX1-RV64-NEXT: addi a2, a1, -1 5467; LMULMAX1-RV64-NEXT: not a1, a1 5468; LMULMAX1-RV64-NEXT: and a1, a1, a2 5469; LMULMAX1-RV64-NEXT: srli a2, a1, 1 5470; LMULMAX1-RV64-NEXT: and a2, a2, a7 5471; LMULMAX1-RV64-NEXT: sub a1, a1, a2 5472; LMULMAX1-RV64-NEXT: and a2, a1, a3 5473; LMULMAX1-RV64-NEXT: srli a1, a1, 2 5474; LMULMAX1-RV64-NEXT: and a1, a1, a3 5475; LMULMAX1-RV64-NEXT: add a1, a2, a1 5476; LMULMAX1-RV64-NEXT: srli a2, a1, 4 5477; LMULMAX1-RV64-NEXT: add a1, a1, a2 5478; LMULMAX1-RV64-NEXT: and a1, a1, a4 5479; LMULMAX1-RV64-NEXT: mul a1, a1, a5 5480; LMULMAX1-RV64-NEXT: srli a1, a1, 56 5481; LMULMAX1-RV64-NEXT: sb a1, 17(sp) 5482; LMULMAX1-RV64-NEXT: vmv.x.s a1, v25 5483; LMULMAX1-RV64-NEXT: ori a1, a1, 256 5484; LMULMAX1-RV64-NEXT: addi a2, a1, -1 5485; LMULMAX1-RV64-NEXT: not a1, a1 5486; LMULMAX1-RV64-NEXT: and a1, a1, a2 5487; LMULMAX1-RV64-NEXT: srli a2, a1, 1 5488; LMULMAX1-RV64-NEXT: and a2, a2, a7 5489; LMULMAX1-RV64-NEXT: sub a1, a1, a2 5490; LMULMAX1-RV64-NEXT: and a2, a1, a3 5491; LMULMAX1-RV64-NEXT: srli a1, a1, 2 5492; LMULMAX1-RV64-NEXT: and a1, a1, a3 5493; LMULMAX1-RV64-NEXT: add a1, a2, a1 5494; LMULMAX1-RV64-NEXT: srli a2, a1, 4 5495; LMULMAX1-RV64-NEXT: add a1, a1, a2 5496; LMULMAX1-RV64-NEXT: and a1, a1, a4 5497; LMULMAX1-RV64-NEXT: mul a1, a1, a5 5498; LMULMAX1-RV64-NEXT: srli a1, a1, 56 5499; LMULMAX1-RV64-NEXT: sb a1, 16(sp) 5500; LMULMAX1-RV64-NEXT: vsetivli zero, 16, e8, m1, ta, mu 5501; LMULMAX1-RV64-NEXT: addi a1, sp, 16 5502; LMULMAX1-RV64-NEXT: vle8.v v25, (a1) 5503; LMULMAX1-RV64-NEXT: addi a1, sp, 32 5504; LMULMAX1-RV64-NEXT: vle8.v v26, (a1) 5505; LMULMAX1-RV64-NEXT: vse8.v v25, (a0) 5506; LMULMAX1-RV64-NEXT: vse8.v v26, (a6) 5507; LMULMAX1-RV64-NEXT: addi sp, sp, 48 5508; LMULMAX1-RV64-NEXT: ret 5509 %a = load <32 x i8>, <32 x i8>* %x 5510 %b = load <32 x i8>, <32 x i8>* %y 5511 %c = call <32 x i8> @llvm.cttz.v32i8(<32 x i8> %a, i1 false) 5512 store <32 x i8> %c, <32 x i8>* %x 5513 ret void 5514} 5515declare <32 x i8> @llvm.cttz.v32i8(<32 x i8>, i1) 5516 5517define void @cttz_v16i16(<16 x i16>* %x, <16 x i16>* %y) { 5518; LMULMAX2-RV32-LABEL: cttz_v16i16: 5519; LMULMAX2-RV32: # %bb.0: 5520; LMULMAX2-RV32-NEXT: addi sp, sp, -96 5521; LMULMAX2-RV32-NEXT: .cfi_def_cfa_offset 96 5522; LMULMAX2-RV32-NEXT: sw ra, 92(sp) # 4-byte Folded Spill 5523; LMULMAX2-RV32-NEXT: sw s0, 88(sp) # 4-byte Folded Spill 5524; LMULMAX2-RV32-NEXT: .cfi_offset ra, -4 5525; LMULMAX2-RV32-NEXT: .cfi_offset s0, -8 5526; LMULMAX2-RV32-NEXT: addi s0, sp, 96 5527; LMULMAX2-RV32-NEXT: .cfi_def_cfa s0, 0 5528; LMULMAX2-RV32-NEXT: andi sp, sp, -32 5529; LMULMAX2-RV32-NEXT: vsetivli zero, 16, e16, m2, ta, mu 5530; LMULMAX2-RV32-NEXT: vle16.v v26, (a0) 5531; LMULMAX2-RV32-NEXT: vmv.x.s a2, v26 5532; LMULMAX2-RV32-NEXT: lui a6, 16 5533; LMULMAX2-RV32-NEXT: or a2, a2, a6 5534; LMULMAX2-RV32-NEXT: addi a3, a2, -1 5535; LMULMAX2-RV32-NEXT: not a2, a2 5536; LMULMAX2-RV32-NEXT: and a3, a2, a3 5537; LMULMAX2-RV32-NEXT: srli a4, a3, 1 5538; LMULMAX2-RV32-NEXT: lui a2, 349525 5539; LMULMAX2-RV32-NEXT: addi a7, a2, 1365 5540; LMULMAX2-RV32-NEXT: and a4, a4, a7 5541; LMULMAX2-RV32-NEXT: sub a4, a3, a4 5542; LMULMAX2-RV32-NEXT: lui a3, 209715 5543; LMULMAX2-RV32-NEXT: addi a3, a3, 819 5544; LMULMAX2-RV32-NEXT: and a5, a4, a3 5545; LMULMAX2-RV32-NEXT: srli a4, a4, 2 5546; LMULMAX2-RV32-NEXT: and a4, a4, a3 5547; LMULMAX2-RV32-NEXT: add a4, a5, a4 5548; LMULMAX2-RV32-NEXT: srli a5, a4, 4 5549; LMULMAX2-RV32-NEXT: add a5, a4, a5 5550; LMULMAX2-RV32-NEXT: lui a4, 61681 5551; LMULMAX2-RV32-NEXT: addi a4, a4, -241 5552; LMULMAX2-RV32-NEXT: and a1, a5, a4 5553; LMULMAX2-RV32-NEXT: lui a5, 4112 5554; LMULMAX2-RV32-NEXT: addi a5, a5, 257 5555; LMULMAX2-RV32-NEXT: mul a1, a1, a5 5556; LMULMAX2-RV32-NEXT: srli a1, a1, 24 5557; LMULMAX2-RV32-NEXT: sh a1, 32(sp) 5558; LMULMAX2-RV32-NEXT: vsetivli zero, 1, e16, m2, ta, mu 5559; LMULMAX2-RV32-NEXT: vslidedown.vi v28, v26, 15 5560; LMULMAX2-RV32-NEXT: vmv.x.s a1, v28 5561; LMULMAX2-RV32-NEXT: or a1, a1, a6 5562; LMULMAX2-RV32-NEXT: addi a2, a1, -1 5563; LMULMAX2-RV32-NEXT: not a1, a1 5564; LMULMAX2-RV32-NEXT: and a1, a1, a2 5565; LMULMAX2-RV32-NEXT: srli a2, a1, 1 5566; LMULMAX2-RV32-NEXT: and a2, a2, a7 5567; LMULMAX2-RV32-NEXT: sub a1, a1, a2 5568; LMULMAX2-RV32-NEXT: and a2, a1, a3 5569; LMULMAX2-RV32-NEXT: srli a1, a1, 2 5570; LMULMAX2-RV32-NEXT: and a1, a1, a3 5571; LMULMAX2-RV32-NEXT: add a1, a2, a1 5572; LMULMAX2-RV32-NEXT: srli a2, a1, 4 5573; LMULMAX2-RV32-NEXT: add a1, a1, a2 5574; LMULMAX2-RV32-NEXT: and a1, a1, a4 5575; LMULMAX2-RV32-NEXT: mul a1, a1, a5 5576; LMULMAX2-RV32-NEXT: srli a1, a1, 24 5577; LMULMAX2-RV32-NEXT: sh a1, 62(sp) 5578; LMULMAX2-RV32-NEXT: vslidedown.vi v28, v26, 14 5579; LMULMAX2-RV32-NEXT: vmv.x.s a1, v28 5580; LMULMAX2-RV32-NEXT: or a1, a1, a6 5581; LMULMAX2-RV32-NEXT: addi a2, a1, -1 5582; LMULMAX2-RV32-NEXT: not a1, a1 5583; LMULMAX2-RV32-NEXT: and a1, a1, a2 5584; LMULMAX2-RV32-NEXT: srli a2, a1, 1 5585; LMULMAX2-RV32-NEXT: and a2, a2, a7 5586; LMULMAX2-RV32-NEXT: sub a1, a1, a2 5587; LMULMAX2-RV32-NEXT: and a2, a1, a3 5588; LMULMAX2-RV32-NEXT: srli a1, a1, 2 5589; LMULMAX2-RV32-NEXT: and a1, a1, a3 5590; LMULMAX2-RV32-NEXT: add a1, a2, a1 5591; LMULMAX2-RV32-NEXT: srli a2, a1, 4 5592; LMULMAX2-RV32-NEXT: add a1, a1, a2 5593; LMULMAX2-RV32-NEXT: and a1, a1, a4 5594; LMULMAX2-RV32-NEXT: mul a1, a1, a5 5595; LMULMAX2-RV32-NEXT: srli a1, a1, 24 5596; LMULMAX2-RV32-NEXT: sh a1, 60(sp) 5597; LMULMAX2-RV32-NEXT: vslidedown.vi v28, v26, 13 5598; LMULMAX2-RV32-NEXT: vmv.x.s a1, v28 5599; LMULMAX2-RV32-NEXT: or a1, a1, a6 5600; LMULMAX2-RV32-NEXT: addi a2, a1, -1 5601; LMULMAX2-RV32-NEXT: not a1, a1 5602; LMULMAX2-RV32-NEXT: and a1, a1, a2 5603; LMULMAX2-RV32-NEXT: srli a2, a1, 1 5604; LMULMAX2-RV32-NEXT: and a2, a2, a7 5605; LMULMAX2-RV32-NEXT: sub a1, a1, a2 5606; LMULMAX2-RV32-NEXT: and a2, a1, a3 5607; LMULMAX2-RV32-NEXT: srli a1, a1, 2 5608; LMULMAX2-RV32-NEXT: and a1, a1, a3 5609; LMULMAX2-RV32-NEXT: add a1, a2, a1 5610; LMULMAX2-RV32-NEXT: srli a2, a1, 4 5611; LMULMAX2-RV32-NEXT: add a1, a1, a2 5612; LMULMAX2-RV32-NEXT: and a1, a1, a4 5613; LMULMAX2-RV32-NEXT: mul a1, a1, a5 5614; LMULMAX2-RV32-NEXT: srli a1, a1, 24 5615; LMULMAX2-RV32-NEXT: sh a1, 58(sp) 5616; LMULMAX2-RV32-NEXT: vslidedown.vi v28, v26, 12 5617; LMULMAX2-RV32-NEXT: vmv.x.s a1, v28 5618; LMULMAX2-RV32-NEXT: or a1, a1, a6 5619; LMULMAX2-RV32-NEXT: addi a2, a1, -1 5620; LMULMAX2-RV32-NEXT: not a1, a1 5621; LMULMAX2-RV32-NEXT: and a1, a1, a2 5622; LMULMAX2-RV32-NEXT: srli a2, a1, 1 5623; LMULMAX2-RV32-NEXT: and a2, a2, a7 5624; LMULMAX2-RV32-NEXT: sub a1, a1, a2 5625; LMULMAX2-RV32-NEXT: and a2, a1, a3 5626; LMULMAX2-RV32-NEXT: srli a1, a1, 2 5627; LMULMAX2-RV32-NEXT: and a1, a1, a3 5628; LMULMAX2-RV32-NEXT: add a1, a2, a1 5629; LMULMAX2-RV32-NEXT: srli a2, a1, 4 5630; LMULMAX2-RV32-NEXT: add a1, a1, a2 5631; LMULMAX2-RV32-NEXT: and a1, a1, a4 5632; LMULMAX2-RV32-NEXT: mul a1, a1, a5 5633; LMULMAX2-RV32-NEXT: srli a1, a1, 24 5634; LMULMAX2-RV32-NEXT: sh a1, 56(sp) 5635; LMULMAX2-RV32-NEXT: vslidedown.vi v28, v26, 11 5636; LMULMAX2-RV32-NEXT: vmv.x.s a1, v28 5637; LMULMAX2-RV32-NEXT: or a1, a1, a6 5638; LMULMAX2-RV32-NEXT: addi a2, a1, -1 5639; LMULMAX2-RV32-NEXT: not a1, a1 5640; LMULMAX2-RV32-NEXT: and a1, a1, a2 5641; LMULMAX2-RV32-NEXT: srli a2, a1, 1 5642; LMULMAX2-RV32-NEXT: and a2, a2, a7 5643; LMULMAX2-RV32-NEXT: sub a1, a1, a2 5644; LMULMAX2-RV32-NEXT: and a2, a1, a3 5645; LMULMAX2-RV32-NEXT: srli a1, a1, 2 5646; LMULMAX2-RV32-NEXT: and a1, a1, a3 5647; LMULMAX2-RV32-NEXT: add a1, a2, a1 5648; LMULMAX2-RV32-NEXT: srli a2, a1, 4 5649; LMULMAX2-RV32-NEXT: add a1, a1, a2 5650; LMULMAX2-RV32-NEXT: and a1, a1, a4 5651; LMULMAX2-RV32-NEXT: mul a1, a1, a5 5652; LMULMAX2-RV32-NEXT: srli a1, a1, 24 5653; LMULMAX2-RV32-NEXT: sh a1, 54(sp) 5654; LMULMAX2-RV32-NEXT: vslidedown.vi v28, v26, 10 5655; LMULMAX2-RV32-NEXT: vmv.x.s a1, v28 5656; LMULMAX2-RV32-NEXT: or a1, a1, a6 5657; LMULMAX2-RV32-NEXT: addi a2, a1, -1 5658; LMULMAX2-RV32-NEXT: not a1, a1 5659; LMULMAX2-RV32-NEXT: and a1, a1, a2 5660; LMULMAX2-RV32-NEXT: srli a2, a1, 1 5661; LMULMAX2-RV32-NEXT: and a2, a2, a7 5662; LMULMAX2-RV32-NEXT: sub a1, a1, a2 5663; LMULMAX2-RV32-NEXT: and a2, a1, a3 5664; LMULMAX2-RV32-NEXT: srli a1, a1, 2 5665; LMULMAX2-RV32-NEXT: and a1, a1, a3 5666; LMULMAX2-RV32-NEXT: add a1, a2, a1 5667; LMULMAX2-RV32-NEXT: srli a2, a1, 4 5668; LMULMAX2-RV32-NEXT: add a1, a1, a2 5669; LMULMAX2-RV32-NEXT: and a1, a1, a4 5670; LMULMAX2-RV32-NEXT: mul a1, a1, a5 5671; LMULMAX2-RV32-NEXT: srli a1, a1, 24 5672; LMULMAX2-RV32-NEXT: sh a1, 52(sp) 5673; LMULMAX2-RV32-NEXT: vslidedown.vi v28, v26, 9 5674; LMULMAX2-RV32-NEXT: vmv.x.s a1, v28 5675; LMULMAX2-RV32-NEXT: or a1, a1, a6 5676; LMULMAX2-RV32-NEXT: addi a2, a1, -1 5677; LMULMAX2-RV32-NEXT: not a1, a1 5678; LMULMAX2-RV32-NEXT: and a1, a1, a2 5679; LMULMAX2-RV32-NEXT: srli a2, a1, 1 5680; LMULMAX2-RV32-NEXT: and a2, a2, a7 5681; LMULMAX2-RV32-NEXT: sub a1, a1, a2 5682; LMULMAX2-RV32-NEXT: and a2, a1, a3 5683; LMULMAX2-RV32-NEXT: srli a1, a1, 2 5684; LMULMAX2-RV32-NEXT: and a1, a1, a3 5685; LMULMAX2-RV32-NEXT: add a1, a2, a1 5686; LMULMAX2-RV32-NEXT: srli a2, a1, 4 5687; LMULMAX2-RV32-NEXT: add a1, a1, a2 5688; LMULMAX2-RV32-NEXT: and a1, a1, a4 5689; LMULMAX2-RV32-NEXT: mul a1, a1, a5 5690; LMULMAX2-RV32-NEXT: srli a1, a1, 24 5691; LMULMAX2-RV32-NEXT: sh a1, 50(sp) 5692; LMULMAX2-RV32-NEXT: vslidedown.vi v28, v26, 8 5693; LMULMAX2-RV32-NEXT: vmv.x.s a1, v28 5694; LMULMAX2-RV32-NEXT: or a1, a1, a6 5695; LMULMAX2-RV32-NEXT: addi a2, a1, -1 5696; LMULMAX2-RV32-NEXT: not a1, a1 5697; LMULMAX2-RV32-NEXT: and a1, a1, a2 5698; LMULMAX2-RV32-NEXT: srli a2, a1, 1 5699; LMULMAX2-RV32-NEXT: and a2, a2, a7 5700; LMULMAX2-RV32-NEXT: sub a1, a1, a2 5701; LMULMAX2-RV32-NEXT: and a2, a1, a3 5702; LMULMAX2-RV32-NEXT: srli a1, a1, 2 5703; LMULMAX2-RV32-NEXT: and a1, a1, a3 5704; LMULMAX2-RV32-NEXT: add a1, a2, a1 5705; LMULMAX2-RV32-NEXT: srli a2, a1, 4 5706; LMULMAX2-RV32-NEXT: add a1, a1, a2 5707; LMULMAX2-RV32-NEXT: and a1, a1, a4 5708; LMULMAX2-RV32-NEXT: mul a1, a1, a5 5709; LMULMAX2-RV32-NEXT: srli a1, a1, 24 5710; LMULMAX2-RV32-NEXT: sh a1, 48(sp) 5711; LMULMAX2-RV32-NEXT: vslidedown.vi v28, v26, 7 5712; LMULMAX2-RV32-NEXT: vmv.x.s a1, v28 5713; LMULMAX2-RV32-NEXT: or a1, a1, a6 5714; LMULMAX2-RV32-NEXT: addi a2, a1, -1 5715; LMULMAX2-RV32-NEXT: not a1, a1 5716; LMULMAX2-RV32-NEXT: and a1, a1, a2 5717; LMULMAX2-RV32-NEXT: srli a2, a1, 1 5718; LMULMAX2-RV32-NEXT: and a2, a2, a7 5719; LMULMAX2-RV32-NEXT: sub a1, a1, a2 5720; LMULMAX2-RV32-NEXT: and a2, a1, a3 5721; LMULMAX2-RV32-NEXT: srli a1, a1, 2 5722; LMULMAX2-RV32-NEXT: and a1, a1, a3 5723; LMULMAX2-RV32-NEXT: add a1, a2, a1 5724; LMULMAX2-RV32-NEXT: srli a2, a1, 4 5725; LMULMAX2-RV32-NEXT: add a1, a1, a2 5726; LMULMAX2-RV32-NEXT: and a1, a1, a4 5727; LMULMAX2-RV32-NEXT: mul a1, a1, a5 5728; LMULMAX2-RV32-NEXT: srli a1, a1, 24 5729; LMULMAX2-RV32-NEXT: sh a1, 46(sp) 5730; LMULMAX2-RV32-NEXT: vslidedown.vi v28, v26, 6 5731; LMULMAX2-RV32-NEXT: vmv.x.s a1, v28 5732; LMULMAX2-RV32-NEXT: or a1, a1, a6 5733; LMULMAX2-RV32-NEXT: addi a2, a1, -1 5734; LMULMAX2-RV32-NEXT: not a1, a1 5735; LMULMAX2-RV32-NEXT: and a1, a1, a2 5736; LMULMAX2-RV32-NEXT: srli a2, a1, 1 5737; LMULMAX2-RV32-NEXT: and a2, a2, a7 5738; LMULMAX2-RV32-NEXT: sub a1, a1, a2 5739; LMULMAX2-RV32-NEXT: and a2, a1, a3 5740; LMULMAX2-RV32-NEXT: srli a1, a1, 2 5741; LMULMAX2-RV32-NEXT: and a1, a1, a3 5742; LMULMAX2-RV32-NEXT: add a1, a2, a1 5743; LMULMAX2-RV32-NEXT: srli a2, a1, 4 5744; LMULMAX2-RV32-NEXT: add a1, a1, a2 5745; LMULMAX2-RV32-NEXT: and a1, a1, a4 5746; LMULMAX2-RV32-NEXT: mul a1, a1, a5 5747; LMULMAX2-RV32-NEXT: srli a1, a1, 24 5748; LMULMAX2-RV32-NEXT: sh a1, 44(sp) 5749; LMULMAX2-RV32-NEXT: vslidedown.vi v28, v26, 5 5750; LMULMAX2-RV32-NEXT: vmv.x.s a1, v28 5751; LMULMAX2-RV32-NEXT: or a1, a1, a6 5752; LMULMAX2-RV32-NEXT: addi a2, a1, -1 5753; LMULMAX2-RV32-NEXT: not a1, a1 5754; LMULMAX2-RV32-NEXT: and a1, a1, a2 5755; LMULMAX2-RV32-NEXT: srli a2, a1, 1 5756; LMULMAX2-RV32-NEXT: and a2, a2, a7 5757; LMULMAX2-RV32-NEXT: sub a1, a1, a2 5758; LMULMAX2-RV32-NEXT: and a2, a1, a3 5759; LMULMAX2-RV32-NEXT: srli a1, a1, 2 5760; LMULMAX2-RV32-NEXT: and a1, a1, a3 5761; LMULMAX2-RV32-NEXT: add a1, a2, a1 5762; LMULMAX2-RV32-NEXT: srli a2, a1, 4 5763; LMULMAX2-RV32-NEXT: add a1, a1, a2 5764; LMULMAX2-RV32-NEXT: and a1, a1, a4 5765; LMULMAX2-RV32-NEXT: mul a1, a1, a5 5766; LMULMAX2-RV32-NEXT: srli a1, a1, 24 5767; LMULMAX2-RV32-NEXT: sh a1, 42(sp) 5768; LMULMAX2-RV32-NEXT: vslidedown.vi v28, v26, 4 5769; LMULMAX2-RV32-NEXT: vmv.x.s a1, v28 5770; LMULMAX2-RV32-NEXT: or a1, a1, a6 5771; LMULMAX2-RV32-NEXT: addi a2, a1, -1 5772; LMULMAX2-RV32-NEXT: not a1, a1 5773; LMULMAX2-RV32-NEXT: and a1, a1, a2 5774; LMULMAX2-RV32-NEXT: srli a2, a1, 1 5775; LMULMAX2-RV32-NEXT: and a2, a2, a7 5776; LMULMAX2-RV32-NEXT: sub a1, a1, a2 5777; LMULMAX2-RV32-NEXT: and a2, a1, a3 5778; LMULMAX2-RV32-NEXT: srli a1, a1, 2 5779; LMULMAX2-RV32-NEXT: and a1, a1, a3 5780; LMULMAX2-RV32-NEXT: add a1, a2, a1 5781; LMULMAX2-RV32-NEXT: srli a2, a1, 4 5782; LMULMAX2-RV32-NEXT: add a1, a1, a2 5783; LMULMAX2-RV32-NEXT: and a1, a1, a4 5784; LMULMAX2-RV32-NEXT: mul a1, a1, a5 5785; LMULMAX2-RV32-NEXT: srli a1, a1, 24 5786; LMULMAX2-RV32-NEXT: sh a1, 40(sp) 5787; LMULMAX2-RV32-NEXT: vslidedown.vi v28, v26, 3 5788; LMULMAX2-RV32-NEXT: vmv.x.s a1, v28 5789; LMULMAX2-RV32-NEXT: or a1, a1, a6 5790; LMULMAX2-RV32-NEXT: addi a2, a1, -1 5791; LMULMAX2-RV32-NEXT: not a1, a1 5792; LMULMAX2-RV32-NEXT: and a1, a1, a2 5793; LMULMAX2-RV32-NEXT: srli a2, a1, 1 5794; LMULMAX2-RV32-NEXT: and a2, a2, a7 5795; LMULMAX2-RV32-NEXT: sub a1, a1, a2 5796; LMULMAX2-RV32-NEXT: and a2, a1, a3 5797; LMULMAX2-RV32-NEXT: srli a1, a1, 2 5798; LMULMAX2-RV32-NEXT: and a1, a1, a3 5799; LMULMAX2-RV32-NEXT: add a1, a2, a1 5800; LMULMAX2-RV32-NEXT: srli a2, a1, 4 5801; LMULMAX2-RV32-NEXT: add a1, a1, a2 5802; LMULMAX2-RV32-NEXT: and a1, a1, a4 5803; LMULMAX2-RV32-NEXT: mul a1, a1, a5 5804; LMULMAX2-RV32-NEXT: srli a1, a1, 24 5805; LMULMAX2-RV32-NEXT: sh a1, 38(sp) 5806; LMULMAX2-RV32-NEXT: vslidedown.vi v28, v26, 2 5807; LMULMAX2-RV32-NEXT: vmv.x.s a1, v28 5808; LMULMAX2-RV32-NEXT: or a1, a1, a6 5809; LMULMAX2-RV32-NEXT: addi a2, a1, -1 5810; LMULMAX2-RV32-NEXT: not a1, a1 5811; LMULMAX2-RV32-NEXT: and a1, a1, a2 5812; LMULMAX2-RV32-NEXT: srli a2, a1, 1 5813; LMULMAX2-RV32-NEXT: and a2, a2, a7 5814; LMULMAX2-RV32-NEXT: sub a1, a1, a2 5815; LMULMAX2-RV32-NEXT: and a2, a1, a3 5816; LMULMAX2-RV32-NEXT: srli a1, a1, 2 5817; LMULMAX2-RV32-NEXT: and a1, a1, a3 5818; LMULMAX2-RV32-NEXT: add a1, a2, a1 5819; LMULMAX2-RV32-NEXT: srli a2, a1, 4 5820; LMULMAX2-RV32-NEXT: add a1, a1, a2 5821; LMULMAX2-RV32-NEXT: and a1, a1, a4 5822; LMULMAX2-RV32-NEXT: mul a1, a1, a5 5823; LMULMAX2-RV32-NEXT: srli a1, a1, 24 5824; LMULMAX2-RV32-NEXT: sh a1, 36(sp) 5825; LMULMAX2-RV32-NEXT: vslidedown.vi v26, v26, 1 5826; LMULMAX2-RV32-NEXT: vmv.x.s a1, v26 5827; LMULMAX2-RV32-NEXT: or a1, a1, a6 5828; LMULMAX2-RV32-NEXT: addi a2, a1, -1 5829; LMULMAX2-RV32-NEXT: not a1, a1 5830; LMULMAX2-RV32-NEXT: and a1, a1, a2 5831; LMULMAX2-RV32-NEXT: srli a2, a1, 1 5832; LMULMAX2-RV32-NEXT: and a2, a2, a7 5833; LMULMAX2-RV32-NEXT: sub a1, a1, a2 5834; LMULMAX2-RV32-NEXT: and a2, a1, a3 5835; LMULMAX2-RV32-NEXT: srli a1, a1, 2 5836; LMULMAX2-RV32-NEXT: and a1, a1, a3 5837; LMULMAX2-RV32-NEXT: add a1, a2, a1 5838; LMULMAX2-RV32-NEXT: srli a2, a1, 4 5839; LMULMAX2-RV32-NEXT: add a1, a1, a2 5840; LMULMAX2-RV32-NEXT: and a1, a1, a4 5841; LMULMAX2-RV32-NEXT: mul a1, a1, a5 5842; LMULMAX2-RV32-NEXT: srli a1, a1, 24 5843; LMULMAX2-RV32-NEXT: sh a1, 34(sp) 5844; LMULMAX2-RV32-NEXT: vsetivli zero, 16, e16, m2, ta, mu 5845; LMULMAX2-RV32-NEXT: addi a1, sp, 32 5846; LMULMAX2-RV32-NEXT: vle16.v v26, (a1) 5847; LMULMAX2-RV32-NEXT: vse16.v v26, (a0) 5848; LMULMAX2-RV32-NEXT: addi sp, s0, -96 5849; LMULMAX2-RV32-NEXT: lw s0, 88(sp) # 4-byte Folded Reload 5850; LMULMAX2-RV32-NEXT: lw ra, 92(sp) # 4-byte Folded Reload 5851; LMULMAX2-RV32-NEXT: addi sp, sp, 96 5852; LMULMAX2-RV32-NEXT: ret 5853; 5854; LMULMAX2-RV64-LABEL: cttz_v16i16: 5855; LMULMAX2-RV64: # %bb.0: 5856; LMULMAX2-RV64-NEXT: addi sp, sp, -96 5857; LMULMAX2-RV64-NEXT: .cfi_def_cfa_offset 96 5858; LMULMAX2-RV64-NEXT: sd ra, 88(sp) # 8-byte Folded Spill 5859; LMULMAX2-RV64-NEXT: sd s0, 80(sp) # 8-byte Folded Spill 5860; LMULMAX2-RV64-NEXT: .cfi_offset ra, -8 5861; LMULMAX2-RV64-NEXT: .cfi_offset s0, -16 5862; LMULMAX2-RV64-NEXT: addi s0, sp, 96 5863; LMULMAX2-RV64-NEXT: .cfi_def_cfa s0, 0 5864; LMULMAX2-RV64-NEXT: andi sp, sp, -32 5865; LMULMAX2-RV64-NEXT: vsetivli zero, 16, e16, m2, ta, mu 5866; LMULMAX2-RV64-NEXT: vle16.v v26, (a0) 5867; LMULMAX2-RV64-NEXT: vsetivli zero, 1, e16, m2, ta, mu 5868; LMULMAX2-RV64-NEXT: vslidedown.vi v28, v26, 15 5869; LMULMAX2-RV64-NEXT: vmv.x.s a2, v28 5870; LMULMAX2-RV64-NEXT: lui a6, 16 5871; LMULMAX2-RV64-NEXT: or a2, a2, a6 5872; LMULMAX2-RV64-NEXT: addi a3, a2, -1 5873; LMULMAX2-RV64-NEXT: not a2, a2 5874; LMULMAX2-RV64-NEXT: and a3, a2, a3 5875; LMULMAX2-RV64-NEXT: srli a4, a3, 1 5876; LMULMAX2-RV64-NEXT: lui a2, 21845 5877; LMULMAX2-RV64-NEXT: addiw a2, a2, 1365 5878; LMULMAX2-RV64-NEXT: slli a2, a2, 12 5879; LMULMAX2-RV64-NEXT: addi a2, a2, 1365 5880; LMULMAX2-RV64-NEXT: slli a2, a2, 12 5881; LMULMAX2-RV64-NEXT: addi a2, a2, 1365 5882; LMULMAX2-RV64-NEXT: slli a2, a2, 12 5883; LMULMAX2-RV64-NEXT: addi a7, a2, 1365 5884; LMULMAX2-RV64-NEXT: and a4, a4, a7 5885; LMULMAX2-RV64-NEXT: sub a4, a3, a4 5886; LMULMAX2-RV64-NEXT: lui a3, 13107 5887; LMULMAX2-RV64-NEXT: addiw a3, a3, 819 5888; LMULMAX2-RV64-NEXT: slli a3, a3, 12 5889; LMULMAX2-RV64-NEXT: addi a3, a3, 819 5890; LMULMAX2-RV64-NEXT: slli a3, a3, 12 5891; LMULMAX2-RV64-NEXT: addi a3, a3, 819 5892; LMULMAX2-RV64-NEXT: slli a3, a3, 12 5893; LMULMAX2-RV64-NEXT: addi a3, a3, 819 5894; LMULMAX2-RV64-NEXT: and a5, a4, a3 5895; LMULMAX2-RV64-NEXT: srli a4, a4, 2 5896; LMULMAX2-RV64-NEXT: and a4, a4, a3 5897; LMULMAX2-RV64-NEXT: add a4, a5, a4 5898; LMULMAX2-RV64-NEXT: srli a5, a4, 4 5899; LMULMAX2-RV64-NEXT: add a5, a4, a5 5900; LMULMAX2-RV64-NEXT: lui a4, 3855 5901; LMULMAX2-RV64-NEXT: addiw a4, a4, 241 5902; LMULMAX2-RV64-NEXT: slli a4, a4, 12 5903; LMULMAX2-RV64-NEXT: addi a4, a4, -241 5904; LMULMAX2-RV64-NEXT: slli a4, a4, 12 5905; LMULMAX2-RV64-NEXT: addi a4, a4, 241 5906; LMULMAX2-RV64-NEXT: slli a4, a4, 12 5907; LMULMAX2-RV64-NEXT: addi a4, a4, -241 5908; LMULMAX2-RV64-NEXT: and a1, a5, a4 5909; LMULMAX2-RV64-NEXT: lui a5, 4112 5910; LMULMAX2-RV64-NEXT: addiw a5, a5, 257 5911; LMULMAX2-RV64-NEXT: slli a5, a5, 16 5912; LMULMAX2-RV64-NEXT: addi a5, a5, 257 5913; LMULMAX2-RV64-NEXT: slli a5, a5, 16 5914; LMULMAX2-RV64-NEXT: addi a5, a5, 257 5915; LMULMAX2-RV64-NEXT: mul a1, a1, a5 5916; LMULMAX2-RV64-NEXT: srli a1, a1, 56 5917; LMULMAX2-RV64-NEXT: sh a1, 62(sp) 5918; LMULMAX2-RV64-NEXT: vslidedown.vi v28, v26, 14 5919; LMULMAX2-RV64-NEXT: vmv.x.s a1, v28 5920; LMULMAX2-RV64-NEXT: or a1, a1, a6 5921; LMULMAX2-RV64-NEXT: addi a2, a1, -1 5922; LMULMAX2-RV64-NEXT: not a1, a1 5923; LMULMAX2-RV64-NEXT: and a1, a1, a2 5924; LMULMAX2-RV64-NEXT: srli a2, a1, 1 5925; LMULMAX2-RV64-NEXT: and a2, a2, a7 5926; LMULMAX2-RV64-NEXT: sub a1, a1, a2 5927; LMULMAX2-RV64-NEXT: and a2, a1, a3 5928; LMULMAX2-RV64-NEXT: srli a1, a1, 2 5929; LMULMAX2-RV64-NEXT: and a1, a1, a3 5930; LMULMAX2-RV64-NEXT: add a1, a2, a1 5931; LMULMAX2-RV64-NEXT: srli a2, a1, 4 5932; LMULMAX2-RV64-NEXT: add a1, a1, a2 5933; LMULMAX2-RV64-NEXT: and a1, a1, a4 5934; LMULMAX2-RV64-NEXT: mul a1, a1, a5 5935; LMULMAX2-RV64-NEXT: srli a1, a1, 56 5936; LMULMAX2-RV64-NEXT: sh a1, 60(sp) 5937; LMULMAX2-RV64-NEXT: vslidedown.vi v28, v26, 13 5938; LMULMAX2-RV64-NEXT: vmv.x.s a1, v28 5939; LMULMAX2-RV64-NEXT: or a1, a1, a6 5940; LMULMAX2-RV64-NEXT: addi a2, a1, -1 5941; LMULMAX2-RV64-NEXT: not a1, a1 5942; LMULMAX2-RV64-NEXT: and a1, a1, a2 5943; LMULMAX2-RV64-NEXT: srli a2, a1, 1 5944; LMULMAX2-RV64-NEXT: and a2, a2, a7 5945; LMULMAX2-RV64-NEXT: sub a1, a1, a2 5946; LMULMAX2-RV64-NEXT: and a2, a1, a3 5947; LMULMAX2-RV64-NEXT: srli a1, a1, 2 5948; LMULMAX2-RV64-NEXT: and a1, a1, a3 5949; LMULMAX2-RV64-NEXT: add a1, a2, a1 5950; LMULMAX2-RV64-NEXT: srli a2, a1, 4 5951; LMULMAX2-RV64-NEXT: add a1, a1, a2 5952; LMULMAX2-RV64-NEXT: and a1, a1, a4 5953; LMULMAX2-RV64-NEXT: mul a1, a1, a5 5954; LMULMAX2-RV64-NEXT: srli a1, a1, 56 5955; LMULMAX2-RV64-NEXT: sh a1, 58(sp) 5956; LMULMAX2-RV64-NEXT: vslidedown.vi v28, v26, 12 5957; LMULMAX2-RV64-NEXT: vmv.x.s a1, v28 5958; LMULMAX2-RV64-NEXT: or a1, a1, a6 5959; LMULMAX2-RV64-NEXT: addi a2, a1, -1 5960; LMULMAX2-RV64-NEXT: not a1, a1 5961; LMULMAX2-RV64-NEXT: and a1, a1, a2 5962; LMULMAX2-RV64-NEXT: srli a2, a1, 1 5963; LMULMAX2-RV64-NEXT: and a2, a2, a7 5964; LMULMAX2-RV64-NEXT: sub a1, a1, a2 5965; LMULMAX2-RV64-NEXT: and a2, a1, a3 5966; LMULMAX2-RV64-NEXT: srli a1, a1, 2 5967; LMULMAX2-RV64-NEXT: and a1, a1, a3 5968; LMULMAX2-RV64-NEXT: add a1, a2, a1 5969; LMULMAX2-RV64-NEXT: srli a2, a1, 4 5970; LMULMAX2-RV64-NEXT: add a1, a1, a2 5971; LMULMAX2-RV64-NEXT: and a1, a1, a4 5972; LMULMAX2-RV64-NEXT: mul a1, a1, a5 5973; LMULMAX2-RV64-NEXT: srli a1, a1, 56 5974; LMULMAX2-RV64-NEXT: sh a1, 56(sp) 5975; LMULMAX2-RV64-NEXT: vslidedown.vi v28, v26, 11 5976; LMULMAX2-RV64-NEXT: vmv.x.s a1, v28 5977; LMULMAX2-RV64-NEXT: or a1, a1, a6 5978; LMULMAX2-RV64-NEXT: addi a2, a1, -1 5979; LMULMAX2-RV64-NEXT: not a1, a1 5980; LMULMAX2-RV64-NEXT: and a1, a1, a2 5981; LMULMAX2-RV64-NEXT: srli a2, a1, 1 5982; LMULMAX2-RV64-NEXT: and a2, a2, a7 5983; LMULMAX2-RV64-NEXT: sub a1, a1, a2 5984; LMULMAX2-RV64-NEXT: and a2, a1, a3 5985; LMULMAX2-RV64-NEXT: srli a1, a1, 2 5986; LMULMAX2-RV64-NEXT: and a1, a1, a3 5987; LMULMAX2-RV64-NEXT: add a1, a2, a1 5988; LMULMAX2-RV64-NEXT: srli a2, a1, 4 5989; LMULMAX2-RV64-NEXT: add a1, a1, a2 5990; LMULMAX2-RV64-NEXT: and a1, a1, a4 5991; LMULMAX2-RV64-NEXT: mul a1, a1, a5 5992; LMULMAX2-RV64-NEXT: srli a1, a1, 56 5993; LMULMAX2-RV64-NEXT: sh a1, 54(sp) 5994; LMULMAX2-RV64-NEXT: vslidedown.vi v28, v26, 10 5995; LMULMAX2-RV64-NEXT: vmv.x.s a1, v28 5996; LMULMAX2-RV64-NEXT: or a1, a1, a6 5997; LMULMAX2-RV64-NEXT: addi a2, a1, -1 5998; LMULMAX2-RV64-NEXT: not a1, a1 5999; LMULMAX2-RV64-NEXT: and a1, a1, a2 6000; LMULMAX2-RV64-NEXT: srli a2, a1, 1 6001; LMULMAX2-RV64-NEXT: and a2, a2, a7 6002; LMULMAX2-RV64-NEXT: sub a1, a1, a2 6003; LMULMAX2-RV64-NEXT: and a2, a1, a3 6004; LMULMAX2-RV64-NEXT: srli a1, a1, 2 6005; LMULMAX2-RV64-NEXT: and a1, a1, a3 6006; LMULMAX2-RV64-NEXT: add a1, a2, a1 6007; LMULMAX2-RV64-NEXT: srli a2, a1, 4 6008; LMULMAX2-RV64-NEXT: add a1, a1, a2 6009; LMULMAX2-RV64-NEXT: and a1, a1, a4 6010; LMULMAX2-RV64-NEXT: mul a1, a1, a5 6011; LMULMAX2-RV64-NEXT: srli a1, a1, 56 6012; LMULMAX2-RV64-NEXT: sh a1, 52(sp) 6013; LMULMAX2-RV64-NEXT: vslidedown.vi v28, v26, 9 6014; LMULMAX2-RV64-NEXT: vmv.x.s a1, v28 6015; LMULMAX2-RV64-NEXT: or a1, a1, a6 6016; LMULMAX2-RV64-NEXT: addi a2, a1, -1 6017; LMULMAX2-RV64-NEXT: not a1, a1 6018; LMULMAX2-RV64-NEXT: and a1, a1, a2 6019; LMULMAX2-RV64-NEXT: srli a2, a1, 1 6020; LMULMAX2-RV64-NEXT: and a2, a2, a7 6021; LMULMAX2-RV64-NEXT: sub a1, a1, a2 6022; LMULMAX2-RV64-NEXT: and a2, a1, a3 6023; LMULMAX2-RV64-NEXT: srli a1, a1, 2 6024; LMULMAX2-RV64-NEXT: and a1, a1, a3 6025; LMULMAX2-RV64-NEXT: add a1, a2, a1 6026; LMULMAX2-RV64-NEXT: srli a2, a1, 4 6027; LMULMAX2-RV64-NEXT: add a1, a1, a2 6028; LMULMAX2-RV64-NEXT: and a1, a1, a4 6029; LMULMAX2-RV64-NEXT: mul a1, a1, a5 6030; LMULMAX2-RV64-NEXT: srli a1, a1, 56 6031; LMULMAX2-RV64-NEXT: sh a1, 50(sp) 6032; LMULMAX2-RV64-NEXT: vslidedown.vi v28, v26, 8 6033; LMULMAX2-RV64-NEXT: vmv.x.s a1, v28 6034; LMULMAX2-RV64-NEXT: or a1, a1, a6 6035; LMULMAX2-RV64-NEXT: addi a2, a1, -1 6036; LMULMAX2-RV64-NEXT: not a1, a1 6037; LMULMAX2-RV64-NEXT: and a1, a1, a2 6038; LMULMAX2-RV64-NEXT: srli a2, a1, 1 6039; LMULMAX2-RV64-NEXT: and a2, a2, a7 6040; LMULMAX2-RV64-NEXT: sub a1, a1, a2 6041; LMULMAX2-RV64-NEXT: and a2, a1, a3 6042; LMULMAX2-RV64-NEXT: srli a1, a1, 2 6043; LMULMAX2-RV64-NEXT: and a1, a1, a3 6044; LMULMAX2-RV64-NEXT: add a1, a2, a1 6045; LMULMAX2-RV64-NEXT: srli a2, a1, 4 6046; LMULMAX2-RV64-NEXT: add a1, a1, a2 6047; LMULMAX2-RV64-NEXT: and a1, a1, a4 6048; LMULMAX2-RV64-NEXT: mul a1, a1, a5 6049; LMULMAX2-RV64-NEXT: srli a1, a1, 56 6050; LMULMAX2-RV64-NEXT: sh a1, 48(sp) 6051; LMULMAX2-RV64-NEXT: vslidedown.vi v28, v26, 7 6052; LMULMAX2-RV64-NEXT: vmv.x.s a1, v28 6053; LMULMAX2-RV64-NEXT: or a1, a1, a6 6054; LMULMAX2-RV64-NEXT: addi a2, a1, -1 6055; LMULMAX2-RV64-NEXT: not a1, a1 6056; LMULMAX2-RV64-NEXT: and a1, a1, a2 6057; LMULMAX2-RV64-NEXT: srli a2, a1, 1 6058; LMULMAX2-RV64-NEXT: and a2, a2, a7 6059; LMULMAX2-RV64-NEXT: sub a1, a1, a2 6060; LMULMAX2-RV64-NEXT: and a2, a1, a3 6061; LMULMAX2-RV64-NEXT: srli a1, a1, 2 6062; LMULMAX2-RV64-NEXT: and a1, a1, a3 6063; LMULMAX2-RV64-NEXT: add a1, a2, a1 6064; LMULMAX2-RV64-NEXT: srli a2, a1, 4 6065; LMULMAX2-RV64-NEXT: add a1, a1, a2 6066; LMULMAX2-RV64-NEXT: and a1, a1, a4 6067; LMULMAX2-RV64-NEXT: mul a1, a1, a5 6068; LMULMAX2-RV64-NEXT: srli a1, a1, 56 6069; LMULMAX2-RV64-NEXT: sh a1, 46(sp) 6070; LMULMAX2-RV64-NEXT: vslidedown.vi v28, v26, 6 6071; LMULMAX2-RV64-NEXT: vmv.x.s a1, v28 6072; LMULMAX2-RV64-NEXT: or a1, a1, a6 6073; LMULMAX2-RV64-NEXT: addi a2, a1, -1 6074; LMULMAX2-RV64-NEXT: not a1, a1 6075; LMULMAX2-RV64-NEXT: and a1, a1, a2 6076; LMULMAX2-RV64-NEXT: srli a2, a1, 1 6077; LMULMAX2-RV64-NEXT: and a2, a2, a7 6078; LMULMAX2-RV64-NEXT: sub a1, a1, a2 6079; LMULMAX2-RV64-NEXT: and a2, a1, a3 6080; LMULMAX2-RV64-NEXT: srli a1, a1, 2 6081; LMULMAX2-RV64-NEXT: and a1, a1, a3 6082; LMULMAX2-RV64-NEXT: add a1, a2, a1 6083; LMULMAX2-RV64-NEXT: srli a2, a1, 4 6084; LMULMAX2-RV64-NEXT: add a1, a1, a2 6085; LMULMAX2-RV64-NEXT: and a1, a1, a4 6086; LMULMAX2-RV64-NEXT: mul a1, a1, a5 6087; LMULMAX2-RV64-NEXT: srli a1, a1, 56 6088; LMULMAX2-RV64-NEXT: sh a1, 44(sp) 6089; LMULMAX2-RV64-NEXT: vslidedown.vi v28, v26, 5 6090; LMULMAX2-RV64-NEXT: vmv.x.s a1, v28 6091; LMULMAX2-RV64-NEXT: or a1, a1, a6 6092; LMULMAX2-RV64-NEXT: addi a2, a1, -1 6093; LMULMAX2-RV64-NEXT: not a1, a1 6094; LMULMAX2-RV64-NEXT: and a1, a1, a2 6095; LMULMAX2-RV64-NEXT: srli a2, a1, 1 6096; LMULMAX2-RV64-NEXT: and a2, a2, a7 6097; LMULMAX2-RV64-NEXT: sub a1, a1, a2 6098; LMULMAX2-RV64-NEXT: and a2, a1, a3 6099; LMULMAX2-RV64-NEXT: srli a1, a1, 2 6100; LMULMAX2-RV64-NEXT: and a1, a1, a3 6101; LMULMAX2-RV64-NEXT: add a1, a2, a1 6102; LMULMAX2-RV64-NEXT: srli a2, a1, 4 6103; LMULMAX2-RV64-NEXT: add a1, a1, a2 6104; LMULMAX2-RV64-NEXT: and a1, a1, a4 6105; LMULMAX2-RV64-NEXT: mul a1, a1, a5 6106; LMULMAX2-RV64-NEXT: srli a1, a1, 56 6107; LMULMAX2-RV64-NEXT: sh a1, 42(sp) 6108; LMULMAX2-RV64-NEXT: vslidedown.vi v28, v26, 4 6109; LMULMAX2-RV64-NEXT: vmv.x.s a1, v28 6110; LMULMAX2-RV64-NEXT: or a1, a1, a6 6111; LMULMAX2-RV64-NEXT: addi a2, a1, -1 6112; LMULMAX2-RV64-NEXT: not a1, a1 6113; LMULMAX2-RV64-NEXT: and a1, a1, a2 6114; LMULMAX2-RV64-NEXT: srli a2, a1, 1 6115; LMULMAX2-RV64-NEXT: and a2, a2, a7 6116; LMULMAX2-RV64-NEXT: sub a1, a1, a2 6117; LMULMAX2-RV64-NEXT: and a2, a1, a3 6118; LMULMAX2-RV64-NEXT: srli a1, a1, 2 6119; LMULMAX2-RV64-NEXT: and a1, a1, a3 6120; LMULMAX2-RV64-NEXT: add a1, a2, a1 6121; LMULMAX2-RV64-NEXT: srli a2, a1, 4 6122; LMULMAX2-RV64-NEXT: add a1, a1, a2 6123; LMULMAX2-RV64-NEXT: and a1, a1, a4 6124; LMULMAX2-RV64-NEXT: mul a1, a1, a5 6125; LMULMAX2-RV64-NEXT: srli a1, a1, 56 6126; LMULMAX2-RV64-NEXT: sh a1, 40(sp) 6127; LMULMAX2-RV64-NEXT: vslidedown.vi v28, v26, 3 6128; LMULMAX2-RV64-NEXT: vmv.x.s a1, v28 6129; LMULMAX2-RV64-NEXT: or a1, a1, a6 6130; LMULMAX2-RV64-NEXT: addi a2, a1, -1 6131; LMULMAX2-RV64-NEXT: not a1, a1 6132; LMULMAX2-RV64-NEXT: and a1, a1, a2 6133; LMULMAX2-RV64-NEXT: srli a2, a1, 1 6134; LMULMAX2-RV64-NEXT: and a2, a2, a7 6135; LMULMAX2-RV64-NEXT: sub a1, a1, a2 6136; LMULMAX2-RV64-NEXT: and a2, a1, a3 6137; LMULMAX2-RV64-NEXT: srli a1, a1, 2 6138; LMULMAX2-RV64-NEXT: and a1, a1, a3 6139; LMULMAX2-RV64-NEXT: add a1, a2, a1 6140; LMULMAX2-RV64-NEXT: srli a2, a1, 4 6141; LMULMAX2-RV64-NEXT: add a1, a1, a2 6142; LMULMAX2-RV64-NEXT: and a1, a1, a4 6143; LMULMAX2-RV64-NEXT: mul a1, a1, a5 6144; LMULMAX2-RV64-NEXT: srli a1, a1, 56 6145; LMULMAX2-RV64-NEXT: sh a1, 38(sp) 6146; LMULMAX2-RV64-NEXT: vslidedown.vi v28, v26, 2 6147; LMULMAX2-RV64-NEXT: vmv.x.s a1, v28 6148; LMULMAX2-RV64-NEXT: or a1, a1, a6 6149; LMULMAX2-RV64-NEXT: addi a2, a1, -1 6150; LMULMAX2-RV64-NEXT: not a1, a1 6151; LMULMAX2-RV64-NEXT: and a1, a1, a2 6152; LMULMAX2-RV64-NEXT: srli a2, a1, 1 6153; LMULMAX2-RV64-NEXT: and a2, a2, a7 6154; LMULMAX2-RV64-NEXT: sub a1, a1, a2 6155; LMULMAX2-RV64-NEXT: and a2, a1, a3 6156; LMULMAX2-RV64-NEXT: srli a1, a1, 2 6157; LMULMAX2-RV64-NEXT: and a1, a1, a3 6158; LMULMAX2-RV64-NEXT: add a1, a2, a1 6159; LMULMAX2-RV64-NEXT: srli a2, a1, 4 6160; LMULMAX2-RV64-NEXT: add a1, a1, a2 6161; LMULMAX2-RV64-NEXT: and a1, a1, a4 6162; LMULMAX2-RV64-NEXT: mul a1, a1, a5 6163; LMULMAX2-RV64-NEXT: srli a1, a1, 56 6164; LMULMAX2-RV64-NEXT: sh a1, 36(sp) 6165; LMULMAX2-RV64-NEXT: vslidedown.vi v28, v26, 1 6166; LMULMAX2-RV64-NEXT: vmv.x.s a1, v28 6167; LMULMAX2-RV64-NEXT: or a1, a1, a6 6168; LMULMAX2-RV64-NEXT: addi a2, a1, -1 6169; LMULMAX2-RV64-NEXT: not a1, a1 6170; LMULMAX2-RV64-NEXT: and a1, a1, a2 6171; LMULMAX2-RV64-NEXT: srli a2, a1, 1 6172; LMULMAX2-RV64-NEXT: and a2, a2, a7 6173; LMULMAX2-RV64-NEXT: sub a1, a1, a2 6174; LMULMAX2-RV64-NEXT: and a2, a1, a3 6175; LMULMAX2-RV64-NEXT: srli a1, a1, 2 6176; LMULMAX2-RV64-NEXT: and a1, a1, a3 6177; LMULMAX2-RV64-NEXT: add a1, a2, a1 6178; LMULMAX2-RV64-NEXT: srli a2, a1, 4 6179; LMULMAX2-RV64-NEXT: add a1, a1, a2 6180; LMULMAX2-RV64-NEXT: and a1, a1, a4 6181; LMULMAX2-RV64-NEXT: mul a1, a1, a5 6182; LMULMAX2-RV64-NEXT: srli a1, a1, 56 6183; LMULMAX2-RV64-NEXT: sh a1, 34(sp) 6184; LMULMAX2-RV64-NEXT: vmv.x.s a1, v26 6185; LMULMAX2-RV64-NEXT: or a1, a1, a6 6186; LMULMAX2-RV64-NEXT: addi a2, a1, -1 6187; LMULMAX2-RV64-NEXT: not a1, a1 6188; LMULMAX2-RV64-NEXT: and a1, a1, a2 6189; LMULMAX2-RV64-NEXT: srli a2, a1, 1 6190; LMULMAX2-RV64-NEXT: and a2, a2, a7 6191; LMULMAX2-RV64-NEXT: sub a1, a1, a2 6192; LMULMAX2-RV64-NEXT: and a2, a1, a3 6193; LMULMAX2-RV64-NEXT: srli a1, a1, 2 6194; LMULMAX2-RV64-NEXT: and a1, a1, a3 6195; LMULMAX2-RV64-NEXT: add a1, a2, a1 6196; LMULMAX2-RV64-NEXT: srli a2, a1, 4 6197; LMULMAX2-RV64-NEXT: add a1, a1, a2 6198; LMULMAX2-RV64-NEXT: and a1, a1, a4 6199; LMULMAX2-RV64-NEXT: mul a1, a1, a5 6200; LMULMAX2-RV64-NEXT: srli a1, a1, 56 6201; LMULMAX2-RV64-NEXT: sh a1, 32(sp) 6202; LMULMAX2-RV64-NEXT: vsetivli zero, 16, e16, m2, ta, mu 6203; LMULMAX2-RV64-NEXT: addi a1, sp, 32 6204; LMULMAX2-RV64-NEXT: vle16.v v26, (a1) 6205; LMULMAX2-RV64-NEXT: vse16.v v26, (a0) 6206; LMULMAX2-RV64-NEXT: addi sp, s0, -96 6207; LMULMAX2-RV64-NEXT: ld s0, 80(sp) # 8-byte Folded Reload 6208; LMULMAX2-RV64-NEXT: ld ra, 88(sp) # 8-byte Folded Reload 6209; LMULMAX2-RV64-NEXT: addi sp, sp, 96 6210; LMULMAX2-RV64-NEXT: ret 6211; 6212; LMULMAX1-RV32-LABEL: cttz_v16i16: 6213; LMULMAX1-RV32: # %bb.0: 6214; LMULMAX1-RV32-NEXT: addi sp, sp, -48 6215; LMULMAX1-RV32-NEXT: .cfi_def_cfa_offset 48 6216; LMULMAX1-RV32-NEXT: vsetivli zero, 8, e16, m1, ta, mu 6217; LMULMAX1-RV32-NEXT: addi a6, a0, 16 6218; LMULMAX1-RV32-NEXT: vle16.v v26, (a6) 6219; LMULMAX1-RV32-NEXT: vle16.v v25, (a0) 6220; LMULMAX1-RV32-NEXT: vmv.x.s a1, v26 6221; LMULMAX1-RV32-NEXT: lui a7, 16 6222; LMULMAX1-RV32-NEXT: or a1, a1, a7 6223; LMULMAX1-RV32-NEXT: addi a3, a1, -1 6224; LMULMAX1-RV32-NEXT: not a1, a1 6225; LMULMAX1-RV32-NEXT: and a1, a1, a3 6226; LMULMAX1-RV32-NEXT: srli a4, a1, 1 6227; LMULMAX1-RV32-NEXT: lui a3, 349525 6228; LMULMAX1-RV32-NEXT: addi t0, a3, 1365 6229; LMULMAX1-RV32-NEXT: and a4, a4, t0 6230; LMULMAX1-RV32-NEXT: sub a1, a1, a4 6231; LMULMAX1-RV32-NEXT: lui a4, 209715 6232; LMULMAX1-RV32-NEXT: addi a4, a4, 819 6233; LMULMAX1-RV32-NEXT: and a5, a1, a4 6234; LMULMAX1-RV32-NEXT: srli a1, a1, 2 6235; LMULMAX1-RV32-NEXT: and a1, a1, a4 6236; LMULMAX1-RV32-NEXT: add a1, a5, a1 6237; LMULMAX1-RV32-NEXT: srli a5, a1, 4 6238; LMULMAX1-RV32-NEXT: add a1, a1, a5 6239; LMULMAX1-RV32-NEXT: lui a5, 61681 6240; LMULMAX1-RV32-NEXT: addi a5, a5, -241 6241; LMULMAX1-RV32-NEXT: and a2, a1, a5 6242; LMULMAX1-RV32-NEXT: lui a1, 4112 6243; LMULMAX1-RV32-NEXT: addi a1, a1, 257 6244; LMULMAX1-RV32-NEXT: mul a2, a2, a1 6245; LMULMAX1-RV32-NEXT: srli a2, a2, 24 6246; LMULMAX1-RV32-NEXT: sh a2, 32(sp) 6247; LMULMAX1-RV32-NEXT: vsetivli zero, 1, e16, m1, ta, mu 6248; LMULMAX1-RV32-NEXT: vslidedown.vi v27, v26, 7 6249; LMULMAX1-RV32-NEXT: vmv.x.s a2, v27 6250; LMULMAX1-RV32-NEXT: or a2, a2, a7 6251; LMULMAX1-RV32-NEXT: addi a3, a2, -1 6252; LMULMAX1-RV32-NEXT: not a2, a2 6253; LMULMAX1-RV32-NEXT: and a2, a2, a3 6254; LMULMAX1-RV32-NEXT: srli a3, a2, 1 6255; LMULMAX1-RV32-NEXT: and a3, a3, t0 6256; LMULMAX1-RV32-NEXT: sub a2, a2, a3 6257; LMULMAX1-RV32-NEXT: and a3, a2, a4 6258; LMULMAX1-RV32-NEXT: srli a2, a2, 2 6259; LMULMAX1-RV32-NEXT: and a2, a2, a4 6260; LMULMAX1-RV32-NEXT: add a2, a3, a2 6261; LMULMAX1-RV32-NEXT: srli a3, a2, 4 6262; LMULMAX1-RV32-NEXT: add a2, a2, a3 6263; LMULMAX1-RV32-NEXT: and a2, a2, a5 6264; LMULMAX1-RV32-NEXT: mul a2, a2, a1 6265; LMULMAX1-RV32-NEXT: srli a2, a2, 24 6266; LMULMAX1-RV32-NEXT: sh a2, 46(sp) 6267; LMULMAX1-RV32-NEXT: vslidedown.vi v27, v26, 6 6268; LMULMAX1-RV32-NEXT: vmv.x.s a2, v27 6269; LMULMAX1-RV32-NEXT: or a2, a2, a7 6270; LMULMAX1-RV32-NEXT: addi a3, a2, -1 6271; LMULMAX1-RV32-NEXT: not a2, a2 6272; LMULMAX1-RV32-NEXT: and a2, a2, a3 6273; LMULMAX1-RV32-NEXT: srli a3, a2, 1 6274; LMULMAX1-RV32-NEXT: and a3, a3, t0 6275; LMULMAX1-RV32-NEXT: sub a2, a2, a3 6276; LMULMAX1-RV32-NEXT: and a3, a2, a4 6277; LMULMAX1-RV32-NEXT: srli a2, a2, 2 6278; LMULMAX1-RV32-NEXT: and a2, a2, a4 6279; LMULMAX1-RV32-NEXT: add a2, a3, a2 6280; LMULMAX1-RV32-NEXT: srli a3, a2, 4 6281; LMULMAX1-RV32-NEXT: add a2, a2, a3 6282; LMULMAX1-RV32-NEXT: and a2, a2, a5 6283; LMULMAX1-RV32-NEXT: mul a2, a2, a1 6284; LMULMAX1-RV32-NEXT: srli a2, a2, 24 6285; LMULMAX1-RV32-NEXT: sh a2, 44(sp) 6286; LMULMAX1-RV32-NEXT: vslidedown.vi v27, v26, 5 6287; LMULMAX1-RV32-NEXT: vmv.x.s a2, v27 6288; LMULMAX1-RV32-NEXT: or a2, a2, a7 6289; LMULMAX1-RV32-NEXT: addi a3, a2, -1 6290; LMULMAX1-RV32-NEXT: not a2, a2 6291; LMULMAX1-RV32-NEXT: and a2, a2, a3 6292; LMULMAX1-RV32-NEXT: srli a3, a2, 1 6293; LMULMAX1-RV32-NEXT: and a3, a3, t0 6294; LMULMAX1-RV32-NEXT: sub a2, a2, a3 6295; LMULMAX1-RV32-NEXT: and a3, a2, a4 6296; LMULMAX1-RV32-NEXT: srli a2, a2, 2 6297; LMULMAX1-RV32-NEXT: and a2, a2, a4 6298; LMULMAX1-RV32-NEXT: add a2, a3, a2 6299; LMULMAX1-RV32-NEXT: srli a3, a2, 4 6300; LMULMAX1-RV32-NEXT: add a2, a2, a3 6301; LMULMAX1-RV32-NEXT: and a2, a2, a5 6302; LMULMAX1-RV32-NEXT: mul a2, a2, a1 6303; LMULMAX1-RV32-NEXT: srli a2, a2, 24 6304; LMULMAX1-RV32-NEXT: sh a2, 42(sp) 6305; LMULMAX1-RV32-NEXT: vslidedown.vi v27, v26, 4 6306; LMULMAX1-RV32-NEXT: vmv.x.s a2, v27 6307; LMULMAX1-RV32-NEXT: or a2, a2, a7 6308; LMULMAX1-RV32-NEXT: addi a3, a2, -1 6309; LMULMAX1-RV32-NEXT: not a2, a2 6310; LMULMAX1-RV32-NEXT: and a2, a2, a3 6311; LMULMAX1-RV32-NEXT: srli a3, a2, 1 6312; LMULMAX1-RV32-NEXT: and a3, a3, t0 6313; LMULMAX1-RV32-NEXT: sub a2, a2, a3 6314; LMULMAX1-RV32-NEXT: and a3, a2, a4 6315; LMULMAX1-RV32-NEXT: srli a2, a2, 2 6316; LMULMAX1-RV32-NEXT: and a2, a2, a4 6317; LMULMAX1-RV32-NEXT: add a2, a3, a2 6318; LMULMAX1-RV32-NEXT: srli a3, a2, 4 6319; LMULMAX1-RV32-NEXT: add a2, a2, a3 6320; LMULMAX1-RV32-NEXT: and a2, a2, a5 6321; LMULMAX1-RV32-NEXT: mul a2, a2, a1 6322; LMULMAX1-RV32-NEXT: srli a2, a2, 24 6323; LMULMAX1-RV32-NEXT: sh a2, 40(sp) 6324; LMULMAX1-RV32-NEXT: vslidedown.vi v27, v26, 3 6325; LMULMAX1-RV32-NEXT: vmv.x.s a2, v27 6326; LMULMAX1-RV32-NEXT: or a2, a2, a7 6327; LMULMAX1-RV32-NEXT: addi a3, a2, -1 6328; LMULMAX1-RV32-NEXT: not a2, a2 6329; LMULMAX1-RV32-NEXT: and a2, a2, a3 6330; LMULMAX1-RV32-NEXT: srli a3, a2, 1 6331; LMULMAX1-RV32-NEXT: and a3, a3, t0 6332; LMULMAX1-RV32-NEXT: sub a2, a2, a3 6333; LMULMAX1-RV32-NEXT: and a3, a2, a4 6334; LMULMAX1-RV32-NEXT: srli a2, a2, 2 6335; LMULMAX1-RV32-NEXT: and a2, a2, a4 6336; LMULMAX1-RV32-NEXT: add a2, a3, a2 6337; LMULMAX1-RV32-NEXT: srli a3, a2, 4 6338; LMULMAX1-RV32-NEXT: add a2, a2, a3 6339; LMULMAX1-RV32-NEXT: and a2, a2, a5 6340; LMULMAX1-RV32-NEXT: mul a2, a2, a1 6341; LMULMAX1-RV32-NEXT: srli a2, a2, 24 6342; LMULMAX1-RV32-NEXT: sh a2, 38(sp) 6343; LMULMAX1-RV32-NEXT: vslidedown.vi v27, v26, 2 6344; LMULMAX1-RV32-NEXT: vmv.x.s a2, v27 6345; LMULMAX1-RV32-NEXT: or a2, a2, a7 6346; LMULMAX1-RV32-NEXT: addi a3, a2, -1 6347; LMULMAX1-RV32-NEXT: not a2, a2 6348; LMULMAX1-RV32-NEXT: and a2, a2, a3 6349; LMULMAX1-RV32-NEXT: srli a3, a2, 1 6350; LMULMAX1-RV32-NEXT: and a3, a3, t0 6351; LMULMAX1-RV32-NEXT: sub a2, a2, a3 6352; LMULMAX1-RV32-NEXT: and a3, a2, a4 6353; LMULMAX1-RV32-NEXT: srli a2, a2, 2 6354; LMULMAX1-RV32-NEXT: and a2, a2, a4 6355; LMULMAX1-RV32-NEXT: add a2, a3, a2 6356; LMULMAX1-RV32-NEXT: srli a3, a2, 4 6357; LMULMAX1-RV32-NEXT: add a2, a2, a3 6358; LMULMAX1-RV32-NEXT: and a2, a2, a5 6359; LMULMAX1-RV32-NEXT: mul a2, a2, a1 6360; LMULMAX1-RV32-NEXT: srli a2, a2, 24 6361; LMULMAX1-RV32-NEXT: sh a2, 36(sp) 6362; LMULMAX1-RV32-NEXT: vslidedown.vi v26, v26, 1 6363; LMULMAX1-RV32-NEXT: vmv.x.s a2, v26 6364; LMULMAX1-RV32-NEXT: or a2, a2, a7 6365; LMULMAX1-RV32-NEXT: addi a3, a2, -1 6366; LMULMAX1-RV32-NEXT: not a2, a2 6367; LMULMAX1-RV32-NEXT: and a2, a2, a3 6368; LMULMAX1-RV32-NEXT: srli a3, a2, 1 6369; LMULMAX1-RV32-NEXT: and a3, a3, t0 6370; LMULMAX1-RV32-NEXT: sub a2, a2, a3 6371; LMULMAX1-RV32-NEXT: and a3, a2, a4 6372; LMULMAX1-RV32-NEXT: srli a2, a2, 2 6373; LMULMAX1-RV32-NEXT: and a2, a2, a4 6374; LMULMAX1-RV32-NEXT: add a2, a3, a2 6375; LMULMAX1-RV32-NEXT: srli a3, a2, 4 6376; LMULMAX1-RV32-NEXT: add a2, a2, a3 6377; LMULMAX1-RV32-NEXT: and a2, a2, a5 6378; LMULMAX1-RV32-NEXT: mul a2, a2, a1 6379; LMULMAX1-RV32-NEXT: srli a2, a2, 24 6380; LMULMAX1-RV32-NEXT: sh a2, 34(sp) 6381; LMULMAX1-RV32-NEXT: vmv.x.s a2, v25 6382; LMULMAX1-RV32-NEXT: or a2, a2, a7 6383; LMULMAX1-RV32-NEXT: addi a3, a2, -1 6384; LMULMAX1-RV32-NEXT: not a2, a2 6385; LMULMAX1-RV32-NEXT: and a2, a2, a3 6386; LMULMAX1-RV32-NEXT: srli a3, a2, 1 6387; LMULMAX1-RV32-NEXT: and a3, a3, t0 6388; LMULMAX1-RV32-NEXT: sub a2, a2, a3 6389; LMULMAX1-RV32-NEXT: and a3, a2, a4 6390; LMULMAX1-RV32-NEXT: srli a2, a2, 2 6391; LMULMAX1-RV32-NEXT: and a2, a2, a4 6392; LMULMAX1-RV32-NEXT: add a2, a3, a2 6393; LMULMAX1-RV32-NEXT: srli a3, a2, 4 6394; LMULMAX1-RV32-NEXT: add a2, a2, a3 6395; LMULMAX1-RV32-NEXT: and a2, a2, a5 6396; LMULMAX1-RV32-NEXT: mul a2, a2, a1 6397; LMULMAX1-RV32-NEXT: srli a2, a2, 24 6398; LMULMAX1-RV32-NEXT: sh a2, 16(sp) 6399; LMULMAX1-RV32-NEXT: vslidedown.vi v26, v25, 7 6400; LMULMAX1-RV32-NEXT: vmv.x.s a2, v26 6401; LMULMAX1-RV32-NEXT: or a2, a2, a7 6402; LMULMAX1-RV32-NEXT: addi a3, a2, -1 6403; LMULMAX1-RV32-NEXT: not a2, a2 6404; LMULMAX1-RV32-NEXT: and a2, a2, a3 6405; LMULMAX1-RV32-NEXT: srli a3, a2, 1 6406; LMULMAX1-RV32-NEXT: and a3, a3, t0 6407; LMULMAX1-RV32-NEXT: sub a2, a2, a3 6408; LMULMAX1-RV32-NEXT: and a3, a2, a4 6409; LMULMAX1-RV32-NEXT: srli a2, a2, 2 6410; LMULMAX1-RV32-NEXT: and a2, a2, a4 6411; LMULMAX1-RV32-NEXT: add a2, a3, a2 6412; LMULMAX1-RV32-NEXT: srli a3, a2, 4 6413; LMULMAX1-RV32-NEXT: add a2, a2, a3 6414; LMULMAX1-RV32-NEXT: and a2, a2, a5 6415; LMULMAX1-RV32-NEXT: mul a2, a2, a1 6416; LMULMAX1-RV32-NEXT: srli a2, a2, 24 6417; LMULMAX1-RV32-NEXT: sh a2, 30(sp) 6418; LMULMAX1-RV32-NEXT: vslidedown.vi v26, v25, 6 6419; LMULMAX1-RV32-NEXT: vmv.x.s a2, v26 6420; LMULMAX1-RV32-NEXT: or a2, a2, a7 6421; LMULMAX1-RV32-NEXT: addi a3, a2, -1 6422; LMULMAX1-RV32-NEXT: not a2, a2 6423; LMULMAX1-RV32-NEXT: and a2, a2, a3 6424; LMULMAX1-RV32-NEXT: srli a3, a2, 1 6425; LMULMAX1-RV32-NEXT: and a3, a3, t0 6426; LMULMAX1-RV32-NEXT: sub a2, a2, a3 6427; LMULMAX1-RV32-NEXT: and a3, a2, a4 6428; LMULMAX1-RV32-NEXT: srli a2, a2, 2 6429; LMULMAX1-RV32-NEXT: and a2, a2, a4 6430; LMULMAX1-RV32-NEXT: add a2, a3, a2 6431; LMULMAX1-RV32-NEXT: srli a3, a2, 4 6432; LMULMAX1-RV32-NEXT: add a2, a2, a3 6433; LMULMAX1-RV32-NEXT: and a2, a2, a5 6434; LMULMAX1-RV32-NEXT: mul a2, a2, a1 6435; LMULMAX1-RV32-NEXT: srli a2, a2, 24 6436; LMULMAX1-RV32-NEXT: sh a2, 28(sp) 6437; LMULMAX1-RV32-NEXT: vslidedown.vi v26, v25, 5 6438; LMULMAX1-RV32-NEXT: vmv.x.s a2, v26 6439; LMULMAX1-RV32-NEXT: or a2, a2, a7 6440; LMULMAX1-RV32-NEXT: addi a3, a2, -1 6441; LMULMAX1-RV32-NEXT: not a2, a2 6442; LMULMAX1-RV32-NEXT: and a2, a2, a3 6443; LMULMAX1-RV32-NEXT: srli a3, a2, 1 6444; LMULMAX1-RV32-NEXT: and a3, a3, t0 6445; LMULMAX1-RV32-NEXT: sub a2, a2, a3 6446; LMULMAX1-RV32-NEXT: and a3, a2, a4 6447; LMULMAX1-RV32-NEXT: srli a2, a2, 2 6448; LMULMAX1-RV32-NEXT: and a2, a2, a4 6449; LMULMAX1-RV32-NEXT: add a2, a3, a2 6450; LMULMAX1-RV32-NEXT: srli a3, a2, 4 6451; LMULMAX1-RV32-NEXT: add a2, a2, a3 6452; LMULMAX1-RV32-NEXT: and a2, a2, a5 6453; LMULMAX1-RV32-NEXT: mul a2, a2, a1 6454; LMULMAX1-RV32-NEXT: srli a2, a2, 24 6455; LMULMAX1-RV32-NEXT: sh a2, 26(sp) 6456; LMULMAX1-RV32-NEXT: vslidedown.vi v26, v25, 4 6457; LMULMAX1-RV32-NEXT: vmv.x.s a2, v26 6458; LMULMAX1-RV32-NEXT: or a2, a2, a7 6459; LMULMAX1-RV32-NEXT: addi a3, a2, -1 6460; LMULMAX1-RV32-NEXT: not a2, a2 6461; LMULMAX1-RV32-NEXT: and a2, a2, a3 6462; LMULMAX1-RV32-NEXT: srli a3, a2, 1 6463; LMULMAX1-RV32-NEXT: and a3, a3, t0 6464; LMULMAX1-RV32-NEXT: sub a2, a2, a3 6465; LMULMAX1-RV32-NEXT: and a3, a2, a4 6466; LMULMAX1-RV32-NEXT: srli a2, a2, 2 6467; LMULMAX1-RV32-NEXT: and a2, a2, a4 6468; LMULMAX1-RV32-NEXT: add a2, a3, a2 6469; LMULMAX1-RV32-NEXT: srli a3, a2, 4 6470; LMULMAX1-RV32-NEXT: add a2, a2, a3 6471; LMULMAX1-RV32-NEXT: and a2, a2, a5 6472; LMULMAX1-RV32-NEXT: mul a2, a2, a1 6473; LMULMAX1-RV32-NEXT: srli a2, a2, 24 6474; LMULMAX1-RV32-NEXT: sh a2, 24(sp) 6475; LMULMAX1-RV32-NEXT: vslidedown.vi v26, v25, 3 6476; LMULMAX1-RV32-NEXT: vmv.x.s a2, v26 6477; LMULMAX1-RV32-NEXT: or a2, a2, a7 6478; LMULMAX1-RV32-NEXT: addi a3, a2, -1 6479; LMULMAX1-RV32-NEXT: not a2, a2 6480; LMULMAX1-RV32-NEXT: and a2, a2, a3 6481; LMULMAX1-RV32-NEXT: srli a3, a2, 1 6482; LMULMAX1-RV32-NEXT: and a3, a3, t0 6483; LMULMAX1-RV32-NEXT: sub a2, a2, a3 6484; LMULMAX1-RV32-NEXT: and a3, a2, a4 6485; LMULMAX1-RV32-NEXT: srli a2, a2, 2 6486; LMULMAX1-RV32-NEXT: and a2, a2, a4 6487; LMULMAX1-RV32-NEXT: add a2, a3, a2 6488; LMULMAX1-RV32-NEXT: srli a3, a2, 4 6489; LMULMAX1-RV32-NEXT: add a2, a2, a3 6490; LMULMAX1-RV32-NEXT: and a2, a2, a5 6491; LMULMAX1-RV32-NEXT: mul a2, a2, a1 6492; LMULMAX1-RV32-NEXT: srli a2, a2, 24 6493; LMULMAX1-RV32-NEXT: sh a2, 22(sp) 6494; LMULMAX1-RV32-NEXT: vslidedown.vi v26, v25, 2 6495; LMULMAX1-RV32-NEXT: vmv.x.s a2, v26 6496; LMULMAX1-RV32-NEXT: or a2, a2, a7 6497; LMULMAX1-RV32-NEXT: addi a3, a2, -1 6498; LMULMAX1-RV32-NEXT: not a2, a2 6499; LMULMAX1-RV32-NEXT: and a2, a2, a3 6500; LMULMAX1-RV32-NEXT: srli a3, a2, 1 6501; LMULMAX1-RV32-NEXT: and a3, a3, t0 6502; LMULMAX1-RV32-NEXT: sub a2, a2, a3 6503; LMULMAX1-RV32-NEXT: and a3, a2, a4 6504; LMULMAX1-RV32-NEXT: srli a2, a2, 2 6505; LMULMAX1-RV32-NEXT: and a2, a2, a4 6506; LMULMAX1-RV32-NEXT: add a2, a3, a2 6507; LMULMAX1-RV32-NEXT: srli a3, a2, 4 6508; LMULMAX1-RV32-NEXT: add a2, a2, a3 6509; LMULMAX1-RV32-NEXT: and a2, a2, a5 6510; LMULMAX1-RV32-NEXT: mul a2, a2, a1 6511; LMULMAX1-RV32-NEXT: srli a2, a2, 24 6512; LMULMAX1-RV32-NEXT: sh a2, 20(sp) 6513; LMULMAX1-RV32-NEXT: vslidedown.vi v25, v25, 1 6514; LMULMAX1-RV32-NEXT: vmv.x.s a2, v25 6515; LMULMAX1-RV32-NEXT: or a2, a2, a7 6516; LMULMAX1-RV32-NEXT: addi a3, a2, -1 6517; LMULMAX1-RV32-NEXT: not a2, a2 6518; LMULMAX1-RV32-NEXT: and a2, a2, a3 6519; LMULMAX1-RV32-NEXT: srli a3, a2, 1 6520; LMULMAX1-RV32-NEXT: and a3, a3, t0 6521; LMULMAX1-RV32-NEXT: sub a2, a2, a3 6522; LMULMAX1-RV32-NEXT: and a3, a2, a4 6523; LMULMAX1-RV32-NEXT: srli a2, a2, 2 6524; LMULMAX1-RV32-NEXT: and a2, a2, a4 6525; LMULMAX1-RV32-NEXT: add a2, a3, a2 6526; LMULMAX1-RV32-NEXT: srli a3, a2, 4 6527; LMULMAX1-RV32-NEXT: add a2, a2, a3 6528; LMULMAX1-RV32-NEXT: and a2, a2, a5 6529; LMULMAX1-RV32-NEXT: mul a1, a2, a1 6530; LMULMAX1-RV32-NEXT: srli a1, a1, 24 6531; LMULMAX1-RV32-NEXT: sh a1, 18(sp) 6532; LMULMAX1-RV32-NEXT: vsetivli zero, 8, e16, m1, ta, mu 6533; LMULMAX1-RV32-NEXT: addi a1, sp, 16 6534; LMULMAX1-RV32-NEXT: vle16.v v25, (a1) 6535; LMULMAX1-RV32-NEXT: addi a1, sp, 32 6536; LMULMAX1-RV32-NEXT: vle16.v v26, (a1) 6537; LMULMAX1-RV32-NEXT: vse16.v v25, (a0) 6538; LMULMAX1-RV32-NEXT: vse16.v v26, (a6) 6539; LMULMAX1-RV32-NEXT: addi sp, sp, 48 6540; LMULMAX1-RV32-NEXT: ret 6541; 6542; LMULMAX1-RV64-LABEL: cttz_v16i16: 6543; LMULMAX1-RV64: # %bb.0: 6544; LMULMAX1-RV64-NEXT: addi sp, sp, -48 6545; LMULMAX1-RV64-NEXT: .cfi_def_cfa_offset 48 6546; LMULMAX1-RV64-NEXT: vsetivli zero, 8, e16, m1, ta, mu 6547; LMULMAX1-RV64-NEXT: addi a6, a0, 16 6548; LMULMAX1-RV64-NEXT: vle16.v v26, (a6) 6549; LMULMAX1-RV64-NEXT: vle16.v v25, (a0) 6550; LMULMAX1-RV64-NEXT: vmv.x.s a1, v26 6551; LMULMAX1-RV64-NEXT: lui a7, 16 6552; LMULMAX1-RV64-NEXT: or a1, a1, a7 6553; LMULMAX1-RV64-NEXT: addi a3, a1, -1 6554; LMULMAX1-RV64-NEXT: not a1, a1 6555; LMULMAX1-RV64-NEXT: and a1, a1, a3 6556; LMULMAX1-RV64-NEXT: srli a4, a1, 1 6557; LMULMAX1-RV64-NEXT: lui a3, 21845 6558; LMULMAX1-RV64-NEXT: addiw a3, a3, 1365 6559; LMULMAX1-RV64-NEXT: slli a3, a3, 12 6560; LMULMAX1-RV64-NEXT: addi a3, a3, 1365 6561; LMULMAX1-RV64-NEXT: slli a3, a3, 12 6562; LMULMAX1-RV64-NEXT: addi a3, a3, 1365 6563; LMULMAX1-RV64-NEXT: slli a3, a3, 12 6564; LMULMAX1-RV64-NEXT: addi t0, a3, 1365 6565; LMULMAX1-RV64-NEXT: and a4, a4, t0 6566; LMULMAX1-RV64-NEXT: sub a1, a1, a4 6567; LMULMAX1-RV64-NEXT: lui a4, 13107 6568; LMULMAX1-RV64-NEXT: addiw a4, a4, 819 6569; LMULMAX1-RV64-NEXT: slli a4, a4, 12 6570; LMULMAX1-RV64-NEXT: addi a4, a4, 819 6571; LMULMAX1-RV64-NEXT: slli a4, a4, 12 6572; LMULMAX1-RV64-NEXT: addi a4, a4, 819 6573; LMULMAX1-RV64-NEXT: slli a4, a4, 12 6574; LMULMAX1-RV64-NEXT: addi a4, a4, 819 6575; LMULMAX1-RV64-NEXT: and a5, a1, a4 6576; LMULMAX1-RV64-NEXT: srli a1, a1, 2 6577; LMULMAX1-RV64-NEXT: and a1, a1, a4 6578; LMULMAX1-RV64-NEXT: add a1, a5, a1 6579; LMULMAX1-RV64-NEXT: srli a5, a1, 4 6580; LMULMAX1-RV64-NEXT: add a1, a1, a5 6581; LMULMAX1-RV64-NEXT: lui a5, 3855 6582; LMULMAX1-RV64-NEXT: addiw a5, a5, 241 6583; LMULMAX1-RV64-NEXT: slli a5, a5, 12 6584; LMULMAX1-RV64-NEXT: addi a5, a5, -241 6585; LMULMAX1-RV64-NEXT: slli a5, a5, 12 6586; LMULMAX1-RV64-NEXT: addi a5, a5, 241 6587; LMULMAX1-RV64-NEXT: slli a5, a5, 12 6588; LMULMAX1-RV64-NEXT: addi a5, a5, -241 6589; LMULMAX1-RV64-NEXT: and a2, a1, a5 6590; LMULMAX1-RV64-NEXT: lui a1, 4112 6591; LMULMAX1-RV64-NEXT: addiw a1, a1, 257 6592; LMULMAX1-RV64-NEXT: slli a1, a1, 16 6593; LMULMAX1-RV64-NEXT: addi a1, a1, 257 6594; LMULMAX1-RV64-NEXT: slli a1, a1, 16 6595; LMULMAX1-RV64-NEXT: addi a1, a1, 257 6596; LMULMAX1-RV64-NEXT: mul a2, a2, a1 6597; LMULMAX1-RV64-NEXT: srli a2, a2, 56 6598; LMULMAX1-RV64-NEXT: sh a2, 32(sp) 6599; LMULMAX1-RV64-NEXT: vsetivli zero, 1, e16, m1, ta, mu 6600; LMULMAX1-RV64-NEXT: vslidedown.vi v27, v26, 7 6601; LMULMAX1-RV64-NEXT: vmv.x.s a2, v27 6602; LMULMAX1-RV64-NEXT: or a2, a2, a7 6603; LMULMAX1-RV64-NEXT: addi a3, a2, -1 6604; LMULMAX1-RV64-NEXT: not a2, a2 6605; LMULMAX1-RV64-NEXT: and a2, a2, a3 6606; LMULMAX1-RV64-NEXT: srli a3, a2, 1 6607; LMULMAX1-RV64-NEXT: and a3, a3, t0 6608; LMULMAX1-RV64-NEXT: sub a2, a2, a3 6609; LMULMAX1-RV64-NEXT: and a3, a2, a4 6610; LMULMAX1-RV64-NEXT: srli a2, a2, 2 6611; LMULMAX1-RV64-NEXT: and a2, a2, a4 6612; LMULMAX1-RV64-NEXT: add a2, a3, a2 6613; LMULMAX1-RV64-NEXT: srli a3, a2, 4 6614; LMULMAX1-RV64-NEXT: add a2, a2, a3 6615; LMULMAX1-RV64-NEXT: and a2, a2, a5 6616; LMULMAX1-RV64-NEXT: mul a2, a2, a1 6617; LMULMAX1-RV64-NEXT: srli a2, a2, 56 6618; LMULMAX1-RV64-NEXT: sh a2, 46(sp) 6619; LMULMAX1-RV64-NEXT: vslidedown.vi v27, v26, 6 6620; LMULMAX1-RV64-NEXT: vmv.x.s a2, v27 6621; LMULMAX1-RV64-NEXT: or a2, a2, a7 6622; LMULMAX1-RV64-NEXT: addi a3, a2, -1 6623; LMULMAX1-RV64-NEXT: not a2, a2 6624; LMULMAX1-RV64-NEXT: and a2, a2, a3 6625; LMULMAX1-RV64-NEXT: srli a3, a2, 1 6626; LMULMAX1-RV64-NEXT: and a3, a3, t0 6627; LMULMAX1-RV64-NEXT: sub a2, a2, a3 6628; LMULMAX1-RV64-NEXT: and a3, a2, a4 6629; LMULMAX1-RV64-NEXT: srli a2, a2, 2 6630; LMULMAX1-RV64-NEXT: and a2, a2, a4 6631; LMULMAX1-RV64-NEXT: add a2, a3, a2 6632; LMULMAX1-RV64-NEXT: srli a3, a2, 4 6633; LMULMAX1-RV64-NEXT: add a2, a2, a3 6634; LMULMAX1-RV64-NEXT: and a2, a2, a5 6635; LMULMAX1-RV64-NEXT: mul a2, a2, a1 6636; LMULMAX1-RV64-NEXT: srli a2, a2, 56 6637; LMULMAX1-RV64-NEXT: sh a2, 44(sp) 6638; LMULMAX1-RV64-NEXT: vslidedown.vi v27, v26, 5 6639; LMULMAX1-RV64-NEXT: vmv.x.s a2, v27 6640; LMULMAX1-RV64-NEXT: or a2, a2, a7 6641; LMULMAX1-RV64-NEXT: addi a3, a2, -1 6642; LMULMAX1-RV64-NEXT: not a2, a2 6643; LMULMAX1-RV64-NEXT: and a2, a2, a3 6644; LMULMAX1-RV64-NEXT: srli a3, a2, 1 6645; LMULMAX1-RV64-NEXT: and a3, a3, t0 6646; LMULMAX1-RV64-NEXT: sub a2, a2, a3 6647; LMULMAX1-RV64-NEXT: and a3, a2, a4 6648; LMULMAX1-RV64-NEXT: srli a2, a2, 2 6649; LMULMAX1-RV64-NEXT: and a2, a2, a4 6650; LMULMAX1-RV64-NEXT: add a2, a3, a2 6651; LMULMAX1-RV64-NEXT: srli a3, a2, 4 6652; LMULMAX1-RV64-NEXT: add a2, a2, a3 6653; LMULMAX1-RV64-NEXT: and a2, a2, a5 6654; LMULMAX1-RV64-NEXT: mul a2, a2, a1 6655; LMULMAX1-RV64-NEXT: srli a2, a2, 56 6656; LMULMAX1-RV64-NEXT: sh a2, 42(sp) 6657; LMULMAX1-RV64-NEXT: vslidedown.vi v27, v26, 4 6658; LMULMAX1-RV64-NEXT: vmv.x.s a2, v27 6659; LMULMAX1-RV64-NEXT: or a2, a2, a7 6660; LMULMAX1-RV64-NEXT: addi a3, a2, -1 6661; LMULMAX1-RV64-NEXT: not a2, a2 6662; LMULMAX1-RV64-NEXT: and a2, a2, a3 6663; LMULMAX1-RV64-NEXT: srli a3, a2, 1 6664; LMULMAX1-RV64-NEXT: and a3, a3, t0 6665; LMULMAX1-RV64-NEXT: sub a2, a2, a3 6666; LMULMAX1-RV64-NEXT: and a3, a2, a4 6667; LMULMAX1-RV64-NEXT: srli a2, a2, 2 6668; LMULMAX1-RV64-NEXT: and a2, a2, a4 6669; LMULMAX1-RV64-NEXT: add a2, a3, a2 6670; LMULMAX1-RV64-NEXT: srli a3, a2, 4 6671; LMULMAX1-RV64-NEXT: add a2, a2, a3 6672; LMULMAX1-RV64-NEXT: and a2, a2, a5 6673; LMULMAX1-RV64-NEXT: mul a2, a2, a1 6674; LMULMAX1-RV64-NEXT: srli a2, a2, 56 6675; LMULMAX1-RV64-NEXT: sh a2, 40(sp) 6676; LMULMAX1-RV64-NEXT: vslidedown.vi v27, v26, 3 6677; LMULMAX1-RV64-NEXT: vmv.x.s a2, v27 6678; LMULMAX1-RV64-NEXT: or a2, a2, a7 6679; LMULMAX1-RV64-NEXT: addi a3, a2, -1 6680; LMULMAX1-RV64-NEXT: not a2, a2 6681; LMULMAX1-RV64-NEXT: and a2, a2, a3 6682; LMULMAX1-RV64-NEXT: srli a3, a2, 1 6683; LMULMAX1-RV64-NEXT: and a3, a3, t0 6684; LMULMAX1-RV64-NEXT: sub a2, a2, a3 6685; LMULMAX1-RV64-NEXT: and a3, a2, a4 6686; LMULMAX1-RV64-NEXT: srli a2, a2, 2 6687; LMULMAX1-RV64-NEXT: and a2, a2, a4 6688; LMULMAX1-RV64-NEXT: add a2, a3, a2 6689; LMULMAX1-RV64-NEXT: srli a3, a2, 4 6690; LMULMAX1-RV64-NEXT: add a2, a2, a3 6691; LMULMAX1-RV64-NEXT: and a2, a2, a5 6692; LMULMAX1-RV64-NEXT: mul a2, a2, a1 6693; LMULMAX1-RV64-NEXT: srli a2, a2, 56 6694; LMULMAX1-RV64-NEXT: sh a2, 38(sp) 6695; LMULMAX1-RV64-NEXT: vslidedown.vi v27, v26, 2 6696; LMULMAX1-RV64-NEXT: vmv.x.s a2, v27 6697; LMULMAX1-RV64-NEXT: or a2, a2, a7 6698; LMULMAX1-RV64-NEXT: addi a3, a2, -1 6699; LMULMAX1-RV64-NEXT: not a2, a2 6700; LMULMAX1-RV64-NEXT: and a2, a2, a3 6701; LMULMAX1-RV64-NEXT: srli a3, a2, 1 6702; LMULMAX1-RV64-NEXT: and a3, a3, t0 6703; LMULMAX1-RV64-NEXT: sub a2, a2, a3 6704; LMULMAX1-RV64-NEXT: and a3, a2, a4 6705; LMULMAX1-RV64-NEXT: srli a2, a2, 2 6706; LMULMAX1-RV64-NEXT: and a2, a2, a4 6707; LMULMAX1-RV64-NEXT: add a2, a3, a2 6708; LMULMAX1-RV64-NEXT: srli a3, a2, 4 6709; LMULMAX1-RV64-NEXT: add a2, a2, a3 6710; LMULMAX1-RV64-NEXT: and a2, a2, a5 6711; LMULMAX1-RV64-NEXT: mul a2, a2, a1 6712; LMULMAX1-RV64-NEXT: srli a2, a2, 56 6713; LMULMAX1-RV64-NEXT: sh a2, 36(sp) 6714; LMULMAX1-RV64-NEXT: vslidedown.vi v26, v26, 1 6715; LMULMAX1-RV64-NEXT: vmv.x.s a2, v26 6716; LMULMAX1-RV64-NEXT: or a2, a2, a7 6717; LMULMAX1-RV64-NEXT: addi a3, a2, -1 6718; LMULMAX1-RV64-NEXT: not a2, a2 6719; LMULMAX1-RV64-NEXT: and a2, a2, a3 6720; LMULMAX1-RV64-NEXT: srli a3, a2, 1 6721; LMULMAX1-RV64-NEXT: and a3, a3, t0 6722; LMULMAX1-RV64-NEXT: sub a2, a2, a3 6723; LMULMAX1-RV64-NEXT: and a3, a2, a4 6724; LMULMAX1-RV64-NEXT: srli a2, a2, 2 6725; LMULMAX1-RV64-NEXT: and a2, a2, a4 6726; LMULMAX1-RV64-NEXT: add a2, a3, a2 6727; LMULMAX1-RV64-NEXT: srli a3, a2, 4 6728; LMULMAX1-RV64-NEXT: add a2, a2, a3 6729; LMULMAX1-RV64-NEXT: and a2, a2, a5 6730; LMULMAX1-RV64-NEXT: mul a2, a2, a1 6731; LMULMAX1-RV64-NEXT: srli a2, a2, 56 6732; LMULMAX1-RV64-NEXT: sh a2, 34(sp) 6733; LMULMAX1-RV64-NEXT: vslidedown.vi v26, v25, 7 6734; LMULMAX1-RV64-NEXT: vmv.x.s a2, v26 6735; LMULMAX1-RV64-NEXT: or a2, a2, a7 6736; LMULMAX1-RV64-NEXT: addi a3, a2, -1 6737; LMULMAX1-RV64-NEXT: not a2, a2 6738; LMULMAX1-RV64-NEXT: and a2, a2, a3 6739; LMULMAX1-RV64-NEXT: srli a3, a2, 1 6740; LMULMAX1-RV64-NEXT: and a3, a3, t0 6741; LMULMAX1-RV64-NEXT: sub a2, a2, a3 6742; LMULMAX1-RV64-NEXT: and a3, a2, a4 6743; LMULMAX1-RV64-NEXT: srli a2, a2, 2 6744; LMULMAX1-RV64-NEXT: and a2, a2, a4 6745; LMULMAX1-RV64-NEXT: add a2, a3, a2 6746; LMULMAX1-RV64-NEXT: srli a3, a2, 4 6747; LMULMAX1-RV64-NEXT: add a2, a2, a3 6748; LMULMAX1-RV64-NEXT: and a2, a2, a5 6749; LMULMAX1-RV64-NEXT: mul a2, a2, a1 6750; LMULMAX1-RV64-NEXT: srli a2, a2, 56 6751; LMULMAX1-RV64-NEXT: sh a2, 30(sp) 6752; LMULMAX1-RV64-NEXT: vslidedown.vi v26, v25, 6 6753; LMULMAX1-RV64-NEXT: vmv.x.s a2, v26 6754; LMULMAX1-RV64-NEXT: or a2, a2, a7 6755; LMULMAX1-RV64-NEXT: addi a3, a2, -1 6756; LMULMAX1-RV64-NEXT: not a2, a2 6757; LMULMAX1-RV64-NEXT: and a2, a2, a3 6758; LMULMAX1-RV64-NEXT: srli a3, a2, 1 6759; LMULMAX1-RV64-NEXT: and a3, a3, t0 6760; LMULMAX1-RV64-NEXT: sub a2, a2, a3 6761; LMULMAX1-RV64-NEXT: and a3, a2, a4 6762; LMULMAX1-RV64-NEXT: srli a2, a2, 2 6763; LMULMAX1-RV64-NEXT: and a2, a2, a4 6764; LMULMAX1-RV64-NEXT: add a2, a3, a2 6765; LMULMAX1-RV64-NEXT: srli a3, a2, 4 6766; LMULMAX1-RV64-NEXT: add a2, a2, a3 6767; LMULMAX1-RV64-NEXT: and a2, a2, a5 6768; LMULMAX1-RV64-NEXT: mul a2, a2, a1 6769; LMULMAX1-RV64-NEXT: srli a2, a2, 56 6770; LMULMAX1-RV64-NEXT: sh a2, 28(sp) 6771; LMULMAX1-RV64-NEXT: vslidedown.vi v26, v25, 5 6772; LMULMAX1-RV64-NEXT: vmv.x.s a2, v26 6773; LMULMAX1-RV64-NEXT: or a2, a2, a7 6774; LMULMAX1-RV64-NEXT: addi a3, a2, -1 6775; LMULMAX1-RV64-NEXT: not a2, a2 6776; LMULMAX1-RV64-NEXT: and a2, a2, a3 6777; LMULMAX1-RV64-NEXT: srli a3, a2, 1 6778; LMULMAX1-RV64-NEXT: and a3, a3, t0 6779; LMULMAX1-RV64-NEXT: sub a2, a2, a3 6780; LMULMAX1-RV64-NEXT: and a3, a2, a4 6781; LMULMAX1-RV64-NEXT: srli a2, a2, 2 6782; LMULMAX1-RV64-NEXT: and a2, a2, a4 6783; LMULMAX1-RV64-NEXT: add a2, a3, a2 6784; LMULMAX1-RV64-NEXT: srli a3, a2, 4 6785; LMULMAX1-RV64-NEXT: add a2, a2, a3 6786; LMULMAX1-RV64-NEXT: and a2, a2, a5 6787; LMULMAX1-RV64-NEXT: mul a2, a2, a1 6788; LMULMAX1-RV64-NEXT: srli a2, a2, 56 6789; LMULMAX1-RV64-NEXT: sh a2, 26(sp) 6790; LMULMAX1-RV64-NEXT: vslidedown.vi v26, v25, 4 6791; LMULMAX1-RV64-NEXT: vmv.x.s a2, v26 6792; LMULMAX1-RV64-NEXT: or a2, a2, a7 6793; LMULMAX1-RV64-NEXT: addi a3, a2, -1 6794; LMULMAX1-RV64-NEXT: not a2, a2 6795; LMULMAX1-RV64-NEXT: and a2, a2, a3 6796; LMULMAX1-RV64-NEXT: srli a3, a2, 1 6797; LMULMAX1-RV64-NEXT: and a3, a3, t0 6798; LMULMAX1-RV64-NEXT: sub a2, a2, a3 6799; LMULMAX1-RV64-NEXT: and a3, a2, a4 6800; LMULMAX1-RV64-NEXT: srli a2, a2, 2 6801; LMULMAX1-RV64-NEXT: and a2, a2, a4 6802; LMULMAX1-RV64-NEXT: add a2, a3, a2 6803; LMULMAX1-RV64-NEXT: srli a3, a2, 4 6804; LMULMAX1-RV64-NEXT: add a2, a2, a3 6805; LMULMAX1-RV64-NEXT: and a2, a2, a5 6806; LMULMAX1-RV64-NEXT: mul a2, a2, a1 6807; LMULMAX1-RV64-NEXT: srli a2, a2, 56 6808; LMULMAX1-RV64-NEXT: sh a2, 24(sp) 6809; LMULMAX1-RV64-NEXT: vslidedown.vi v26, v25, 3 6810; LMULMAX1-RV64-NEXT: vmv.x.s a2, v26 6811; LMULMAX1-RV64-NEXT: or a2, a2, a7 6812; LMULMAX1-RV64-NEXT: addi a3, a2, -1 6813; LMULMAX1-RV64-NEXT: not a2, a2 6814; LMULMAX1-RV64-NEXT: and a2, a2, a3 6815; LMULMAX1-RV64-NEXT: srli a3, a2, 1 6816; LMULMAX1-RV64-NEXT: and a3, a3, t0 6817; LMULMAX1-RV64-NEXT: sub a2, a2, a3 6818; LMULMAX1-RV64-NEXT: and a3, a2, a4 6819; LMULMAX1-RV64-NEXT: srli a2, a2, 2 6820; LMULMAX1-RV64-NEXT: and a2, a2, a4 6821; LMULMAX1-RV64-NEXT: add a2, a3, a2 6822; LMULMAX1-RV64-NEXT: srli a3, a2, 4 6823; LMULMAX1-RV64-NEXT: add a2, a2, a3 6824; LMULMAX1-RV64-NEXT: and a2, a2, a5 6825; LMULMAX1-RV64-NEXT: mul a2, a2, a1 6826; LMULMAX1-RV64-NEXT: srli a2, a2, 56 6827; LMULMAX1-RV64-NEXT: sh a2, 22(sp) 6828; LMULMAX1-RV64-NEXT: vslidedown.vi v26, v25, 2 6829; LMULMAX1-RV64-NEXT: vmv.x.s a2, v26 6830; LMULMAX1-RV64-NEXT: or a2, a2, a7 6831; LMULMAX1-RV64-NEXT: addi a3, a2, -1 6832; LMULMAX1-RV64-NEXT: not a2, a2 6833; LMULMAX1-RV64-NEXT: and a2, a2, a3 6834; LMULMAX1-RV64-NEXT: srli a3, a2, 1 6835; LMULMAX1-RV64-NEXT: and a3, a3, t0 6836; LMULMAX1-RV64-NEXT: sub a2, a2, a3 6837; LMULMAX1-RV64-NEXT: and a3, a2, a4 6838; LMULMAX1-RV64-NEXT: srli a2, a2, 2 6839; LMULMAX1-RV64-NEXT: and a2, a2, a4 6840; LMULMAX1-RV64-NEXT: add a2, a3, a2 6841; LMULMAX1-RV64-NEXT: srli a3, a2, 4 6842; LMULMAX1-RV64-NEXT: add a2, a2, a3 6843; LMULMAX1-RV64-NEXT: and a2, a2, a5 6844; LMULMAX1-RV64-NEXT: mul a2, a2, a1 6845; LMULMAX1-RV64-NEXT: srli a2, a2, 56 6846; LMULMAX1-RV64-NEXT: sh a2, 20(sp) 6847; LMULMAX1-RV64-NEXT: vslidedown.vi v26, v25, 1 6848; LMULMAX1-RV64-NEXT: vmv.x.s a2, v26 6849; LMULMAX1-RV64-NEXT: or a2, a2, a7 6850; LMULMAX1-RV64-NEXT: addi a3, a2, -1 6851; LMULMAX1-RV64-NEXT: not a2, a2 6852; LMULMAX1-RV64-NEXT: and a2, a2, a3 6853; LMULMAX1-RV64-NEXT: srli a3, a2, 1 6854; LMULMAX1-RV64-NEXT: and a3, a3, t0 6855; LMULMAX1-RV64-NEXT: sub a2, a2, a3 6856; LMULMAX1-RV64-NEXT: and a3, a2, a4 6857; LMULMAX1-RV64-NEXT: srli a2, a2, 2 6858; LMULMAX1-RV64-NEXT: and a2, a2, a4 6859; LMULMAX1-RV64-NEXT: add a2, a3, a2 6860; LMULMAX1-RV64-NEXT: srli a3, a2, 4 6861; LMULMAX1-RV64-NEXT: add a2, a2, a3 6862; LMULMAX1-RV64-NEXT: and a2, a2, a5 6863; LMULMAX1-RV64-NEXT: mul a2, a2, a1 6864; LMULMAX1-RV64-NEXT: srli a2, a2, 56 6865; LMULMAX1-RV64-NEXT: sh a2, 18(sp) 6866; LMULMAX1-RV64-NEXT: vmv.x.s a2, v25 6867; LMULMAX1-RV64-NEXT: or a2, a2, a7 6868; LMULMAX1-RV64-NEXT: addi a3, a2, -1 6869; LMULMAX1-RV64-NEXT: not a2, a2 6870; LMULMAX1-RV64-NEXT: and a2, a2, a3 6871; LMULMAX1-RV64-NEXT: srli a3, a2, 1 6872; LMULMAX1-RV64-NEXT: and a3, a3, t0 6873; LMULMAX1-RV64-NEXT: sub a2, a2, a3 6874; LMULMAX1-RV64-NEXT: and a3, a2, a4 6875; LMULMAX1-RV64-NEXT: srli a2, a2, 2 6876; LMULMAX1-RV64-NEXT: and a2, a2, a4 6877; LMULMAX1-RV64-NEXT: add a2, a3, a2 6878; LMULMAX1-RV64-NEXT: srli a3, a2, 4 6879; LMULMAX1-RV64-NEXT: add a2, a2, a3 6880; LMULMAX1-RV64-NEXT: and a2, a2, a5 6881; LMULMAX1-RV64-NEXT: mul a1, a2, a1 6882; LMULMAX1-RV64-NEXT: srli a1, a1, 56 6883; LMULMAX1-RV64-NEXT: sh a1, 16(sp) 6884; LMULMAX1-RV64-NEXT: vsetivli zero, 8, e16, m1, ta, mu 6885; LMULMAX1-RV64-NEXT: addi a1, sp, 16 6886; LMULMAX1-RV64-NEXT: vle16.v v25, (a1) 6887; LMULMAX1-RV64-NEXT: addi a1, sp, 32 6888; LMULMAX1-RV64-NEXT: vle16.v v26, (a1) 6889; LMULMAX1-RV64-NEXT: vse16.v v25, (a0) 6890; LMULMAX1-RV64-NEXT: vse16.v v26, (a6) 6891; LMULMAX1-RV64-NEXT: addi sp, sp, 48 6892; LMULMAX1-RV64-NEXT: ret 6893 %a = load <16 x i16>, <16 x i16>* %x 6894 %b = load <16 x i16>, <16 x i16>* %y 6895 %c = call <16 x i16> @llvm.cttz.v16i16(<16 x i16> %a, i1 false) 6896 store <16 x i16> %c, <16 x i16>* %x 6897 ret void 6898} 6899declare <16 x i16> @llvm.cttz.v16i16(<16 x i16>, i1) 6900 6901define void @cttz_v8i32(<8 x i32>* %x, <8 x i32>* %y) { 6902; LMULMAX2-RV32-LABEL: cttz_v8i32: 6903; LMULMAX2-RV32: # %bb.0: 6904; LMULMAX2-RV32-NEXT: addi sp, sp, -96 6905; LMULMAX2-RV32-NEXT: .cfi_def_cfa_offset 96 6906; LMULMAX2-RV32-NEXT: sw ra, 92(sp) # 4-byte Folded Spill 6907; LMULMAX2-RV32-NEXT: sw s0, 88(sp) # 4-byte Folded Spill 6908; LMULMAX2-RV32-NEXT: .cfi_offset ra, -4 6909; LMULMAX2-RV32-NEXT: .cfi_offset s0, -8 6910; LMULMAX2-RV32-NEXT: addi s0, sp, 96 6911; LMULMAX2-RV32-NEXT: .cfi_def_cfa s0, 0 6912; LMULMAX2-RV32-NEXT: andi sp, sp, -32 6913; LMULMAX2-RV32-NEXT: vsetivli zero, 8, e32, m2, ta, mu 6914; LMULMAX2-RV32-NEXT: vle32.v v26, (a0) 6915; LMULMAX2-RV32-NEXT: vmv.x.s a1, v26 6916; LMULMAX2-RV32-NEXT: addi a2, a1, -1 6917; LMULMAX2-RV32-NEXT: not a1, a1 6918; LMULMAX2-RV32-NEXT: and a2, a1, a2 6919; LMULMAX2-RV32-NEXT: srli a3, a2, 1 6920; LMULMAX2-RV32-NEXT: lui a1, 349525 6921; LMULMAX2-RV32-NEXT: addi a6, a1, 1365 6922; LMULMAX2-RV32-NEXT: and a3, a3, a6 6923; LMULMAX2-RV32-NEXT: sub a3, a2, a3 6924; LMULMAX2-RV32-NEXT: lui a2, 209715 6925; LMULMAX2-RV32-NEXT: addi a2, a2, 819 6926; LMULMAX2-RV32-NEXT: and a4, a3, a2 6927; LMULMAX2-RV32-NEXT: srli a3, a3, 2 6928; LMULMAX2-RV32-NEXT: and a3, a3, a2 6929; LMULMAX2-RV32-NEXT: add a3, a4, a3 6930; LMULMAX2-RV32-NEXT: srli a4, a3, 4 6931; LMULMAX2-RV32-NEXT: add a4, a3, a4 6932; LMULMAX2-RV32-NEXT: lui a3, 61681 6933; LMULMAX2-RV32-NEXT: addi a3, a3, -241 6934; LMULMAX2-RV32-NEXT: and a5, a4, a3 6935; LMULMAX2-RV32-NEXT: lui a4, 4112 6936; LMULMAX2-RV32-NEXT: addi a4, a4, 257 6937; LMULMAX2-RV32-NEXT: mul a5, a5, a4 6938; LMULMAX2-RV32-NEXT: srli a5, a5, 24 6939; LMULMAX2-RV32-NEXT: sw a5, 32(sp) 6940; LMULMAX2-RV32-NEXT: vsetivli zero, 1, e32, m2, ta, mu 6941; LMULMAX2-RV32-NEXT: vslidedown.vi v28, v26, 7 6942; LMULMAX2-RV32-NEXT: vmv.x.s a5, v28 6943; LMULMAX2-RV32-NEXT: addi a1, a5, -1 6944; LMULMAX2-RV32-NEXT: not a5, a5 6945; LMULMAX2-RV32-NEXT: and a1, a5, a1 6946; LMULMAX2-RV32-NEXT: srli a5, a1, 1 6947; LMULMAX2-RV32-NEXT: and a5, a5, a6 6948; LMULMAX2-RV32-NEXT: sub a1, a1, a5 6949; LMULMAX2-RV32-NEXT: and a5, a1, a2 6950; LMULMAX2-RV32-NEXT: srli a1, a1, 2 6951; LMULMAX2-RV32-NEXT: and a1, a1, a2 6952; LMULMAX2-RV32-NEXT: add a1, a5, a1 6953; LMULMAX2-RV32-NEXT: srli a5, a1, 4 6954; LMULMAX2-RV32-NEXT: add a1, a1, a5 6955; LMULMAX2-RV32-NEXT: and a1, a1, a3 6956; LMULMAX2-RV32-NEXT: mul a1, a1, a4 6957; LMULMAX2-RV32-NEXT: srli a1, a1, 24 6958; LMULMAX2-RV32-NEXT: sw a1, 60(sp) 6959; LMULMAX2-RV32-NEXT: vslidedown.vi v28, v26, 6 6960; LMULMAX2-RV32-NEXT: vmv.x.s a1, v28 6961; LMULMAX2-RV32-NEXT: addi a5, a1, -1 6962; LMULMAX2-RV32-NEXT: not a1, a1 6963; LMULMAX2-RV32-NEXT: and a1, a1, a5 6964; LMULMAX2-RV32-NEXT: srli a5, a1, 1 6965; LMULMAX2-RV32-NEXT: and a5, a5, a6 6966; LMULMAX2-RV32-NEXT: sub a1, a1, a5 6967; LMULMAX2-RV32-NEXT: and a5, a1, a2 6968; LMULMAX2-RV32-NEXT: srli a1, a1, 2 6969; LMULMAX2-RV32-NEXT: and a1, a1, a2 6970; LMULMAX2-RV32-NEXT: add a1, a5, a1 6971; LMULMAX2-RV32-NEXT: srli a5, a1, 4 6972; LMULMAX2-RV32-NEXT: add a1, a1, a5 6973; LMULMAX2-RV32-NEXT: and a1, a1, a3 6974; LMULMAX2-RV32-NEXT: mul a1, a1, a4 6975; LMULMAX2-RV32-NEXT: srli a1, a1, 24 6976; LMULMAX2-RV32-NEXT: sw a1, 56(sp) 6977; LMULMAX2-RV32-NEXT: vslidedown.vi v28, v26, 5 6978; LMULMAX2-RV32-NEXT: vmv.x.s a1, v28 6979; LMULMAX2-RV32-NEXT: addi a5, a1, -1 6980; LMULMAX2-RV32-NEXT: not a1, a1 6981; LMULMAX2-RV32-NEXT: and a1, a1, a5 6982; LMULMAX2-RV32-NEXT: srli a5, a1, 1 6983; LMULMAX2-RV32-NEXT: and a5, a5, a6 6984; LMULMAX2-RV32-NEXT: sub a1, a1, a5 6985; LMULMAX2-RV32-NEXT: and a5, a1, a2 6986; LMULMAX2-RV32-NEXT: srli a1, a1, 2 6987; LMULMAX2-RV32-NEXT: and a1, a1, a2 6988; LMULMAX2-RV32-NEXT: add a1, a5, a1 6989; LMULMAX2-RV32-NEXT: srli a5, a1, 4 6990; LMULMAX2-RV32-NEXT: add a1, a1, a5 6991; LMULMAX2-RV32-NEXT: and a1, a1, a3 6992; LMULMAX2-RV32-NEXT: mul a1, a1, a4 6993; LMULMAX2-RV32-NEXT: srli a1, a1, 24 6994; LMULMAX2-RV32-NEXT: sw a1, 52(sp) 6995; LMULMAX2-RV32-NEXT: vslidedown.vi v28, v26, 4 6996; LMULMAX2-RV32-NEXT: vmv.x.s a1, v28 6997; LMULMAX2-RV32-NEXT: addi a5, a1, -1 6998; LMULMAX2-RV32-NEXT: not a1, a1 6999; LMULMAX2-RV32-NEXT: and a1, a1, a5 7000; LMULMAX2-RV32-NEXT: srli a5, a1, 1 7001; LMULMAX2-RV32-NEXT: and a5, a5, a6 7002; LMULMAX2-RV32-NEXT: sub a1, a1, a5 7003; LMULMAX2-RV32-NEXT: and a5, a1, a2 7004; LMULMAX2-RV32-NEXT: srli a1, a1, 2 7005; LMULMAX2-RV32-NEXT: and a1, a1, a2 7006; LMULMAX2-RV32-NEXT: add a1, a5, a1 7007; LMULMAX2-RV32-NEXT: srli a5, a1, 4 7008; LMULMAX2-RV32-NEXT: add a1, a1, a5 7009; LMULMAX2-RV32-NEXT: and a1, a1, a3 7010; LMULMAX2-RV32-NEXT: mul a1, a1, a4 7011; LMULMAX2-RV32-NEXT: srli a1, a1, 24 7012; LMULMAX2-RV32-NEXT: sw a1, 48(sp) 7013; LMULMAX2-RV32-NEXT: vslidedown.vi v28, v26, 3 7014; LMULMAX2-RV32-NEXT: vmv.x.s a1, v28 7015; LMULMAX2-RV32-NEXT: addi a5, a1, -1 7016; LMULMAX2-RV32-NEXT: not a1, a1 7017; LMULMAX2-RV32-NEXT: and a1, a1, a5 7018; LMULMAX2-RV32-NEXT: srli a5, a1, 1 7019; LMULMAX2-RV32-NEXT: and a5, a5, a6 7020; LMULMAX2-RV32-NEXT: sub a1, a1, a5 7021; LMULMAX2-RV32-NEXT: and a5, a1, a2 7022; LMULMAX2-RV32-NEXT: srli a1, a1, 2 7023; LMULMAX2-RV32-NEXT: and a1, a1, a2 7024; LMULMAX2-RV32-NEXT: add a1, a5, a1 7025; LMULMAX2-RV32-NEXT: srli a5, a1, 4 7026; LMULMAX2-RV32-NEXT: add a1, a1, a5 7027; LMULMAX2-RV32-NEXT: and a1, a1, a3 7028; LMULMAX2-RV32-NEXT: mul a1, a1, a4 7029; LMULMAX2-RV32-NEXT: srli a1, a1, 24 7030; LMULMAX2-RV32-NEXT: sw a1, 44(sp) 7031; LMULMAX2-RV32-NEXT: vslidedown.vi v28, v26, 2 7032; LMULMAX2-RV32-NEXT: vmv.x.s a1, v28 7033; LMULMAX2-RV32-NEXT: addi a5, a1, -1 7034; LMULMAX2-RV32-NEXT: not a1, a1 7035; LMULMAX2-RV32-NEXT: and a1, a1, a5 7036; LMULMAX2-RV32-NEXT: srli a5, a1, 1 7037; LMULMAX2-RV32-NEXT: and a5, a5, a6 7038; LMULMAX2-RV32-NEXT: sub a1, a1, a5 7039; LMULMAX2-RV32-NEXT: and a5, a1, a2 7040; LMULMAX2-RV32-NEXT: srli a1, a1, 2 7041; LMULMAX2-RV32-NEXT: and a1, a1, a2 7042; LMULMAX2-RV32-NEXT: add a1, a5, a1 7043; LMULMAX2-RV32-NEXT: srli a5, a1, 4 7044; LMULMAX2-RV32-NEXT: add a1, a1, a5 7045; LMULMAX2-RV32-NEXT: and a1, a1, a3 7046; LMULMAX2-RV32-NEXT: mul a1, a1, a4 7047; LMULMAX2-RV32-NEXT: srli a1, a1, 24 7048; LMULMAX2-RV32-NEXT: sw a1, 40(sp) 7049; LMULMAX2-RV32-NEXT: vslidedown.vi v26, v26, 1 7050; LMULMAX2-RV32-NEXT: vmv.x.s a1, v26 7051; LMULMAX2-RV32-NEXT: addi a5, a1, -1 7052; LMULMAX2-RV32-NEXT: not a1, a1 7053; LMULMAX2-RV32-NEXT: and a1, a1, a5 7054; LMULMAX2-RV32-NEXT: srli a5, a1, 1 7055; LMULMAX2-RV32-NEXT: and a5, a5, a6 7056; LMULMAX2-RV32-NEXT: sub a1, a1, a5 7057; LMULMAX2-RV32-NEXT: and a5, a1, a2 7058; LMULMAX2-RV32-NEXT: srli a1, a1, 2 7059; LMULMAX2-RV32-NEXT: and a1, a1, a2 7060; LMULMAX2-RV32-NEXT: add a1, a5, a1 7061; LMULMAX2-RV32-NEXT: srli a2, a1, 4 7062; LMULMAX2-RV32-NEXT: add a1, a1, a2 7063; LMULMAX2-RV32-NEXT: and a1, a1, a3 7064; LMULMAX2-RV32-NEXT: mul a1, a1, a4 7065; LMULMAX2-RV32-NEXT: srli a1, a1, 24 7066; LMULMAX2-RV32-NEXT: sw a1, 36(sp) 7067; LMULMAX2-RV32-NEXT: vsetivli zero, 8, e32, m2, ta, mu 7068; LMULMAX2-RV32-NEXT: addi a1, sp, 32 7069; LMULMAX2-RV32-NEXT: vle32.v v26, (a1) 7070; LMULMAX2-RV32-NEXT: vse32.v v26, (a0) 7071; LMULMAX2-RV32-NEXT: addi sp, s0, -96 7072; LMULMAX2-RV32-NEXT: lw s0, 88(sp) # 4-byte Folded Reload 7073; LMULMAX2-RV32-NEXT: lw ra, 92(sp) # 4-byte Folded Reload 7074; LMULMAX2-RV32-NEXT: addi sp, sp, 96 7075; LMULMAX2-RV32-NEXT: ret 7076; 7077; LMULMAX2-RV64-LABEL: cttz_v8i32: 7078; LMULMAX2-RV64: # %bb.0: 7079; LMULMAX2-RV64-NEXT: addi sp, sp, -96 7080; LMULMAX2-RV64-NEXT: .cfi_def_cfa_offset 96 7081; LMULMAX2-RV64-NEXT: sd ra, 88(sp) # 8-byte Folded Spill 7082; LMULMAX2-RV64-NEXT: sd s0, 80(sp) # 8-byte Folded Spill 7083; LMULMAX2-RV64-NEXT: .cfi_offset ra, -8 7084; LMULMAX2-RV64-NEXT: .cfi_offset s0, -16 7085; LMULMAX2-RV64-NEXT: addi s0, sp, 96 7086; LMULMAX2-RV64-NEXT: .cfi_def_cfa s0, 0 7087; LMULMAX2-RV64-NEXT: andi sp, sp, -32 7088; LMULMAX2-RV64-NEXT: vsetivli zero, 8, e32, m2, ta, mu 7089; LMULMAX2-RV64-NEXT: vle32.v v26, (a0) 7090; LMULMAX2-RV64-NEXT: vsetivli zero, 1, e32, m2, ta, mu 7091; LMULMAX2-RV64-NEXT: vslidedown.vi v28, v26, 7 7092; LMULMAX2-RV64-NEXT: vmv.x.s a2, v28 7093; LMULMAX2-RV64-NEXT: addi a1, zero, 1 7094; LMULMAX2-RV64-NEXT: slli a6, a1, 32 7095; LMULMAX2-RV64-NEXT: or a2, a2, a6 7096; LMULMAX2-RV64-NEXT: addi a3, a2, -1 7097; LMULMAX2-RV64-NEXT: not a2, a2 7098; LMULMAX2-RV64-NEXT: and a3, a2, a3 7099; LMULMAX2-RV64-NEXT: srli a4, a3, 1 7100; LMULMAX2-RV64-NEXT: lui a2, 21845 7101; LMULMAX2-RV64-NEXT: addiw a2, a2, 1365 7102; LMULMAX2-RV64-NEXT: slli a2, a2, 12 7103; LMULMAX2-RV64-NEXT: addi a2, a2, 1365 7104; LMULMAX2-RV64-NEXT: slli a2, a2, 12 7105; LMULMAX2-RV64-NEXT: addi a2, a2, 1365 7106; LMULMAX2-RV64-NEXT: slli a2, a2, 12 7107; LMULMAX2-RV64-NEXT: addi a7, a2, 1365 7108; LMULMAX2-RV64-NEXT: and a4, a4, a7 7109; LMULMAX2-RV64-NEXT: sub a4, a3, a4 7110; LMULMAX2-RV64-NEXT: lui a3, 13107 7111; LMULMAX2-RV64-NEXT: addiw a3, a3, 819 7112; LMULMAX2-RV64-NEXT: slli a3, a3, 12 7113; LMULMAX2-RV64-NEXT: addi a3, a3, 819 7114; LMULMAX2-RV64-NEXT: slli a3, a3, 12 7115; LMULMAX2-RV64-NEXT: addi a3, a3, 819 7116; LMULMAX2-RV64-NEXT: slli a3, a3, 12 7117; LMULMAX2-RV64-NEXT: addi a3, a3, 819 7118; LMULMAX2-RV64-NEXT: and a5, a4, a3 7119; LMULMAX2-RV64-NEXT: srli a4, a4, 2 7120; LMULMAX2-RV64-NEXT: and a4, a4, a3 7121; LMULMAX2-RV64-NEXT: add a4, a5, a4 7122; LMULMAX2-RV64-NEXT: srli a5, a4, 4 7123; LMULMAX2-RV64-NEXT: add a5, a4, a5 7124; LMULMAX2-RV64-NEXT: lui a4, 3855 7125; LMULMAX2-RV64-NEXT: addiw a4, a4, 241 7126; LMULMAX2-RV64-NEXT: slli a4, a4, 12 7127; LMULMAX2-RV64-NEXT: addi a4, a4, -241 7128; LMULMAX2-RV64-NEXT: slli a4, a4, 12 7129; LMULMAX2-RV64-NEXT: addi a4, a4, 241 7130; LMULMAX2-RV64-NEXT: slli a4, a4, 12 7131; LMULMAX2-RV64-NEXT: addi a4, a4, -241 7132; LMULMAX2-RV64-NEXT: and a1, a5, a4 7133; LMULMAX2-RV64-NEXT: lui a5, 4112 7134; LMULMAX2-RV64-NEXT: addiw a5, a5, 257 7135; LMULMAX2-RV64-NEXT: slli a5, a5, 16 7136; LMULMAX2-RV64-NEXT: addi a5, a5, 257 7137; LMULMAX2-RV64-NEXT: slli a5, a5, 16 7138; LMULMAX2-RV64-NEXT: addi a5, a5, 257 7139; LMULMAX2-RV64-NEXT: mul a1, a1, a5 7140; LMULMAX2-RV64-NEXT: srli a1, a1, 56 7141; LMULMAX2-RV64-NEXT: sw a1, 60(sp) 7142; LMULMAX2-RV64-NEXT: vslidedown.vi v28, v26, 6 7143; LMULMAX2-RV64-NEXT: vmv.x.s a1, v28 7144; LMULMAX2-RV64-NEXT: or a1, a1, a6 7145; LMULMAX2-RV64-NEXT: addi a2, a1, -1 7146; LMULMAX2-RV64-NEXT: not a1, a1 7147; LMULMAX2-RV64-NEXT: and a1, a1, a2 7148; LMULMAX2-RV64-NEXT: srli a2, a1, 1 7149; LMULMAX2-RV64-NEXT: and a2, a2, a7 7150; LMULMAX2-RV64-NEXT: sub a1, a1, a2 7151; LMULMAX2-RV64-NEXT: and a2, a1, a3 7152; LMULMAX2-RV64-NEXT: srli a1, a1, 2 7153; LMULMAX2-RV64-NEXT: and a1, a1, a3 7154; LMULMAX2-RV64-NEXT: add a1, a2, a1 7155; LMULMAX2-RV64-NEXT: srli a2, a1, 4 7156; LMULMAX2-RV64-NEXT: add a1, a1, a2 7157; LMULMAX2-RV64-NEXT: and a1, a1, a4 7158; LMULMAX2-RV64-NEXT: mul a1, a1, a5 7159; LMULMAX2-RV64-NEXT: srli a1, a1, 56 7160; LMULMAX2-RV64-NEXT: sw a1, 56(sp) 7161; LMULMAX2-RV64-NEXT: vslidedown.vi v28, v26, 5 7162; LMULMAX2-RV64-NEXT: vmv.x.s a1, v28 7163; LMULMAX2-RV64-NEXT: or a1, a1, a6 7164; LMULMAX2-RV64-NEXT: addi a2, a1, -1 7165; LMULMAX2-RV64-NEXT: not a1, a1 7166; LMULMAX2-RV64-NEXT: and a1, a1, a2 7167; LMULMAX2-RV64-NEXT: srli a2, a1, 1 7168; LMULMAX2-RV64-NEXT: and a2, a2, a7 7169; LMULMAX2-RV64-NEXT: sub a1, a1, a2 7170; LMULMAX2-RV64-NEXT: and a2, a1, a3 7171; LMULMAX2-RV64-NEXT: srli a1, a1, 2 7172; LMULMAX2-RV64-NEXT: and a1, a1, a3 7173; LMULMAX2-RV64-NEXT: add a1, a2, a1 7174; LMULMAX2-RV64-NEXT: srli a2, a1, 4 7175; LMULMAX2-RV64-NEXT: add a1, a1, a2 7176; LMULMAX2-RV64-NEXT: and a1, a1, a4 7177; LMULMAX2-RV64-NEXT: mul a1, a1, a5 7178; LMULMAX2-RV64-NEXT: srli a1, a1, 56 7179; LMULMAX2-RV64-NEXT: sw a1, 52(sp) 7180; LMULMAX2-RV64-NEXT: vslidedown.vi v28, v26, 4 7181; LMULMAX2-RV64-NEXT: vmv.x.s a1, v28 7182; LMULMAX2-RV64-NEXT: or a1, a1, a6 7183; LMULMAX2-RV64-NEXT: addi a2, a1, -1 7184; LMULMAX2-RV64-NEXT: not a1, a1 7185; LMULMAX2-RV64-NEXT: and a1, a1, a2 7186; LMULMAX2-RV64-NEXT: srli a2, a1, 1 7187; LMULMAX2-RV64-NEXT: and a2, a2, a7 7188; LMULMAX2-RV64-NEXT: sub a1, a1, a2 7189; LMULMAX2-RV64-NEXT: and a2, a1, a3 7190; LMULMAX2-RV64-NEXT: srli a1, a1, 2 7191; LMULMAX2-RV64-NEXT: and a1, a1, a3 7192; LMULMAX2-RV64-NEXT: add a1, a2, a1 7193; LMULMAX2-RV64-NEXT: srli a2, a1, 4 7194; LMULMAX2-RV64-NEXT: add a1, a1, a2 7195; LMULMAX2-RV64-NEXT: and a1, a1, a4 7196; LMULMAX2-RV64-NEXT: mul a1, a1, a5 7197; LMULMAX2-RV64-NEXT: srli a1, a1, 56 7198; LMULMAX2-RV64-NEXT: sw a1, 48(sp) 7199; LMULMAX2-RV64-NEXT: vslidedown.vi v28, v26, 3 7200; LMULMAX2-RV64-NEXT: vmv.x.s a1, v28 7201; LMULMAX2-RV64-NEXT: or a1, a1, a6 7202; LMULMAX2-RV64-NEXT: addi a2, a1, -1 7203; LMULMAX2-RV64-NEXT: not a1, a1 7204; LMULMAX2-RV64-NEXT: and a1, a1, a2 7205; LMULMAX2-RV64-NEXT: srli a2, a1, 1 7206; LMULMAX2-RV64-NEXT: and a2, a2, a7 7207; LMULMAX2-RV64-NEXT: sub a1, a1, a2 7208; LMULMAX2-RV64-NEXT: and a2, a1, a3 7209; LMULMAX2-RV64-NEXT: srli a1, a1, 2 7210; LMULMAX2-RV64-NEXT: and a1, a1, a3 7211; LMULMAX2-RV64-NEXT: add a1, a2, a1 7212; LMULMAX2-RV64-NEXT: srli a2, a1, 4 7213; LMULMAX2-RV64-NEXT: add a1, a1, a2 7214; LMULMAX2-RV64-NEXT: and a1, a1, a4 7215; LMULMAX2-RV64-NEXT: mul a1, a1, a5 7216; LMULMAX2-RV64-NEXT: srli a1, a1, 56 7217; LMULMAX2-RV64-NEXT: sw a1, 44(sp) 7218; LMULMAX2-RV64-NEXT: vslidedown.vi v28, v26, 2 7219; LMULMAX2-RV64-NEXT: vmv.x.s a1, v28 7220; LMULMAX2-RV64-NEXT: or a1, a1, a6 7221; LMULMAX2-RV64-NEXT: addi a2, a1, -1 7222; LMULMAX2-RV64-NEXT: not a1, a1 7223; LMULMAX2-RV64-NEXT: and a1, a1, a2 7224; LMULMAX2-RV64-NEXT: srli a2, a1, 1 7225; LMULMAX2-RV64-NEXT: and a2, a2, a7 7226; LMULMAX2-RV64-NEXT: sub a1, a1, a2 7227; LMULMAX2-RV64-NEXT: and a2, a1, a3 7228; LMULMAX2-RV64-NEXT: srli a1, a1, 2 7229; LMULMAX2-RV64-NEXT: and a1, a1, a3 7230; LMULMAX2-RV64-NEXT: add a1, a2, a1 7231; LMULMAX2-RV64-NEXT: srli a2, a1, 4 7232; LMULMAX2-RV64-NEXT: add a1, a1, a2 7233; LMULMAX2-RV64-NEXT: and a1, a1, a4 7234; LMULMAX2-RV64-NEXT: mul a1, a1, a5 7235; LMULMAX2-RV64-NEXT: srli a1, a1, 56 7236; LMULMAX2-RV64-NEXT: sw a1, 40(sp) 7237; LMULMAX2-RV64-NEXT: vslidedown.vi v28, v26, 1 7238; LMULMAX2-RV64-NEXT: vmv.x.s a1, v28 7239; LMULMAX2-RV64-NEXT: or a1, a1, a6 7240; LMULMAX2-RV64-NEXT: addi a2, a1, -1 7241; LMULMAX2-RV64-NEXT: not a1, a1 7242; LMULMAX2-RV64-NEXT: and a1, a1, a2 7243; LMULMAX2-RV64-NEXT: srli a2, a1, 1 7244; LMULMAX2-RV64-NEXT: and a2, a2, a7 7245; LMULMAX2-RV64-NEXT: sub a1, a1, a2 7246; LMULMAX2-RV64-NEXT: and a2, a1, a3 7247; LMULMAX2-RV64-NEXT: srli a1, a1, 2 7248; LMULMAX2-RV64-NEXT: and a1, a1, a3 7249; LMULMAX2-RV64-NEXT: add a1, a2, a1 7250; LMULMAX2-RV64-NEXT: srli a2, a1, 4 7251; LMULMAX2-RV64-NEXT: add a1, a1, a2 7252; LMULMAX2-RV64-NEXT: and a1, a1, a4 7253; LMULMAX2-RV64-NEXT: mul a1, a1, a5 7254; LMULMAX2-RV64-NEXT: srli a1, a1, 56 7255; LMULMAX2-RV64-NEXT: sw a1, 36(sp) 7256; LMULMAX2-RV64-NEXT: vmv.x.s a1, v26 7257; LMULMAX2-RV64-NEXT: or a1, a1, a6 7258; LMULMAX2-RV64-NEXT: addi a2, a1, -1 7259; LMULMAX2-RV64-NEXT: not a1, a1 7260; LMULMAX2-RV64-NEXT: and a1, a1, a2 7261; LMULMAX2-RV64-NEXT: srli a2, a1, 1 7262; LMULMAX2-RV64-NEXT: and a2, a2, a7 7263; LMULMAX2-RV64-NEXT: sub a1, a1, a2 7264; LMULMAX2-RV64-NEXT: and a2, a1, a3 7265; LMULMAX2-RV64-NEXT: srli a1, a1, 2 7266; LMULMAX2-RV64-NEXT: and a1, a1, a3 7267; LMULMAX2-RV64-NEXT: add a1, a2, a1 7268; LMULMAX2-RV64-NEXT: srli a2, a1, 4 7269; LMULMAX2-RV64-NEXT: add a1, a1, a2 7270; LMULMAX2-RV64-NEXT: and a1, a1, a4 7271; LMULMAX2-RV64-NEXT: mul a1, a1, a5 7272; LMULMAX2-RV64-NEXT: srli a1, a1, 56 7273; LMULMAX2-RV64-NEXT: sw a1, 32(sp) 7274; LMULMAX2-RV64-NEXT: vsetivli zero, 8, e32, m2, ta, mu 7275; LMULMAX2-RV64-NEXT: addi a1, sp, 32 7276; LMULMAX2-RV64-NEXT: vle32.v v26, (a1) 7277; LMULMAX2-RV64-NEXT: vse32.v v26, (a0) 7278; LMULMAX2-RV64-NEXT: addi sp, s0, -96 7279; LMULMAX2-RV64-NEXT: ld s0, 80(sp) # 8-byte Folded Reload 7280; LMULMAX2-RV64-NEXT: ld ra, 88(sp) # 8-byte Folded Reload 7281; LMULMAX2-RV64-NEXT: addi sp, sp, 96 7282; LMULMAX2-RV64-NEXT: ret 7283; 7284; LMULMAX1-RV32-LABEL: cttz_v8i32: 7285; LMULMAX1-RV32: # %bb.0: 7286; LMULMAX1-RV32-NEXT: addi sp, sp, -48 7287; LMULMAX1-RV32-NEXT: .cfi_def_cfa_offset 48 7288; LMULMAX1-RV32-NEXT: vsetivli zero, 4, e32, m1, ta, mu 7289; LMULMAX1-RV32-NEXT: addi a6, a0, 16 7290; LMULMAX1-RV32-NEXT: vle32.v v26, (a6) 7291; LMULMAX1-RV32-NEXT: vle32.v v25, (a0) 7292; LMULMAX1-RV32-NEXT: vmv.x.s a2, v26 7293; LMULMAX1-RV32-NEXT: addi a3, a2, -1 7294; LMULMAX1-RV32-NEXT: not a2, a2 7295; LMULMAX1-RV32-NEXT: and a3, a2, a3 7296; LMULMAX1-RV32-NEXT: srli a4, a3, 1 7297; LMULMAX1-RV32-NEXT: lui a2, 349525 7298; LMULMAX1-RV32-NEXT: addi a7, a2, 1365 7299; LMULMAX1-RV32-NEXT: and a4, a4, a7 7300; LMULMAX1-RV32-NEXT: sub a4, a3, a4 7301; LMULMAX1-RV32-NEXT: lui a3, 209715 7302; LMULMAX1-RV32-NEXT: addi a3, a3, 819 7303; LMULMAX1-RV32-NEXT: and a5, a4, a3 7304; LMULMAX1-RV32-NEXT: srli a4, a4, 2 7305; LMULMAX1-RV32-NEXT: and a4, a4, a3 7306; LMULMAX1-RV32-NEXT: add a4, a5, a4 7307; LMULMAX1-RV32-NEXT: srli a5, a4, 4 7308; LMULMAX1-RV32-NEXT: add a5, a4, a5 7309; LMULMAX1-RV32-NEXT: lui a4, 61681 7310; LMULMAX1-RV32-NEXT: addi a4, a4, -241 7311; LMULMAX1-RV32-NEXT: and a1, a5, a4 7312; LMULMAX1-RV32-NEXT: lui a5, 4112 7313; LMULMAX1-RV32-NEXT: addi a5, a5, 257 7314; LMULMAX1-RV32-NEXT: mul a1, a1, a5 7315; LMULMAX1-RV32-NEXT: srli a1, a1, 24 7316; LMULMAX1-RV32-NEXT: sw a1, 32(sp) 7317; LMULMAX1-RV32-NEXT: vsetivli zero, 1, e32, m1, ta, mu 7318; LMULMAX1-RV32-NEXT: vslidedown.vi v27, v26, 3 7319; LMULMAX1-RV32-NEXT: vmv.x.s a1, v27 7320; LMULMAX1-RV32-NEXT: addi a2, a1, -1 7321; LMULMAX1-RV32-NEXT: not a1, a1 7322; LMULMAX1-RV32-NEXT: and a1, a1, a2 7323; LMULMAX1-RV32-NEXT: srli a2, a1, 1 7324; LMULMAX1-RV32-NEXT: and a2, a2, a7 7325; LMULMAX1-RV32-NEXT: sub a1, a1, a2 7326; LMULMAX1-RV32-NEXT: and a2, a1, a3 7327; LMULMAX1-RV32-NEXT: srli a1, a1, 2 7328; LMULMAX1-RV32-NEXT: and a1, a1, a3 7329; LMULMAX1-RV32-NEXT: add a1, a2, a1 7330; LMULMAX1-RV32-NEXT: srli a2, a1, 4 7331; LMULMAX1-RV32-NEXT: add a1, a1, a2 7332; LMULMAX1-RV32-NEXT: and a1, a1, a4 7333; LMULMAX1-RV32-NEXT: mul a1, a1, a5 7334; LMULMAX1-RV32-NEXT: srli a1, a1, 24 7335; LMULMAX1-RV32-NEXT: sw a1, 44(sp) 7336; LMULMAX1-RV32-NEXT: vslidedown.vi v27, v26, 2 7337; LMULMAX1-RV32-NEXT: vmv.x.s a1, v27 7338; LMULMAX1-RV32-NEXT: addi a2, a1, -1 7339; LMULMAX1-RV32-NEXT: not a1, a1 7340; LMULMAX1-RV32-NEXT: and a1, a1, a2 7341; LMULMAX1-RV32-NEXT: srli a2, a1, 1 7342; LMULMAX1-RV32-NEXT: and a2, a2, a7 7343; LMULMAX1-RV32-NEXT: sub a1, a1, a2 7344; LMULMAX1-RV32-NEXT: and a2, a1, a3 7345; LMULMAX1-RV32-NEXT: srli a1, a1, 2 7346; LMULMAX1-RV32-NEXT: and a1, a1, a3 7347; LMULMAX1-RV32-NEXT: add a1, a2, a1 7348; LMULMAX1-RV32-NEXT: srli a2, a1, 4 7349; LMULMAX1-RV32-NEXT: add a1, a1, a2 7350; LMULMAX1-RV32-NEXT: and a1, a1, a4 7351; LMULMAX1-RV32-NEXT: mul a1, a1, a5 7352; LMULMAX1-RV32-NEXT: srli a1, a1, 24 7353; LMULMAX1-RV32-NEXT: sw a1, 40(sp) 7354; LMULMAX1-RV32-NEXT: vslidedown.vi v26, v26, 1 7355; LMULMAX1-RV32-NEXT: vmv.x.s a1, v26 7356; LMULMAX1-RV32-NEXT: addi a2, a1, -1 7357; LMULMAX1-RV32-NEXT: not a1, a1 7358; LMULMAX1-RV32-NEXT: and a1, a1, a2 7359; LMULMAX1-RV32-NEXT: srli a2, a1, 1 7360; LMULMAX1-RV32-NEXT: and a2, a2, a7 7361; LMULMAX1-RV32-NEXT: sub a1, a1, a2 7362; LMULMAX1-RV32-NEXT: and a2, a1, a3 7363; LMULMAX1-RV32-NEXT: srli a1, a1, 2 7364; LMULMAX1-RV32-NEXT: and a1, a1, a3 7365; LMULMAX1-RV32-NEXT: add a1, a2, a1 7366; LMULMAX1-RV32-NEXT: srli a2, a1, 4 7367; LMULMAX1-RV32-NEXT: add a1, a1, a2 7368; LMULMAX1-RV32-NEXT: and a1, a1, a4 7369; LMULMAX1-RV32-NEXT: mul a1, a1, a5 7370; LMULMAX1-RV32-NEXT: srli a1, a1, 24 7371; LMULMAX1-RV32-NEXT: sw a1, 36(sp) 7372; LMULMAX1-RV32-NEXT: vmv.x.s a1, v25 7373; LMULMAX1-RV32-NEXT: addi a2, a1, -1 7374; LMULMAX1-RV32-NEXT: not a1, a1 7375; LMULMAX1-RV32-NEXT: and a1, a1, a2 7376; LMULMAX1-RV32-NEXT: srli a2, a1, 1 7377; LMULMAX1-RV32-NEXT: and a2, a2, a7 7378; LMULMAX1-RV32-NEXT: sub a1, a1, a2 7379; LMULMAX1-RV32-NEXT: and a2, a1, a3 7380; LMULMAX1-RV32-NEXT: srli a1, a1, 2 7381; LMULMAX1-RV32-NEXT: and a1, a1, a3 7382; LMULMAX1-RV32-NEXT: add a1, a2, a1 7383; LMULMAX1-RV32-NEXT: srli a2, a1, 4 7384; LMULMAX1-RV32-NEXT: add a1, a1, a2 7385; LMULMAX1-RV32-NEXT: and a1, a1, a4 7386; LMULMAX1-RV32-NEXT: mul a1, a1, a5 7387; LMULMAX1-RV32-NEXT: srli a1, a1, 24 7388; LMULMAX1-RV32-NEXT: sw a1, 16(sp) 7389; LMULMAX1-RV32-NEXT: vslidedown.vi v26, v25, 3 7390; LMULMAX1-RV32-NEXT: vmv.x.s a1, v26 7391; LMULMAX1-RV32-NEXT: addi a2, a1, -1 7392; LMULMAX1-RV32-NEXT: not a1, a1 7393; LMULMAX1-RV32-NEXT: and a1, a1, a2 7394; LMULMAX1-RV32-NEXT: srli a2, a1, 1 7395; LMULMAX1-RV32-NEXT: and a2, a2, a7 7396; LMULMAX1-RV32-NEXT: sub a1, a1, a2 7397; LMULMAX1-RV32-NEXT: and a2, a1, a3 7398; LMULMAX1-RV32-NEXT: srli a1, a1, 2 7399; LMULMAX1-RV32-NEXT: and a1, a1, a3 7400; LMULMAX1-RV32-NEXT: add a1, a2, a1 7401; LMULMAX1-RV32-NEXT: srli a2, a1, 4 7402; LMULMAX1-RV32-NEXT: add a1, a1, a2 7403; LMULMAX1-RV32-NEXT: and a1, a1, a4 7404; LMULMAX1-RV32-NEXT: mul a1, a1, a5 7405; LMULMAX1-RV32-NEXT: srli a1, a1, 24 7406; LMULMAX1-RV32-NEXT: sw a1, 28(sp) 7407; LMULMAX1-RV32-NEXT: vslidedown.vi v26, v25, 2 7408; LMULMAX1-RV32-NEXT: vmv.x.s a1, v26 7409; LMULMAX1-RV32-NEXT: addi a2, a1, -1 7410; LMULMAX1-RV32-NEXT: not a1, a1 7411; LMULMAX1-RV32-NEXT: and a1, a1, a2 7412; LMULMAX1-RV32-NEXT: srli a2, a1, 1 7413; LMULMAX1-RV32-NEXT: and a2, a2, a7 7414; LMULMAX1-RV32-NEXT: sub a1, a1, a2 7415; LMULMAX1-RV32-NEXT: and a2, a1, a3 7416; LMULMAX1-RV32-NEXT: srli a1, a1, 2 7417; LMULMAX1-RV32-NEXT: and a1, a1, a3 7418; LMULMAX1-RV32-NEXT: add a1, a2, a1 7419; LMULMAX1-RV32-NEXT: srli a2, a1, 4 7420; LMULMAX1-RV32-NEXT: add a1, a1, a2 7421; LMULMAX1-RV32-NEXT: and a1, a1, a4 7422; LMULMAX1-RV32-NEXT: mul a1, a1, a5 7423; LMULMAX1-RV32-NEXT: srli a1, a1, 24 7424; LMULMAX1-RV32-NEXT: sw a1, 24(sp) 7425; LMULMAX1-RV32-NEXT: vslidedown.vi v25, v25, 1 7426; LMULMAX1-RV32-NEXT: vmv.x.s a1, v25 7427; LMULMAX1-RV32-NEXT: addi a2, a1, -1 7428; LMULMAX1-RV32-NEXT: not a1, a1 7429; LMULMAX1-RV32-NEXT: and a1, a1, a2 7430; LMULMAX1-RV32-NEXT: srli a2, a1, 1 7431; LMULMAX1-RV32-NEXT: and a2, a2, a7 7432; LMULMAX1-RV32-NEXT: sub a1, a1, a2 7433; LMULMAX1-RV32-NEXT: and a2, a1, a3 7434; LMULMAX1-RV32-NEXT: srli a1, a1, 2 7435; LMULMAX1-RV32-NEXT: and a1, a1, a3 7436; LMULMAX1-RV32-NEXT: add a1, a2, a1 7437; LMULMAX1-RV32-NEXT: srli a2, a1, 4 7438; LMULMAX1-RV32-NEXT: add a1, a1, a2 7439; LMULMAX1-RV32-NEXT: and a1, a1, a4 7440; LMULMAX1-RV32-NEXT: mul a1, a1, a5 7441; LMULMAX1-RV32-NEXT: srli a1, a1, 24 7442; LMULMAX1-RV32-NEXT: sw a1, 20(sp) 7443; LMULMAX1-RV32-NEXT: vsetivli zero, 4, e32, m1, ta, mu 7444; LMULMAX1-RV32-NEXT: addi a1, sp, 16 7445; LMULMAX1-RV32-NEXT: vle32.v v25, (a1) 7446; LMULMAX1-RV32-NEXT: addi a1, sp, 32 7447; LMULMAX1-RV32-NEXT: vle32.v v26, (a1) 7448; LMULMAX1-RV32-NEXT: vse32.v v25, (a0) 7449; LMULMAX1-RV32-NEXT: vse32.v v26, (a6) 7450; LMULMAX1-RV32-NEXT: addi sp, sp, 48 7451; LMULMAX1-RV32-NEXT: ret 7452; 7453; LMULMAX1-RV64-LABEL: cttz_v8i32: 7454; LMULMAX1-RV64: # %bb.0: 7455; LMULMAX1-RV64-NEXT: addi sp, sp, -48 7456; LMULMAX1-RV64-NEXT: .cfi_def_cfa_offset 48 7457; LMULMAX1-RV64-NEXT: vsetivli zero, 4, e32, m1, ta, mu 7458; LMULMAX1-RV64-NEXT: addi a6, a0, 16 7459; LMULMAX1-RV64-NEXT: vle32.v v26, (a6) 7460; LMULMAX1-RV64-NEXT: vle32.v v25, (a0) 7461; LMULMAX1-RV64-NEXT: vmv.x.s a1, v26 7462; LMULMAX1-RV64-NEXT: addi a2, zero, 1 7463; LMULMAX1-RV64-NEXT: slli a7, a2, 32 7464; LMULMAX1-RV64-NEXT: or a1, a1, a7 7465; LMULMAX1-RV64-NEXT: addi a3, a1, -1 7466; LMULMAX1-RV64-NEXT: not a1, a1 7467; LMULMAX1-RV64-NEXT: and a1, a1, a3 7468; LMULMAX1-RV64-NEXT: srli a4, a1, 1 7469; LMULMAX1-RV64-NEXT: lui a3, 21845 7470; LMULMAX1-RV64-NEXT: addiw a3, a3, 1365 7471; LMULMAX1-RV64-NEXT: slli a3, a3, 12 7472; LMULMAX1-RV64-NEXT: addi a3, a3, 1365 7473; LMULMAX1-RV64-NEXT: slli a3, a3, 12 7474; LMULMAX1-RV64-NEXT: addi a3, a3, 1365 7475; LMULMAX1-RV64-NEXT: slli a3, a3, 12 7476; LMULMAX1-RV64-NEXT: addi t0, a3, 1365 7477; LMULMAX1-RV64-NEXT: and a4, a4, t0 7478; LMULMAX1-RV64-NEXT: sub a1, a1, a4 7479; LMULMAX1-RV64-NEXT: lui a4, 13107 7480; LMULMAX1-RV64-NEXT: addiw a4, a4, 819 7481; LMULMAX1-RV64-NEXT: slli a4, a4, 12 7482; LMULMAX1-RV64-NEXT: addi a4, a4, 819 7483; LMULMAX1-RV64-NEXT: slli a4, a4, 12 7484; LMULMAX1-RV64-NEXT: addi a4, a4, 819 7485; LMULMAX1-RV64-NEXT: slli a4, a4, 12 7486; LMULMAX1-RV64-NEXT: addi a4, a4, 819 7487; LMULMAX1-RV64-NEXT: and a5, a1, a4 7488; LMULMAX1-RV64-NEXT: srli a1, a1, 2 7489; LMULMAX1-RV64-NEXT: and a1, a1, a4 7490; LMULMAX1-RV64-NEXT: add a1, a5, a1 7491; LMULMAX1-RV64-NEXT: srli a5, a1, 4 7492; LMULMAX1-RV64-NEXT: add a1, a1, a5 7493; LMULMAX1-RV64-NEXT: lui a5, 3855 7494; LMULMAX1-RV64-NEXT: addiw a5, a5, 241 7495; LMULMAX1-RV64-NEXT: slli a5, a5, 12 7496; LMULMAX1-RV64-NEXT: addi a5, a5, -241 7497; LMULMAX1-RV64-NEXT: slli a5, a5, 12 7498; LMULMAX1-RV64-NEXT: addi a5, a5, 241 7499; LMULMAX1-RV64-NEXT: slli a5, a5, 12 7500; LMULMAX1-RV64-NEXT: addi a5, a5, -241 7501; LMULMAX1-RV64-NEXT: and a2, a1, a5 7502; LMULMAX1-RV64-NEXT: lui a1, 4112 7503; LMULMAX1-RV64-NEXT: addiw a1, a1, 257 7504; LMULMAX1-RV64-NEXT: slli a1, a1, 16 7505; LMULMAX1-RV64-NEXT: addi a1, a1, 257 7506; LMULMAX1-RV64-NEXT: slli a1, a1, 16 7507; LMULMAX1-RV64-NEXT: addi a1, a1, 257 7508; LMULMAX1-RV64-NEXT: mul a2, a2, a1 7509; LMULMAX1-RV64-NEXT: srli a2, a2, 56 7510; LMULMAX1-RV64-NEXT: sw a2, 32(sp) 7511; LMULMAX1-RV64-NEXT: vsetivli zero, 1, e32, m1, ta, mu 7512; LMULMAX1-RV64-NEXT: vslidedown.vi v27, v26, 3 7513; LMULMAX1-RV64-NEXT: vmv.x.s a2, v27 7514; LMULMAX1-RV64-NEXT: or a2, a2, a7 7515; LMULMAX1-RV64-NEXT: addi a3, a2, -1 7516; LMULMAX1-RV64-NEXT: not a2, a2 7517; LMULMAX1-RV64-NEXT: and a2, a2, a3 7518; LMULMAX1-RV64-NEXT: srli a3, a2, 1 7519; LMULMAX1-RV64-NEXT: and a3, a3, t0 7520; LMULMAX1-RV64-NEXT: sub a2, a2, a3 7521; LMULMAX1-RV64-NEXT: and a3, a2, a4 7522; LMULMAX1-RV64-NEXT: srli a2, a2, 2 7523; LMULMAX1-RV64-NEXT: and a2, a2, a4 7524; LMULMAX1-RV64-NEXT: add a2, a3, a2 7525; LMULMAX1-RV64-NEXT: srli a3, a2, 4 7526; LMULMAX1-RV64-NEXT: add a2, a2, a3 7527; LMULMAX1-RV64-NEXT: and a2, a2, a5 7528; LMULMAX1-RV64-NEXT: mul a2, a2, a1 7529; LMULMAX1-RV64-NEXT: srli a2, a2, 56 7530; LMULMAX1-RV64-NEXT: sw a2, 44(sp) 7531; LMULMAX1-RV64-NEXT: vslidedown.vi v27, v26, 2 7532; LMULMAX1-RV64-NEXT: vmv.x.s a2, v27 7533; LMULMAX1-RV64-NEXT: or a2, a2, a7 7534; LMULMAX1-RV64-NEXT: addi a3, a2, -1 7535; LMULMAX1-RV64-NEXT: not a2, a2 7536; LMULMAX1-RV64-NEXT: and a2, a2, a3 7537; LMULMAX1-RV64-NEXT: srli a3, a2, 1 7538; LMULMAX1-RV64-NEXT: and a3, a3, t0 7539; LMULMAX1-RV64-NEXT: sub a2, a2, a3 7540; LMULMAX1-RV64-NEXT: and a3, a2, a4 7541; LMULMAX1-RV64-NEXT: srli a2, a2, 2 7542; LMULMAX1-RV64-NEXT: and a2, a2, a4 7543; LMULMAX1-RV64-NEXT: add a2, a3, a2 7544; LMULMAX1-RV64-NEXT: srli a3, a2, 4 7545; LMULMAX1-RV64-NEXT: add a2, a2, a3 7546; LMULMAX1-RV64-NEXT: and a2, a2, a5 7547; LMULMAX1-RV64-NEXT: mul a2, a2, a1 7548; LMULMAX1-RV64-NEXT: srli a2, a2, 56 7549; LMULMAX1-RV64-NEXT: sw a2, 40(sp) 7550; LMULMAX1-RV64-NEXT: vslidedown.vi v26, v26, 1 7551; LMULMAX1-RV64-NEXT: vmv.x.s a2, v26 7552; LMULMAX1-RV64-NEXT: or a2, a2, a7 7553; LMULMAX1-RV64-NEXT: addi a3, a2, -1 7554; LMULMAX1-RV64-NEXT: not a2, a2 7555; LMULMAX1-RV64-NEXT: and a2, a2, a3 7556; LMULMAX1-RV64-NEXT: srli a3, a2, 1 7557; LMULMAX1-RV64-NEXT: and a3, a3, t0 7558; LMULMAX1-RV64-NEXT: sub a2, a2, a3 7559; LMULMAX1-RV64-NEXT: and a3, a2, a4 7560; LMULMAX1-RV64-NEXT: srli a2, a2, 2 7561; LMULMAX1-RV64-NEXT: and a2, a2, a4 7562; LMULMAX1-RV64-NEXT: add a2, a3, a2 7563; LMULMAX1-RV64-NEXT: srli a3, a2, 4 7564; LMULMAX1-RV64-NEXT: add a2, a2, a3 7565; LMULMAX1-RV64-NEXT: and a2, a2, a5 7566; LMULMAX1-RV64-NEXT: mul a2, a2, a1 7567; LMULMAX1-RV64-NEXT: srli a2, a2, 56 7568; LMULMAX1-RV64-NEXT: sw a2, 36(sp) 7569; LMULMAX1-RV64-NEXT: vslidedown.vi v26, v25, 3 7570; LMULMAX1-RV64-NEXT: vmv.x.s a2, v26 7571; LMULMAX1-RV64-NEXT: or a2, a2, a7 7572; LMULMAX1-RV64-NEXT: addi a3, a2, -1 7573; LMULMAX1-RV64-NEXT: not a2, a2 7574; LMULMAX1-RV64-NEXT: and a2, a2, a3 7575; LMULMAX1-RV64-NEXT: srli a3, a2, 1 7576; LMULMAX1-RV64-NEXT: and a3, a3, t0 7577; LMULMAX1-RV64-NEXT: sub a2, a2, a3 7578; LMULMAX1-RV64-NEXT: and a3, a2, a4 7579; LMULMAX1-RV64-NEXT: srli a2, a2, 2 7580; LMULMAX1-RV64-NEXT: and a2, a2, a4 7581; LMULMAX1-RV64-NEXT: add a2, a3, a2 7582; LMULMAX1-RV64-NEXT: srli a3, a2, 4 7583; LMULMAX1-RV64-NEXT: add a2, a2, a3 7584; LMULMAX1-RV64-NEXT: and a2, a2, a5 7585; LMULMAX1-RV64-NEXT: mul a2, a2, a1 7586; LMULMAX1-RV64-NEXT: srli a2, a2, 56 7587; LMULMAX1-RV64-NEXT: sw a2, 28(sp) 7588; LMULMAX1-RV64-NEXT: vslidedown.vi v26, v25, 2 7589; LMULMAX1-RV64-NEXT: vmv.x.s a2, v26 7590; LMULMAX1-RV64-NEXT: or a2, a2, a7 7591; LMULMAX1-RV64-NEXT: addi a3, a2, -1 7592; LMULMAX1-RV64-NEXT: not a2, a2 7593; LMULMAX1-RV64-NEXT: and a2, a2, a3 7594; LMULMAX1-RV64-NEXT: srli a3, a2, 1 7595; LMULMAX1-RV64-NEXT: and a3, a3, t0 7596; LMULMAX1-RV64-NEXT: sub a2, a2, a3 7597; LMULMAX1-RV64-NEXT: and a3, a2, a4 7598; LMULMAX1-RV64-NEXT: srli a2, a2, 2 7599; LMULMAX1-RV64-NEXT: and a2, a2, a4 7600; LMULMAX1-RV64-NEXT: add a2, a3, a2 7601; LMULMAX1-RV64-NEXT: srli a3, a2, 4 7602; LMULMAX1-RV64-NEXT: add a2, a2, a3 7603; LMULMAX1-RV64-NEXT: and a2, a2, a5 7604; LMULMAX1-RV64-NEXT: mul a2, a2, a1 7605; LMULMAX1-RV64-NEXT: srli a2, a2, 56 7606; LMULMAX1-RV64-NEXT: sw a2, 24(sp) 7607; LMULMAX1-RV64-NEXT: vslidedown.vi v26, v25, 1 7608; LMULMAX1-RV64-NEXT: vmv.x.s a2, v26 7609; LMULMAX1-RV64-NEXT: or a2, a2, a7 7610; LMULMAX1-RV64-NEXT: addi a3, a2, -1 7611; LMULMAX1-RV64-NEXT: not a2, a2 7612; LMULMAX1-RV64-NEXT: and a2, a2, a3 7613; LMULMAX1-RV64-NEXT: srli a3, a2, 1 7614; LMULMAX1-RV64-NEXT: and a3, a3, t0 7615; LMULMAX1-RV64-NEXT: sub a2, a2, a3 7616; LMULMAX1-RV64-NEXT: and a3, a2, a4 7617; LMULMAX1-RV64-NEXT: srli a2, a2, 2 7618; LMULMAX1-RV64-NEXT: and a2, a2, a4 7619; LMULMAX1-RV64-NEXT: add a2, a3, a2 7620; LMULMAX1-RV64-NEXT: srli a3, a2, 4 7621; LMULMAX1-RV64-NEXT: add a2, a2, a3 7622; LMULMAX1-RV64-NEXT: and a2, a2, a5 7623; LMULMAX1-RV64-NEXT: mul a2, a2, a1 7624; LMULMAX1-RV64-NEXT: srli a2, a2, 56 7625; LMULMAX1-RV64-NEXT: sw a2, 20(sp) 7626; LMULMAX1-RV64-NEXT: vmv.x.s a2, v25 7627; LMULMAX1-RV64-NEXT: or a2, a2, a7 7628; LMULMAX1-RV64-NEXT: addi a3, a2, -1 7629; LMULMAX1-RV64-NEXT: not a2, a2 7630; LMULMAX1-RV64-NEXT: and a2, a2, a3 7631; LMULMAX1-RV64-NEXT: srli a3, a2, 1 7632; LMULMAX1-RV64-NEXT: and a3, a3, t0 7633; LMULMAX1-RV64-NEXT: sub a2, a2, a3 7634; LMULMAX1-RV64-NEXT: and a3, a2, a4 7635; LMULMAX1-RV64-NEXT: srli a2, a2, 2 7636; LMULMAX1-RV64-NEXT: and a2, a2, a4 7637; LMULMAX1-RV64-NEXT: add a2, a3, a2 7638; LMULMAX1-RV64-NEXT: srli a3, a2, 4 7639; LMULMAX1-RV64-NEXT: add a2, a2, a3 7640; LMULMAX1-RV64-NEXT: and a2, a2, a5 7641; LMULMAX1-RV64-NEXT: mul a1, a2, a1 7642; LMULMAX1-RV64-NEXT: srli a1, a1, 56 7643; LMULMAX1-RV64-NEXT: sw a1, 16(sp) 7644; LMULMAX1-RV64-NEXT: vsetivli zero, 4, e32, m1, ta, mu 7645; LMULMAX1-RV64-NEXT: addi a1, sp, 16 7646; LMULMAX1-RV64-NEXT: vle32.v v25, (a1) 7647; LMULMAX1-RV64-NEXT: addi a1, sp, 32 7648; LMULMAX1-RV64-NEXT: vle32.v v26, (a1) 7649; LMULMAX1-RV64-NEXT: vse32.v v25, (a0) 7650; LMULMAX1-RV64-NEXT: vse32.v v26, (a6) 7651; LMULMAX1-RV64-NEXT: addi sp, sp, 48 7652; LMULMAX1-RV64-NEXT: ret 7653 %a = load <8 x i32>, <8 x i32>* %x 7654 %b = load <8 x i32>, <8 x i32>* %y 7655 %c = call <8 x i32> @llvm.cttz.v8i32(<8 x i32> %a, i1 false) 7656 store <8 x i32> %c, <8 x i32>* %x 7657 ret void 7658} 7659declare <8 x i32> @llvm.cttz.v8i32(<8 x i32>, i1) 7660 7661define void @cttz_v4i64(<4 x i64>* %x, <4 x i64>* %y) { 7662; LMULMAX2-RV32-LABEL: cttz_v4i64: 7663; LMULMAX2-RV32: # %bb.0: 7664; LMULMAX2-RV32-NEXT: addi sp, sp, -96 7665; LMULMAX2-RV32-NEXT: .cfi_def_cfa_offset 96 7666; LMULMAX2-RV32-NEXT: sw ra, 92(sp) # 4-byte Folded Spill 7667; LMULMAX2-RV32-NEXT: sw s0, 88(sp) # 4-byte Folded Spill 7668; LMULMAX2-RV32-NEXT: .cfi_offset ra, -4 7669; LMULMAX2-RV32-NEXT: .cfi_offset s0, -8 7670; LMULMAX2-RV32-NEXT: addi s0, sp, 96 7671; LMULMAX2-RV32-NEXT: .cfi_def_cfa s0, 0 7672; LMULMAX2-RV32-NEXT: andi sp, sp, -32 7673; LMULMAX2-RV32-NEXT: vsetivli zero, 4, e64, m2, ta, mu 7674; LMULMAX2-RV32-NEXT: vle64.v v26, (a0) 7675; LMULMAX2-RV32-NEXT: sw zero, 60(sp) 7676; LMULMAX2-RV32-NEXT: sw zero, 52(sp) 7677; LMULMAX2-RV32-NEXT: sw zero, 44(sp) 7678; LMULMAX2-RV32-NEXT: sw zero, 36(sp) 7679; LMULMAX2-RV32-NEXT: addi a6, zero, 32 7680; LMULMAX2-RV32-NEXT: lui a1, 349525 7681; LMULMAX2-RV32-NEXT: addi a4, a1, 1365 7682; LMULMAX2-RV32-NEXT: lui a1, 209715 7683; LMULMAX2-RV32-NEXT: addi a3, a1, 819 7684; LMULMAX2-RV32-NEXT: lui a1, 61681 7685; LMULMAX2-RV32-NEXT: addi a7, a1, -241 7686; LMULMAX2-RV32-NEXT: lui a1, 4112 7687; LMULMAX2-RV32-NEXT: vmv.x.s a5, v26 7688; LMULMAX2-RV32-NEXT: addi a2, a1, 257 7689; LMULMAX2-RV32-NEXT: bnez a5, .LBB7_2 7690; LMULMAX2-RV32-NEXT: # %bb.1: 7691; LMULMAX2-RV32-NEXT: vsetivli zero, 1, e64, m2, ta, mu 7692; LMULMAX2-RV32-NEXT: vsrl.vx v28, v26, a6 7693; LMULMAX2-RV32-NEXT: vmv.x.s a1, v28 7694; LMULMAX2-RV32-NEXT: addi a5, a1, -1 7695; LMULMAX2-RV32-NEXT: not a1, a1 7696; LMULMAX2-RV32-NEXT: and a1, a1, a5 7697; LMULMAX2-RV32-NEXT: srli a5, a1, 1 7698; LMULMAX2-RV32-NEXT: and a5, a5, a4 7699; LMULMAX2-RV32-NEXT: sub a1, a1, a5 7700; LMULMAX2-RV32-NEXT: and a5, a1, a3 7701; LMULMAX2-RV32-NEXT: srli a1, a1, 2 7702; LMULMAX2-RV32-NEXT: and a1, a1, a3 7703; LMULMAX2-RV32-NEXT: add a1, a5, a1 7704; LMULMAX2-RV32-NEXT: srli a5, a1, 4 7705; LMULMAX2-RV32-NEXT: add a1, a1, a5 7706; LMULMAX2-RV32-NEXT: and a1, a1, a7 7707; LMULMAX2-RV32-NEXT: mul a1, a1, a2 7708; LMULMAX2-RV32-NEXT: srli a1, a1, 24 7709; LMULMAX2-RV32-NEXT: addi a5, a1, 32 7710; LMULMAX2-RV32-NEXT: j .LBB7_3 7711; LMULMAX2-RV32-NEXT: .LBB7_2: 7712; LMULMAX2-RV32-NEXT: addi a1, a5, -1 7713; LMULMAX2-RV32-NEXT: not a5, a5 7714; LMULMAX2-RV32-NEXT: and a1, a5, a1 7715; LMULMAX2-RV32-NEXT: srli a5, a1, 1 7716; LMULMAX2-RV32-NEXT: and a5, a5, a4 7717; LMULMAX2-RV32-NEXT: sub a1, a1, a5 7718; LMULMAX2-RV32-NEXT: and a5, a1, a3 7719; LMULMAX2-RV32-NEXT: srli a1, a1, 2 7720; LMULMAX2-RV32-NEXT: and a1, a1, a3 7721; LMULMAX2-RV32-NEXT: add a1, a5, a1 7722; LMULMAX2-RV32-NEXT: srli a5, a1, 4 7723; LMULMAX2-RV32-NEXT: add a1, a1, a5 7724; LMULMAX2-RV32-NEXT: and a1, a1, a7 7725; LMULMAX2-RV32-NEXT: mul a1, a1, a2 7726; LMULMAX2-RV32-NEXT: srli a5, a1, 24 7727; LMULMAX2-RV32-NEXT: .LBB7_3: 7728; LMULMAX2-RV32-NEXT: sw a5, 32(sp) 7729; LMULMAX2-RV32-NEXT: vsetivli zero, 1, e64, m2, ta, mu 7730; LMULMAX2-RV32-NEXT: vslidedown.vi v28, v26, 3 7731; LMULMAX2-RV32-NEXT: vmv.x.s a5, v28 7732; LMULMAX2-RV32-NEXT: bnez a5, .LBB7_5 7733; LMULMAX2-RV32-NEXT: # %bb.4: 7734; LMULMAX2-RV32-NEXT: vsrl.vx v28, v28, a6 7735; LMULMAX2-RV32-NEXT: vmv.x.s a1, v28 7736; LMULMAX2-RV32-NEXT: addi a5, a1, -1 7737; LMULMAX2-RV32-NEXT: not a1, a1 7738; LMULMAX2-RV32-NEXT: and a1, a1, a5 7739; LMULMAX2-RV32-NEXT: srli a5, a1, 1 7740; LMULMAX2-RV32-NEXT: and a5, a5, a4 7741; LMULMAX2-RV32-NEXT: sub a1, a1, a5 7742; LMULMAX2-RV32-NEXT: and a5, a1, a3 7743; LMULMAX2-RV32-NEXT: srli a1, a1, 2 7744; LMULMAX2-RV32-NEXT: and a1, a1, a3 7745; LMULMAX2-RV32-NEXT: add a1, a5, a1 7746; LMULMAX2-RV32-NEXT: srli a5, a1, 4 7747; LMULMAX2-RV32-NEXT: add a1, a1, a5 7748; LMULMAX2-RV32-NEXT: and a1, a1, a7 7749; LMULMAX2-RV32-NEXT: mul a1, a1, a2 7750; LMULMAX2-RV32-NEXT: srli a1, a1, 24 7751; LMULMAX2-RV32-NEXT: addi a5, a1, 32 7752; LMULMAX2-RV32-NEXT: j .LBB7_6 7753; LMULMAX2-RV32-NEXT: .LBB7_5: 7754; LMULMAX2-RV32-NEXT: addi a1, a5, -1 7755; LMULMAX2-RV32-NEXT: not a5, a5 7756; LMULMAX2-RV32-NEXT: and a1, a5, a1 7757; LMULMAX2-RV32-NEXT: srli a5, a1, 1 7758; LMULMAX2-RV32-NEXT: and a5, a5, a4 7759; LMULMAX2-RV32-NEXT: sub a1, a1, a5 7760; LMULMAX2-RV32-NEXT: and a5, a1, a3 7761; LMULMAX2-RV32-NEXT: srli a1, a1, 2 7762; LMULMAX2-RV32-NEXT: and a1, a1, a3 7763; LMULMAX2-RV32-NEXT: add a1, a5, a1 7764; LMULMAX2-RV32-NEXT: srli a5, a1, 4 7765; LMULMAX2-RV32-NEXT: add a1, a1, a5 7766; LMULMAX2-RV32-NEXT: and a1, a1, a7 7767; LMULMAX2-RV32-NEXT: mul a1, a1, a2 7768; LMULMAX2-RV32-NEXT: srli a5, a1, 24 7769; LMULMAX2-RV32-NEXT: .LBB7_6: 7770; LMULMAX2-RV32-NEXT: vslidedown.vi v28, v26, 2 7771; LMULMAX2-RV32-NEXT: vmv.x.s a1, v28 7772; LMULMAX2-RV32-NEXT: sw a5, 56(sp) 7773; LMULMAX2-RV32-NEXT: bnez a1, .LBB7_8 7774; LMULMAX2-RV32-NEXT: # %bb.7: 7775; LMULMAX2-RV32-NEXT: vsrl.vx v28, v28, a6 7776; LMULMAX2-RV32-NEXT: vmv.x.s a1, v28 7777; LMULMAX2-RV32-NEXT: addi a5, a1, -1 7778; LMULMAX2-RV32-NEXT: not a1, a1 7779; LMULMAX2-RV32-NEXT: and a1, a1, a5 7780; LMULMAX2-RV32-NEXT: srli a5, a1, 1 7781; LMULMAX2-RV32-NEXT: and a5, a5, a4 7782; LMULMAX2-RV32-NEXT: sub a1, a1, a5 7783; LMULMAX2-RV32-NEXT: and a5, a1, a3 7784; LMULMAX2-RV32-NEXT: srli a1, a1, 2 7785; LMULMAX2-RV32-NEXT: and a1, a1, a3 7786; LMULMAX2-RV32-NEXT: add a1, a5, a1 7787; LMULMAX2-RV32-NEXT: srli a5, a1, 4 7788; LMULMAX2-RV32-NEXT: add a1, a1, a5 7789; LMULMAX2-RV32-NEXT: and a1, a1, a7 7790; LMULMAX2-RV32-NEXT: mul a1, a1, a2 7791; LMULMAX2-RV32-NEXT: srli a1, a1, 24 7792; LMULMAX2-RV32-NEXT: addi a5, a1, 32 7793; LMULMAX2-RV32-NEXT: j .LBB7_9 7794; LMULMAX2-RV32-NEXT: .LBB7_8: 7795; LMULMAX2-RV32-NEXT: addi a5, a1, -1 7796; LMULMAX2-RV32-NEXT: not a1, a1 7797; LMULMAX2-RV32-NEXT: and a1, a1, a5 7798; LMULMAX2-RV32-NEXT: srli a5, a1, 1 7799; LMULMAX2-RV32-NEXT: and a5, a5, a4 7800; LMULMAX2-RV32-NEXT: sub a1, a1, a5 7801; LMULMAX2-RV32-NEXT: and a5, a1, a3 7802; LMULMAX2-RV32-NEXT: srli a1, a1, 2 7803; LMULMAX2-RV32-NEXT: and a1, a1, a3 7804; LMULMAX2-RV32-NEXT: add a1, a5, a1 7805; LMULMAX2-RV32-NEXT: srli a5, a1, 4 7806; LMULMAX2-RV32-NEXT: add a1, a1, a5 7807; LMULMAX2-RV32-NEXT: and a1, a1, a7 7808; LMULMAX2-RV32-NEXT: mul a1, a1, a2 7809; LMULMAX2-RV32-NEXT: srli a5, a1, 24 7810; LMULMAX2-RV32-NEXT: .LBB7_9: 7811; LMULMAX2-RV32-NEXT: vslidedown.vi v26, v26, 1 7812; LMULMAX2-RV32-NEXT: vmv.x.s a1, v26 7813; LMULMAX2-RV32-NEXT: sw a5, 48(sp) 7814; LMULMAX2-RV32-NEXT: bnez a1, .LBB7_11 7815; LMULMAX2-RV32-NEXT: # %bb.10: 7816; LMULMAX2-RV32-NEXT: vsrl.vx v26, v26, a6 7817; LMULMAX2-RV32-NEXT: vmv.x.s a1, v26 7818; LMULMAX2-RV32-NEXT: addi a5, a1, -1 7819; LMULMAX2-RV32-NEXT: not a1, a1 7820; LMULMAX2-RV32-NEXT: and a1, a1, a5 7821; LMULMAX2-RV32-NEXT: srli a5, a1, 1 7822; LMULMAX2-RV32-NEXT: and a4, a5, a4 7823; LMULMAX2-RV32-NEXT: sub a1, a1, a4 7824; LMULMAX2-RV32-NEXT: and a4, a1, a3 7825; LMULMAX2-RV32-NEXT: srli a1, a1, 2 7826; LMULMAX2-RV32-NEXT: and a1, a1, a3 7827; LMULMAX2-RV32-NEXT: add a1, a4, a1 7828; LMULMAX2-RV32-NEXT: srli a3, a1, 4 7829; LMULMAX2-RV32-NEXT: add a1, a1, a3 7830; LMULMAX2-RV32-NEXT: and a1, a1, a7 7831; LMULMAX2-RV32-NEXT: mul a1, a1, a2 7832; LMULMAX2-RV32-NEXT: srli a1, a1, 24 7833; LMULMAX2-RV32-NEXT: addi a1, a1, 32 7834; LMULMAX2-RV32-NEXT: j .LBB7_12 7835; LMULMAX2-RV32-NEXT: .LBB7_11: 7836; LMULMAX2-RV32-NEXT: addi a5, a1, -1 7837; LMULMAX2-RV32-NEXT: not a1, a1 7838; LMULMAX2-RV32-NEXT: and a1, a1, a5 7839; LMULMAX2-RV32-NEXT: srli a5, a1, 1 7840; LMULMAX2-RV32-NEXT: and a4, a5, a4 7841; LMULMAX2-RV32-NEXT: sub a1, a1, a4 7842; LMULMAX2-RV32-NEXT: and a4, a1, a3 7843; LMULMAX2-RV32-NEXT: srli a1, a1, 2 7844; LMULMAX2-RV32-NEXT: and a1, a1, a3 7845; LMULMAX2-RV32-NEXT: add a1, a4, a1 7846; LMULMAX2-RV32-NEXT: srli a3, a1, 4 7847; LMULMAX2-RV32-NEXT: add a1, a1, a3 7848; LMULMAX2-RV32-NEXT: and a1, a1, a7 7849; LMULMAX2-RV32-NEXT: mul a1, a1, a2 7850; LMULMAX2-RV32-NEXT: srli a1, a1, 24 7851; LMULMAX2-RV32-NEXT: .LBB7_12: 7852; LMULMAX2-RV32-NEXT: sw a1, 40(sp) 7853; LMULMAX2-RV32-NEXT: vsetivli zero, 8, e32, m2, ta, mu 7854; LMULMAX2-RV32-NEXT: addi a1, sp, 32 7855; LMULMAX2-RV32-NEXT: vle32.v v26, (a1) 7856; LMULMAX2-RV32-NEXT: vsetivli zero, 4, e64, m2, ta, mu 7857; LMULMAX2-RV32-NEXT: vse64.v v26, (a0) 7858; LMULMAX2-RV32-NEXT: addi sp, s0, -96 7859; LMULMAX2-RV32-NEXT: lw s0, 88(sp) # 4-byte Folded Reload 7860; LMULMAX2-RV32-NEXT: lw ra, 92(sp) # 4-byte Folded Reload 7861; LMULMAX2-RV32-NEXT: addi sp, sp, 96 7862; LMULMAX2-RV32-NEXT: ret 7863; 7864; LMULMAX2-RV64-LABEL: cttz_v4i64: 7865; LMULMAX2-RV64: # %bb.0: 7866; LMULMAX2-RV64-NEXT: addi sp, sp, -96 7867; LMULMAX2-RV64-NEXT: .cfi_def_cfa_offset 96 7868; LMULMAX2-RV64-NEXT: sd ra, 88(sp) # 8-byte Folded Spill 7869; LMULMAX2-RV64-NEXT: sd s0, 80(sp) # 8-byte Folded Spill 7870; LMULMAX2-RV64-NEXT: .cfi_offset ra, -8 7871; LMULMAX2-RV64-NEXT: .cfi_offset s0, -16 7872; LMULMAX2-RV64-NEXT: addi s0, sp, 96 7873; LMULMAX2-RV64-NEXT: .cfi_def_cfa s0, 0 7874; LMULMAX2-RV64-NEXT: andi sp, sp, -32 7875; LMULMAX2-RV64-NEXT: vsetivli zero, 4, e64, m2, ta, mu 7876; LMULMAX2-RV64-NEXT: vle64.v v26, (a0) 7877; LMULMAX2-RV64-NEXT: vsetivli zero, 1, e64, m2, ta, mu 7878; LMULMAX2-RV64-NEXT: vslidedown.vi v28, v26, 3 7879; LMULMAX2-RV64-NEXT: vmv.x.s a1, v28 7880; LMULMAX2-RV64-NEXT: addi a2, a1, -1 7881; LMULMAX2-RV64-NEXT: not a1, a1 7882; LMULMAX2-RV64-NEXT: and a2, a1, a2 7883; LMULMAX2-RV64-NEXT: srli a3, a2, 1 7884; LMULMAX2-RV64-NEXT: lui a1, 21845 7885; LMULMAX2-RV64-NEXT: addiw a1, a1, 1365 7886; LMULMAX2-RV64-NEXT: slli a1, a1, 12 7887; LMULMAX2-RV64-NEXT: addi a1, a1, 1365 7888; LMULMAX2-RV64-NEXT: slli a1, a1, 12 7889; LMULMAX2-RV64-NEXT: addi a1, a1, 1365 7890; LMULMAX2-RV64-NEXT: slli a1, a1, 12 7891; LMULMAX2-RV64-NEXT: addi a6, a1, 1365 7892; LMULMAX2-RV64-NEXT: and a3, a3, a6 7893; LMULMAX2-RV64-NEXT: sub a3, a2, a3 7894; LMULMAX2-RV64-NEXT: lui a2, 13107 7895; LMULMAX2-RV64-NEXT: addiw a2, a2, 819 7896; LMULMAX2-RV64-NEXT: slli a2, a2, 12 7897; LMULMAX2-RV64-NEXT: addi a2, a2, 819 7898; LMULMAX2-RV64-NEXT: slli a2, a2, 12 7899; LMULMAX2-RV64-NEXT: addi a2, a2, 819 7900; LMULMAX2-RV64-NEXT: slli a2, a2, 12 7901; LMULMAX2-RV64-NEXT: addi a2, a2, 819 7902; LMULMAX2-RV64-NEXT: and a4, a3, a2 7903; LMULMAX2-RV64-NEXT: srli a3, a3, 2 7904; LMULMAX2-RV64-NEXT: and a3, a3, a2 7905; LMULMAX2-RV64-NEXT: add a3, a4, a3 7906; LMULMAX2-RV64-NEXT: srli a4, a3, 4 7907; LMULMAX2-RV64-NEXT: add a3, a3, a4 7908; LMULMAX2-RV64-NEXT: lui a4, 3855 7909; LMULMAX2-RV64-NEXT: addiw a4, a4, 241 7910; LMULMAX2-RV64-NEXT: slli a4, a4, 12 7911; LMULMAX2-RV64-NEXT: addi a4, a4, -241 7912; LMULMAX2-RV64-NEXT: slli a4, a4, 12 7913; LMULMAX2-RV64-NEXT: addi a4, a4, 241 7914; LMULMAX2-RV64-NEXT: slli a4, a4, 12 7915; LMULMAX2-RV64-NEXT: addi a4, a4, -241 7916; LMULMAX2-RV64-NEXT: and a3, a3, a4 7917; LMULMAX2-RV64-NEXT: lui a5, 4112 7918; LMULMAX2-RV64-NEXT: addiw a5, a5, 257 7919; LMULMAX2-RV64-NEXT: slli a5, a5, 16 7920; LMULMAX2-RV64-NEXT: addi a5, a5, 257 7921; LMULMAX2-RV64-NEXT: slli a5, a5, 16 7922; LMULMAX2-RV64-NEXT: addi a5, a5, 257 7923; LMULMAX2-RV64-NEXT: mul a3, a3, a5 7924; LMULMAX2-RV64-NEXT: srli a3, a3, 56 7925; LMULMAX2-RV64-NEXT: sd a3, 56(sp) 7926; LMULMAX2-RV64-NEXT: vslidedown.vi v28, v26, 2 7927; LMULMAX2-RV64-NEXT: vmv.x.s a3, v28 7928; LMULMAX2-RV64-NEXT: addi a1, a3, -1 7929; LMULMAX2-RV64-NEXT: not a3, a3 7930; LMULMAX2-RV64-NEXT: and a1, a3, a1 7931; LMULMAX2-RV64-NEXT: srli a3, a1, 1 7932; LMULMAX2-RV64-NEXT: and a3, a3, a6 7933; LMULMAX2-RV64-NEXT: sub a1, a1, a3 7934; LMULMAX2-RV64-NEXT: and a3, a1, a2 7935; LMULMAX2-RV64-NEXT: srli a1, a1, 2 7936; LMULMAX2-RV64-NEXT: and a1, a1, a2 7937; LMULMAX2-RV64-NEXT: add a1, a3, a1 7938; LMULMAX2-RV64-NEXT: srli a3, a1, 4 7939; LMULMAX2-RV64-NEXT: add a1, a1, a3 7940; LMULMAX2-RV64-NEXT: and a1, a1, a4 7941; LMULMAX2-RV64-NEXT: mul a1, a1, a5 7942; LMULMAX2-RV64-NEXT: srli a1, a1, 56 7943; LMULMAX2-RV64-NEXT: sd a1, 48(sp) 7944; LMULMAX2-RV64-NEXT: vslidedown.vi v28, v26, 1 7945; LMULMAX2-RV64-NEXT: vmv.x.s a1, v28 7946; LMULMAX2-RV64-NEXT: addi a3, a1, -1 7947; LMULMAX2-RV64-NEXT: not a1, a1 7948; LMULMAX2-RV64-NEXT: and a1, a1, a3 7949; LMULMAX2-RV64-NEXT: srli a3, a1, 1 7950; LMULMAX2-RV64-NEXT: and a3, a3, a6 7951; LMULMAX2-RV64-NEXT: sub a1, a1, a3 7952; LMULMAX2-RV64-NEXT: and a3, a1, a2 7953; LMULMAX2-RV64-NEXT: srli a1, a1, 2 7954; LMULMAX2-RV64-NEXT: and a1, a1, a2 7955; LMULMAX2-RV64-NEXT: add a1, a3, a1 7956; LMULMAX2-RV64-NEXT: srli a3, a1, 4 7957; LMULMAX2-RV64-NEXT: add a1, a1, a3 7958; LMULMAX2-RV64-NEXT: and a1, a1, a4 7959; LMULMAX2-RV64-NEXT: mul a1, a1, a5 7960; LMULMAX2-RV64-NEXT: srli a1, a1, 56 7961; LMULMAX2-RV64-NEXT: sd a1, 40(sp) 7962; LMULMAX2-RV64-NEXT: vmv.x.s a1, v26 7963; LMULMAX2-RV64-NEXT: addi a3, a1, -1 7964; LMULMAX2-RV64-NEXT: not a1, a1 7965; LMULMAX2-RV64-NEXT: and a1, a1, a3 7966; LMULMAX2-RV64-NEXT: srli a3, a1, 1 7967; LMULMAX2-RV64-NEXT: and a3, a3, a6 7968; LMULMAX2-RV64-NEXT: sub a1, a1, a3 7969; LMULMAX2-RV64-NEXT: and a3, a1, a2 7970; LMULMAX2-RV64-NEXT: srli a1, a1, 2 7971; LMULMAX2-RV64-NEXT: and a1, a1, a2 7972; LMULMAX2-RV64-NEXT: add a1, a3, a1 7973; LMULMAX2-RV64-NEXT: srli a2, a1, 4 7974; LMULMAX2-RV64-NEXT: add a1, a1, a2 7975; LMULMAX2-RV64-NEXT: and a1, a1, a4 7976; LMULMAX2-RV64-NEXT: mul a1, a1, a5 7977; LMULMAX2-RV64-NEXT: srli a1, a1, 56 7978; LMULMAX2-RV64-NEXT: sd a1, 32(sp) 7979; LMULMAX2-RV64-NEXT: vsetivli zero, 4, e64, m2, ta, mu 7980; LMULMAX2-RV64-NEXT: addi a1, sp, 32 7981; LMULMAX2-RV64-NEXT: vle64.v v26, (a1) 7982; LMULMAX2-RV64-NEXT: vse64.v v26, (a0) 7983; LMULMAX2-RV64-NEXT: addi sp, s0, -96 7984; LMULMAX2-RV64-NEXT: ld s0, 80(sp) # 8-byte Folded Reload 7985; LMULMAX2-RV64-NEXT: ld ra, 88(sp) # 8-byte Folded Reload 7986; LMULMAX2-RV64-NEXT: addi sp, sp, 96 7987; LMULMAX2-RV64-NEXT: ret 7988; 7989; LMULMAX1-RV32-LABEL: cttz_v4i64: 7990; LMULMAX1-RV32: # %bb.0: 7991; LMULMAX1-RV32-NEXT: addi sp, sp, -48 7992; LMULMAX1-RV32-NEXT: .cfi_def_cfa_offset 48 7993; LMULMAX1-RV32-NEXT: vsetivli zero, 2, e64, m1, ta, mu 7994; LMULMAX1-RV32-NEXT: vle64.v v25, (a0) 7995; LMULMAX1-RV32-NEXT: addi a7, a0, 16 7996; LMULMAX1-RV32-NEXT: vle64.v v26, (a7) 7997; LMULMAX1-RV32-NEXT: sw zero, 44(sp) 7998; LMULMAX1-RV32-NEXT: sw zero, 36(sp) 7999; LMULMAX1-RV32-NEXT: addi a6, zero, 32 8000; LMULMAX1-RV32-NEXT: lui a1, 349525 8001; LMULMAX1-RV32-NEXT: addi a5, a1, 1365 8002; LMULMAX1-RV32-NEXT: lui a1, 209715 8003; LMULMAX1-RV32-NEXT: addi a4, a1, 819 8004; LMULMAX1-RV32-NEXT: lui a1, 61681 8005; LMULMAX1-RV32-NEXT: addi t0, a1, -241 8006; LMULMAX1-RV32-NEXT: lui a2, 4112 8007; LMULMAX1-RV32-NEXT: vmv.x.s a1, v26 8008; LMULMAX1-RV32-NEXT: addi a3, a2, 257 8009; LMULMAX1-RV32-NEXT: bnez a1, .LBB7_2 8010; LMULMAX1-RV32-NEXT: # %bb.1: 8011; LMULMAX1-RV32-NEXT: vsetivli zero, 1, e64, m1, ta, mu 8012; LMULMAX1-RV32-NEXT: vsrl.vx v27, v26, a6 8013; LMULMAX1-RV32-NEXT: vmv.x.s a1, v27 8014; LMULMAX1-RV32-NEXT: addi a2, a1, -1 8015; LMULMAX1-RV32-NEXT: not a1, a1 8016; LMULMAX1-RV32-NEXT: and a1, a1, a2 8017; LMULMAX1-RV32-NEXT: srli a2, a1, 1 8018; LMULMAX1-RV32-NEXT: and a2, a2, a5 8019; LMULMAX1-RV32-NEXT: sub a1, a1, a2 8020; LMULMAX1-RV32-NEXT: and a2, a1, a4 8021; LMULMAX1-RV32-NEXT: srli a1, a1, 2 8022; LMULMAX1-RV32-NEXT: and a1, a1, a4 8023; LMULMAX1-RV32-NEXT: add a1, a2, a1 8024; LMULMAX1-RV32-NEXT: srli a2, a1, 4 8025; LMULMAX1-RV32-NEXT: add a1, a1, a2 8026; LMULMAX1-RV32-NEXT: and a1, a1, t0 8027; LMULMAX1-RV32-NEXT: mul a1, a1, a3 8028; LMULMAX1-RV32-NEXT: srli a1, a1, 24 8029; LMULMAX1-RV32-NEXT: addi a1, a1, 32 8030; LMULMAX1-RV32-NEXT: j .LBB7_3 8031; LMULMAX1-RV32-NEXT: .LBB7_2: 8032; LMULMAX1-RV32-NEXT: addi a2, a1, -1 8033; LMULMAX1-RV32-NEXT: not a1, a1 8034; LMULMAX1-RV32-NEXT: and a1, a1, a2 8035; LMULMAX1-RV32-NEXT: srli a2, a1, 1 8036; LMULMAX1-RV32-NEXT: and a2, a2, a5 8037; LMULMAX1-RV32-NEXT: sub a1, a1, a2 8038; LMULMAX1-RV32-NEXT: and a2, a1, a4 8039; LMULMAX1-RV32-NEXT: srli a1, a1, 2 8040; LMULMAX1-RV32-NEXT: and a1, a1, a4 8041; LMULMAX1-RV32-NEXT: add a1, a2, a1 8042; LMULMAX1-RV32-NEXT: srli a2, a1, 4 8043; LMULMAX1-RV32-NEXT: add a1, a1, a2 8044; LMULMAX1-RV32-NEXT: and a1, a1, t0 8045; LMULMAX1-RV32-NEXT: mul a1, a1, a3 8046; LMULMAX1-RV32-NEXT: srli a1, a1, 24 8047; LMULMAX1-RV32-NEXT: .LBB7_3: 8048; LMULMAX1-RV32-NEXT: sw a1, 32(sp) 8049; LMULMAX1-RV32-NEXT: vsetivli zero, 1, e64, m1, ta, mu 8050; LMULMAX1-RV32-NEXT: vslidedown.vi v26, v26, 1 8051; LMULMAX1-RV32-NEXT: vmv.x.s a1, v26 8052; LMULMAX1-RV32-NEXT: bnez a1, .LBB7_5 8053; LMULMAX1-RV32-NEXT: # %bb.4: 8054; LMULMAX1-RV32-NEXT: vsrl.vx v26, v26, a6 8055; LMULMAX1-RV32-NEXT: vmv.x.s a1, v26 8056; LMULMAX1-RV32-NEXT: addi a2, a1, -1 8057; LMULMAX1-RV32-NEXT: not a1, a1 8058; LMULMAX1-RV32-NEXT: and a1, a1, a2 8059; LMULMAX1-RV32-NEXT: srli a2, a1, 1 8060; LMULMAX1-RV32-NEXT: and a2, a2, a5 8061; LMULMAX1-RV32-NEXT: sub a1, a1, a2 8062; LMULMAX1-RV32-NEXT: and a2, a1, a4 8063; LMULMAX1-RV32-NEXT: srli a1, a1, 2 8064; LMULMAX1-RV32-NEXT: and a1, a1, a4 8065; LMULMAX1-RV32-NEXT: add a1, a2, a1 8066; LMULMAX1-RV32-NEXT: srli a2, a1, 4 8067; LMULMAX1-RV32-NEXT: add a1, a1, a2 8068; LMULMAX1-RV32-NEXT: and a1, a1, t0 8069; LMULMAX1-RV32-NEXT: mul a1, a1, a3 8070; LMULMAX1-RV32-NEXT: srli a1, a1, 24 8071; LMULMAX1-RV32-NEXT: addi a1, a1, 32 8072; LMULMAX1-RV32-NEXT: j .LBB7_6 8073; LMULMAX1-RV32-NEXT: .LBB7_5: 8074; LMULMAX1-RV32-NEXT: addi a2, a1, -1 8075; LMULMAX1-RV32-NEXT: not a1, a1 8076; LMULMAX1-RV32-NEXT: and a1, a1, a2 8077; LMULMAX1-RV32-NEXT: srli a2, a1, 1 8078; LMULMAX1-RV32-NEXT: and a2, a2, a5 8079; LMULMAX1-RV32-NEXT: sub a1, a1, a2 8080; LMULMAX1-RV32-NEXT: and a2, a1, a4 8081; LMULMAX1-RV32-NEXT: srli a1, a1, 2 8082; LMULMAX1-RV32-NEXT: and a1, a1, a4 8083; LMULMAX1-RV32-NEXT: add a1, a2, a1 8084; LMULMAX1-RV32-NEXT: srli a2, a1, 4 8085; LMULMAX1-RV32-NEXT: add a1, a1, a2 8086; LMULMAX1-RV32-NEXT: and a1, a1, t0 8087; LMULMAX1-RV32-NEXT: mul a1, a1, a3 8088; LMULMAX1-RV32-NEXT: srli a1, a1, 24 8089; LMULMAX1-RV32-NEXT: .LBB7_6: 8090; LMULMAX1-RV32-NEXT: sw a1, 40(sp) 8091; LMULMAX1-RV32-NEXT: sw zero, 28(sp) 8092; LMULMAX1-RV32-NEXT: vmv.x.s a1, v25 8093; LMULMAX1-RV32-NEXT: sw zero, 20(sp) 8094; LMULMAX1-RV32-NEXT: bnez a1, .LBB7_8 8095; LMULMAX1-RV32-NEXT: # %bb.7: 8096; LMULMAX1-RV32-NEXT: vsrl.vx v26, v25, a6 8097; LMULMAX1-RV32-NEXT: vmv.x.s a1, v26 8098; LMULMAX1-RV32-NEXT: addi a2, a1, -1 8099; LMULMAX1-RV32-NEXT: not a1, a1 8100; LMULMAX1-RV32-NEXT: and a1, a1, a2 8101; LMULMAX1-RV32-NEXT: srli a2, a1, 1 8102; LMULMAX1-RV32-NEXT: and a2, a2, a5 8103; LMULMAX1-RV32-NEXT: sub a1, a1, a2 8104; LMULMAX1-RV32-NEXT: and a2, a1, a4 8105; LMULMAX1-RV32-NEXT: srli a1, a1, 2 8106; LMULMAX1-RV32-NEXT: and a1, a1, a4 8107; LMULMAX1-RV32-NEXT: add a1, a2, a1 8108; LMULMAX1-RV32-NEXT: srli a2, a1, 4 8109; LMULMAX1-RV32-NEXT: add a1, a1, a2 8110; LMULMAX1-RV32-NEXT: and a1, a1, t0 8111; LMULMAX1-RV32-NEXT: mul a1, a1, a3 8112; LMULMAX1-RV32-NEXT: srli a1, a1, 24 8113; LMULMAX1-RV32-NEXT: addi a1, a1, 32 8114; LMULMAX1-RV32-NEXT: j .LBB7_9 8115; LMULMAX1-RV32-NEXT: .LBB7_8: 8116; LMULMAX1-RV32-NEXT: addi a2, a1, -1 8117; LMULMAX1-RV32-NEXT: not a1, a1 8118; LMULMAX1-RV32-NEXT: and a1, a1, a2 8119; LMULMAX1-RV32-NEXT: srli a2, a1, 1 8120; LMULMAX1-RV32-NEXT: and a2, a2, a5 8121; LMULMAX1-RV32-NEXT: sub a1, a1, a2 8122; LMULMAX1-RV32-NEXT: and a2, a1, a4 8123; LMULMAX1-RV32-NEXT: srli a1, a1, 2 8124; LMULMAX1-RV32-NEXT: and a1, a1, a4 8125; LMULMAX1-RV32-NEXT: add a1, a2, a1 8126; LMULMAX1-RV32-NEXT: srli a2, a1, 4 8127; LMULMAX1-RV32-NEXT: add a1, a1, a2 8128; LMULMAX1-RV32-NEXT: and a1, a1, t0 8129; LMULMAX1-RV32-NEXT: mul a1, a1, a3 8130; LMULMAX1-RV32-NEXT: srli a1, a1, 24 8131; LMULMAX1-RV32-NEXT: .LBB7_9: 8132; LMULMAX1-RV32-NEXT: vslidedown.vi v25, v25, 1 8133; LMULMAX1-RV32-NEXT: vmv.x.s a2, v25 8134; LMULMAX1-RV32-NEXT: sw a1, 16(sp) 8135; LMULMAX1-RV32-NEXT: bnez a2, .LBB7_11 8136; LMULMAX1-RV32-NEXT: # %bb.10: 8137; LMULMAX1-RV32-NEXT: vsrl.vx v25, v25, a6 8138; LMULMAX1-RV32-NEXT: vmv.x.s a1, v25 8139; LMULMAX1-RV32-NEXT: addi a2, a1, -1 8140; LMULMAX1-RV32-NEXT: not a1, a1 8141; LMULMAX1-RV32-NEXT: and a1, a1, a2 8142; LMULMAX1-RV32-NEXT: srli a2, a1, 1 8143; LMULMAX1-RV32-NEXT: and a2, a2, a5 8144; LMULMAX1-RV32-NEXT: sub a1, a1, a2 8145; LMULMAX1-RV32-NEXT: and a2, a1, a4 8146; LMULMAX1-RV32-NEXT: srli a1, a1, 2 8147; LMULMAX1-RV32-NEXT: and a1, a1, a4 8148; LMULMAX1-RV32-NEXT: add a1, a2, a1 8149; LMULMAX1-RV32-NEXT: srli a2, a1, 4 8150; LMULMAX1-RV32-NEXT: add a1, a1, a2 8151; LMULMAX1-RV32-NEXT: and a1, a1, t0 8152; LMULMAX1-RV32-NEXT: mul a1, a1, a3 8153; LMULMAX1-RV32-NEXT: srli a1, a1, 24 8154; LMULMAX1-RV32-NEXT: addi a1, a1, 32 8155; LMULMAX1-RV32-NEXT: j .LBB7_12 8156; LMULMAX1-RV32-NEXT: .LBB7_11: 8157; LMULMAX1-RV32-NEXT: addi a1, a2, -1 8158; LMULMAX1-RV32-NEXT: not a2, a2 8159; LMULMAX1-RV32-NEXT: and a1, a2, a1 8160; LMULMAX1-RV32-NEXT: srli a2, a1, 1 8161; LMULMAX1-RV32-NEXT: and a2, a2, a5 8162; LMULMAX1-RV32-NEXT: sub a1, a1, a2 8163; LMULMAX1-RV32-NEXT: and a2, a1, a4 8164; LMULMAX1-RV32-NEXT: srli a1, a1, 2 8165; LMULMAX1-RV32-NEXT: and a1, a1, a4 8166; LMULMAX1-RV32-NEXT: add a1, a2, a1 8167; LMULMAX1-RV32-NEXT: srli a2, a1, 4 8168; LMULMAX1-RV32-NEXT: add a1, a1, a2 8169; LMULMAX1-RV32-NEXT: and a1, a1, t0 8170; LMULMAX1-RV32-NEXT: mul a1, a1, a3 8171; LMULMAX1-RV32-NEXT: srli a1, a1, 24 8172; LMULMAX1-RV32-NEXT: .LBB7_12: 8173; LMULMAX1-RV32-NEXT: sw a1, 24(sp) 8174; LMULMAX1-RV32-NEXT: vsetivli zero, 4, e32, m1, ta, mu 8175; LMULMAX1-RV32-NEXT: addi a1, sp, 16 8176; LMULMAX1-RV32-NEXT: vle32.v v25, (a1) 8177; LMULMAX1-RV32-NEXT: addi a1, sp, 32 8178; LMULMAX1-RV32-NEXT: vle32.v v26, (a1) 8179; LMULMAX1-RV32-NEXT: vsetivli zero, 2, e64, m1, ta, mu 8180; LMULMAX1-RV32-NEXT: vse64.v v25, (a0) 8181; LMULMAX1-RV32-NEXT: vse64.v v26, (a7) 8182; LMULMAX1-RV32-NEXT: addi sp, sp, 48 8183; LMULMAX1-RV32-NEXT: ret 8184; 8185; LMULMAX1-RV64-LABEL: cttz_v4i64: 8186; LMULMAX1-RV64: # %bb.0: 8187; LMULMAX1-RV64-NEXT: vsetivli zero, 2, e64, m1, ta, mu 8188; LMULMAX1-RV64-NEXT: addi a6, a0, 16 8189; LMULMAX1-RV64-NEXT: vle64.v v26, (a6) 8190; LMULMAX1-RV64-NEXT: vle64.v v25, (a0) 8191; LMULMAX1-RV64-NEXT: vsetivli zero, 1, e64, m1, ta, mu 8192; LMULMAX1-RV64-NEXT: vslidedown.vi v27, v26, 1 8193; LMULMAX1-RV64-NEXT: vmv.x.s a2, v27 8194; LMULMAX1-RV64-NEXT: addi a3, a2, -1 8195; LMULMAX1-RV64-NEXT: not a2, a2 8196; LMULMAX1-RV64-NEXT: and a3, a2, a3 8197; LMULMAX1-RV64-NEXT: srli a4, a3, 1 8198; LMULMAX1-RV64-NEXT: lui a2, 21845 8199; LMULMAX1-RV64-NEXT: addiw a2, a2, 1365 8200; LMULMAX1-RV64-NEXT: slli a2, a2, 12 8201; LMULMAX1-RV64-NEXT: addi a2, a2, 1365 8202; LMULMAX1-RV64-NEXT: slli a2, a2, 12 8203; LMULMAX1-RV64-NEXT: addi a2, a2, 1365 8204; LMULMAX1-RV64-NEXT: slli a2, a2, 12 8205; LMULMAX1-RV64-NEXT: addi a7, a2, 1365 8206; LMULMAX1-RV64-NEXT: and a4, a4, a7 8207; LMULMAX1-RV64-NEXT: sub a4, a3, a4 8208; LMULMAX1-RV64-NEXT: lui a3, 13107 8209; LMULMAX1-RV64-NEXT: addiw a3, a3, 819 8210; LMULMAX1-RV64-NEXT: slli a3, a3, 12 8211; LMULMAX1-RV64-NEXT: addi a3, a3, 819 8212; LMULMAX1-RV64-NEXT: slli a3, a3, 12 8213; LMULMAX1-RV64-NEXT: addi a3, a3, 819 8214; LMULMAX1-RV64-NEXT: slli a3, a3, 12 8215; LMULMAX1-RV64-NEXT: addi a3, a3, 819 8216; LMULMAX1-RV64-NEXT: and a5, a4, a3 8217; LMULMAX1-RV64-NEXT: srli a4, a4, 2 8218; LMULMAX1-RV64-NEXT: and a4, a4, a3 8219; LMULMAX1-RV64-NEXT: add a4, a5, a4 8220; LMULMAX1-RV64-NEXT: srli a5, a4, 4 8221; LMULMAX1-RV64-NEXT: add a4, a4, a5 8222; LMULMAX1-RV64-NEXT: lui a5, 3855 8223; LMULMAX1-RV64-NEXT: addiw a5, a5, 241 8224; LMULMAX1-RV64-NEXT: slli a5, a5, 12 8225; LMULMAX1-RV64-NEXT: addi a5, a5, -241 8226; LMULMAX1-RV64-NEXT: slli a5, a5, 12 8227; LMULMAX1-RV64-NEXT: addi a5, a5, 241 8228; LMULMAX1-RV64-NEXT: slli a5, a5, 12 8229; LMULMAX1-RV64-NEXT: addi a5, a5, -241 8230; LMULMAX1-RV64-NEXT: and a4, a4, a5 8231; LMULMAX1-RV64-NEXT: lui a1, 4112 8232; LMULMAX1-RV64-NEXT: addiw a1, a1, 257 8233; LMULMAX1-RV64-NEXT: slli a1, a1, 16 8234; LMULMAX1-RV64-NEXT: addi a1, a1, 257 8235; LMULMAX1-RV64-NEXT: slli a1, a1, 16 8236; LMULMAX1-RV64-NEXT: addi a1, a1, 257 8237; LMULMAX1-RV64-NEXT: mul a4, a4, a1 8238; LMULMAX1-RV64-NEXT: srli a4, a4, 56 8239; LMULMAX1-RV64-NEXT: vsetivli zero, 2, e64, m1, ta, mu 8240; LMULMAX1-RV64-NEXT: vmv.v.x v27, a4 8241; LMULMAX1-RV64-NEXT: vmv.x.s a4, v26 8242; LMULMAX1-RV64-NEXT: addi a2, a4, -1 8243; LMULMAX1-RV64-NEXT: not a4, a4 8244; LMULMAX1-RV64-NEXT: and a2, a4, a2 8245; LMULMAX1-RV64-NEXT: srli a4, a2, 1 8246; LMULMAX1-RV64-NEXT: and a4, a4, a7 8247; LMULMAX1-RV64-NEXT: sub a2, a2, a4 8248; LMULMAX1-RV64-NEXT: and a4, a2, a3 8249; LMULMAX1-RV64-NEXT: srli a2, a2, 2 8250; LMULMAX1-RV64-NEXT: and a2, a2, a3 8251; LMULMAX1-RV64-NEXT: add a2, a4, a2 8252; LMULMAX1-RV64-NEXT: srli a4, a2, 4 8253; LMULMAX1-RV64-NEXT: add a2, a2, a4 8254; LMULMAX1-RV64-NEXT: and a2, a2, a5 8255; LMULMAX1-RV64-NEXT: mul a2, a2, a1 8256; LMULMAX1-RV64-NEXT: srli a2, a2, 56 8257; LMULMAX1-RV64-NEXT: vsetvli zero, zero, e64, m1, tu, mu 8258; LMULMAX1-RV64-NEXT: vmv.s.x v27, a2 8259; LMULMAX1-RV64-NEXT: vsetivli zero, 1, e64, m1, ta, mu 8260; LMULMAX1-RV64-NEXT: vslidedown.vi v26, v25, 1 8261; LMULMAX1-RV64-NEXT: vmv.x.s a2, v26 8262; LMULMAX1-RV64-NEXT: addi a4, a2, -1 8263; LMULMAX1-RV64-NEXT: not a2, a2 8264; LMULMAX1-RV64-NEXT: and a2, a2, a4 8265; LMULMAX1-RV64-NEXT: srli a4, a2, 1 8266; LMULMAX1-RV64-NEXT: and a4, a4, a7 8267; LMULMAX1-RV64-NEXT: sub a2, a2, a4 8268; LMULMAX1-RV64-NEXT: and a4, a2, a3 8269; LMULMAX1-RV64-NEXT: srli a2, a2, 2 8270; LMULMAX1-RV64-NEXT: and a2, a2, a3 8271; LMULMAX1-RV64-NEXT: add a2, a4, a2 8272; LMULMAX1-RV64-NEXT: srli a4, a2, 4 8273; LMULMAX1-RV64-NEXT: add a2, a2, a4 8274; LMULMAX1-RV64-NEXT: and a2, a2, a5 8275; LMULMAX1-RV64-NEXT: mul a2, a2, a1 8276; LMULMAX1-RV64-NEXT: srli a2, a2, 56 8277; LMULMAX1-RV64-NEXT: vsetivli zero, 2, e64, m1, ta, mu 8278; LMULMAX1-RV64-NEXT: vmv.v.x v26, a2 8279; LMULMAX1-RV64-NEXT: vmv.x.s a2, v25 8280; LMULMAX1-RV64-NEXT: addi a4, a2, -1 8281; LMULMAX1-RV64-NEXT: not a2, a2 8282; LMULMAX1-RV64-NEXT: and a2, a2, a4 8283; LMULMAX1-RV64-NEXT: srli a4, a2, 1 8284; LMULMAX1-RV64-NEXT: and a4, a4, a7 8285; LMULMAX1-RV64-NEXT: sub a2, a2, a4 8286; LMULMAX1-RV64-NEXT: and a4, a2, a3 8287; LMULMAX1-RV64-NEXT: srli a2, a2, 2 8288; LMULMAX1-RV64-NEXT: and a2, a2, a3 8289; LMULMAX1-RV64-NEXT: add a2, a4, a2 8290; LMULMAX1-RV64-NEXT: srli a3, a2, 4 8291; LMULMAX1-RV64-NEXT: add a2, a2, a3 8292; LMULMAX1-RV64-NEXT: and a2, a2, a5 8293; LMULMAX1-RV64-NEXT: mul a1, a2, a1 8294; LMULMAX1-RV64-NEXT: srli a1, a1, 56 8295; LMULMAX1-RV64-NEXT: vsetvli zero, zero, e64, m1, tu, mu 8296; LMULMAX1-RV64-NEXT: vmv.s.x v26, a1 8297; LMULMAX1-RV64-NEXT: vsetvli zero, zero, e64, m1, ta, mu 8298; LMULMAX1-RV64-NEXT: vse64.v v26, (a0) 8299; LMULMAX1-RV64-NEXT: vse64.v v27, (a6) 8300; LMULMAX1-RV64-NEXT: ret 8301 %a = load <4 x i64>, <4 x i64>* %x 8302 %b = load <4 x i64>, <4 x i64>* %y 8303 %c = call <4 x i64> @llvm.cttz.v4i64(<4 x i64> %a, i1 false) 8304 store <4 x i64> %c, <4 x i64>* %x 8305 ret void 8306} 8307declare <4 x i64> @llvm.cttz.v4i64(<4 x i64>, i1) 8308