1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -mtriple=riscv64 -verify-machineinstrs < %s | FileCheck %s -check-prefixes=RV64I 3; RUN: llc -mtriple=riscv32 -verify-machineinstrs < %s | FileCheck %s -check-prefixes=RV32I 4 5define void @lshr_4bytes(ptr %src.ptr, ptr %byteOff.ptr, ptr %dst) nounwind { 6; RV64I-LABEL: lshr_4bytes: 7; RV64I: # %bb.0: 8; RV64I-NEXT: lbu a3, 0(a0) 9; RV64I-NEXT: lbu a4, 1(a0) 10; RV64I-NEXT: lbu a5, 2(a0) 11; RV64I-NEXT: lb a0, 3(a0) 12; RV64I-NEXT: lbu a1, 0(a1) 13; RV64I-NEXT: slli a4, a4, 8 14; RV64I-NEXT: or a3, a4, a3 15; RV64I-NEXT: slli a5, a5, 16 16; RV64I-NEXT: slli a0, a0, 24 17; RV64I-NEXT: slli a1, a1, 3 18; RV64I-NEXT: or a0, a0, a5 19; RV64I-NEXT: or a0, a0, a3 20; RV64I-NEXT: srlw a0, a0, a1 21; RV64I-NEXT: srli a1, a0, 16 22; RV64I-NEXT: srli a3, a0, 24 23; RV64I-NEXT: srli a4, a0, 8 24; RV64I-NEXT: sb a0, 0(a2) 25; RV64I-NEXT: sb a4, 1(a2) 26; RV64I-NEXT: sb a1, 2(a2) 27; RV64I-NEXT: sb a3, 3(a2) 28; RV64I-NEXT: ret 29; 30; RV32I-LABEL: lshr_4bytes: 31; RV32I: # %bb.0: 32; RV32I-NEXT: lbu a3, 1(a0) 33; RV32I-NEXT: lbu a4, 2(a0) 34; RV32I-NEXT: lbu a5, 3(a0) 35; RV32I-NEXT: lbu a0, 0(a0) 36; RV32I-NEXT: slli a3, a3, 8 37; RV32I-NEXT: slli a4, a4, 16 38; RV32I-NEXT: slli a5, a5, 24 39; RV32I-NEXT: or a0, a3, a0 40; RV32I-NEXT: lbu a3, 0(a1) 41; RV32I-NEXT: lbu a6, 1(a1) 42; RV32I-NEXT: or a4, a5, a4 43; RV32I-NEXT: lbu a5, 2(a1) 44; RV32I-NEXT: lbu a1, 3(a1) 45; RV32I-NEXT: slli a6, a6, 8 46; RV32I-NEXT: or a3, a6, a3 47; RV32I-NEXT: slli a5, a5, 16 48; RV32I-NEXT: slli a1, a1, 24 49; RV32I-NEXT: or a1, a1, a5 50; RV32I-NEXT: or a0, a4, a0 51; RV32I-NEXT: or a1, a1, a3 52; RV32I-NEXT: slli a1, a1, 3 53; RV32I-NEXT: srl a0, a0, a1 54; RV32I-NEXT: srli a1, a0, 16 55; RV32I-NEXT: srli a3, a0, 24 56; RV32I-NEXT: srli a4, a0, 8 57; RV32I-NEXT: sb a0, 0(a2) 58; RV32I-NEXT: sb a4, 1(a2) 59; RV32I-NEXT: sb a1, 2(a2) 60; RV32I-NEXT: sb a3, 3(a2) 61; RV32I-NEXT: ret 62 %src = load i32, ptr %src.ptr, align 1 63 %byteOff = load i32, ptr %byteOff.ptr, align 1 64 %bitOff = shl i32 %byteOff, 3 65 %res = lshr i32 %src, %bitOff 66 store i32 %res, ptr %dst, align 1 67 ret void 68} 69define void @shl_4bytes(ptr %src.ptr, ptr %byteOff.ptr, ptr %dst) nounwind { 70; RV64I-LABEL: shl_4bytes: 71; RV64I: # %bb.0: 72; RV64I-NEXT: lbu a3, 0(a0) 73; RV64I-NEXT: lbu a4, 1(a0) 74; RV64I-NEXT: lbu a5, 2(a0) 75; RV64I-NEXT: lb a0, 3(a0) 76; RV64I-NEXT: lbu a1, 0(a1) 77; RV64I-NEXT: slli a4, a4, 8 78; RV64I-NEXT: or a3, a4, a3 79; RV64I-NEXT: slli a5, a5, 16 80; RV64I-NEXT: slli a0, a0, 24 81; RV64I-NEXT: slli a1, a1, 3 82; RV64I-NEXT: or a0, a0, a5 83; RV64I-NEXT: or a0, a0, a3 84; RV64I-NEXT: sllw a0, a0, a1 85; RV64I-NEXT: srli a1, a0, 16 86; RV64I-NEXT: srli a3, a0, 24 87; RV64I-NEXT: srli a4, a0, 8 88; RV64I-NEXT: sb a0, 0(a2) 89; RV64I-NEXT: sb a4, 1(a2) 90; RV64I-NEXT: sb a1, 2(a2) 91; RV64I-NEXT: sb a3, 3(a2) 92; RV64I-NEXT: ret 93; 94; RV32I-LABEL: shl_4bytes: 95; RV32I: # %bb.0: 96; RV32I-NEXT: lbu a3, 1(a0) 97; RV32I-NEXT: lbu a4, 2(a0) 98; RV32I-NEXT: lbu a5, 3(a0) 99; RV32I-NEXT: lbu a0, 0(a0) 100; RV32I-NEXT: slli a3, a3, 8 101; RV32I-NEXT: slli a4, a4, 16 102; RV32I-NEXT: slli a5, a5, 24 103; RV32I-NEXT: or a0, a3, a0 104; RV32I-NEXT: lbu a3, 0(a1) 105; RV32I-NEXT: lbu a6, 1(a1) 106; RV32I-NEXT: or a4, a5, a4 107; RV32I-NEXT: lbu a5, 2(a1) 108; RV32I-NEXT: lbu a1, 3(a1) 109; RV32I-NEXT: slli a6, a6, 8 110; RV32I-NEXT: or a3, a6, a3 111; RV32I-NEXT: slli a5, a5, 16 112; RV32I-NEXT: slli a1, a1, 24 113; RV32I-NEXT: or a1, a1, a5 114; RV32I-NEXT: or a0, a4, a0 115; RV32I-NEXT: or a1, a1, a3 116; RV32I-NEXT: slli a1, a1, 3 117; RV32I-NEXT: sll a0, a0, a1 118; RV32I-NEXT: srli a1, a0, 16 119; RV32I-NEXT: srli a3, a0, 24 120; RV32I-NEXT: srli a4, a0, 8 121; RV32I-NEXT: sb a0, 0(a2) 122; RV32I-NEXT: sb a4, 1(a2) 123; RV32I-NEXT: sb a1, 2(a2) 124; RV32I-NEXT: sb a3, 3(a2) 125; RV32I-NEXT: ret 126 %src = load i32, ptr %src.ptr, align 1 127 %byteOff = load i32, ptr %byteOff.ptr, align 1 128 %bitOff = shl i32 %byteOff, 3 129 %res = shl i32 %src, %bitOff 130 store i32 %res, ptr %dst, align 1 131 ret void 132} 133define void @ashr_4bytes(ptr %src.ptr, ptr %byteOff.ptr, ptr %dst) nounwind { 134; RV64I-LABEL: ashr_4bytes: 135; RV64I: # %bb.0: 136; RV64I-NEXT: lbu a3, 0(a0) 137; RV64I-NEXT: lbu a4, 1(a0) 138; RV64I-NEXT: lbu a5, 2(a0) 139; RV64I-NEXT: lb a0, 3(a0) 140; RV64I-NEXT: lbu a1, 0(a1) 141; RV64I-NEXT: slli a4, a4, 8 142; RV64I-NEXT: or a3, a4, a3 143; RV64I-NEXT: slli a5, a5, 16 144; RV64I-NEXT: slli a0, a0, 24 145; RV64I-NEXT: slli a1, a1, 3 146; RV64I-NEXT: or a0, a0, a5 147; RV64I-NEXT: or a0, a0, a3 148; RV64I-NEXT: sraw a0, a0, a1 149; RV64I-NEXT: srli a1, a0, 16 150; RV64I-NEXT: srli a3, a0, 24 151; RV64I-NEXT: srli a4, a0, 8 152; RV64I-NEXT: sb a0, 0(a2) 153; RV64I-NEXT: sb a4, 1(a2) 154; RV64I-NEXT: sb a1, 2(a2) 155; RV64I-NEXT: sb a3, 3(a2) 156; RV64I-NEXT: ret 157; 158; RV32I-LABEL: ashr_4bytes: 159; RV32I: # %bb.0: 160; RV32I-NEXT: lbu a3, 1(a0) 161; RV32I-NEXT: lbu a4, 2(a0) 162; RV32I-NEXT: lbu a5, 3(a0) 163; RV32I-NEXT: lbu a0, 0(a0) 164; RV32I-NEXT: slli a3, a3, 8 165; RV32I-NEXT: slli a4, a4, 16 166; RV32I-NEXT: slli a5, a5, 24 167; RV32I-NEXT: or a0, a3, a0 168; RV32I-NEXT: lbu a3, 0(a1) 169; RV32I-NEXT: lbu a6, 1(a1) 170; RV32I-NEXT: or a4, a5, a4 171; RV32I-NEXT: lbu a5, 2(a1) 172; RV32I-NEXT: lbu a1, 3(a1) 173; RV32I-NEXT: slli a6, a6, 8 174; RV32I-NEXT: or a3, a6, a3 175; RV32I-NEXT: slli a5, a5, 16 176; RV32I-NEXT: slli a1, a1, 24 177; RV32I-NEXT: or a1, a1, a5 178; RV32I-NEXT: or a0, a4, a0 179; RV32I-NEXT: or a1, a1, a3 180; RV32I-NEXT: slli a1, a1, 3 181; RV32I-NEXT: sra a0, a0, a1 182; RV32I-NEXT: srli a1, a0, 16 183; RV32I-NEXT: srli a3, a0, 24 184; RV32I-NEXT: srli a4, a0, 8 185; RV32I-NEXT: sb a0, 0(a2) 186; RV32I-NEXT: sb a4, 1(a2) 187; RV32I-NEXT: sb a1, 2(a2) 188; RV32I-NEXT: sb a3, 3(a2) 189; RV32I-NEXT: ret 190 %src = load i32, ptr %src.ptr, align 1 191 %byteOff = load i32, ptr %byteOff.ptr, align 1 192 %bitOff = shl i32 %byteOff, 3 193 %res = ashr i32 %src, %bitOff 194 store i32 %res, ptr %dst, align 1 195 ret void 196} 197 198define void @lshr_8bytes(ptr %src.ptr, ptr %byteOff.ptr, ptr %dst) nounwind { 199; RV64I-LABEL: lshr_8bytes: 200; RV64I: # %bb.0: 201; RV64I-NEXT: lbu a3, 0(a0) 202; RV64I-NEXT: lbu a4, 1(a0) 203; RV64I-NEXT: lbu a5, 2(a0) 204; RV64I-NEXT: lbu a6, 3(a0) 205; RV64I-NEXT: lbu a7, 4(a0) 206; RV64I-NEXT: lbu t0, 5(a0) 207; RV64I-NEXT: lbu t1, 6(a0) 208; RV64I-NEXT: lbu a0, 7(a0) 209; RV64I-NEXT: slli a4, a4, 8 210; RV64I-NEXT: slli a5, a5, 16 211; RV64I-NEXT: slli a6, a6, 24 212; RV64I-NEXT: slli t0, t0, 8 213; RV64I-NEXT: or a3, a4, a3 214; RV64I-NEXT: or a4, a6, a5 215; RV64I-NEXT: or a5, t0, a7 216; RV64I-NEXT: lbu a6, 4(a1) 217; RV64I-NEXT: lbu a7, 5(a1) 218; RV64I-NEXT: lbu t0, 6(a1) 219; RV64I-NEXT: lbu t2, 7(a1) 220; RV64I-NEXT: slli t1, t1, 16 221; RV64I-NEXT: slli a0, a0, 24 222; RV64I-NEXT: slli a7, a7, 8 223; RV64I-NEXT: slli t0, t0, 16 224; RV64I-NEXT: slli t2, t2, 24 225; RV64I-NEXT: or a0, a0, t1 226; RV64I-NEXT: or a6, a7, a6 227; RV64I-NEXT: lbu a7, 0(a1) 228; RV64I-NEXT: lbu t1, 1(a1) 229; RV64I-NEXT: or t0, t2, t0 230; RV64I-NEXT: lbu t2, 2(a1) 231; RV64I-NEXT: lbu a1, 3(a1) 232; RV64I-NEXT: slli t1, t1, 8 233; RV64I-NEXT: or a7, t1, a7 234; RV64I-NEXT: slli t2, t2, 16 235; RV64I-NEXT: slli a1, a1, 24 236; RV64I-NEXT: or a1, a1, t2 237; RV64I-NEXT: or a3, a4, a3 238; RV64I-NEXT: or a0, a0, a5 239; RV64I-NEXT: or a4, t0, a6 240; RV64I-NEXT: or a1, a1, a7 241; RV64I-NEXT: slli a0, a0, 32 242; RV64I-NEXT: slli a1, a1, 3 243; RV64I-NEXT: slli a4, a4, 35 244; RV64I-NEXT: or a0, a0, a3 245; RV64I-NEXT: or a1, a4, a1 246; RV64I-NEXT: srl a0, a0, a1 247; RV64I-NEXT: srli a1, a0, 48 248; RV64I-NEXT: srli a3, a0, 56 249; RV64I-NEXT: srli a4, a0, 32 250; RV64I-NEXT: srli a5, a0, 40 251; RV64I-NEXT: srli a6, a0, 16 252; RV64I-NEXT: srli a7, a0, 24 253; RV64I-NEXT: srli t0, a0, 8 254; RV64I-NEXT: sb a4, 4(a2) 255; RV64I-NEXT: sb a5, 5(a2) 256; RV64I-NEXT: sb a1, 6(a2) 257; RV64I-NEXT: sb a3, 7(a2) 258; RV64I-NEXT: sb a0, 0(a2) 259; RV64I-NEXT: sb t0, 1(a2) 260; RV64I-NEXT: sb a6, 2(a2) 261; RV64I-NEXT: sb a7, 3(a2) 262; RV64I-NEXT: ret 263; 264; RV32I-LABEL: lshr_8bytes: 265; RV32I: # %bb.0: 266; RV32I-NEXT: lbu a3, 5(a0) 267; RV32I-NEXT: lbu a4, 6(a0) 268; RV32I-NEXT: lbu a5, 7(a0) 269; RV32I-NEXT: lbu a6, 4(a0) 270; RV32I-NEXT: slli a3, a3, 8 271; RV32I-NEXT: slli a4, a4, 16 272; RV32I-NEXT: slli a5, a5, 24 273; RV32I-NEXT: or a3, a3, a6 274; RV32I-NEXT: lbu a6, 0(a1) 275; RV32I-NEXT: lbu a7, 1(a1) 276; RV32I-NEXT: or a4, a5, a4 277; RV32I-NEXT: lbu a5, 2(a1) 278; RV32I-NEXT: lbu a1, 3(a1) 279; RV32I-NEXT: slli a7, a7, 8 280; RV32I-NEXT: or a6, a7, a6 281; RV32I-NEXT: slli a5, a5, 16 282; RV32I-NEXT: slli a1, a1, 24 283; RV32I-NEXT: or a1, a1, a5 284; RV32I-NEXT: or a5, a4, a3 285; RV32I-NEXT: or a4, a1, a6 286; RV32I-NEXT: slli a4, a4, 3 287; RV32I-NEXT: addi a3, a4, -32 288; RV32I-NEXT: srl a1, a5, a4 289; RV32I-NEXT: bltz a3, .LBB3_2 290; RV32I-NEXT: # %bb.1: 291; RV32I-NEXT: mv a0, a1 292; RV32I-NEXT: j .LBB3_3 293; RV32I-NEXT: .LBB3_2: 294; RV32I-NEXT: lbu a6, 1(a0) 295; RV32I-NEXT: lbu a7, 0(a0) 296; RV32I-NEXT: lbu t0, 2(a0) 297; RV32I-NEXT: lbu a0, 3(a0) 298; RV32I-NEXT: slli a6, a6, 8 299; RV32I-NEXT: or a6, a6, a7 300; RV32I-NEXT: slli a5, a5, 1 301; RV32I-NEXT: slli t0, t0, 16 302; RV32I-NEXT: slli a0, a0, 24 303; RV32I-NEXT: or a0, a0, t0 304; RV32I-NEXT: not a7, a4 305; RV32I-NEXT: or a0, a0, a6 306; RV32I-NEXT: srl a0, a0, a4 307; RV32I-NEXT: sll a4, a5, a7 308; RV32I-NEXT: or a0, a0, a4 309; RV32I-NEXT: .LBB3_3: 310; RV32I-NEXT: srai a3, a3, 31 311; RV32I-NEXT: srli a4, a0, 16 312; RV32I-NEXT: srli a5, a0, 24 313; RV32I-NEXT: and a1, a3, a1 314; RV32I-NEXT: srli a3, a1, 16 315; RV32I-NEXT: srli a6, a1, 24 316; RV32I-NEXT: srli a7, a1, 8 317; RV32I-NEXT: sb a1, 4(a2) 318; RV32I-NEXT: sb a7, 5(a2) 319; RV32I-NEXT: sb a3, 6(a2) 320; RV32I-NEXT: sb a6, 7(a2) 321; RV32I-NEXT: srli a1, a0, 8 322; RV32I-NEXT: sb a0, 0(a2) 323; RV32I-NEXT: sb a1, 1(a2) 324; RV32I-NEXT: sb a4, 2(a2) 325; RV32I-NEXT: sb a5, 3(a2) 326; RV32I-NEXT: ret 327 %src = load i64, ptr %src.ptr, align 1 328 %byteOff = load i64, ptr %byteOff.ptr, align 1 329 %bitOff = shl i64 %byteOff, 3 330 %res = lshr i64 %src, %bitOff 331 store i64 %res, ptr %dst, align 1 332 ret void 333} 334define void @shl_8bytes(ptr %src.ptr, ptr %byteOff.ptr, ptr %dst) nounwind { 335; RV64I-LABEL: shl_8bytes: 336; RV64I: # %bb.0: 337; RV64I-NEXT: lbu a3, 0(a0) 338; RV64I-NEXT: lbu a4, 1(a0) 339; RV64I-NEXT: lbu a5, 2(a0) 340; RV64I-NEXT: lbu a6, 3(a0) 341; RV64I-NEXT: lbu a7, 4(a0) 342; RV64I-NEXT: lbu t0, 5(a0) 343; RV64I-NEXT: lbu t1, 6(a0) 344; RV64I-NEXT: lbu a0, 7(a0) 345; RV64I-NEXT: slli a4, a4, 8 346; RV64I-NEXT: slli a5, a5, 16 347; RV64I-NEXT: slli a6, a6, 24 348; RV64I-NEXT: slli t0, t0, 8 349; RV64I-NEXT: or a3, a4, a3 350; RV64I-NEXT: or a4, a6, a5 351; RV64I-NEXT: or a5, t0, a7 352; RV64I-NEXT: lbu a6, 4(a1) 353; RV64I-NEXT: lbu a7, 5(a1) 354; RV64I-NEXT: lbu t0, 6(a1) 355; RV64I-NEXT: lbu t2, 7(a1) 356; RV64I-NEXT: slli t1, t1, 16 357; RV64I-NEXT: slli a0, a0, 24 358; RV64I-NEXT: slli a7, a7, 8 359; RV64I-NEXT: slli t0, t0, 16 360; RV64I-NEXT: slli t2, t2, 24 361; RV64I-NEXT: or a0, a0, t1 362; RV64I-NEXT: or a6, a7, a6 363; RV64I-NEXT: lbu a7, 0(a1) 364; RV64I-NEXT: lbu t1, 1(a1) 365; RV64I-NEXT: or t0, t2, t0 366; RV64I-NEXT: lbu t2, 2(a1) 367; RV64I-NEXT: lbu a1, 3(a1) 368; RV64I-NEXT: slli t1, t1, 8 369; RV64I-NEXT: or a7, t1, a7 370; RV64I-NEXT: slli t2, t2, 16 371; RV64I-NEXT: slli a1, a1, 24 372; RV64I-NEXT: or a1, a1, t2 373; RV64I-NEXT: or a3, a4, a3 374; RV64I-NEXT: or a0, a0, a5 375; RV64I-NEXT: or a4, t0, a6 376; RV64I-NEXT: or a1, a1, a7 377; RV64I-NEXT: slli a0, a0, 32 378; RV64I-NEXT: slli a1, a1, 3 379; RV64I-NEXT: slli a4, a4, 35 380; RV64I-NEXT: or a0, a0, a3 381; RV64I-NEXT: or a1, a4, a1 382; RV64I-NEXT: sll a0, a0, a1 383; RV64I-NEXT: srli a1, a0, 48 384; RV64I-NEXT: srli a3, a0, 56 385; RV64I-NEXT: srli a4, a0, 32 386; RV64I-NEXT: srli a5, a0, 40 387; RV64I-NEXT: srli a6, a0, 16 388; RV64I-NEXT: srli a7, a0, 24 389; RV64I-NEXT: srli t0, a0, 8 390; RV64I-NEXT: sb a4, 4(a2) 391; RV64I-NEXT: sb a5, 5(a2) 392; RV64I-NEXT: sb a1, 6(a2) 393; RV64I-NEXT: sb a3, 7(a2) 394; RV64I-NEXT: sb a0, 0(a2) 395; RV64I-NEXT: sb t0, 1(a2) 396; RV64I-NEXT: sb a6, 2(a2) 397; RV64I-NEXT: sb a7, 3(a2) 398; RV64I-NEXT: ret 399; 400; RV32I-LABEL: shl_8bytes: 401; RV32I: # %bb.0: 402; RV32I-NEXT: lbu a3, 1(a0) 403; RV32I-NEXT: lbu a4, 2(a0) 404; RV32I-NEXT: lbu a5, 3(a0) 405; RV32I-NEXT: lbu a6, 0(a0) 406; RV32I-NEXT: slli a3, a3, 8 407; RV32I-NEXT: slli a4, a4, 16 408; RV32I-NEXT: slli a5, a5, 24 409; RV32I-NEXT: or a3, a3, a6 410; RV32I-NEXT: lbu a6, 0(a1) 411; RV32I-NEXT: lbu a7, 1(a1) 412; RV32I-NEXT: or a4, a5, a4 413; RV32I-NEXT: lbu a5, 2(a1) 414; RV32I-NEXT: lbu a1, 3(a1) 415; RV32I-NEXT: slli a7, a7, 8 416; RV32I-NEXT: or a6, a7, a6 417; RV32I-NEXT: slli a5, a5, 16 418; RV32I-NEXT: slli a1, a1, 24 419; RV32I-NEXT: or a1, a1, a5 420; RV32I-NEXT: or a5, a4, a3 421; RV32I-NEXT: or a4, a1, a6 422; RV32I-NEXT: slli a4, a4, 3 423; RV32I-NEXT: addi a3, a4, -32 424; RV32I-NEXT: sll a1, a5, a4 425; RV32I-NEXT: bltz a3, .LBB4_2 426; RV32I-NEXT: # %bb.1: 427; RV32I-NEXT: mv a0, a1 428; RV32I-NEXT: j .LBB4_3 429; RV32I-NEXT: .LBB4_2: 430; RV32I-NEXT: lbu a6, 5(a0) 431; RV32I-NEXT: lbu a7, 4(a0) 432; RV32I-NEXT: lbu t0, 6(a0) 433; RV32I-NEXT: lbu a0, 7(a0) 434; RV32I-NEXT: slli a6, a6, 8 435; RV32I-NEXT: or a6, a6, a7 436; RV32I-NEXT: srli a5, a5, 1 437; RV32I-NEXT: slli t0, t0, 16 438; RV32I-NEXT: slli a0, a0, 24 439; RV32I-NEXT: or a0, a0, t0 440; RV32I-NEXT: not a7, a4 441; RV32I-NEXT: or a0, a0, a6 442; RV32I-NEXT: sll a0, a0, a4 443; RV32I-NEXT: srl a4, a5, a7 444; RV32I-NEXT: or a0, a0, a4 445; RV32I-NEXT: .LBB4_3: 446; RV32I-NEXT: srai a3, a3, 31 447; RV32I-NEXT: srli a4, a0, 16 448; RV32I-NEXT: srli a5, a0, 24 449; RV32I-NEXT: and a1, a3, a1 450; RV32I-NEXT: srli a3, a1, 16 451; RV32I-NEXT: srli a6, a1, 24 452; RV32I-NEXT: srli a7, a1, 8 453; RV32I-NEXT: sb a1, 0(a2) 454; RV32I-NEXT: sb a7, 1(a2) 455; RV32I-NEXT: sb a3, 2(a2) 456; RV32I-NEXT: sb a6, 3(a2) 457; RV32I-NEXT: srli a1, a0, 8 458; RV32I-NEXT: sb a0, 4(a2) 459; RV32I-NEXT: sb a1, 5(a2) 460; RV32I-NEXT: sb a4, 6(a2) 461; RV32I-NEXT: sb a5, 7(a2) 462; RV32I-NEXT: ret 463 %src = load i64, ptr %src.ptr, align 1 464 %byteOff = load i64, ptr %byteOff.ptr, align 1 465 %bitOff = shl i64 %byteOff, 3 466 %res = shl i64 %src, %bitOff 467 store i64 %res, ptr %dst, align 1 468 ret void 469} 470define void @ashr_8bytes(ptr %src.ptr, ptr %byteOff.ptr, ptr %dst) nounwind { 471; RV64I-LABEL: ashr_8bytes: 472; RV64I: # %bb.0: 473; RV64I-NEXT: lbu a3, 0(a0) 474; RV64I-NEXT: lbu a4, 1(a0) 475; RV64I-NEXT: lbu a5, 2(a0) 476; RV64I-NEXT: lbu a6, 3(a0) 477; RV64I-NEXT: lbu a7, 4(a0) 478; RV64I-NEXT: lbu t0, 5(a0) 479; RV64I-NEXT: lbu t1, 6(a0) 480; RV64I-NEXT: lbu a0, 7(a0) 481; RV64I-NEXT: slli a4, a4, 8 482; RV64I-NEXT: slli a5, a5, 16 483; RV64I-NEXT: slli a6, a6, 24 484; RV64I-NEXT: slli t0, t0, 8 485; RV64I-NEXT: or a3, a4, a3 486; RV64I-NEXT: or a4, a6, a5 487; RV64I-NEXT: or a5, t0, a7 488; RV64I-NEXT: lbu a6, 4(a1) 489; RV64I-NEXT: lbu a7, 5(a1) 490; RV64I-NEXT: lbu t0, 6(a1) 491; RV64I-NEXT: lbu t2, 7(a1) 492; RV64I-NEXT: slli t1, t1, 16 493; RV64I-NEXT: slli a0, a0, 24 494; RV64I-NEXT: slli a7, a7, 8 495; RV64I-NEXT: slli t0, t0, 16 496; RV64I-NEXT: slli t2, t2, 24 497; RV64I-NEXT: or a0, a0, t1 498; RV64I-NEXT: or a6, a7, a6 499; RV64I-NEXT: lbu a7, 0(a1) 500; RV64I-NEXT: lbu t1, 1(a1) 501; RV64I-NEXT: or t0, t2, t0 502; RV64I-NEXT: lbu t2, 2(a1) 503; RV64I-NEXT: lbu a1, 3(a1) 504; RV64I-NEXT: slli t1, t1, 8 505; RV64I-NEXT: or a7, t1, a7 506; RV64I-NEXT: slli t2, t2, 16 507; RV64I-NEXT: slli a1, a1, 24 508; RV64I-NEXT: or a1, a1, t2 509; RV64I-NEXT: or a3, a4, a3 510; RV64I-NEXT: or a0, a0, a5 511; RV64I-NEXT: or a4, t0, a6 512; RV64I-NEXT: or a1, a1, a7 513; RV64I-NEXT: slli a0, a0, 32 514; RV64I-NEXT: slli a1, a1, 3 515; RV64I-NEXT: slli a4, a4, 35 516; RV64I-NEXT: or a0, a0, a3 517; RV64I-NEXT: or a1, a4, a1 518; RV64I-NEXT: sra a0, a0, a1 519; RV64I-NEXT: srli a1, a0, 48 520; RV64I-NEXT: srli a3, a0, 56 521; RV64I-NEXT: srli a4, a0, 32 522; RV64I-NEXT: srli a5, a0, 40 523; RV64I-NEXT: srli a6, a0, 16 524; RV64I-NEXT: srli a7, a0, 24 525; RV64I-NEXT: srli t0, a0, 8 526; RV64I-NEXT: sb a4, 4(a2) 527; RV64I-NEXT: sb a5, 5(a2) 528; RV64I-NEXT: sb a1, 6(a2) 529; RV64I-NEXT: sb a3, 7(a2) 530; RV64I-NEXT: sb a0, 0(a2) 531; RV64I-NEXT: sb t0, 1(a2) 532; RV64I-NEXT: sb a6, 2(a2) 533; RV64I-NEXT: sb a7, 3(a2) 534; RV64I-NEXT: ret 535; 536; RV32I-LABEL: ashr_8bytes: 537; RV32I: # %bb.0: 538; RV32I-NEXT: lbu a3, 5(a0) 539; RV32I-NEXT: lbu a4, 4(a0) 540; RV32I-NEXT: lbu a5, 6(a0) 541; RV32I-NEXT: lbu a6, 7(a0) 542; RV32I-NEXT: slli a3, a3, 8 543; RV32I-NEXT: lbu a7, 0(a1) 544; RV32I-NEXT: lbu t0, 1(a1) 545; RV32I-NEXT: or a3, a3, a4 546; RV32I-NEXT: lbu a4, 2(a1) 547; RV32I-NEXT: lbu a1, 3(a1) 548; RV32I-NEXT: slli t0, t0, 8 549; RV32I-NEXT: or a7, t0, a7 550; RV32I-NEXT: slli a4, a4, 16 551; RV32I-NEXT: slli a1, a1, 24 552; RV32I-NEXT: or a1, a1, a4 553; RV32I-NEXT: slli a4, a5, 16 554; RV32I-NEXT: slli a5, a6, 24 555; RV32I-NEXT: or a4, a5, a4 556; RV32I-NEXT: or a4, a4, a3 557; RV32I-NEXT: or a3, a1, a7 558; RV32I-NEXT: slli a3, a3, 3 559; RV32I-NEXT: addi a6, a3, -32 560; RV32I-NEXT: sra a1, a4, a3 561; RV32I-NEXT: bltz a6, .LBB5_2 562; RV32I-NEXT: # %bb.1: 563; RV32I-NEXT: srai a5, a5, 31 564; RV32I-NEXT: mv a0, a1 565; RV32I-NEXT: mv a1, a5 566; RV32I-NEXT: j .LBB5_3 567; RV32I-NEXT: .LBB5_2: 568; RV32I-NEXT: lbu a5, 1(a0) 569; RV32I-NEXT: lbu a6, 0(a0) 570; RV32I-NEXT: lbu a7, 2(a0) 571; RV32I-NEXT: lbu a0, 3(a0) 572; RV32I-NEXT: slli a5, a5, 8 573; RV32I-NEXT: or a5, a5, a6 574; RV32I-NEXT: slli a4, a4, 1 575; RV32I-NEXT: slli a7, a7, 16 576; RV32I-NEXT: slli a0, a0, 24 577; RV32I-NEXT: or a0, a0, a7 578; RV32I-NEXT: not a6, a3 579; RV32I-NEXT: or a0, a0, a5 580; RV32I-NEXT: srl a0, a0, a3 581; RV32I-NEXT: sll a3, a4, a6 582; RV32I-NEXT: or a0, a0, a3 583; RV32I-NEXT: .LBB5_3: 584; RV32I-NEXT: srli a3, a1, 16 585; RV32I-NEXT: srli a4, a1, 24 586; RV32I-NEXT: srli a5, a1, 8 587; RV32I-NEXT: srli a6, a0, 16 588; RV32I-NEXT: srli a7, a0, 24 589; RV32I-NEXT: sb a1, 4(a2) 590; RV32I-NEXT: sb a5, 5(a2) 591; RV32I-NEXT: sb a3, 6(a2) 592; RV32I-NEXT: sb a4, 7(a2) 593; RV32I-NEXT: srli a1, a0, 8 594; RV32I-NEXT: sb a0, 0(a2) 595; RV32I-NEXT: sb a1, 1(a2) 596; RV32I-NEXT: sb a6, 2(a2) 597; RV32I-NEXT: sb a7, 3(a2) 598; RV32I-NEXT: ret 599 %src = load i64, ptr %src.ptr, align 1 600 %byteOff = load i64, ptr %byteOff.ptr, align 1 601 %bitOff = shl i64 %byteOff, 3 602 %res = ashr i64 %src, %bitOff 603 store i64 %res, ptr %dst, align 1 604 ret void 605} 606 607define void @lshr_16bytes(ptr %src.ptr, ptr %byteOff.ptr, ptr %dst) nounwind { 608; RV64I-LABEL: lshr_16bytes: 609; RV64I: # %bb.0: 610; RV64I-NEXT: lbu a3, 8(a0) 611; RV64I-NEXT: lbu a4, 9(a0) 612; RV64I-NEXT: lbu a5, 10(a0) 613; RV64I-NEXT: lbu a6, 11(a0) 614; RV64I-NEXT: lbu a7, 12(a0) 615; RV64I-NEXT: lbu t0, 13(a0) 616; RV64I-NEXT: lbu t1, 14(a0) 617; RV64I-NEXT: lbu t2, 15(a0) 618; RV64I-NEXT: slli a4, a4, 8 619; RV64I-NEXT: slli a5, a5, 16 620; RV64I-NEXT: slli a6, a6, 24 621; RV64I-NEXT: slli t0, t0, 8 622; RV64I-NEXT: or a3, a4, a3 623; RV64I-NEXT: or a4, a6, a5 624; RV64I-NEXT: or a5, t0, a7 625; RV64I-NEXT: lbu a6, 4(a1) 626; RV64I-NEXT: lbu a7, 5(a1) 627; RV64I-NEXT: lbu t0, 6(a1) 628; RV64I-NEXT: lbu t3, 7(a1) 629; RV64I-NEXT: slli t1, t1, 16 630; RV64I-NEXT: slli t2, t2, 24 631; RV64I-NEXT: slli a7, a7, 8 632; RV64I-NEXT: slli t0, t0, 16 633; RV64I-NEXT: slli t3, t3, 24 634; RV64I-NEXT: or t1, t2, t1 635; RV64I-NEXT: or a6, a7, a6 636; RV64I-NEXT: lbu a7, 0(a1) 637; RV64I-NEXT: lbu t2, 1(a1) 638; RV64I-NEXT: or t0, t3, t0 639; RV64I-NEXT: lbu t3, 2(a1) 640; RV64I-NEXT: lbu a1, 3(a1) 641; RV64I-NEXT: slli t2, t2, 8 642; RV64I-NEXT: or a7, t2, a7 643; RV64I-NEXT: slli t3, t3, 16 644; RV64I-NEXT: slli a1, a1, 24 645; RV64I-NEXT: or a1, a1, t3 646; RV64I-NEXT: or a3, a4, a3 647; RV64I-NEXT: or a4, t1, a5 648; RV64I-NEXT: or a5, t0, a6 649; RV64I-NEXT: or a1, a1, a7 650; RV64I-NEXT: slli a4, a4, 32 651; RV64I-NEXT: slli a1, a1, 3 652; RV64I-NEXT: slli a6, a5, 35 653; RV64I-NEXT: or a5, a4, a3 654; RV64I-NEXT: or a4, a6, a1 655; RV64I-NEXT: addi a3, a4, -64 656; RV64I-NEXT: srl a1, a5, a4 657; RV64I-NEXT: bltz a3, .LBB6_2 658; RV64I-NEXT: # %bb.1: 659; RV64I-NEXT: mv a0, a1 660; RV64I-NEXT: j .LBB6_3 661; RV64I-NEXT: .LBB6_2: 662; RV64I-NEXT: lbu a6, 1(a0) 663; RV64I-NEXT: lbu a7, 2(a0) 664; RV64I-NEXT: lbu t0, 3(a0) 665; RV64I-NEXT: lbu t1, 0(a0) 666; RV64I-NEXT: slli a6, a6, 8 667; RV64I-NEXT: slli a7, a7, 16 668; RV64I-NEXT: slli t0, t0, 24 669; RV64I-NEXT: or a6, a6, t1 670; RV64I-NEXT: lbu t1, 4(a0) 671; RV64I-NEXT: lbu t2, 5(a0) 672; RV64I-NEXT: or a7, t0, a7 673; RV64I-NEXT: lbu t0, 6(a0) 674; RV64I-NEXT: lbu a0, 7(a0) 675; RV64I-NEXT: slli t2, t2, 8 676; RV64I-NEXT: or t1, t2, t1 677; RV64I-NEXT: slli t0, t0, 16 678; RV64I-NEXT: slli a0, a0, 24 679; RV64I-NEXT: or a0, a0, t0 680; RV64I-NEXT: or a6, a7, a6 681; RV64I-NEXT: not a7, a4 682; RV64I-NEXT: slli a5, a5, 1 683; RV64I-NEXT: or a0, a0, t1 684; RV64I-NEXT: slli a0, a0, 32 685; RV64I-NEXT: or a0, a0, a6 686; RV64I-NEXT: srl a0, a0, a4 687; RV64I-NEXT: sll a4, a5, a7 688; RV64I-NEXT: or a0, a0, a4 689; RV64I-NEXT: .LBB6_3: 690; RV64I-NEXT: srai a3, a3, 63 691; RV64I-NEXT: srli a4, a0, 56 692; RV64I-NEXT: srli a5, a0, 48 693; RV64I-NEXT: srli a6, a0, 40 694; RV64I-NEXT: srli a7, a0, 32 695; RV64I-NEXT: srli t0, a0, 24 696; RV64I-NEXT: srli t1, a0, 16 697; RV64I-NEXT: and a1, a3, a1 698; RV64I-NEXT: sb a7, 4(a2) 699; RV64I-NEXT: sb a6, 5(a2) 700; RV64I-NEXT: sb a5, 6(a2) 701; RV64I-NEXT: sb a4, 7(a2) 702; RV64I-NEXT: srli a3, a1, 56 703; RV64I-NEXT: srli a4, a1, 48 704; RV64I-NEXT: srli a5, a1, 40 705; RV64I-NEXT: srli a6, a1, 32 706; RV64I-NEXT: srli a7, a1, 24 707; RV64I-NEXT: srli t2, a1, 16 708; RV64I-NEXT: sb a6, 12(a2) 709; RV64I-NEXT: sb a5, 13(a2) 710; RV64I-NEXT: sb a4, 14(a2) 711; RV64I-NEXT: sb a3, 15(a2) 712; RV64I-NEXT: srli a3, a1, 8 713; RV64I-NEXT: sb a1, 8(a2) 714; RV64I-NEXT: sb a3, 9(a2) 715; RV64I-NEXT: sb t2, 10(a2) 716; RV64I-NEXT: sb a7, 11(a2) 717; RV64I-NEXT: srli a1, a0, 8 718; RV64I-NEXT: sb a0, 0(a2) 719; RV64I-NEXT: sb a1, 1(a2) 720; RV64I-NEXT: sb t1, 2(a2) 721; RV64I-NEXT: sb t0, 3(a2) 722; RV64I-NEXT: ret 723; 724; RV32I-LABEL: lshr_16bytes: 725; RV32I: # %bb.0: 726; RV32I-NEXT: addi sp, sp, -32 727; RV32I-NEXT: lbu a3, 0(a0) 728; RV32I-NEXT: lbu a4, 1(a0) 729; RV32I-NEXT: lbu a5, 2(a0) 730; RV32I-NEXT: lbu a6, 3(a0) 731; RV32I-NEXT: lbu a7, 4(a0) 732; RV32I-NEXT: lbu t0, 5(a0) 733; RV32I-NEXT: lbu t1, 6(a0) 734; RV32I-NEXT: lbu t2, 7(a0) 735; RV32I-NEXT: slli a4, a4, 8 736; RV32I-NEXT: slli a5, a5, 16 737; RV32I-NEXT: slli a6, a6, 24 738; RV32I-NEXT: or a3, a4, a3 739; RV32I-NEXT: or a4, a6, a5 740; RV32I-NEXT: lbu a5, 8(a0) 741; RV32I-NEXT: lbu a6, 9(a0) 742; RV32I-NEXT: lbu t3, 10(a0) 743; RV32I-NEXT: lbu t4, 11(a0) 744; RV32I-NEXT: slli t0, t0, 8 745; RV32I-NEXT: slli t1, t1, 16 746; RV32I-NEXT: slli t2, t2, 24 747; RV32I-NEXT: slli a6, a6, 8 748; RV32I-NEXT: or a7, t0, a7 749; RV32I-NEXT: or t0, t2, t1 750; RV32I-NEXT: or a5, a6, a5 751; RV32I-NEXT: lbu a6, 12(a0) 752; RV32I-NEXT: lbu t1, 13(a0) 753; RV32I-NEXT: lbu t2, 14(a0) 754; RV32I-NEXT: lbu a0, 15(a0) 755; RV32I-NEXT: slli t3, t3, 16 756; RV32I-NEXT: slli t4, t4, 24 757; RV32I-NEXT: slli t1, t1, 8 758; RV32I-NEXT: slli t2, t2, 16 759; RV32I-NEXT: slli a0, a0, 24 760; RV32I-NEXT: or t3, t4, t3 761; RV32I-NEXT: or a6, t1, a6 762; RV32I-NEXT: or a0, a0, t2 763; RV32I-NEXT: lbu t1, 0(a1) 764; RV32I-NEXT: lbu t2, 1(a1) 765; RV32I-NEXT: lbu t4, 2(a1) 766; RV32I-NEXT: lbu a1, 3(a1) 767; RV32I-NEXT: sw zero, 16(sp) 768; RV32I-NEXT: sw zero, 20(sp) 769; RV32I-NEXT: sw zero, 24(sp) 770; RV32I-NEXT: sw zero, 28(sp) 771; RV32I-NEXT: slli t2, t2, 8 772; RV32I-NEXT: or t1, t2, t1 773; RV32I-NEXT: mv t2, sp 774; RV32I-NEXT: slli t4, t4, 16 775; RV32I-NEXT: slli a1, a1, 24 776; RV32I-NEXT: or a1, a1, t4 777; RV32I-NEXT: or a3, a4, a3 778; RV32I-NEXT: or a4, t0, a7 779; RV32I-NEXT: or a5, t3, a5 780; RV32I-NEXT: or a0, a0, a6 781; RV32I-NEXT: or a1, a1, t1 782; RV32I-NEXT: sw a3, 0(sp) 783; RV32I-NEXT: sw a4, 4(sp) 784; RV32I-NEXT: sw a5, 8(sp) 785; RV32I-NEXT: sw a0, 12(sp) 786; RV32I-NEXT: slli a0, a1, 3 787; RV32I-NEXT: andi a1, a1, 12 788; RV32I-NEXT: add a1, t2, a1 789; RV32I-NEXT: andi a3, a0, 24 790; RV32I-NEXT: lw a4, 0(a1) 791; RV32I-NEXT: lw a5, 4(a1) 792; RV32I-NEXT: lw a6, 8(a1) 793; RV32I-NEXT: xori a3, a3, 31 794; RV32I-NEXT: lw a1, 12(a1) 795; RV32I-NEXT: srl a7, a5, a0 796; RV32I-NEXT: slli t0, a6, 1 797; RV32I-NEXT: srl a4, a4, a0 798; RV32I-NEXT: slli a5, a5, 1 799; RV32I-NEXT: srl a6, a6, a0 800; RV32I-NEXT: slli t1, a1, 1 801; RV32I-NEXT: srl a0, a1, a0 802; RV32I-NEXT: sll a1, t0, a3 803; RV32I-NEXT: sll a5, a5, a3 804; RV32I-NEXT: sll a3, t1, a3 805; RV32I-NEXT: srli t0, a0, 16 806; RV32I-NEXT: srli t1, a0, 24 807; RV32I-NEXT: srli t2, a0, 8 808; RV32I-NEXT: or a1, a7, a1 809; RV32I-NEXT: or a5, a4, a5 810; RV32I-NEXT: or a3, a6, a3 811; RV32I-NEXT: sb a0, 12(a2) 812; RV32I-NEXT: sb t2, 13(a2) 813; RV32I-NEXT: sb t0, 14(a2) 814; RV32I-NEXT: sb t1, 15(a2) 815; RV32I-NEXT: srli a0, a3, 16 816; RV32I-NEXT: srli t0, a3, 24 817; RV32I-NEXT: srli a3, a3, 8 818; RV32I-NEXT: srli t1, a5, 16 819; RV32I-NEXT: srli t2, a5, 24 820; RV32I-NEXT: srli a5, a5, 8 821; RV32I-NEXT: srli t3, a1, 16 822; RV32I-NEXT: srli t4, a1, 24 823; RV32I-NEXT: srli a1, a1, 8 824; RV32I-NEXT: sb a6, 8(a2) 825; RV32I-NEXT: sb a3, 9(a2) 826; RV32I-NEXT: sb a0, 10(a2) 827; RV32I-NEXT: sb t0, 11(a2) 828; RV32I-NEXT: sb a4, 0(a2) 829; RV32I-NEXT: sb a5, 1(a2) 830; RV32I-NEXT: sb t1, 2(a2) 831; RV32I-NEXT: sb t2, 3(a2) 832; RV32I-NEXT: sb a7, 4(a2) 833; RV32I-NEXT: sb a1, 5(a2) 834; RV32I-NEXT: sb t3, 6(a2) 835; RV32I-NEXT: sb t4, 7(a2) 836; RV32I-NEXT: addi sp, sp, 32 837; RV32I-NEXT: ret 838 %src = load i128, ptr %src.ptr, align 1 839 %byteOff = load i128, ptr %byteOff.ptr, align 1 840 %bitOff = shl i128 %byteOff, 3 841 %res = lshr i128 %src, %bitOff 842 store i128 %res, ptr %dst, align 1 843 ret void 844} 845 846define void @lshr_16bytes_wordOff(ptr %src.ptr, ptr %wordOff.ptr, ptr %dst) nounwind { 847; RV64I-LABEL: lshr_16bytes_wordOff: 848; RV64I: # %bb.0: 849; RV64I-NEXT: lbu a3, 8(a0) 850; RV64I-NEXT: lbu a4, 9(a0) 851; RV64I-NEXT: lbu a5, 10(a0) 852; RV64I-NEXT: lbu a6, 11(a0) 853; RV64I-NEXT: lbu a7, 12(a0) 854; RV64I-NEXT: lbu t0, 13(a0) 855; RV64I-NEXT: lbu t1, 14(a0) 856; RV64I-NEXT: lbu t2, 15(a0) 857; RV64I-NEXT: slli a4, a4, 8 858; RV64I-NEXT: slli a5, a5, 16 859; RV64I-NEXT: slli a6, a6, 24 860; RV64I-NEXT: slli t0, t0, 8 861; RV64I-NEXT: or a3, a4, a3 862; RV64I-NEXT: or a4, a6, a5 863; RV64I-NEXT: or a5, t0, a7 864; RV64I-NEXT: lbu a6, 4(a1) 865; RV64I-NEXT: lbu a7, 5(a1) 866; RV64I-NEXT: lbu t0, 6(a1) 867; RV64I-NEXT: lbu t3, 7(a1) 868; RV64I-NEXT: slli t1, t1, 16 869; RV64I-NEXT: slli t2, t2, 24 870; RV64I-NEXT: slli a7, a7, 8 871; RV64I-NEXT: slli t0, t0, 16 872; RV64I-NEXT: slli t3, t3, 24 873; RV64I-NEXT: or t1, t2, t1 874; RV64I-NEXT: or a6, a7, a6 875; RV64I-NEXT: lbu a7, 0(a1) 876; RV64I-NEXT: lbu t2, 1(a1) 877; RV64I-NEXT: or t0, t3, t0 878; RV64I-NEXT: lbu t3, 2(a1) 879; RV64I-NEXT: lbu a1, 3(a1) 880; RV64I-NEXT: slli t2, t2, 8 881; RV64I-NEXT: or a7, t2, a7 882; RV64I-NEXT: slli t3, t3, 16 883; RV64I-NEXT: slli a1, a1, 24 884; RV64I-NEXT: or a1, a1, t3 885; RV64I-NEXT: or a3, a4, a3 886; RV64I-NEXT: or a4, t1, a5 887; RV64I-NEXT: or a5, t0, a6 888; RV64I-NEXT: or a1, a1, a7 889; RV64I-NEXT: slli a4, a4, 32 890; RV64I-NEXT: slli a1, a1, 5 891; RV64I-NEXT: slli a6, a5, 37 892; RV64I-NEXT: or a5, a4, a3 893; RV64I-NEXT: or a4, a6, a1 894; RV64I-NEXT: addi a3, a4, -64 895; RV64I-NEXT: srl a1, a5, a4 896; RV64I-NEXT: bltz a3, .LBB7_2 897; RV64I-NEXT: # %bb.1: 898; RV64I-NEXT: mv a0, a1 899; RV64I-NEXT: j .LBB7_3 900; RV64I-NEXT: .LBB7_2: 901; RV64I-NEXT: lbu a6, 1(a0) 902; RV64I-NEXT: lbu a7, 2(a0) 903; RV64I-NEXT: lbu t0, 3(a0) 904; RV64I-NEXT: lbu t1, 0(a0) 905; RV64I-NEXT: slli a6, a6, 8 906; RV64I-NEXT: slli a7, a7, 16 907; RV64I-NEXT: slli t0, t0, 24 908; RV64I-NEXT: or a6, a6, t1 909; RV64I-NEXT: lbu t1, 4(a0) 910; RV64I-NEXT: lbu t2, 5(a0) 911; RV64I-NEXT: or a7, t0, a7 912; RV64I-NEXT: lbu t0, 6(a0) 913; RV64I-NEXT: lbu a0, 7(a0) 914; RV64I-NEXT: slli t2, t2, 8 915; RV64I-NEXT: or t1, t2, t1 916; RV64I-NEXT: slli t0, t0, 16 917; RV64I-NEXT: slli a0, a0, 24 918; RV64I-NEXT: or a0, a0, t0 919; RV64I-NEXT: or a6, a7, a6 920; RV64I-NEXT: not a7, a4 921; RV64I-NEXT: slli a5, a5, 1 922; RV64I-NEXT: or a0, a0, t1 923; RV64I-NEXT: slli a0, a0, 32 924; RV64I-NEXT: or a0, a0, a6 925; RV64I-NEXT: srl a0, a0, a4 926; RV64I-NEXT: sll a4, a5, a7 927; RV64I-NEXT: or a0, a0, a4 928; RV64I-NEXT: .LBB7_3: 929; RV64I-NEXT: srai a3, a3, 63 930; RV64I-NEXT: srli a4, a0, 56 931; RV64I-NEXT: srli a5, a0, 48 932; RV64I-NEXT: srli a6, a0, 40 933; RV64I-NEXT: srli a7, a0, 32 934; RV64I-NEXT: srli t0, a0, 24 935; RV64I-NEXT: srli t1, a0, 16 936; RV64I-NEXT: and a1, a3, a1 937; RV64I-NEXT: sb a7, 4(a2) 938; RV64I-NEXT: sb a6, 5(a2) 939; RV64I-NEXT: sb a5, 6(a2) 940; RV64I-NEXT: sb a4, 7(a2) 941; RV64I-NEXT: srli a3, a1, 56 942; RV64I-NEXT: srli a4, a1, 48 943; RV64I-NEXT: srli a5, a1, 40 944; RV64I-NEXT: srli a6, a1, 32 945; RV64I-NEXT: srli a7, a1, 24 946; RV64I-NEXT: srli t2, a1, 16 947; RV64I-NEXT: sb a6, 12(a2) 948; RV64I-NEXT: sb a5, 13(a2) 949; RV64I-NEXT: sb a4, 14(a2) 950; RV64I-NEXT: sb a3, 15(a2) 951; RV64I-NEXT: srli a3, a1, 8 952; RV64I-NEXT: sb a1, 8(a2) 953; RV64I-NEXT: sb a3, 9(a2) 954; RV64I-NEXT: sb t2, 10(a2) 955; RV64I-NEXT: sb a7, 11(a2) 956; RV64I-NEXT: srli a1, a0, 8 957; RV64I-NEXT: sb a0, 0(a2) 958; RV64I-NEXT: sb a1, 1(a2) 959; RV64I-NEXT: sb t1, 2(a2) 960; RV64I-NEXT: sb t0, 3(a2) 961; RV64I-NEXT: ret 962; 963; RV32I-LABEL: lshr_16bytes_wordOff: 964; RV32I: # %bb.0: 965; RV32I-NEXT: addi sp, sp, -32 966; RV32I-NEXT: lbu a3, 0(a0) 967; RV32I-NEXT: lbu a4, 1(a0) 968; RV32I-NEXT: lbu a5, 2(a0) 969; RV32I-NEXT: lbu a6, 3(a0) 970; RV32I-NEXT: lbu a7, 4(a0) 971; RV32I-NEXT: lbu t0, 5(a0) 972; RV32I-NEXT: lbu t1, 6(a0) 973; RV32I-NEXT: lbu t2, 7(a0) 974; RV32I-NEXT: lbu t3, 8(a0) 975; RV32I-NEXT: lbu t4, 9(a0) 976; RV32I-NEXT: lbu t5, 10(a0) 977; RV32I-NEXT: lbu t6, 11(a0) 978; RV32I-NEXT: slli a4, a4, 8 979; RV32I-NEXT: slli a5, a5, 16 980; RV32I-NEXT: slli a6, a6, 24 981; RV32I-NEXT: slli t0, t0, 8 982; RV32I-NEXT: or a3, a4, a3 983; RV32I-NEXT: or a4, a6, a5 984; RV32I-NEXT: or a5, t0, a7 985; RV32I-NEXT: lbu a6, 12(a0) 986; RV32I-NEXT: lbu a7, 13(a0) 987; RV32I-NEXT: lbu t0, 14(a0) 988; RV32I-NEXT: lbu a0, 15(a0) 989; RV32I-NEXT: lbu a1, 0(a1) 990; RV32I-NEXT: sw zero, 16(sp) 991; RV32I-NEXT: sw zero, 20(sp) 992; RV32I-NEXT: sw zero, 24(sp) 993; RV32I-NEXT: sw zero, 28(sp) 994; RV32I-NEXT: slli t1, t1, 16 995; RV32I-NEXT: slli t2, t2, 24 996; RV32I-NEXT: or t1, t2, t1 997; RV32I-NEXT: mv t2, sp 998; RV32I-NEXT: slli t4, t4, 8 999; RV32I-NEXT: slli t5, t5, 16 1000; RV32I-NEXT: slli t6, t6, 24 1001; RV32I-NEXT: slli a7, a7, 8 1002; RV32I-NEXT: slli t0, t0, 16 1003; RV32I-NEXT: slli a0, a0, 24 1004; RV32I-NEXT: slli a1, a1, 2 1005; RV32I-NEXT: or t3, t4, t3 1006; RV32I-NEXT: or t4, t6, t5 1007; RV32I-NEXT: or a6, a7, a6 1008; RV32I-NEXT: or a0, a0, t0 1009; RV32I-NEXT: andi a1, a1, 12 1010; RV32I-NEXT: or a3, a4, a3 1011; RV32I-NEXT: or a4, t1, a5 1012; RV32I-NEXT: or a5, t4, t3 1013; RV32I-NEXT: or a0, a0, a6 1014; RV32I-NEXT: add a1, t2, a1 1015; RV32I-NEXT: sw a3, 0(sp) 1016; RV32I-NEXT: sw a4, 4(sp) 1017; RV32I-NEXT: sw a5, 8(sp) 1018; RV32I-NEXT: sw a0, 12(sp) 1019; RV32I-NEXT: lw a0, 8(a1) 1020; RV32I-NEXT: lw a3, 4(a1) 1021; RV32I-NEXT: lw a4, 0(a1) 1022; RV32I-NEXT: lw a1, 12(a1) 1023; RV32I-NEXT: srli a5, a0, 16 1024; RV32I-NEXT: srli a6, a0, 24 1025; RV32I-NEXT: srli a7, a0, 8 1026; RV32I-NEXT: srli t0, a1, 16 1027; RV32I-NEXT: srli t1, a1, 24 1028; RV32I-NEXT: srli t2, a1, 8 1029; RV32I-NEXT: srli t3, a4, 16 1030; RV32I-NEXT: srli t4, a4, 24 1031; RV32I-NEXT: srli t5, a4, 8 1032; RV32I-NEXT: srli t6, a3, 16 1033; RV32I-NEXT: sb a0, 8(a2) 1034; RV32I-NEXT: sb a7, 9(a2) 1035; RV32I-NEXT: sb a5, 10(a2) 1036; RV32I-NEXT: sb a6, 11(a2) 1037; RV32I-NEXT: srli a0, a3, 24 1038; RV32I-NEXT: sb a1, 12(a2) 1039; RV32I-NEXT: sb t2, 13(a2) 1040; RV32I-NEXT: sb t0, 14(a2) 1041; RV32I-NEXT: sb t1, 15(a2) 1042; RV32I-NEXT: srli a1, a3, 8 1043; RV32I-NEXT: sb a4, 0(a2) 1044; RV32I-NEXT: sb t5, 1(a2) 1045; RV32I-NEXT: sb t3, 2(a2) 1046; RV32I-NEXT: sb t4, 3(a2) 1047; RV32I-NEXT: sb a3, 4(a2) 1048; RV32I-NEXT: sb a1, 5(a2) 1049; RV32I-NEXT: sb t6, 6(a2) 1050; RV32I-NEXT: sb a0, 7(a2) 1051; RV32I-NEXT: addi sp, sp, 32 1052; RV32I-NEXT: ret 1053 %src = load i128, ptr %src.ptr, align 1 1054 %wordOff = load i128, ptr %wordOff.ptr, align 1 1055 %bitOff = shl i128 %wordOff, 5 1056 %res = lshr i128 %src, %bitOff 1057 store i128 %res, ptr %dst, align 1 1058 ret void 1059} 1060 1061define void @shl_16bytes(ptr %src.ptr, ptr %byteOff.ptr, ptr %dst) nounwind { 1062; RV64I-LABEL: shl_16bytes: 1063; RV64I: # %bb.0: 1064; RV64I-NEXT: lbu a3, 0(a0) 1065; RV64I-NEXT: lbu a4, 1(a0) 1066; RV64I-NEXT: lbu a5, 2(a0) 1067; RV64I-NEXT: lbu a6, 3(a0) 1068; RV64I-NEXT: lbu a7, 4(a0) 1069; RV64I-NEXT: lbu t0, 5(a0) 1070; RV64I-NEXT: lbu t1, 6(a0) 1071; RV64I-NEXT: lbu t2, 7(a0) 1072; RV64I-NEXT: slli a4, a4, 8 1073; RV64I-NEXT: slli a5, a5, 16 1074; RV64I-NEXT: slli a6, a6, 24 1075; RV64I-NEXT: slli t0, t0, 8 1076; RV64I-NEXT: or a3, a4, a3 1077; RV64I-NEXT: or a4, a6, a5 1078; RV64I-NEXT: or a5, t0, a7 1079; RV64I-NEXT: lbu a6, 4(a1) 1080; RV64I-NEXT: lbu a7, 5(a1) 1081; RV64I-NEXT: lbu t0, 6(a1) 1082; RV64I-NEXT: lbu t3, 7(a1) 1083; RV64I-NEXT: slli t1, t1, 16 1084; RV64I-NEXT: slli t2, t2, 24 1085; RV64I-NEXT: slli a7, a7, 8 1086; RV64I-NEXT: slli t0, t0, 16 1087; RV64I-NEXT: slli t3, t3, 24 1088; RV64I-NEXT: or t1, t2, t1 1089; RV64I-NEXT: or a6, a7, a6 1090; RV64I-NEXT: lbu a7, 0(a1) 1091; RV64I-NEXT: lbu t2, 1(a1) 1092; RV64I-NEXT: or t0, t3, t0 1093; RV64I-NEXT: lbu t3, 2(a1) 1094; RV64I-NEXT: lbu a1, 3(a1) 1095; RV64I-NEXT: slli t2, t2, 8 1096; RV64I-NEXT: or a7, t2, a7 1097; RV64I-NEXT: slli t3, t3, 16 1098; RV64I-NEXT: slli a1, a1, 24 1099; RV64I-NEXT: or a1, a1, t3 1100; RV64I-NEXT: or a3, a4, a3 1101; RV64I-NEXT: or a4, t1, a5 1102; RV64I-NEXT: or a5, t0, a6 1103; RV64I-NEXT: or a1, a1, a7 1104; RV64I-NEXT: slli a4, a4, 32 1105; RV64I-NEXT: slli a1, a1, 3 1106; RV64I-NEXT: slli a6, a5, 35 1107; RV64I-NEXT: or a5, a4, a3 1108; RV64I-NEXT: or a4, a6, a1 1109; RV64I-NEXT: addi a3, a4, -64 1110; RV64I-NEXT: sll a1, a5, a4 1111; RV64I-NEXT: bltz a3, .LBB8_2 1112; RV64I-NEXT: # %bb.1: 1113; RV64I-NEXT: mv a0, a1 1114; RV64I-NEXT: j .LBB8_3 1115; RV64I-NEXT: .LBB8_2: 1116; RV64I-NEXT: lbu a6, 9(a0) 1117; RV64I-NEXT: lbu a7, 10(a0) 1118; RV64I-NEXT: lbu t0, 11(a0) 1119; RV64I-NEXT: lbu t1, 8(a0) 1120; RV64I-NEXT: slli a6, a6, 8 1121; RV64I-NEXT: slli a7, a7, 16 1122; RV64I-NEXT: slli t0, t0, 24 1123; RV64I-NEXT: or a6, a6, t1 1124; RV64I-NEXT: lbu t1, 12(a0) 1125; RV64I-NEXT: lbu t2, 13(a0) 1126; RV64I-NEXT: or a7, t0, a7 1127; RV64I-NEXT: lbu t0, 14(a0) 1128; RV64I-NEXT: lbu a0, 15(a0) 1129; RV64I-NEXT: slli t2, t2, 8 1130; RV64I-NEXT: or t1, t2, t1 1131; RV64I-NEXT: slli t0, t0, 16 1132; RV64I-NEXT: slli a0, a0, 24 1133; RV64I-NEXT: or a0, a0, t0 1134; RV64I-NEXT: or a6, a7, a6 1135; RV64I-NEXT: not a7, a4 1136; RV64I-NEXT: srli a5, a5, 1 1137; RV64I-NEXT: or a0, a0, t1 1138; RV64I-NEXT: slli a0, a0, 32 1139; RV64I-NEXT: or a0, a0, a6 1140; RV64I-NEXT: sll a0, a0, a4 1141; RV64I-NEXT: srl a4, a5, a7 1142; RV64I-NEXT: or a0, a0, a4 1143; RV64I-NEXT: .LBB8_3: 1144; RV64I-NEXT: srai a3, a3, 63 1145; RV64I-NEXT: srli a4, a0, 56 1146; RV64I-NEXT: srli a5, a0, 48 1147; RV64I-NEXT: srli a6, a0, 40 1148; RV64I-NEXT: srli a7, a0, 32 1149; RV64I-NEXT: srli t0, a0, 24 1150; RV64I-NEXT: srli t1, a0, 16 1151; RV64I-NEXT: and a1, a3, a1 1152; RV64I-NEXT: sb a7, 12(a2) 1153; RV64I-NEXT: sb a6, 13(a2) 1154; RV64I-NEXT: sb a5, 14(a2) 1155; RV64I-NEXT: sb a4, 15(a2) 1156; RV64I-NEXT: srli a3, a1, 56 1157; RV64I-NEXT: srli a4, a1, 48 1158; RV64I-NEXT: srli a5, a1, 40 1159; RV64I-NEXT: srli a6, a1, 32 1160; RV64I-NEXT: srli a7, a1, 24 1161; RV64I-NEXT: srli t2, a1, 16 1162; RV64I-NEXT: sb a6, 4(a2) 1163; RV64I-NEXT: sb a5, 5(a2) 1164; RV64I-NEXT: sb a4, 6(a2) 1165; RV64I-NEXT: sb a3, 7(a2) 1166; RV64I-NEXT: srli a3, a1, 8 1167; RV64I-NEXT: sb a1, 0(a2) 1168; RV64I-NEXT: sb a3, 1(a2) 1169; RV64I-NEXT: sb t2, 2(a2) 1170; RV64I-NEXT: sb a7, 3(a2) 1171; RV64I-NEXT: srli a1, a0, 8 1172; RV64I-NEXT: sb a0, 8(a2) 1173; RV64I-NEXT: sb a1, 9(a2) 1174; RV64I-NEXT: sb t1, 10(a2) 1175; RV64I-NEXT: sb t0, 11(a2) 1176; RV64I-NEXT: ret 1177; 1178; RV32I-LABEL: shl_16bytes: 1179; RV32I: # %bb.0: 1180; RV32I-NEXT: addi sp, sp, -32 1181; RV32I-NEXT: lbu a3, 0(a0) 1182; RV32I-NEXT: lbu a4, 1(a0) 1183; RV32I-NEXT: lbu a5, 2(a0) 1184; RV32I-NEXT: lbu a6, 3(a0) 1185; RV32I-NEXT: lbu a7, 4(a0) 1186; RV32I-NEXT: lbu t0, 5(a0) 1187; RV32I-NEXT: lbu t1, 6(a0) 1188; RV32I-NEXT: lbu t2, 7(a0) 1189; RV32I-NEXT: slli a4, a4, 8 1190; RV32I-NEXT: slli a5, a5, 16 1191; RV32I-NEXT: slli a6, a6, 24 1192; RV32I-NEXT: or a3, a4, a3 1193; RV32I-NEXT: or a4, a6, a5 1194; RV32I-NEXT: lbu a5, 8(a0) 1195; RV32I-NEXT: lbu a6, 9(a0) 1196; RV32I-NEXT: lbu t3, 10(a0) 1197; RV32I-NEXT: lbu t4, 11(a0) 1198; RV32I-NEXT: slli t0, t0, 8 1199; RV32I-NEXT: slli t1, t1, 16 1200; RV32I-NEXT: slli t2, t2, 24 1201; RV32I-NEXT: slli a6, a6, 8 1202; RV32I-NEXT: or a7, t0, a7 1203; RV32I-NEXT: or t0, t2, t1 1204; RV32I-NEXT: or a5, a6, a5 1205; RV32I-NEXT: lbu a6, 12(a0) 1206; RV32I-NEXT: lbu t1, 13(a0) 1207; RV32I-NEXT: lbu t2, 14(a0) 1208; RV32I-NEXT: lbu a0, 15(a0) 1209; RV32I-NEXT: slli t3, t3, 16 1210; RV32I-NEXT: slli t4, t4, 24 1211; RV32I-NEXT: slli t1, t1, 8 1212; RV32I-NEXT: slli t2, t2, 16 1213; RV32I-NEXT: slli a0, a0, 24 1214; RV32I-NEXT: or t3, t4, t3 1215; RV32I-NEXT: or a6, t1, a6 1216; RV32I-NEXT: or a0, a0, t2 1217; RV32I-NEXT: lbu t1, 0(a1) 1218; RV32I-NEXT: lbu t2, 1(a1) 1219; RV32I-NEXT: lbu t4, 2(a1) 1220; RV32I-NEXT: lbu a1, 3(a1) 1221; RV32I-NEXT: sw zero, 0(sp) 1222; RV32I-NEXT: sw zero, 4(sp) 1223; RV32I-NEXT: sw zero, 8(sp) 1224; RV32I-NEXT: sw zero, 12(sp) 1225; RV32I-NEXT: slli t2, t2, 8 1226; RV32I-NEXT: or t1, t2, t1 1227; RV32I-NEXT: addi t2, sp, 16 1228; RV32I-NEXT: slli t4, t4, 16 1229; RV32I-NEXT: slli a1, a1, 24 1230; RV32I-NEXT: or a1, a1, t4 1231; RV32I-NEXT: or a3, a4, a3 1232; RV32I-NEXT: or a4, t0, a7 1233; RV32I-NEXT: or a5, t3, a5 1234; RV32I-NEXT: or a0, a0, a6 1235; RV32I-NEXT: or a1, a1, t1 1236; RV32I-NEXT: sw a3, 16(sp) 1237; RV32I-NEXT: sw a4, 20(sp) 1238; RV32I-NEXT: sw a5, 24(sp) 1239; RV32I-NEXT: sw a0, 28(sp) 1240; RV32I-NEXT: slli a0, a1, 3 1241; RV32I-NEXT: andi a1, a1, 12 1242; RV32I-NEXT: sub a1, t2, a1 1243; RV32I-NEXT: andi a3, a0, 24 1244; RV32I-NEXT: lw a4, 0(a1) 1245; RV32I-NEXT: lw a5, 4(a1) 1246; RV32I-NEXT: lw a6, 8(a1) 1247; RV32I-NEXT: lw a1, 12(a1) 1248; RV32I-NEXT: xori a3, a3, 31 1249; RV32I-NEXT: sll a7, a5, a0 1250; RV32I-NEXT: srli t0, a4, 1 1251; RV32I-NEXT: sll a1, a1, a0 1252; RV32I-NEXT: srli t1, a6, 1 1253; RV32I-NEXT: sll a6, a6, a0 1254; RV32I-NEXT: srli a5, a5, 1 1255; RV32I-NEXT: sll a0, a4, a0 1256; RV32I-NEXT: srl a4, t0, a3 1257; RV32I-NEXT: srl t0, t1, a3 1258; RV32I-NEXT: srl a3, a5, a3 1259; RV32I-NEXT: srli a5, a6, 24 1260; RV32I-NEXT: srli t1, a1, 24 1261; RV32I-NEXT: srli t2, a0, 16 1262; RV32I-NEXT: srli t3, a0, 24 1263; RV32I-NEXT: srli t4, a0, 8 1264; RV32I-NEXT: or a4, a7, a4 1265; RV32I-NEXT: srli a7, a7, 24 1266; RV32I-NEXT: or a1, a1, t0 1267; RV32I-NEXT: or a3, a6, a3 1268; RV32I-NEXT: sb a0, 0(a2) 1269; RV32I-NEXT: sb t4, 1(a2) 1270; RV32I-NEXT: sb t2, 2(a2) 1271; RV32I-NEXT: sb t3, 3(a2) 1272; RV32I-NEXT: srli a0, a3, 16 1273; RV32I-NEXT: srli a6, a3, 8 1274; RV32I-NEXT: srli t0, a1, 16 1275; RV32I-NEXT: srli t2, a1, 8 1276; RV32I-NEXT: srli t3, a4, 16 1277; RV32I-NEXT: srli t4, a4, 8 1278; RV32I-NEXT: sb a3, 8(a2) 1279; RV32I-NEXT: sb a6, 9(a2) 1280; RV32I-NEXT: sb a0, 10(a2) 1281; RV32I-NEXT: sb a5, 11(a2) 1282; RV32I-NEXT: sb a1, 12(a2) 1283; RV32I-NEXT: sb t2, 13(a2) 1284; RV32I-NEXT: sb t0, 14(a2) 1285; RV32I-NEXT: sb t1, 15(a2) 1286; RV32I-NEXT: sb a4, 4(a2) 1287; RV32I-NEXT: sb t4, 5(a2) 1288; RV32I-NEXT: sb t3, 6(a2) 1289; RV32I-NEXT: sb a7, 7(a2) 1290; RV32I-NEXT: addi sp, sp, 32 1291; RV32I-NEXT: ret 1292 %src = load i128, ptr %src.ptr, align 1 1293 %byteOff = load i128, ptr %byteOff.ptr, align 1 1294 %bitOff = shl i128 %byteOff, 3 1295 %res = shl i128 %src, %bitOff 1296 store i128 %res, ptr %dst, align 1 1297 ret void 1298} 1299 1300define void @shl_16bytes_wordOff(ptr %src.ptr, ptr %wordOff.ptr, ptr %dst) nounwind { 1301; RV64I-LABEL: shl_16bytes_wordOff: 1302; RV64I: # %bb.0: 1303; RV64I-NEXT: lbu a3, 0(a0) 1304; RV64I-NEXT: lbu a4, 1(a0) 1305; RV64I-NEXT: lbu a5, 2(a0) 1306; RV64I-NEXT: lbu a6, 3(a0) 1307; RV64I-NEXT: lbu a7, 4(a0) 1308; RV64I-NEXT: lbu t0, 5(a0) 1309; RV64I-NEXT: lbu t1, 6(a0) 1310; RV64I-NEXT: lbu t2, 7(a0) 1311; RV64I-NEXT: slli a4, a4, 8 1312; RV64I-NEXT: slli a5, a5, 16 1313; RV64I-NEXT: slli a6, a6, 24 1314; RV64I-NEXT: slli t0, t0, 8 1315; RV64I-NEXT: or a3, a4, a3 1316; RV64I-NEXT: or a4, a6, a5 1317; RV64I-NEXT: or a5, t0, a7 1318; RV64I-NEXT: lbu a6, 4(a1) 1319; RV64I-NEXT: lbu a7, 5(a1) 1320; RV64I-NEXT: lbu t0, 6(a1) 1321; RV64I-NEXT: lbu t3, 7(a1) 1322; RV64I-NEXT: slli t1, t1, 16 1323; RV64I-NEXT: slli t2, t2, 24 1324; RV64I-NEXT: slli a7, a7, 8 1325; RV64I-NEXT: slli t0, t0, 16 1326; RV64I-NEXT: slli t3, t3, 24 1327; RV64I-NEXT: or t1, t2, t1 1328; RV64I-NEXT: or a6, a7, a6 1329; RV64I-NEXT: lbu a7, 0(a1) 1330; RV64I-NEXT: lbu t2, 1(a1) 1331; RV64I-NEXT: or t0, t3, t0 1332; RV64I-NEXT: lbu t3, 2(a1) 1333; RV64I-NEXT: lbu a1, 3(a1) 1334; RV64I-NEXT: slli t2, t2, 8 1335; RV64I-NEXT: or a7, t2, a7 1336; RV64I-NEXT: slli t3, t3, 16 1337; RV64I-NEXT: slli a1, a1, 24 1338; RV64I-NEXT: or a1, a1, t3 1339; RV64I-NEXT: or a3, a4, a3 1340; RV64I-NEXT: or a4, t1, a5 1341; RV64I-NEXT: or a5, t0, a6 1342; RV64I-NEXT: or a1, a1, a7 1343; RV64I-NEXT: slli a4, a4, 32 1344; RV64I-NEXT: slli a1, a1, 5 1345; RV64I-NEXT: slli a6, a5, 37 1346; RV64I-NEXT: or a5, a4, a3 1347; RV64I-NEXT: or a4, a6, a1 1348; RV64I-NEXT: addi a3, a4, -64 1349; RV64I-NEXT: sll a1, a5, a4 1350; RV64I-NEXT: bltz a3, .LBB9_2 1351; RV64I-NEXT: # %bb.1: 1352; RV64I-NEXT: mv a0, a1 1353; RV64I-NEXT: j .LBB9_3 1354; RV64I-NEXT: .LBB9_2: 1355; RV64I-NEXT: lbu a6, 9(a0) 1356; RV64I-NEXT: lbu a7, 10(a0) 1357; RV64I-NEXT: lbu t0, 11(a0) 1358; RV64I-NEXT: lbu t1, 8(a0) 1359; RV64I-NEXT: slli a6, a6, 8 1360; RV64I-NEXT: slli a7, a7, 16 1361; RV64I-NEXT: slli t0, t0, 24 1362; RV64I-NEXT: or a6, a6, t1 1363; RV64I-NEXT: lbu t1, 12(a0) 1364; RV64I-NEXT: lbu t2, 13(a0) 1365; RV64I-NEXT: or a7, t0, a7 1366; RV64I-NEXT: lbu t0, 14(a0) 1367; RV64I-NEXT: lbu a0, 15(a0) 1368; RV64I-NEXT: slli t2, t2, 8 1369; RV64I-NEXT: or t1, t2, t1 1370; RV64I-NEXT: slli t0, t0, 16 1371; RV64I-NEXT: slli a0, a0, 24 1372; RV64I-NEXT: or a0, a0, t0 1373; RV64I-NEXT: or a6, a7, a6 1374; RV64I-NEXT: not a7, a4 1375; RV64I-NEXT: srli a5, a5, 1 1376; RV64I-NEXT: or a0, a0, t1 1377; RV64I-NEXT: slli a0, a0, 32 1378; RV64I-NEXT: or a0, a0, a6 1379; RV64I-NEXT: sll a0, a0, a4 1380; RV64I-NEXT: srl a4, a5, a7 1381; RV64I-NEXT: or a0, a0, a4 1382; RV64I-NEXT: .LBB9_3: 1383; RV64I-NEXT: srai a3, a3, 63 1384; RV64I-NEXT: srli a4, a0, 56 1385; RV64I-NEXT: srli a5, a0, 48 1386; RV64I-NEXT: srli a6, a0, 40 1387; RV64I-NEXT: srli a7, a0, 32 1388; RV64I-NEXT: srli t0, a0, 24 1389; RV64I-NEXT: srli t1, a0, 16 1390; RV64I-NEXT: and a1, a3, a1 1391; RV64I-NEXT: sb a7, 12(a2) 1392; RV64I-NEXT: sb a6, 13(a2) 1393; RV64I-NEXT: sb a5, 14(a2) 1394; RV64I-NEXT: sb a4, 15(a2) 1395; RV64I-NEXT: srli a3, a1, 56 1396; RV64I-NEXT: srli a4, a1, 48 1397; RV64I-NEXT: srli a5, a1, 40 1398; RV64I-NEXT: srli a6, a1, 32 1399; RV64I-NEXT: srli a7, a1, 24 1400; RV64I-NEXT: srli t2, a1, 16 1401; RV64I-NEXT: sb a6, 4(a2) 1402; RV64I-NEXT: sb a5, 5(a2) 1403; RV64I-NEXT: sb a4, 6(a2) 1404; RV64I-NEXT: sb a3, 7(a2) 1405; RV64I-NEXT: srli a3, a1, 8 1406; RV64I-NEXT: sb a1, 0(a2) 1407; RV64I-NEXT: sb a3, 1(a2) 1408; RV64I-NEXT: sb t2, 2(a2) 1409; RV64I-NEXT: sb a7, 3(a2) 1410; RV64I-NEXT: srli a1, a0, 8 1411; RV64I-NEXT: sb a0, 8(a2) 1412; RV64I-NEXT: sb a1, 9(a2) 1413; RV64I-NEXT: sb t1, 10(a2) 1414; RV64I-NEXT: sb t0, 11(a2) 1415; RV64I-NEXT: ret 1416; 1417; RV32I-LABEL: shl_16bytes_wordOff: 1418; RV32I: # %bb.0: 1419; RV32I-NEXT: addi sp, sp, -32 1420; RV32I-NEXT: lbu a3, 0(a0) 1421; RV32I-NEXT: lbu a4, 1(a0) 1422; RV32I-NEXT: lbu a5, 2(a0) 1423; RV32I-NEXT: lbu a6, 3(a0) 1424; RV32I-NEXT: lbu a7, 4(a0) 1425; RV32I-NEXT: lbu t0, 5(a0) 1426; RV32I-NEXT: lbu t1, 6(a0) 1427; RV32I-NEXT: lbu t2, 7(a0) 1428; RV32I-NEXT: lbu t3, 8(a0) 1429; RV32I-NEXT: lbu t4, 9(a0) 1430; RV32I-NEXT: lbu t5, 10(a0) 1431; RV32I-NEXT: lbu t6, 11(a0) 1432; RV32I-NEXT: slli a4, a4, 8 1433; RV32I-NEXT: slli a5, a5, 16 1434; RV32I-NEXT: slli a6, a6, 24 1435; RV32I-NEXT: slli t0, t0, 8 1436; RV32I-NEXT: or a3, a4, a3 1437; RV32I-NEXT: or a4, a6, a5 1438; RV32I-NEXT: or a5, t0, a7 1439; RV32I-NEXT: lbu a6, 12(a0) 1440; RV32I-NEXT: lbu a7, 13(a0) 1441; RV32I-NEXT: lbu t0, 14(a0) 1442; RV32I-NEXT: lbu a0, 15(a0) 1443; RV32I-NEXT: lbu a1, 0(a1) 1444; RV32I-NEXT: sw zero, 0(sp) 1445; RV32I-NEXT: sw zero, 4(sp) 1446; RV32I-NEXT: sw zero, 8(sp) 1447; RV32I-NEXT: sw zero, 12(sp) 1448; RV32I-NEXT: slli t1, t1, 16 1449; RV32I-NEXT: slli t2, t2, 24 1450; RV32I-NEXT: or t1, t2, t1 1451; RV32I-NEXT: addi t2, sp, 16 1452; RV32I-NEXT: slli t4, t4, 8 1453; RV32I-NEXT: slli t5, t5, 16 1454; RV32I-NEXT: slli t6, t6, 24 1455; RV32I-NEXT: slli a7, a7, 8 1456; RV32I-NEXT: slli t0, t0, 16 1457; RV32I-NEXT: slli a0, a0, 24 1458; RV32I-NEXT: slli a1, a1, 2 1459; RV32I-NEXT: or t3, t4, t3 1460; RV32I-NEXT: or t4, t6, t5 1461; RV32I-NEXT: or a6, a7, a6 1462; RV32I-NEXT: or a0, a0, t0 1463; RV32I-NEXT: andi a1, a1, 12 1464; RV32I-NEXT: or a3, a4, a3 1465; RV32I-NEXT: or a4, t1, a5 1466; RV32I-NEXT: or a5, t4, t3 1467; RV32I-NEXT: or a0, a0, a6 1468; RV32I-NEXT: sub a1, t2, a1 1469; RV32I-NEXT: sw a3, 16(sp) 1470; RV32I-NEXT: sw a4, 20(sp) 1471; RV32I-NEXT: sw a5, 24(sp) 1472; RV32I-NEXT: sw a0, 28(sp) 1473; RV32I-NEXT: lw a0, 8(a1) 1474; RV32I-NEXT: lw a3, 4(a1) 1475; RV32I-NEXT: lw a4, 0(a1) 1476; RV32I-NEXT: lw a1, 12(a1) 1477; RV32I-NEXT: srli a5, a0, 16 1478; RV32I-NEXT: srli a6, a0, 24 1479; RV32I-NEXT: srli a7, a0, 8 1480; RV32I-NEXT: srli t0, a1, 16 1481; RV32I-NEXT: srli t1, a1, 24 1482; RV32I-NEXT: srli t2, a1, 8 1483; RV32I-NEXT: srli t3, a4, 16 1484; RV32I-NEXT: srli t4, a4, 24 1485; RV32I-NEXT: srli t5, a4, 8 1486; RV32I-NEXT: srli t6, a3, 16 1487; RV32I-NEXT: sb a0, 8(a2) 1488; RV32I-NEXT: sb a7, 9(a2) 1489; RV32I-NEXT: sb a5, 10(a2) 1490; RV32I-NEXT: sb a6, 11(a2) 1491; RV32I-NEXT: srli a0, a3, 24 1492; RV32I-NEXT: sb a1, 12(a2) 1493; RV32I-NEXT: sb t2, 13(a2) 1494; RV32I-NEXT: sb t0, 14(a2) 1495; RV32I-NEXT: sb t1, 15(a2) 1496; RV32I-NEXT: srli a1, a3, 8 1497; RV32I-NEXT: sb a4, 0(a2) 1498; RV32I-NEXT: sb t5, 1(a2) 1499; RV32I-NEXT: sb t3, 2(a2) 1500; RV32I-NEXT: sb t4, 3(a2) 1501; RV32I-NEXT: sb a3, 4(a2) 1502; RV32I-NEXT: sb a1, 5(a2) 1503; RV32I-NEXT: sb t6, 6(a2) 1504; RV32I-NEXT: sb a0, 7(a2) 1505; RV32I-NEXT: addi sp, sp, 32 1506; RV32I-NEXT: ret 1507 %src = load i128, ptr %src.ptr, align 1 1508 %wordOff = load i128, ptr %wordOff.ptr, align 1 1509 %bitOff = shl i128 %wordOff, 5 1510 %res = shl i128 %src, %bitOff 1511 store i128 %res, ptr %dst, align 1 1512 ret void 1513} 1514 1515 1516define void @ashr_16bytes(ptr %src.ptr, ptr %byteOff.ptr, ptr %dst) nounwind { 1517; RV64I-LABEL: ashr_16bytes: 1518; RV64I: # %bb.0: 1519; RV64I-NEXT: lbu a3, 8(a0) 1520; RV64I-NEXT: lbu a4, 9(a0) 1521; RV64I-NEXT: lbu a5, 10(a0) 1522; RV64I-NEXT: lbu a6, 11(a0) 1523; RV64I-NEXT: lbu a7, 12(a0) 1524; RV64I-NEXT: lbu t0, 13(a0) 1525; RV64I-NEXT: lbu t1, 14(a0) 1526; RV64I-NEXT: lbu t2, 15(a0) 1527; RV64I-NEXT: slli a4, a4, 8 1528; RV64I-NEXT: slli a5, a5, 16 1529; RV64I-NEXT: slli a6, a6, 24 1530; RV64I-NEXT: slli t0, t0, 8 1531; RV64I-NEXT: or a3, a4, a3 1532; RV64I-NEXT: or a4, a6, a5 1533; RV64I-NEXT: or a5, t0, a7 1534; RV64I-NEXT: lbu a6, 4(a1) 1535; RV64I-NEXT: lbu a7, 5(a1) 1536; RV64I-NEXT: lbu t0, 6(a1) 1537; RV64I-NEXT: lbu t3, 7(a1) 1538; RV64I-NEXT: slli t1, t1, 16 1539; RV64I-NEXT: slli t2, t2, 24 1540; RV64I-NEXT: slli a7, a7, 8 1541; RV64I-NEXT: slli t0, t0, 16 1542; RV64I-NEXT: slli t3, t3, 24 1543; RV64I-NEXT: or t1, t2, t1 1544; RV64I-NEXT: or a6, a7, a6 1545; RV64I-NEXT: lbu a7, 0(a1) 1546; RV64I-NEXT: lbu t2, 1(a1) 1547; RV64I-NEXT: or t0, t3, t0 1548; RV64I-NEXT: lbu t3, 2(a1) 1549; RV64I-NEXT: lbu a1, 3(a1) 1550; RV64I-NEXT: slli t2, t2, 8 1551; RV64I-NEXT: or a7, t2, a7 1552; RV64I-NEXT: slli t3, t3, 16 1553; RV64I-NEXT: slli a1, a1, 24 1554; RV64I-NEXT: or a1, a1, t3 1555; RV64I-NEXT: or a3, a4, a3 1556; RV64I-NEXT: or a5, t1, a5 1557; RV64I-NEXT: or a4, t0, a6 1558; RV64I-NEXT: or a1, a1, a7 1559; RV64I-NEXT: slli a6, a5, 32 1560; RV64I-NEXT: slli a1, a1, 3 1561; RV64I-NEXT: slli a7, a4, 35 1562; RV64I-NEXT: or a4, a6, a3 1563; RV64I-NEXT: or a3, a7, a1 1564; RV64I-NEXT: addi a6, a3, -64 1565; RV64I-NEXT: sra a1, a4, a3 1566; RV64I-NEXT: bltz a6, .LBB10_2 1567; RV64I-NEXT: # %bb.1: 1568; RV64I-NEXT: sraiw a3, a5, 31 1569; RV64I-NEXT: mv a0, a1 1570; RV64I-NEXT: mv a1, a3 1571; RV64I-NEXT: j .LBB10_3 1572; RV64I-NEXT: .LBB10_2: 1573; RV64I-NEXT: lbu a5, 1(a0) 1574; RV64I-NEXT: lbu a6, 2(a0) 1575; RV64I-NEXT: lbu a7, 3(a0) 1576; RV64I-NEXT: lbu t0, 0(a0) 1577; RV64I-NEXT: slli a5, a5, 8 1578; RV64I-NEXT: slli a6, a6, 16 1579; RV64I-NEXT: slli a7, a7, 24 1580; RV64I-NEXT: or a5, a5, t0 1581; RV64I-NEXT: lbu t0, 4(a0) 1582; RV64I-NEXT: lbu t1, 5(a0) 1583; RV64I-NEXT: or a6, a7, a6 1584; RV64I-NEXT: lbu a7, 6(a0) 1585; RV64I-NEXT: lbu a0, 7(a0) 1586; RV64I-NEXT: slli t1, t1, 8 1587; RV64I-NEXT: or t0, t1, t0 1588; RV64I-NEXT: slli a7, a7, 16 1589; RV64I-NEXT: slli a0, a0, 24 1590; RV64I-NEXT: or a0, a0, a7 1591; RV64I-NEXT: or a5, a6, a5 1592; RV64I-NEXT: not a6, a3 1593; RV64I-NEXT: slli a4, a4, 1 1594; RV64I-NEXT: or a0, a0, t0 1595; RV64I-NEXT: slli a0, a0, 32 1596; RV64I-NEXT: or a0, a0, a5 1597; RV64I-NEXT: srl a0, a0, a3 1598; RV64I-NEXT: sll a3, a4, a6 1599; RV64I-NEXT: or a0, a0, a3 1600; RV64I-NEXT: .LBB10_3: 1601; RV64I-NEXT: srli a3, a1, 56 1602; RV64I-NEXT: srli a4, a1, 48 1603; RV64I-NEXT: srli a5, a1, 40 1604; RV64I-NEXT: srli a6, a1, 32 1605; RV64I-NEXT: srli a7, a1, 24 1606; RV64I-NEXT: srli t0, a1, 16 1607; RV64I-NEXT: srli t1, a1, 8 1608; RV64I-NEXT: srli t2, a0, 56 1609; RV64I-NEXT: srli t3, a0, 48 1610; RV64I-NEXT: srli t4, a0, 40 1611; RV64I-NEXT: srli t5, a0, 32 1612; RV64I-NEXT: sb a6, 12(a2) 1613; RV64I-NEXT: sb a5, 13(a2) 1614; RV64I-NEXT: sb a4, 14(a2) 1615; RV64I-NEXT: sb a3, 15(a2) 1616; RV64I-NEXT: srli a3, a0, 24 1617; RV64I-NEXT: sb a1, 8(a2) 1618; RV64I-NEXT: sb t1, 9(a2) 1619; RV64I-NEXT: sb t0, 10(a2) 1620; RV64I-NEXT: sb a7, 11(a2) 1621; RV64I-NEXT: srli a1, a0, 16 1622; RV64I-NEXT: sb t5, 4(a2) 1623; RV64I-NEXT: sb t4, 5(a2) 1624; RV64I-NEXT: sb t3, 6(a2) 1625; RV64I-NEXT: sb t2, 7(a2) 1626; RV64I-NEXT: srli a4, a0, 8 1627; RV64I-NEXT: sb a0, 0(a2) 1628; RV64I-NEXT: sb a4, 1(a2) 1629; RV64I-NEXT: sb a1, 2(a2) 1630; RV64I-NEXT: sb a3, 3(a2) 1631; RV64I-NEXT: ret 1632; 1633; RV32I-LABEL: ashr_16bytes: 1634; RV32I: # %bb.0: 1635; RV32I-NEXT: addi sp, sp, -32 1636; RV32I-NEXT: lbu a3, 0(a0) 1637; RV32I-NEXT: lbu a4, 1(a0) 1638; RV32I-NEXT: lbu a5, 2(a0) 1639; RV32I-NEXT: lbu a6, 3(a0) 1640; RV32I-NEXT: lbu a7, 4(a0) 1641; RV32I-NEXT: lbu t0, 5(a0) 1642; RV32I-NEXT: lbu t1, 6(a0) 1643; RV32I-NEXT: lbu t2, 7(a0) 1644; RV32I-NEXT: slli a4, a4, 8 1645; RV32I-NEXT: or a3, a4, a3 1646; RV32I-NEXT: lbu a4, 8(a0) 1647; RV32I-NEXT: lbu t3, 9(a0) 1648; RV32I-NEXT: lbu t4, 10(a0) 1649; RV32I-NEXT: lbu t5, 11(a0) 1650; RV32I-NEXT: slli a5, a5, 16 1651; RV32I-NEXT: slli a6, a6, 24 1652; RV32I-NEXT: slli t0, t0, 8 1653; RV32I-NEXT: slli t1, t1, 16 1654; RV32I-NEXT: slli t2, t2, 24 1655; RV32I-NEXT: or a5, a6, a5 1656; RV32I-NEXT: or a6, t0, a7 1657; RV32I-NEXT: or a7, t2, t1 1658; RV32I-NEXT: lbu t0, 12(a0) 1659; RV32I-NEXT: lbu t1, 13(a0) 1660; RV32I-NEXT: lbu t2, 14(a0) 1661; RV32I-NEXT: lbu a0, 15(a0) 1662; RV32I-NEXT: slli t3, t3, 8 1663; RV32I-NEXT: slli t4, t4, 16 1664; RV32I-NEXT: slli t5, t5, 24 1665; RV32I-NEXT: slli t1, t1, 8 1666; RV32I-NEXT: or a4, t3, a4 1667; RV32I-NEXT: or t3, t5, t4 1668; RV32I-NEXT: lbu t4, 0(a1) 1669; RV32I-NEXT: lbu t5, 1(a1) 1670; RV32I-NEXT: or t0, t1, t0 1671; RV32I-NEXT: lbu t1, 2(a1) 1672; RV32I-NEXT: lbu a1, 3(a1) 1673; RV32I-NEXT: slli t5, t5, 8 1674; RV32I-NEXT: or t4, t5, t4 1675; RV32I-NEXT: slli t1, t1, 16 1676; RV32I-NEXT: slli a1, a1, 24 1677; RV32I-NEXT: or a1, a1, t1 1678; RV32I-NEXT: mv t1, sp 1679; RV32I-NEXT: slli t2, t2, 16 1680; RV32I-NEXT: slli a0, a0, 24 1681; RV32I-NEXT: or t2, a0, t2 1682; RV32I-NEXT: srai a0, a0, 31 1683; RV32I-NEXT: or a3, a5, a3 1684; RV32I-NEXT: or a5, a7, a6 1685; RV32I-NEXT: or a4, t3, a4 1686; RV32I-NEXT: or a6, t2, t0 1687; RV32I-NEXT: or a1, a1, t4 1688; RV32I-NEXT: sw a0, 16(sp) 1689; RV32I-NEXT: sw a0, 20(sp) 1690; RV32I-NEXT: sw a0, 24(sp) 1691; RV32I-NEXT: sw a0, 28(sp) 1692; RV32I-NEXT: sw a3, 0(sp) 1693; RV32I-NEXT: sw a5, 4(sp) 1694; RV32I-NEXT: sw a4, 8(sp) 1695; RV32I-NEXT: sw a6, 12(sp) 1696; RV32I-NEXT: slli a0, a1, 3 1697; RV32I-NEXT: andi a1, a1, 12 1698; RV32I-NEXT: add a1, t1, a1 1699; RV32I-NEXT: andi a3, a0, 24 1700; RV32I-NEXT: lw a4, 0(a1) 1701; RV32I-NEXT: lw a5, 4(a1) 1702; RV32I-NEXT: lw a6, 8(a1) 1703; RV32I-NEXT: xori a3, a3, 31 1704; RV32I-NEXT: lw a1, 12(a1) 1705; RV32I-NEXT: srl a7, a5, a0 1706; RV32I-NEXT: slli t0, a6, 1 1707; RV32I-NEXT: srl a4, a4, a0 1708; RV32I-NEXT: slli a5, a5, 1 1709; RV32I-NEXT: srl a6, a6, a0 1710; RV32I-NEXT: slli t1, a1, 1 1711; RV32I-NEXT: sra a0, a1, a0 1712; RV32I-NEXT: sll a1, t0, a3 1713; RV32I-NEXT: sll a5, a5, a3 1714; RV32I-NEXT: sll a3, t1, a3 1715; RV32I-NEXT: srli t0, a0, 16 1716; RV32I-NEXT: srli t1, a0, 24 1717; RV32I-NEXT: srli t2, a0, 8 1718; RV32I-NEXT: or a1, a7, a1 1719; RV32I-NEXT: or a5, a4, a5 1720; RV32I-NEXT: or a3, a6, a3 1721; RV32I-NEXT: sb a0, 12(a2) 1722; RV32I-NEXT: sb t2, 13(a2) 1723; RV32I-NEXT: sb t0, 14(a2) 1724; RV32I-NEXT: sb t1, 15(a2) 1725; RV32I-NEXT: srli a0, a3, 16 1726; RV32I-NEXT: srli t0, a3, 24 1727; RV32I-NEXT: srli a3, a3, 8 1728; RV32I-NEXT: srli t1, a5, 16 1729; RV32I-NEXT: srli t2, a5, 24 1730; RV32I-NEXT: srli a5, a5, 8 1731; RV32I-NEXT: srli t3, a1, 16 1732; RV32I-NEXT: srli t4, a1, 24 1733; RV32I-NEXT: srli a1, a1, 8 1734; RV32I-NEXT: sb a6, 8(a2) 1735; RV32I-NEXT: sb a3, 9(a2) 1736; RV32I-NEXT: sb a0, 10(a2) 1737; RV32I-NEXT: sb t0, 11(a2) 1738; RV32I-NEXT: sb a4, 0(a2) 1739; RV32I-NEXT: sb a5, 1(a2) 1740; RV32I-NEXT: sb t1, 2(a2) 1741; RV32I-NEXT: sb t2, 3(a2) 1742; RV32I-NEXT: sb a7, 4(a2) 1743; RV32I-NEXT: sb a1, 5(a2) 1744; RV32I-NEXT: sb t3, 6(a2) 1745; RV32I-NEXT: sb t4, 7(a2) 1746; RV32I-NEXT: addi sp, sp, 32 1747; RV32I-NEXT: ret 1748 %src = load i128, ptr %src.ptr, align 1 1749 %byteOff = load i128, ptr %byteOff.ptr, align 1 1750 %bitOff = shl i128 %byteOff, 3 1751 %res = ashr i128 %src, %bitOff 1752 store i128 %res, ptr %dst, align 1 1753 ret void 1754} 1755 1756define void @ashr_16bytes_wordOff(ptr %src.ptr, ptr %wordOff.ptr, ptr %dst) nounwind { 1757; RV64I-LABEL: ashr_16bytes_wordOff: 1758; RV64I: # %bb.0: 1759; RV64I-NEXT: lbu a3, 8(a0) 1760; RV64I-NEXT: lbu a4, 9(a0) 1761; RV64I-NEXT: lbu a5, 10(a0) 1762; RV64I-NEXT: lbu a6, 11(a0) 1763; RV64I-NEXT: lbu a7, 12(a0) 1764; RV64I-NEXT: lbu t0, 13(a0) 1765; RV64I-NEXT: lbu t1, 14(a0) 1766; RV64I-NEXT: lbu t2, 15(a0) 1767; RV64I-NEXT: slli a4, a4, 8 1768; RV64I-NEXT: slli a5, a5, 16 1769; RV64I-NEXT: slli a6, a6, 24 1770; RV64I-NEXT: slli t0, t0, 8 1771; RV64I-NEXT: or a3, a4, a3 1772; RV64I-NEXT: or a4, a6, a5 1773; RV64I-NEXT: or a5, t0, a7 1774; RV64I-NEXT: lbu a6, 4(a1) 1775; RV64I-NEXT: lbu a7, 5(a1) 1776; RV64I-NEXT: lbu t0, 6(a1) 1777; RV64I-NEXT: lbu t3, 7(a1) 1778; RV64I-NEXT: slli t1, t1, 16 1779; RV64I-NEXT: slli t2, t2, 24 1780; RV64I-NEXT: slli a7, a7, 8 1781; RV64I-NEXT: slli t0, t0, 16 1782; RV64I-NEXT: slli t3, t3, 24 1783; RV64I-NEXT: or t1, t2, t1 1784; RV64I-NEXT: or a6, a7, a6 1785; RV64I-NEXT: lbu a7, 0(a1) 1786; RV64I-NEXT: lbu t2, 1(a1) 1787; RV64I-NEXT: or t0, t3, t0 1788; RV64I-NEXT: lbu t3, 2(a1) 1789; RV64I-NEXT: lbu a1, 3(a1) 1790; RV64I-NEXT: slli t2, t2, 8 1791; RV64I-NEXT: or a7, t2, a7 1792; RV64I-NEXT: slli t3, t3, 16 1793; RV64I-NEXT: slli a1, a1, 24 1794; RV64I-NEXT: or a1, a1, t3 1795; RV64I-NEXT: or a3, a4, a3 1796; RV64I-NEXT: or a5, t1, a5 1797; RV64I-NEXT: or a4, t0, a6 1798; RV64I-NEXT: or a1, a1, a7 1799; RV64I-NEXT: slli a6, a5, 32 1800; RV64I-NEXT: slli a1, a1, 5 1801; RV64I-NEXT: slli a7, a4, 37 1802; RV64I-NEXT: or a4, a6, a3 1803; RV64I-NEXT: or a3, a7, a1 1804; RV64I-NEXT: addi a6, a3, -64 1805; RV64I-NEXT: sra a1, a4, a3 1806; RV64I-NEXT: bltz a6, .LBB11_2 1807; RV64I-NEXT: # %bb.1: 1808; RV64I-NEXT: sraiw a3, a5, 31 1809; RV64I-NEXT: mv a0, a1 1810; RV64I-NEXT: mv a1, a3 1811; RV64I-NEXT: j .LBB11_3 1812; RV64I-NEXT: .LBB11_2: 1813; RV64I-NEXT: lbu a5, 1(a0) 1814; RV64I-NEXT: lbu a6, 2(a0) 1815; RV64I-NEXT: lbu a7, 3(a0) 1816; RV64I-NEXT: lbu t0, 0(a0) 1817; RV64I-NEXT: slli a5, a5, 8 1818; RV64I-NEXT: slli a6, a6, 16 1819; RV64I-NEXT: slli a7, a7, 24 1820; RV64I-NEXT: or a5, a5, t0 1821; RV64I-NEXT: lbu t0, 4(a0) 1822; RV64I-NEXT: lbu t1, 5(a0) 1823; RV64I-NEXT: or a6, a7, a6 1824; RV64I-NEXT: lbu a7, 6(a0) 1825; RV64I-NEXT: lbu a0, 7(a0) 1826; RV64I-NEXT: slli t1, t1, 8 1827; RV64I-NEXT: or t0, t1, t0 1828; RV64I-NEXT: slli a7, a7, 16 1829; RV64I-NEXT: slli a0, a0, 24 1830; RV64I-NEXT: or a0, a0, a7 1831; RV64I-NEXT: or a5, a6, a5 1832; RV64I-NEXT: not a6, a3 1833; RV64I-NEXT: slli a4, a4, 1 1834; RV64I-NEXT: or a0, a0, t0 1835; RV64I-NEXT: slli a0, a0, 32 1836; RV64I-NEXT: or a0, a0, a5 1837; RV64I-NEXT: srl a0, a0, a3 1838; RV64I-NEXT: sll a3, a4, a6 1839; RV64I-NEXT: or a0, a0, a3 1840; RV64I-NEXT: .LBB11_3: 1841; RV64I-NEXT: srli a3, a1, 56 1842; RV64I-NEXT: srli a4, a1, 48 1843; RV64I-NEXT: srli a5, a1, 40 1844; RV64I-NEXT: srli a6, a1, 32 1845; RV64I-NEXT: srli a7, a1, 24 1846; RV64I-NEXT: srli t0, a1, 16 1847; RV64I-NEXT: srli t1, a1, 8 1848; RV64I-NEXT: srli t2, a0, 56 1849; RV64I-NEXT: srli t3, a0, 48 1850; RV64I-NEXT: srli t4, a0, 40 1851; RV64I-NEXT: srli t5, a0, 32 1852; RV64I-NEXT: sb a6, 12(a2) 1853; RV64I-NEXT: sb a5, 13(a2) 1854; RV64I-NEXT: sb a4, 14(a2) 1855; RV64I-NEXT: sb a3, 15(a2) 1856; RV64I-NEXT: srli a3, a0, 24 1857; RV64I-NEXT: sb a1, 8(a2) 1858; RV64I-NEXT: sb t1, 9(a2) 1859; RV64I-NEXT: sb t0, 10(a2) 1860; RV64I-NEXT: sb a7, 11(a2) 1861; RV64I-NEXT: srli a1, a0, 16 1862; RV64I-NEXT: sb t5, 4(a2) 1863; RV64I-NEXT: sb t4, 5(a2) 1864; RV64I-NEXT: sb t3, 6(a2) 1865; RV64I-NEXT: sb t2, 7(a2) 1866; RV64I-NEXT: srli a4, a0, 8 1867; RV64I-NEXT: sb a0, 0(a2) 1868; RV64I-NEXT: sb a4, 1(a2) 1869; RV64I-NEXT: sb a1, 2(a2) 1870; RV64I-NEXT: sb a3, 3(a2) 1871; RV64I-NEXT: ret 1872; 1873; RV32I-LABEL: ashr_16bytes_wordOff: 1874; RV32I: # %bb.0: 1875; RV32I-NEXT: addi sp, sp, -32 1876; RV32I-NEXT: lbu a3, 0(a0) 1877; RV32I-NEXT: lbu a4, 1(a0) 1878; RV32I-NEXT: lbu a5, 2(a0) 1879; RV32I-NEXT: lbu a6, 3(a0) 1880; RV32I-NEXT: lbu a7, 4(a0) 1881; RV32I-NEXT: lbu t0, 5(a0) 1882; RV32I-NEXT: lbu t1, 6(a0) 1883; RV32I-NEXT: lbu t2, 7(a0) 1884; RV32I-NEXT: lbu t3, 8(a0) 1885; RV32I-NEXT: lbu t4, 9(a0) 1886; RV32I-NEXT: lbu t5, 10(a0) 1887; RV32I-NEXT: lbu t6, 11(a0) 1888; RV32I-NEXT: slli a4, a4, 8 1889; RV32I-NEXT: slli a5, a5, 16 1890; RV32I-NEXT: slli a6, a6, 24 1891; RV32I-NEXT: slli t0, t0, 8 1892; RV32I-NEXT: or a3, a4, a3 1893; RV32I-NEXT: or a4, a6, a5 1894; RV32I-NEXT: or a5, t0, a7 1895; RV32I-NEXT: lbu a6, 12(a0) 1896; RV32I-NEXT: lbu a7, 13(a0) 1897; RV32I-NEXT: lbu t0, 14(a0) 1898; RV32I-NEXT: lbu a0, 15(a0) 1899; RV32I-NEXT: lbu a1, 0(a1) 1900; RV32I-NEXT: slli t1, t1, 16 1901; RV32I-NEXT: slli t2, t2, 24 1902; RV32I-NEXT: or t1, t2, t1 1903; RV32I-NEXT: mv t2, sp 1904; RV32I-NEXT: slli t4, t4, 8 1905; RV32I-NEXT: slli t5, t5, 16 1906; RV32I-NEXT: slli t6, t6, 24 1907; RV32I-NEXT: slli a7, a7, 8 1908; RV32I-NEXT: slli t0, t0, 16 1909; RV32I-NEXT: slli a0, a0, 24 1910; RV32I-NEXT: slli a1, a1, 2 1911; RV32I-NEXT: or t3, t4, t3 1912; RV32I-NEXT: or t4, t6, t5 1913; RV32I-NEXT: or a6, a7, a6 1914; RV32I-NEXT: or a7, a0, t0 1915; RV32I-NEXT: srai a0, a0, 31 1916; RV32I-NEXT: andi a1, a1, 12 1917; RV32I-NEXT: or a3, a4, a3 1918; RV32I-NEXT: or a4, t1, a5 1919; RV32I-NEXT: or a5, t4, t3 1920; RV32I-NEXT: or a6, a7, a6 1921; RV32I-NEXT: sw a0, 16(sp) 1922; RV32I-NEXT: sw a0, 20(sp) 1923; RV32I-NEXT: sw a0, 24(sp) 1924; RV32I-NEXT: sw a0, 28(sp) 1925; RV32I-NEXT: add a1, t2, a1 1926; RV32I-NEXT: sw a3, 0(sp) 1927; RV32I-NEXT: sw a4, 4(sp) 1928; RV32I-NEXT: sw a5, 8(sp) 1929; RV32I-NEXT: sw a6, 12(sp) 1930; RV32I-NEXT: lw a0, 8(a1) 1931; RV32I-NEXT: lw a3, 4(a1) 1932; RV32I-NEXT: lw a4, 0(a1) 1933; RV32I-NEXT: lw a1, 12(a1) 1934; RV32I-NEXT: srli a5, a0, 16 1935; RV32I-NEXT: srli a6, a0, 24 1936; RV32I-NEXT: srli a7, a0, 8 1937; RV32I-NEXT: srli t0, a1, 16 1938; RV32I-NEXT: srli t1, a1, 24 1939; RV32I-NEXT: srli t2, a1, 8 1940; RV32I-NEXT: srli t3, a4, 16 1941; RV32I-NEXT: srli t4, a4, 24 1942; RV32I-NEXT: srli t5, a4, 8 1943; RV32I-NEXT: srli t6, a3, 16 1944; RV32I-NEXT: sb a0, 8(a2) 1945; RV32I-NEXT: sb a7, 9(a2) 1946; RV32I-NEXT: sb a5, 10(a2) 1947; RV32I-NEXT: sb a6, 11(a2) 1948; RV32I-NEXT: srli a0, a3, 24 1949; RV32I-NEXT: sb a1, 12(a2) 1950; RV32I-NEXT: sb t2, 13(a2) 1951; RV32I-NEXT: sb t0, 14(a2) 1952; RV32I-NEXT: sb t1, 15(a2) 1953; RV32I-NEXT: srli a1, a3, 8 1954; RV32I-NEXT: sb a4, 0(a2) 1955; RV32I-NEXT: sb t5, 1(a2) 1956; RV32I-NEXT: sb t3, 2(a2) 1957; RV32I-NEXT: sb t4, 3(a2) 1958; RV32I-NEXT: sb a3, 4(a2) 1959; RV32I-NEXT: sb a1, 5(a2) 1960; RV32I-NEXT: sb t6, 6(a2) 1961; RV32I-NEXT: sb a0, 7(a2) 1962; RV32I-NEXT: addi sp, sp, 32 1963; RV32I-NEXT: ret 1964 %src = load i128, ptr %src.ptr, align 1 1965 %wordOff = load i128, ptr %wordOff.ptr, align 1 1966 %bitOff = shl i128 %wordOff, 5 1967 %res = ashr i128 %src, %bitOff 1968 store i128 %res, ptr %dst, align 1 1969 ret void 1970} 1971 1972define void @lshr_32bytes(ptr %src.ptr, ptr %byteOff.ptr, ptr %dst) nounwind { 1973; RV64I-LABEL: lshr_32bytes: 1974; RV64I: # %bb.0: 1975; RV64I-NEXT: addi sp, sp, -160 1976; RV64I-NEXT: sd s0, 152(sp) # 8-byte Folded Spill 1977; RV64I-NEXT: sd s1, 144(sp) # 8-byte Folded Spill 1978; RV64I-NEXT: sd s2, 136(sp) # 8-byte Folded Spill 1979; RV64I-NEXT: sd s3, 128(sp) # 8-byte Folded Spill 1980; RV64I-NEXT: sd s4, 120(sp) # 8-byte Folded Spill 1981; RV64I-NEXT: sd s5, 112(sp) # 8-byte Folded Spill 1982; RV64I-NEXT: sd s6, 104(sp) # 8-byte Folded Spill 1983; RV64I-NEXT: sd s7, 96(sp) # 8-byte Folded Spill 1984; RV64I-NEXT: sd s8, 88(sp) # 8-byte Folded Spill 1985; RV64I-NEXT: sd s9, 80(sp) # 8-byte Folded Spill 1986; RV64I-NEXT: sd s10, 72(sp) # 8-byte Folded Spill 1987; RV64I-NEXT: sd s11, 64(sp) # 8-byte Folded Spill 1988; RV64I-NEXT: lbu a3, 0(a0) 1989; RV64I-NEXT: lbu a4, 1(a0) 1990; RV64I-NEXT: lbu a5, 2(a0) 1991; RV64I-NEXT: lbu a6, 3(a0) 1992; RV64I-NEXT: lbu a7, 4(a0) 1993; RV64I-NEXT: lbu t0, 5(a0) 1994; RV64I-NEXT: lbu t1, 6(a0) 1995; RV64I-NEXT: lbu t2, 7(a0) 1996; RV64I-NEXT: lbu t3, 8(a0) 1997; RV64I-NEXT: lbu t4, 9(a0) 1998; RV64I-NEXT: lbu t5, 10(a0) 1999; RV64I-NEXT: lbu t6, 11(a0) 2000; RV64I-NEXT: lbu s0, 12(a0) 2001; RV64I-NEXT: lbu s1, 13(a0) 2002; RV64I-NEXT: lbu s2, 14(a0) 2003; RV64I-NEXT: lbu s3, 15(a0) 2004; RV64I-NEXT: lbu s4, 16(a0) 2005; RV64I-NEXT: lbu s5, 17(a0) 2006; RV64I-NEXT: lbu s6, 18(a0) 2007; RV64I-NEXT: lbu s7, 19(a0) 2008; RV64I-NEXT: slli a4, a4, 8 2009; RV64I-NEXT: slli a5, a5, 16 2010; RV64I-NEXT: slli a6, a6, 24 2011; RV64I-NEXT: slli t0, t0, 8 2012; RV64I-NEXT: slli t1, t1, 16 2013; RV64I-NEXT: slli t2, t2, 24 2014; RV64I-NEXT: or a3, a4, a3 2015; RV64I-NEXT: or a4, a6, a5 2016; RV64I-NEXT: or a5, t0, a7 2017; RV64I-NEXT: or a6, t2, t1 2018; RV64I-NEXT: lbu s8, 20(a0) 2019; RV64I-NEXT: lbu s9, 21(a0) 2020; RV64I-NEXT: lbu s10, 22(a0) 2021; RV64I-NEXT: lbu s11, 23(a0) 2022; RV64I-NEXT: slli t4, t4, 8 2023; RV64I-NEXT: slli t5, t5, 16 2024; RV64I-NEXT: slli t6, t6, 24 2025; RV64I-NEXT: slli s1, s1, 8 2026; RV64I-NEXT: slli s2, s2, 16 2027; RV64I-NEXT: slli s3, s3, 24 2028; RV64I-NEXT: or a7, t4, t3 2029; RV64I-NEXT: or t0, t6, t5 2030; RV64I-NEXT: or t1, s1, s0 2031; RV64I-NEXT: or t2, s3, s2 2032; RV64I-NEXT: lbu t6, 24(a0) 2033; RV64I-NEXT: lbu s0, 25(a0) 2034; RV64I-NEXT: lbu s1, 26(a0) 2035; RV64I-NEXT: lbu s2, 27(a0) 2036; RV64I-NEXT: slli s5, s5, 8 2037; RV64I-NEXT: slli s6, s6, 16 2038; RV64I-NEXT: slli s7, s7, 24 2039; RV64I-NEXT: slli s9, s9, 8 2040; RV64I-NEXT: or t3, s5, s4 2041; RV64I-NEXT: or t4, s7, s6 2042; RV64I-NEXT: or t5, s9, s8 2043; RV64I-NEXT: lbu s3, 28(a0) 2044; RV64I-NEXT: lbu s4, 29(a0) 2045; RV64I-NEXT: lbu s5, 30(a0) 2046; RV64I-NEXT: lbu s6, 31(a0) 2047; RV64I-NEXT: slli s10, s10, 16 2048; RV64I-NEXT: slli s11, s11, 24 2049; RV64I-NEXT: slli s0, s0, 8 2050; RV64I-NEXT: slli s1, s1, 16 2051; RV64I-NEXT: slli s2, s2, 24 2052; RV64I-NEXT: slli s4, s4, 8 2053; RV64I-NEXT: or a0, s11, s10 2054; RV64I-NEXT: or t6, s0, t6 2055; RV64I-NEXT: or s0, s2, s1 2056; RV64I-NEXT: or s1, s4, s3 2057; RV64I-NEXT: lbu s2, 0(a1) 2058; RV64I-NEXT: lbu s3, 1(a1) 2059; RV64I-NEXT: lbu s4, 2(a1) 2060; RV64I-NEXT: lbu s7, 3(a1) 2061; RV64I-NEXT: slli s5, s5, 16 2062; RV64I-NEXT: slli s6, s6, 24 2063; RV64I-NEXT: slli s3, s3, 8 2064; RV64I-NEXT: slli s4, s4, 16 2065; RV64I-NEXT: slli s7, s7, 24 2066; RV64I-NEXT: or s5, s6, s5 2067; RV64I-NEXT: or s2, s3, s2 2068; RV64I-NEXT: lbu s3, 4(a1) 2069; RV64I-NEXT: lbu s6, 5(a1) 2070; RV64I-NEXT: or s4, s7, s4 2071; RV64I-NEXT: lbu s7, 6(a1) 2072; RV64I-NEXT: lbu a1, 7(a1) 2073; RV64I-NEXT: slli s6, s6, 8 2074; RV64I-NEXT: or s3, s6, s3 2075; RV64I-NEXT: sd zero, 32(sp) 2076; RV64I-NEXT: sd zero, 40(sp) 2077; RV64I-NEXT: sd zero, 48(sp) 2078; RV64I-NEXT: sd zero, 56(sp) 2079; RV64I-NEXT: slli s7, s7, 16 2080; RV64I-NEXT: slli a1, a1, 24 2081; RV64I-NEXT: or a1, a1, s7 2082; RV64I-NEXT: mv s6, sp 2083; RV64I-NEXT: or a3, a4, a3 2084; RV64I-NEXT: or a4, a6, a5 2085; RV64I-NEXT: or a5, t0, a7 2086; RV64I-NEXT: or a6, t2, t1 2087; RV64I-NEXT: or a7, t4, t3 2088; RV64I-NEXT: or a0, a0, t5 2089; RV64I-NEXT: or t0, s0, t6 2090; RV64I-NEXT: or t1, s5, s1 2091; RV64I-NEXT: or t2, s4, s2 2092; RV64I-NEXT: or a1, a1, s3 2093; RV64I-NEXT: slli a4, a4, 32 2094; RV64I-NEXT: slli a6, a6, 32 2095; RV64I-NEXT: slli a0, a0, 32 2096; RV64I-NEXT: slli t1, t1, 32 2097; RV64I-NEXT: slli a1, a1, 32 2098; RV64I-NEXT: or a3, a4, a3 2099; RV64I-NEXT: or a4, a6, a5 2100; RV64I-NEXT: or a0, a0, a7 2101; RV64I-NEXT: or a5, t1, t0 2102; RV64I-NEXT: or a1, a1, t2 2103; RV64I-NEXT: sd a3, 0(sp) 2104; RV64I-NEXT: sd a4, 8(sp) 2105; RV64I-NEXT: sd a0, 16(sp) 2106; RV64I-NEXT: sd a5, 24(sp) 2107; RV64I-NEXT: slli a4, a1, 3 2108; RV64I-NEXT: andi a1, a1, 24 2109; RV64I-NEXT: add a1, s6, a1 2110; RV64I-NEXT: andi a0, a4, 56 2111; RV64I-NEXT: ld a3, 0(a1) 2112; RV64I-NEXT: ld a5, 8(a1) 2113; RV64I-NEXT: ld a6, 16(a1) 2114; RV64I-NEXT: xori a7, a0, 63 2115; RV64I-NEXT: ld t0, 24(a1) 2116; RV64I-NEXT: srl a0, a5, a4 2117; RV64I-NEXT: slli t1, a6, 1 2118; RV64I-NEXT: srl a1, a3, a4 2119; RV64I-NEXT: slli a5, a5, 1 2120; RV64I-NEXT: srl a3, a6, a4 2121; RV64I-NEXT: slli a6, t0, 1 2122; RV64I-NEXT: srl t0, t0, a4 2123; RV64I-NEXT: sll a4, t1, a7 2124; RV64I-NEXT: sll a5, a5, a7 2125; RV64I-NEXT: sll a6, a6, a7 2126; RV64I-NEXT: srli a7, t0, 56 2127; RV64I-NEXT: srli t1, t0, 48 2128; RV64I-NEXT: srli t2, t0, 40 2129; RV64I-NEXT: srli t3, t0, 32 2130; RV64I-NEXT: srli t4, t0, 24 2131; RV64I-NEXT: srli t5, t0, 16 2132; RV64I-NEXT: srli t6, t0, 8 2133; RV64I-NEXT: or a4, a0, a4 2134; RV64I-NEXT: or a5, a1, a5 2135; RV64I-NEXT: or a6, a3, a6 2136; RV64I-NEXT: sb t3, 28(a2) 2137; RV64I-NEXT: sb t2, 29(a2) 2138; RV64I-NEXT: sb t1, 30(a2) 2139; RV64I-NEXT: sb a7, 31(a2) 2140; RV64I-NEXT: sb t0, 24(a2) 2141; RV64I-NEXT: sb t6, 25(a2) 2142; RV64I-NEXT: sb t5, 26(a2) 2143; RV64I-NEXT: sb t4, 27(a2) 2144; RV64I-NEXT: srli a7, a6, 56 2145; RV64I-NEXT: srli t0, a6, 48 2146; RV64I-NEXT: srli t1, a6, 40 2147; RV64I-NEXT: srli t2, a6, 32 2148; RV64I-NEXT: srli t3, a6, 24 2149; RV64I-NEXT: srli t4, a6, 16 2150; RV64I-NEXT: srli a6, a6, 8 2151; RV64I-NEXT: srli t5, a5, 56 2152; RV64I-NEXT: srli t6, a5, 48 2153; RV64I-NEXT: srli s0, a5, 40 2154; RV64I-NEXT: srli s1, a5, 32 2155; RV64I-NEXT: srli s2, a5, 24 2156; RV64I-NEXT: srli s3, a5, 16 2157; RV64I-NEXT: srli a5, a5, 8 2158; RV64I-NEXT: srli s4, a4, 56 2159; RV64I-NEXT: srli s5, a4, 48 2160; RV64I-NEXT: srli s6, a4, 40 2161; RV64I-NEXT: sb t2, 20(a2) 2162; RV64I-NEXT: sb t1, 21(a2) 2163; RV64I-NEXT: sb t0, 22(a2) 2164; RV64I-NEXT: sb a7, 23(a2) 2165; RV64I-NEXT: srli a7, a4, 32 2166; RV64I-NEXT: sb a3, 16(a2) 2167; RV64I-NEXT: sb a6, 17(a2) 2168; RV64I-NEXT: sb t4, 18(a2) 2169; RV64I-NEXT: sb t3, 19(a2) 2170; RV64I-NEXT: srli a3, a4, 24 2171; RV64I-NEXT: sb s1, 4(a2) 2172; RV64I-NEXT: sb s0, 5(a2) 2173; RV64I-NEXT: sb t6, 6(a2) 2174; RV64I-NEXT: sb t5, 7(a2) 2175; RV64I-NEXT: srli a6, a4, 16 2176; RV64I-NEXT: srli a4, a4, 8 2177; RV64I-NEXT: sb a1, 0(a2) 2178; RV64I-NEXT: sb a5, 1(a2) 2179; RV64I-NEXT: sb s3, 2(a2) 2180; RV64I-NEXT: sb s2, 3(a2) 2181; RV64I-NEXT: sb a7, 12(a2) 2182; RV64I-NEXT: sb s6, 13(a2) 2183; RV64I-NEXT: sb s5, 14(a2) 2184; RV64I-NEXT: sb s4, 15(a2) 2185; RV64I-NEXT: sb a0, 8(a2) 2186; RV64I-NEXT: sb a4, 9(a2) 2187; RV64I-NEXT: sb a6, 10(a2) 2188; RV64I-NEXT: sb a3, 11(a2) 2189; RV64I-NEXT: ld s0, 152(sp) # 8-byte Folded Reload 2190; RV64I-NEXT: ld s1, 144(sp) # 8-byte Folded Reload 2191; RV64I-NEXT: ld s2, 136(sp) # 8-byte Folded Reload 2192; RV64I-NEXT: ld s3, 128(sp) # 8-byte Folded Reload 2193; RV64I-NEXT: ld s4, 120(sp) # 8-byte Folded Reload 2194; RV64I-NEXT: ld s5, 112(sp) # 8-byte Folded Reload 2195; RV64I-NEXT: ld s6, 104(sp) # 8-byte Folded Reload 2196; RV64I-NEXT: ld s7, 96(sp) # 8-byte Folded Reload 2197; RV64I-NEXT: ld s8, 88(sp) # 8-byte Folded Reload 2198; RV64I-NEXT: ld s9, 80(sp) # 8-byte Folded Reload 2199; RV64I-NEXT: ld s10, 72(sp) # 8-byte Folded Reload 2200; RV64I-NEXT: ld s11, 64(sp) # 8-byte Folded Reload 2201; RV64I-NEXT: addi sp, sp, 160 2202; RV64I-NEXT: ret 2203; 2204; RV32I-LABEL: lshr_32bytes: 2205; RV32I: # %bb.0: 2206; RV32I-NEXT: addi sp, sp, -128 2207; RV32I-NEXT: sw ra, 124(sp) # 4-byte Folded Spill 2208; RV32I-NEXT: sw s0, 120(sp) # 4-byte Folded Spill 2209; RV32I-NEXT: sw s1, 116(sp) # 4-byte Folded Spill 2210; RV32I-NEXT: sw s2, 112(sp) # 4-byte Folded Spill 2211; RV32I-NEXT: sw s3, 108(sp) # 4-byte Folded Spill 2212; RV32I-NEXT: sw s4, 104(sp) # 4-byte Folded Spill 2213; RV32I-NEXT: sw s5, 100(sp) # 4-byte Folded Spill 2214; RV32I-NEXT: sw s6, 96(sp) # 4-byte Folded Spill 2215; RV32I-NEXT: sw s7, 92(sp) # 4-byte Folded Spill 2216; RV32I-NEXT: sw s8, 88(sp) # 4-byte Folded Spill 2217; RV32I-NEXT: sw s9, 84(sp) # 4-byte Folded Spill 2218; RV32I-NEXT: sw s10, 80(sp) # 4-byte Folded Spill 2219; RV32I-NEXT: sw s11, 76(sp) # 4-byte Folded Spill 2220; RV32I-NEXT: lbu s1, 0(a0) 2221; RV32I-NEXT: lbu a4, 1(a0) 2222; RV32I-NEXT: lbu a5, 2(a0) 2223; RV32I-NEXT: lbu a6, 3(a0) 2224; RV32I-NEXT: lbu t1, 4(a0) 2225; RV32I-NEXT: lbu t3, 5(a0) 2226; RV32I-NEXT: lbu t4, 6(a0) 2227; RV32I-NEXT: lbu s0, 7(a0) 2228; RV32I-NEXT: lbu t2, 8(a0) 2229; RV32I-NEXT: lbu s3, 9(a0) 2230; RV32I-NEXT: lbu s6, 10(a0) 2231; RV32I-NEXT: lbu s8, 11(a0) 2232; RV32I-NEXT: lbu s9, 12(a0) 2233; RV32I-NEXT: lbu s10, 13(a0) 2234; RV32I-NEXT: lbu s4, 14(a0) 2235; RV32I-NEXT: lbu s7, 15(a0) 2236; RV32I-NEXT: lbu s5, 16(a0) 2237; RV32I-NEXT: lbu s11, 17(a0) 2238; RV32I-NEXT: lbu ra, 18(a0) 2239; RV32I-NEXT: lbu a3, 19(a0) 2240; RV32I-NEXT: lbu t5, 20(a0) 2241; RV32I-NEXT: lbu t6, 21(a0) 2242; RV32I-NEXT: lbu a7, 22(a0) 2243; RV32I-NEXT: lbu t0, 23(a0) 2244; RV32I-NEXT: slli a4, a4, 8 2245; RV32I-NEXT: slli a5, a5, 16 2246; RV32I-NEXT: slli a6, a6, 24 2247; RV32I-NEXT: slli t3, t3, 8 2248; RV32I-NEXT: slli t4, t4, 16 2249; RV32I-NEXT: slli s0, s0, 24 2250; RV32I-NEXT: or a4, a4, s1 2251; RV32I-NEXT: sw a4, 4(sp) # 4-byte Folded Spill 2252; RV32I-NEXT: or a4, a6, a5 2253; RV32I-NEXT: or a5, t3, t1 2254; RV32I-NEXT: or a6, s0, t4 2255; RV32I-NEXT: lbu t1, 24(a0) 2256; RV32I-NEXT: lbu s0, 25(a0) 2257; RV32I-NEXT: lbu s1, 26(a0) 2258; RV32I-NEXT: lbu s2, 27(a0) 2259; RV32I-NEXT: slli s3, s3, 8 2260; RV32I-NEXT: slli s6, s6, 16 2261; RV32I-NEXT: slli s8, s8, 24 2262; RV32I-NEXT: slli s10, s10, 8 2263; RV32I-NEXT: or t2, s3, t2 2264; RV32I-NEXT: or t3, s8, s6 2265; RV32I-NEXT: or t4, s10, s9 2266; RV32I-NEXT: lbu s3, 28(a0) 2267; RV32I-NEXT: lbu s6, 29(a0) 2268; RV32I-NEXT: lbu s8, 30(a0) 2269; RV32I-NEXT: lbu s9, 31(a0) 2270; RV32I-NEXT: slli s4, s4, 16 2271; RV32I-NEXT: slli s7, s7, 24 2272; RV32I-NEXT: slli s11, s11, 8 2273; RV32I-NEXT: slli ra, ra, 16 2274; RV32I-NEXT: slli a3, a3, 24 2275; RV32I-NEXT: or a0, s7, s4 2276; RV32I-NEXT: or s4, s11, s5 2277; RV32I-NEXT: or s5, a3, ra 2278; RV32I-NEXT: lbu a3, 0(a1) 2279; RV32I-NEXT: lbu s7, 1(a1) 2280; RV32I-NEXT: lbu s10, 2(a1) 2281; RV32I-NEXT: lbu a1, 3(a1) 2282; RV32I-NEXT: sw zero, 56(sp) 2283; RV32I-NEXT: sw zero, 60(sp) 2284; RV32I-NEXT: sw zero, 64(sp) 2285; RV32I-NEXT: sw zero, 68(sp) 2286; RV32I-NEXT: sw zero, 40(sp) 2287; RV32I-NEXT: sw zero, 44(sp) 2288; RV32I-NEXT: sw zero, 48(sp) 2289; RV32I-NEXT: sw zero, 52(sp) 2290; RV32I-NEXT: slli t6, t6, 8 2291; RV32I-NEXT: or t5, t6, t5 2292; RV32I-NEXT: addi t6, sp, 8 2293; RV32I-NEXT: slli a7, a7, 16 2294; RV32I-NEXT: slli t0, t0, 24 2295; RV32I-NEXT: slli s0, s0, 8 2296; RV32I-NEXT: slli s1, s1, 16 2297; RV32I-NEXT: slli s2, s2, 24 2298; RV32I-NEXT: slli s6, s6, 8 2299; RV32I-NEXT: slli s8, s8, 16 2300; RV32I-NEXT: slli s9, s9, 24 2301; RV32I-NEXT: slli s7, s7, 8 2302; RV32I-NEXT: slli s10, s10, 16 2303; RV32I-NEXT: slli a1, a1, 24 2304; RV32I-NEXT: or a7, t0, a7 2305; RV32I-NEXT: or t0, s0, t1 2306; RV32I-NEXT: or t1, s2, s1 2307; RV32I-NEXT: or s0, s6, s3 2308; RV32I-NEXT: or s1, s9, s8 2309; RV32I-NEXT: or a3, s7, a3 2310; RV32I-NEXT: or a1, a1, s10 2311; RV32I-NEXT: lw s2, 4(sp) # 4-byte Folded Reload 2312; RV32I-NEXT: or a4, a4, s2 2313; RV32I-NEXT: or a5, a6, a5 2314; RV32I-NEXT: or a6, t3, t2 2315; RV32I-NEXT: or a0, a0, t4 2316; RV32I-NEXT: or t2, s5, s4 2317; RV32I-NEXT: or a7, a7, t5 2318; RV32I-NEXT: or t0, t1, t0 2319; RV32I-NEXT: or s0, s1, s0 2320; RV32I-NEXT: or a1, a1, a3 2321; RV32I-NEXT: sw t2, 24(sp) 2322; RV32I-NEXT: sw a7, 28(sp) 2323; RV32I-NEXT: sw t0, 32(sp) 2324; RV32I-NEXT: sw s0, 36(sp) 2325; RV32I-NEXT: sw a4, 8(sp) 2326; RV32I-NEXT: sw a5, 12(sp) 2327; RV32I-NEXT: sw a6, 16(sp) 2328; RV32I-NEXT: sw a0, 20(sp) 2329; RV32I-NEXT: slli t1, a1, 3 2330; RV32I-NEXT: andi a1, a1, 28 2331; RV32I-NEXT: add a1, t6, a1 2332; RV32I-NEXT: andi a0, t1, 24 2333; RV32I-NEXT: xori t0, a0, 31 2334; RV32I-NEXT: lw a3, 0(a1) 2335; RV32I-NEXT: lw a4, 4(a1) 2336; RV32I-NEXT: lw a5, 8(a1) 2337; RV32I-NEXT: lw a6, 12(a1) 2338; RV32I-NEXT: lw a7, 16(a1) 2339; RV32I-NEXT: lw t2, 20(a1) 2340; RV32I-NEXT: lw t3, 24(a1) 2341; RV32I-NEXT: lw t4, 28(a1) 2342; RV32I-NEXT: srl a0, a4, t1 2343; RV32I-NEXT: slli t5, a5, 1 2344; RV32I-NEXT: srl a1, a3, t1 2345; RV32I-NEXT: slli t6, a4, 1 2346; RV32I-NEXT: srl a3, a6, t1 2347; RV32I-NEXT: slli s0, a7, 1 2348; RV32I-NEXT: srl a4, a5, t1 2349; RV32I-NEXT: slli s1, a6, 1 2350; RV32I-NEXT: srl a5, t2, t1 2351; RV32I-NEXT: slli s2, t3, 1 2352; RV32I-NEXT: srl a6, a7, t1 2353; RV32I-NEXT: slli t2, t2, 1 2354; RV32I-NEXT: srl a7, t3, t1 2355; RV32I-NEXT: slli t3, t4, 1 2356; RV32I-NEXT: srl t1, t4, t1 2357; RV32I-NEXT: sll t4, t5, t0 2358; RV32I-NEXT: sll t5, t6, t0 2359; RV32I-NEXT: sll t6, s0, t0 2360; RV32I-NEXT: sll s0, s1, t0 2361; RV32I-NEXT: sll s1, s2, t0 2362; RV32I-NEXT: sll t2, t2, t0 2363; RV32I-NEXT: sll t3, t3, t0 2364; RV32I-NEXT: srli s2, t1, 24 2365; RV32I-NEXT: srli s3, t1, 16 2366; RV32I-NEXT: srli s4, t1, 8 2367; RV32I-NEXT: or t0, a0, t4 2368; RV32I-NEXT: or t4, a1, t5 2369; RV32I-NEXT: or t5, a3, t6 2370; RV32I-NEXT: or s0, a4, s0 2371; RV32I-NEXT: or s1, a5, s1 2372; RV32I-NEXT: or t2, a6, t2 2373; RV32I-NEXT: or t3, a7, t3 2374; RV32I-NEXT: sb t1, 28(a2) 2375; RV32I-NEXT: sb s4, 29(a2) 2376; RV32I-NEXT: sb s3, 30(a2) 2377; RV32I-NEXT: sb s2, 31(a2) 2378; RV32I-NEXT: srli t1, t3, 24 2379; RV32I-NEXT: srli t6, t3, 16 2380; RV32I-NEXT: srli t3, t3, 8 2381; RV32I-NEXT: srli s2, t2, 24 2382; RV32I-NEXT: srli s3, t2, 16 2383; RV32I-NEXT: srli t2, t2, 8 2384; RV32I-NEXT: srli s4, s1, 24 2385; RV32I-NEXT: srli s5, s1, 16 2386; RV32I-NEXT: srli s1, s1, 8 2387; RV32I-NEXT: srli s6, s0, 24 2388; RV32I-NEXT: srli s7, s0, 16 2389; RV32I-NEXT: srli s0, s0, 8 2390; RV32I-NEXT: srli s8, t5, 24 2391; RV32I-NEXT: srli s9, t5, 16 2392; RV32I-NEXT: srli t5, t5, 8 2393; RV32I-NEXT: srli s10, t4, 24 2394; RV32I-NEXT: srli s11, t4, 16 2395; RV32I-NEXT: srli t4, t4, 8 2396; RV32I-NEXT: sb a7, 24(a2) 2397; RV32I-NEXT: sb t3, 25(a2) 2398; RV32I-NEXT: sb t6, 26(a2) 2399; RV32I-NEXT: sb t1, 27(a2) 2400; RV32I-NEXT: srli a7, t0, 24 2401; RV32I-NEXT: sb a6, 16(a2) 2402; RV32I-NEXT: sb t2, 17(a2) 2403; RV32I-NEXT: sb s3, 18(a2) 2404; RV32I-NEXT: sb s2, 19(a2) 2405; RV32I-NEXT: srli a6, t0, 16 2406; RV32I-NEXT: srli t0, t0, 8 2407; RV32I-NEXT: sb a5, 20(a2) 2408; RV32I-NEXT: sb s1, 21(a2) 2409; RV32I-NEXT: sb s5, 22(a2) 2410; RV32I-NEXT: sb s4, 23(a2) 2411; RV32I-NEXT: sb a4, 8(a2) 2412; RV32I-NEXT: sb s0, 9(a2) 2413; RV32I-NEXT: sb s7, 10(a2) 2414; RV32I-NEXT: sb s6, 11(a2) 2415; RV32I-NEXT: sb a3, 12(a2) 2416; RV32I-NEXT: sb t5, 13(a2) 2417; RV32I-NEXT: sb s9, 14(a2) 2418; RV32I-NEXT: sb s8, 15(a2) 2419; RV32I-NEXT: sb a1, 0(a2) 2420; RV32I-NEXT: sb t4, 1(a2) 2421; RV32I-NEXT: sb s11, 2(a2) 2422; RV32I-NEXT: sb s10, 3(a2) 2423; RV32I-NEXT: sb a0, 4(a2) 2424; RV32I-NEXT: sb t0, 5(a2) 2425; RV32I-NEXT: sb a6, 6(a2) 2426; RV32I-NEXT: sb a7, 7(a2) 2427; RV32I-NEXT: lw ra, 124(sp) # 4-byte Folded Reload 2428; RV32I-NEXT: lw s0, 120(sp) # 4-byte Folded Reload 2429; RV32I-NEXT: lw s1, 116(sp) # 4-byte Folded Reload 2430; RV32I-NEXT: lw s2, 112(sp) # 4-byte Folded Reload 2431; RV32I-NEXT: lw s3, 108(sp) # 4-byte Folded Reload 2432; RV32I-NEXT: lw s4, 104(sp) # 4-byte Folded Reload 2433; RV32I-NEXT: lw s5, 100(sp) # 4-byte Folded Reload 2434; RV32I-NEXT: lw s6, 96(sp) # 4-byte Folded Reload 2435; RV32I-NEXT: lw s7, 92(sp) # 4-byte Folded Reload 2436; RV32I-NEXT: lw s8, 88(sp) # 4-byte Folded Reload 2437; RV32I-NEXT: lw s9, 84(sp) # 4-byte Folded Reload 2438; RV32I-NEXT: lw s10, 80(sp) # 4-byte Folded Reload 2439; RV32I-NEXT: lw s11, 76(sp) # 4-byte Folded Reload 2440; RV32I-NEXT: addi sp, sp, 128 2441; RV32I-NEXT: ret 2442 %src = load i256, ptr %src.ptr, align 1 2443 %byteOff = load i256, ptr %byteOff.ptr, align 1 2444 %bitOff = shl i256 %byteOff, 3 2445 %res = lshr i256 %src, %bitOff 2446 store i256 %res, ptr %dst, align 1 2447 ret void 2448} 2449 2450define void @lshr_32bytes_wordOff(ptr %src.ptr, ptr %wordOff.ptr, ptr %dst) nounwind { 2451; RV64I-LABEL: lshr_32bytes_wordOff: 2452; RV64I: # %bb.0: 2453; RV64I-NEXT: addi sp, sp, -160 2454; RV64I-NEXT: sd s0, 152(sp) # 8-byte Folded Spill 2455; RV64I-NEXT: sd s1, 144(sp) # 8-byte Folded Spill 2456; RV64I-NEXT: sd s2, 136(sp) # 8-byte Folded Spill 2457; RV64I-NEXT: sd s3, 128(sp) # 8-byte Folded Spill 2458; RV64I-NEXT: sd s4, 120(sp) # 8-byte Folded Spill 2459; RV64I-NEXT: sd s5, 112(sp) # 8-byte Folded Spill 2460; RV64I-NEXT: sd s6, 104(sp) # 8-byte Folded Spill 2461; RV64I-NEXT: sd s7, 96(sp) # 8-byte Folded Spill 2462; RV64I-NEXT: sd s8, 88(sp) # 8-byte Folded Spill 2463; RV64I-NEXT: sd s9, 80(sp) # 8-byte Folded Spill 2464; RV64I-NEXT: sd s10, 72(sp) # 8-byte Folded Spill 2465; RV64I-NEXT: sd s11, 64(sp) # 8-byte Folded Spill 2466; RV64I-NEXT: lbu a3, 0(a0) 2467; RV64I-NEXT: lbu a4, 1(a0) 2468; RV64I-NEXT: lbu a5, 2(a0) 2469; RV64I-NEXT: lbu a6, 3(a0) 2470; RV64I-NEXT: lbu a7, 4(a0) 2471; RV64I-NEXT: lbu t0, 5(a0) 2472; RV64I-NEXT: lbu t1, 6(a0) 2473; RV64I-NEXT: lbu t2, 7(a0) 2474; RV64I-NEXT: lbu t3, 8(a0) 2475; RV64I-NEXT: lbu t4, 9(a0) 2476; RV64I-NEXT: lbu t5, 10(a0) 2477; RV64I-NEXT: lbu t6, 11(a0) 2478; RV64I-NEXT: lbu s0, 12(a0) 2479; RV64I-NEXT: lbu s1, 13(a0) 2480; RV64I-NEXT: lbu s2, 14(a0) 2481; RV64I-NEXT: lbu s3, 15(a0) 2482; RV64I-NEXT: lbu s4, 16(a0) 2483; RV64I-NEXT: lbu s5, 17(a0) 2484; RV64I-NEXT: lbu s6, 18(a0) 2485; RV64I-NEXT: lbu s7, 19(a0) 2486; RV64I-NEXT: slli a4, a4, 8 2487; RV64I-NEXT: slli a5, a5, 16 2488; RV64I-NEXT: slli a6, a6, 24 2489; RV64I-NEXT: slli t0, t0, 8 2490; RV64I-NEXT: slli t1, t1, 16 2491; RV64I-NEXT: slli t2, t2, 24 2492; RV64I-NEXT: or a3, a4, a3 2493; RV64I-NEXT: or a4, a6, a5 2494; RV64I-NEXT: or a5, t0, a7 2495; RV64I-NEXT: or a6, t2, t1 2496; RV64I-NEXT: lbu s8, 20(a0) 2497; RV64I-NEXT: lbu s9, 21(a0) 2498; RV64I-NEXT: lbu s10, 22(a0) 2499; RV64I-NEXT: lbu s11, 23(a0) 2500; RV64I-NEXT: slli t4, t4, 8 2501; RV64I-NEXT: slli t5, t5, 16 2502; RV64I-NEXT: slli t6, t6, 24 2503; RV64I-NEXT: slli s1, s1, 8 2504; RV64I-NEXT: slli s2, s2, 16 2505; RV64I-NEXT: slli s3, s3, 24 2506; RV64I-NEXT: or a7, t4, t3 2507; RV64I-NEXT: or t0, t6, t5 2508; RV64I-NEXT: or t1, s1, s0 2509; RV64I-NEXT: or t2, s3, s2 2510; RV64I-NEXT: lbu t6, 24(a0) 2511; RV64I-NEXT: lbu s0, 25(a0) 2512; RV64I-NEXT: lbu s1, 26(a0) 2513; RV64I-NEXT: lbu s2, 27(a0) 2514; RV64I-NEXT: slli s5, s5, 8 2515; RV64I-NEXT: slli s6, s6, 16 2516; RV64I-NEXT: slli s7, s7, 24 2517; RV64I-NEXT: slli s9, s9, 8 2518; RV64I-NEXT: or t3, s5, s4 2519; RV64I-NEXT: or t4, s7, s6 2520; RV64I-NEXT: or t5, s9, s8 2521; RV64I-NEXT: lbu s3, 28(a0) 2522; RV64I-NEXT: lbu s4, 29(a0) 2523; RV64I-NEXT: lbu s5, 30(a0) 2524; RV64I-NEXT: lbu s6, 31(a0) 2525; RV64I-NEXT: slli s10, s10, 16 2526; RV64I-NEXT: slli s11, s11, 24 2527; RV64I-NEXT: slli s0, s0, 8 2528; RV64I-NEXT: slli s1, s1, 16 2529; RV64I-NEXT: slli s2, s2, 24 2530; RV64I-NEXT: slli s4, s4, 8 2531; RV64I-NEXT: or a0, s11, s10 2532; RV64I-NEXT: or t6, s0, t6 2533; RV64I-NEXT: or s0, s2, s1 2534; RV64I-NEXT: or s1, s4, s3 2535; RV64I-NEXT: lbu s2, 0(a1) 2536; RV64I-NEXT: lbu s3, 1(a1) 2537; RV64I-NEXT: lbu s4, 2(a1) 2538; RV64I-NEXT: lbu s7, 3(a1) 2539; RV64I-NEXT: slli s5, s5, 16 2540; RV64I-NEXT: slli s6, s6, 24 2541; RV64I-NEXT: slli s3, s3, 8 2542; RV64I-NEXT: slli s4, s4, 16 2543; RV64I-NEXT: slli s7, s7, 24 2544; RV64I-NEXT: or s5, s6, s5 2545; RV64I-NEXT: or s2, s3, s2 2546; RV64I-NEXT: lbu s3, 4(a1) 2547; RV64I-NEXT: lbu s6, 5(a1) 2548; RV64I-NEXT: or s4, s7, s4 2549; RV64I-NEXT: lbu s7, 6(a1) 2550; RV64I-NEXT: lbu a1, 7(a1) 2551; RV64I-NEXT: slli s6, s6, 8 2552; RV64I-NEXT: or s3, s6, s3 2553; RV64I-NEXT: sd zero, 32(sp) 2554; RV64I-NEXT: sd zero, 40(sp) 2555; RV64I-NEXT: sd zero, 48(sp) 2556; RV64I-NEXT: sd zero, 56(sp) 2557; RV64I-NEXT: slli s7, s7, 16 2558; RV64I-NEXT: slli a1, a1, 24 2559; RV64I-NEXT: or a1, a1, s7 2560; RV64I-NEXT: mv s6, sp 2561; RV64I-NEXT: or a3, a4, a3 2562; RV64I-NEXT: or a4, a6, a5 2563; RV64I-NEXT: or a5, t0, a7 2564; RV64I-NEXT: or a6, t2, t1 2565; RV64I-NEXT: or a7, t4, t3 2566; RV64I-NEXT: or a0, a0, t5 2567; RV64I-NEXT: or t0, s0, t6 2568; RV64I-NEXT: or t1, s5, s1 2569; RV64I-NEXT: or t2, s4, s2 2570; RV64I-NEXT: or a1, a1, s3 2571; RV64I-NEXT: slli a4, a4, 32 2572; RV64I-NEXT: slli a6, a6, 32 2573; RV64I-NEXT: slli a0, a0, 32 2574; RV64I-NEXT: slli t1, t1, 32 2575; RV64I-NEXT: slli a1, a1, 32 2576; RV64I-NEXT: or a3, a4, a3 2577; RV64I-NEXT: or a4, a6, a5 2578; RV64I-NEXT: or a0, a0, a7 2579; RV64I-NEXT: or a5, t1, t0 2580; RV64I-NEXT: or a1, a1, t2 2581; RV64I-NEXT: sd a3, 0(sp) 2582; RV64I-NEXT: sd a4, 8(sp) 2583; RV64I-NEXT: sd a0, 16(sp) 2584; RV64I-NEXT: sd a5, 24(sp) 2585; RV64I-NEXT: slli a3, a1, 5 2586; RV64I-NEXT: slli a1, a1, 2 2587; RV64I-NEXT: andi a1, a1, 24 2588; RV64I-NEXT: andi a0, a3, 32 2589; RV64I-NEXT: add a1, s6, a1 2590; RV64I-NEXT: ld a4, 0(a1) 2591; RV64I-NEXT: ld a5, 8(a1) 2592; RV64I-NEXT: ld a6, 16(a1) 2593; RV64I-NEXT: xori a7, a0, 63 2594; RV64I-NEXT: ld t0, 24(a1) 2595; RV64I-NEXT: srl a0, a5, a3 2596; RV64I-NEXT: slli t1, a6, 1 2597; RV64I-NEXT: srl a1, a4, a3 2598; RV64I-NEXT: slli a5, a5, 1 2599; RV64I-NEXT: srl a4, a6, a3 2600; RV64I-NEXT: slli a6, t0, 1 2601; RV64I-NEXT: srl a3, t0, a3 2602; RV64I-NEXT: sll t0, t1, a7 2603; RV64I-NEXT: sll a5, a5, a7 2604; RV64I-NEXT: sll a6, a6, a7 2605; RV64I-NEXT: srli a7, a4, 24 2606; RV64I-NEXT: srli t1, a4, 16 2607; RV64I-NEXT: srli t2, a4, 8 2608; RV64I-NEXT: srli t3, a3, 56 2609; RV64I-NEXT: srli t4, a3, 48 2610; RV64I-NEXT: srli t5, a3, 40 2611; RV64I-NEXT: srli t6, a3, 32 2612; RV64I-NEXT: srli s0, a3, 24 2613; RV64I-NEXT: srli s1, a3, 16 2614; RV64I-NEXT: srli s2, a3, 8 2615; RV64I-NEXT: srli s3, a1, 24 2616; RV64I-NEXT: srli s4, a1, 16 2617; RV64I-NEXT: srli s5, a1, 8 2618; RV64I-NEXT: srli s6, a0, 24 2619; RV64I-NEXT: or a6, a4, a6 2620; RV64I-NEXT: sb a4, 16(a2) 2621; RV64I-NEXT: sb t2, 17(a2) 2622; RV64I-NEXT: sb t1, 18(a2) 2623; RV64I-NEXT: sb a7, 19(a2) 2624; RV64I-NEXT: srli a4, a0, 16 2625; RV64I-NEXT: sb t6, 28(a2) 2626; RV64I-NEXT: sb t5, 29(a2) 2627; RV64I-NEXT: sb t4, 30(a2) 2628; RV64I-NEXT: sb t3, 31(a2) 2629; RV64I-NEXT: srli a7, a0, 8 2630; RV64I-NEXT: or t0, a0, t0 2631; RV64I-NEXT: or a5, a1, a5 2632; RV64I-NEXT: sb a3, 24(a2) 2633; RV64I-NEXT: sb s2, 25(a2) 2634; RV64I-NEXT: sb s1, 26(a2) 2635; RV64I-NEXT: sb s0, 27(a2) 2636; RV64I-NEXT: sb a1, 0(a2) 2637; RV64I-NEXT: sb s5, 1(a2) 2638; RV64I-NEXT: sb s4, 2(a2) 2639; RV64I-NEXT: sb s3, 3(a2) 2640; RV64I-NEXT: sb a0, 8(a2) 2641; RV64I-NEXT: sb a7, 9(a2) 2642; RV64I-NEXT: sb a4, 10(a2) 2643; RV64I-NEXT: sb s6, 11(a2) 2644; RV64I-NEXT: srli a0, a6, 56 2645; RV64I-NEXT: srli a1, a6, 48 2646; RV64I-NEXT: srli a3, a6, 40 2647; RV64I-NEXT: srli a4, a6, 32 2648; RV64I-NEXT: srli a6, a5, 56 2649; RV64I-NEXT: srli a7, a5, 48 2650; RV64I-NEXT: srli t1, a5, 40 2651; RV64I-NEXT: srli a5, a5, 32 2652; RV64I-NEXT: srli t2, t0, 56 2653; RV64I-NEXT: srli t3, t0, 48 2654; RV64I-NEXT: srli t4, t0, 40 2655; RV64I-NEXT: srli t0, t0, 32 2656; RV64I-NEXT: sb a4, 20(a2) 2657; RV64I-NEXT: sb a3, 21(a2) 2658; RV64I-NEXT: sb a1, 22(a2) 2659; RV64I-NEXT: sb a0, 23(a2) 2660; RV64I-NEXT: sb a5, 4(a2) 2661; RV64I-NEXT: sb t1, 5(a2) 2662; RV64I-NEXT: sb a7, 6(a2) 2663; RV64I-NEXT: sb a6, 7(a2) 2664; RV64I-NEXT: sb t0, 12(a2) 2665; RV64I-NEXT: sb t4, 13(a2) 2666; RV64I-NEXT: sb t3, 14(a2) 2667; RV64I-NEXT: sb t2, 15(a2) 2668; RV64I-NEXT: ld s0, 152(sp) # 8-byte Folded Reload 2669; RV64I-NEXT: ld s1, 144(sp) # 8-byte Folded Reload 2670; RV64I-NEXT: ld s2, 136(sp) # 8-byte Folded Reload 2671; RV64I-NEXT: ld s3, 128(sp) # 8-byte Folded Reload 2672; RV64I-NEXT: ld s4, 120(sp) # 8-byte Folded Reload 2673; RV64I-NEXT: ld s5, 112(sp) # 8-byte Folded Reload 2674; RV64I-NEXT: ld s6, 104(sp) # 8-byte Folded Reload 2675; RV64I-NEXT: ld s7, 96(sp) # 8-byte Folded Reload 2676; RV64I-NEXT: ld s8, 88(sp) # 8-byte Folded Reload 2677; RV64I-NEXT: ld s9, 80(sp) # 8-byte Folded Reload 2678; RV64I-NEXT: ld s10, 72(sp) # 8-byte Folded Reload 2679; RV64I-NEXT: ld s11, 64(sp) # 8-byte Folded Reload 2680; RV64I-NEXT: addi sp, sp, 160 2681; RV64I-NEXT: ret 2682; 2683; RV32I-LABEL: lshr_32bytes_wordOff: 2684; RV32I: # %bb.0: 2685; RV32I-NEXT: addi sp, sp, -128 2686; RV32I-NEXT: sw ra, 124(sp) # 4-byte Folded Spill 2687; RV32I-NEXT: sw s0, 120(sp) # 4-byte Folded Spill 2688; RV32I-NEXT: sw s1, 116(sp) # 4-byte Folded Spill 2689; RV32I-NEXT: sw s2, 112(sp) # 4-byte Folded Spill 2690; RV32I-NEXT: sw s3, 108(sp) # 4-byte Folded Spill 2691; RV32I-NEXT: sw s4, 104(sp) # 4-byte Folded Spill 2692; RV32I-NEXT: sw s5, 100(sp) # 4-byte Folded Spill 2693; RV32I-NEXT: sw s6, 96(sp) # 4-byte Folded Spill 2694; RV32I-NEXT: sw s7, 92(sp) # 4-byte Folded Spill 2695; RV32I-NEXT: sw s8, 88(sp) # 4-byte Folded Spill 2696; RV32I-NEXT: sw s9, 84(sp) # 4-byte Folded Spill 2697; RV32I-NEXT: sw s10, 80(sp) # 4-byte Folded Spill 2698; RV32I-NEXT: sw s11, 76(sp) # 4-byte Folded Spill 2699; RV32I-NEXT: lbu a7, 0(a0) 2700; RV32I-NEXT: lbu t0, 1(a0) 2701; RV32I-NEXT: lbu t1, 2(a0) 2702; RV32I-NEXT: lbu s1, 3(a0) 2703; RV32I-NEXT: lbu s7, 4(a0) 2704; RV32I-NEXT: lbu s8, 5(a0) 2705; RV32I-NEXT: lbu s4, 6(a0) 2706; RV32I-NEXT: lbu s6, 7(a0) 2707; RV32I-NEXT: lbu s5, 8(a0) 2708; RV32I-NEXT: lbu s10, 9(a0) 2709; RV32I-NEXT: lbu s11, 10(a0) 2710; RV32I-NEXT: lbu ra, 11(a0) 2711; RV32I-NEXT: lbu t4, 12(a0) 2712; RV32I-NEXT: lbu t6, 13(a0) 2713; RV32I-NEXT: lbu a5, 14(a0) 2714; RV32I-NEXT: lbu a6, 15(a0) 2715; RV32I-NEXT: lbu a3, 16(a0) 2716; RV32I-NEXT: lbu t2, 17(a0) 2717; RV32I-NEXT: lbu t3, 18(a0) 2718; RV32I-NEXT: lbu t5, 19(a0) 2719; RV32I-NEXT: lbu a4, 20(a0) 2720; RV32I-NEXT: lbu s0, 21(a0) 2721; RV32I-NEXT: lbu s2, 22(a0) 2722; RV32I-NEXT: lbu s3, 23(a0) 2723; RV32I-NEXT: slli t0, t0, 8 2724; RV32I-NEXT: slli t1, t1, 16 2725; RV32I-NEXT: slli s1, s1, 24 2726; RV32I-NEXT: slli s8, s8, 8 2727; RV32I-NEXT: or a7, t0, a7 2728; RV32I-NEXT: or t0, s1, t1 2729; RV32I-NEXT: or t1, s8, s7 2730; RV32I-NEXT: lbu s1, 24(a0) 2731; RV32I-NEXT: lbu s7, 25(a0) 2732; RV32I-NEXT: lbu s8, 26(a0) 2733; RV32I-NEXT: lbu s9, 27(a0) 2734; RV32I-NEXT: slli s4, s4, 16 2735; RV32I-NEXT: slli s6, s6, 24 2736; RV32I-NEXT: slli s10, s10, 8 2737; RV32I-NEXT: slli s11, s11, 16 2738; RV32I-NEXT: slli ra, ra, 24 2739; RV32I-NEXT: or s4, s6, s4 2740; RV32I-NEXT: or s5, s10, s5 2741; RV32I-NEXT: or s6, ra, s11 2742; RV32I-NEXT: lbu s10, 28(a0) 2743; RV32I-NEXT: lbu s11, 29(a0) 2744; RV32I-NEXT: lbu ra, 30(a0) 2745; RV32I-NEXT: lbu a0, 31(a0) 2746; RV32I-NEXT: lbu a1, 0(a1) 2747; RV32I-NEXT: sw zero, 56(sp) 2748; RV32I-NEXT: sw zero, 60(sp) 2749; RV32I-NEXT: sw zero, 64(sp) 2750; RV32I-NEXT: sw zero, 68(sp) 2751; RV32I-NEXT: sw zero, 40(sp) 2752; RV32I-NEXT: sw zero, 44(sp) 2753; RV32I-NEXT: sw zero, 48(sp) 2754; RV32I-NEXT: sw zero, 52(sp) 2755; RV32I-NEXT: slli t6, t6, 8 2756; RV32I-NEXT: or t4, t6, t4 2757; RV32I-NEXT: addi t6, sp, 8 2758; RV32I-NEXT: slli a5, a5, 16 2759; RV32I-NEXT: slli a6, a6, 24 2760; RV32I-NEXT: slli t2, t2, 8 2761; RV32I-NEXT: slli t3, t3, 16 2762; RV32I-NEXT: slli t5, t5, 24 2763; RV32I-NEXT: slli s0, s0, 8 2764; RV32I-NEXT: slli s2, s2, 16 2765; RV32I-NEXT: slli s3, s3, 24 2766; RV32I-NEXT: slli s7, s7, 8 2767; RV32I-NEXT: slli s8, s8, 16 2768; RV32I-NEXT: slli s9, s9, 24 2769; RV32I-NEXT: slli s11, s11, 8 2770; RV32I-NEXT: slli ra, ra, 16 2771; RV32I-NEXT: slli a0, a0, 24 2772; RV32I-NEXT: slli a1, a1, 2 2773; RV32I-NEXT: or a5, a6, a5 2774; RV32I-NEXT: or a3, t2, a3 2775; RV32I-NEXT: or a6, t5, t3 2776; RV32I-NEXT: or a4, s0, a4 2777; RV32I-NEXT: or t2, s3, s2 2778; RV32I-NEXT: or t3, s7, s1 2779; RV32I-NEXT: or t5, s9, s8 2780; RV32I-NEXT: or s0, s11, s10 2781; RV32I-NEXT: or a0, a0, ra 2782; RV32I-NEXT: andi a1, a1, 28 2783; RV32I-NEXT: or a7, t0, a7 2784; RV32I-NEXT: or t0, s4, t1 2785; RV32I-NEXT: or t1, s6, s5 2786; RV32I-NEXT: or a5, a5, t4 2787; RV32I-NEXT: or a3, a6, a3 2788; RV32I-NEXT: or a4, t2, a4 2789; RV32I-NEXT: or a6, t5, t3 2790; RV32I-NEXT: or a0, a0, s0 2791; RV32I-NEXT: add t6, t6, a1 2792; RV32I-NEXT: sw a3, 24(sp) 2793; RV32I-NEXT: sw a4, 28(sp) 2794; RV32I-NEXT: sw a6, 32(sp) 2795; RV32I-NEXT: sw a0, 36(sp) 2796; RV32I-NEXT: sw a7, 8(sp) 2797; RV32I-NEXT: sw t0, 12(sp) 2798; RV32I-NEXT: sw t1, 16(sp) 2799; RV32I-NEXT: sw a5, 20(sp) 2800; RV32I-NEXT: lw a6, 16(t6) 2801; RV32I-NEXT: lw a5, 20(t6) 2802; RV32I-NEXT: lw a7, 24(t6) 2803; RV32I-NEXT: lw a1, 0(t6) 2804; RV32I-NEXT: lw a0, 4(t6) 2805; RV32I-NEXT: lw a4, 8(t6) 2806; RV32I-NEXT: lw a3, 12(t6) 2807; RV32I-NEXT: lw t0, 28(t6) 2808; RV32I-NEXT: srli t1, a7, 24 2809; RV32I-NEXT: srli t2, a7, 16 2810; RV32I-NEXT: srli t3, a7, 8 2811; RV32I-NEXT: srli t4, t0, 24 2812; RV32I-NEXT: srli t5, t0, 16 2813; RV32I-NEXT: srli t6, t0, 8 2814; RV32I-NEXT: srli s0, a6, 24 2815; RV32I-NEXT: srli s1, a6, 16 2816; RV32I-NEXT: srli s2, a6, 8 2817; RV32I-NEXT: srli s3, a5, 24 2818; RV32I-NEXT: srli s4, a5, 16 2819; RV32I-NEXT: srli s5, a5, 8 2820; RV32I-NEXT: srli s6, a4, 24 2821; RV32I-NEXT: srli s7, a4, 16 2822; RV32I-NEXT: srli s8, a4, 8 2823; RV32I-NEXT: srli s9, a3, 24 2824; RV32I-NEXT: srli s10, a3, 16 2825; RV32I-NEXT: srli s11, a3, 8 2826; RV32I-NEXT: srli ra, a1, 24 2827; RV32I-NEXT: sb a7, 24(a2) 2828; RV32I-NEXT: sb t3, 25(a2) 2829; RV32I-NEXT: sb t2, 26(a2) 2830; RV32I-NEXT: sb t1, 27(a2) 2831; RV32I-NEXT: srli a7, a1, 16 2832; RV32I-NEXT: sb t0, 28(a2) 2833; RV32I-NEXT: sb t6, 29(a2) 2834; RV32I-NEXT: sb t5, 30(a2) 2835; RV32I-NEXT: sb t4, 31(a2) 2836; RV32I-NEXT: srli t0, a1, 8 2837; RV32I-NEXT: sb a6, 16(a2) 2838; RV32I-NEXT: sb s2, 17(a2) 2839; RV32I-NEXT: sb s1, 18(a2) 2840; RV32I-NEXT: sb s0, 19(a2) 2841; RV32I-NEXT: srli a6, a0, 24 2842; RV32I-NEXT: sb a5, 20(a2) 2843; RV32I-NEXT: sb s5, 21(a2) 2844; RV32I-NEXT: sb s4, 22(a2) 2845; RV32I-NEXT: sb s3, 23(a2) 2846; RV32I-NEXT: srli a5, a0, 16 2847; RV32I-NEXT: sb a4, 8(a2) 2848; RV32I-NEXT: sb s8, 9(a2) 2849; RV32I-NEXT: sb s7, 10(a2) 2850; RV32I-NEXT: sb s6, 11(a2) 2851; RV32I-NEXT: srli a4, a0, 8 2852; RV32I-NEXT: sb a3, 12(a2) 2853; RV32I-NEXT: sb s11, 13(a2) 2854; RV32I-NEXT: sb s10, 14(a2) 2855; RV32I-NEXT: sb s9, 15(a2) 2856; RV32I-NEXT: sb a1, 0(a2) 2857; RV32I-NEXT: sb t0, 1(a2) 2858; RV32I-NEXT: sb a7, 2(a2) 2859; RV32I-NEXT: sb ra, 3(a2) 2860; RV32I-NEXT: sb a0, 4(a2) 2861; RV32I-NEXT: sb a4, 5(a2) 2862; RV32I-NEXT: sb a5, 6(a2) 2863; RV32I-NEXT: sb a6, 7(a2) 2864; RV32I-NEXT: lw ra, 124(sp) # 4-byte Folded Reload 2865; RV32I-NEXT: lw s0, 120(sp) # 4-byte Folded Reload 2866; RV32I-NEXT: lw s1, 116(sp) # 4-byte Folded Reload 2867; RV32I-NEXT: lw s2, 112(sp) # 4-byte Folded Reload 2868; RV32I-NEXT: lw s3, 108(sp) # 4-byte Folded Reload 2869; RV32I-NEXT: lw s4, 104(sp) # 4-byte Folded Reload 2870; RV32I-NEXT: lw s5, 100(sp) # 4-byte Folded Reload 2871; RV32I-NEXT: lw s6, 96(sp) # 4-byte Folded Reload 2872; RV32I-NEXT: lw s7, 92(sp) # 4-byte Folded Reload 2873; RV32I-NEXT: lw s8, 88(sp) # 4-byte Folded Reload 2874; RV32I-NEXT: lw s9, 84(sp) # 4-byte Folded Reload 2875; RV32I-NEXT: lw s10, 80(sp) # 4-byte Folded Reload 2876; RV32I-NEXT: lw s11, 76(sp) # 4-byte Folded Reload 2877; RV32I-NEXT: addi sp, sp, 128 2878; RV32I-NEXT: ret 2879 %src = load i256, ptr %src.ptr, align 1 2880 %wordOff = load i256, ptr %wordOff.ptr, align 1 2881 %bitOff = shl i256 %wordOff, 5 2882 %res = lshr i256 %src, %bitOff 2883 store i256 %res, ptr %dst, align 1 2884 ret void 2885} 2886 2887define void @lshr_32bytes_dwordOff(ptr %src.ptr, ptr %dwordOff.ptr, ptr %dst) nounwind { 2888; RV64I-LABEL: lshr_32bytes_dwordOff: 2889; RV64I: # %bb.0: 2890; RV64I-NEXT: addi sp, sp, -160 2891; RV64I-NEXT: sd s0, 152(sp) # 8-byte Folded Spill 2892; RV64I-NEXT: sd s1, 144(sp) # 8-byte Folded Spill 2893; RV64I-NEXT: sd s2, 136(sp) # 8-byte Folded Spill 2894; RV64I-NEXT: sd s3, 128(sp) # 8-byte Folded Spill 2895; RV64I-NEXT: sd s4, 120(sp) # 8-byte Folded Spill 2896; RV64I-NEXT: sd s5, 112(sp) # 8-byte Folded Spill 2897; RV64I-NEXT: sd s6, 104(sp) # 8-byte Folded Spill 2898; RV64I-NEXT: sd s7, 96(sp) # 8-byte Folded Spill 2899; RV64I-NEXT: sd s8, 88(sp) # 8-byte Folded Spill 2900; RV64I-NEXT: sd s9, 80(sp) # 8-byte Folded Spill 2901; RV64I-NEXT: sd s10, 72(sp) # 8-byte Folded Spill 2902; RV64I-NEXT: sd s11, 64(sp) # 8-byte Folded Spill 2903; RV64I-NEXT: lbu a5, 0(a0) 2904; RV64I-NEXT: lbu a7, 1(a0) 2905; RV64I-NEXT: lbu t2, 2(a0) 2906; RV64I-NEXT: lbu s3, 3(a0) 2907; RV64I-NEXT: lbu t0, 4(a0) 2908; RV64I-NEXT: lbu s8, 5(a0) 2909; RV64I-NEXT: lbu s9, 6(a0) 2910; RV64I-NEXT: lbu s10, 7(a0) 2911; RV64I-NEXT: lbu s2, 8(a0) 2912; RV64I-NEXT: lbu s4, 9(a0) 2913; RV64I-NEXT: lbu s5, 10(a0) 2914; RV64I-NEXT: lbu s6, 11(a0) 2915; RV64I-NEXT: lbu s7, 12(a0) 2916; RV64I-NEXT: lbu s11, 13(a0) 2917; RV64I-NEXT: lbu t1, 14(a0) 2918; RV64I-NEXT: lbu t3, 15(a0) 2919; RV64I-NEXT: lbu a3, 16(a0) 2920; RV64I-NEXT: lbu a6, 17(a0) 2921; RV64I-NEXT: lbu t4, 18(a0) 2922; RV64I-NEXT: lbu t5, 19(a0) 2923; RV64I-NEXT: lbu a4, 20(a0) 2924; RV64I-NEXT: lbu t6, 21(a0) 2925; RV64I-NEXT: lbu s0, 22(a0) 2926; RV64I-NEXT: lbu s1, 23(a0) 2927; RV64I-NEXT: slli a7, a7, 8 2928; RV64I-NEXT: slli t2, t2, 16 2929; RV64I-NEXT: slli s3, s3, 24 2930; RV64I-NEXT: slli s8, s8, 8 2931; RV64I-NEXT: slli s9, s9, 16 2932; RV64I-NEXT: slli s10, s10, 24 2933; RV64I-NEXT: or a5, a7, a5 2934; RV64I-NEXT: or a7, s3, t2 2935; RV64I-NEXT: or t0, s8, t0 2936; RV64I-NEXT: or t2, s10, s9 2937; RV64I-NEXT: lbu s3, 24(a0) 2938; RV64I-NEXT: lbu s8, 25(a0) 2939; RV64I-NEXT: lbu s9, 26(a0) 2940; RV64I-NEXT: lbu s10, 27(a0) 2941; RV64I-NEXT: slli s4, s4, 8 2942; RV64I-NEXT: slli s5, s5, 16 2943; RV64I-NEXT: slli s6, s6, 24 2944; RV64I-NEXT: slli s11, s11, 8 2945; RV64I-NEXT: or s2, s4, s2 2946; RV64I-NEXT: or s4, s6, s5 2947; RV64I-NEXT: or s5, s11, s7 2948; RV64I-NEXT: lbu s6, 28(a0) 2949; RV64I-NEXT: lbu s7, 29(a0) 2950; RV64I-NEXT: lbu s11, 30(a0) 2951; RV64I-NEXT: lbu a0, 31(a0) 2952; RV64I-NEXT: lbu a1, 0(a1) 2953; RV64I-NEXT: sd zero, 32(sp) 2954; RV64I-NEXT: sd zero, 40(sp) 2955; RV64I-NEXT: sd zero, 48(sp) 2956; RV64I-NEXT: sd zero, 56(sp) 2957; RV64I-NEXT: slli t1, t1, 16 2958; RV64I-NEXT: slli t3, t3, 24 2959; RV64I-NEXT: or t1, t3, t1 2960; RV64I-NEXT: mv t3, sp 2961; RV64I-NEXT: slli a6, a6, 8 2962; RV64I-NEXT: slli t4, t4, 16 2963; RV64I-NEXT: slli t5, t5, 24 2964; RV64I-NEXT: slli t6, t6, 8 2965; RV64I-NEXT: slli s0, s0, 16 2966; RV64I-NEXT: slli s1, s1, 24 2967; RV64I-NEXT: slli s8, s8, 8 2968; RV64I-NEXT: slli s9, s9, 16 2969; RV64I-NEXT: slli s10, s10, 24 2970; RV64I-NEXT: slli s7, s7, 8 2971; RV64I-NEXT: slli s11, s11, 16 2972; RV64I-NEXT: slli a0, a0, 24 2973; RV64I-NEXT: slli a1, a1, 3 2974; RV64I-NEXT: or a3, a6, a3 2975; RV64I-NEXT: or a6, t5, t4 2976; RV64I-NEXT: or a4, t6, a4 2977; RV64I-NEXT: or s0, s1, s0 2978; RV64I-NEXT: or t4, s8, s3 2979; RV64I-NEXT: or t5, s10, s9 2980; RV64I-NEXT: or t6, s7, s6 2981; RV64I-NEXT: or a0, a0, s11 2982; RV64I-NEXT: andi a1, a1, 24 2983; RV64I-NEXT: or a5, a7, a5 2984; RV64I-NEXT: or a7, t2, t0 2985; RV64I-NEXT: or t0, s4, s2 2986; RV64I-NEXT: or t1, t1, s5 2987; RV64I-NEXT: or a3, a6, a3 2988; RV64I-NEXT: or a4, s0, a4 2989; RV64I-NEXT: or a6, t5, t4 2990; RV64I-NEXT: or a0, a0, t6 2991; RV64I-NEXT: add t3, t3, a1 2992; RV64I-NEXT: slli a7, a7, 32 2993; RV64I-NEXT: slli t1, t1, 32 2994; RV64I-NEXT: slli a4, a4, 32 2995; RV64I-NEXT: slli a0, a0, 32 2996; RV64I-NEXT: or a1, a7, a5 2997; RV64I-NEXT: or a5, t1, t0 2998; RV64I-NEXT: or a3, a4, a3 2999; RV64I-NEXT: or a0, a0, a6 3000; RV64I-NEXT: sd a1, 0(sp) 3001; RV64I-NEXT: sd a5, 8(sp) 3002; RV64I-NEXT: sd a3, 16(sp) 3003; RV64I-NEXT: sd a0, 24(sp) 3004; RV64I-NEXT: ld a4, 16(t3) 3005; RV64I-NEXT: ld a0, 8(t3) 3006; RV64I-NEXT: ld a1, 0(t3) 3007; RV64I-NEXT: ld a3, 24(t3) 3008; RV64I-NEXT: srli a5, a4, 56 3009; RV64I-NEXT: srli a6, a4, 48 3010; RV64I-NEXT: srli a7, a4, 40 3011; RV64I-NEXT: srli t0, a4, 32 3012; RV64I-NEXT: srli t1, a4, 24 3013; RV64I-NEXT: srli t2, a4, 16 3014; RV64I-NEXT: srli t3, a4, 8 3015; RV64I-NEXT: srli t4, a3, 56 3016; RV64I-NEXT: srli t5, a3, 48 3017; RV64I-NEXT: srli t6, a3, 40 3018; RV64I-NEXT: srli s0, a3, 32 3019; RV64I-NEXT: srli s1, a3, 24 3020; RV64I-NEXT: srli s2, a3, 16 3021; RV64I-NEXT: srli s3, a3, 8 3022; RV64I-NEXT: srli s4, a1, 56 3023; RV64I-NEXT: srli s5, a1, 48 3024; RV64I-NEXT: srli s6, a1, 40 3025; RV64I-NEXT: srli s7, a1, 32 3026; RV64I-NEXT: srli s8, a1, 24 3027; RV64I-NEXT: srli s9, a1, 16 3028; RV64I-NEXT: srli s10, a1, 8 3029; RV64I-NEXT: srli s11, a0, 56 3030; RV64I-NEXT: sb t0, 20(a2) 3031; RV64I-NEXT: sb a7, 21(a2) 3032; RV64I-NEXT: sb a6, 22(a2) 3033; RV64I-NEXT: sb a5, 23(a2) 3034; RV64I-NEXT: srli a5, a0, 48 3035; RV64I-NEXT: sb a4, 16(a2) 3036; RV64I-NEXT: sb t3, 17(a2) 3037; RV64I-NEXT: sb t2, 18(a2) 3038; RV64I-NEXT: sb t1, 19(a2) 3039; RV64I-NEXT: srli a4, a0, 40 3040; RV64I-NEXT: sb s0, 28(a2) 3041; RV64I-NEXT: sb t6, 29(a2) 3042; RV64I-NEXT: sb t5, 30(a2) 3043; RV64I-NEXT: sb t4, 31(a2) 3044; RV64I-NEXT: srli a6, a0, 32 3045; RV64I-NEXT: sb a3, 24(a2) 3046; RV64I-NEXT: sb s3, 25(a2) 3047; RV64I-NEXT: sb s2, 26(a2) 3048; RV64I-NEXT: sb s1, 27(a2) 3049; RV64I-NEXT: srli a3, a0, 24 3050; RV64I-NEXT: sb s7, 4(a2) 3051; RV64I-NEXT: sb s6, 5(a2) 3052; RV64I-NEXT: sb s5, 6(a2) 3053; RV64I-NEXT: sb s4, 7(a2) 3054; RV64I-NEXT: srli a7, a0, 16 3055; RV64I-NEXT: sb a1, 0(a2) 3056; RV64I-NEXT: sb s10, 1(a2) 3057; RV64I-NEXT: sb s9, 2(a2) 3058; RV64I-NEXT: sb s8, 3(a2) 3059; RV64I-NEXT: srli a1, a0, 8 3060; RV64I-NEXT: sb a6, 12(a2) 3061; RV64I-NEXT: sb a4, 13(a2) 3062; RV64I-NEXT: sb a5, 14(a2) 3063; RV64I-NEXT: sb s11, 15(a2) 3064; RV64I-NEXT: sb a0, 8(a2) 3065; RV64I-NEXT: sb a1, 9(a2) 3066; RV64I-NEXT: sb a7, 10(a2) 3067; RV64I-NEXT: sb a3, 11(a2) 3068; RV64I-NEXT: ld s0, 152(sp) # 8-byte Folded Reload 3069; RV64I-NEXT: ld s1, 144(sp) # 8-byte Folded Reload 3070; RV64I-NEXT: ld s2, 136(sp) # 8-byte Folded Reload 3071; RV64I-NEXT: ld s3, 128(sp) # 8-byte Folded Reload 3072; RV64I-NEXT: ld s4, 120(sp) # 8-byte Folded Reload 3073; RV64I-NEXT: ld s5, 112(sp) # 8-byte Folded Reload 3074; RV64I-NEXT: ld s6, 104(sp) # 8-byte Folded Reload 3075; RV64I-NEXT: ld s7, 96(sp) # 8-byte Folded Reload 3076; RV64I-NEXT: ld s8, 88(sp) # 8-byte Folded Reload 3077; RV64I-NEXT: ld s9, 80(sp) # 8-byte Folded Reload 3078; RV64I-NEXT: ld s10, 72(sp) # 8-byte Folded Reload 3079; RV64I-NEXT: ld s11, 64(sp) # 8-byte Folded Reload 3080; RV64I-NEXT: addi sp, sp, 160 3081; RV64I-NEXT: ret 3082; 3083; RV32I-LABEL: lshr_32bytes_dwordOff: 3084; RV32I: # %bb.0: 3085; RV32I-NEXT: addi sp, sp, -128 3086; RV32I-NEXT: sw ra, 124(sp) # 4-byte Folded Spill 3087; RV32I-NEXT: sw s0, 120(sp) # 4-byte Folded Spill 3088; RV32I-NEXT: sw s1, 116(sp) # 4-byte Folded Spill 3089; RV32I-NEXT: sw s2, 112(sp) # 4-byte Folded Spill 3090; RV32I-NEXT: sw s3, 108(sp) # 4-byte Folded Spill 3091; RV32I-NEXT: sw s4, 104(sp) # 4-byte Folded Spill 3092; RV32I-NEXT: sw s5, 100(sp) # 4-byte Folded Spill 3093; RV32I-NEXT: sw s6, 96(sp) # 4-byte Folded Spill 3094; RV32I-NEXT: sw s7, 92(sp) # 4-byte Folded Spill 3095; RV32I-NEXT: sw s8, 88(sp) # 4-byte Folded Spill 3096; RV32I-NEXT: sw s9, 84(sp) # 4-byte Folded Spill 3097; RV32I-NEXT: sw s10, 80(sp) # 4-byte Folded Spill 3098; RV32I-NEXT: sw s11, 76(sp) # 4-byte Folded Spill 3099; RV32I-NEXT: lbu a7, 0(a0) 3100; RV32I-NEXT: lbu t0, 1(a0) 3101; RV32I-NEXT: lbu t1, 2(a0) 3102; RV32I-NEXT: lbu s1, 3(a0) 3103; RV32I-NEXT: lbu s7, 4(a0) 3104; RV32I-NEXT: lbu s8, 5(a0) 3105; RV32I-NEXT: lbu s4, 6(a0) 3106; RV32I-NEXT: lbu s6, 7(a0) 3107; RV32I-NEXT: lbu s5, 8(a0) 3108; RV32I-NEXT: lbu s10, 9(a0) 3109; RV32I-NEXT: lbu s11, 10(a0) 3110; RV32I-NEXT: lbu ra, 11(a0) 3111; RV32I-NEXT: lbu t4, 12(a0) 3112; RV32I-NEXT: lbu t6, 13(a0) 3113; RV32I-NEXT: lbu a5, 14(a0) 3114; RV32I-NEXT: lbu a6, 15(a0) 3115; RV32I-NEXT: lbu a3, 16(a0) 3116; RV32I-NEXT: lbu t2, 17(a0) 3117; RV32I-NEXT: lbu t3, 18(a0) 3118; RV32I-NEXT: lbu t5, 19(a0) 3119; RV32I-NEXT: lbu a4, 20(a0) 3120; RV32I-NEXT: lbu s0, 21(a0) 3121; RV32I-NEXT: lbu s2, 22(a0) 3122; RV32I-NEXT: lbu s3, 23(a0) 3123; RV32I-NEXT: slli t0, t0, 8 3124; RV32I-NEXT: slli t1, t1, 16 3125; RV32I-NEXT: slli s1, s1, 24 3126; RV32I-NEXT: slli s8, s8, 8 3127; RV32I-NEXT: or a7, t0, a7 3128; RV32I-NEXT: or t0, s1, t1 3129; RV32I-NEXT: or t1, s8, s7 3130; RV32I-NEXT: lbu s1, 24(a0) 3131; RV32I-NEXT: lbu s7, 25(a0) 3132; RV32I-NEXT: lbu s8, 26(a0) 3133; RV32I-NEXT: lbu s9, 27(a0) 3134; RV32I-NEXT: slli s4, s4, 16 3135; RV32I-NEXT: slli s6, s6, 24 3136; RV32I-NEXT: slli s10, s10, 8 3137; RV32I-NEXT: slli s11, s11, 16 3138; RV32I-NEXT: slli ra, ra, 24 3139; RV32I-NEXT: or s4, s6, s4 3140; RV32I-NEXT: or s5, s10, s5 3141; RV32I-NEXT: or s6, ra, s11 3142; RV32I-NEXT: lbu s10, 28(a0) 3143; RV32I-NEXT: lbu s11, 29(a0) 3144; RV32I-NEXT: lbu ra, 30(a0) 3145; RV32I-NEXT: lbu a0, 31(a0) 3146; RV32I-NEXT: lbu a1, 0(a1) 3147; RV32I-NEXT: sw zero, 56(sp) 3148; RV32I-NEXT: sw zero, 60(sp) 3149; RV32I-NEXT: sw zero, 64(sp) 3150; RV32I-NEXT: sw zero, 68(sp) 3151; RV32I-NEXT: sw zero, 40(sp) 3152; RV32I-NEXT: sw zero, 44(sp) 3153; RV32I-NEXT: sw zero, 48(sp) 3154; RV32I-NEXT: sw zero, 52(sp) 3155; RV32I-NEXT: slli t6, t6, 8 3156; RV32I-NEXT: or t4, t6, t4 3157; RV32I-NEXT: addi t6, sp, 8 3158; RV32I-NEXT: slli a5, a5, 16 3159; RV32I-NEXT: slli a6, a6, 24 3160; RV32I-NEXT: slli t2, t2, 8 3161; RV32I-NEXT: slli t3, t3, 16 3162; RV32I-NEXT: slli t5, t5, 24 3163; RV32I-NEXT: slli s0, s0, 8 3164; RV32I-NEXT: slli s2, s2, 16 3165; RV32I-NEXT: slli s3, s3, 24 3166; RV32I-NEXT: slli s7, s7, 8 3167; RV32I-NEXT: slli s8, s8, 16 3168; RV32I-NEXT: slli s9, s9, 24 3169; RV32I-NEXT: slli s11, s11, 8 3170; RV32I-NEXT: slli ra, ra, 16 3171; RV32I-NEXT: slli a0, a0, 24 3172; RV32I-NEXT: slli a1, a1, 3 3173; RV32I-NEXT: or a5, a6, a5 3174; RV32I-NEXT: or a3, t2, a3 3175; RV32I-NEXT: or a6, t5, t3 3176; RV32I-NEXT: or a4, s0, a4 3177; RV32I-NEXT: or t2, s3, s2 3178; RV32I-NEXT: or t3, s7, s1 3179; RV32I-NEXT: or t5, s9, s8 3180; RV32I-NEXT: or s0, s11, s10 3181; RV32I-NEXT: or a0, a0, ra 3182; RV32I-NEXT: andi a1, a1, 24 3183; RV32I-NEXT: or a7, t0, a7 3184; RV32I-NEXT: or t0, s4, t1 3185; RV32I-NEXT: or t1, s6, s5 3186; RV32I-NEXT: or a5, a5, t4 3187; RV32I-NEXT: or a3, a6, a3 3188; RV32I-NEXT: or a4, t2, a4 3189; RV32I-NEXT: or a6, t5, t3 3190; RV32I-NEXT: or a0, a0, s0 3191; RV32I-NEXT: add t6, t6, a1 3192; RV32I-NEXT: sw a3, 24(sp) 3193; RV32I-NEXT: sw a4, 28(sp) 3194; RV32I-NEXT: sw a6, 32(sp) 3195; RV32I-NEXT: sw a0, 36(sp) 3196; RV32I-NEXT: sw a7, 8(sp) 3197; RV32I-NEXT: sw t0, 12(sp) 3198; RV32I-NEXT: sw t1, 16(sp) 3199; RV32I-NEXT: sw a5, 20(sp) 3200; RV32I-NEXT: lw a6, 16(t6) 3201; RV32I-NEXT: lw a5, 20(t6) 3202; RV32I-NEXT: lw a7, 24(t6) 3203; RV32I-NEXT: lw a1, 0(t6) 3204; RV32I-NEXT: lw a0, 4(t6) 3205; RV32I-NEXT: lw a4, 8(t6) 3206; RV32I-NEXT: lw a3, 12(t6) 3207; RV32I-NEXT: lw t0, 28(t6) 3208; RV32I-NEXT: srli t1, a7, 24 3209; RV32I-NEXT: srli t2, a7, 16 3210; RV32I-NEXT: srli t3, a7, 8 3211; RV32I-NEXT: srli t4, t0, 24 3212; RV32I-NEXT: srli t5, t0, 16 3213; RV32I-NEXT: srli t6, t0, 8 3214; RV32I-NEXT: srli s0, a6, 24 3215; RV32I-NEXT: srli s1, a6, 16 3216; RV32I-NEXT: srli s2, a6, 8 3217; RV32I-NEXT: srli s3, a5, 24 3218; RV32I-NEXT: srli s4, a5, 16 3219; RV32I-NEXT: srli s5, a5, 8 3220; RV32I-NEXT: srli s6, a4, 24 3221; RV32I-NEXT: srli s7, a4, 16 3222; RV32I-NEXT: srli s8, a4, 8 3223; RV32I-NEXT: srli s9, a3, 24 3224; RV32I-NEXT: srli s10, a3, 16 3225; RV32I-NEXT: srli s11, a3, 8 3226; RV32I-NEXT: srli ra, a1, 24 3227; RV32I-NEXT: sb a7, 24(a2) 3228; RV32I-NEXT: sb t3, 25(a2) 3229; RV32I-NEXT: sb t2, 26(a2) 3230; RV32I-NEXT: sb t1, 27(a2) 3231; RV32I-NEXT: srli a7, a1, 16 3232; RV32I-NEXT: sb t0, 28(a2) 3233; RV32I-NEXT: sb t6, 29(a2) 3234; RV32I-NEXT: sb t5, 30(a2) 3235; RV32I-NEXT: sb t4, 31(a2) 3236; RV32I-NEXT: srli t0, a1, 8 3237; RV32I-NEXT: sb a6, 16(a2) 3238; RV32I-NEXT: sb s2, 17(a2) 3239; RV32I-NEXT: sb s1, 18(a2) 3240; RV32I-NEXT: sb s0, 19(a2) 3241; RV32I-NEXT: srli a6, a0, 24 3242; RV32I-NEXT: sb a5, 20(a2) 3243; RV32I-NEXT: sb s5, 21(a2) 3244; RV32I-NEXT: sb s4, 22(a2) 3245; RV32I-NEXT: sb s3, 23(a2) 3246; RV32I-NEXT: srli a5, a0, 16 3247; RV32I-NEXT: sb a4, 8(a2) 3248; RV32I-NEXT: sb s8, 9(a2) 3249; RV32I-NEXT: sb s7, 10(a2) 3250; RV32I-NEXT: sb s6, 11(a2) 3251; RV32I-NEXT: srli a4, a0, 8 3252; RV32I-NEXT: sb a3, 12(a2) 3253; RV32I-NEXT: sb s11, 13(a2) 3254; RV32I-NEXT: sb s10, 14(a2) 3255; RV32I-NEXT: sb s9, 15(a2) 3256; RV32I-NEXT: sb a1, 0(a2) 3257; RV32I-NEXT: sb t0, 1(a2) 3258; RV32I-NEXT: sb a7, 2(a2) 3259; RV32I-NEXT: sb ra, 3(a2) 3260; RV32I-NEXT: sb a0, 4(a2) 3261; RV32I-NEXT: sb a4, 5(a2) 3262; RV32I-NEXT: sb a5, 6(a2) 3263; RV32I-NEXT: sb a6, 7(a2) 3264; RV32I-NEXT: lw ra, 124(sp) # 4-byte Folded Reload 3265; RV32I-NEXT: lw s0, 120(sp) # 4-byte Folded Reload 3266; RV32I-NEXT: lw s1, 116(sp) # 4-byte Folded Reload 3267; RV32I-NEXT: lw s2, 112(sp) # 4-byte Folded Reload 3268; RV32I-NEXT: lw s3, 108(sp) # 4-byte Folded Reload 3269; RV32I-NEXT: lw s4, 104(sp) # 4-byte Folded Reload 3270; RV32I-NEXT: lw s5, 100(sp) # 4-byte Folded Reload 3271; RV32I-NEXT: lw s6, 96(sp) # 4-byte Folded Reload 3272; RV32I-NEXT: lw s7, 92(sp) # 4-byte Folded Reload 3273; RV32I-NEXT: lw s8, 88(sp) # 4-byte Folded Reload 3274; RV32I-NEXT: lw s9, 84(sp) # 4-byte Folded Reload 3275; RV32I-NEXT: lw s10, 80(sp) # 4-byte Folded Reload 3276; RV32I-NEXT: lw s11, 76(sp) # 4-byte Folded Reload 3277; RV32I-NEXT: addi sp, sp, 128 3278; RV32I-NEXT: ret 3279 %src = load i256, ptr %src.ptr, align 1 3280 %dwordOff = load i256, ptr %dwordOff.ptr, align 1 3281 %bitOff = shl i256 %dwordOff, 6 3282 %res = lshr i256 %src, %bitOff 3283 store i256 %res, ptr %dst, align 1 3284 ret void 3285} 3286 3287define void @shl_32bytes(ptr %src.ptr, ptr %byteOff.ptr, ptr %dst) nounwind { 3288; RV64I-LABEL: shl_32bytes: 3289; RV64I: # %bb.0: 3290; RV64I-NEXT: addi sp, sp, -160 3291; RV64I-NEXT: sd s0, 152(sp) # 8-byte Folded Spill 3292; RV64I-NEXT: sd s1, 144(sp) # 8-byte Folded Spill 3293; RV64I-NEXT: sd s2, 136(sp) # 8-byte Folded Spill 3294; RV64I-NEXT: sd s3, 128(sp) # 8-byte Folded Spill 3295; RV64I-NEXT: sd s4, 120(sp) # 8-byte Folded Spill 3296; RV64I-NEXT: sd s5, 112(sp) # 8-byte Folded Spill 3297; RV64I-NEXT: sd s6, 104(sp) # 8-byte Folded Spill 3298; RV64I-NEXT: sd s7, 96(sp) # 8-byte Folded Spill 3299; RV64I-NEXT: sd s8, 88(sp) # 8-byte Folded Spill 3300; RV64I-NEXT: sd s9, 80(sp) # 8-byte Folded Spill 3301; RV64I-NEXT: sd s10, 72(sp) # 8-byte Folded Spill 3302; RV64I-NEXT: sd s11, 64(sp) # 8-byte Folded Spill 3303; RV64I-NEXT: lbu a3, 0(a0) 3304; RV64I-NEXT: lbu a4, 1(a0) 3305; RV64I-NEXT: lbu a5, 2(a0) 3306; RV64I-NEXT: lbu a6, 3(a0) 3307; RV64I-NEXT: lbu a7, 4(a0) 3308; RV64I-NEXT: lbu t0, 5(a0) 3309; RV64I-NEXT: lbu t1, 6(a0) 3310; RV64I-NEXT: lbu t2, 7(a0) 3311; RV64I-NEXT: lbu t3, 8(a0) 3312; RV64I-NEXT: lbu t4, 9(a0) 3313; RV64I-NEXT: lbu t5, 10(a0) 3314; RV64I-NEXT: lbu t6, 11(a0) 3315; RV64I-NEXT: lbu s0, 12(a0) 3316; RV64I-NEXT: lbu s1, 13(a0) 3317; RV64I-NEXT: lbu s2, 14(a0) 3318; RV64I-NEXT: lbu s3, 15(a0) 3319; RV64I-NEXT: lbu s4, 16(a0) 3320; RV64I-NEXT: lbu s5, 17(a0) 3321; RV64I-NEXT: lbu s6, 18(a0) 3322; RV64I-NEXT: lbu s7, 19(a0) 3323; RV64I-NEXT: slli a4, a4, 8 3324; RV64I-NEXT: slli a5, a5, 16 3325; RV64I-NEXT: slli a6, a6, 24 3326; RV64I-NEXT: slli t0, t0, 8 3327; RV64I-NEXT: slli t1, t1, 16 3328; RV64I-NEXT: slli t2, t2, 24 3329; RV64I-NEXT: or a3, a4, a3 3330; RV64I-NEXT: or a4, a6, a5 3331; RV64I-NEXT: or a5, t0, a7 3332; RV64I-NEXT: or a6, t2, t1 3333; RV64I-NEXT: lbu s8, 20(a0) 3334; RV64I-NEXT: lbu s9, 21(a0) 3335; RV64I-NEXT: lbu s10, 22(a0) 3336; RV64I-NEXT: lbu s11, 23(a0) 3337; RV64I-NEXT: slli t4, t4, 8 3338; RV64I-NEXT: slli t5, t5, 16 3339; RV64I-NEXT: slli t6, t6, 24 3340; RV64I-NEXT: slli s1, s1, 8 3341; RV64I-NEXT: slli s2, s2, 16 3342; RV64I-NEXT: slli s3, s3, 24 3343; RV64I-NEXT: or a7, t4, t3 3344; RV64I-NEXT: or t0, t6, t5 3345; RV64I-NEXT: or t1, s1, s0 3346; RV64I-NEXT: or t2, s3, s2 3347; RV64I-NEXT: lbu t6, 24(a0) 3348; RV64I-NEXT: lbu s0, 25(a0) 3349; RV64I-NEXT: lbu s1, 26(a0) 3350; RV64I-NEXT: lbu s2, 27(a0) 3351; RV64I-NEXT: slli s5, s5, 8 3352; RV64I-NEXT: slli s6, s6, 16 3353; RV64I-NEXT: slli s7, s7, 24 3354; RV64I-NEXT: slli s9, s9, 8 3355; RV64I-NEXT: or t3, s5, s4 3356; RV64I-NEXT: or t4, s7, s6 3357; RV64I-NEXT: or t5, s9, s8 3358; RV64I-NEXT: lbu s3, 28(a0) 3359; RV64I-NEXT: lbu s4, 29(a0) 3360; RV64I-NEXT: lbu s5, 30(a0) 3361; RV64I-NEXT: lbu s6, 31(a0) 3362; RV64I-NEXT: slli s10, s10, 16 3363; RV64I-NEXT: slli s11, s11, 24 3364; RV64I-NEXT: slli s0, s0, 8 3365; RV64I-NEXT: slli s1, s1, 16 3366; RV64I-NEXT: slli s2, s2, 24 3367; RV64I-NEXT: slli s4, s4, 8 3368; RV64I-NEXT: or a0, s11, s10 3369; RV64I-NEXT: or t6, s0, t6 3370; RV64I-NEXT: or s0, s2, s1 3371; RV64I-NEXT: or s1, s4, s3 3372; RV64I-NEXT: lbu s2, 0(a1) 3373; RV64I-NEXT: lbu s3, 1(a1) 3374; RV64I-NEXT: lbu s4, 2(a1) 3375; RV64I-NEXT: lbu s7, 3(a1) 3376; RV64I-NEXT: slli s5, s5, 16 3377; RV64I-NEXT: slli s6, s6, 24 3378; RV64I-NEXT: slli s3, s3, 8 3379; RV64I-NEXT: slli s4, s4, 16 3380; RV64I-NEXT: slli s7, s7, 24 3381; RV64I-NEXT: or s5, s6, s5 3382; RV64I-NEXT: or s2, s3, s2 3383; RV64I-NEXT: lbu s3, 4(a1) 3384; RV64I-NEXT: lbu s6, 5(a1) 3385; RV64I-NEXT: or s4, s7, s4 3386; RV64I-NEXT: lbu s7, 6(a1) 3387; RV64I-NEXT: lbu a1, 7(a1) 3388; RV64I-NEXT: slli s6, s6, 8 3389; RV64I-NEXT: or s3, s6, s3 3390; RV64I-NEXT: sd zero, 0(sp) 3391; RV64I-NEXT: sd zero, 8(sp) 3392; RV64I-NEXT: sd zero, 16(sp) 3393; RV64I-NEXT: sd zero, 24(sp) 3394; RV64I-NEXT: slli s7, s7, 16 3395; RV64I-NEXT: slli a1, a1, 24 3396; RV64I-NEXT: or a1, a1, s7 3397; RV64I-NEXT: addi s6, sp, 32 3398; RV64I-NEXT: or a3, a4, a3 3399; RV64I-NEXT: or a4, a6, a5 3400; RV64I-NEXT: or a5, t0, a7 3401; RV64I-NEXT: or a6, t2, t1 3402; RV64I-NEXT: or a7, t4, t3 3403; RV64I-NEXT: or a0, a0, t5 3404; RV64I-NEXT: or t0, s0, t6 3405; RV64I-NEXT: or t1, s5, s1 3406; RV64I-NEXT: or t2, s4, s2 3407; RV64I-NEXT: or a1, a1, s3 3408; RV64I-NEXT: slli a4, a4, 32 3409; RV64I-NEXT: slli a6, a6, 32 3410; RV64I-NEXT: slli a0, a0, 32 3411; RV64I-NEXT: slli t1, t1, 32 3412; RV64I-NEXT: slli a1, a1, 32 3413; RV64I-NEXT: or a3, a4, a3 3414; RV64I-NEXT: or a4, a6, a5 3415; RV64I-NEXT: or a0, a0, a7 3416; RV64I-NEXT: or a5, t1, t0 3417; RV64I-NEXT: or a1, a1, t2 3418; RV64I-NEXT: sd a3, 32(sp) 3419; RV64I-NEXT: sd a4, 40(sp) 3420; RV64I-NEXT: sd a0, 48(sp) 3421; RV64I-NEXT: sd a5, 56(sp) 3422; RV64I-NEXT: slli a0, a1, 3 3423; RV64I-NEXT: andi a1, a1, 24 3424; RV64I-NEXT: sub a1, s6, a1 3425; RV64I-NEXT: andi a3, a0, 56 3426; RV64I-NEXT: ld a4, 0(a1) 3427; RV64I-NEXT: ld a5, 8(a1) 3428; RV64I-NEXT: ld a6, 16(a1) 3429; RV64I-NEXT: ld a1, 24(a1) 3430; RV64I-NEXT: xori a3, a3, 63 3431; RV64I-NEXT: sll a7, a5, a0 3432; RV64I-NEXT: srli t0, a4, 1 3433; RV64I-NEXT: sll t1, a1, a0 3434; RV64I-NEXT: srli a1, a6, 1 3435; RV64I-NEXT: sll t2, a6, a0 3436; RV64I-NEXT: srli a5, a5, 1 3437; RV64I-NEXT: sll t3, a4, a0 3438; RV64I-NEXT: srl a0, t0, a3 3439; RV64I-NEXT: srl a4, a1, a3 3440; RV64I-NEXT: srl a5, a5, a3 3441; RV64I-NEXT: srli a3, t2, 56 3442; RV64I-NEXT: srli a1, t1, 56 3443; RV64I-NEXT: srli t0, t3, 56 3444; RV64I-NEXT: srli t4, t3, 48 3445; RV64I-NEXT: srli t5, t3, 40 3446; RV64I-NEXT: srli t6, t3, 32 3447; RV64I-NEXT: srli s0, t3, 24 3448; RV64I-NEXT: srli s1, t3, 16 3449; RV64I-NEXT: srli s2, t3, 8 3450; RV64I-NEXT: srli a6, a7, 56 3451; RV64I-NEXT: or a0, a7, a0 3452; RV64I-NEXT: or a4, t1, a4 3453; RV64I-NEXT: or a5, t2, a5 3454; RV64I-NEXT: sb t6, 4(a2) 3455; RV64I-NEXT: sb t5, 5(a2) 3456; RV64I-NEXT: sb t4, 6(a2) 3457; RV64I-NEXT: sb t0, 7(a2) 3458; RV64I-NEXT: sb t3, 0(a2) 3459; RV64I-NEXT: sb s2, 1(a2) 3460; RV64I-NEXT: sb s1, 2(a2) 3461; RV64I-NEXT: sb s0, 3(a2) 3462; RV64I-NEXT: srli a7, a5, 48 3463; RV64I-NEXT: srli t0, a5, 40 3464; RV64I-NEXT: srli t1, a5, 32 3465; RV64I-NEXT: srli t2, a5, 24 3466; RV64I-NEXT: srli t3, a5, 16 3467; RV64I-NEXT: srli t4, a5, 8 3468; RV64I-NEXT: srli t5, a4, 48 3469; RV64I-NEXT: srli t6, a4, 40 3470; RV64I-NEXT: srli s0, a4, 32 3471; RV64I-NEXT: srli s1, a4, 24 3472; RV64I-NEXT: srli s2, a4, 16 3473; RV64I-NEXT: srli s3, a4, 8 3474; RV64I-NEXT: srli s4, a0, 48 3475; RV64I-NEXT: srli s5, a0, 40 3476; RV64I-NEXT: srli s6, a0, 32 3477; RV64I-NEXT: sb t1, 20(a2) 3478; RV64I-NEXT: sb t0, 21(a2) 3479; RV64I-NEXT: sb a7, 22(a2) 3480; RV64I-NEXT: sb a3, 23(a2) 3481; RV64I-NEXT: srli a3, a0, 24 3482; RV64I-NEXT: sb s0, 28(a2) 3483; RV64I-NEXT: sb t6, 29(a2) 3484; RV64I-NEXT: sb t5, 30(a2) 3485; RV64I-NEXT: sb a1, 31(a2) 3486; RV64I-NEXT: srli a1, a0, 16 3487; RV64I-NEXT: sb s6, 12(a2) 3488; RV64I-NEXT: sb s5, 13(a2) 3489; RV64I-NEXT: sb s4, 14(a2) 3490; RV64I-NEXT: sb a6, 15(a2) 3491; RV64I-NEXT: srli a6, a0, 8 3492; RV64I-NEXT: sb a5, 16(a2) 3493; RV64I-NEXT: sb t4, 17(a2) 3494; RV64I-NEXT: sb t3, 18(a2) 3495; RV64I-NEXT: sb t2, 19(a2) 3496; RV64I-NEXT: sb a4, 24(a2) 3497; RV64I-NEXT: sb s3, 25(a2) 3498; RV64I-NEXT: sb s2, 26(a2) 3499; RV64I-NEXT: sb s1, 27(a2) 3500; RV64I-NEXT: sb a0, 8(a2) 3501; RV64I-NEXT: sb a6, 9(a2) 3502; RV64I-NEXT: sb a1, 10(a2) 3503; RV64I-NEXT: sb a3, 11(a2) 3504; RV64I-NEXT: ld s0, 152(sp) # 8-byte Folded Reload 3505; RV64I-NEXT: ld s1, 144(sp) # 8-byte Folded Reload 3506; RV64I-NEXT: ld s2, 136(sp) # 8-byte Folded Reload 3507; RV64I-NEXT: ld s3, 128(sp) # 8-byte Folded Reload 3508; RV64I-NEXT: ld s4, 120(sp) # 8-byte Folded Reload 3509; RV64I-NEXT: ld s5, 112(sp) # 8-byte Folded Reload 3510; RV64I-NEXT: ld s6, 104(sp) # 8-byte Folded Reload 3511; RV64I-NEXT: ld s7, 96(sp) # 8-byte Folded Reload 3512; RV64I-NEXT: ld s8, 88(sp) # 8-byte Folded Reload 3513; RV64I-NEXT: ld s9, 80(sp) # 8-byte Folded Reload 3514; RV64I-NEXT: ld s10, 72(sp) # 8-byte Folded Reload 3515; RV64I-NEXT: ld s11, 64(sp) # 8-byte Folded Reload 3516; RV64I-NEXT: addi sp, sp, 160 3517; RV64I-NEXT: ret 3518; 3519; RV32I-LABEL: shl_32bytes: 3520; RV32I: # %bb.0: 3521; RV32I-NEXT: addi sp, sp, -128 3522; RV32I-NEXT: sw ra, 124(sp) # 4-byte Folded Spill 3523; RV32I-NEXT: sw s0, 120(sp) # 4-byte Folded Spill 3524; RV32I-NEXT: sw s1, 116(sp) # 4-byte Folded Spill 3525; RV32I-NEXT: sw s2, 112(sp) # 4-byte Folded Spill 3526; RV32I-NEXT: sw s3, 108(sp) # 4-byte Folded Spill 3527; RV32I-NEXT: sw s4, 104(sp) # 4-byte Folded Spill 3528; RV32I-NEXT: sw s5, 100(sp) # 4-byte Folded Spill 3529; RV32I-NEXT: sw s6, 96(sp) # 4-byte Folded Spill 3530; RV32I-NEXT: sw s7, 92(sp) # 4-byte Folded Spill 3531; RV32I-NEXT: sw s8, 88(sp) # 4-byte Folded Spill 3532; RV32I-NEXT: sw s9, 84(sp) # 4-byte Folded Spill 3533; RV32I-NEXT: sw s10, 80(sp) # 4-byte Folded Spill 3534; RV32I-NEXT: sw s11, 76(sp) # 4-byte Folded Spill 3535; RV32I-NEXT: lbu s1, 0(a0) 3536; RV32I-NEXT: lbu a4, 1(a0) 3537; RV32I-NEXT: lbu a5, 2(a0) 3538; RV32I-NEXT: lbu a6, 3(a0) 3539; RV32I-NEXT: lbu t1, 4(a0) 3540; RV32I-NEXT: lbu t3, 5(a0) 3541; RV32I-NEXT: lbu t4, 6(a0) 3542; RV32I-NEXT: lbu s0, 7(a0) 3543; RV32I-NEXT: lbu t2, 8(a0) 3544; RV32I-NEXT: lbu s3, 9(a0) 3545; RV32I-NEXT: lbu s6, 10(a0) 3546; RV32I-NEXT: lbu s8, 11(a0) 3547; RV32I-NEXT: lbu s9, 12(a0) 3548; RV32I-NEXT: lbu s10, 13(a0) 3549; RV32I-NEXT: lbu s4, 14(a0) 3550; RV32I-NEXT: lbu s7, 15(a0) 3551; RV32I-NEXT: lbu s5, 16(a0) 3552; RV32I-NEXT: lbu s11, 17(a0) 3553; RV32I-NEXT: lbu ra, 18(a0) 3554; RV32I-NEXT: lbu a3, 19(a0) 3555; RV32I-NEXT: lbu t5, 20(a0) 3556; RV32I-NEXT: lbu t6, 21(a0) 3557; RV32I-NEXT: lbu a7, 22(a0) 3558; RV32I-NEXT: lbu t0, 23(a0) 3559; RV32I-NEXT: slli a4, a4, 8 3560; RV32I-NEXT: slli a5, a5, 16 3561; RV32I-NEXT: slli a6, a6, 24 3562; RV32I-NEXT: slli t3, t3, 8 3563; RV32I-NEXT: slli t4, t4, 16 3564; RV32I-NEXT: slli s0, s0, 24 3565; RV32I-NEXT: or a4, a4, s1 3566; RV32I-NEXT: sw a4, 4(sp) # 4-byte Folded Spill 3567; RV32I-NEXT: or a4, a6, a5 3568; RV32I-NEXT: or a5, t3, t1 3569; RV32I-NEXT: or a6, s0, t4 3570; RV32I-NEXT: lbu t1, 24(a0) 3571; RV32I-NEXT: lbu s0, 25(a0) 3572; RV32I-NEXT: lbu s1, 26(a0) 3573; RV32I-NEXT: lbu s2, 27(a0) 3574; RV32I-NEXT: slli s3, s3, 8 3575; RV32I-NEXT: slli s6, s6, 16 3576; RV32I-NEXT: slli s8, s8, 24 3577; RV32I-NEXT: slli s10, s10, 8 3578; RV32I-NEXT: or t2, s3, t2 3579; RV32I-NEXT: or t3, s8, s6 3580; RV32I-NEXT: or t4, s10, s9 3581; RV32I-NEXT: lbu s3, 28(a0) 3582; RV32I-NEXT: lbu s6, 29(a0) 3583; RV32I-NEXT: lbu s8, 30(a0) 3584; RV32I-NEXT: lbu s9, 31(a0) 3585; RV32I-NEXT: slli s4, s4, 16 3586; RV32I-NEXT: slli s7, s7, 24 3587; RV32I-NEXT: slli s11, s11, 8 3588; RV32I-NEXT: slli ra, ra, 16 3589; RV32I-NEXT: slli a3, a3, 24 3590; RV32I-NEXT: or a0, s7, s4 3591; RV32I-NEXT: or s4, s11, s5 3592; RV32I-NEXT: or s5, a3, ra 3593; RV32I-NEXT: lbu a3, 0(a1) 3594; RV32I-NEXT: lbu s7, 1(a1) 3595; RV32I-NEXT: lbu s10, 2(a1) 3596; RV32I-NEXT: lbu a1, 3(a1) 3597; RV32I-NEXT: sw zero, 24(sp) 3598; RV32I-NEXT: sw zero, 28(sp) 3599; RV32I-NEXT: sw zero, 32(sp) 3600; RV32I-NEXT: sw zero, 36(sp) 3601; RV32I-NEXT: sw zero, 8(sp) 3602; RV32I-NEXT: sw zero, 12(sp) 3603; RV32I-NEXT: sw zero, 16(sp) 3604; RV32I-NEXT: sw zero, 20(sp) 3605; RV32I-NEXT: slli t6, t6, 8 3606; RV32I-NEXT: or t5, t6, t5 3607; RV32I-NEXT: addi t6, sp, 40 3608; RV32I-NEXT: slli a7, a7, 16 3609; RV32I-NEXT: slli t0, t0, 24 3610; RV32I-NEXT: slli s0, s0, 8 3611; RV32I-NEXT: slli s1, s1, 16 3612; RV32I-NEXT: slli s2, s2, 24 3613; RV32I-NEXT: slli s6, s6, 8 3614; RV32I-NEXT: slli s8, s8, 16 3615; RV32I-NEXT: slli s9, s9, 24 3616; RV32I-NEXT: slli s7, s7, 8 3617; RV32I-NEXT: slli s10, s10, 16 3618; RV32I-NEXT: slli a1, a1, 24 3619; RV32I-NEXT: or a7, t0, a7 3620; RV32I-NEXT: or t0, s0, t1 3621; RV32I-NEXT: or t1, s2, s1 3622; RV32I-NEXT: or s0, s6, s3 3623; RV32I-NEXT: or s1, s9, s8 3624; RV32I-NEXT: or a3, s7, a3 3625; RV32I-NEXT: or a1, a1, s10 3626; RV32I-NEXT: lw s2, 4(sp) # 4-byte Folded Reload 3627; RV32I-NEXT: or a4, a4, s2 3628; RV32I-NEXT: or a5, a6, a5 3629; RV32I-NEXT: or a6, t3, t2 3630; RV32I-NEXT: or a0, a0, t4 3631; RV32I-NEXT: or t2, s5, s4 3632; RV32I-NEXT: or a7, a7, t5 3633; RV32I-NEXT: or t0, t1, t0 3634; RV32I-NEXT: or s0, s1, s0 3635; RV32I-NEXT: or a1, a1, a3 3636; RV32I-NEXT: sw t2, 56(sp) 3637; RV32I-NEXT: sw a7, 60(sp) 3638; RV32I-NEXT: sw t0, 64(sp) 3639; RV32I-NEXT: sw s0, 68(sp) 3640; RV32I-NEXT: sw a4, 40(sp) 3641; RV32I-NEXT: sw a5, 44(sp) 3642; RV32I-NEXT: sw a6, 48(sp) 3643; RV32I-NEXT: sw a0, 52(sp) 3644; RV32I-NEXT: slli a3, a1, 3 3645; RV32I-NEXT: andi a1, a1, 28 3646; RV32I-NEXT: sub a1, t6, a1 3647; RV32I-NEXT: andi a0, a3, 24 3648; RV32I-NEXT: xori a0, a0, 31 3649; RV32I-NEXT: lw a4, 0(a1) 3650; RV32I-NEXT: lw a5, 4(a1) 3651; RV32I-NEXT: lw a6, 8(a1) 3652; RV32I-NEXT: lw a7, 12(a1) 3653; RV32I-NEXT: lw t0, 16(a1) 3654; RV32I-NEXT: lw t1, 20(a1) 3655; RV32I-NEXT: lw t2, 24(a1) 3656; RV32I-NEXT: lw a1, 28(a1) 3657; RV32I-NEXT: sll t3, a5, a3 3658; RV32I-NEXT: srli t4, a4, 1 3659; RV32I-NEXT: sll t5, a7, a3 3660; RV32I-NEXT: srli t6, a6, 1 3661; RV32I-NEXT: sll s0, a6, a3 3662; RV32I-NEXT: srli a5, a5, 1 3663; RV32I-NEXT: sll s1, t1, a3 3664; RV32I-NEXT: srli a6, t0, 1 3665; RV32I-NEXT: sll s2, t0, a3 3666; RV32I-NEXT: srli a7, a7, 1 3667; RV32I-NEXT: sll s3, a1, a3 3668; RV32I-NEXT: srli a1, t2, 1 3669; RV32I-NEXT: sll s4, t2, a3 3670; RV32I-NEXT: srli t0, t1, 1 3671; RV32I-NEXT: sll s5, a4, a3 3672; RV32I-NEXT: srl t2, t4, a0 3673; RV32I-NEXT: srl t4, t6, a0 3674; RV32I-NEXT: srl t6, a5, a0 3675; RV32I-NEXT: srl s6, a6, a0 3676; RV32I-NEXT: srl s7, a7, a0 3677; RV32I-NEXT: srl s8, a1, a0 3678; RV32I-NEXT: srl s9, t0, a0 3679; RV32I-NEXT: srli t1, s4, 24 3680; RV32I-NEXT: srli a7, s3, 24 3681; RV32I-NEXT: srli a5, s2, 24 3682; RV32I-NEXT: srli a3, s1, 24 3683; RV32I-NEXT: srli a1, s0, 24 3684; RV32I-NEXT: srli a0, t5, 24 3685; RV32I-NEXT: srli s10, s5, 24 3686; RV32I-NEXT: srli s11, s5, 16 3687; RV32I-NEXT: srli ra, s5, 8 3688; RV32I-NEXT: srli a4, t3, 24 3689; RV32I-NEXT: or a6, t3, t2 3690; RV32I-NEXT: or t0, t5, t4 3691; RV32I-NEXT: or t2, s0, t6 3692; RV32I-NEXT: or t3, s1, s6 3693; RV32I-NEXT: or t4, s2, s7 3694; RV32I-NEXT: or t5, s3, s8 3695; RV32I-NEXT: or t6, s4, s9 3696; RV32I-NEXT: sb s5, 0(a2) 3697; RV32I-NEXT: sb ra, 1(a2) 3698; RV32I-NEXT: sb s11, 2(a2) 3699; RV32I-NEXT: sb s10, 3(a2) 3700; RV32I-NEXT: srli s0, t6, 16 3701; RV32I-NEXT: srli s1, t6, 8 3702; RV32I-NEXT: srli s2, t5, 16 3703; RV32I-NEXT: srli s3, t5, 8 3704; RV32I-NEXT: srli s4, t4, 16 3705; RV32I-NEXT: srli s5, t4, 8 3706; RV32I-NEXT: srli s6, t3, 16 3707; RV32I-NEXT: srli s7, t3, 8 3708; RV32I-NEXT: srli s8, t2, 16 3709; RV32I-NEXT: srli s9, t2, 8 3710; RV32I-NEXT: srli s10, t0, 16 3711; RV32I-NEXT: srli s11, t0, 8 3712; RV32I-NEXT: sb t6, 24(a2) 3713; RV32I-NEXT: sb s1, 25(a2) 3714; RV32I-NEXT: sb s0, 26(a2) 3715; RV32I-NEXT: sb t1, 27(a2) 3716; RV32I-NEXT: srli t1, a6, 16 3717; RV32I-NEXT: sb t5, 28(a2) 3718; RV32I-NEXT: sb s3, 29(a2) 3719; RV32I-NEXT: sb s2, 30(a2) 3720; RV32I-NEXT: sb a7, 31(a2) 3721; RV32I-NEXT: srli a7, a6, 8 3722; RV32I-NEXT: sb t4, 16(a2) 3723; RV32I-NEXT: sb s5, 17(a2) 3724; RV32I-NEXT: sb s4, 18(a2) 3725; RV32I-NEXT: sb a5, 19(a2) 3726; RV32I-NEXT: sb t3, 20(a2) 3727; RV32I-NEXT: sb s7, 21(a2) 3728; RV32I-NEXT: sb s6, 22(a2) 3729; RV32I-NEXT: sb a3, 23(a2) 3730; RV32I-NEXT: sb t2, 8(a2) 3731; RV32I-NEXT: sb s9, 9(a2) 3732; RV32I-NEXT: sb s8, 10(a2) 3733; RV32I-NEXT: sb a1, 11(a2) 3734; RV32I-NEXT: sb t0, 12(a2) 3735; RV32I-NEXT: sb s11, 13(a2) 3736; RV32I-NEXT: sb s10, 14(a2) 3737; RV32I-NEXT: sb a0, 15(a2) 3738; RV32I-NEXT: sb a6, 4(a2) 3739; RV32I-NEXT: sb a7, 5(a2) 3740; RV32I-NEXT: sb t1, 6(a2) 3741; RV32I-NEXT: sb a4, 7(a2) 3742; RV32I-NEXT: lw ra, 124(sp) # 4-byte Folded Reload 3743; RV32I-NEXT: lw s0, 120(sp) # 4-byte Folded Reload 3744; RV32I-NEXT: lw s1, 116(sp) # 4-byte Folded Reload 3745; RV32I-NEXT: lw s2, 112(sp) # 4-byte Folded Reload 3746; RV32I-NEXT: lw s3, 108(sp) # 4-byte Folded Reload 3747; RV32I-NEXT: lw s4, 104(sp) # 4-byte Folded Reload 3748; RV32I-NEXT: lw s5, 100(sp) # 4-byte Folded Reload 3749; RV32I-NEXT: lw s6, 96(sp) # 4-byte Folded Reload 3750; RV32I-NEXT: lw s7, 92(sp) # 4-byte Folded Reload 3751; RV32I-NEXT: lw s8, 88(sp) # 4-byte Folded Reload 3752; RV32I-NEXT: lw s9, 84(sp) # 4-byte Folded Reload 3753; RV32I-NEXT: lw s10, 80(sp) # 4-byte Folded Reload 3754; RV32I-NEXT: lw s11, 76(sp) # 4-byte Folded Reload 3755; RV32I-NEXT: addi sp, sp, 128 3756; RV32I-NEXT: ret 3757 %src = load i256, ptr %src.ptr, align 1 3758 %byteOff = load i256, ptr %byteOff.ptr, align 1 3759 %bitOff = shl i256 %byteOff, 3 3760 %res = shl i256 %src, %bitOff 3761 store i256 %res, ptr %dst, align 1 3762 ret void 3763} 3764 3765define void @shl_32bytes_wordOff(ptr %src.ptr, ptr %wordOff.ptr, ptr %dst) nounwind { 3766; RV64I-LABEL: shl_32bytes_wordOff: 3767; RV64I: # %bb.0: 3768; RV64I-NEXT: addi sp, sp, -160 3769; RV64I-NEXT: sd s0, 152(sp) # 8-byte Folded Spill 3770; RV64I-NEXT: sd s1, 144(sp) # 8-byte Folded Spill 3771; RV64I-NEXT: sd s2, 136(sp) # 8-byte Folded Spill 3772; RV64I-NEXT: sd s3, 128(sp) # 8-byte Folded Spill 3773; RV64I-NEXT: sd s4, 120(sp) # 8-byte Folded Spill 3774; RV64I-NEXT: sd s5, 112(sp) # 8-byte Folded Spill 3775; RV64I-NEXT: sd s6, 104(sp) # 8-byte Folded Spill 3776; RV64I-NEXT: sd s7, 96(sp) # 8-byte Folded Spill 3777; RV64I-NEXT: sd s8, 88(sp) # 8-byte Folded Spill 3778; RV64I-NEXT: sd s9, 80(sp) # 8-byte Folded Spill 3779; RV64I-NEXT: sd s10, 72(sp) # 8-byte Folded Spill 3780; RV64I-NEXT: sd s11, 64(sp) # 8-byte Folded Spill 3781; RV64I-NEXT: lbu a3, 0(a0) 3782; RV64I-NEXT: lbu a4, 1(a0) 3783; RV64I-NEXT: lbu a5, 2(a0) 3784; RV64I-NEXT: lbu a6, 3(a0) 3785; RV64I-NEXT: lbu a7, 4(a0) 3786; RV64I-NEXT: lbu t0, 5(a0) 3787; RV64I-NEXT: lbu t1, 6(a0) 3788; RV64I-NEXT: lbu t2, 7(a0) 3789; RV64I-NEXT: lbu t3, 8(a0) 3790; RV64I-NEXT: lbu t4, 9(a0) 3791; RV64I-NEXT: lbu t5, 10(a0) 3792; RV64I-NEXT: lbu t6, 11(a0) 3793; RV64I-NEXT: lbu s0, 12(a0) 3794; RV64I-NEXT: lbu s1, 13(a0) 3795; RV64I-NEXT: lbu s2, 14(a0) 3796; RV64I-NEXT: lbu s3, 15(a0) 3797; RV64I-NEXT: lbu s4, 16(a0) 3798; RV64I-NEXT: lbu s5, 17(a0) 3799; RV64I-NEXT: lbu s6, 18(a0) 3800; RV64I-NEXT: lbu s7, 19(a0) 3801; RV64I-NEXT: slli a4, a4, 8 3802; RV64I-NEXT: slli a5, a5, 16 3803; RV64I-NEXT: slli a6, a6, 24 3804; RV64I-NEXT: slli t0, t0, 8 3805; RV64I-NEXT: slli t1, t1, 16 3806; RV64I-NEXT: slli t2, t2, 24 3807; RV64I-NEXT: or a3, a4, a3 3808; RV64I-NEXT: or a4, a6, a5 3809; RV64I-NEXT: or a5, t0, a7 3810; RV64I-NEXT: or a6, t2, t1 3811; RV64I-NEXT: lbu s8, 20(a0) 3812; RV64I-NEXT: lbu s9, 21(a0) 3813; RV64I-NEXT: lbu s10, 22(a0) 3814; RV64I-NEXT: lbu s11, 23(a0) 3815; RV64I-NEXT: slli t4, t4, 8 3816; RV64I-NEXT: slli t5, t5, 16 3817; RV64I-NEXT: slli t6, t6, 24 3818; RV64I-NEXT: slli s1, s1, 8 3819; RV64I-NEXT: slli s2, s2, 16 3820; RV64I-NEXT: slli s3, s3, 24 3821; RV64I-NEXT: or a7, t4, t3 3822; RV64I-NEXT: or t0, t6, t5 3823; RV64I-NEXT: or t1, s1, s0 3824; RV64I-NEXT: or t2, s3, s2 3825; RV64I-NEXT: lbu t6, 24(a0) 3826; RV64I-NEXT: lbu s0, 25(a0) 3827; RV64I-NEXT: lbu s1, 26(a0) 3828; RV64I-NEXT: lbu s2, 27(a0) 3829; RV64I-NEXT: slli s5, s5, 8 3830; RV64I-NEXT: slli s6, s6, 16 3831; RV64I-NEXT: slli s7, s7, 24 3832; RV64I-NEXT: slli s9, s9, 8 3833; RV64I-NEXT: or t3, s5, s4 3834; RV64I-NEXT: or t4, s7, s6 3835; RV64I-NEXT: or t5, s9, s8 3836; RV64I-NEXT: lbu s3, 28(a0) 3837; RV64I-NEXT: lbu s4, 29(a0) 3838; RV64I-NEXT: lbu s5, 30(a0) 3839; RV64I-NEXT: lbu s6, 31(a0) 3840; RV64I-NEXT: slli s10, s10, 16 3841; RV64I-NEXT: slli s11, s11, 24 3842; RV64I-NEXT: slli s0, s0, 8 3843; RV64I-NEXT: slli s1, s1, 16 3844; RV64I-NEXT: slli s2, s2, 24 3845; RV64I-NEXT: slli s4, s4, 8 3846; RV64I-NEXT: or a0, s11, s10 3847; RV64I-NEXT: or t6, s0, t6 3848; RV64I-NEXT: or s0, s2, s1 3849; RV64I-NEXT: or s1, s4, s3 3850; RV64I-NEXT: lbu s2, 0(a1) 3851; RV64I-NEXT: lbu s3, 1(a1) 3852; RV64I-NEXT: lbu s4, 2(a1) 3853; RV64I-NEXT: lbu s7, 3(a1) 3854; RV64I-NEXT: slli s5, s5, 16 3855; RV64I-NEXT: slli s6, s6, 24 3856; RV64I-NEXT: slli s3, s3, 8 3857; RV64I-NEXT: slli s4, s4, 16 3858; RV64I-NEXT: slli s7, s7, 24 3859; RV64I-NEXT: or s5, s6, s5 3860; RV64I-NEXT: or s2, s3, s2 3861; RV64I-NEXT: lbu s3, 4(a1) 3862; RV64I-NEXT: lbu s6, 5(a1) 3863; RV64I-NEXT: or s4, s7, s4 3864; RV64I-NEXT: lbu s7, 6(a1) 3865; RV64I-NEXT: lbu a1, 7(a1) 3866; RV64I-NEXT: slli s6, s6, 8 3867; RV64I-NEXT: or s3, s6, s3 3868; RV64I-NEXT: sd zero, 0(sp) 3869; RV64I-NEXT: sd zero, 8(sp) 3870; RV64I-NEXT: sd zero, 16(sp) 3871; RV64I-NEXT: sd zero, 24(sp) 3872; RV64I-NEXT: slli s7, s7, 16 3873; RV64I-NEXT: slli a1, a1, 24 3874; RV64I-NEXT: or a1, a1, s7 3875; RV64I-NEXT: addi s6, sp, 32 3876; RV64I-NEXT: or a3, a4, a3 3877; RV64I-NEXT: or a4, a6, a5 3878; RV64I-NEXT: or a5, t0, a7 3879; RV64I-NEXT: or a6, t2, t1 3880; RV64I-NEXT: or a7, t4, t3 3881; RV64I-NEXT: or a0, a0, t5 3882; RV64I-NEXT: or t0, s0, t6 3883; RV64I-NEXT: or t1, s5, s1 3884; RV64I-NEXT: or t2, s4, s2 3885; RV64I-NEXT: or a1, a1, s3 3886; RV64I-NEXT: slli a4, a4, 32 3887; RV64I-NEXT: slli a6, a6, 32 3888; RV64I-NEXT: slli a0, a0, 32 3889; RV64I-NEXT: slli t1, t1, 32 3890; RV64I-NEXT: slli a1, a1, 32 3891; RV64I-NEXT: or a3, a4, a3 3892; RV64I-NEXT: or a4, a6, a5 3893; RV64I-NEXT: or a0, a0, a7 3894; RV64I-NEXT: or a5, t1, t0 3895; RV64I-NEXT: or a1, a1, t2 3896; RV64I-NEXT: sd a3, 32(sp) 3897; RV64I-NEXT: sd a4, 40(sp) 3898; RV64I-NEXT: sd a0, 48(sp) 3899; RV64I-NEXT: sd a5, 56(sp) 3900; RV64I-NEXT: slli a3, a1, 5 3901; RV64I-NEXT: slli a1, a1, 2 3902; RV64I-NEXT: andi a1, a1, 24 3903; RV64I-NEXT: andi a0, a3, 32 3904; RV64I-NEXT: sub a1, s6, a1 3905; RV64I-NEXT: ld a4, 0(a1) 3906; RV64I-NEXT: ld a5, 8(a1) 3907; RV64I-NEXT: ld a6, 16(a1) 3908; RV64I-NEXT: ld a1, 24(a1) 3909; RV64I-NEXT: xori a7, a0, 63 3910; RV64I-NEXT: sll a0, a5, a3 3911; RV64I-NEXT: srli t0, a4, 1 3912; RV64I-NEXT: sll a1, a1, a3 3913; RV64I-NEXT: srli t1, a6, 1 3914; RV64I-NEXT: sll a6, a6, a3 3915; RV64I-NEXT: srli a5, a5, 1 3916; RV64I-NEXT: sll a3, a4, a3 3917; RV64I-NEXT: srl a4, t0, a7 3918; RV64I-NEXT: srl t0, t1, a7 3919; RV64I-NEXT: srl a5, a5, a7 3920; RV64I-NEXT: srli a7, a6, 56 3921; RV64I-NEXT: srli t1, a6, 48 3922; RV64I-NEXT: srli t2, a6, 40 3923; RV64I-NEXT: srli t3, a6, 32 3924; RV64I-NEXT: srli t4, a1, 56 3925; RV64I-NEXT: srli t5, a1, 48 3926; RV64I-NEXT: srli t6, a1, 40 3927; RV64I-NEXT: srli s0, a1, 32 3928; RV64I-NEXT: srli s1, a3, 56 3929; RV64I-NEXT: srli s2, a3, 48 3930; RV64I-NEXT: srli s3, a3, 40 3931; RV64I-NEXT: srli s4, a3, 32 3932; RV64I-NEXT: srli s5, a3, 24 3933; RV64I-NEXT: srli s6, a3, 16 3934; RV64I-NEXT: or a1, a1, t0 3935; RV64I-NEXT: srli t0, a3, 8 3936; RV64I-NEXT: or a5, a6, a5 3937; RV64I-NEXT: srli a6, a0, 56 3938; RV64I-NEXT: sb t3, 20(a2) 3939; RV64I-NEXT: sb t2, 21(a2) 3940; RV64I-NEXT: sb t1, 22(a2) 3941; RV64I-NEXT: sb a7, 23(a2) 3942; RV64I-NEXT: srli a7, a0, 48 3943; RV64I-NEXT: sb s0, 28(a2) 3944; RV64I-NEXT: sb t6, 29(a2) 3945; RV64I-NEXT: sb t5, 30(a2) 3946; RV64I-NEXT: sb t4, 31(a2) 3947; RV64I-NEXT: srli t1, a0, 40 3948; RV64I-NEXT: or a4, a0, a4 3949; RV64I-NEXT: srli a0, a0, 32 3950; RV64I-NEXT: sb s4, 4(a2) 3951; RV64I-NEXT: sb s3, 5(a2) 3952; RV64I-NEXT: sb s2, 6(a2) 3953; RV64I-NEXT: sb s1, 7(a2) 3954; RV64I-NEXT: sb a3, 0(a2) 3955; RV64I-NEXT: sb t0, 1(a2) 3956; RV64I-NEXT: sb s6, 2(a2) 3957; RV64I-NEXT: sb s5, 3(a2) 3958; RV64I-NEXT: sb a0, 12(a2) 3959; RV64I-NEXT: sb t1, 13(a2) 3960; RV64I-NEXT: sb a7, 14(a2) 3961; RV64I-NEXT: sb a6, 15(a2) 3962; RV64I-NEXT: srli a0, a5, 24 3963; RV64I-NEXT: srli a3, a5, 16 3964; RV64I-NEXT: srli a6, a5, 8 3965; RV64I-NEXT: srli a7, a1, 24 3966; RV64I-NEXT: srli t0, a1, 16 3967; RV64I-NEXT: srli t1, a1, 8 3968; RV64I-NEXT: srli t2, a4, 24 3969; RV64I-NEXT: srli t3, a4, 16 3970; RV64I-NEXT: srli t4, a4, 8 3971; RV64I-NEXT: sb a5, 16(a2) 3972; RV64I-NEXT: sb a6, 17(a2) 3973; RV64I-NEXT: sb a3, 18(a2) 3974; RV64I-NEXT: sb a0, 19(a2) 3975; RV64I-NEXT: sb a1, 24(a2) 3976; RV64I-NEXT: sb t1, 25(a2) 3977; RV64I-NEXT: sb t0, 26(a2) 3978; RV64I-NEXT: sb a7, 27(a2) 3979; RV64I-NEXT: sb a4, 8(a2) 3980; RV64I-NEXT: sb t4, 9(a2) 3981; RV64I-NEXT: sb t3, 10(a2) 3982; RV64I-NEXT: sb t2, 11(a2) 3983; RV64I-NEXT: ld s0, 152(sp) # 8-byte Folded Reload 3984; RV64I-NEXT: ld s1, 144(sp) # 8-byte Folded Reload 3985; RV64I-NEXT: ld s2, 136(sp) # 8-byte Folded Reload 3986; RV64I-NEXT: ld s3, 128(sp) # 8-byte Folded Reload 3987; RV64I-NEXT: ld s4, 120(sp) # 8-byte Folded Reload 3988; RV64I-NEXT: ld s5, 112(sp) # 8-byte Folded Reload 3989; RV64I-NEXT: ld s6, 104(sp) # 8-byte Folded Reload 3990; RV64I-NEXT: ld s7, 96(sp) # 8-byte Folded Reload 3991; RV64I-NEXT: ld s8, 88(sp) # 8-byte Folded Reload 3992; RV64I-NEXT: ld s9, 80(sp) # 8-byte Folded Reload 3993; RV64I-NEXT: ld s10, 72(sp) # 8-byte Folded Reload 3994; RV64I-NEXT: ld s11, 64(sp) # 8-byte Folded Reload 3995; RV64I-NEXT: addi sp, sp, 160 3996; RV64I-NEXT: ret 3997; 3998; RV32I-LABEL: shl_32bytes_wordOff: 3999; RV32I: # %bb.0: 4000; RV32I-NEXT: addi sp, sp, -128 4001; RV32I-NEXT: sw ra, 124(sp) # 4-byte Folded Spill 4002; RV32I-NEXT: sw s0, 120(sp) # 4-byte Folded Spill 4003; RV32I-NEXT: sw s1, 116(sp) # 4-byte Folded Spill 4004; RV32I-NEXT: sw s2, 112(sp) # 4-byte Folded Spill 4005; RV32I-NEXT: sw s3, 108(sp) # 4-byte Folded Spill 4006; RV32I-NEXT: sw s4, 104(sp) # 4-byte Folded Spill 4007; RV32I-NEXT: sw s5, 100(sp) # 4-byte Folded Spill 4008; RV32I-NEXT: sw s6, 96(sp) # 4-byte Folded Spill 4009; RV32I-NEXT: sw s7, 92(sp) # 4-byte Folded Spill 4010; RV32I-NEXT: sw s8, 88(sp) # 4-byte Folded Spill 4011; RV32I-NEXT: sw s9, 84(sp) # 4-byte Folded Spill 4012; RV32I-NEXT: sw s10, 80(sp) # 4-byte Folded Spill 4013; RV32I-NEXT: sw s11, 76(sp) # 4-byte Folded Spill 4014; RV32I-NEXT: lbu a7, 0(a0) 4015; RV32I-NEXT: lbu t0, 1(a0) 4016; RV32I-NEXT: lbu t1, 2(a0) 4017; RV32I-NEXT: lbu s1, 3(a0) 4018; RV32I-NEXT: lbu s7, 4(a0) 4019; RV32I-NEXT: lbu s8, 5(a0) 4020; RV32I-NEXT: lbu s4, 6(a0) 4021; RV32I-NEXT: lbu s6, 7(a0) 4022; RV32I-NEXT: lbu s5, 8(a0) 4023; RV32I-NEXT: lbu s10, 9(a0) 4024; RV32I-NEXT: lbu s11, 10(a0) 4025; RV32I-NEXT: lbu ra, 11(a0) 4026; RV32I-NEXT: lbu t4, 12(a0) 4027; RV32I-NEXT: lbu t6, 13(a0) 4028; RV32I-NEXT: lbu a5, 14(a0) 4029; RV32I-NEXT: lbu a6, 15(a0) 4030; RV32I-NEXT: lbu a3, 16(a0) 4031; RV32I-NEXT: lbu t2, 17(a0) 4032; RV32I-NEXT: lbu t3, 18(a0) 4033; RV32I-NEXT: lbu t5, 19(a0) 4034; RV32I-NEXT: lbu a4, 20(a0) 4035; RV32I-NEXT: lbu s0, 21(a0) 4036; RV32I-NEXT: lbu s2, 22(a0) 4037; RV32I-NEXT: lbu s3, 23(a0) 4038; RV32I-NEXT: slli t0, t0, 8 4039; RV32I-NEXT: slli t1, t1, 16 4040; RV32I-NEXT: slli s1, s1, 24 4041; RV32I-NEXT: slli s8, s8, 8 4042; RV32I-NEXT: or a7, t0, a7 4043; RV32I-NEXT: or t0, s1, t1 4044; RV32I-NEXT: or t1, s8, s7 4045; RV32I-NEXT: lbu s1, 24(a0) 4046; RV32I-NEXT: lbu s7, 25(a0) 4047; RV32I-NEXT: lbu s8, 26(a0) 4048; RV32I-NEXT: lbu s9, 27(a0) 4049; RV32I-NEXT: slli s4, s4, 16 4050; RV32I-NEXT: slli s6, s6, 24 4051; RV32I-NEXT: slli s10, s10, 8 4052; RV32I-NEXT: slli s11, s11, 16 4053; RV32I-NEXT: slli ra, ra, 24 4054; RV32I-NEXT: or s4, s6, s4 4055; RV32I-NEXT: or s5, s10, s5 4056; RV32I-NEXT: or s6, ra, s11 4057; RV32I-NEXT: lbu s10, 28(a0) 4058; RV32I-NEXT: lbu s11, 29(a0) 4059; RV32I-NEXT: lbu ra, 30(a0) 4060; RV32I-NEXT: lbu a0, 31(a0) 4061; RV32I-NEXT: lbu a1, 0(a1) 4062; RV32I-NEXT: sw zero, 24(sp) 4063; RV32I-NEXT: sw zero, 28(sp) 4064; RV32I-NEXT: sw zero, 32(sp) 4065; RV32I-NEXT: sw zero, 36(sp) 4066; RV32I-NEXT: sw zero, 8(sp) 4067; RV32I-NEXT: sw zero, 12(sp) 4068; RV32I-NEXT: sw zero, 16(sp) 4069; RV32I-NEXT: sw zero, 20(sp) 4070; RV32I-NEXT: slli t6, t6, 8 4071; RV32I-NEXT: or t4, t6, t4 4072; RV32I-NEXT: addi t6, sp, 40 4073; RV32I-NEXT: slli a5, a5, 16 4074; RV32I-NEXT: slli a6, a6, 24 4075; RV32I-NEXT: slli t2, t2, 8 4076; RV32I-NEXT: slli t3, t3, 16 4077; RV32I-NEXT: slli t5, t5, 24 4078; RV32I-NEXT: slli s0, s0, 8 4079; RV32I-NEXT: slli s2, s2, 16 4080; RV32I-NEXT: slli s3, s3, 24 4081; RV32I-NEXT: slli s7, s7, 8 4082; RV32I-NEXT: slli s8, s8, 16 4083; RV32I-NEXT: slli s9, s9, 24 4084; RV32I-NEXT: slli s11, s11, 8 4085; RV32I-NEXT: slli ra, ra, 16 4086; RV32I-NEXT: slli a0, a0, 24 4087; RV32I-NEXT: slli a1, a1, 2 4088; RV32I-NEXT: or a5, a6, a5 4089; RV32I-NEXT: or a3, t2, a3 4090; RV32I-NEXT: or a6, t5, t3 4091; RV32I-NEXT: or a4, s0, a4 4092; RV32I-NEXT: or t2, s3, s2 4093; RV32I-NEXT: or t3, s7, s1 4094; RV32I-NEXT: or t5, s9, s8 4095; RV32I-NEXT: or s0, s11, s10 4096; RV32I-NEXT: or a0, a0, ra 4097; RV32I-NEXT: andi a1, a1, 28 4098; RV32I-NEXT: or a7, t0, a7 4099; RV32I-NEXT: or t0, s4, t1 4100; RV32I-NEXT: or t1, s6, s5 4101; RV32I-NEXT: or a5, a5, t4 4102; RV32I-NEXT: or a3, a6, a3 4103; RV32I-NEXT: or a4, t2, a4 4104; RV32I-NEXT: or a6, t5, t3 4105; RV32I-NEXT: or a0, a0, s0 4106; RV32I-NEXT: sub t2, t6, a1 4107; RV32I-NEXT: sw a3, 56(sp) 4108; RV32I-NEXT: sw a4, 60(sp) 4109; RV32I-NEXT: sw a6, 64(sp) 4110; RV32I-NEXT: sw a0, 68(sp) 4111; RV32I-NEXT: sw a7, 40(sp) 4112; RV32I-NEXT: sw t0, 44(sp) 4113; RV32I-NEXT: sw t1, 48(sp) 4114; RV32I-NEXT: sw a5, 52(sp) 4115; RV32I-NEXT: lw a6, 16(t2) 4116; RV32I-NEXT: lw a5, 20(t2) 4117; RV32I-NEXT: lw a7, 24(t2) 4118; RV32I-NEXT: lw a1, 0(t2) 4119; RV32I-NEXT: lw a0, 4(t2) 4120; RV32I-NEXT: lw a4, 8(t2) 4121; RV32I-NEXT: lw a3, 12(t2) 4122; RV32I-NEXT: lw t0, 28(t2) 4123; RV32I-NEXT: srli t1, a7, 24 4124; RV32I-NEXT: srli t2, a7, 16 4125; RV32I-NEXT: srli t3, a7, 8 4126; RV32I-NEXT: srli t4, t0, 24 4127; RV32I-NEXT: srli t5, t0, 16 4128; RV32I-NEXT: srli t6, t0, 8 4129; RV32I-NEXT: srli s0, a6, 24 4130; RV32I-NEXT: srli s1, a6, 16 4131; RV32I-NEXT: srli s2, a6, 8 4132; RV32I-NEXT: srli s3, a5, 24 4133; RV32I-NEXT: srli s4, a5, 16 4134; RV32I-NEXT: srli s5, a5, 8 4135; RV32I-NEXT: srli s6, a4, 24 4136; RV32I-NEXT: srli s7, a4, 16 4137; RV32I-NEXT: srli s8, a4, 8 4138; RV32I-NEXT: srli s9, a3, 24 4139; RV32I-NEXT: srli s10, a3, 16 4140; RV32I-NEXT: srli s11, a3, 8 4141; RV32I-NEXT: srli ra, a1, 24 4142; RV32I-NEXT: sb a7, 24(a2) 4143; RV32I-NEXT: sb t3, 25(a2) 4144; RV32I-NEXT: sb t2, 26(a2) 4145; RV32I-NEXT: sb t1, 27(a2) 4146; RV32I-NEXT: srli a7, a1, 16 4147; RV32I-NEXT: sb t0, 28(a2) 4148; RV32I-NEXT: sb t6, 29(a2) 4149; RV32I-NEXT: sb t5, 30(a2) 4150; RV32I-NEXT: sb t4, 31(a2) 4151; RV32I-NEXT: srli t0, a1, 8 4152; RV32I-NEXT: sb a6, 16(a2) 4153; RV32I-NEXT: sb s2, 17(a2) 4154; RV32I-NEXT: sb s1, 18(a2) 4155; RV32I-NEXT: sb s0, 19(a2) 4156; RV32I-NEXT: srli a6, a0, 24 4157; RV32I-NEXT: sb a5, 20(a2) 4158; RV32I-NEXT: sb s5, 21(a2) 4159; RV32I-NEXT: sb s4, 22(a2) 4160; RV32I-NEXT: sb s3, 23(a2) 4161; RV32I-NEXT: srli a5, a0, 16 4162; RV32I-NEXT: sb a4, 8(a2) 4163; RV32I-NEXT: sb s8, 9(a2) 4164; RV32I-NEXT: sb s7, 10(a2) 4165; RV32I-NEXT: sb s6, 11(a2) 4166; RV32I-NEXT: srli a4, a0, 8 4167; RV32I-NEXT: sb a3, 12(a2) 4168; RV32I-NEXT: sb s11, 13(a2) 4169; RV32I-NEXT: sb s10, 14(a2) 4170; RV32I-NEXT: sb s9, 15(a2) 4171; RV32I-NEXT: sb a1, 0(a2) 4172; RV32I-NEXT: sb t0, 1(a2) 4173; RV32I-NEXT: sb a7, 2(a2) 4174; RV32I-NEXT: sb ra, 3(a2) 4175; RV32I-NEXT: sb a0, 4(a2) 4176; RV32I-NEXT: sb a4, 5(a2) 4177; RV32I-NEXT: sb a5, 6(a2) 4178; RV32I-NEXT: sb a6, 7(a2) 4179; RV32I-NEXT: lw ra, 124(sp) # 4-byte Folded Reload 4180; RV32I-NEXT: lw s0, 120(sp) # 4-byte Folded Reload 4181; RV32I-NEXT: lw s1, 116(sp) # 4-byte Folded Reload 4182; RV32I-NEXT: lw s2, 112(sp) # 4-byte Folded Reload 4183; RV32I-NEXT: lw s3, 108(sp) # 4-byte Folded Reload 4184; RV32I-NEXT: lw s4, 104(sp) # 4-byte Folded Reload 4185; RV32I-NEXT: lw s5, 100(sp) # 4-byte Folded Reload 4186; RV32I-NEXT: lw s6, 96(sp) # 4-byte Folded Reload 4187; RV32I-NEXT: lw s7, 92(sp) # 4-byte Folded Reload 4188; RV32I-NEXT: lw s8, 88(sp) # 4-byte Folded Reload 4189; RV32I-NEXT: lw s9, 84(sp) # 4-byte Folded Reload 4190; RV32I-NEXT: lw s10, 80(sp) # 4-byte Folded Reload 4191; RV32I-NEXT: lw s11, 76(sp) # 4-byte Folded Reload 4192; RV32I-NEXT: addi sp, sp, 128 4193; RV32I-NEXT: ret 4194 %src = load i256, ptr %src.ptr, align 1 4195 %wordOff = load i256, ptr %wordOff.ptr, align 1 4196 %bitOff = shl i256 %wordOff, 5 4197 %res = shl i256 %src, %bitOff 4198 store i256 %res, ptr %dst, align 1 4199 ret void 4200} 4201 4202define void @shl_32bytes_dwordOff(ptr %src.ptr, ptr %dwordOff.ptr, ptr %dst) nounwind { 4203; RV64I-LABEL: shl_32bytes_dwordOff: 4204; RV64I: # %bb.0: 4205; RV64I-NEXT: addi sp, sp, -160 4206; RV64I-NEXT: sd s0, 152(sp) # 8-byte Folded Spill 4207; RV64I-NEXT: sd s1, 144(sp) # 8-byte Folded Spill 4208; RV64I-NEXT: sd s2, 136(sp) # 8-byte Folded Spill 4209; RV64I-NEXT: sd s3, 128(sp) # 8-byte Folded Spill 4210; RV64I-NEXT: sd s4, 120(sp) # 8-byte Folded Spill 4211; RV64I-NEXT: sd s5, 112(sp) # 8-byte Folded Spill 4212; RV64I-NEXT: sd s6, 104(sp) # 8-byte Folded Spill 4213; RV64I-NEXT: sd s7, 96(sp) # 8-byte Folded Spill 4214; RV64I-NEXT: sd s8, 88(sp) # 8-byte Folded Spill 4215; RV64I-NEXT: sd s9, 80(sp) # 8-byte Folded Spill 4216; RV64I-NEXT: sd s10, 72(sp) # 8-byte Folded Spill 4217; RV64I-NEXT: sd s11, 64(sp) # 8-byte Folded Spill 4218; RV64I-NEXT: lbu a5, 0(a0) 4219; RV64I-NEXT: lbu a7, 1(a0) 4220; RV64I-NEXT: lbu t2, 2(a0) 4221; RV64I-NEXT: lbu s3, 3(a0) 4222; RV64I-NEXT: lbu t0, 4(a0) 4223; RV64I-NEXT: lbu s8, 5(a0) 4224; RV64I-NEXT: lbu s9, 6(a0) 4225; RV64I-NEXT: lbu s10, 7(a0) 4226; RV64I-NEXT: lbu s2, 8(a0) 4227; RV64I-NEXT: lbu s4, 9(a0) 4228; RV64I-NEXT: lbu s5, 10(a0) 4229; RV64I-NEXT: lbu s6, 11(a0) 4230; RV64I-NEXT: lbu s7, 12(a0) 4231; RV64I-NEXT: lbu s11, 13(a0) 4232; RV64I-NEXT: lbu t1, 14(a0) 4233; RV64I-NEXT: lbu t3, 15(a0) 4234; RV64I-NEXT: lbu a3, 16(a0) 4235; RV64I-NEXT: lbu a6, 17(a0) 4236; RV64I-NEXT: lbu t4, 18(a0) 4237; RV64I-NEXT: lbu t5, 19(a0) 4238; RV64I-NEXT: lbu a4, 20(a0) 4239; RV64I-NEXT: lbu t6, 21(a0) 4240; RV64I-NEXT: lbu s0, 22(a0) 4241; RV64I-NEXT: lbu s1, 23(a0) 4242; RV64I-NEXT: slli a7, a7, 8 4243; RV64I-NEXT: slli t2, t2, 16 4244; RV64I-NEXT: slli s3, s3, 24 4245; RV64I-NEXT: slli s8, s8, 8 4246; RV64I-NEXT: slli s9, s9, 16 4247; RV64I-NEXT: slli s10, s10, 24 4248; RV64I-NEXT: or a5, a7, a5 4249; RV64I-NEXT: or a7, s3, t2 4250; RV64I-NEXT: or t0, s8, t0 4251; RV64I-NEXT: or t2, s10, s9 4252; RV64I-NEXT: lbu s3, 24(a0) 4253; RV64I-NEXT: lbu s8, 25(a0) 4254; RV64I-NEXT: lbu s9, 26(a0) 4255; RV64I-NEXT: lbu s10, 27(a0) 4256; RV64I-NEXT: slli s4, s4, 8 4257; RV64I-NEXT: slli s5, s5, 16 4258; RV64I-NEXT: slli s6, s6, 24 4259; RV64I-NEXT: slli s11, s11, 8 4260; RV64I-NEXT: or s2, s4, s2 4261; RV64I-NEXT: or s4, s6, s5 4262; RV64I-NEXT: or s5, s11, s7 4263; RV64I-NEXT: lbu s6, 28(a0) 4264; RV64I-NEXT: lbu s7, 29(a0) 4265; RV64I-NEXT: lbu s11, 30(a0) 4266; RV64I-NEXT: lbu a0, 31(a0) 4267; RV64I-NEXT: lbu a1, 0(a1) 4268; RV64I-NEXT: sd zero, 0(sp) 4269; RV64I-NEXT: sd zero, 8(sp) 4270; RV64I-NEXT: sd zero, 16(sp) 4271; RV64I-NEXT: sd zero, 24(sp) 4272; RV64I-NEXT: slli t1, t1, 16 4273; RV64I-NEXT: slli t3, t3, 24 4274; RV64I-NEXT: or t1, t3, t1 4275; RV64I-NEXT: addi t3, sp, 32 4276; RV64I-NEXT: slli a6, a6, 8 4277; RV64I-NEXT: slli t4, t4, 16 4278; RV64I-NEXT: slli t5, t5, 24 4279; RV64I-NEXT: slli t6, t6, 8 4280; RV64I-NEXT: slli s0, s0, 16 4281; RV64I-NEXT: slli s1, s1, 24 4282; RV64I-NEXT: slli s8, s8, 8 4283; RV64I-NEXT: slli s9, s9, 16 4284; RV64I-NEXT: slli s10, s10, 24 4285; RV64I-NEXT: slli s7, s7, 8 4286; RV64I-NEXT: slli s11, s11, 16 4287; RV64I-NEXT: slli a0, a0, 24 4288; RV64I-NEXT: slli a1, a1, 3 4289; RV64I-NEXT: or a3, a6, a3 4290; RV64I-NEXT: or a6, t5, t4 4291; RV64I-NEXT: or a4, t6, a4 4292; RV64I-NEXT: or s0, s1, s0 4293; RV64I-NEXT: or t4, s8, s3 4294; RV64I-NEXT: or t5, s10, s9 4295; RV64I-NEXT: or t6, s7, s6 4296; RV64I-NEXT: or a0, a0, s11 4297; RV64I-NEXT: andi a1, a1, 24 4298; RV64I-NEXT: or a5, a7, a5 4299; RV64I-NEXT: or a7, t2, t0 4300; RV64I-NEXT: or t0, s4, s2 4301; RV64I-NEXT: or t1, t1, s5 4302; RV64I-NEXT: or a3, a6, a3 4303; RV64I-NEXT: or a4, s0, a4 4304; RV64I-NEXT: or a6, t5, t4 4305; RV64I-NEXT: or a0, a0, t6 4306; RV64I-NEXT: sub t2, t3, a1 4307; RV64I-NEXT: slli a7, a7, 32 4308; RV64I-NEXT: slli t1, t1, 32 4309; RV64I-NEXT: slli a4, a4, 32 4310; RV64I-NEXT: slli a0, a0, 32 4311; RV64I-NEXT: or a1, a7, a5 4312; RV64I-NEXT: or a5, t1, t0 4313; RV64I-NEXT: or a3, a4, a3 4314; RV64I-NEXT: or a0, a0, a6 4315; RV64I-NEXT: sd a1, 32(sp) 4316; RV64I-NEXT: sd a5, 40(sp) 4317; RV64I-NEXT: sd a3, 48(sp) 4318; RV64I-NEXT: sd a0, 56(sp) 4319; RV64I-NEXT: ld a4, 16(t2) 4320; RV64I-NEXT: ld a0, 8(t2) 4321; RV64I-NEXT: ld a1, 0(t2) 4322; RV64I-NEXT: ld a3, 24(t2) 4323; RV64I-NEXT: srli a5, a4, 56 4324; RV64I-NEXT: srli a6, a4, 48 4325; RV64I-NEXT: srli a7, a4, 40 4326; RV64I-NEXT: srli t0, a4, 32 4327; RV64I-NEXT: srli t1, a4, 24 4328; RV64I-NEXT: srli t2, a4, 16 4329; RV64I-NEXT: srli t3, a4, 8 4330; RV64I-NEXT: srli t4, a3, 56 4331; RV64I-NEXT: srli t5, a3, 48 4332; RV64I-NEXT: srli t6, a3, 40 4333; RV64I-NEXT: srli s0, a3, 32 4334; RV64I-NEXT: srli s1, a3, 24 4335; RV64I-NEXT: srli s2, a3, 16 4336; RV64I-NEXT: srli s3, a3, 8 4337; RV64I-NEXT: srli s4, a1, 56 4338; RV64I-NEXT: srli s5, a1, 48 4339; RV64I-NEXT: srli s6, a1, 40 4340; RV64I-NEXT: srli s7, a1, 32 4341; RV64I-NEXT: srli s8, a1, 24 4342; RV64I-NEXT: srli s9, a1, 16 4343; RV64I-NEXT: srli s10, a1, 8 4344; RV64I-NEXT: srli s11, a0, 56 4345; RV64I-NEXT: sb t0, 20(a2) 4346; RV64I-NEXT: sb a7, 21(a2) 4347; RV64I-NEXT: sb a6, 22(a2) 4348; RV64I-NEXT: sb a5, 23(a2) 4349; RV64I-NEXT: srli a5, a0, 48 4350; RV64I-NEXT: sb a4, 16(a2) 4351; RV64I-NEXT: sb t3, 17(a2) 4352; RV64I-NEXT: sb t2, 18(a2) 4353; RV64I-NEXT: sb t1, 19(a2) 4354; RV64I-NEXT: srli a4, a0, 40 4355; RV64I-NEXT: sb s0, 28(a2) 4356; RV64I-NEXT: sb t6, 29(a2) 4357; RV64I-NEXT: sb t5, 30(a2) 4358; RV64I-NEXT: sb t4, 31(a2) 4359; RV64I-NEXT: srli a6, a0, 32 4360; RV64I-NEXT: sb a3, 24(a2) 4361; RV64I-NEXT: sb s3, 25(a2) 4362; RV64I-NEXT: sb s2, 26(a2) 4363; RV64I-NEXT: sb s1, 27(a2) 4364; RV64I-NEXT: srli a3, a0, 24 4365; RV64I-NEXT: sb s7, 4(a2) 4366; RV64I-NEXT: sb s6, 5(a2) 4367; RV64I-NEXT: sb s5, 6(a2) 4368; RV64I-NEXT: sb s4, 7(a2) 4369; RV64I-NEXT: srli a7, a0, 16 4370; RV64I-NEXT: sb a1, 0(a2) 4371; RV64I-NEXT: sb s10, 1(a2) 4372; RV64I-NEXT: sb s9, 2(a2) 4373; RV64I-NEXT: sb s8, 3(a2) 4374; RV64I-NEXT: srli a1, a0, 8 4375; RV64I-NEXT: sb a6, 12(a2) 4376; RV64I-NEXT: sb a4, 13(a2) 4377; RV64I-NEXT: sb a5, 14(a2) 4378; RV64I-NEXT: sb s11, 15(a2) 4379; RV64I-NEXT: sb a0, 8(a2) 4380; RV64I-NEXT: sb a1, 9(a2) 4381; RV64I-NEXT: sb a7, 10(a2) 4382; RV64I-NEXT: sb a3, 11(a2) 4383; RV64I-NEXT: ld s0, 152(sp) # 8-byte Folded Reload 4384; RV64I-NEXT: ld s1, 144(sp) # 8-byte Folded Reload 4385; RV64I-NEXT: ld s2, 136(sp) # 8-byte Folded Reload 4386; RV64I-NEXT: ld s3, 128(sp) # 8-byte Folded Reload 4387; RV64I-NEXT: ld s4, 120(sp) # 8-byte Folded Reload 4388; RV64I-NEXT: ld s5, 112(sp) # 8-byte Folded Reload 4389; RV64I-NEXT: ld s6, 104(sp) # 8-byte Folded Reload 4390; RV64I-NEXT: ld s7, 96(sp) # 8-byte Folded Reload 4391; RV64I-NEXT: ld s8, 88(sp) # 8-byte Folded Reload 4392; RV64I-NEXT: ld s9, 80(sp) # 8-byte Folded Reload 4393; RV64I-NEXT: ld s10, 72(sp) # 8-byte Folded Reload 4394; RV64I-NEXT: ld s11, 64(sp) # 8-byte Folded Reload 4395; RV64I-NEXT: addi sp, sp, 160 4396; RV64I-NEXT: ret 4397; 4398; RV32I-LABEL: shl_32bytes_dwordOff: 4399; RV32I: # %bb.0: 4400; RV32I-NEXT: addi sp, sp, -128 4401; RV32I-NEXT: sw ra, 124(sp) # 4-byte Folded Spill 4402; RV32I-NEXT: sw s0, 120(sp) # 4-byte Folded Spill 4403; RV32I-NEXT: sw s1, 116(sp) # 4-byte Folded Spill 4404; RV32I-NEXT: sw s2, 112(sp) # 4-byte Folded Spill 4405; RV32I-NEXT: sw s3, 108(sp) # 4-byte Folded Spill 4406; RV32I-NEXT: sw s4, 104(sp) # 4-byte Folded Spill 4407; RV32I-NEXT: sw s5, 100(sp) # 4-byte Folded Spill 4408; RV32I-NEXT: sw s6, 96(sp) # 4-byte Folded Spill 4409; RV32I-NEXT: sw s7, 92(sp) # 4-byte Folded Spill 4410; RV32I-NEXT: sw s8, 88(sp) # 4-byte Folded Spill 4411; RV32I-NEXT: sw s9, 84(sp) # 4-byte Folded Spill 4412; RV32I-NEXT: sw s10, 80(sp) # 4-byte Folded Spill 4413; RV32I-NEXT: sw s11, 76(sp) # 4-byte Folded Spill 4414; RV32I-NEXT: lbu a7, 0(a0) 4415; RV32I-NEXT: lbu t0, 1(a0) 4416; RV32I-NEXT: lbu t1, 2(a0) 4417; RV32I-NEXT: lbu s1, 3(a0) 4418; RV32I-NEXT: lbu s7, 4(a0) 4419; RV32I-NEXT: lbu s8, 5(a0) 4420; RV32I-NEXT: lbu s4, 6(a0) 4421; RV32I-NEXT: lbu s6, 7(a0) 4422; RV32I-NEXT: lbu s5, 8(a0) 4423; RV32I-NEXT: lbu s10, 9(a0) 4424; RV32I-NEXT: lbu s11, 10(a0) 4425; RV32I-NEXT: lbu ra, 11(a0) 4426; RV32I-NEXT: lbu t4, 12(a0) 4427; RV32I-NEXT: lbu t6, 13(a0) 4428; RV32I-NEXT: lbu a5, 14(a0) 4429; RV32I-NEXT: lbu a6, 15(a0) 4430; RV32I-NEXT: lbu a3, 16(a0) 4431; RV32I-NEXT: lbu t2, 17(a0) 4432; RV32I-NEXT: lbu t3, 18(a0) 4433; RV32I-NEXT: lbu t5, 19(a0) 4434; RV32I-NEXT: lbu a4, 20(a0) 4435; RV32I-NEXT: lbu s0, 21(a0) 4436; RV32I-NEXT: lbu s2, 22(a0) 4437; RV32I-NEXT: lbu s3, 23(a0) 4438; RV32I-NEXT: slli t0, t0, 8 4439; RV32I-NEXT: slli t1, t1, 16 4440; RV32I-NEXT: slli s1, s1, 24 4441; RV32I-NEXT: slli s8, s8, 8 4442; RV32I-NEXT: or a7, t0, a7 4443; RV32I-NEXT: or t0, s1, t1 4444; RV32I-NEXT: or t1, s8, s7 4445; RV32I-NEXT: lbu s1, 24(a0) 4446; RV32I-NEXT: lbu s7, 25(a0) 4447; RV32I-NEXT: lbu s8, 26(a0) 4448; RV32I-NEXT: lbu s9, 27(a0) 4449; RV32I-NEXT: slli s4, s4, 16 4450; RV32I-NEXT: slli s6, s6, 24 4451; RV32I-NEXT: slli s10, s10, 8 4452; RV32I-NEXT: slli s11, s11, 16 4453; RV32I-NEXT: slli ra, ra, 24 4454; RV32I-NEXT: or s4, s6, s4 4455; RV32I-NEXT: or s5, s10, s5 4456; RV32I-NEXT: or s6, ra, s11 4457; RV32I-NEXT: lbu s10, 28(a0) 4458; RV32I-NEXT: lbu s11, 29(a0) 4459; RV32I-NEXT: lbu ra, 30(a0) 4460; RV32I-NEXT: lbu a0, 31(a0) 4461; RV32I-NEXT: lbu a1, 0(a1) 4462; RV32I-NEXT: sw zero, 24(sp) 4463; RV32I-NEXT: sw zero, 28(sp) 4464; RV32I-NEXT: sw zero, 32(sp) 4465; RV32I-NEXT: sw zero, 36(sp) 4466; RV32I-NEXT: sw zero, 8(sp) 4467; RV32I-NEXT: sw zero, 12(sp) 4468; RV32I-NEXT: sw zero, 16(sp) 4469; RV32I-NEXT: sw zero, 20(sp) 4470; RV32I-NEXT: slli t6, t6, 8 4471; RV32I-NEXT: or t4, t6, t4 4472; RV32I-NEXT: addi t6, sp, 40 4473; RV32I-NEXT: slli a5, a5, 16 4474; RV32I-NEXT: slli a6, a6, 24 4475; RV32I-NEXT: slli t2, t2, 8 4476; RV32I-NEXT: slli t3, t3, 16 4477; RV32I-NEXT: slli t5, t5, 24 4478; RV32I-NEXT: slli s0, s0, 8 4479; RV32I-NEXT: slli s2, s2, 16 4480; RV32I-NEXT: slli s3, s3, 24 4481; RV32I-NEXT: slli s7, s7, 8 4482; RV32I-NEXT: slli s8, s8, 16 4483; RV32I-NEXT: slli s9, s9, 24 4484; RV32I-NEXT: slli s11, s11, 8 4485; RV32I-NEXT: slli ra, ra, 16 4486; RV32I-NEXT: slli a0, a0, 24 4487; RV32I-NEXT: slli a1, a1, 3 4488; RV32I-NEXT: or a5, a6, a5 4489; RV32I-NEXT: or a3, t2, a3 4490; RV32I-NEXT: or a6, t5, t3 4491; RV32I-NEXT: or a4, s0, a4 4492; RV32I-NEXT: or t2, s3, s2 4493; RV32I-NEXT: or t3, s7, s1 4494; RV32I-NEXT: or t5, s9, s8 4495; RV32I-NEXT: or s0, s11, s10 4496; RV32I-NEXT: or a0, a0, ra 4497; RV32I-NEXT: andi a1, a1, 24 4498; RV32I-NEXT: or a7, t0, a7 4499; RV32I-NEXT: or t0, s4, t1 4500; RV32I-NEXT: or t1, s6, s5 4501; RV32I-NEXT: or a5, a5, t4 4502; RV32I-NEXT: or a3, a6, a3 4503; RV32I-NEXT: or a4, t2, a4 4504; RV32I-NEXT: or a6, t5, t3 4505; RV32I-NEXT: or a0, a0, s0 4506; RV32I-NEXT: sub t2, t6, a1 4507; RV32I-NEXT: sw a3, 56(sp) 4508; RV32I-NEXT: sw a4, 60(sp) 4509; RV32I-NEXT: sw a6, 64(sp) 4510; RV32I-NEXT: sw a0, 68(sp) 4511; RV32I-NEXT: sw a7, 40(sp) 4512; RV32I-NEXT: sw t0, 44(sp) 4513; RV32I-NEXT: sw t1, 48(sp) 4514; RV32I-NEXT: sw a5, 52(sp) 4515; RV32I-NEXT: lw a6, 16(t2) 4516; RV32I-NEXT: lw a5, 20(t2) 4517; RV32I-NEXT: lw a7, 24(t2) 4518; RV32I-NEXT: lw a1, 0(t2) 4519; RV32I-NEXT: lw a0, 4(t2) 4520; RV32I-NEXT: lw a4, 8(t2) 4521; RV32I-NEXT: lw a3, 12(t2) 4522; RV32I-NEXT: lw t0, 28(t2) 4523; RV32I-NEXT: srli t1, a7, 24 4524; RV32I-NEXT: srli t2, a7, 16 4525; RV32I-NEXT: srli t3, a7, 8 4526; RV32I-NEXT: srli t4, t0, 24 4527; RV32I-NEXT: srli t5, t0, 16 4528; RV32I-NEXT: srli t6, t0, 8 4529; RV32I-NEXT: srli s0, a6, 24 4530; RV32I-NEXT: srli s1, a6, 16 4531; RV32I-NEXT: srli s2, a6, 8 4532; RV32I-NEXT: srli s3, a5, 24 4533; RV32I-NEXT: srli s4, a5, 16 4534; RV32I-NEXT: srli s5, a5, 8 4535; RV32I-NEXT: srli s6, a4, 24 4536; RV32I-NEXT: srli s7, a4, 16 4537; RV32I-NEXT: srli s8, a4, 8 4538; RV32I-NEXT: srli s9, a3, 24 4539; RV32I-NEXT: srli s10, a3, 16 4540; RV32I-NEXT: srli s11, a3, 8 4541; RV32I-NEXT: srli ra, a1, 24 4542; RV32I-NEXT: sb a7, 24(a2) 4543; RV32I-NEXT: sb t3, 25(a2) 4544; RV32I-NEXT: sb t2, 26(a2) 4545; RV32I-NEXT: sb t1, 27(a2) 4546; RV32I-NEXT: srli a7, a1, 16 4547; RV32I-NEXT: sb t0, 28(a2) 4548; RV32I-NEXT: sb t6, 29(a2) 4549; RV32I-NEXT: sb t5, 30(a2) 4550; RV32I-NEXT: sb t4, 31(a2) 4551; RV32I-NEXT: srli t0, a1, 8 4552; RV32I-NEXT: sb a6, 16(a2) 4553; RV32I-NEXT: sb s2, 17(a2) 4554; RV32I-NEXT: sb s1, 18(a2) 4555; RV32I-NEXT: sb s0, 19(a2) 4556; RV32I-NEXT: srli a6, a0, 24 4557; RV32I-NEXT: sb a5, 20(a2) 4558; RV32I-NEXT: sb s5, 21(a2) 4559; RV32I-NEXT: sb s4, 22(a2) 4560; RV32I-NEXT: sb s3, 23(a2) 4561; RV32I-NEXT: srli a5, a0, 16 4562; RV32I-NEXT: sb a4, 8(a2) 4563; RV32I-NEXT: sb s8, 9(a2) 4564; RV32I-NEXT: sb s7, 10(a2) 4565; RV32I-NEXT: sb s6, 11(a2) 4566; RV32I-NEXT: srli a4, a0, 8 4567; RV32I-NEXT: sb a3, 12(a2) 4568; RV32I-NEXT: sb s11, 13(a2) 4569; RV32I-NEXT: sb s10, 14(a2) 4570; RV32I-NEXT: sb s9, 15(a2) 4571; RV32I-NEXT: sb a1, 0(a2) 4572; RV32I-NEXT: sb t0, 1(a2) 4573; RV32I-NEXT: sb a7, 2(a2) 4574; RV32I-NEXT: sb ra, 3(a2) 4575; RV32I-NEXT: sb a0, 4(a2) 4576; RV32I-NEXT: sb a4, 5(a2) 4577; RV32I-NEXT: sb a5, 6(a2) 4578; RV32I-NEXT: sb a6, 7(a2) 4579; RV32I-NEXT: lw ra, 124(sp) # 4-byte Folded Reload 4580; RV32I-NEXT: lw s0, 120(sp) # 4-byte Folded Reload 4581; RV32I-NEXT: lw s1, 116(sp) # 4-byte Folded Reload 4582; RV32I-NEXT: lw s2, 112(sp) # 4-byte Folded Reload 4583; RV32I-NEXT: lw s3, 108(sp) # 4-byte Folded Reload 4584; RV32I-NEXT: lw s4, 104(sp) # 4-byte Folded Reload 4585; RV32I-NEXT: lw s5, 100(sp) # 4-byte Folded Reload 4586; RV32I-NEXT: lw s6, 96(sp) # 4-byte Folded Reload 4587; RV32I-NEXT: lw s7, 92(sp) # 4-byte Folded Reload 4588; RV32I-NEXT: lw s8, 88(sp) # 4-byte Folded Reload 4589; RV32I-NEXT: lw s9, 84(sp) # 4-byte Folded Reload 4590; RV32I-NEXT: lw s10, 80(sp) # 4-byte Folded Reload 4591; RV32I-NEXT: lw s11, 76(sp) # 4-byte Folded Reload 4592; RV32I-NEXT: addi sp, sp, 128 4593; RV32I-NEXT: ret 4594 %src = load i256, ptr %src.ptr, align 1 4595 %dwordOff = load i256, ptr %dwordOff.ptr, align 1 4596 %bitOff = shl i256 %dwordOff, 6 4597 %res = shl i256 %src, %bitOff 4598 store i256 %res, ptr %dst, align 1 4599 ret void 4600} 4601 4602define void @ashr_32bytes(ptr %src.ptr, ptr %byteOff.ptr, ptr %dst) nounwind { 4603; RV64I-LABEL: ashr_32bytes: 4604; RV64I: # %bb.0: 4605; RV64I-NEXT: addi sp, sp, -160 4606; RV64I-NEXT: sd s0, 152(sp) # 8-byte Folded Spill 4607; RV64I-NEXT: sd s1, 144(sp) # 8-byte Folded Spill 4608; RV64I-NEXT: sd s2, 136(sp) # 8-byte Folded Spill 4609; RV64I-NEXT: sd s3, 128(sp) # 8-byte Folded Spill 4610; RV64I-NEXT: sd s4, 120(sp) # 8-byte Folded Spill 4611; RV64I-NEXT: sd s5, 112(sp) # 8-byte Folded Spill 4612; RV64I-NEXT: sd s6, 104(sp) # 8-byte Folded Spill 4613; RV64I-NEXT: sd s7, 96(sp) # 8-byte Folded Spill 4614; RV64I-NEXT: sd s8, 88(sp) # 8-byte Folded Spill 4615; RV64I-NEXT: sd s9, 80(sp) # 8-byte Folded Spill 4616; RV64I-NEXT: sd s10, 72(sp) # 8-byte Folded Spill 4617; RV64I-NEXT: sd s11, 64(sp) # 8-byte Folded Spill 4618; RV64I-NEXT: lbu a3, 0(a0) 4619; RV64I-NEXT: lbu a4, 1(a0) 4620; RV64I-NEXT: lbu a5, 2(a0) 4621; RV64I-NEXT: lbu a6, 3(a0) 4622; RV64I-NEXT: lbu a7, 4(a0) 4623; RV64I-NEXT: lbu t0, 5(a0) 4624; RV64I-NEXT: lbu t1, 6(a0) 4625; RV64I-NEXT: lbu t2, 7(a0) 4626; RV64I-NEXT: lbu t3, 8(a0) 4627; RV64I-NEXT: lbu t4, 9(a0) 4628; RV64I-NEXT: lbu t5, 10(a0) 4629; RV64I-NEXT: lbu t6, 11(a0) 4630; RV64I-NEXT: lbu s0, 12(a0) 4631; RV64I-NEXT: lbu s1, 13(a0) 4632; RV64I-NEXT: lbu s2, 14(a0) 4633; RV64I-NEXT: lbu s3, 15(a0) 4634; RV64I-NEXT: lbu s4, 16(a0) 4635; RV64I-NEXT: lbu s5, 17(a0) 4636; RV64I-NEXT: lbu s6, 18(a0) 4637; RV64I-NEXT: lbu s7, 19(a0) 4638; RV64I-NEXT: slli a4, a4, 8 4639; RV64I-NEXT: slli a5, a5, 16 4640; RV64I-NEXT: slli a6, a6, 24 4641; RV64I-NEXT: slli t0, t0, 8 4642; RV64I-NEXT: slli t1, t1, 16 4643; RV64I-NEXT: slli t2, t2, 24 4644; RV64I-NEXT: or a3, a4, a3 4645; RV64I-NEXT: or a4, a6, a5 4646; RV64I-NEXT: or a5, t0, a7 4647; RV64I-NEXT: or a6, t2, t1 4648; RV64I-NEXT: lbu s8, 20(a0) 4649; RV64I-NEXT: lbu s9, 21(a0) 4650; RV64I-NEXT: lbu s10, 22(a0) 4651; RV64I-NEXT: lbu s11, 23(a0) 4652; RV64I-NEXT: slli t4, t4, 8 4653; RV64I-NEXT: slli t5, t5, 16 4654; RV64I-NEXT: slli t6, t6, 24 4655; RV64I-NEXT: slli s1, s1, 8 4656; RV64I-NEXT: slli s2, s2, 16 4657; RV64I-NEXT: slli s3, s3, 24 4658; RV64I-NEXT: or a7, t4, t3 4659; RV64I-NEXT: or t0, t6, t5 4660; RV64I-NEXT: or t1, s1, s0 4661; RV64I-NEXT: or t2, s3, s2 4662; RV64I-NEXT: lbu t6, 24(a0) 4663; RV64I-NEXT: lbu s0, 25(a0) 4664; RV64I-NEXT: lbu s1, 26(a0) 4665; RV64I-NEXT: lbu s2, 27(a0) 4666; RV64I-NEXT: slli s5, s5, 8 4667; RV64I-NEXT: slli s6, s6, 16 4668; RV64I-NEXT: slli s7, s7, 24 4669; RV64I-NEXT: slli s9, s9, 8 4670; RV64I-NEXT: or t3, s5, s4 4671; RV64I-NEXT: or t4, s7, s6 4672; RV64I-NEXT: or t5, s9, s8 4673; RV64I-NEXT: lbu s3, 28(a0) 4674; RV64I-NEXT: lbu s4, 29(a0) 4675; RV64I-NEXT: lbu s5, 30(a0) 4676; RV64I-NEXT: lbu s6, 31(a0) 4677; RV64I-NEXT: slli s10, s10, 16 4678; RV64I-NEXT: slli s11, s11, 24 4679; RV64I-NEXT: slli s0, s0, 8 4680; RV64I-NEXT: slli s1, s1, 16 4681; RV64I-NEXT: slli s2, s2, 24 4682; RV64I-NEXT: slli s4, s4, 8 4683; RV64I-NEXT: or a0, s11, s10 4684; RV64I-NEXT: or t6, s0, t6 4685; RV64I-NEXT: or s0, s2, s1 4686; RV64I-NEXT: or s1, s4, s3 4687; RV64I-NEXT: lbu s2, 0(a1) 4688; RV64I-NEXT: lbu s3, 1(a1) 4689; RV64I-NEXT: lbu s4, 2(a1) 4690; RV64I-NEXT: lbu s7, 3(a1) 4691; RV64I-NEXT: slli s5, s5, 16 4692; RV64I-NEXT: slli s6, s6, 24 4693; RV64I-NEXT: slli s3, s3, 8 4694; RV64I-NEXT: slli s4, s4, 16 4695; RV64I-NEXT: slli s7, s7, 24 4696; RV64I-NEXT: or s5, s6, s5 4697; RV64I-NEXT: or s2, s3, s2 4698; RV64I-NEXT: lbu s3, 4(a1) 4699; RV64I-NEXT: lbu s6, 5(a1) 4700; RV64I-NEXT: or s4, s7, s4 4701; RV64I-NEXT: lbu s7, 6(a1) 4702; RV64I-NEXT: lbu a1, 7(a1) 4703; RV64I-NEXT: slli s6, s6, 8 4704; RV64I-NEXT: or s3, s6, s3 4705; RV64I-NEXT: slli s7, s7, 16 4706; RV64I-NEXT: slli a1, a1, 24 4707; RV64I-NEXT: or a1, a1, s7 4708; RV64I-NEXT: mv s6, sp 4709; RV64I-NEXT: or a3, a4, a3 4710; RV64I-NEXT: or a4, a6, a5 4711; RV64I-NEXT: or a5, t0, a7 4712; RV64I-NEXT: or a6, t2, t1 4713; RV64I-NEXT: or a7, t4, t3 4714; RV64I-NEXT: or a0, a0, t5 4715; RV64I-NEXT: or t0, s0, t6 4716; RV64I-NEXT: or t1, s5, s1 4717; RV64I-NEXT: or t2, s4, s2 4718; RV64I-NEXT: or a1, a1, s3 4719; RV64I-NEXT: slli a4, a4, 32 4720; RV64I-NEXT: slli a6, a6, 32 4721; RV64I-NEXT: slli a0, a0, 32 4722; RV64I-NEXT: slli t3, t1, 32 4723; RV64I-NEXT: slli a1, a1, 32 4724; RV64I-NEXT: sraiw t1, t1, 31 4725; RV64I-NEXT: or a3, a4, a3 4726; RV64I-NEXT: or a4, a6, a5 4727; RV64I-NEXT: or a0, a0, a7 4728; RV64I-NEXT: or a5, t3, t0 4729; RV64I-NEXT: or a1, a1, t2 4730; RV64I-NEXT: sd t1, 32(sp) 4731; RV64I-NEXT: sd t1, 40(sp) 4732; RV64I-NEXT: sd t1, 48(sp) 4733; RV64I-NEXT: sd t1, 56(sp) 4734; RV64I-NEXT: sd a3, 0(sp) 4735; RV64I-NEXT: sd a4, 8(sp) 4736; RV64I-NEXT: sd a0, 16(sp) 4737; RV64I-NEXT: sd a5, 24(sp) 4738; RV64I-NEXT: slli a4, a1, 3 4739; RV64I-NEXT: andi a1, a1, 24 4740; RV64I-NEXT: add a1, s6, a1 4741; RV64I-NEXT: andi a0, a4, 56 4742; RV64I-NEXT: ld a3, 0(a1) 4743; RV64I-NEXT: ld a5, 8(a1) 4744; RV64I-NEXT: ld a6, 16(a1) 4745; RV64I-NEXT: xori a7, a0, 63 4746; RV64I-NEXT: ld t0, 24(a1) 4747; RV64I-NEXT: srl a0, a5, a4 4748; RV64I-NEXT: slli t1, a6, 1 4749; RV64I-NEXT: srl a1, a3, a4 4750; RV64I-NEXT: slli a5, a5, 1 4751; RV64I-NEXT: srl a3, a6, a4 4752; RV64I-NEXT: slli a6, t0, 1 4753; RV64I-NEXT: sra t0, t0, a4 4754; RV64I-NEXT: sll a4, t1, a7 4755; RV64I-NEXT: sll a5, a5, a7 4756; RV64I-NEXT: sll a6, a6, a7 4757; RV64I-NEXT: srli a7, t0, 56 4758; RV64I-NEXT: srli t1, t0, 48 4759; RV64I-NEXT: srli t2, t0, 40 4760; RV64I-NEXT: srli t3, t0, 32 4761; RV64I-NEXT: srli t4, t0, 24 4762; RV64I-NEXT: srli t5, t0, 16 4763; RV64I-NEXT: srli t6, t0, 8 4764; RV64I-NEXT: or a4, a0, a4 4765; RV64I-NEXT: or a5, a1, a5 4766; RV64I-NEXT: or a6, a3, a6 4767; RV64I-NEXT: sb t3, 28(a2) 4768; RV64I-NEXT: sb t2, 29(a2) 4769; RV64I-NEXT: sb t1, 30(a2) 4770; RV64I-NEXT: sb a7, 31(a2) 4771; RV64I-NEXT: sb t0, 24(a2) 4772; RV64I-NEXT: sb t6, 25(a2) 4773; RV64I-NEXT: sb t5, 26(a2) 4774; RV64I-NEXT: sb t4, 27(a2) 4775; RV64I-NEXT: srli a7, a6, 56 4776; RV64I-NEXT: srli t0, a6, 48 4777; RV64I-NEXT: srli t1, a6, 40 4778; RV64I-NEXT: srli t2, a6, 32 4779; RV64I-NEXT: srli t3, a6, 24 4780; RV64I-NEXT: srli t4, a6, 16 4781; RV64I-NEXT: srli a6, a6, 8 4782; RV64I-NEXT: srli t5, a5, 56 4783; RV64I-NEXT: srli t6, a5, 48 4784; RV64I-NEXT: srli s0, a5, 40 4785; RV64I-NEXT: srli s1, a5, 32 4786; RV64I-NEXT: srli s2, a5, 24 4787; RV64I-NEXT: srli s3, a5, 16 4788; RV64I-NEXT: srli a5, a5, 8 4789; RV64I-NEXT: srli s4, a4, 56 4790; RV64I-NEXT: srli s5, a4, 48 4791; RV64I-NEXT: srli s6, a4, 40 4792; RV64I-NEXT: sb t2, 20(a2) 4793; RV64I-NEXT: sb t1, 21(a2) 4794; RV64I-NEXT: sb t0, 22(a2) 4795; RV64I-NEXT: sb a7, 23(a2) 4796; RV64I-NEXT: srli a7, a4, 32 4797; RV64I-NEXT: sb a3, 16(a2) 4798; RV64I-NEXT: sb a6, 17(a2) 4799; RV64I-NEXT: sb t4, 18(a2) 4800; RV64I-NEXT: sb t3, 19(a2) 4801; RV64I-NEXT: srli a3, a4, 24 4802; RV64I-NEXT: sb s1, 4(a2) 4803; RV64I-NEXT: sb s0, 5(a2) 4804; RV64I-NEXT: sb t6, 6(a2) 4805; RV64I-NEXT: sb t5, 7(a2) 4806; RV64I-NEXT: srli a6, a4, 16 4807; RV64I-NEXT: srli a4, a4, 8 4808; RV64I-NEXT: sb a1, 0(a2) 4809; RV64I-NEXT: sb a5, 1(a2) 4810; RV64I-NEXT: sb s3, 2(a2) 4811; RV64I-NEXT: sb s2, 3(a2) 4812; RV64I-NEXT: sb a7, 12(a2) 4813; RV64I-NEXT: sb s6, 13(a2) 4814; RV64I-NEXT: sb s5, 14(a2) 4815; RV64I-NEXT: sb s4, 15(a2) 4816; RV64I-NEXT: sb a0, 8(a2) 4817; RV64I-NEXT: sb a4, 9(a2) 4818; RV64I-NEXT: sb a6, 10(a2) 4819; RV64I-NEXT: sb a3, 11(a2) 4820; RV64I-NEXT: ld s0, 152(sp) # 8-byte Folded Reload 4821; RV64I-NEXT: ld s1, 144(sp) # 8-byte Folded Reload 4822; RV64I-NEXT: ld s2, 136(sp) # 8-byte Folded Reload 4823; RV64I-NEXT: ld s3, 128(sp) # 8-byte Folded Reload 4824; RV64I-NEXT: ld s4, 120(sp) # 8-byte Folded Reload 4825; RV64I-NEXT: ld s5, 112(sp) # 8-byte Folded Reload 4826; RV64I-NEXT: ld s6, 104(sp) # 8-byte Folded Reload 4827; RV64I-NEXT: ld s7, 96(sp) # 8-byte Folded Reload 4828; RV64I-NEXT: ld s8, 88(sp) # 8-byte Folded Reload 4829; RV64I-NEXT: ld s9, 80(sp) # 8-byte Folded Reload 4830; RV64I-NEXT: ld s10, 72(sp) # 8-byte Folded Reload 4831; RV64I-NEXT: ld s11, 64(sp) # 8-byte Folded Reload 4832; RV64I-NEXT: addi sp, sp, 160 4833; RV64I-NEXT: ret 4834; 4835; RV32I-LABEL: ashr_32bytes: 4836; RV32I: # %bb.0: 4837; RV32I-NEXT: addi sp, sp, -128 4838; RV32I-NEXT: sw ra, 124(sp) # 4-byte Folded Spill 4839; RV32I-NEXT: sw s0, 120(sp) # 4-byte Folded Spill 4840; RV32I-NEXT: sw s1, 116(sp) # 4-byte Folded Spill 4841; RV32I-NEXT: sw s2, 112(sp) # 4-byte Folded Spill 4842; RV32I-NEXT: sw s3, 108(sp) # 4-byte Folded Spill 4843; RV32I-NEXT: sw s4, 104(sp) # 4-byte Folded Spill 4844; RV32I-NEXT: sw s5, 100(sp) # 4-byte Folded Spill 4845; RV32I-NEXT: sw s6, 96(sp) # 4-byte Folded Spill 4846; RV32I-NEXT: sw s7, 92(sp) # 4-byte Folded Spill 4847; RV32I-NEXT: sw s8, 88(sp) # 4-byte Folded Spill 4848; RV32I-NEXT: sw s9, 84(sp) # 4-byte Folded Spill 4849; RV32I-NEXT: sw s10, 80(sp) # 4-byte Folded Spill 4850; RV32I-NEXT: sw s11, 76(sp) # 4-byte Folded Spill 4851; RV32I-NEXT: lbu t6, 0(a0) 4852; RV32I-NEXT: lbu a4, 1(a0) 4853; RV32I-NEXT: lbu a5, 2(a0) 4854; RV32I-NEXT: lbu a6, 3(a0) 4855; RV32I-NEXT: lbu t1, 4(a0) 4856; RV32I-NEXT: lbu t3, 5(a0) 4857; RV32I-NEXT: lbu t4, 6(a0) 4858; RV32I-NEXT: lbu t5, 7(a0) 4859; RV32I-NEXT: lbu t2, 8(a0) 4860; RV32I-NEXT: lbu s1, 9(a0) 4861; RV32I-NEXT: lbu s7, 10(a0) 4862; RV32I-NEXT: lbu s8, 11(a0) 4863; RV32I-NEXT: lbu s9, 12(a0) 4864; RV32I-NEXT: lbu s10, 13(a0) 4865; RV32I-NEXT: lbu s4, 14(a0) 4866; RV32I-NEXT: lbu s6, 15(a0) 4867; RV32I-NEXT: lbu s5, 16(a0) 4868; RV32I-NEXT: lbu s11, 17(a0) 4869; RV32I-NEXT: lbu ra, 18(a0) 4870; RV32I-NEXT: lbu a3, 19(a0) 4871; RV32I-NEXT: lbu s2, 20(a0) 4872; RV32I-NEXT: lbu s3, 21(a0) 4873; RV32I-NEXT: lbu a7, 22(a0) 4874; RV32I-NEXT: lbu t0, 23(a0) 4875; RV32I-NEXT: slli a4, a4, 8 4876; RV32I-NEXT: slli a5, a5, 16 4877; RV32I-NEXT: slli a6, a6, 24 4878; RV32I-NEXT: slli t3, t3, 8 4879; RV32I-NEXT: slli t4, t4, 16 4880; RV32I-NEXT: slli t5, t5, 24 4881; RV32I-NEXT: or a4, a4, t6 4882; RV32I-NEXT: sw a4, 4(sp) # 4-byte Folded Spill 4883; RV32I-NEXT: or a4, a6, a5 4884; RV32I-NEXT: or a5, t3, t1 4885; RV32I-NEXT: or a6, t5, t4 4886; RV32I-NEXT: lbu t1, 24(a0) 4887; RV32I-NEXT: lbu t5, 25(a0) 4888; RV32I-NEXT: lbu t6, 26(a0) 4889; RV32I-NEXT: lbu s0, 27(a0) 4890; RV32I-NEXT: slli s1, s1, 8 4891; RV32I-NEXT: slli s7, s7, 16 4892; RV32I-NEXT: slli s8, s8, 24 4893; RV32I-NEXT: slli s10, s10, 8 4894; RV32I-NEXT: or t2, s1, t2 4895; RV32I-NEXT: or t3, s8, s7 4896; RV32I-NEXT: or t4, s10, s9 4897; RV32I-NEXT: lbu s1, 28(a0) 4898; RV32I-NEXT: lbu s7, 29(a0) 4899; RV32I-NEXT: lbu s8, 30(a0) 4900; RV32I-NEXT: lbu s9, 31(a0) 4901; RV32I-NEXT: slli s4, s4, 16 4902; RV32I-NEXT: slli s6, s6, 24 4903; RV32I-NEXT: slli s11, s11, 8 4904; RV32I-NEXT: slli ra, ra, 16 4905; RV32I-NEXT: slli a3, a3, 24 4906; RV32I-NEXT: or a0, s6, s4 4907; RV32I-NEXT: or s4, s11, s5 4908; RV32I-NEXT: or s5, a3, ra 4909; RV32I-NEXT: lbu a3, 0(a1) 4910; RV32I-NEXT: lbu s6, 1(a1) 4911; RV32I-NEXT: lbu s10, 2(a1) 4912; RV32I-NEXT: lbu a1, 3(a1) 4913; RV32I-NEXT: slli s3, s3, 8 4914; RV32I-NEXT: or s2, s3, s2 4915; RV32I-NEXT: addi s3, sp, 8 4916; RV32I-NEXT: slli a7, a7, 16 4917; RV32I-NEXT: slli t0, t0, 24 4918; RV32I-NEXT: slli t5, t5, 8 4919; RV32I-NEXT: slli t6, t6, 16 4920; RV32I-NEXT: slli s0, s0, 24 4921; RV32I-NEXT: slli s7, s7, 8 4922; RV32I-NEXT: slli s8, s8, 16 4923; RV32I-NEXT: slli s9, s9, 24 4924; RV32I-NEXT: slli s6, s6, 8 4925; RV32I-NEXT: slli s10, s10, 16 4926; RV32I-NEXT: slli a1, a1, 24 4927; RV32I-NEXT: or a7, t0, a7 4928; RV32I-NEXT: or t0, t5, t1 4929; RV32I-NEXT: or t1, s0, t6 4930; RV32I-NEXT: or t5, s7, s1 4931; RV32I-NEXT: or t6, s9, s8 4932; RV32I-NEXT: or a3, s6, a3 4933; RV32I-NEXT: or a1, a1, s10 4934; RV32I-NEXT: srai s0, s9, 31 4935; RV32I-NEXT: lw s1, 4(sp) # 4-byte Folded Reload 4936; RV32I-NEXT: or a4, a4, s1 4937; RV32I-NEXT: or a5, a6, a5 4938; RV32I-NEXT: or a6, t3, t2 4939; RV32I-NEXT: or a0, a0, t4 4940; RV32I-NEXT: or t2, s5, s4 4941; RV32I-NEXT: or a7, a7, s2 4942; RV32I-NEXT: or t0, t1, t0 4943; RV32I-NEXT: or t1, t6, t5 4944; RV32I-NEXT: or a1, a1, a3 4945; RV32I-NEXT: sw s0, 56(sp) 4946; RV32I-NEXT: sw s0, 60(sp) 4947; RV32I-NEXT: sw s0, 64(sp) 4948; RV32I-NEXT: sw s0, 68(sp) 4949; RV32I-NEXT: sw s0, 40(sp) 4950; RV32I-NEXT: sw s0, 44(sp) 4951; RV32I-NEXT: sw s0, 48(sp) 4952; RV32I-NEXT: sw s0, 52(sp) 4953; RV32I-NEXT: sw t2, 24(sp) 4954; RV32I-NEXT: sw a7, 28(sp) 4955; RV32I-NEXT: sw t0, 32(sp) 4956; RV32I-NEXT: sw t1, 36(sp) 4957; RV32I-NEXT: sw a4, 8(sp) 4958; RV32I-NEXT: sw a5, 12(sp) 4959; RV32I-NEXT: sw a6, 16(sp) 4960; RV32I-NEXT: sw a0, 20(sp) 4961; RV32I-NEXT: slli t1, a1, 3 4962; RV32I-NEXT: andi a1, a1, 28 4963; RV32I-NEXT: add a1, s3, a1 4964; RV32I-NEXT: andi a0, t1, 24 4965; RV32I-NEXT: xori t0, a0, 31 4966; RV32I-NEXT: lw a3, 0(a1) 4967; RV32I-NEXT: lw a4, 4(a1) 4968; RV32I-NEXT: lw a5, 8(a1) 4969; RV32I-NEXT: lw a6, 12(a1) 4970; RV32I-NEXT: lw a7, 16(a1) 4971; RV32I-NEXT: lw t2, 20(a1) 4972; RV32I-NEXT: lw t3, 24(a1) 4973; RV32I-NEXT: lw t4, 28(a1) 4974; RV32I-NEXT: srl a0, a4, t1 4975; RV32I-NEXT: slli t5, a5, 1 4976; RV32I-NEXT: srl a1, a3, t1 4977; RV32I-NEXT: slli t6, a4, 1 4978; RV32I-NEXT: srl a3, a6, t1 4979; RV32I-NEXT: slli s0, a7, 1 4980; RV32I-NEXT: srl a4, a5, t1 4981; RV32I-NEXT: slli s1, a6, 1 4982; RV32I-NEXT: srl a5, t2, t1 4983; RV32I-NEXT: slli s2, t3, 1 4984; RV32I-NEXT: srl a6, a7, t1 4985; RV32I-NEXT: slli t2, t2, 1 4986; RV32I-NEXT: srl a7, t3, t1 4987; RV32I-NEXT: slli t3, t4, 1 4988; RV32I-NEXT: sra t1, t4, t1 4989; RV32I-NEXT: sll t4, t5, t0 4990; RV32I-NEXT: sll t5, t6, t0 4991; RV32I-NEXT: sll t6, s0, t0 4992; RV32I-NEXT: sll s0, s1, t0 4993; RV32I-NEXT: sll s1, s2, t0 4994; RV32I-NEXT: sll t2, t2, t0 4995; RV32I-NEXT: sll t3, t3, t0 4996; RV32I-NEXT: srli s2, t1, 24 4997; RV32I-NEXT: srli s3, t1, 16 4998; RV32I-NEXT: srli s4, t1, 8 4999; RV32I-NEXT: or t0, a0, t4 5000; RV32I-NEXT: or t4, a1, t5 5001; RV32I-NEXT: or t5, a3, t6 5002; RV32I-NEXT: or s0, a4, s0 5003; RV32I-NEXT: or s1, a5, s1 5004; RV32I-NEXT: or t2, a6, t2 5005; RV32I-NEXT: or t3, a7, t3 5006; RV32I-NEXT: sb t1, 28(a2) 5007; RV32I-NEXT: sb s4, 29(a2) 5008; RV32I-NEXT: sb s3, 30(a2) 5009; RV32I-NEXT: sb s2, 31(a2) 5010; RV32I-NEXT: srli t1, t3, 24 5011; RV32I-NEXT: srli t6, t3, 16 5012; RV32I-NEXT: srli t3, t3, 8 5013; RV32I-NEXT: srli s2, t2, 24 5014; RV32I-NEXT: srli s3, t2, 16 5015; RV32I-NEXT: srli t2, t2, 8 5016; RV32I-NEXT: srli s4, s1, 24 5017; RV32I-NEXT: srli s5, s1, 16 5018; RV32I-NEXT: srli s1, s1, 8 5019; RV32I-NEXT: srli s6, s0, 24 5020; RV32I-NEXT: srli s7, s0, 16 5021; RV32I-NEXT: srli s0, s0, 8 5022; RV32I-NEXT: srli s8, t5, 24 5023; RV32I-NEXT: srli s9, t5, 16 5024; RV32I-NEXT: srli t5, t5, 8 5025; RV32I-NEXT: srli s10, t4, 24 5026; RV32I-NEXT: srli s11, t4, 16 5027; RV32I-NEXT: srli t4, t4, 8 5028; RV32I-NEXT: sb a7, 24(a2) 5029; RV32I-NEXT: sb t3, 25(a2) 5030; RV32I-NEXT: sb t6, 26(a2) 5031; RV32I-NEXT: sb t1, 27(a2) 5032; RV32I-NEXT: srli a7, t0, 24 5033; RV32I-NEXT: sb a6, 16(a2) 5034; RV32I-NEXT: sb t2, 17(a2) 5035; RV32I-NEXT: sb s3, 18(a2) 5036; RV32I-NEXT: sb s2, 19(a2) 5037; RV32I-NEXT: srli a6, t0, 16 5038; RV32I-NEXT: srli t0, t0, 8 5039; RV32I-NEXT: sb a5, 20(a2) 5040; RV32I-NEXT: sb s1, 21(a2) 5041; RV32I-NEXT: sb s5, 22(a2) 5042; RV32I-NEXT: sb s4, 23(a2) 5043; RV32I-NEXT: sb a4, 8(a2) 5044; RV32I-NEXT: sb s0, 9(a2) 5045; RV32I-NEXT: sb s7, 10(a2) 5046; RV32I-NEXT: sb s6, 11(a2) 5047; RV32I-NEXT: sb a3, 12(a2) 5048; RV32I-NEXT: sb t5, 13(a2) 5049; RV32I-NEXT: sb s9, 14(a2) 5050; RV32I-NEXT: sb s8, 15(a2) 5051; RV32I-NEXT: sb a1, 0(a2) 5052; RV32I-NEXT: sb t4, 1(a2) 5053; RV32I-NEXT: sb s11, 2(a2) 5054; RV32I-NEXT: sb s10, 3(a2) 5055; RV32I-NEXT: sb a0, 4(a2) 5056; RV32I-NEXT: sb t0, 5(a2) 5057; RV32I-NEXT: sb a6, 6(a2) 5058; RV32I-NEXT: sb a7, 7(a2) 5059; RV32I-NEXT: lw ra, 124(sp) # 4-byte Folded Reload 5060; RV32I-NEXT: lw s0, 120(sp) # 4-byte Folded Reload 5061; RV32I-NEXT: lw s1, 116(sp) # 4-byte Folded Reload 5062; RV32I-NEXT: lw s2, 112(sp) # 4-byte Folded Reload 5063; RV32I-NEXT: lw s3, 108(sp) # 4-byte Folded Reload 5064; RV32I-NEXT: lw s4, 104(sp) # 4-byte Folded Reload 5065; RV32I-NEXT: lw s5, 100(sp) # 4-byte Folded Reload 5066; RV32I-NEXT: lw s6, 96(sp) # 4-byte Folded Reload 5067; RV32I-NEXT: lw s7, 92(sp) # 4-byte Folded Reload 5068; RV32I-NEXT: lw s8, 88(sp) # 4-byte Folded Reload 5069; RV32I-NEXT: lw s9, 84(sp) # 4-byte Folded Reload 5070; RV32I-NEXT: lw s10, 80(sp) # 4-byte Folded Reload 5071; RV32I-NEXT: lw s11, 76(sp) # 4-byte Folded Reload 5072; RV32I-NEXT: addi sp, sp, 128 5073; RV32I-NEXT: ret 5074 %src = load i256, ptr %src.ptr, align 1 5075 %byteOff = load i256, ptr %byteOff.ptr, align 1 5076 %bitOff = shl i256 %byteOff, 3 5077 %res = ashr i256 %src, %bitOff 5078 store i256 %res, ptr %dst, align 1 5079 ret void 5080} 5081 5082define void @ashr_32bytes_wordOff(ptr %src.ptr, ptr %wordOff.ptr, ptr %dst) nounwind { 5083; RV64I-LABEL: ashr_32bytes_wordOff: 5084; RV64I: # %bb.0: 5085; RV64I-NEXT: addi sp, sp, -160 5086; RV64I-NEXT: sd s0, 152(sp) # 8-byte Folded Spill 5087; RV64I-NEXT: sd s1, 144(sp) # 8-byte Folded Spill 5088; RV64I-NEXT: sd s2, 136(sp) # 8-byte Folded Spill 5089; RV64I-NEXT: sd s3, 128(sp) # 8-byte Folded Spill 5090; RV64I-NEXT: sd s4, 120(sp) # 8-byte Folded Spill 5091; RV64I-NEXT: sd s5, 112(sp) # 8-byte Folded Spill 5092; RV64I-NEXT: sd s6, 104(sp) # 8-byte Folded Spill 5093; RV64I-NEXT: sd s7, 96(sp) # 8-byte Folded Spill 5094; RV64I-NEXT: sd s8, 88(sp) # 8-byte Folded Spill 5095; RV64I-NEXT: sd s9, 80(sp) # 8-byte Folded Spill 5096; RV64I-NEXT: sd s10, 72(sp) # 8-byte Folded Spill 5097; RV64I-NEXT: sd s11, 64(sp) # 8-byte Folded Spill 5098; RV64I-NEXT: lbu a3, 0(a0) 5099; RV64I-NEXT: lbu a4, 1(a0) 5100; RV64I-NEXT: lbu a5, 2(a0) 5101; RV64I-NEXT: lbu a6, 3(a0) 5102; RV64I-NEXT: lbu a7, 4(a0) 5103; RV64I-NEXT: lbu t0, 5(a0) 5104; RV64I-NEXT: lbu t1, 6(a0) 5105; RV64I-NEXT: lbu t2, 7(a0) 5106; RV64I-NEXT: lbu t3, 8(a0) 5107; RV64I-NEXT: lbu t4, 9(a0) 5108; RV64I-NEXT: lbu t5, 10(a0) 5109; RV64I-NEXT: lbu t6, 11(a0) 5110; RV64I-NEXT: lbu s0, 12(a0) 5111; RV64I-NEXT: lbu s1, 13(a0) 5112; RV64I-NEXT: lbu s2, 14(a0) 5113; RV64I-NEXT: lbu s3, 15(a0) 5114; RV64I-NEXT: lbu s4, 16(a0) 5115; RV64I-NEXT: lbu s5, 17(a0) 5116; RV64I-NEXT: lbu s6, 18(a0) 5117; RV64I-NEXT: lbu s7, 19(a0) 5118; RV64I-NEXT: slli a4, a4, 8 5119; RV64I-NEXT: slli a5, a5, 16 5120; RV64I-NEXT: slli a6, a6, 24 5121; RV64I-NEXT: slli t0, t0, 8 5122; RV64I-NEXT: slli t1, t1, 16 5123; RV64I-NEXT: slli t2, t2, 24 5124; RV64I-NEXT: or a3, a4, a3 5125; RV64I-NEXT: or a4, a6, a5 5126; RV64I-NEXT: or a5, t0, a7 5127; RV64I-NEXT: or a6, t2, t1 5128; RV64I-NEXT: lbu s8, 20(a0) 5129; RV64I-NEXT: lbu s9, 21(a0) 5130; RV64I-NEXT: lbu s10, 22(a0) 5131; RV64I-NEXT: lbu s11, 23(a0) 5132; RV64I-NEXT: slli t4, t4, 8 5133; RV64I-NEXT: slli t5, t5, 16 5134; RV64I-NEXT: slli t6, t6, 24 5135; RV64I-NEXT: slli s1, s1, 8 5136; RV64I-NEXT: slli s2, s2, 16 5137; RV64I-NEXT: slli s3, s3, 24 5138; RV64I-NEXT: or a7, t4, t3 5139; RV64I-NEXT: or t0, t6, t5 5140; RV64I-NEXT: or t1, s1, s0 5141; RV64I-NEXT: or t2, s3, s2 5142; RV64I-NEXT: lbu t6, 24(a0) 5143; RV64I-NEXT: lbu s0, 25(a0) 5144; RV64I-NEXT: lbu s1, 26(a0) 5145; RV64I-NEXT: lbu s2, 27(a0) 5146; RV64I-NEXT: slli s5, s5, 8 5147; RV64I-NEXT: slli s6, s6, 16 5148; RV64I-NEXT: slli s7, s7, 24 5149; RV64I-NEXT: slli s9, s9, 8 5150; RV64I-NEXT: or t3, s5, s4 5151; RV64I-NEXT: or t4, s7, s6 5152; RV64I-NEXT: or t5, s9, s8 5153; RV64I-NEXT: lbu s3, 28(a0) 5154; RV64I-NEXT: lbu s4, 29(a0) 5155; RV64I-NEXT: lbu s5, 30(a0) 5156; RV64I-NEXT: lbu s6, 31(a0) 5157; RV64I-NEXT: slli s10, s10, 16 5158; RV64I-NEXT: slli s11, s11, 24 5159; RV64I-NEXT: slli s0, s0, 8 5160; RV64I-NEXT: slli s1, s1, 16 5161; RV64I-NEXT: slli s2, s2, 24 5162; RV64I-NEXT: slli s4, s4, 8 5163; RV64I-NEXT: or a0, s11, s10 5164; RV64I-NEXT: or t6, s0, t6 5165; RV64I-NEXT: or s0, s2, s1 5166; RV64I-NEXT: or s1, s4, s3 5167; RV64I-NEXT: lbu s2, 0(a1) 5168; RV64I-NEXT: lbu s3, 1(a1) 5169; RV64I-NEXT: lbu s4, 2(a1) 5170; RV64I-NEXT: lbu s7, 3(a1) 5171; RV64I-NEXT: slli s5, s5, 16 5172; RV64I-NEXT: slli s6, s6, 24 5173; RV64I-NEXT: slli s3, s3, 8 5174; RV64I-NEXT: slli s4, s4, 16 5175; RV64I-NEXT: slli s7, s7, 24 5176; RV64I-NEXT: or s5, s6, s5 5177; RV64I-NEXT: or s2, s3, s2 5178; RV64I-NEXT: lbu s3, 4(a1) 5179; RV64I-NEXT: lbu s6, 5(a1) 5180; RV64I-NEXT: or s4, s7, s4 5181; RV64I-NEXT: lbu s7, 6(a1) 5182; RV64I-NEXT: lbu a1, 7(a1) 5183; RV64I-NEXT: slli s6, s6, 8 5184; RV64I-NEXT: or s3, s6, s3 5185; RV64I-NEXT: slli s7, s7, 16 5186; RV64I-NEXT: slli a1, a1, 24 5187; RV64I-NEXT: or a1, a1, s7 5188; RV64I-NEXT: mv s6, sp 5189; RV64I-NEXT: or a3, a4, a3 5190; RV64I-NEXT: or a4, a6, a5 5191; RV64I-NEXT: or a5, t0, a7 5192; RV64I-NEXT: or a6, t2, t1 5193; RV64I-NEXT: or a7, t4, t3 5194; RV64I-NEXT: or a0, a0, t5 5195; RV64I-NEXT: or t0, s0, t6 5196; RV64I-NEXT: or t1, s5, s1 5197; RV64I-NEXT: or t2, s4, s2 5198; RV64I-NEXT: or a1, a1, s3 5199; RV64I-NEXT: slli a4, a4, 32 5200; RV64I-NEXT: slli a6, a6, 32 5201; RV64I-NEXT: slli a0, a0, 32 5202; RV64I-NEXT: slli t3, t1, 32 5203; RV64I-NEXT: slli a1, a1, 32 5204; RV64I-NEXT: sraiw t1, t1, 31 5205; RV64I-NEXT: or a3, a4, a3 5206; RV64I-NEXT: or a4, a6, a5 5207; RV64I-NEXT: or a0, a0, a7 5208; RV64I-NEXT: or a5, t3, t0 5209; RV64I-NEXT: or a1, a1, t2 5210; RV64I-NEXT: sd t1, 32(sp) 5211; RV64I-NEXT: sd t1, 40(sp) 5212; RV64I-NEXT: sd t1, 48(sp) 5213; RV64I-NEXT: sd t1, 56(sp) 5214; RV64I-NEXT: sd a3, 0(sp) 5215; RV64I-NEXT: sd a4, 8(sp) 5216; RV64I-NEXT: sd a0, 16(sp) 5217; RV64I-NEXT: sd a5, 24(sp) 5218; RV64I-NEXT: slli a3, a1, 5 5219; RV64I-NEXT: slli a1, a1, 2 5220; RV64I-NEXT: andi a1, a1, 24 5221; RV64I-NEXT: andi a0, a3, 32 5222; RV64I-NEXT: add a1, s6, a1 5223; RV64I-NEXT: ld a4, 0(a1) 5224; RV64I-NEXT: ld a5, 8(a1) 5225; RV64I-NEXT: ld a6, 16(a1) 5226; RV64I-NEXT: xori a7, a0, 63 5227; RV64I-NEXT: ld t0, 24(a1) 5228; RV64I-NEXT: srl a0, a5, a3 5229; RV64I-NEXT: slli t1, a6, 1 5230; RV64I-NEXT: srl a1, a4, a3 5231; RV64I-NEXT: slli a5, a5, 1 5232; RV64I-NEXT: srl a4, a6, a3 5233; RV64I-NEXT: slli a6, t0, 1 5234; RV64I-NEXT: sra a3, t0, a3 5235; RV64I-NEXT: sll t0, t1, a7 5236; RV64I-NEXT: sll a5, a5, a7 5237; RV64I-NEXT: sll a6, a6, a7 5238; RV64I-NEXT: srli a7, a4, 24 5239; RV64I-NEXT: srli t1, a4, 16 5240; RV64I-NEXT: srli t2, a4, 8 5241; RV64I-NEXT: srli t3, a3, 56 5242; RV64I-NEXT: srli t4, a3, 48 5243; RV64I-NEXT: srli t5, a3, 40 5244; RV64I-NEXT: srli t6, a3, 32 5245; RV64I-NEXT: srli s0, a3, 24 5246; RV64I-NEXT: srli s1, a3, 16 5247; RV64I-NEXT: srli s2, a3, 8 5248; RV64I-NEXT: srli s3, a1, 24 5249; RV64I-NEXT: srli s4, a1, 16 5250; RV64I-NEXT: srli s5, a1, 8 5251; RV64I-NEXT: srli s6, a0, 24 5252; RV64I-NEXT: or a6, a4, a6 5253; RV64I-NEXT: sb a4, 16(a2) 5254; RV64I-NEXT: sb t2, 17(a2) 5255; RV64I-NEXT: sb t1, 18(a2) 5256; RV64I-NEXT: sb a7, 19(a2) 5257; RV64I-NEXT: srli a4, a0, 16 5258; RV64I-NEXT: sb t6, 28(a2) 5259; RV64I-NEXT: sb t5, 29(a2) 5260; RV64I-NEXT: sb t4, 30(a2) 5261; RV64I-NEXT: sb t3, 31(a2) 5262; RV64I-NEXT: srli a7, a0, 8 5263; RV64I-NEXT: or t0, a0, t0 5264; RV64I-NEXT: or a5, a1, a5 5265; RV64I-NEXT: sb a3, 24(a2) 5266; RV64I-NEXT: sb s2, 25(a2) 5267; RV64I-NEXT: sb s1, 26(a2) 5268; RV64I-NEXT: sb s0, 27(a2) 5269; RV64I-NEXT: sb a1, 0(a2) 5270; RV64I-NEXT: sb s5, 1(a2) 5271; RV64I-NEXT: sb s4, 2(a2) 5272; RV64I-NEXT: sb s3, 3(a2) 5273; RV64I-NEXT: sb a0, 8(a2) 5274; RV64I-NEXT: sb a7, 9(a2) 5275; RV64I-NEXT: sb a4, 10(a2) 5276; RV64I-NEXT: sb s6, 11(a2) 5277; RV64I-NEXT: srli a0, a6, 56 5278; RV64I-NEXT: srli a1, a6, 48 5279; RV64I-NEXT: srli a3, a6, 40 5280; RV64I-NEXT: srli a4, a6, 32 5281; RV64I-NEXT: srli a6, a5, 56 5282; RV64I-NEXT: srli a7, a5, 48 5283; RV64I-NEXT: srli t1, a5, 40 5284; RV64I-NEXT: srli a5, a5, 32 5285; RV64I-NEXT: srli t2, t0, 56 5286; RV64I-NEXT: srli t3, t0, 48 5287; RV64I-NEXT: srli t4, t0, 40 5288; RV64I-NEXT: srli t0, t0, 32 5289; RV64I-NEXT: sb a4, 20(a2) 5290; RV64I-NEXT: sb a3, 21(a2) 5291; RV64I-NEXT: sb a1, 22(a2) 5292; RV64I-NEXT: sb a0, 23(a2) 5293; RV64I-NEXT: sb a5, 4(a2) 5294; RV64I-NEXT: sb t1, 5(a2) 5295; RV64I-NEXT: sb a7, 6(a2) 5296; RV64I-NEXT: sb a6, 7(a2) 5297; RV64I-NEXT: sb t0, 12(a2) 5298; RV64I-NEXT: sb t4, 13(a2) 5299; RV64I-NEXT: sb t3, 14(a2) 5300; RV64I-NEXT: sb t2, 15(a2) 5301; RV64I-NEXT: ld s0, 152(sp) # 8-byte Folded Reload 5302; RV64I-NEXT: ld s1, 144(sp) # 8-byte Folded Reload 5303; RV64I-NEXT: ld s2, 136(sp) # 8-byte Folded Reload 5304; RV64I-NEXT: ld s3, 128(sp) # 8-byte Folded Reload 5305; RV64I-NEXT: ld s4, 120(sp) # 8-byte Folded Reload 5306; RV64I-NEXT: ld s5, 112(sp) # 8-byte Folded Reload 5307; RV64I-NEXT: ld s6, 104(sp) # 8-byte Folded Reload 5308; RV64I-NEXT: ld s7, 96(sp) # 8-byte Folded Reload 5309; RV64I-NEXT: ld s8, 88(sp) # 8-byte Folded Reload 5310; RV64I-NEXT: ld s9, 80(sp) # 8-byte Folded Reload 5311; RV64I-NEXT: ld s10, 72(sp) # 8-byte Folded Reload 5312; RV64I-NEXT: ld s11, 64(sp) # 8-byte Folded Reload 5313; RV64I-NEXT: addi sp, sp, 160 5314; RV64I-NEXT: ret 5315; 5316; RV32I-LABEL: ashr_32bytes_wordOff: 5317; RV32I: # %bb.0: 5318; RV32I-NEXT: addi sp, sp, -128 5319; RV32I-NEXT: sw ra, 124(sp) # 4-byte Folded Spill 5320; RV32I-NEXT: sw s0, 120(sp) # 4-byte Folded Spill 5321; RV32I-NEXT: sw s1, 116(sp) # 4-byte Folded Spill 5322; RV32I-NEXT: sw s2, 112(sp) # 4-byte Folded Spill 5323; RV32I-NEXT: sw s3, 108(sp) # 4-byte Folded Spill 5324; RV32I-NEXT: sw s4, 104(sp) # 4-byte Folded Spill 5325; RV32I-NEXT: sw s5, 100(sp) # 4-byte Folded Spill 5326; RV32I-NEXT: sw s6, 96(sp) # 4-byte Folded Spill 5327; RV32I-NEXT: sw s7, 92(sp) # 4-byte Folded Spill 5328; RV32I-NEXT: sw s8, 88(sp) # 4-byte Folded Spill 5329; RV32I-NEXT: sw s9, 84(sp) # 4-byte Folded Spill 5330; RV32I-NEXT: sw s10, 80(sp) # 4-byte Folded Spill 5331; RV32I-NEXT: sw s11, 76(sp) # 4-byte Folded Spill 5332; RV32I-NEXT: lbu a6, 0(a0) 5333; RV32I-NEXT: lbu t0, 1(a0) 5334; RV32I-NEXT: lbu t1, 2(a0) 5335; RV32I-NEXT: lbu t6, 3(a0) 5336; RV32I-NEXT: lbu s7, 4(a0) 5337; RV32I-NEXT: lbu s8, 5(a0) 5338; RV32I-NEXT: lbu s3, 6(a0) 5339; RV32I-NEXT: lbu s5, 7(a0) 5340; RV32I-NEXT: lbu s4, 8(a0) 5341; RV32I-NEXT: lbu s9, 9(a0) 5342; RV32I-NEXT: lbu s10, 10(a0) 5343; RV32I-NEXT: lbu s11, 11(a0) 5344; RV32I-NEXT: lbu s2, 12(a0) 5345; RV32I-NEXT: lbu s6, 13(a0) 5346; RV32I-NEXT: lbu a5, 14(a0) 5347; RV32I-NEXT: lbu a7, 15(a0) 5348; RV32I-NEXT: lbu a3, 16(a0) 5349; RV32I-NEXT: lbu t2, 17(a0) 5350; RV32I-NEXT: lbu t3, 18(a0) 5351; RV32I-NEXT: lbu t4, 19(a0) 5352; RV32I-NEXT: lbu a4, 20(a0) 5353; RV32I-NEXT: lbu t5, 21(a0) 5354; RV32I-NEXT: lbu s0, 22(a0) 5355; RV32I-NEXT: lbu s1, 23(a0) 5356; RV32I-NEXT: slli t0, t0, 8 5357; RV32I-NEXT: slli t1, t1, 16 5358; RV32I-NEXT: slli t6, t6, 24 5359; RV32I-NEXT: slli s8, s8, 8 5360; RV32I-NEXT: or a6, t0, a6 5361; RV32I-NEXT: or t0, t6, t1 5362; RV32I-NEXT: or t1, s8, s7 5363; RV32I-NEXT: lbu t6, 24(a0) 5364; RV32I-NEXT: lbu s7, 25(a0) 5365; RV32I-NEXT: lbu s8, 26(a0) 5366; RV32I-NEXT: lbu ra, 27(a0) 5367; RV32I-NEXT: slli s3, s3, 16 5368; RV32I-NEXT: slli s5, s5, 24 5369; RV32I-NEXT: slli s9, s9, 8 5370; RV32I-NEXT: slli s10, s10, 16 5371; RV32I-NEXT: slli s11, s11, 24 5372; RV32I-NEXT: or s3, s5, s3 5373; RV32I-NEXT: or s4, s9, s4 5374; RV32I-NEXT: or s5, s11, s10 5375; RV32I-NEXT: lbu s9, 28(a0) 5376; RV32I-NEXT: lbu s10, 29(a0) 5377; RV32I-NEXT: lbu s11, 30(a0) 5378; RV32I-NEXT: lbu a0, 31(a0) 5379; RV32I-NEXT: lbu a1, 0(a1) 5380; RV32I-NEXT: slli s6, s6, 8 5381; RV32I-NEXT: or s2, s6, s2 5382; RV32I-NEXT: addi s6, sp, 8 5383; RV32I-NEXT: slli a5, a5, 16 5384; RV32I-NEXT: slli a7, a7, 24 5385; RV32I-NEXT: slli t2, t2, 8 5386; RV32I-NEXT: slli t3, t3, 16 5387; RV32I-NEXT: slli t4, t4, 24 5388; RV32I-NEXT: slli t5, t5, 8 5389; RV32I-NEXT: slli s0, s0, 16 5390; RV32I-NEXT: slli s1, s1, 24 5391; RV32I-NEXT: slli s7, s7, 8 5392; RV32I-NEXT: slli s8, s8, 16 5393; RV32I-NEXT: slli ra, ra, 24 5394; RV32I-NEXT: slli s10, s10, 8 5395; RV32I-NEXT: slli s11, s11, 16 5396; RV32I-NEXT: slli a0, a0, 24 5397; RV32I-NEXT: slli a1, a1, 2 5398; RV32I-NEXT: or a5, a7, a5 5399; RV32I-NEXT: or a3, t2, a3 5400; RV32I-NEXT: or a7, t4, t3 5401; RV32I-NEXT: or a4, t5, a4 5402; RV32I-NEXT: or s0, s1, s0 5403; RV32I-NEXT: or t2, s7, t6 5404; RV32I-NEXT: or t3, ra, s8 5405; RV32I-NEXT: or t4, s10, s9 5406; RV32I-NEXT: or t5, a0, s11 5407; RV32I-NEXT: srai a0, a0, 31 5408; RV32I-NEXT: andi a1, a1, 28 5409; RV32I-NEXT: or a6, t0, a6 5410; RV32I-NEXT: or t0, s3, t1 5411; RV32I-NEXT: or t1, s5, s4 5412; RV32I-NEXT: or a5, a5, s2 5413; RV32I-NEXT: or a3, a7, a3 5414; RV32I-NEXT: or a4, s0, a4 5415; RV32I-NEXT: or a7, t3, t2 5416; RV32I-NEXT: or t2, t5, t4 5417; RV32I-NEXT: sw a0, 56(sp) 5418; RV32I-NEXT: sw a0, 60(sp) 5419; RV32I-NEXT: sw a0, 64(sp) 5420; RV32I-NEXT: sw a0, 68(sp) 5421; RV32I-NEXT: sw a0, 40(sp) 5422; RV32I-NEXT: sw a0, 44(sp) 5423; RV32I-NEXT: sw a0, 48(sp) 5424; RV32I-NEXT: sw a0, 52(sp) 5425; RV32I-NEXT: add s6, s6, a1 5426; RV32I-NEXT: sw a3, 24(sp) 5427; RV32I-NEXT: sw a4, 28(sp) 5428; RV32I-NEXT: sw a7, 32(sp) 5429; RV32I-NEXT: sw t2, 36(sp) 5430; RV32I-NEXT: sw a6, 8(sp) 5431; RV32I-NEXT: sw t0, 12(sp) 5432; RV32I-NEXT: sw t1, 16(sp) 5433; RV32I-NEXT: sw a5, 20(sp) 5434; RV32I-NEXT: lw a6, 16(s6) 5435; RV32I-NEXT: lw a5, 20(s6) 5436; RV32I-NEXT: lw a7, 24(s6) 5437; RV32I-NEXT: lw a1, 0(s6) 5438; RV32I-NEXT: lw a0, 4(s6) 5439; RV32I-NEXT: lw a4, 8(s6) 5440; RV32I-NEXT: lw a3, 12(s6) 5441; RV32I-NEXT: lw t0, 28(s6) 5442; RV32I-NEXT: srli t1, a7, 24 5443; RV32I-NEXT: srli t2, a7, 16 5444; RV32I-NEXT: srli t3, a7, 8 5445; RV32I-NEXT: srli t4, t0, 24 5446; RV32I-NEXT: srli t5, t0, 16 5447; RV32I-NEXT: srli t6, t0, 8 5448; RV32I-NEXT: srli s0, a6, 24 5449; RV32I-NEXT: srli s1, a6, 16 5450; RV32I-NEXT: srli s2, a6, 8 5451; RV32I-NEXT: srli s3, a5, 24 5452; RV32I-NEXT: srli s4, a5, 16 5453; RV32I-NEXT: srli s5, a5, 8 5454; RV32I-NEXT: srli s6, a4, 24 5455; RV32I-NEXT: srli s7, a4, 16 5456; RV32I-NEXT: srli s8, a4, 8 5457; RV32I-NEXT: srli s9, a3, 24 5458; RV32I-NEXT: srli s10, a3, 16 5459; RV32I-NEXT: srli s11, a3, 8 5460; RV32I-NEXT: srli ra, a1, 24 5461; RV32I-NEXT: sb a7, 24(a2) 5462; RV32I-NEXT: sb t3, 25(a2) 5463; RV32I-NEXT: sb t2, 26(a2) 5464; RV32I-NEXT: sb t1, 27(a2) 5465; RV32I-NEXT: srli a7, a1, 16 5466; RV32I-NEXT: sb t0, 28(a2) 5467; RV32I-NEXT: sb t6, 29(a2) 5468; RV32I-NEXT: sb t5, 30(a2) 5469; RV32I-NEXT: sb t4, 31(a2) 5470; RV32I-NEXT: srli t0, a1, 8 5471; RV32I-NEXT: sb a6, 16(a2) 5472; RV32I-NEXT: sb s2, 17(a2) 5473; RV32I-NEXT: sb s1, 18(a2) 5474; RV32I-NEXT: sb s0, 19(a2) 5475; RV32I-NEXT: srli a6, a0, 24 5476; RV32I-NEXT: sb a5, 20(a2) 5477; RV32I-NEXT: sb s5, 21(a2) 5478; RV32I-NEXT: sb s4, 22(a2) 5479; RV32I-NEXT: sb s3, 23(a2) 5480; RV32I-NEXT: srli a5, a0, 16 5481; RV32I-NEXT: sb a4, 8(a2) 5482; RV32I-NEXT: sb s8, 9(a2) 5483; RV32I-NEXT: sb s7, 10(a2) 5484; RV32I-NEXT: sb s6, 11(a2) 5485; RV32I-NEXT: srli a4, a0, 8 5486; RV32I-NEXT: sb a3, 12(a2) 5487; RV32I-NEXT: sb s11, 13(a2) 5488; RV32I-NEXT: sb s10, 14(a2) 5489; RV32I-NEXT: sb s9, 15(a2) 5490; RV32I-NEXT: sb a1, 0(a2) 5491; RV32I-NEXT: sb t0, 1(a2) 5492; RV32I-NEXT: sb a7, 2(a2) 5493; RV32I-NEXT: sb ra, 3(a2) 5494; RV32I-NEXT: sb a0, 4(a2) 5495; RV32I-NEXT: sb a4, 5(a2) 5496; RV32I-NEXT: sb a5, 6(a2) 5497; RV32I-NEXT: sb a6, 7(a2) 5498; RV32I-NEXT: lw ra, 124(sp) # 4-byte Folded Reload 5499; RV32I-NEXT: lw s0, 120(sp) # 4-byte Folded Reload 5500; RV32I-NEXT: lw s1, 116(sp) # 4-byte Folded Reload 5501; RV32I-NEXT: lw s2, 112(sp) # 4-byte Folded Reload 5502; RV32I-NEXT: lw s3, 108(sp) # 4-byte Folded Reload 5503; RV32I-NEXT: lw s4, 104(sp) # 4-byte Folded Reload 5504; RV32I-NEXT: lw s5, 100(sp) # 4-byte Folded Reload 5505; RV32I-NEXT: lw s6, 96(sp) # 4-byte Folded Reload 5506; RV32I-NEXT: lw s7, 92(sp) # 4-byte Folded Reload 5507; RV32I-NEXT: lw s8, 88(sp) # 4-byte Folded Reload 5508; RV32I-NEXT: lw s9, 84(sp) # 4-byte Folded Reload 5509; RV32I-NEXT: lw s10, 80(sp) # 4-byte Folded Reload 5510; RV32I-NEXT: lw s11, 76(sp) # 4-byte Folded Reload 5511; RV32I-NEXT: addi sp, sp, 128 5512; RV32I-NEXT: ret 5513 %src = load i256, ptr %src.ptr, align 1 5514 %wordOff = load i256, ptr %wordOff.ptr, align 1 5515 %bitOff = shl i256 %wordOff, 5 5516 %res = ashr i256 %src, %bitOff 5517 store i256 %res, ptr %dst, align 1 5518 ret void 5519} 5520 5521define void @ashr_32bytes_dwordOff(ptr %src.ptr, ptr %dwordOff.ptr, ptr %dst) nounwind { 5522; RV64I-LABEL: ashr_32bytes_dwordOff: 5523; RV64I: # %bb.0: 5524; RV64I-NEXT: addi sp, sp, -160 5525; RV64I-NEXT: sd s0, 152(sp) # 8-byte Folded Spill 5526; RV64I-NEXT: sd s1, 144(sp) # 8-byte Folded Spill 5527; RV64I-NEXT: sd s2, 136(sp) # 8-byte Folded Spill 5528; RV64I-NEXT: sd s3, 128(sp) # 8-byte Folded Spill 5529; RV64I-NEXT: sd s4, 120(sp) # 8-byte Folded Spill 5530; RV64I-NEXT: sd s5, 112(sp) # 8-byte Folded Spill 5531; RV64I-NEXT: sd s6, 104(sp) # 8-byte Folded Spill 5532; RV64I-NEXT: sd s7, 96(sp) # 8-byte Folded Spill 5533; RV64I-NEXT: sd s8, 88(sp) # 8-byte Folded Spill 5534; RV64I-NEXT: sd s9, 80(sp) # 8-byte Folded Spill 5535; RV64I-NEXT: sd s10, 72(sp) # 8-byte Folded Spill 5536; RV64I-NEXT: sd s11, 64(sp) # 8-byte Folded Spill 5537; RV64I-NEXT: lbu a5, 0(a0) 5538; RV64I-NEXT: lbu a7, 1(a0) 5539; RV64I-NEXT: lbu t1, 2(a0) 5540; RV64I-NEXT: lbu s3, 3(a0) 5541; RV64I-NEXT: lbu t0, 4(a0) 5542; RV64I-NEXT: lbu s8, 5(a0) 5543; RV64I-NEXT: lbu s9, 6(a0) 5544; RV64I-NEXT: lbu s10, 7(a0) 5545; RV64I-NEXT: lbu s2, 8(a0) 5546; RV64I-NEXT: lbu s4, 9(a0) 5547; RV64I-NEXT: lbu s5, 10(a0) 5548; RV64I-NEXT: lbu s6, 11(a0) 5549; RV64I-NEXT: lbu s7, 12(a0) 5550; RV64I-NEXT: lbu s11, 13(a0) 5551; RV64I-NEXT: lbu t4, 14(a0) 5552; RV64I-NEXT: lbu t5, 15(a0) 5553; RV64I-NEXT: lbu a3, 16(a0) 5554; RV64I-NEXT: lbu a6, 17(a0) 5555; RV64I-NEXT: lbu t2, 18(a0) 5556; RV64I-NEXT: lbu t3, 19(a0) 5557; RV64I-NEXT: lbu a4, 20(a0) 5558; RV64I-NEXT: lbu t6, 21(a0) 5559; RV64I-NEXT: lbu s0, 22(a0) 5560; RV64I-NEXT: lbu s1, 23(a0) 5561; RV64I-NEXT: slli a7, a7, 8 5562; RV64I-NEXT: slli t1, t1, 16 5563; RV64I-NEXT: slli s3, s3, 24 5564; RV64I-NEXT: slli s8, s8, 8 5565; RV64I-NEXT: slli s9, s9, 16 5566; RV64I-NEXT: slli s10, s10, 24 5567; RV64I-NEXT: or a5, a7, a5 5568; RV64I-NEXT: or a7, s3, t1 5569; RV64I-NEXT: or t0, s8, t0 5570; RV64I-NEXT: or t1, s10, s9 5571; RV64I-NEXT: lbu s3, 24(a0) 5572; RV64I-NEXT: lbu s8, 25(a0) 5573; RV64I-NEXT: lbu s9, 26(a0) 5574; RV64I-NEXT: lbu s10, 27(a0) 5575; RV64I-NEXT: slli s4, s4, 8 5576; RV64I-NEXT: slli s5, s5, 16 5577; RV64I-NEXT: slli s6, s6, 24 5578; RV64I-NEXT: slli s11, s11, 8 5579; RV64I-NEXT: or s2, s4, s2 5580; RV64I-NEXT: or s4, s6, s5 5581; RV64I-NEXT: or s5, s11, s7 5582; RV64I-NEXT: lbu s6, 28(a0) 5583; RV64I-NEXT: lbu s7, 29(a0) 5584; RV64I-NEXT: lbu s11, 30(a0) 5585; RV64I-NEXT: lbu a0, 31(a0) 5586; RV64I-NEXT: lbu a1, 0(a1) 5587; RV64I-NEXT: slli t4, t4, 16 5588; RV64I-NEXT: slli t5, t5, 24 5589; RV64I-NEXT: or t4, t5, t4 5590; RV64I-NEXT: mv t5, sp 5591; RV64I-NEXT: slli a6, a6, 8 5592; RV64I-NEXT: slli t2, t2, 16 5593; RV64I-NEXT: slli t3, t3, 24 5594; RV64I-NEXT: slli t6, t6, 8 5595; RV64I-NEXT: slli s0, s0, 16 5596; RV64I-NEXT: slli s1, s1, 24 5597; RV64I-NEXT: slli s8, s8, 8 5598; RV64I-NEXT: slli s9, s9, 16 5599; RV64I-NEXT: slli s10, s10, 24 5600; RV64I-NEXT: slli s7, s7, 8 5601; RV64I-NEXT: slli s11, s11, 16 5602; RV64I-NEXT: slli a0, a0, 24 5603; RV64I-NEXT: slli a1, a1, 3 5604; RV64I-NEXT: or a3, a6, a3 5605; RV64I-NEXT: or a6, t3, t2 5606; RV64I-NEXT: or a4, t6, a4 5607; RV64I-NEXT: or s0, s1, s0 5608; RV64I-NEXT: or t2, s8, s3 5609; RV64I-NEXT: or t3, s10, s9 5610; RV64I-NEXT: or t6, s7, s6 5611; RV64I-NEXT: or a0, a0, s11 5612; RV64I-NEXT: andi a1, a1, 24 5613; RV64I-NEXT: or a5, a7, a5 5614; RV64I-NEXT: or a7, t1, t0 5615; RV64I-NEXT: or t0, s4, s2 5616; RV64I-NEXT: or t1, t4, s5 5617; RV64I-NEXT: or a3, a6, a3 5618; RV64I-NEXT: or a4, s0, a4 5619; RV64I-NEXT: or a6, t3, t2 5620; RV64I-NEXT: or a0, a0, t6 5621; RV64I-NEXT: add t5, t5, a1 5622; RV64I-NEXT: slli a7, a7, 32 5623; RV64I-NEXT: slli t1, t1, 32 5624; RV64I-NEXT: slli a4, a4, 32 5625; RV64I-NEXT: slli a1, a0, 32 5626; RV64I-NEXT: sraiw a0, a0, 31 5627; RV64I-NEXT: or a5, a7, a5 5628; RV64I-NEXT: or a7, t1, t0 5629; RV64I-NEXT: or a3, a4, a3 5630; RV64I-NEXT: or a1, a1, a6 5631; RV64I-NEXT: sd a0, 32(sp) 5632; RV64I-NEXT: sd a0, 40(sp) 5633; RV64I-NEXT: sd a0, 48(sp) 5634; RV64I-NEXT: sd a0, 56(sp) 5635; RV64I-NEXT: sd a5, 0(sp) 5636; RV64I-NEXT: sd a7, 8(sp) 5637; RV64I-NEXT: sd a3, 16(sp) 5638; RV64I-NEXT: sd a1, 24(sp) 5639; RV64I-NEXT: ld a4, 16(t5) 5640; RV64I-NEXT: ld a0, 8(t5) 5641; RV64I-NEXT: ld a1, 0(t5) 5642; RV64I-NEXT: ld a3, 24(t5) 5643; RV64I-NEXT: srli a5, a4, 56 5644; RV64I-NEXT: srli a6, a4, 48 5645; RV64I-NEXT: srli a7, a4, 40 5646; RV64I-NEXT: srli t0, a4, 32 5647; RV64I-NEXT: srli t1, a4, 24 5648; RV64I-NEXT: srli t2, a4, 16 5649; RV64I-NEXT: srli t3, a4, 8 5650; RV64I-NEXT: srli t4, a3, 56 5651; RV64I-NEXT: srli t5, a3, 48 5652; RV64I-NEXT: srli t6, a3, 40 5653; RV64I-NEXT: srli s0, a3, 32 5654; RV64I-NEXT: srli s1, a3, 24 5655; RV64I-NEXT: srli s2, a3, 16 5656; RV64I-NEXT: srli s3, a3, 8 5657; RV64I-NEXT: srli s4, a1, 56 5658; RV64I-NEXT: srli s5, a1, 48 5659; RV64I-NEXT: srli s6, a1, 40 5660; RV64I-NEXT: srli s7, a1, 32 5661; RV64I-NEXT: srli s8, a1, 24 5662; RV64I-NEXT: srli s9, a1, 16 5663; RV64I-NEXT: srli s10, a1, 8 5664; RV64I-NEXT: srli s11, a0, 56 5665; RV64I-NEXT: sb t0, 20(a2) 5666; RV64I-NEXT: sb a7, 21(a2) 5667; RV64I-NEXT: sb a6, 22(a2) 5668; RV64I-NEXT: sb a5, 23(a2) 5669; RV64I-NEXT: srli a5, a0, 48 5670; RV64I-NEXT: sb a4, 16(a2) 5671; RV64I-NEXT: sb t3, 17(a2) 5672; RV64I-NEXT: sb t2, 18(a2) 5673; RV64I-NEXT: sb t1, 19(a2) 5674; RV64I-NEXT: srli a4, a0, 40 5675; RV64I-NEXT: sb s0, 28(a2) 5676; RV64I-NEXT: sb t6, 29(a2) 5677; RV64I-NEXT: sb t5, 30(a2) 5678; RV64I-NEXT: sb t4, 31(a2) 5679; RV64I-NEXT: srli a6, a0, 32 5680; RV64I-NEXT: sb a3, 24(a2) 5681; RV64I-NEXT: sb s3, 25(a2) 5682; RV64I-NEXT: sb s2, 26(a2) 5683; RV64I-NEXT: sb s1, 27(a2) 5684; RV64I-NEXT: srli a3, a0, 24 5685; RV64I-NEXT: sb s7, 4(a2) 5686; RV64I-NEXT: sb s6, 5(a2) 5687; RV64I-NEXT: sb s5, 6(a2) 5688; RV64I-NEXT: sb s4, 7(a2) 5689; RV64I-NEXT: srli a7, a0, 16 5690; RV64I-NEXT: sb a1, 0(a2) 5691; RV64I-NEXT: sb s10, 1(a2) 5692; RV64I-NEXT: sb s9, 2(a2) 5693; RV64I-NEXT: sb s8, 3(a2) 5694; RV64I-NEXT: srli a1, a0, 8 5695; RV64I-NEXT: sb a6, 12(a2) 5696; RV64I-NEXT: sb a4, 13(a2) 5697; RV64I-NEXT: sb a5, 14(a2) 5698; RV64I-NEXT: sb s11, 15(a2) 5699; RV64I-NEXT: sb a0, 8(a2) 5700; RV64I-NEXT: sb a1, 9(a2) 5701; RV64I-NEXT: sb a7, 10(a2) 5702; RV64I-NEXT: sb a3, 11(a2) 5703; RV64I-NEXT: ld s0, 152(sp) # 8-byte Folded Reload 5704; RV64I-NEXT: ld s1, 144(sp) # 8-byte Folded Reload 5705; RV64I-NEXT: ld s2, 136(sp) # 8-byte Folded Reload 5706; RV64I-NEXT: ld s3, 128(sp) # 8-byte Folded Reload 5707; RV64I-NEXT: ld s4, 120(sp) # 8-byte Folded Reload 5708; RV64I-NEXT: ld s5, 112(sp) # 8-byte Folded Reload 5709; RV64I-NEXT: ld s6, 104(sp) # 8-byte Folded Reload 5710; RV64I-NEXT: ld s7, 96(sp) # 8-byte Folded Reload 5711; RV64I-NEXT: ld s8, 88(sp) # 8-byte Folded Reload 5712; RV64I-NEXT: ld s9, 80(sp) # 8-byte Folded Reload 5713; RV64I-NEXT: ld s10, 72(sp) # 8-byte Folded Reload 5714; RV64I-NEXT: ld s11, 64(sp) # 8-byte Folded Reload 5715; RV64I-NEXT: addi sp, sp, 160 5716; RV64I-NEXT: ret 5717; 5718; RV32I-LABEL: ashr_32bytes_dwordOff: 5719; RV32I: # %bb.0: 5720; RV32I-NEXT: addi sp, sp, -128 5721; RV32I-NEXT: sw ra, 124(sp) # 4-byte Folded Spill 5722; RV32I-NEXT: sw s0, 120(sp) # 4-byte Folded Spill 5723; RV32I-NEXT: sw s1, 116(sp) # 4-byte Folded Spill 5724; RV32I-NEXT: sw s2, 112(sp) # 4-byte Folded Spill 5725; RV32I-NEXT: sw s3, 108(sp) # 4-byte Folded Spill 5726; RV32I-NEXT: sw s4, 104(sp) # 4-byte Folded Spill 5727; RV32I-NEXT: sw s5, 100(sp) # 4-byte Folded Spill 5728; RV32I-NEXT: sw s6, 96(sp) # 4-byte Folded Spill 5729; RV32I-NEXT: sw s7, 92(sp) # 4-byte Folded Spill 5730; RV32I-NEXT: sw s8, 88(sp) # 4-byte Folded Spill 5731; RV32I-NEXT: sw s9, 84(sp) # 4-byte Folded Spill 5732; RV32I-NEXT: sw s10, 80(sp) # 4-byte Folded Spill 5733; RV32I-NEXT: sw s11, 76(sp) # 4-byte Folded Spill 5734; RV32I-NEXT: lbu a6, 0(a0) 5735; RV32I-NEXT: lbu t0, 1(a0) 5736; RV32I-NEXT: lbu t1, 2(a0) 5737; RV32I-NEXT: lbu t6, 3(a0) 5738; RV32I-NEXT: lbu s7, 4(a0) 5739; RV32I-NEXT: lbu s8, 5(a0) 5740; RV32I-NEXT: lbu s3, 6(a0) 5741; RV32I-NEXT: lbu s5, 7(a0) 5742; RV32I-NEXT: lbu s4, 8(a0) 5743; RV32I-NEXT: lbu s9, 9(a0) 5744; RV32I-NEXT: lbu s10, 10(a0) 5745; RV32I-NEXT: lbu s11, 11(a0) 5746; RV32I-NEXT: lbu s2, 12(a0) 5747; RV32I-NEXT: lbu s6, 13(a0) 5748; RV32I-NEXT: lbu a5, 14(a0) 5749; RV32I-NEXT: lbu a7, 15(a0) 5750; RV32I-NEXT: lbu a3, 16(a0) 5751; RV32I-NEXT: lbu t2, 17(a0) 5752; RV32I-NEXT: lbu t3, 18(a0) 5753; RV32I-NEXT: lbu t4, 19(a0) 5754; RV32I-NEXT: lbu a4, 20(a0) 5755; RV32I-NEXT: lbu t5, 21(a0) 5756; RV32I-NEXT: lbu s0, 22(a0) 5757; RV32I-NEXT: lbu s1, 23(a0) 5758; RV32I-NEXT: slli t0, t0, 8 5759; RV32I-NEXT: slli t1, t1, 16 5760; RV32I-NEXT: slli t6, t6, 24 5761; RV32I-NEXT: slli s8, s8, 8 5762; RV32I-NEXT: or a6, t0, a6 5763; RV32I-NEXT: or t0, t6, t1 5764; RV32I-NEXT: or t1, s8, s7 5765; RV32I-NEXT: lbu t6, 24(a0) 5766; RV32I-NEXT: lbu s7, 25(a0) 5767; RV32I-NEXT: lbu s8, 26(a0) 5768; RV32I-NEXT: lbu ra, 27(a0) 5769; RV32I-NEXT: slli s3, s3, 16 5770; RV32I-NEXT: slli s5, s5, 24 5771; RV32I-NEXT: slli s9, s9, 8 5772; RV32I-NEXT: slli s10, s10, 16 5773; RV32I-NEXT: slli s11, s11, 24 5774; RV32I-NEXT: or s3, s5, s3 5775; RV32I-NEXT: or s4, s9, s4 5776; RV32I-NEXT: or s5, s11, s10 5777; RV32I-NEXT: lbu s9, 28(a0) 5778; RV32I-NEXT: lbu s10, 29(a0) 5779; RV32I-NEXT: lbu s11, 30(a0) 5780; RV32I-NEXT: lbu a0, 31(a0) 5781; RV32I-NEXT: lbu a1, 0(a1) 5782; RV32I-NEXT: slli s6, s6, 8 5783; RV32I-NEXT: or s2, s6, s2 5784; RV32I-NEXT: addi s6, sp, 8 5785; RV32I-NEXT: slli a5, a5, 16 5786; RV32I-NEXT: slli a7, a7, 24 5787; RV32I-NEXT: slli t2, t2, 8 5788; RV32I-NEXT: slli t3, t3, 16 5789; RV32I-NEXT: slli t4, t4, 24 5790; RV32I-NEXT: slli t5, t5, 8 5791; RV32I-NEXT: slli s0, s0, 16 5792; RV32I-NEXT: slli s1, s1, 24 5793; RV32I-NEXT: slli s7, s7, 8 5794; RV32I-NEXT: slli s8, s8, 16 5795; RV32I-NEXT: slli ra, ra, 24 5796; RV32I-NEXT: slli s10, s10, 8 5797; RV32I-NEXT: slli s11, s11, 16 5798; RV32I-NEXT: slli a0, a0, 24 5799; RV32I-NEXT: slli a1, a1, 3 5800; RV32I-NEXT: or a5, a7, a5 5801; RV32I-NEXT: or a3, t2, a3 5802; RV32I-NEXT: or a7, t4, t3 5803; RV32I-NEXT: or a4, t5, a4 5804; RV32I-NEXT: or s0, s1, s0 5805; RV32I-NEXT: or t2, s7, t6 5806; RV32I-NEXT: or t3, ra, s8 5807; RV32I-NEXT: or t4, s10, s9 5808; RV32I-NEXT: or t5, a0, s11 5809; RV32I-NEXT: srai a0, a0, 31 5810; RV32I-NEXT: andi a1, a1, 24 5811; RV32I-NEXT: or a6, t0, a6 5812; RV32I-NEXT: or t0, s3, t1 5813; RV32I-NEXT: or t1, s5, s4 5814; RV32I-NEXT: or a5, a5, s2 5815; RV32I-NEXT: or a3, a7, a3 5816; RV32I-NEXT: or a4, s0, a4 5817; RV32I-NEXT: or a7, t3, t2 5818; RV32I-NEXT: or t2, t5, t4 5819; RV32I-NEXT: sw a0, 56(sp) 5820; RV32I-NEXT: sw a0, 60(sp) 5821; RV32I-NEXT: sw a0, 64(sp) 5822; RV32I-NEXT: sw a0, 68(sp) 5823; RV32I-NEXT: sw a0, 40(sp) 5824; RV32I-NEXT: sw a0, 44(sp) 5825; RV32I-NEXT: sw a0, 48(sp) 5826; RV32I-NEXT: sw a0, 52(sp) 5827; RV32I-NEXT: add s6, s6, a1 5828; RV32I-NEXT: sw a3, 24(sp) 5829; RV32I-NEXT: sw a4, 28(sp) 5830; RV32I-NEXT: sw a7, 32(sp) 5831; RV32I-NEXT: sw t2, 36(sp) 5832; RV32I-NEXT: sw a6, 8(sp) 5833; RV32I-NEXT: sw t0, 12(sp) 5834; RV32I-NEXT: sw t1, 16(sp) 5835; RV32I-NEXT: sw a5, 20(sp) 5836; RV32I-NEXT: lw a6, 16(s6) 5837; RV32I-NEXT: lw a5, 20(s6) 5838; RV32I-NEXT: lw a7, 24(s6) 5839; RV32I-NEXT: lw a1, 0(s6) 5840; RV32I-NEXT: lw a0, 4(s6) 5841; RV32I-NEXT: lw a4, 8(s6) 5842; RV32I-NEXT: lw a3, 12(s6) 5843; RV32I-NEXT: lw t0, 28(s6) 5844; RV32I-NEXT: srli t1, a7, 24 5845; RV32I-NEXT: srli t2, a7, 16 5846; RV32I-NEXT: srli t3, a7, 8 5847; RV32I-NEXT: srli t4, t0, 24 5848; RV32I-NEXT: srli t5, t0, 16 5849; RV32I-NEXT: srli t6, t0, 8 5850; RV32I-NEXT: srli s0, a6, 24 5851; RV32I-NEXT: srli s1, a6, 16 5852; RV32I-NEXT: srli s2, a6, 8 5853; RV32I-NEXT: srli s3, a5, 24 5854; RV32I-NEXT: srli s4, a5, 16 5855; RV32I-NEXT: srli s5, a5, 8 5856; RV32I-NEXT: srli s6, a4, 24 5857; RV32I-NEXT: srli s7, a4, 16 5858; RV32I-NEXT: srli s8, a4, 8 5859; RV32I-NEXT: srli s9, a3, 24 5860; RV32I-NEXT: srli s10, a3, 16 5861; RV32I-NEXT: srli s11, a3, 8 5862; RV32I-NEXT: srli ra, a1, 24 5863; RV32I-NEXT: sb a7, 24(a2) 5864; RV32I-NEXT: sb t3, 25(a2) 5865; RV32I-NEXT: sb t2, 26(a2) 5866; RV32I-NEXT: sb t1, 27(a2) 5867; RV32I-NEXT: srli a7, a1, 16 5868; RV32I-NEXT: sb t0, 28(a2) 5869; RV32I-NEXT: sb t6, 29(a2) 5870; RV32I-NEXT: sb t5, 30(a2) 5871; RV32I-NEXT: sb t4, 31(a2) 5872; RV32I-NEXT: srli t0, a1, 8 5873; RV32I-NEXT: sb a6, 16(a2) 5874; RV32I-NEXT: sb s2, 17(a2) 5875; RV32I-NEXT: sb s1, 18(a2) 5876; RV32I-NEXT: sb s0, 19(a2) 5877; RV32I-NEXT: srli a6, a0, 24 5878; RV32I-NEXT: sb a5, 20(a2) 5879; RV32I-NEXT: sb s5, 21(a2) 5880; RV32I-NEXT: sb s4, 22(a2) 5881; RV32I-NEXT: sb s3, 23(a2) 5882; RV32I-NEXT: srli a5, a0, 16 5883; RV32I-NEXT: sb a4, 8(a2) 5884; RV32I-NEXT: sb s8, 9(a2) 5885; RV32I-NEXT: sb s7, 10(a2) 5886; RV32I-NEXT: sb s6, 11(a2) 5887; RV32I-NEXT: srli a4, a0, 8 5888; RV32I-NEXT: sb a3, 12(a2) 5889; RV32I-NEXT: sb s11, 13(a2) 5890; RV32I-NEXT: sb s10, 14(a2) 5891; RV32I-NEXT: sb s9, 15(a2) 5892; RV32I-NEXT: sb a1, 0(a2) 5893; RV32I-NEXT: sb t0, 1(a2) 5894; RV32I-NEXT: sb a7, 2(a2) 5895; RV32I-NEXT: sb ra, 3(a2) 5896; RV32I-NEXT: sb a0, 4(a2) 5897; RV32I-NEXT: sb a4, 5(a2) 5898; RV32I-NEXT: sb a5, 6(a2) 5899; RV32I-NEXT: sb a6, 7(a2) 5900; RV32I-NEXT: lw ra, 124(sp) # 4-byte Folded Reload 5901; RV32I-NEXT: lw s0, 120(sp) # 4-byte Folded Reload 5902; RV32I-NEXT: lw s1, 116(sp) # 4-byte Folded Reload 5903; RV32I-NEXT: lw s2, 112(sp) # 4-byte Folded Reload 5904; RV32I-NEXT: lw s3, 108(sp) # 4-byte Folded Reload 5905; RV32I-NEXT: lw s4, 104(sp) # 4-byte Folded Reload 5906; RV32I-NEXT: lw s5, 100(sp) # 4-byte Folded Reload 5907; RV32I-NEXT: lw s6, 96(sp) # 4-byte Folded Reload 5908; RV32I-NEXT: lw s7, 92(sp) # 4-byte Folded Reload 5909; RV32I-NEXT: lw s8, 88(sp) # 4-byte Folded Reload 5910; RV32I-NEXT: lw s9, 84(sp) # 4-byte Folded Reload 5911; RV32I-NEXT: lw s10, 80(sp) # 4-byte Folded Reload 5912; RV32I-NEXT: lw s11, 76(sp) # 4-byte Folded Reload 5913; RV32I-NEXT: addi sp, sp, 128 5914; RV32I-NEXT: ret 5915 %src = load i256, ptr %src.ptr, align 1 5916 %dwordOff = load i256, ptr %dwordOff.ptr, align 1 5917 %bitOff = shl i256 %dwordOff, 6 5918 %res = ashr i256 %src, %bitOff 5919 store i256 %res, ptr %dst, align 1 5920 ret void 5921} 5922