2729 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=riscv64 -verify-machineinstrs < %s | FileCheck %s -check-prefixes=RV64I3; RUN: llc -mtriple=riscv32 -verify-machineinstrs < %s | FileCheck %s -check-prefixes=RV32I4 5define void @lshr_4bytes(ptr %src.ptr, ptr %bitOff.ptr, ptr %dst) nounwind {6; RV64I-LABEL: lshr_4bytes:7; RV64I: # %bb.0:8; RV64I-NEXT: lbu a3, 1(a0)9; RV64I-NEXT: lbu a4, 0(a0)10; RV64I-NEXT: lbu a5, 2(a0)11; RV64I-NEXT: lb a0, 3(a0)12; RV64I-NEXT: slli a3, a3, 813; RV64I-NEXT: or a3, a3, a414; RV64I-NEXT: lbu a1, 0(a1)15; RV64I-NEXT: slli a5, a5, 1616; RV64I-NEXT: slli a0, a0, 2417; RV64I-NEXT: or a0, a0, a518; RV64I-NEXT: or a0, a0, a319; RV64I-NEXT: srlw a0, a0, a120; RV64I-NEXT: srli a1, a0, 1621; RV64I-NEXT: srli a3, a0, 2422; RV64I-NEXT: srli a4, a0, 823; RV64I-NEXT: sb a0, 0(a2)24; RV64I-NEXT: sb a4, 1(a2)25; RV64I-NEXT: sb a1, 2(a2)26; RV64I-NEXT: sb a3, 3(a2)27; RV64I-NEXT: ret28;29; RV32I-LABEL: lshr_4bytes:30; RV32I: # %bb.0:31; RV32I-NEXT: lbu a3, 1(a0)32; RV32I-NEXT: lbu a4, 2(a0)33; RV32I-NEXT: lbu a5, 3(a0)34; RV32I-NEXT: lbu a0, 0(a0)35; RV32I-NEXT: slli a3, a3, 836; RV32I-NEXT: slli a4, a4, 1637; RV32I-NEXT: slli a5, a5, 2438; RV32I-NEXT: or a0, a3, a039; RV32I-NEXT: or a4, a5, a440; RV32I-NEXT: lbu a3, 1(a1)41; RV32I-NEXT: lbu a5, 0(a1)42; RV32I-NEXT: lbu a6, 2(a1)43; RV32I-NEXT: lbu a1, 3(a1)44; RV32I-NEXT: slli a3, a3, 845; RV32I-NEXT: or a3, a3, a546; RV32I-NEXT: slli a6, a6, 1647; RV32I-NEXT: slli a1, a1, 2448; RV32I-NEXT: or a1, a1, a649; RV32I-NEXT: or a0, a4, a050; RV32I-NEXT: or a1, a1, a351; RV32I-NEXT: srl a0, a0, a152; RV32I-NEXT: srli a1, a0, 1653; RV32I-NEXT: srli a3, a0, 2454; RV32I-NEXT: srli a4, a0, 855; RV32I-NEXT: sb a0, 0(a2)56; RV32I-NEXT: sb a4, 1(a2)57; RV32I-NEXT: sb a1, 2(a2)58; RV32I-NEXT: sb a3, 3(a2)59; RV32I-NEXT: ret60 %src = load i32, ptr %src.ptr, align 161 %bitOff = load i32, ptr %bitOff.ptr, align 162 %res = lshr i32 %src, %bitOff63 store i32 %res, ptr %dst, align 164 ret void65}66define void @shl_4bytes(ptr %src.ptr, ptr %bitOff.ptr, ptr %dst) nounwind {67; RV64I-LABEL: shl_4bytes:68; RV64I: # %bb.0:69; RV64I-NEXT: lbu a3, 1(a0)70; RV64I-NEXT: lbu a4, 0(a0)71; RV64I-NEXT: lbu a5, 2(a0)72; RV64I-NEXT: lb a0, 3(a0)73; RV64I-NEXT: slli a3, a3, 874; RV64I-NEXT: or a3, a3, a475; RV64I-NEXT: lbu a1, 0(a1)76; RV64I-NEXT: slli a5, a5, 1677; RV64I-NEXT: slli a0, a0, 2478; RV64I-NEXT: or a0, a0, a579; RV64I-NEXT: or a0, a0, a380; RV64I-NEXT: sllw a0, a0, a181; RV64I-NEXT: srli a1, a0, 1682; RV64I-NEXT: srli a3, a0, 2483; RV64I-NEXT: srli a4, a0, 884; RV64I-NEXT: sb a0, 0(a2)85; RV64I-NEXT: sb a4, 1(a2)86; RV64I-NEXT: sb a1, 2(a2)87; RV64I-NEXT: sb a3, 3(a2)88; RV64I-NEXT: ret89;90; RV32I-LABEL: shl_4bytes:91; RV32I: # %bb.0:92; RV32I-NEXT: lbu a3, 1(a0)93; RV32I-NEXT: lbu a4, 2(a0)94; RV32I-NEXT: lbu a5, 3(a0)95; RV32I-NEXT: lbu a0, 0(a0)96; RV32I-NEXT: slli a3, a3, 897; RV32I-NEXT: slli a4, a4, 1698; RV32I-NEXT: slli a5, a5, 2499; RV32I-NEXT: or a0, a3, a0100; RV32I-NEXT: or a4, a5, a4101; RV32I-NEXT: lbu a3, 1(a1)102; RV32I-NEXT: lbu a5, 0(a1)103; RV32I-NEXT: lbu a6, 2(a1)104; RV32I-NEXT: lbu a1, 3(a1)105; RV32I-NEXT: slli a3, a3, 8106; RV32I-NEXT: or a3, a3, a5107; RV32I-NEXT: slli a6, a6, 16108; RV32I-NEXT: slli a1, a1, 24109; RV32I-NEXT: or a1, a1, a6110; RV32I-NEXT: or a0, a4, a0111; RV32I-NEXT: or a1, a1, a3112; RV32I-NEXT: sll a0, a0, a1113; RV32I-NEXT: srli a1, a0, 16114; RV32I-NEXT: srli a3, a0, 24115; RV32I-NEXT: srli a4, a0, 8116; RV32I-NEXT: sb a0, 0(a2)117; RV32I-NEXT: sb a4, 1(a2)118; RV32I-NEXT: sb a1, 2(a2)119; RV32I-NEXT: sb a3, 3(a2)120; RV32I-NEXT: ret121 %src = load i32, ptr %src.ptr, align 1122 %bitOff = load i32, ptr %bitOff.ptr, align 1123 %res = shl i32 %src, %bitOff124 store i32 %res, ptr %dst, align 1125 ret void126}127define void @ashr_4bytes(ptr %src.ptr, ptr %bitOff.ptr, ptr %dst) nounwind {128; RV64I-LABEL: ashr_4bytes:129; RV64I: # %bb.0:130; RV64I-NEXT: lbu a3, 1(a0)131; RV64I-NEXT: lbu a4, 0(a0)132; RV64I-NEXT: lbu a5, 2(a0)133; RV64I-NEXT: lb a0, 3(a0)134; RV64I-NEXT: slli a3, a3, 8135; RV64I-NEXT: or a3, a3, a4136; RV64I-NEXT: lbu a1, 0(a1)137; RV64I-NEXT: slli a5, a5, 16138; RV64I-NEXT: slli a0, a0, 24139; RV64I-NEXT: or a0, a0, a5140; RV64I-NEXT: or a0, a0, a3141; RV64I-NEXT: sraw a0, a0, a1142; RV64I-NEXT: srli a1, a0, 16143; RV64I-NEXT: srli a3, a0, 24144; RV64I-NEXT: srli a4, a0, 8145; RV64I-NEXT: sb a0, 0(a2)146; RV64I-NEXT: sb a4, 1(a2)147; RV64I-NEXT: sb a1, 2(a2)148; RV64I-NEXT: sb a3, 3(a2)149; RV64I-NEXT: ret150;151; RV32I-LABEL: ashr_4bytes:152; RV32I: # %bb.0:153; RV32I-NEXT: lbu a3, 1(a0)154; RV32I-NEXT: lbu a4, 2(a0)155; RV32I-NEXT: lbu a5, 3(a0)156; RV32I-NEXT: lbu a0, 0(a0)157; RV32I-NEXT: slli a3, a3, 8158; RV32I-NEXT: slli a4, a4, 16159; RV32I-NEXT: slli a5, a5, 24160; RV32I-NEXT: or a0, a3, a0161; RV32I-NEXT: or a4, a5, a4162; RV32I-NEXT: lbu a3, 1(a1)163; RV32I-NEXT: lbu a5, 0(a1)164; RV32I-NEXT: lbu a6, 2(a1)165; RV32I-NEXT: lbu a1, 3(a1)166; RV32I-NEXT: slli a3, a3, 8167; RV32I-NEXT: or a3, a3, a5168; RV32I-NEXT: slli a6, a6, 16169; RV32I-NEXT: slli a1, a1, 24170; RV32I-NEXT: or a1, a1, a6171; RV32I-NEXT: or a0, a4, a0172; RV32I-NEXT: or a1, a1, a3173; RV32I-NEXT: sra a0, a0, a1174; RV32I-NEXT: srli a1, a0, 16175; RV32I-NEXT: srli a3, a0, 24176; RV32I-NEXT: srli a4, a0, 8177; RV32I-NEXT: sb a0, 0(a2)178; RV32I-NEXT: sb a4, 1(a2)179; RV32I-NEXT: sb a1, 2(a2)180; RV32I-NEXT: sb a3, 3(a2)181; RV32I-NEXT: ret182 %src = load i32, ptr %src.ptr, align 1183 %bitOff = load i32, ptr %bitOff.ptr, align 1184 %res = ashr i32 %src, %bitOff185 store i32 %res, ptr %dst, align 1186 ret void187}188 189define void @lshr_8bytes(ptr %src.ptr, ptr %bitOff.ptr, ptr %dst) nounwind {190; RV64I-LABEL: lshr_8bytes:191; RV64I: # %bb.0:192; RV64I-NEXT: lbu a3, 0(a0)193; RV64I-NEXT: lbu a4, 1(a0)194; RV64I-NEXT: lbu a5, 2(a0)195; RV64I-NEXT: lbu a6, 3(a0)196; RV64I-NEXT: lbu a7, 4(a0)197; RV64I-NEXT: lbu t0, 5(a0)198; RV64I-NEXT: lbu t1, 6(a0)199; RV64I-NEXT: lbu a0, 7(a0)200; RV64I-NEXT: slli a4, a4, 8201; RV64I-NEXT: slli a5, a5, 16202; RV64I-NEXT: slli a6, a6, 24203; RV64I-NEXT: slli t0, t0, 8204; RV64I-NEXT: or a3, a4, a3205; RV64I-NEXT: or a4, a6, a5206; RV64I-NEXT: or a5, t0, a7207; RV64I-NEXT: lbu a6, 0(a1)208; RV64I-NEXT: lbu a7, 1(a1)209; RV64I-NEXT: lbu t0, 2(a1)210; RV64I-NEXT: lbu t2, 3(a1)211; RV64I-NEXT: slli t1, t1, 16212; RV64I-NEXT: slli a0, a0, 24213; RV64I-NEXT: slli a7, a7, 8214; RV64I-NEXT: slli t0, t0, 16215; RV64I-NEXT: slli t2, t2, 24216; RV64I-NEXT: or a0, a0, t1217; RV64I-NEXT: or a6, a7, a6218; RV64I-NEXT: or a7, t2, t0219; RV64I-NEXT: lbu t0, 5(a1)220; RV64I-NEXT: lbu t1, 4(a1)221; RV64I-NEXT: lbu t2, 6(a1)222; RV64I-NEXT: lbu a1, 7(a1)223; RV64I-NEXT: slli t0, t0, 8224; RV64I-NEXT: or t0, t0, t1225; RV64I-NEXT: slli t2, t2, 16226; RV64I-NEXT: slli a1, a1, 24227; RV64I-NEXT: or a1, a1, t2228; RV64I-NEXT: or a3, a4, a3229; RV64I-NEXT: or a0, a0, a5230; RV64I-NEXT: or a4, a7, a6231; RV64I-NEXT: or a1, a1, t0232; RV64I-NEXT: slli a0, a0, 32233; RV64I-NEXT: slli a1, a1, 32234; RV64I-NEXT: or a0, a0, a3235; RV64I-NEXT: or a1, a1, a4236; RV64I-NEXT: srl a0, a0, a1237; RV64I-NEXT: srli a1, a0, 48238; RV64I-NEXT: srli a3, a0, 56239; RV64I-NEXT: srli a4, a0, 32240; RV64I-NEXT: srli a5, a0, 40241; RV64I-NEXT: srli a6, a0, 16242; RV64I-NEXT: srli a7, a0, 24243; RV64I-NEXT: srli t0, a0, 8244; RV64I-NEXT: sb a4, 4(a2)245; RV64I-NEXT: sb a5, 5(a2)246; RV64I-NEXT: sb a1, 6(a2)247; RV64I-NEXT: sb a3, 7(a2)248; RV64I-NEXT: sb a0, 0(a2)249; RV64I-NEXT: sb t0, 1(a2)250; RV64I-NEXT: sb a6, 2(a2)251; RV64I-NEXT: sb a7, 3(a2)252; RV64I-NEXT: ret253;254; RV32I-LABEL: lshr_8bytes:255; RV32I: # %bb.0:256; RV32I-NEXT: lbu a3, 5(a0)257; RV32I-NEXT: lbu a4, 6(a0)258; RV32I-NEXT: lbu a5, 7(a0)259; RV32I-NEXT: lbu a6, 4(a0)260; RV32I-NEXT: slli a3, a3, 8261; RV32I-NEXT: slli a4, a4, 16262; RV32I-NEXT: slli a5, a5, 24263; RV32I-NEXT: or a3, a3, a6264; RV32I-NEXT: or a4, a5, a4265; RV32I-NEXT: lbu a5, 1(a1)266; RV32I-NEXT: lbu a6, 0(a1)267; RV32I-NEXT: lbu a7, 2(a1)268; RV32I-NEXT: lbu a1, 3(a1)269; RV32I-NEXT: slli a5, a5, 8270; RV32I-NEXT: or a6, a5, a6271; RV32I-NEXT: slli a7, a7, 16272; RV32I-NEXT: slli a1, a1, 24273; RV32I-NEXT: or a1, a1, a7274; RV32I-NEXT: or a5, a4, a3275; RV32I-NEXT: or a4, a1, a6276; RV32I-NEXT: addi a3, a4, -32277; RV32I-NEXT: srl a1, a5, a4278; RV32I-NEXT: bltz a3, .LBB3_2279; RV32I-NEXT: # %bb.1:280; RV32I-NEXT: mv a0, a1281; RV32I-NEXT: j .LBB3_3282; RV32I-NEXT: .LBB3_2:283; RV32I-NEXT: lbu a6, 1(a0)284; RV32I-NEXT: lbu a7, 0(a0)285; RV32I-NEXT: lbu t0, 2(a0)286; RV32I-NEXT: lbu a0, 3(a0)287; RV32I-NEXT: slli a6, a6, 8288; RV32I-NEXT: or a6, a6, a7289; RV32I-NEXT: slli t0, t0, 16290; RV32I-NEXT: slli a0, a0, 24291; RV32I-NEXT: or a0, a0, t0292; RV32I-NEXT: not a7, a4293; RV32I-NEXT: slli a5, a5, 1294; RV32I-NEXT: or a0, a0, a6295; RV32I-NEXT: srl a0, a0, a4296; RV32I-NEXT: sll a4, a5, a7297; RV32I-NEXT: or a0, a0, a4298; RV32I-NEXT: .LBB3_3:299; RV32I-NEXT: srai a3, a3, 31300; RV32I-NEXT: srli a4, a0, 16301; RV32I-NEXT: srli a5, a0, 24302; RV32I-NEXT: and a1, a3, a1303; RV32I-NEXT: srli a3, a1, 16304; RV32I-NEXT: srli a6, a1, 24305; RV32I-NEXT: srli a7, a1, 8306; RV32I-NEXT: sb a1, 4(a2)307; RV32I-NEXT: sb a7, 5(a2)308; RV32I-NEXT: sb a3, 6(a2)309; RV32I-NEXT: sb a6, 7(a2)310; RV32I-NEXT: srli a1, a0, 8311; RV32I-NEXT: sb a0, 0(a2)312; RV32I-NEXT: sb a1, 1(a2)313; RV32I-NEXT: sb a4, 2(a2)314; RV32I-NEXT: sb a5, 3(a2)315; RV32I-NEXT: ret316 %src = load i64, ptr %src.ptr, align 1317 %bitOff = load i64, ptr %bitOff.ptr, align 1318 %res = lshr i64 %src, %bitOff319 store i64 %res, ptr %dst, align 1320 ret void321}322define void @shl_8bytes(ptr %src.ptr, ptr %bitOff.ptr, ptr %dst) nounwind {323; RV64I-LABEL: shl_8bytes:324; RV64I: # %bb.0:325; RV64I-NEXT: lbu a3, 0(a0)326; RV64I-NEXT: lbu a4, 1(a0)327; RV64I-NEXT: lbu a5, 2(a0)328; RV64I-NEXT: lbu a6, 3(a0)329; RV64I-NEXT: lbu a7, 4(a0)330; RV64I-NEXT: lbu t0, 5(a0)331; RV64I-NEXT: lbu t1, 6(a0)332; RV64I-NEXT: lbu a0, 7(a0)333; RV64I-NEXT: slli a4, a4, 8334; RV64I-NEXT: slli a5, a5, 16335; RV64I-NEXT: slli a6, a6, 24336; RV64I-NEXT: slli t0, t0, 8337; RV64I-NEXT: or a3, a4, a3338; RV64I-NEXT: or a4, a6, a5339; RV64I-NEXT: or a5, t0, a7340; RV64I-NEXT: lbu a6, 0(a1)341; RV64I-NEXT: lbu a7, 1(a1)342; RV64I-NEXT: lbu t0, 2(a1)343; RV64I-NEXT: lbu t2, 3(a1)344; RV64I-NEXT: slli t1, t1, 16345; RV64I-NEXT: slli a0, a0, 24346; RV64I-NEXT: slli a7, a7, 8347; RV64I-NEXT: slli t0, t0, 16348; RV64I-NEXT: slli t2, t2, 24349; RV64I-NEXT: or a0, a0, t1350; RV64I-NEXT: or a6, a7, a6351; RV64I-NEXT: or a7, t2, t0352; RV64I-NEXT: lbu t0, 5(a1)353; RV64I-NEXT: lbu t1, 4(a1)354; RV64I-NEXT: lbu t2, 6(a1)355; RV64I-NEXT: lbu a1, 7(a1)356; RV64I-NEXT: slli t0, t0, 8357; RV64I-NEXT: or t0, t0, t1358; RV64I-NEXT: slli t2, t2, 16359; RV64I-NEXT: slli a1, a1, 24360; RV64I-NEXT: or a1, a1, t2361; RV64I-NEXT: or a3, a4, a3362; RV64I-NEXT: or a0, a0, a5363; RV64I-NEXT: or a4, a7, a6364; RV64I-NEXT: or a1, a1, t0365; RV64I-NEXT: slli a0, a0, 32366; RV64I-NEXT: slli a1, a1, 32367; RV64I-NEXT: or a0, a0, a3368; RV64I-NEXT: or a1, a1, a4369; RV64I-NEXT: sll a0, a0, a1370; RV64I-NEXT: srli a1, a0, 48371; RV64I-NEXT: srli a3, a0, 56372; RV64I-NEXT: srli a4, a0, 32373; RV64I-NEXT: srli a5, a0, 40374; RV64I-NEXT: srli a6, a0, 16375; RV64I-NEXT: srli a7, a0, 24376; RV64I-NEXT: srli t0, a0, 8377; RV64I-NEXT: sb a4, 4(a2)378; RV64I-NEXT: sb a5, 5(a2)379; RV64I-NEXT: sb a1, 6(a2)380; RV64I-NEXT: sb a3, 7(a2)381; RV64I-NEXT: sb a0, 0(a2)382; RV64I-NEXT: sb t0, 1(a2)383; RV64I-NEXT: sb a6, 2(a2)384; RV64I-NEXT: sb a7, 3(a2)385; RV64I-NEXT: ret386;387; RV32I-LABEL: shl_8bytes:388; RV32I: # %bb.0:389; RV32I-NEXT: lbu a3, 1(a0)390; RV32I-NEXT: lbu a4, 2(a0)391; RV32I-NEXT: lbu a5, 3(a0)392; RV32I-NEXT: lbu a6, 0(a0)393; RV32I-NEXT: slli a3, a3, 8394; RV32I-NEXT: slli a4, a4, 16395; RV32I-NEXT: slli a5, a5, 24396; RV32I-NEXT: or a3, a3, a6397; RV32I-NEXT: or a4, a5, a4398; RV32I-NEXT: lbu a5, 1(a1)399; RV32I-NEXT: lbu a6, 0(a1)400; RV32I-NEXT: lbu a7, 2(a1)401; RV32I-NEXT: lbu a1, 3(a1)402; RV32I-NEXT: slli a5, a5, 8403; RV32I-NEXT: or a6, a5, a6404; RV32I-NEXT: slli a7, a7, 16405; RV32I-NEXT: slli a1, a1, 24406; RV32I-NEXT: or a1, a1, a7407; RV32I-NEXT: or a5, a4, a3408; RV32I-NEXT: or a4, a1, a6409; RV32I-NEXT: addi a3, a4, -32410; RV32I-NEXT: sll a1, a5, a4411; RV32I-NEXT: bltz a3, .LBB4_2412; RV32I-NEXT: # %bb.1:413; RV32I-NEXT: mv a0, a1414; RV32I-NEXT: j .LBB4_3415; RV32I-NEXT: .LBB4_2:416; RV32I-NEXT: lbu a6, 5(a0)417; RV32I-NEXT: lbu a7, 4(a0)418; RV32I-NEXT: lbu t0, 6(a0)419; RV32I-NEXT: lbu a0, 7(a0)420; RV32I-NEXT: slli a6, a6, 8421; RV32I-NEXT: or a6, a6, a7422; RV32I-NEXT: slli t0, t0, 16423; RV32I-NEXT: slli a0, a0, 24424; RV32I-NEXT: or a0, a0, t0425; RV32I-NEXT: not a7, a4426; RV32I-NEXT: srli a5, a5, 1427; RV32I-NEXT: or a0, a0, a6428; RV32I-NEXT: sll a0, a0, a4429; RV32I-NEXT: srl a4, a5, a7430; RV32I-NEXT: or a0, a0, a4431; RV32I-NEXT: .LBB4_3:432; RV32I-NEXT: srai a3, a3, 31433; RV32I-NEXT: srli a4, a0, 16434; RV32I-NEXT: srli a5, a0, 24435; RV32I-NEXT: and a1, a3, a1436; RV32I-NEXT: srli a3, a1, 16437; RV32I-NEXT: srli a6, a1, 24438; RV32I-NEXT: srli a7, a1, 8439; RV32I-NEXT: sb a1, 0(a2)440; RV32I-NEXT: sb a7, 1(a2)441; RV32I-NEXT: sb a3, 2(a2)442; RV32I-NEXT: sb a6, 3(a2)443; RV32I-NEXT: srli a1, a0, 8444; RV32I-NEXT: sb a0, 4(a2)445; RV32I-NEXT: sb a1, 5(a2)446; RV32I-NEXT: sb a4, 6(a2)447; RV32I-NEXT: sb a5, 7(a2)448; RV32I-NEXT: ret449 %src = load i64, ptr %src.ptr, align 1450 %bitOff = load i64, ptr %bitOff.ptr, align 1451 %res = shl i64 %src, %bitOff452 store i64 %res, ptr %dst, align 1453 ret void454}455define void @ashr_8bytes(ptr %src.ptr, ptr %bitOff.ptr, ptr %dst) nounwind {456; RV64I-LABEL: ashr_8bytes:457; RV64I: # %bb.0:458; RV64I-NEXT: lbu a3, 0(a0)459; RV64I-NEXT: lbu a4, 1(a0)460; RV64I-NEXT: lbu a5, 2(a0)461; RV64I-NEXT: lbu a6, 3(a0)462; RV64I-NEXT: lbu a7, 4(a0)463; RV64I-NEXT: lbu t0, 5(a0)464; RV64I-NEXT: lbu t1, 6(a0)465; RV64I-NEXT: lbu a0, 7(a0)466; RV64I-NEXT: slli a4, a4, 8467; RV64I-NEXT: slli a5, a5, 16468; RV64I-NEXT: slli a6, a6, 24469; RV64I-NEXT: slli t0, t0, 8470; RV64I-NEXT: or a3, a4, a3471; RV64I-NEXT: or a4, a6, a5472; RV64I-NEXT: or a5, t0, a7473; RV64I-NEXT: lbu a6, 0(a1)474; RV64I-NEXT: lbu a7, 1(a1)475; RV64I-NEXT: lbu t0, 2(a1)476; RV64I-NEXT: lbu t2, 3(a1)477; RV64I-NEXT: slli t1, t1, 16478; RV64I-NEXT: slli a0, a0, 24479; RV64I-NEXT: slli a7, a7, 8480; RV64I-NEXT: slli t0, t0, 16481; RV64I-NEXT: slli t2, t2, 24482; RV64I-NEXT: or a0, a0, t1483; RV64I-NEXT: or a6, a7, a6484; RV64I-NEXT: or a7, t2, t0485; RV64I-NEXT: lbu t0, 5(a1)486; RV64I-NEXT: lbu t1, 4(a1)487; RV64I-NEXT: lbu t2, 6(a1)488; RV64I-NEXT: lbu a1, 7(a1)489; RV64I-NEXT: slli t0, t0, 8490; RV64I-NEXT: or t0, t0, t1491; RV64I-NEXT: slli t2, t2, 16492; RV64I-NEXT: slli a1, a1, 24493; RV64I-NEXT: or a1, a1, t2494; RV64I-NEXT: or a3, a4, a3495; RV64I-NEXT: or a0, a0, a5496; RV64I-NEXT: or a4, a7, a6497; RV64I-NEXT: or a1, a1, t0498; RV64I-NEXT: slli a0, a0, 32499; RV64I-NEXT: slli a1, a1, 32500; RV64I-NEXT: or a0, a0, a3501; RV64I-NEXT: or a1, a1, a4502; RV64I-NEXT: sra a0, a0, a1503; RV64I-NEXT: srli a1, a0, 48504; RV64I-NEXT: srli a3, a0, 56505; RV64I-NEXT: srli a4, a0, 32506; RV64I-NEXT: srli a5, a0, 40507; RV64I-NEXT: srli a6, a0, 16508; RV64I-NEXT: srli a7, a0, 24509; RV64I-NEXT: srli t0, a0, 8510; RV64I-NEXT: sb a4, 4(a2)511; RV64I-NEXT: sb a5, 5(a2)512; RV64I-NEXT: sb a1, 6(a2)513; RV64I-NEXT: sb a3, 7(a2)514; RV64I-NEXT: sb a0, 0(a2)515; RV64I-NEXT: sb t0, 1(a2)516; RV64I-NEXT: sb a6, 2(a2)517; RV64I-NEXT: sb a7, 3(a2)518; RV64I-NEXT: ret519;520; RV32I-LABEL: ashr_8bytes:521; RV32I: # %bb.0:522; RV32I-NEXT: lbu a3, 5(a0)523; RV32I-NEXT: lbu a4, 4(a0)524; RV32I-NEXT: lbu a5, 6(a0)525; RV32I-NEXT: lbu a6, 7(a0)526; RV32I-NEXT: slli a3, a3, 8527; RV32I-NEXT: or a3, a3, a4528; RV32I-NEXT: lbu a4, 1(a1)529; RV32I-NEXT: lbu a7, 0(a1)530; RV32I-NEXT: lbu t0, 2(a1)531; RV32I-NEXT: lbu a1, 3(a1)532; RV32I-NEXT: slli a4, a4, 8533; RV32I-NEXT: or a7, a4, a7534; RV32I-NEXT: slli t0, t0, 16535; RV32I-NEXT: slli a1, a1, 24536; RV32I-NEXT: or a1, a1, t0537; RV32I-NEXT: slli a4, a5, 16538; RV32I-NEXT: slli a5, a6, 24539; RV32I-NEXT: or a4, a5, a4540; RV32I-NEXT: or a4, a4, a3541; RV32I-NEXT: or a3, a1, a7542; RV32I-NEXT: addi a6, a3, -32543; RV32I-NEXT: sra a1, a4, a3544; RV32I-NEXT: bltz a6, .LBB5_2545; RV32I-NEXT: # %bb.1:546; RV32I-NEXT: srai a5, a5, 31547; RV32I-NEXT: mv a0, a1548; RV32I-NEXT: mv a1, a5549; RV32I-NEXT: j .LBB5_3550; RV32I-NEXT: .LBB5_2:551; RV32I-NEXT: lbu a5, 1(a0)552; RV32I-NEXT: lbu a6, 0(a0)553; RV32I-NEXT: lbu a7, 2(a0)554; RV32I-NEXT: lbu a0, 3(a0)555; RV32I-NEXT: slli a5, a5, 8556; RV32I-NEXT: or a5, a5, a6557; RV32I-NEXT: slli a7, a7, 16558; RV32I-NEXT: slli a0, a0, 24559; RV32I-NEXT: or a0, a0, a7560; RV32I-NEXT: not a6, a3561; RV32I-NEXT: slli a4, a4, 1562; RV32I-NEXT: or a0, a0, a5563; RV32I-NEXT: srl a0, a0, a3564; RV32I-NEXT: sll a3, a4, a6565; RV32I-NEXT: or a0, a0, a3566; RV32I-NEXT: .LBB5_3:567; RV32I-NEXT: srli a3, a1, 16568; RV32I-NEXT: srli a4, a1, 24569; RV32I-NEXT: srli a5, a1, 8570; RV32I-NEXT: srli a6, a0, 16571; RV32I-NEXT: srli a7, a0, 24572; RV32I-NEXT: sb a1, 4(a2)573; RV32I-NEXT: sb a5, 5(a2)574; RV32I-NEXT: sb a3, 6(a2)575; RV32I-NEXT: sb a4, 7(a2)576; RV32I-NEXT: srli a1, a0, 8577; RV32I-NEXT: sb a0, 0(a2)578; RV32I-NEXT: sb a1, 1(a2)579; RV32I-NEXT: sb a6, 2(a2)580; RV32I-NEXT: sb a7, 3(a2)581; RV32I-NEXT: ret582 %src = load i64, ptr %src.ptr, align 1583 %bitOff = load i64, ptr %bitOff.ptr, align 1584 %res = ashr i64 %src, %bitOff585 store i64 %res, ptr %dst, align 1586 ret void587}588 589define void @lshr_16bytes(ptr %src.ptr, ptr %bitOff.ptr, ptr %dst) nounwind {590; RV64I-LABEL: lshr_16bytes:591; RV64I: # %bb.0:592; RV64I-NEXT: lbu a3, 8(a0)593; RV64I-NEXT: lbu a4, 9(a0)594; RV64I-NEXT: lbu a5, 10(a0)595; RV64I-NEXT: lbu a6, 11(a0)596; RV64I-NEXT: lbu a7, 12(a0)597; RV64I-NEXT: lbu t0, 13(a0)598; RV64I-NEXT: lbu t1, 14(a0)599; RV64I-NEXT: lbu t2, 15(a0)600; RV64I-NEXT: slli a4, a4, 8601; RV64I-NEXT: slli a5, a5, 16602; RV64I-NEXT: slli a6, a6, 24603; RV64I-NEXT: slli t0, t0, 8604; RV64I-NEXT: or a3, a4, a3605; RV64I-NEXT: or a4, a6, a5606; RV64I-NEXT: or a5, t0, a7607; RV64I-NEXT: lbu a6, 0(a1)608; RV64I-NEXT: lbu a7, 1(a1)609; RV64I-NEXT: lbu t0, 2(a1)610; RV64I-NEXT: lbu t3, 3(a1)611; RV64I-NEXT: slli t1, t1, 16612; RV64I-NEXT: slli t2, t2, 24613; RV64I-NEXT: slli a7, a7, 8614; RV64I-NEXT: slli t0, t0, 16615; RV64I-NEXT: slli t3, t3, 24616; RV64I-NEXT: or t1, t2, t1617; RV64I-NEXT: or a6, a7, a6618; RV64I-NEXT: or a7, t3, t0619; RV64I-NEXT: lbu t0, 5(a1)620; RV64I-NEXT: lbu t2, 4(a1)621; RV64I-NEXT: lbu t3, 6(a1)622; RV64I-NEXT: lbu a1, 7(a1)623; RV64I-NEXT: slli t0, t0, 8624; RV64I-NEXT: or t0, t0, t2625; RV64I-NEXT: slli t3, t3, 16626; RV64I-NEXT: slli a1, a1, 24627; RV64I-NEXT: or a1, a1, t3628; RV64I-NEXT: or a3, a4, a3629; RV64I-NEXT: or a4, t1, a5630; RV64I-NEXT: or a6, a7, a6631; RV64I-NEXT: or a1, a1, t0632; RV64I-NEXT: slli a4, a4, 32633; RV64I-NEXT: slli a1, a1, 32634; RV64I-NEXT: or a5, a4, a3635; RV64I-NEXT: or a4, a1, a6636; RV64I-NEXT: addi a3, a4, -64637; RV64I-NEXT: srl a1, a5, a4638; RV64I-NEXT: bltz a3, .LBB6_2639; RV64I-NEXT: # %bb.1:640; RV64I-NEXT: mv a0, a1641; RV64I-NEXT: j .LBB6_3642; RV64I-NEXT: .LBB6_2:643; RV64I-NEXT: lbu a6, 1(a0)644; RV64I-NEXT: lbu a7, 2(a0)645; RV64I-NEXT: lbu t0, 3(a0)646; RV64I-NEXT: lbu t1, 0(a0)647; RV64I-NEXT: slli a6, a6, 8648; RV64I-NEXT: slli a7, a7, 16649; RV64I-NEXT: slli t0, t0, 24650; RV64I-NEXT: or a6, a6, t1651; RV64I-NEXT: or a7, t0, a7652; RV64I-NEXT: lbu t0, 5(a0)653; RV64I-NEXT: lbu t1, 4(a0)654; RV64I-NEXT: lbu t2, 6(a0)655; RV64I-NEXT: lbu a0, 7(a0)656; RV64I-NEXT: slli t0, t0, 8657; RV64I-NEXT: or t0, t0, t1658; RV64I-NEXT: slli t2, t2, 16659; RV64I-NEXT: slli a0, a0, 24660; RV64I-NEXT: or a0, a0, t2661; RV64I-NEXT: or a6, a7, a6662; RV64I-NEXT: not a7, a4663; RV64I-NEXT: slli a5, a5, 1664; RV64I-NEXT: or a0, a0, t0665; RV64I-NEXT: slli a0, a0, 32666; RV64I-NEXT: or a0, a0, a6667; RV64I-NEXT: srl a0, a0, a4668; RV64I-NEXT: sll a4, a5, a7669; RV64I-NEXT: or a0, a0, a4670; RV64I-NEXT: .LBB6_3:671; RV64I-NEXT: srai a3, a3, 63672; RV64I-NEXT: srli a4, a0, 56673; RV64I-NEXT: srli a5, a0, 48674; RV64I-NEXT: srli a6, a0, 40675; RV64I-NEXT: srli a7, a0, 32676; RV64I-NEXT: srli t0, a0, 24677; RV64I-NEXT: srli t1, a0, 16678; RV64I-NEXT: and a1, a3, a1679; RV64I-NEXT: sb a7, 4(a2)680; RV64I-NEXT: sb a6, 5(a2)681; RV64I-NEXT: sb a5, 6(a2)682; RV64I-NEXT: sb a4, 7(a2)683; RV64I-NEXT: srli a3, a1, 56684; RV64I-NEXT: srli a4, a1, 48685; RV64I-NEXT: srli a5, a1, 40686; RV64I-NEXT: srli a6, a1, 32687; RV64I-NEXT: srli a7, a1, 24688; RV64I-NEXT: srli t2, a1, 16689; RV64I-NEXT: sb a6, 12(a2)690; RV64I-NEXT: sb a5, 13(a2)691; RV64I-NEXT: sb a4, 14(a2)692; RV64I-NEXT: sb a3, 15(a2)693; RV64I-NEXT: srli a3, a1, 8694; RV64I-NEXT: sb a1, 8(a2)695; RV64I-NEXT: sb a3, 9(a2)696; RV64I-NEXT: sb t2, 10(a2)697; RV64I-NEXT: sb a7, 11(a2)698; RV64I-NEXT: srli a1, a0, 8699; RV64I-NEXT: sb a0, 0(a2)700; RV64I-NEXT: sb a1, 1(a2)701; RV64I-NEXT: sb t1, 2(a2)702; RV64I-NEXT: sb t0, 3(a2)703; RV64I-NEXT: ret704;705; RV32I-LABEL: lshr_16bytes:706; RV32I: # %bb.0:707; RV32I-NEXT: addi sp, sp, -32708; RV32I-NEXT: lbu a3, 0(a0)709; RV32I-NEXT: lbu a4, 1(a0)710; RV32I-NEXT: lbu a5, 2(a0)711; RV32I-NEXT: lbu a6, 3(a0)712; RV32I-NEXT: lbu a7, 4(a0)713; RV32I-NEXT: lbu t0, 5(a0)714; RV32I-NEXT: lbu t1, 6(a0)715; RV32I-NEXT: lbu t2, 7(a0)716; RV32I-NEXT: slli a4, a4, 8717; RV32I-NEXT: slli a5, a5, 16718; RV32I-NEXT: slli a6, a6, 24719; RV32I-NEXT: or a3, a4, a3720; RV32I-NEXT: or a4, a6, a5721; RV32I-NEXT: lbu a5, 8(a0)722; RV32I-NEXT: lbu a6, 9(a0)723; RV32I-NEXT: lbu t3, 10(a0)724; RV32I-NEXT: lbu t4, 11(a0)725; RV32I-NEXT: slli t0, t0, 8726; RV32I-NEXT: slli t1, t1, 16727; RV32I-NEXT: slli t2, t2, 24728; RV32I-NEXT: slli a6, a6, 8729; RV32I-NEXT: or a7, t0, a7730; RV32I-NEXT: or t0, t2, t1731; RV32I-NEXT: or a5, a6, a5732; RV32I-NEXT: lbu a6, 12(a0)733; RV32I-NEXT: lbu t1, 13(a0)734; RV32I-NEXT: lbu t2, 14(a0)735; RV32I-NEXT: lbu a0, 15(a0)736; RV32I-NEXT: slli t3, t3, 16737; RV32I-NEXT: slli t4, t4, 24738; RV32I-NEXT: slli t1, t1, 8739; RV32I-NEXT: slli t2, t2, 16740; RV32I-NEXT: slli a0, a0, 24741; RV32I-NEXT: or t3, t4, t3742; RV32I-NEXT: or a6, t1, a6743; RV32I-NEXT: or a0, a0, t2744; RV32I-NEXT: lbu t1, 1(a1)745; RV32I-NEXT: lbu t2, 0(a1)746; RV32I-NEXT: lbu t4, 2(a1)747; RV32I-NEXT: lbu a1, 3(a1)748; RV32I-NEXT: slli t1, t1, 8749; RV32I-NEXT: or t1, t1, t2750; RV32I-NEXT: sw zero, 16(sp)751; RV32I-NEXT: sw zero, 20(sp)752; RV32I-NEXT: sw zero, 24(sp)753; RV32I-NEXT: sw zero, 28(sp)754; RV32I-NEXT: slli t4, t4, 16755; RV32I-NEXT: slli a1, a1, 24756; RV32I-NEXT: or a1, a1, t4757; RV32I-NEXT: mv t2, sp758; RV32I-NEXT: or a3, a4, a3759; RV32I-NEXT: or a4, t0, a7760; RV32I-NEXT: or a5, t3, a5761; RV32I-NEXT: or a0, a0, a6762; RV32I-NEXT: or a1, a1, t1763; RV32I-NEXT: sw a3, 0(sp)764; RV32I-NEXT: sw a4, 4(sp)765; RV32I-NEXT: sw a5, 8(sp)766; RV32I-NEXT: sw a0, 12(sp)767; RV32I-NEXT: srli a0, a1, 3768; RV32I-NEXT: andi a3, a1, 31769; RV32I-NEXT: andi a0, a0, 12770; RV32I-NEXT: xori a3, a3, 31771; RV32I-NEXT: add a0, t2, a0772; RV32I-NEXT: lw a4, 4(a0)773; RV32I-NEXT: lw a5, 8(a0)774; RV32I-NEXT: lw a6, 0(a0)775; RV32I-NEXT: lw a0, 12(a0)776; RV32I-NEXT: srl a7, a4, a1777; RV32I-NEXT: slli t0, a5, 1778; RV32I-NEXT: srl a6, a6, a1779; RV32I-NEXT: slli a4, a4, 1780; RV32I-NEXT: srl a5, a5, a1781; RV32I-NEXT: slli t1, a0, 1782; RV32I-NEXT: srl a0, a0, a1783; RV32I-NEXT: sll a1, t0, a3784; RV32I-NEXT: sll a4, a4, a3785; RV32I-NEXT: sll a3, t1, a3786; RV32I-NEXT: srli t0, a0, 16787; RV32I-NEXT: srli t1, a0, 24788; RV32I-NEXT: srli t2, a0, 8789; RV32I-NEXT: or a1, a7, a1790; RV32I-NEXT: or a4, a6, a4791; RV32I-NEXT: or a3, a5, a3792; RV32I-NEXT: sb a0, 12(a2)793; RV32I-NEXT: sb t2, 13(a2)794; RV32I-NEXT: sb t0, 14(a2)795; RV32I-NEXT: sb t1, 15(a2)796; RV32I-NEXT: srli a0, a3, 16797; RV32I-NEXT: srli a5, a3, 24798; RV32I-NEXT: srli a6, a3, 8799; RV32I-NEXT: srli a7, a4, 16800; RV32I-NEXT: srli t0, a4, 24801; RV32I-NEXT: srli t1, a4, 8802; RV32I-NEXT: srli t2, a1, 16803; RV32I-NEXT: srli t3, a1, 24804; RV32I-NEXT: sb a3, 8(a2)805; RV32I-NEXT: sb a6, 9(a2)806; RV32I-NEXT: sb a0, 10(a2)807; RV32I-NEXT: sb a5, 11(a2)808; RV32I-NEXT: srli a0, a1, 8809; RV32I-NEXT: sb a4, 0(a2)810; RV32I-NEXT: sb t1, 1(a2)811; RV32I-NEXT: sb a7, 2(a2)812; RV32I-NEXT: sb t0, 3(a2)813; RV32I-NEXT: sb a1, 4(a2)814; RV32I-NEXT: sb a0, 5(a2)815; RV32I-NEXT: sb t2, 6(a2)816; RV32I-NEXT: sb t3, 7(a2)817; RV32I-NEXT: addi sp, sp, 32818; RV32I-NEXT: ret819 %src = load i128, ptr %src.ptr, align 1820 %bitOff = load i128, ptr %bitOff.ptr, align 1821 %res = lshr i128 %src, %bitOff822 store i128 %res, ptr %dst, align 1823 ret void824}825define void @shl_16bytes(ptr %src.ptr, ptr %bitOff.ptr, ptr %dst) nounwind {826; RV64I-LABEL: shl_16bytes:827; RV64I: # %bb.0:828; RV64I-NEXT: lbu a3, 0(a0)829; RV64I-NEXT: lbu a4, 1(a0)830; RV64I-NEXT: lbu a5, 2(a0)831; RV64I-NEXT: lbu a6, 3(a0)832; RV64I-NEXT: lbu a7, 4(a0)833; RV64I-NEXT: lbu t0, 5(a0)834; RV64I-NEXT: lbu t1, 6(a0)835; RV64I-NEXT: lbu t2, 7(a0)836; RV64I-NEXT: slli a4, a4, 8837; RV64I-NEXT: slli a5, a5, 16838; RV64I-NEXT: slli a6, a6, 24839; RV64I-NEXT: slli t0, t0, 8840; RV64I-NEXT: or a3, a4, a3841; RV64I-NEXT: or a4, a6, a5842; RV64I-NEXT: or a5, t0, a7843; RV64I-NEXT: lbu a6, 0(a1)844; RV64I-NEXT: lbu a7, 1(a1)845; RV64I-NEXT: lbu t0, 2(a1)846; RV64I-NEXT: lbu t3, 3(a1)847; RV64I-NEXT: slli t1, t1, 16848; RV64I-NEXT: slli t2, t2, 24849; RV64I-NEXT: slli a7, a7, 8850; RV64I-NEXT: slli t0, t0, 16851; RV64I-NEXT: slli t3, t3, 24852; RV64I-NEXT: or t1, t2, t1853; RV64I-NEXT: or a6, a7, a6854; RV64I-NEXT: or a7, t3, t0855; RV64I-NEXT: lbu t0, 5(a1)856; RV64I-NEXT: lbu t2, 4(a1)857; RV64I-NEXT: lbu t3, 6(a1)858; RV64I-NEXT: lbu a1, 7(a1)859; RV64I-NEXT: slli t0, t0, 8860; RV64I-NEXT: or t0, t0, t2861; RV64I-NEXT: slli t3, t3, 16862; RV64I-NEXT: slli a1, a1, 24863; RV64I-NEXT: or a1, a1, t3864; RV64I-NEXT: or a3, a4, a3865; RV64I-NEXT: or a4, t1, a5866; RV64I-NEXT: or a6, a7, a6867; RV64I-NEXT: or a1, a1, t0868; RV64I-NEXT: slli a4, a4, 32869; RV64I-NEXT: slli a1, a1, 32870; RV64I-NEXT: or a5, a4, a3871; RV64I-NEXT: or a4, a1, a6872; RV64I-NEXT: addi a3, a4, -64873; RV64I-NEXT: sll a1, a5, a4874; RV64I-NEXT: bltz a3, .LBB7_2875; RV64I-NEXT: # %bb.1:876; RV64I-NEXT: mv a0, a1877; RV64I-NEXT: j .LBB7_3878; RV64I-NEXT: .LBB7_2:879; RV64I-NEXT: lbu a6, 9(a0)880; RV64I-NEXT: lbu a7, 10(a0)881; RV64I-NEXT: lbu t0, 11(a0)882; RV64I-NEXT: lbu t1, 8(a0)883; RV64I-NEXT: slli a6, a6, 8884; RV64I-NEXT: slli a7, a7, 16885; RV64I-NEXT: slli t0, t0, 24886; RV64I-NEXT: or a6, a6, t1887; RV64I-NEXT: or a7, t0, a7888; RV64I-NEXT: lbu t0, 13(a0)889; RV64I-NEXT: lbu t1, 12(a0)890; RV64I-NEXT: lbu t2, 14(a0)891; RV64I-NEXT: lbu a0, 15(a0)892; RV64I-NEXT: slli t0, t0, 8893; RV64I-NEXT: or t0, t0, t1894; RV64I-NEXT: slli t2, t2, 16895; RV64I-NEXT: slli a0, a0, 24896; RV64I-NEXT: or a0, a0, t2897; RV64I-NEXT: or a6, a7, a6898; RV64I-NEXT: not a7, a4899; RV64I-NEXT: srli a5, a5, 1900; RV64I-NEXT: or a0, a0, t0901; RV64I-NEXT: slli a0, a0, 32902; RV64I-NEXT: or a0, a0, a6903; RV64I-NEXT: sll a0, a0, a4904; RV64I-NEXT: srl a4, a5, a7905; RV64I-NEXT: or a0, a0, a4906; RV64I-NEXT: .LBB7_3:907; RV64I-NEXT: srai a3, a3, 63908; RV64I-NEXT: srli a4, a0, 56909; RV64I-NEXT: srli a5, a0, 48910; RV64I-NEXT: srli a6, a0, 40911; RV64I-NEXT: srli a7, a0, 32912; RV64I-NEXT: srli t0, a0, 24913; RV64I-NEXT: srli t1, a0, 16914; RV64I-NEXT: and a1, a3, a1915; RV64I-NEXT: sb a7, 12(a2)916; RV64I-NEXT: sb a6, 13(a2)917; RV64I-NEXT: sb a5, 14(a2)918; RV64I-NEXT: sb a4, 15(a2)919; RV64I-NEXT: srli a3, a1, 56920; RV64I-NEXT: srli a4, a1, 48921; RV64I-NEXT: srli a5, a1, 40922; RV64I-NEXT: srli a6, a1, 32923; RV64I-NEXT: srli a7, a1, 24924; RV64I-NEXT: srli t2, a1, 16925; RV64I-NEXT: sb a6, 4(a2)926; RV64I-NEXT: sb a5, 5(a2)927; RV64I-NEXT: sb a4, 6(a2)928; RV64I-NEXT: sb a3, 7(a2)929; RV64I-NEXT: srli a3, a1, 8930; RV64I-NEXT: sb a1, 0(a2)931; RV64I-NEXT: sb a3, 1(a2)932; RV64I-NEXT: sb t2, 2(a2)933; RV64I-NEXT: sb a7, 3(a2)934; RV64I-NEXT: srli a1, a0, 8935; RV64I-NEXT: sb a0, 8(a2)936; RV64I-NEXT: sb a1, 9(a2)937; RV64I-NEXT: sb t1, 10(a2)938; RV64I-NEXT: sb t0, 11(a2)939; RV64I-NEXT: ret940;941; RV32I-LABEL: shl_16bytes:942; RV32I: # %bb.0:943; RV32I-NEXT: addi sp, sp, -32944; RV32I-NEXT: lbu a3, 0(a0)945; RV32I-NEXT: lbu a4, 1(a0)946; RV32I-NEXT: lbu a5, 2(a0)947; RV32I-NEXT: lbu a6, 3(a0)948; RV32I-NEXT: lbu a7, 4(a0)949; RV32I-NEXT: lbu t0, 5(a0)950; RV32I-NEXT: lbu t1, 6(a0)951; RV32I-NEXT: lbu t2, 7(a0)952; RV32I-NEXT: slli a4, a4, 8953; RV32I-NEXT: slli a5, a5, 16954; RV32I-NEXT: slli a6, a6, 24955; RV32I-NEXT: or a3, a4, a3956; RV32I-NEXT: or a4, a6, a5957; RV32I-NEXT: lbu a5, 8(a0)958; RV32I-NEXT: lbu a6, 9(a0)959; RV32I-NEXT: lbu t3, 10(a0)960; RV32I-NEXT: lbu t4, 11(a0)961; RV32I-NEXT: slli t0, t0, 8962; RV32I-NEXT: slli t1, t1, 16963; RV32I-NEXT: slli t2, t2, 24964; RV32I-NEXT: slli a6, a6, 8965; RV32I-NEXT: or a7, t0, a7966; RV32I-NEXT: or t0, t2, t1967; RV32I-NEXT: or a5, a6, a5968; RV32I-NEXT: lbu a6, 12(a0)969; RV32I-NEXT: lbu t1, 13(a0)970; RV32I-NEXT: lbu t2, 14(a0)971; RV32I-NEXT: lbu a0, 15(a0)972; RV32I-NEXT: slli t3, t3, 16973; RV32I-NEXT: slli t4, t4, 24974; RV32I-NEXT: slli t1, t1, 8975; RV32I-NEXT: slli t2, t2, 16976; RV32I-NEXT: slli a0, a0, 24977; RV32I-NEXT: or t3, t4, t3978; RV32I-NEXT: or a6, t1, a6979; RV32I-NEXT: or a0, a0, t2980; RV32I-NEXT: lbu t1, 1(a1)981; RV32I-NEXT: lbu t2, 0(a1)982; RV32I-NEXT: lbu t4, 2(a1)983; RV32I-NEXT: lbu a1, 3(a1)984; RV32I-NEXT: slli t1, t1, 8985; RV32I-NEXT: or t1, t1, t2986; RV32I-NEXT: sw zero, 0(sp)987; RV32I-NEXT: sw zero, 4(sp)988; RV32I-NEXT: sw zero, 8(sp)989; RV32I-NEXT: sw zero, 12(sp)990; RV32I-NEXT: slli t4, t4, 16991; RV32I-NEXT: slli a1, a1, 24992; RV32I-NEXT: or a1, a1, t4993; RV32I-NEXT: addi t2, sp, 16994; RV32I-NEXT: or a3, a4, a3995; RV32I-NEXT: or a4, t0, a7996; RV32I-NEXT: or a5, t3, a5997; RV32I-NEXT: or a0, a0, a6998; RV32I-NEXT: or a1, a1, t1999; RV32I-NEXT: sw a3, 16(sp)1000; RV32I-NEXT: sw a4, 20(sp)1001; RV32I-NEXT: sw a5, 24(sp)1002; RV32I-NEXT: sw a0, 28(sp)1003; RV32I-NEXT: srli a0, a1, 31004; RV32I-NEXT: andi a3, a1, 311005; RV32I-NEXT: andi a0, a0, 121006; RV32I-NEXT: sub a0, t2, a01007; RV32I-NEXT: lw a4, 0(a0)1008; RV32I-NEXT: lw a5, 4(a0)1009; RV32I-NEXT: lw a6, 8(a0)1010; RV32I-NEXT: lw a0, 12(a0)1011; RV32I-NEXT: xori a3, a3, 311012; RV32I-NEXT: sll a7, a5, a11013; RV32I-NEXT: srli t0, a4, 11014; RV32I-NEXT: sll a0, a0, a11015; RV32I-NEXT: srli t1, a6, 11016; RV32I-NEXT: sll a6, a6, a11017; RV32I-NEXT: srli a5, a5, 11018; RV32I-NEXT: sll a1, a4, a11019; RV32I-NEXT: srl a4, t0, a31020; RV32I-NEXT: srl t0, t1, a31021; RV32I-NEXT: srl a3, a5, a31022; RV32I-NEXT: srli a5, a1, 161023; RV32I-NEXT: srli t1, a1, 241024; RV32I-NEXT: srli t2, a1, 81025; RV32I-NEXT: or a4, a7, a41026; RV32I-NEXT: or a0, a0, t01027; RV32I-NEXT: or a3, a6, a31028; RV32I-NEXT: sb a1, 0(a2)1029; RV32I-NEXT: sb t2, 1(a2)1030; RV32I-NEXT: sb a5, 2(a2)1031; RV32I-NEXT: sb t1, 3(a2)1032; RV32I-NEXT: srli a1, a3, 161033; RV32I-NEXT: srli a5, a3, 241034; RV32I-NEXT: srli a6, a3, 81035; RV32I-NEXT: srli a7, a0, 161036; RV32I-NEXT: srli t0, a0, 241037; RV32I-NEXT: srli t1, a0, 81038; RV32I-NEXT: srli t2, a4, 161039; RV32I-NEXT: srli t3, a4, 241040; RV32I-NEXT: sb a3, 8(a2)1041; RV32I-NEXT: sb a6, 9(a2)1042; RV32I-NEXT: sb a1, 10(a2)1043; RV32I-NEXT: sb a5, 11(a2)1044; RV32I-NEXT: srli a1, a4, 81045; RV32I-NEXT: sb a0, 12(a2)1046; RV32I-NEXT: sb t1, 13(a2)1047; RV32I-NEXT: sb a7, 14(a2)1048; RV32I-NEXT: sb t0, 15(a2)1049; RV32I-NEXT: sb a4, 4(a2)1050; RV32I-NEXT: sb a1, 5(a2)1051; RV32I-NEXT: sb t2, 6(a2)1052; RV32I-NEXT: sb t3, 7(a2)1053; RV32I-NEXT: addi sp, sp, 321054; RV32I-NEXT: ret1055 %src = load i128, ptr %src.ptr, align 11056 %bitOff = load i128, ptr %bitOff.ptr, align 11057 %res = shl i128 %src, %bitOff1058 store i128 %res, ptr %dst, align 11059 ret void1060}1061define void @ashr_16bytes(ptr %src.ptr, ptr %bitOff.ptr, ptr %dst) nounwind {1062; RV64I-LABEL: ashr_16bytes:1063; RV64I: # %bb.0:1064; RV64I-NEXT: lbu a3, 8(a0)1065; RV64I-NEXT: lbu a4, 9(a0)1066; RV64I-NEXT: lbu a5, 10(a0)1067; RV64I-NEXT: lbu a6, 11(a0)1068; RV64I-NEXT: lbu a7, 12(a0)1069; RV64I-NEXT: lbu t0, 13(a0)1070; RV64I-NEXT: lbu t1, 14(a0)1071; RV64I-NEXT: lbu t2, 15(a0)1072; RV64I-NEXT: slli a4, a4, 81073; RV64I-NEXT: slli a5, a5, 161074; RV64I-NEXT: slli a6, a6, 241075; RV64I-NEXT: slli t0, t0, 81076; RV64I-NEXT: or a3, a4, a31077; RV64I-NEXT: or a4, a6, a51078; RV64I-NEXT: or a5, t0, a71079; RV64I-NEXT: lbu a6, 0(a1)1080; RV64I-NEXT: lbu a7, 1(a1)1081; RV64I-NEXT: lbu t0, 2(a1)1082; RV64I-NEXT: lbu t3, 3(a1)1083; RV64I-NEXT: slli t1, t1, 161084; RV64I-NEXT: slli t2, t2, 241085; RV64I-NEXT: slli a7, a7, 81086; RV64I-NEXT: slli t0, t0, 161087; RV64I-NEXT: slli t3, t3, 241088; RV64I-NEXT: or t1, t2, t11089; RV64I-NEXT: or a6, a7, a61090; RV64I-NEXT: or a7, t3, t01091; RV64I-NEXT: lbu t0, 5(a1)1092; RV64I-NEXT: lbu t2, 4(a1)1093; RV64I-NEXT: lbu t3, 6(a1)1094; RV64I-NEXT: lbu a1, 7(a1)1095; RV64I-NEXT: slli t0, t0, 81096; RV64I-NEXT: or t0, t0, t21097; RV64I-NEXT: slli t3, t3, 161098; RV64I-NEXT: slli a1, a1, 241099; RV64I-NEXT: or a1, a1, t31100; RV64I-NEXT: or a3, a4, a31101; RV64I-NEXT: or a5, t1, a51102; RV64I-NEXT: or a6, a7, a61103; RV64I-NEXT: or a1, a1, t01104; RV64I-NEXT: slli a4, a5, 321105; RV64I-NEXT: slli a1, a1, 321106; RV64I-NEXT: or a4, a4, a31107; RV64I-NEXT: or a3, a1, a61108; RV64I-NEXT: addi a6, a3, -641109; RV64I-NEXT: sra a1, a4, a31110; RV64I-NEXT: bltz a6, .LBB8_21111; RV64I-NEXT: # %bb.1:1112; RV64I-NEXT: sraiw a3, a5, 311113; RV64I-NEXT: mv a0, a11114; RV64I-NEXT: mv a1, a31115; RV64I-NEXT: j .LBB8_31116; RV64I-NEXT: .LBB8_2:1117; RV64I-NEXT: lbu a5, 1(a0)1118; RV64I-NEXT: lbu a6, 2(a0)1119; RV64I-NEXT: lbu a7, 3(a0)1120; RV64I-NEXT: lbu t0, 0(a0)1121; RV64I-NEXT: slli a5, a5, 81122; RV64I-NEXT: slli a6, a6, 161123; RV64I-NEXT: slli a7, a7, 241124; RV64I-NEXT: or a5, a5, t01125; RV64I-NEXT: or a6, a7, a61126; RV64I-NEXT: lbu a7, 5(a0)1127; RV64I-NEXT: lbu t0, 4(a0)1128; RV64I-NEXT: lbu t1, 6(a0)1129; RV64I-NEXT: lbu a0, 7(a0)1130; RV64I-NEXT: slli a7, a7, 81131; RV64I-NEXT: or a7, a7, t01132; RV64I-NEXT: slli t1, t1, 161133; RV64I-NEXT: slli a0, a0, 241134; RV64I-NEXT: or a0, a0, t11135; RV64I-NEXT: or a5, a6, a51136; RV64I-NEXT: not a6, a31137; RV64I-NEXT: slli a4, a4, 11138; RV64I-NEXT: or a0, a0, a71139; RV64I-NEXT: slli a0, a0, 321140; RV64I-NEXT: or a0, a0, a51141; RV64I-NEXT: srl a0, a0, a31142; RV64I-NEXT: sll a3, a4, a61143; RV64I-NEXT: or a0, a0, a31144; RV64I-NEXT: .LBB8_3:1145; RV64I-NEXT: srli a3, a1, 561146; RV64I-NEXT: srli a4, a1, 481147; RV64I-NEXT: srli a5, a1, 401148; RV64I-NEXT: srli a6, a1, 321149; RV64I-NEXT: srli a7, a1, 241150; RV64I-NEXT: srli t0, a1, 161151; RV64I-NEXT: srli t1, a1, 81152; RV64I-NEXT: srli t2, a0, 561153; RV64I-NEXT: srli t3, a0, 481154; RV64I-NEXT: srli t4, a0, 401155; RV64I-NEXT: srli t5, a0, 321156; RV64I-NEXT: sb a6, 12(a2)1157; RV64I-NEXT: sb a5, 13(a2)1158; RV64I-NEXT: sb a4, 14(a2)1159; RV64I-NEXT: sb a3, 15(a2)1160; RV64I-NEXT: srli a3, a0, 241161; RV64I-NEXT: sb a1, 8(a2)1162; RV64I-NEXT: sb t1, 9(a2)1163; RV64I-NEXT: sb t0, 10(a2)1164; RV64I-NEXT: sb a7, 11(a2)1165; RV64I-NEXT: srli a1, a0, 161166; RV64I-NEXT: sb t5, 4(a2)1167; RV64I-NEXT: sb t4, 5(a2)1168; RV64I-NEXT: sb t3, 6(a2)1169; RV64I-NEXT: sb t2, 7(a2)1170; RV64I-NEXT: srli a4, a0, 81171; RV64I-NEXT: sb a0, 0(a2)1172; RV64I-NEXT: sb a4, 1(a2)1173; RV64I-NEXT: sb a1, 2(a2)1174; RV64I-NEXT: sb a3, 3(a2)1175; RV64I-NEXT: ret1176;1177; RV32I-LABEL: ashr_16bytes:1178; RV32I: # %bb.0:1179; RV32I-NEXT: addi sp, sp, -321180; RV32I-NEXT: lbu a3, 0(a0)1181; RV32I-NEXT: lbu a4, 1(a0)1182; RV32I-NEXT: lbu a5, 2(a0)1183; RV32I-NEXT: lbu a6, 3(a0)1184; RV32I-NEXT: lbu a7, 4(a0)1185; RV32I-NEXT: lbu t0, 5(a0)1186; RV32I-NEXT: lbu t1, 6(a0)1187; RV32I-NEXT: lbu t2, 7(a0)1188; RV32I-NEXT: slli a4, a4, 81189; RV32I-NEXT: or a3, a4, a31190; RV32I-NEXT: lbu a4, 8(a0)1191; RV32I-NEXT: lbu t3, 9(a0)1192; RV32I-NEXT: lbu t4, 10(a0)1193; RV32I-NEXT: lbu t5, 11(a0)1194; RV32I-NEXT: slli a5, a5, 161195; RV32I-NEXT: slli a6, a6, 241196; RV32I-NEXT: slli t0, t0, 81197; RV32I-NEXT: slli t1, t1, 161198; RV32I-NEXT: slli t2, t2, 241199; RV32I-NEXT: or a5, a6, a51200; RV32I-NEXT: or a6, t0, a71201; RV32I-NEXT: or a7, t2, t11202; RV32I-NEXT: lbu t0, 12(a0)1203; RV32I-NEXT: lbu t1, 13(a0)1204; RV32I-NEXT: lbu t2, 14(a0)1205; RV32I-NEXT: lbu a0, 15(a0)1206; RV32I-NEXT: slli t3, t3, 81207; RV32I-NEXT: slli t4, t4, 161208; RV32I-NEXT: slli t5, t5, 241209; RV32I-NEXT: slli t1, t1, 81210; RV32I-NEXT: or a4, t3, a41211; RV32I-NEXT: or t3, t5, t41212; RV32I-NEXT: or t0, t1, t01213; RV32I-NEXT: lbu t1, 1(a1)1214; RV32I-NEXT: lbu t4, 0(a1)1215; RV32I-NEXT: lbu t5, 2(a1)1216; RV32I-NEXT: lbu a1, 3(a1)1217; RV32I-NEXT: slli t1, t1, 81218; RV32I-NEXT: or t1, t1, t41219; RV32I-NEXT: slli t5, t5, 161220; RV32I-NEXT: slli a1, a1, 241221; RV32I-NEXT: or a1, a1, t51222; RV32I-NEXT: or a3, a5, a31223; RV32I-NEXT: mv a5, sp1224; RV32I-NEXT: slli t2, t2, 161225; RV32I-NEXT: slli a0, a0, 241226; RV32I-NEXT: or t2, a0, t21227; RV32I-NEXT: srai a0, a0, 311228; RV32I-NEXT: or a6, a7, a61229; RV32I-NEXT: or a4, t3, a41230; RV32I-NEXT: or a7, t2, t01231; RV32I-NEXT: or a1, a1, t11232; RV32I-NEXT: sw a0, 16(sp)1233; RV32I-NEXT: sw a0, 20(sp)1234; RV32I-NEXT: sw a0, 24(sp)1235; RV32I-NEXT: sw a0, 28(sp)1236; RV32I-NEXT: sw a3, 0(sp)1237; RV32I-NEXT: sw a6, 4(sp)1238; RV32I-NEXT: sw a4, 8(sp)1239; RV32I-NEXT: sw a7, 12(sp)1240; RV32I-NEXT: srli a0, a1, 31241; RV32I-NEXT: andi a3, a1, 311242; RV32I-NEXT: andi a0, a0, 121243; RV32I-NEXT: xori a3, a3, 311244; RV32I-NEXT: add a0, a5, a01245; RV32I-NEXT: lw a4, 4(a0)1246; RV32I-NEXT: lw a5, 8(a0)1247; RV32I-NEXT: lw a6, 0(a0)1248; RV32I-NEXT: lw a0, 12(a0)1249; RV32I-NEXT: srl a7, a4, a11250; RV32I-NEXT: slli t0, a5, 11251; RV32I-NEXT: srl a6, a6, a11252; RV32I-NEXT: slli a4, a4, 11253; RV32I-NEXT: srl a5, a5, a11254; RV32I-NEXT: slli t1, a0, 11255; RV32I-NEXT: sra a0, a0, a11256; RV32I-NEXT: sll a1, t0, a31257; RV32I-NEXT: sll a4, a4, a31258; RV32I-NEXT: sll a3, t1, a31259; RV32I-NEXT: srli t0, a0, 161260; RV32I-NEXT: srli t1, a0, 241261; RV32I-NEXT: srli t2, a0, 81262; RV32I-NEXT: or a1, a7, a11263; RV32I-NEXT: or a4, a6, a41264; RV32I-NEXT: or a3, a5, a31265; RV32I-NEXT: sb a0, 12(a2)1266; RV32I-NEXT: sb t2, 13(a2)1267; RV32I-NEXT: sb t0, 14(a2)1268; RV32I-NEXT: sb t1, 15(a2)1269; RV32I-NEXT: srli a0, a3, 161270; RV32I-NEXT: srli a5, a3, 241271; RV32I-NEXT: srli a6, a3, 81272; RV32I-NEXT: srli a7, a4, 161273; RV32I-NEXT: srli t0, a4, 241274; RV32I-NEXT: srli t1, a4, 81275; RV32I-NEXT: srli t2, a1, 161276; RV32I-NEXT: srli t3, a1, 241277; RV32I-NEXT: sb a3, 8(a2)1278; RV32I-NEXT: sb a6, 9(a2)1279; RV32I-NEXT: sb a0, 10(a2)1280; RV32I-NEXT: sb a5, 11(a2)1281; RV32I-NEXT: srli a0, a1, 81282; RV32I-NEXT: sb a4, 0(a2)1283; RV32I-NEXT: sb t1, 1(a2)1284; RV32I-NEXT: sb a7, 2(a2)1285; RV32I-NEXT: sb t0, 3(a2)1286; RV32I-NEXT: sb a1, 4(a2)1287; RV32I-NEXT: sb a0, 5(a2)1288; RV32I-NEXT: sb t2, 6(a2)1289; RV32I-NEXT: sb t3, 7(a2)1290; RV32I-NEXT: addi sp, sp, 321291; RV32I-NEXT: ret1292 %src = load i128, ptr %src.ptr, align 11293 %bitOff = load i128, ptr %bitOff.ptr, align 11294 %res = ashr i128 %src, %bitOff1295 store i128 %res, ptr %dst, align 11296 ret void1297}1298 1299define void @lshr_32bytes(ptr %src.ptr, ptr %bitOff.ptr, ptr %dst) nounwind {1300; RV64I-LABEL: lshr_32bytes:1301; RV64I: # %bb.0:1302; RV64I-NEXT: addi sp, sp, -1601303; RV64I-NEXT: sd s0, 152(sp) # 8-byte Folded Spill1304; RV64I-NEXT: sd s1, 144(sp) # 8-byte Folded Spill1305; RV64I-NEXT: sd s2, 136(sp) # 8-byte Folded Spill1306; RV64I-NEXT: sd s3, 128(sp) # 8-byte Folded Spill1307; RV64I-NEXT: sd s4, 120(sp) # 8-byte Folded Spill1308; RV64I-NEXT: sd s5, 112(sp) # 8-byte Folded Spill1309; RV64I-NEXT: sd s6, 104(sp) # 8-byte Folded Spill1310; RV64I-NEXT: sd s7, 96(sp) # 8-byte Folded Spill1311; RV64I-NEXT: sd s8, 88(sp) # 8-byte Folded Spill1312; RV64I-NEXT: sd s9, 80(sp) # 8-byte Folded Spill1313; RV64I-NEXT: sd s10, 72(sp) # 8-byte Folded Spill1314; RV64I-NEXT: sd s11, 64(sp) # 8-byte Folded Spill1315; RV64I-NEXT: lbu a3, 0(a0)1316; RV64I-NEXT: lbu a4, 1(a0)1317; RV64I-NEXT: lbu a5, 2(a0)1318; RV64I-NEXT: lbu a6, 3(a0)1319; RV64I-NEXT: lbu a7, 4(a0)1320; RV64I-NEXT: lbu t0, 5(a0)1321; RV64I-NEXT: lbu t1, 6(a0)1322; RV64I-NEXT: lbu t2, 7(a0)1323; RV64I-NEXT: lbu t3, 8(a0)1324; RV64I-NEXT: lbu t4, 9(a0)1325; RV64I-NEXT: lbu t5, 10(a0)1326; RV64I-NEXT: lbu t6, 11(a0)1327; RV64I-NEXT: lbu s0, 12(a0)1328; RV64I-NEXT: lbu s1, 13(a0)1329; RV64I-NEXT: lbu s2, 14(a0)1330; RV64I-NEXT: lbu s3, 15(a0)1331; RV64I-NEXT: lbu s4, 16(a0)1332; RV64I-NEXT: lbu s5, 17(a0)1333; RV64I-NEXT: lbu s6, 18(a0)1334; RV64I-NEXT: lbu s7, 19(a0)1335; RV64I-NEXT: slli a4, a4, 81336; RV64I-NEXT: slli s8, a5, 161337; RV64I-NEXT: slli a6, a6, 241338; RV64I-NEXT: slli t0, t0, 81339; RV64I-NEXT: slli t1, t1, 161340; RV64I-NEXT: slli t2, t2, 241341; RV64I-NEXT: or a5, a4, a31342; RV64I-NEXT: or a6, a6, s81343; RV64I-NEXT: or a3, t0, a71344; RV64I-NEXT: or a4, t2, t11345; RV64I-NEXT: lbu s8, 20(a0)1346; RV64I-NEXT: lbu s9, 21(a0)1347; RV64I-NEXT: lbu s10, 22(a0)1348; RV64I-NEXT: lbu s11, 23(a0)1349; RV64I-NEXT: slli t4, t4, 81350; RV64I-NEXT: slli t5, t5, 161351; RV64I-NEXT: slli t6, t6, 241352; RV64I-NEXT: slli s1, s1, 81353; RV64I-NEXT: slli s2, s2, 161354; RV64I-NEXT: slli s3, s3, 241355; RV64I-NEXT: or a7, t4, t31356; RV64I-NEXT: or t0, t6, t51357; RV64I-NEXT: or t1, s1, s01358; RV64I-NEXT: or t2, s3, s21359; RV64I-NEXT: lbu t6, 24(a0)1360; RV64I-NEXT: lbu s0, 25(a0)1361; RV64I-NEXT: lbu s1, 26(a0)1362; RV64I-NEXT: lbu s2, 27(a0)1363; RV64I-NEXT: slli s5, s5, 81364; RV64I-NEXT: slli s6, s6, 161365; RV64I-NEXT: slli s7, s7, 241366; RV64I-NEXT: slli s9, s9, 81367; RV64I-NEXT: or t3, s5, s41368; RV64I-NEXT: or t4, s7, s61369; RV64I-NEXT: or t5, s9, s81370; RV64I-NEXT: lbu s3, 28(a0)1371; RV64I-NEXT: lbu s4, 29(a0)1372; RV64I-NEXT: lbu s5, 30(a0)1373; RV64I-NEXT: lbu s6, 31(a0)1374; RV64I-NEXT: slli s10, s10, 161375; RV64I-NEXT: slli s11, s11, 241376; RV64I-NEXT: slli s0, s0, 81377; RV64I-NEXT: slli s1, s1, 161378; RV64I-NEXT: slli s2, s2, 241379; RV64I-NEXT: slli s4, s4, 81380; RV64I-NEXT: or a0, s11, s101381; RV64I-NEXT: or t6, s0, t61382; RV64I-NEXT: or s0, s2, s11383; RV64I-NEXT: or s1, s4, s31384; RV64I-NEXT: lbu s2, 0(a1)1385; RV64I-NEXT: lbu s3, 1(a1)1386; RV64I-NEXT: lbu s4, 2(a1)1387; RV64I-NEXT: lbu s7, 3(a1)1388; RV64I-NEXT: slli s5, s5, 161389; RV64I-NEXT: slli s6, s6, 241390; RV64I-NEXT: slli s3, s3, 81391; RV64I-NEXT: slli s4, s4, 161392; RV64I-NEXT: slli s7, s7, 241393; RV64I-NEXT: or s5, s6, s51394; RV64I-NEXT: or s2, s3, s21395; RV64I-NEXT: or s3, s7, s41396; RV64I-NEXT: lbu s4, 5(a1)1397; RV64I-NEXT: lbu s6, 4(a1)1398; RV64I-NEXT: lbu s7, 6(a1)1399; RV64I-NEXT: lbu a1, 7(a1)1400; RV64I-NEXT: slli s4, s4, 81401; RV64I-NEXT: or s4, s4, s61402; RV64I-NEXT: slli s7, s7, 161403; RV64I-NEXT: slli a1, a1, 241404; RV64I-NEXT: or a1, a1, s71405; RV64I-NEXT: sd zero, 32(sp)1406; RV64I-NEXT: sd zero, 40(sp)1407; RV64I-NEXT: sd zero, 48(sp)1408; RV64I-NEXT: sd zero, 56(sp)1409; RV64I-NEXT: or a5, a6, a51410; RV64I-NEXT: mv a6, sp1411; RV64I-NEXT: or a3, a4, a31412; RV64I-NEXT: or a4, t0, a71413; RV64I-NEXT: or a7, t2, t11414; RV64I-NEXT: or t0, t4, t31415; RV64I-NEXT: or a0, a0, t51416; RV64I-NEXT: or t1, s0, t61417; RV64I-NEXT: or t2, s5, s11418; RV64I-NEXT: or t3, s3, s21419; RV64I-NEXT: or a1, a1, s41420; RV64I-NEXT: slli a3, a3, 321421; RV64I-NEXT: slli a7, a7, 321422; RV64I-NEXT: slli a0, a0, 321423; RV64I-NEXT: slli t2, t2, 321424; RV64I-NEXT: slli a1, a1, 321425; RV64I-NEXT: or a3, a3, a51426; RV64I-NEXT: or a4, a7, a41427; RV64I-NEXT: or a0, a0, t01428; RV64I-NEXT: or a5, t2, t11429; RV64I-NEXT: or a1, a1, t31430; RV64I-NEXT: sd a3, 0(sp)1431; RV64I-NEXT: sd a4, 8(sp)1432; RV64I-NEXT: sd a0, 16(sp)1433; RV64I-NEXT: sd a5, 24(sp)1434; RV64I-NEXT: srli a0, a1, 31435; RV64I-NEXT: andi a3, a1, 631436; RV64I-NEXT: andi a0, a0, 241437; RV64I-NEXT: xori a3, a3, 631438; RV64I-NEXT: add a0, a6, a01439; RV64I-NEXT: ld a4, 8(a0)1440; RV64I-NEXT: ld a5, 16(a0)1441; RV64I-NEXT: ld a6, 0(a0)1442; RV64I-NEXT: ld a0, 24(a0)1443; RV64I-NEXT: srl a7, a4, a11444; RV64I-NEXT: slli t0, a5, 11445; RV64I-NEXT: srl a6, a6, a11446; RV64I-NEXT: slli a4, a4, 11447; RV64I-NEXT: srl a5, a5, a11448; RV64I-NEXT: slli t1, a0, 11449; RV64I-NEXT: srl t2, a0, a11450; RV64I-NEXT: sll a0, t0, a31451; RV64I-NEXT: sll a1, a4, a31452; RV64I-NEXT: sll a3, t1, a31453; RV64I-NEXT: srli a4, t2, 561454; RV64I-NEXT: srli t0, t2, 481455; RV64I-NEXT: srli t1, t2, 401456; RV64I-NEXT: srli t3, t2, 321457; RV64I-NEXT: srli t4, t2, 241458; RV64I-NEXT: srli t5, t2, 161459; RV64I-NEXT: srli t6, t2, 81460; RV64I-NEXT: or a0, a7, a01461; RV64I-NEXT: or a1, a6, a11462; RV64I-NEXT: or a3, a5, a31463; RV64I-NEXT: sb t3, 28(a2)1464; RV64I-NEXT: sb t1, 29(a2)1465; RV64I-NEXT: sb t0, 30(a2)1466; RV64I-NEXT: sb a4, 31(a2)1467; RV64I-NEXT: sb t2, 24(a2)1468; RV64I-NEXT: sb t6, 25(a2)1469; RV64I-NEXT: sb t5, 26(a2)1470; RV64I-NEXT: sb t4, 27(a2)1471; RV64I-NEXT: srli a4, a3, 561472; RV64I-NEXT: srli a5, a3, 481473; RV64I-NEXT: srli a6, a3, 401474; RV64I-NEXT: srli a7, a3, 321475; RV64I-NEXT: srli t0, a3, 241476; RV64I-NEXT: srli t1, a3, 161477; RV64I-NEXT: srli t2, a3, 81478; RV64I-NEXT: srli t3, a1, 561479; RV64I-NEXT: srli t4, a1, 481480; RV64I-NEXT: srli t5, a1, 401481; RV64I-NEXT: srli t6, a1, 321482; RV64I-NEXT: srli s0, a1, 241483; RV64I-NEXT: srli s1, a1, 161484; RV64I-NEXT: srli s2, a1, 81485; RV64I-NEXT: srli s3, a0, 561486; RV64I-NEXT: srli s4, a0, 481487; RV64I-NEXT: srli s5, a0, 401488; RV64I-NEXT: sb a7, 20(a2)1489; RV64I-NEXT: sb a6, 21(a2)1490; RV64I-NEXT: sb a5, 22(a2)1491; RV64I-NEXT: sb a4, 23(a2)1492; RV64I-NEXT: srli a4, a0, 321493; RV64I-NEXT: sb a3, 16(a2)1494; RV64I-NEXT: sb t2, 17(a2)1495; RV64I-NEXT: sb t1, 18(a2)1496; RV64I-NEXT: sb t0, 19(a2)1497; RV64I-NEXT: srli a3, a0, 241498; RV64I-NEXT: sb t6, 4(a2)1499; RV64I-NEXT: sb t5, 5(a2)1500; RV64I-NEXT: sb t4, 6(a2)1501; RV64I-NEXT: sb t3, 7(a2)1502; RV64I-NEXT: srli a5, a0, 161503; RV64I-NEXT: sb a1, 0(a2)1504; RV64I-NEXT: sb s2, 1(a2)1505; RV64I-NEXT: sb s1, 2(a2)1506; RV64I-NEXT: sb s0, 3(a2)1507; RV64I-NEXT: srli a1, a0, 81508; RV64I-NEXT: sb a4, 12(a2)1509; RV64I-NEXT: sb s5, 13(a2)1510; RV64I-NEXT: sb s4, 14(a2)1511; RV64I-NEXT: sb s3, 15(a2)1512; RV64I-NEXT: sb a0, 8(a2)1513; RV64I-NEXT: sb a1, 9(a2)1514; RV64I-NEXT: sb a5, 10(a2)1515; RV64I-NEXT: sb a3, 11(a2)1516; RV64I-NEXT: ld s0, 152(sp) # 8-byte Folded Reload1517; RV64I-NEXT: ld s1, 144(sp) # 8-byte Folded Reload1518; RV64I-NEXT: ld s2, 136(sp) # 8-byte Folded Reload1519; RV64I-NEXT: ld s3, 128(sp) # 8-byte Folded Reload1520; RV64I-NEXT: ld s4, 120(sp) # 8-byte Folded Reload1521; RV64I-NEXT: ld s5, 112(sp) # 8-byte Folded Reload1522; RV64I-NEXT: ld s6, 104(sp) # 8-byte Folded Reload1523; RV64I-NEXT: ld s7, 96(sp) # 8-byte Folded Reload1524; RV64I-NEXT: ld s8, 88(sp) # 8-byte Folded Reload1525; RV64I-NEXT: ld s9, 80(sp) # 8-byte Folded Reload1526; RV64I-NEXT: ld s10, 72(sp) # 8-byte Folded Reload1527; RV64I-NEXT: ld s11, 64(sp) # 8-byte Folded Reload1528; RV64I-NEXT: addi sp, sp, 1601529; RV64I-NEXT: ret1530;1531; RV32I-LABEL: lshr_32bytes:1532; RV32I: # %bb.0:1533; RV32I-NEXT: addi sp, sp, -1281534; RV32I-NEXT: sw ra, 124(sp) # 4-byte Folded Spill1535; RV32I-NEXT: sw s0, 120(sp) # 4-byte Folded Spill1536; RV32I-NEXT: sw s1, 116(sp) # 4-byte Folded Spill1537; RV32I-NEXT: sw s2, 112(sp) # 4-byte Folded Spill1538; RV32I-NEXT: sw s3, 108(sp) # 4-byte Folded Spill1539; RV32I-NEXT: sw s4, 104(sp) # 4-byte Folded Spill1540; RV32I-NEXT: sw s5, 100(sp) # 4-byte Folded Spill1541; RV32I-NEXT: sw s6, 96(sp) # 4-byte Folded Spill1542; RV32I-NEXT: sw s7, 92(sp) # 4-byte Folded Spill1543; RV32I-NEXT: sw s8, 88(sp) # 4-byte Folded Spill1544; RV32I-NEXT: sw s9, 84(sp) # 4-byte Folded Spill1545; RV32I-NEXT: sw s10, 80(sp) # 4-byte Folded Spill1546; RV32I-NEXT: sw s11, 76(sp) # 4-byte Folded Spill1547; RV32I-NEXT: lbu a3, 0(a0)1548; RV32I-NEXT: lbu a4, 1(a0)1549; RV32I-NEXT: lbu a6, 2(a0)1550; RV32I-NEXT: lbu a7, 3(a0)1551; RV32I-NEXT: lbu a5, 4(a0)1552; RV32I-NEXT: lbu t0, 5(a0)1553; RV32I-NEXT: lbu t1, 6(a0)1554; RV32I-NEXT: lbu t2, 7(a0)1555; RV32I-NEXT: lbu t3, 8(a0)1556; RV32I-NEXT: lbu t4, 9(a0)1557; RV32I-NEXT: lbu t5, 10(a0)1558; RV32I-NEXT: lbu t6, 11(a0)1559; RV32I-NEXT: lbu s0, 12(a0)1560; RV32I-NEXT: lbu s2, 13(a0)1561; RV32I-NEXT: lbu s4, 14(a0)1562; RV32I-NEXT: lbu s5, 15(a0)1563; RV32I-NEXT: lbu s6, 16(a0)1564; RV32I-NEXT: lbu s7, 17(a0)1565; RV32I-NEXT: lbu s8, 18(a0)1566; RV32I-NEXT: lbu s9, 19(a0)1567; RV32I-NEXT: slli a4, a4, 81568; RV32I-NEXT: slli a6, a6, 161569; RV32I-NEXT: slli a7, a7, 241570; RV32I-NEXT: or a3, a4, a31571; RV32I-NEXT: sw a3, 4(sp) # 4-byte Folded Spill1572; RV32I-NEXT: or a4, a7, a61573; RV32I-NEXT: lbu s10, 20(a0)1574; RV32I-NEXT: lbu s11, 21(a0)1575; RV32I-NEXT: lbu ra, 22(a0)1576; RV32I-NEXT: lbu a3, 23(a0)1577; RV32I-NEXT: slli t0, t0, 81578; RV32I-NEXT: slli t1, t1, 161579; RV32I-NEXT: slli t2, t2, 241580; RV32I-NEXT: slli t4, t4, 81581; RV32I-NEXT: slli t5, t5, 161582; RV32I-NEXT: slli t6, t6, 241583; RV32I-NEXT: or a5, t0, a51584; RV32I-NEXT: or a6, t2, t11585; RV32I-NEXT: or a7, t4, t31586; RV32I-NEXT: or t0, t6, t51587; RV32I-NEXT: lbu s1, 24(a0)1588; RV32I-NEXT: lbu s3, 25(a0)1589; RV32I-NEXT: lbu t4, 26(a0)1590; RV32I-NEXT: lbu t5, 27(a0)1591; RV32I-NEXT: slli s2, s2, 81592; RV32I-NEXT: slli s4, s4, 161593; RV32I-NEXT: slli s5, s5, 241594; RV32I-NEXT: slli s7, s7, 81595; RV32I-NEXT: or t1, s2, s01596; RV32I-NEXT: or t2, s5, s41597; RV32I-NEXT: or t3, s7, s61598; RV32I-NEXT: lbu t6, 28(a0)1599; RV32I-NEXT: lbu s4, 29(a0)1600; RV32I-NEXT: lbu s5, 30(a0)1601; RV32I-NEXT: lbu s6, 31(a0)1602; RV32I-NEXT: slli s8, s8, 161603; RV32I-NEXT: slli s9, s9, 241604; RV32I-NEXT: slli s11, s11, 81605; RV32I-NEXT: slli ra, ra, 161606; RV32I-NEXT: slli a3, a3, 241607; RV32I-NEXT: or a0, s9, s81608; RV32I-NEXT: or s0, s11, s101609; RV32I-NEXT: or s2, a3, ra1610; RV32I-NEXT: lbu a3, 0(a1)1611; RV32I-NEXT: lbu s7, 1(a1)1612; RV32I-NEXT: lbu s8, 2(a1)1613; RV32I-NEXT: lbu a1, 3(a1)1614; RV32I-NEXT: sw zero, 56(sp)1615; RV32I-NEXT: sw zero, 60(sp)1616; RV32I-NEXT: sw zero, 64(sp)1617; RV32I-NEXT: sw zero, 68(sp)1618; RV32I-NEXT: sw zero, 40(sp)1619; RV32I-NEXT: sw zero, 44(sp)1620; RV32I-NEXT: sw zero, 48(sp)1621; RV32I-NEXT: sw zero, 52(sp)1622; RV32I-NEXT: slli s3, s3, 81623; RV32I-NEXT: or s1, s3, s11624; RV32I-NEXT: addi s3, sp, 81625; RV32I-NEXT: slli t4, t4, 161626; RV32I-NEXT: slli t5, t5, 241627; RV32I-NEXT: slli s4, s4, 81628; RV32I-NEXT: slli s5, s5, 161629; RV32I-NEXT: slli s6, s6, 241630; RV32I-NEXT: slli s7, s7, 81631; RV32I-NEXT: slli s8, s8, 161632; RV32I-NEXT: slli a1, a1, 241633; RV32I-NEXT: or t4, t5, t41634; RV32I-NEXT: or t5, s4, t61635; RV32I-NEXT: or t6, s6, s51636; RV32I-NEXT: or a3, s7, a31637; RV32I-NEXT: or a1, a1, s81638; RV32I-NEXT: lw s4, 4(sp) # 4-byte Folded Reload1639; RV32I-NEXT: or a4, a4, s41640; RV32I-NEXT: or a5, a6, a51641; RV32I-NEXT: or a6, t0, a71642; RV32I-NEXT: or a7, t2, t11643; RV32I-NEXT: or t0, a0, t31644; RV32I-NEXT: or t1, s2, s01645; RV32I-NEXT: or t2, t4, s11646; RV32I-NEXT: or t3, t6, t51647; RV32I-NEXT: or a0, a1, a31648; RV32I-NEXT: sw t0, 24(sp)1649; RV32I-NEXT: sw t1, 28(sp)1650; RV32I-NEXT: sw t2, 32(sp)1651; RV32I-NEXT: sw t3, 36(sp)1652; RV32I-NEXT: sw a4, 8(sp)1653; RV32I-NEXT: sw a5, 12(sp)1654; RV32I-NEXT: sw a6, 16(sp)1655; RV32I-NEXT: sw a7, 20(sp)1656; RV32I-NEXT: srli a1, a0, 31657; RV32I-NEXT: andi a3, a0, 311658; RV32I-NEXT: andi a4, a1, 281659; RV32I-NEXT: xori a1, a3, 311660; RV32I-NEXT: add a4, s3, a41661; RV32I-NEXT: lw a3, 0(a4)1662; RV32I-NEXT: lw a5, 4(a4)1663; RV32I-NEXT: lw a6, 8(a4)1664; RV32I-NEXT: lw a7, 12(a4)1665; RV32I-NEXT: lw t0, 16(a4)1666; RV32I-NEXT: lw t1, 20(a4)1667; RV32I-NEXT: lw t2, 24(a4)1668; RV32I-NEXT: lw a4, 28(a4)1669; RV32I-NEXT: srl t3, a5, a01670; RV32I-NEXT: slli t4, a6, 11671; RV32I-NEXT: srl a3, a3, a01672; RV32I-NEXT: slli a5, a5, 11673; RV32I-NEXT: srl t5, a7, a01674; RV32I-NEXT: slli t6, t0, 11675; RV32I-NEXT: srl a6, a6, a01676; RV32I-NEXT: slli a7, a7, 11677; RV32I-NEXT: srl s0, t1, a01678; RV32I-NEXT: slli s1, t2, 11679; RV32I-NEXT: srl t0, t0, a01680; RV32I-NEXT: slli t1, t1, 11681; RV32I-NEXT: srl t2, t2, a01682; RV32I-NEXT: slli s2, a4, 11683; RV32I-NEXT: srl s3, a4, a01684; RV32I-NEXT: sll a0, t4, a11685; RV32I-NEXT: sll a4, a5, a11686; RV32I-NEXT: sll a5, t6, a11687; RV32I-NEXT: sll a7, a7, a11688; RV32I-NEXT: sll t4, s1, a11689; RV32I-NEXT: sll t1, t1, a11690; RV32I-NEXT: sll t6, s2, a11691; RV32I-NEXT: srli s1, s3, 241692; RV32I-NEXT: srli s2, s3, 161693; RV32I-NEXT: srli s4, s3, 81694; RV32I-NEXT: or a0, t3, a01695; RV32I-NEXT: or a1, a3, a41696; RV32I-NEXT: or a3, t5, a51697; RV32I-NEXT: or a4, a6, a71698; RV32I-NEXT: or a5, s0, t41699; RV32I-NEXT: or a6, t0, t11700; RV32I-NEXT: or a7, t2, t61701; RV32I-NEXT: sb s3, 28(a2)1702; RV32I-NEXT: sb s4, 29(a2)1703; RV32I-NEXT: sb s2, 30(a2)1704; RV32I-NEXT: sb s1, 31(a2)1705; RV32I-NEXT: srli t0, a7, 241706; RV32I-NEXT: srli t1, a7, 161707; RV32I-NEXT: srli t2, a7, 81708; RV32I-NEXT: srli t3, a6, 241709; RV32I-NEXT: srli t4, a6, 161710; RV32I-NEXT: srli t5, a6, 81711; RV32I-NEXT: srli t6, a5, 241712; RV32I-NEXT: srli s0, a5, 161713; RV32I-NEXT: srli s1, a5, 81714; RV32I-NEXT: srli s2, a4, 241715; RV32I-NEXT: srli s3, a4, 161716; RV32I-NEXT: srli s4, a4, 81717; RV32I-NEXT: srli s5, a3, 241718; RV32I-NEXT: srli s6, a3, 161719; RV32I-NEXT: srli s7, a3, 81720; RV32I-NEXT: srli s8, a1, 241721; RV32I-NEXT: srli s9, a1, 161722; RV32I-NEXT: sb a7, 24(a2)1723; RV32I-NEXT: sb t2, 25(a2)1724; RV32I-NEXT: sb t1, 26(a2)1725; RV32I-NEXT: sb t0, 27(a2)1726; RV32I-NEXT: srli a7, a1, 81727; RV32I-NEXT: sb a6, 16(a2)1728; RV32I-NEXT: sb t5, 17(a2)1729; RV32I-NEXT: sb t4, 18(a2)1730; RV32I-NEXT: sb t3, 19(a2)1731; RV32I-NEXT: srli a6, a0, 241732; RV32I-NEXT: sb a5, 20(a2)1733; RV32I-NEXT: sb s1, 21(a2)1734; RV32I-NEXT: sb s0, 22(a2)1735; RV32I-NEXT: sb t6, 23(a2)1736; RV32I-NEXT: srli a5, a0, 161737; RV32I-NEXT: sb a4, 8(a2)1738; RV32I-NEXT: sb s4, 9(a2)1739; RV32I-NEXT: sb s3, 10(a2)1740; RV32I-NEXT: sb s2, 11(a2)1741; RV32I-NEXT: srli a4, a0, 81742; RV32I-NEXT: sb a3, 12(a2)1743; RV32I-NEXT: sb s7, 13(a2)1744; RV32I-NEXT: sb s6, 14(a2)1745; RV32I-NEXT: sb s5, 15(a2)1746; RV32I-NEXT: sb a1, 0(a2)1747; RV32I-NEXT: sb a7, 1(a2)1748; RV32I-NEXT: sb s9, 2(a2)1749; RV32I-NEXT: sb s8, 3(a2)1750; RV32I-NEXT: sb a0, 4(a2)1751; RV32I-NEXT: sb a4, 5(a2)1752; RV32I-NEXT: sb a5, 6(a2)1753; RV32I-NEXT: sb a6, 7(a2)1754; RV32I-NEXT: lw ra, 124(sp) # 4-byte Folded Reload1755; RV32I-NEXT: lw s0, 120(sp) # 4-byte Folded Reload1756; RV32I-NEXT: lw s1, 116(sp) # 4-byte Folded Reload1757; RV32I-NEXT: lw s2, 112(sp) # 4-byte Folded Reload1758; RV32I-NEXT: lw s3, 108(sp) # 4-byte Folded Reload1759; RV32I-NEXT: lw s4, 104(sp) # 4-byte Folded Reload1760; RV32I-NEXT: lw s5, 100(sp) # 4-byte Folded Reload1761; RV32I-NEXT: lw s6, 96(sp) # 4-byte Folded Reload1762; RV32I-NEXT: lw s7, 92(sp) # 4-byte Folded Reload1763; RV32I-NEXT: lw s8, 88(sp) # 4-byte Folded Reload1764; RV32I-NEXT: lw s9, 84(sp) # 4-byte Folded Reload1765; RV32I-NEXT: lw s10, 80(sp) # 4-byte Folded Reload1766; RV32I-NEXT: lw s11, 76(sp) # 4-byte Folded Reload1767; RV32I-NEXT: addi sp, sp, 1281768; RV32I-NEXT: ret1769 %src = load i256, ptr %src.ptr, align 11770 %bitOff = load i256, ptr %bitOff.ptr, align 11771 %res = lshr i256 %src, %bitOff1772 store i256 %res, ptr %dst, align 11773 ret void1774}1775define void @shl_32bytes(ptr %src.ptr, ptr %bitOff.ptr, ptr %dst) nounwind {1776; RV64I-LABEL: shl_32bytes:1777; RV64I: # %bb.0:1778; RV64I-NEXT: addi sp, sp, -1601779; RV64I-NEXT: sd s0, 152(sp) # 8-byte Folded Spill1780; RV64I-NEXT: sd s1, 144(sp) # 8-byte Folded Spill1781; RV64I-NEXT: sd s2, 136(sp) # 8-byte Folded Spill1782; RV64I-NEXT: sd s3, 128(sp) # 8-byte Folded Spill1783; RV64I-NEXT: sd s4, 120(sp) # 8-byte Folded Spill1784; RV64I-NEXT: sd s5, 112(sp) # 8-byte Folded Spill1785; RV64I-NEXT: sd s6, 104(sp) # 8-byte Folded Spill1786; RV64I-NEXT: sd s7, 96(sp) # 8-byte Folded Spill1787; RV64I-NEXT: sd s8, 88(sp) # 8-byte Folded Spill1788; RV64I-NEXT: sd s9, 80(sp) # 8-byte Folded Spill1789; RV64I-NEXT: sd s10, 72(sp) # 8-byte Folded Spill1790; RV64I-NEXT: sd s11, 64(sp) # 8-byte Folded Spill1791; RV64I-NEXT: lbu a3, 0(a0)1792; RV64I-NEXT: lbu a4, 1(a0)1793; RV64I-NEXT: lbu a5, 2(a0)1794; RV64I-NEXT: lbu a6, 3(a0)1795; RV64I-NEXT: lbu a7, 4(a0)1796; RV64I-NEXT: lbu t0, 5(a0)1797; RV64I-NEXT: lbu t1, 6(a0)1798; RV64I-NEXT: lbu t2, 7(a0)1799; RV64I-NEXT: lbu t3, 8(a0)1800; RV64I-NEXT: lbu t4, 9(a0)1801; RV64I-NEXT: lbu t5, 10(a0)1802; RV64I-NEXT: lbu t6, 11(a0)1803; RV64I-NEXT: lbu s0, 12(a0)1804; RV64I-NEXT: lbu s1, 13(a0)1805; RV64I-NEXT: lbu s2, 14(a0)1806; RV64I-NEXT: lbu s3, 15(a0)1807; RV64I-NEXT: lbu s4, 16(a0)1808; RV64I-NEXT: lbu s5, 17(a0)1809; RV64I-NEXT: lbu s6, 18(a0)1810; RV64I-NEXT: lbu s7, 19(a0)1811; RV64I-NEXT: slli a4, a4, 81812; RV64I-NEXT: slli s8, a5, 161813; RV64I-NEXT: slli a6, a6, 241814; RV64I-NEXT: slli t0, t0, 81815; RV64I-NEXT: slli t1, t1, 161816; RV64I-NEXT: slli t2, t2, 241817; RV64I-NEXT: or a5, a4, a31818; RV64I-NEXT: or a6, a6, s81819; RV64I-NEXT: or a3, t0, a71820; RV64I-NEXT: or a4, t2, t11821; RV64I-NEXT: lbu s8, 20(a0)1822; RV64I-NEXT: lbu s9, 21(a0)1823; RV64I-NEXT: lbu s10, 22(a0)1824; RV64I-NEXT: lbu s11, 23(a0)1825; RV64I-NEXT: slli t4, t4, 81826; RV64I-NEXT: slli t5, t5, 161827; RV64I-NEXT: slli t6, t6, 241828; RV64I-NEXT: slli s1, s1, 81829; RV64I-NEXT: slli s2, s2, 161830; RV64I-NEXT: slli s3, s3, 241831; RV64I-NEXT: or a7, t4, t31832; RV64I-NEXT: or t0, t6, t51833; RV64I-NEXT: or t1, s1, s01834; RV64I-NEXT: or t2, s3, s21835; RV64I-NEXT: lbu t6, 24(a0)1836; RV64I-NEXT: lbu s0, 25(a0)1837; RV64I-NEXT: lbu s1, 26(a0)1838; RV64I-NEXT: lbu s2, 27(a0)1839; RV64I-NEXT: slli s5, s5, 81840; RV64I-NEXT: slli s6, s6, 161841; RV64I-NEXT: slli s7, s7, 241842; RV64I-NEXT: slli s9, s9, 81843; RV64I-NEXT: or t3, s5, s41844; RV64I-NEXT: or t4, s7, s61845; RV64I-NEXT: or t5, s9, s81846; RV64I-NEXT: lbu s3, 28(a0)1847; RV64I-NEXT: lbu s4, 29(a0)1848; RV64I-NEXT: lbu s5, 30(a0)1849; RV64I-NEXT: lbu s6, 31(a0)1850; RV64I-NEXT: slli s10, s10, 161851; RV64I-NEXT: slli s11, s11, 241852; RV64I-NEXT: slli s0, s0, 81853; RV64I-NEXT: slli s1, s1, 161854; RV64I-NEXT: slli s2, s2, 241855; RV64I-NEXT: slli s4, s4, 81856; RV64I-NEXT: or a0, s11, s101857; RV64I-NEXT: or t6, s0, t61858; RV64I-NEXT: or s0, s2, s11859; RV64I-NEXT: or s1, s4, s31860; RV64I-NEXT: lbu s2, 0(a1)1861; RV64I-NEXT: lbu s3, 1(a1)1862; RV64I-NEXT: lbu s4, 2(a1)1863; RV64I-NEXT: lbu s7, 3(a1)1864; RV64I-NEXT: slli s5, s5, 161865; RV64I-NEXT: slli s6, s6, 241866; RV64I-NEXT: slli s3, s3, 81867; RV64I-NEXT: slli s4, s4, 161868; RV64I-NEXT: slli s7, s7, 241869; RV64I-NEXT: or s5, s6, s51870; RV64I-NEXT: or s2, s3, s21871; RV64I-NEXT: or s3, s7, s41872; RV64I-NEXT: lbu s4, 5(a1)1873; RV64I-NEXT: lbu s6, 4(a1)1874; RV64I-NEXT: lbu s7, 6(a1)1875; RV64I-NEXT: lbu a1, 7(a1)1876; RV64I-NEXT: slli s4, s4, 81877; RV64I-NEXT: or s4, s4, s61878; RV64I-NEXT: slli s7, s7, 161879; RV64I-NEXT: slli a1, a1, 241880; RV64I-NEXT: or a1, a1, s71881; RV64I-NEXT: sd zero, 0(sp)1882; RV64I-NEXT: sd zero, 8(sp)1883; RV64I-NEXT: sd zero, 16(sp)1884; RV64I-NEXT: sd zero, 24(sp)1885; RV64I-NEXT: or a5, a6, a51886; RV64I-NEXT: addi a6, sp, 321887; RV64I-NEXT: or a3, a4, a31888; RV64I-NEXT: or a4, t0, a71889; RV64I-NEXT: or a7, t2, t11890; RV64I-NEXT: or t0, t4, t31891; RV64I-NEXT: or a0, a0, t51892; RV64I-NEXT: or t1, s0, t61893; RV64I-NEXT: or t2, s5, s11894; RV64I-NEXT: or t3, s3, s21895; RV64I-NEXT: or a1, a1, s41896; RV64I-NEXT: slli a3, a3, 321897; RV64I-NEXT: slli a7, a7, 321898; RV64I-NEXT: slli a0, a0, 321899; RV64I-NEXT: slli t2, t2, 321900; RV64I-NEXT: slli a1, a1, 321901; RV64I-NEXT: or a3, a3, a51902; RV64I-NEXT: or a4, a7, a41903; RV64I-NEXT: or a0, a0, t01904; RV64I-NEXT: or a5, t2, t11905; RV64I-NEXT: or a1, a1, t31906; RV64I-NEXT: sd a3, 32(sp)1907; RV64I-NEXT: sd a4, 40(sp)1908; RV64I-NEXT: sd a0, 48(sp)1909; RV64I-NEXT: sd a5, 56(sp)1910; RV64I-NEXT: srli a0, a1, 31911; RV64I-NEXT: andi a3, a1, 631912; RV64I-NEXT: andi a0, a0, 241913; RV64I-NEXT: sub a0, a6, a01914; RV64I-NEXT: ld a4, 0(a0)1915; RV64I-NEXT: ld a5, 8(a0)1916; RV64I-NEXT: ld a6, 16(a0)1917; RV64I-NEXT: ld a0, 24(a0)1918; RV64I-NEXT: xori a3, a3, 631919; RV64I-NEXT: sll a7, a5, a11920; RV64I-NEXT: srli t0, a4, 11921; RV64I-NEXT: sll t1, a0, a11922; RV64I-NEXT: srli a0, a6, 11923; RV64I-NEXT: sll a6, a6, a11924; RV64I-NEXT: srli a5, a5, 11925; RV64I-NEXT: sll a4, a4, a11926; RV64I-NEXT: srl a1, t0, a31927; RV64I-NEXT: srl t0, a0, a31928; RV64I-NEXT: srl a3, a5, a31929; RV64I-NEXT: srli a5, a4, 561930; RV64I-NEXT: srli t2, a4, 481931; RV64I-NEXT: srli t3, a4, 401932; RV64I-NEXT: srli t4, a4, 321933; RV64I-NEXT: srli t5, a4, 241934; RV64I-NEXT: srli t6, a4, 161935; RV64I-NEXT: srli s0, a4, 81936; RV64I-NEXT: or a0, a7, a11937; RV64I-NEXT: or a1, t1, t01938; RV64I-NEXT: or a3, a6, a31939; RV64I-NEXT: sb t4, 4(a2)1940; RV64I-NEXT: sb t3, 5(a2)1941; RV64I-NEXT: sb t2, 6(a2)1942; RV64I-NEXT: sb a5, 7(a2)1943; RV64I-NEXT: sb a4, 0(a2)1944; RV64I-NEXT: sb s0, 1(a2)1945; RV64I-NEXT: sb t6, 2(a2)1946; RV64I-NEXT: sb t5, 3(a2)1947; RV64I-NEXT: srli a4, a3, 561948; RV64I-NEXT: srli a5, a3, 481949; RV64I-NEXT: srli a6, a3, 401950; RV64I-NEXT: srli a7, a3, 321951; RV64I-NEXT: srli t0, a3, 241952; RV64I-NEXT: srli t1, a3, 161953; RV64I-NEXT: srli t2, a3, 81954; RV64I-NEXT: srli t3, a1, 561955; RV64I-NEXT: srli t4, a1, 481956; RV64I-NEXT: srli t5, a1, 401957; RV64I-NEXT: srli t6, a1, 321958; RV64I-NEXT: srli s0, a1, 241959; RV64I-NEXT: srli s1, a1, 161960; RV64I-NEXT: srli s2, a1, 81961; RV64I-NEXT: srli s3, a0, 561962; RV64I-NEXT: srli s4, a0, 481963; RV64I-NEXT: srli s5, a0, 401964; RV64I-NEXT: sb a7, 20(a2)1965; RV64I-NEXT: sb a6, 21(a2)1966; RV64I-NEXT: sb a5, 22(a2)1967; RV64I-NEXT: sb a4, 23(a2)1968; RV64I-NEXT: srli a4, a0, 321969; RV64I-NEXT: sb a3, 16(a2)1970; RV64I-NEXT: sb t2, 17(a2)1971; RV64I-NEXT: sb t1, 18(a2)1972; RV64I-NEXT: sb t0, 19(a2)1973; RV64I-NEXT: srli a3, a0, 241974; RV64I-NEXT: sb t6, 28(a2)1975; RV64I-NEXT: sb t5, 29(a2)1976; RV64I-NEXT: sb t4, 30(a2)1977; RV64I-NEXT: sb t3, 31(a2)1978; RV64I-NEXT: srli a5, a0, 161979; RV64I-NEXT: sb a1, 24(a2)1980; RV64I-NEXT: sb s2, 25(a2)1981; RV64I-NEXT: sb s1, 26(a2)1982; RV64I-NEXT: sb s0, 27(a2)1983; RV64I-NEXT: srli a1, a0, 81984; RV64I-NEXT: sb a4, 12(a2)1985; RV64I-NEXT: sb s5, 13(a2)1986; RV64I-NEXT: sb s4, 14(a2)1987; RV64I-NEXT: sb s3, 15(a2)1988; RV64I-NEXT: sb a0, 8(a2)1989; RV64I-NEXT: sb a1, 9(a2)1990; RV64I-NEXT: sb a5, 10(a2)1991; RV64I-NEXT: sb a3, 11(a2)1992; RV64I-NEXT: ld s0, 152(sp) # 8-byte Folded Reload1993; RV64I-NEXT: ld s1, 144(sp) # 8-byte Folded Reload1994; RV64I-NEXT: ld s2, 136(sp) # 8-byte Folded Reload1995; RV64I-NEXT: ld s3, 128(sp) # 8-byte Folded Reload1996; RV64I-NEXT: ld s4, 120(sp) # 8-byte Folded Reload1997; RV64I-NEXT: ld s5, 112(sp) # 8-byte Folded Reload1998; RV64I-NEXT: ld s6, 104(sp) # 8-byte Folded Reload1999; RV64I-NEXT: ld s7, 96(sp) # 8-byte Folded Reload2000; RV64I-NEXT: ld s8, 88(sp) # 8-byte Folded Reload2001; RV64I-NEXT: ld s9, 80(sp) # 8-byte Folded Reload2002; RV64I-NEXT: ld s10, 72(sp) # 8-byte Folded Reload2003; RV64I-NEXT: ld s11, 64(sp) # 8-byte Folded Reload2004; RV64I-NEXT: addi sp, sp, 1602005; RV64I-NEXT: ret2006;2007; RV32I-LABEL: shl_32bytes:2008; RV32I: # %bb.0:2009; RV32I-NEXT: addi sp, sp, -1282010; RV32I-NEXT: sw ra, 124(sp) # 4-byte Folded Spill2011; RV32I-NEXT: sw s0, 120(sp) # 4-byte Folded Spill2012; RV32I-NEXT: sw s1, 116(sp) # 4-byte Folded Spill2013; RV32I-NEXT: sw s2, 112(sp) # 4-byte Folded Spill2014; RV32I-NEXT: sw s3, 108(sp) # 4-byte Folded Spill2015; RV32I-NEXT: sw s4, 104(sp) # 4-byte Folded Spill2016; RV32I-NEXT: sw s5, 100(sp) # 4-byte Folded Spill2017; RV32I-NEXT: sw s6, 96(sp) # 4-byte Folded Spill2018; RV32I-NEXT: sw s7, 92(sp) # 4-byte Folded Spill2019; RV32I-NEXT: sw s8, 88(sp) # 4-byte Folded Spill2020; RV32I-NEXT: sw s9, 84(sp) # 4-byte Folded Spill2021; RV32I-NEXT: sw s10, 80(sp) # 4-byte Folded Spill2022; RV32I-NEXT: sw s11, 76(sp) # 4-byte Folded Spill2023; RV32I-NEXT: lbu a3, 0(a0)2024; RV32I-NEXT: lbu a4, 1(a0)2025; RV32I-NEXT: lbu a6, 2(a0)2026; RV32I-NEXT: lbu a7, 3(a0)2027; RV32I-NEXT: lbu a5, 4(a0)2028; RV32I-NEXT: lbu t0, 5(a0)2029; RV32I-NEXT: lbu t1, 6(a0)2030; RV32I-NEXT: lbu t2, 7(a0)2031; RV32I-NEXT: lbu t3, 8(a0)2032; RV32I-NEXT: lbu t4, 9(a0)2033; RV32I-NEXT: lbu t5, 10(a0)2034; RV32I-NEXT: lbu t6, 11(a0)2035; RV32I-NEXT: lbu s0, 12(a0)2036; RV32I-NEXT: lbu s2, 13(a0)2037; RV32I-NEXT: lbu s4, 14(a0)2038; RV32I-NEXT: lbu s5, 15(a0)2039; RV32I-NEXT: lbu s6, 16(a0)2040; RV32I-NEXT: lbu s7, 17(a0)2041; RV32I-NEXT: lbu s8, 18(a0)2042; RV32I-NEXT: lbu s9, 19(a0)2043; RV32I-NEXT: slli a4, a4, 82044; RV32I-NEXT: slli a6, a6, 162045; RV32I-NEXT: slli a7, a7, 242046; RV32I-NEXT: or a3, a4, a32047; RV32I-NEXT: sw a3, 4(sp) # 4-byte Folded Spill2048; RV32I-NEXT: or a4, a7, a62049; RV32I-NEXT: lbu s10, 20(a0)2050; RV32I-NEXT: lbu s11, 21(a0)2051; RV32I-NEXT: lbu ra, 22(a0)2052; RV32I-NEXT: lbu a3, 23(a0)2053; RV32I-NEXT: slli t0, t0, 82054; RV32I-NEXT: slli t1, t1, 162055; RV32I-NEXT: slli t2, t2, 242056; RV32I-NEXT: slli t4, t4, 82057; RV32I-NEXT: slli t5, t5, 162058; RV32I-NEXT: slli t6, t6, 242059; RV32I-NEXT: or a5, t0, a52060; RV32I-NEXT: or a6, t2, t12061; RV32I-NEXT: or a7, t4, t32062; RV32I-NEXT: or t0, t6, t52063; RV32I-NEXT: lbu s1, 24(a0)2064; RV32I-NEXT: lbu s3, 25(a0)2065; RV32I-NEXT: lbu t4, 26(a0)2066; RV32I-NEXT: lbu t5, 27(a0)2067; RV32I-NEXT: slli s2, s2, 82068; RV32I-NEXT: slli s4, s4, 162069; RV32I-NEXT: slli s5, s5, 242070; RV32I-NEXT: slli s7, s7, 82071; RV32I-NEXT: or t1, s2, s02072; RV32I-NEXT: or t2, s5, s42073; RV32I-NEXT: or t3, s7, s62074; RV32I-NEXT: lbu t6, 28(a0)2075; RV32I-NEXT: lbu s4, 29(a0)2076; RV32I-NEXT: lbu s5, 30(a0)2077; RV32I-NEXT: lbu s6, 31(a0)2078; RV32I-NEXT: slli s8, s8, 162079; RV32I-NEXT: slli s9, s9, 242080; RV32I-NEXT: slli s11, s11, 82081; RV32I-NEXT: slli ra, ra, 162082; RV32I-NEXT: slli a3, a3, 242083; RV32I-NEXT: or a0, s9, s82084; RV32I-NEXT: or s0, s11, s102085; RV32I-NEXT: or s2, a3, ra2086; RV32I-NEXT: lbu a3, 0(a1)2087; RV32I-NEXT: lbu s7, 1(a1)2088; RV32I-NEXT: lbu s8, 2(a1)2089; RV32I-NEXT: lbu a1, 3(a1)2090; RV32I-NEXT: sw zero, 24(sp)2091; RV32I-NEXT: sw zero, 28(sp)2092; RV32I-NEXT: sw zero, 32(sp)2093; RV32I-NEXT: sw zero, 36(sp)2094; RV32I-NEXT: sw zero, 8(sp)2095; RV32I-NEXT: sw zero, 12(sp)2096; RV32I-NEXT: sw zero, 16(sp)2097; RV32I-NEXT: sw zero, 20(sp)2098; RV32I-NEXT: slli s3, s3, 82099; RV32I-NEXT: or s1, s3, s12100; RV32I-NEXT: addi s3, sp, 402101; RV32I-NEXT: slli t4, t4, 162102; RV32I-NEXT: slli t5, t5, 242103; RV32I-NEXT: slli s4, s4, 82104; RV32I-NEXT: slli s5, s5, 162105; RV32I-NEXT: slli s6, s6, 242106; RV32I-NEXT: slli s7, s7, 82107; RV32I-NEXT: slli s8, s8, 162108; RV32I-NEXT: slli a1, a1, 242109; RV32I-NEXT: or t4, t5, t42110; RV32I-NEXT: or t5, s4, t62111; RV32I-NEXT: or t6, s6, s52112; RV32I-NEXT: or a3, s7, a32113; RV32I-NEXT: or a1, a1, s82114; RV32I-NEXT: lw s4, 4(sp) # 4-byte Folded Reload2115; RV32I-NEXT: or a4, a4, s42116; RV32I-NEXT: or a5, a6, a52117; RV32I-NEXT: or a6, t0, a72118; RV32I-NEXT: or a7, t2, t12119; RV32I-NEXT: or t0, a0, t32120; RV32I-NEXT: or t1, s2, s02121; RV32I-NEXT: or t2, t4, s12122; RV32I-NEXT: or t3, t6, t52123; RV32I-NEXT: or a0, a1, a32124; RV32I-NEXT: sw t0, 56(sp)2125; RV32I-NEXT: sw t1, 60(sp)2126; RV32I-NEXT: sw t2, 64(sp)2127; RV32I-NEXT: sw t3, 68(sp)2128; RV32I-NEXT: sw a4, 40(sp)2129; RV32I-NEXT: sw a5, 44(sp)2130; RV32I-NEXT: sw a6, 48(sp)2131; RV32I-NEXT: sw a7, 52(sp)2132; RV32I-NEXT: srli a1, a0, 32133; RV32I-NEXT: andi a3, a0, 312134; RV32I-NEXT: andi a4, a1, 282135; RV32I-NEXT: xori a1, a3, 312136; RV32I-NEXT: sub a3, s3, a42137; RV32I-NEXT: lw a4, 0(a3)2138; RV32I-NEXT: lw a5, 4(a3)2139; RV32I-NEXT: lw a6, 8(a3)2140; RV32I-NEXT: lw a7, 12(a3)2141; RV32I-NEXT: lw t0, 16(a3)2142; RV32I-NEXT: lw t1, 20(a3)2143; RV32I-NEXT: lw t2, 24(a3)2144; RV32I-NEXT: lw a3, 28(a3)2145; RV32I-NEXT: sll t3, a5, a02146; RV32I-NEXT: srli t4, a4, 12147; RV32I-NEXT: sll t5, a7, a02148; RV32I-NEXT: srli t6, a6, 12149; RV32I-NEXT: sll a6, a6, a02150; RV32I-NEXT: srli a5, a5, 12151; RV32I-NEXT: sll s0, t1, a02152; RV32I-NEXT: srli s1, t0, 12153; RV32I-NEXT: sll t0, t0, a02154; RV32I-NEXT: srli a7, a7, 12155; RV32I-NEXT: sll s2, a3, a02156; RV32I-NEXT: srli a3, t2, 12157; RV32I-NEXT: sll t2, t2, a02158; RV32I-NEXT: srli t1, t1, 12159; RV32I-NEXT: sll s3, a4, a02160; RV32I-NEXT: srl a0, t4, a12161; RV32I-NEXT: srl a4, t6, a12162; RV32I-NEXT: srl a5, a5, a12163; RV32I-NEXT: srl t4, s1, a12164; RV32I-NEXT: srl a7, a7, a12165; RV32I-NEXT: srl t6, a3, a12166; RV32I-NEXT: srl t1, t1, a12167; RV32I-NEXT: srli s1, s3, 242168; RV32I-NEXT: srli s4, s3, 162169; RV32I-NEXT: srli s5, s3, 82170; RV32I-NEXT: or a0, t3, a02171; RV32I-NEXT: or a1, t5, a42172; RV32I-NEXT: or a3, a6, a52173; RV32I-NEXT: or a4, s0, t42174; RV32I-NEXT: or a5, t0, a72175; RV32I-NEXT: or a6, s2, t62176; RV32I-NEXT: or a7, t2, t12177; RV32I-NEXT: sb s3, 0(a2)2178; RV32I-NEXT: sb s5, 1(a2)2179; RV32I-NEXT: sb s4, 2(a2)2180; RV32I-NEXT: sb s1, 3(a2)2181; RV32I-NEXT: srli t0, a7, 242182; RV32I-NEXT: srli t1, a7, 162183; RV32I-NEXT: srli t2, a7, 82184; RV32I-NEXT: srli t3, a6, 242185; RV32I-NEXT: srli t4, a6, 162186; RV32I-NEXT: srli t5, a6, 82187; RV32I-NEXT: srli t6, a5, 242188; RV32I-NEXT: srli s0, a5, 162189; RV32I-NEXT: srli s1, a5, 82190; RV32I-NEXT: srli s2, a4, 242191; RV32I-NEXT: srli s3, a4, 162192; RV32I-NEXT: srli s4, a4, 82193; RV32I-NEXT: srli s5, a3, 242194; RV32I-NEXT: srli s6, a3, 162195; RV32I-NEXT: srli s7, a3, 82196; RV32I-NEXT: srli s8, a1, 242197; RV32I-NEXT: srli s9, a1, 162198; RV32I-NEXT: sb a7, 24(a2)2199; RV32I-NEXT: sb t2, 25(a2)2200; RV32I-NEXT: sb t1, 26(a2)2201; RV32I-NEXT: sb t0, 27(a2)2202; RV32I-NEXT: srli a7, a1, 82203; RV32I-NEXT: sb a6, 28(a2)2204; RV32I-NEXT: sb t5, 29(a2)2205; RV32I-NEXT: sb t4, 30(a2)2206; RV32I-NEXT: sb t3, 31(a2)2207; RV32I-NEXT: srli a6, a0, 242208; RV32I-NEXT: sb a5, 16(a2)2209; RV32I-NEXT: sb s1, 17(a2)2210; RV32I-NEXT: sb s0, 18(a2)2211; RV32I-NEXT: sb t6, 19(a2)2212; RV32I-NEXT: srli a5, a0, 162213; RV32I-NEXT: sb a4, 20(a2)2214; RV32I-NEXT: sb s4, 21(a2)2215; RV32I-NEXT: sb s3, 22(a2)2216; RV32I-NEXT: sb s2, 23(a2)2217; RV32I-NEXT: srli a4, a0, 82218; RV32I-NEXT: sb a3, 8(a2)2219; RV32I-NEXT: sb s7, 9(a2)2220; RV32I-NEXT: sb s6, 10(a2)2221; RV32I-NEXT: sb s5, 11(a2)2222; RV32I-NEXT: sb a1, 12(a2)2223; RV32I-NEXT: sb a7, 13(a2)2224; RV32I-NEXT: sb s9, 14(a2)2225; RV32I-NEXT: sb s8, 15(a2)2226; RV32I-NEXT: sb a0, 4(a2)2227; RV32I-NEXT: sb a4, 5(a2)2228; RV32I-NEXT: sb a5, 6(a2)2229; RV32I-NEXT: sb a6, 7(a2)2230; RV32I-NEXT: lw ra, 124(sp) # 4-byte Folded Reload2231; RV32I-NEXT: lw s0, 120(sp) # 4-byte Folded Reload2232; RV32I-NEXT: lw s1, 116(sp) # 4-byte Folded Reload2233; RV32I-NEXT: lw s2, 112(sp) # 4-byte Folded Reload2234; RV32I-NEXT: lw s3, 108(sp) # 4-byte Folded Reload2235; RV32I-NEXT: lw s4, 104(sp) # 4-byte Folded Reload2236; RV32I-NEXT: lw s5, 100(sp) # 4-byte Folded Reload2237; RV32I-NEXT: lw s6, 96(sp) # 4-byte Folded Reload2238; RV32I-NEXT: lw s7, 92(sp) # 4-byte Folded Reload2239; RV32I-NEXT: lw s8, 88(sp) # 4-byte Folded Reload2240; RV32I-NEXT: lw s9, 84(sp) # 4-byte Folded Reload2241; RV32I-NEXT: lw s10, 80(sp) # 4-byte Folded Reload2242; RV32I-NEXT: lw s11, 76(sp) # 4-byte Folded Reload2243; RV32I-NEXT: addi sp, sp, 1282244; RV32I-NEXT: ret2245 %src = load i256, ptr %src.ptr, align 12246 %bitOff = load i256, ptr %bitOff.ptr, align 12247 %res = shl i256 %src, %bitOff2248 store i256 %res, ptr %dst, align 12249 ret void2250}2251define void @ashr_32bytes(ptr %src.ptr, ptr %bitOff.ptr, ptr %dst) nounwind {2252; RV64I-LABEL: ashr_32bytes:2253; RV64I: # %bb.0:2254; RV64I-NEXT: addi sp, sp, -1602255; RV64I-NEXT: sd s0, 152(sp) # 8-byte Folded Spill2256; RV64I-NEXT: sd s1, 144(sp) # 8-byte Folded Spill2257; RV64I-NEXT: sd s2, 136(sp) # 8-byte Folded Spill2258; RV64I-NEXT: sd s3, 128(sp) # 8-byte Folded Spill2259; RV64I-NEXT: sd s4, 120(sp) # 8-byte Folded Spill2260; RV64I-NEXT: sd s5, 112(sp) # 8-byte Folded Spill2261; RV64I-NEXT: sd s6, 104(sp) # 8-byte Folded Spill2262; RV64I-NEXT: sd s7, 96(sp) # 8-byte Folded Spill2263; RV64I-NEXT: sd s8, 88(sp) # 8-byte Folded Spill2264; RV64I-NEXT: sd s9, 80(sp) # 8-byte Folded Spill2265; RV64I-NEXT: sd s10, 72(sp) # 8-byte Folded Spill2266; RV64I-NEXT: sd s11, 64(sp) # 8-byte Folded Spill2267; RV64I-NEXT: lbu a3, 0(a0)2268; RV64I-NEXT: lbu a4, 1(a0)2269; RV64I-NEXT: lbu a5, 2(a0)2270; RV64I-NEXT: lbu a6, 3(a0)2271; RV64I-NEXT: lbu a7, 4(a0)2272; RV64I-NEXT: lbu t0, 5(a0)2273; RV64I-NEXT: lbu t1, 6(a0)2274; RV64I-NEXT: lbu t2, 7(a0)2275; RV64I-NEXT: lbu t3, 8(a0)2276; RV64I-NEXT: lbu t4, 9(a0)2277; RV64I-NEXT: lbu t5, 10(a0)2278; RV64I-NEXT: lbu t6, 11(a0)2279; RV64I-NEXT: lbu s0, 12(a0)2280; RV64I-NEXT: lbu s1, 13(a0)2281; RV64I-NEXT: lbu s2, 14(a0)2282; RV64I-NEXT: lbu s3, 15(a0)2283; RV64I-NEXT: lbu s4, 16(a0)2284; RV64I-NEXT: lbu s5, 17(a0)2285; RV64I-NEXT: lbu s6, 18(a0)2286; RV64I-NEXT: lbu s7, 19(a0)2287; RV64I-NEXT: slli a4, a4, 82288; RV64I-NEXT: slli a5, a5, 162289; RV64I-NEXT: slli a6, a6, 242290; RV64I-NEXT: slli t0, t0, 82291; RV64I-NEXT: slli t1, t1, 162292; RV64I-NEXT: slli t2, t2, 242293; RV64I-NEXT: or a3, a4, a32294; RV64I-NEXT: or a4, a6, a52295; RV64I-NEXT: or a5, t0, a72296; RV64I-NEXT: or a6, t2, t12297; RV64I-NEXT: lbu s8, 20(a0)2298; RV64I-NEXT: lbu s9, 21(a0)2299; RV64I-NEXT: lbu s10, 22(a0)2300; RV64I-NEXT: lbu s11, 23(a0)2301; RV64I-NEXT: slli t4, t4, 82302; RV64I-NEXT: slli t5, t5, 162303; RV64I-NEXT: slli t6, t6, 242304; RV64I-NEXT: slli s1, s1, 82305; RV64I-NEXT: slli s2, s2, 162306; RV64I-NEXT: slli s3, s3, 242307; RV64I-NEXT: or a7, t4, t32308; RV64I-NEXT: or t0, t6, t52309; RV64I-NEXT: or t1, s1, s02310; RV64I-NEXT: or t2, s3, s22311; RV64I-NEXT: lbu t6, 24(a0)2312; RV64I-NEXT: lbu s0, 25(a0)2313; RV64I-NEXT: lbu s1, 26(a0)2314; RV64I-NEXT: lbu s2, 27(a0)2315; RV64I-NEXT: slli s5, s5, 82316; RV64I-NEXT: slli s6, s6, 162317; RV64I-NEXT: slli s7, s7, 242318; RV64I-NEXT: slli s9, s9, 82319; RV64I-NEXT: or t3, s5, s42320; RV64I-NEXT: or t4, s7, s62321; RV64I-NEXT: or t5, s9, s82322; RV64I-NEXT: lbu s3, 28(a0)2323; RV64I-NEXT: lbu s4, 29(a0)2324; RV64I-NEXT: lbu s5, 30(a0)2325; RV64I-NEXT: lbu s6, 31(a0)2326; RV64I-NEXT: slli s10, s10, 162327; RV64I-NEXT: slli s11, s11, 242328; RV64I-NEXT: slli s0, s0, 82329; RV64I-NEXT: slli s1, s1, 162330; RV64I-NEXT: slli s2, s2, 242331; RV64I-NEXT: slli s4, s4, 82332; RV64I-NEXT: or a0, s11, s102333; RV64I-NEXT: or t6, s0, t62334; RV64I-NEXT: or s0, s2, s12335; RV64I-NEXT: or s1, s4, s32336; RV64I-NEXT: lbu s2, 0(a1)2337; RV64I-NEXT: lbu s3, 1(a1)2338; RV64I-NEXT: lbu s4, 2(a1)2339; RV64I-NEXT: lbu s7, 3(a1)2340; RV64I-NEXT: slli s5, s5, 162341; RV64I-NEXT: slli s6, s6, 242342; RV64I-NEXT: slli s3, s3, 82343; RV64I-NEXT: slli s4, s4, 162344; RV64I-NEXT: slli s7, s7, 242345; RV64I-NEXT: or s5, s6, s52346; RV64I-NEXT: or s2, s3, s22347; RV64I-NEXT: or s3, s7, s42348; RV64I-NEXT: lbu s4, 5(a1)2349; RV64I-NEXT: lbu s6, 4(a1)2350; RV64I-NEXT: lbu s7, 6(a1)2351; RV64I-NEXT: lbu a1, 7(a1)2352; RV64I-NEXT: slli s4, s4, 82353; RV64I-NEXT: or s4, s4, s62354; RV64I-NEXT: slli s7, s7, 162355; RV64I-NEXT: slli a1, a1, 242356; RV64I-NEXT: or a1, a1, s72357; RV64I-NEXT: mv s6, sp2358; RV64I-NEXT: or a3, a4, a32359; RV64I-NEXT: or a4, a6, a52360; RV64I-NEXT: or a5, t0, a72361; RV64I-NEXT: or a6, t2, t12362; RV64I-NEXT: or a7, t4, t32363; RV64I-NEXT: or a0, a0, t52364; RV64I-NEXT: or t0, s0, t62365; RV64I-NEXT: or t1, s5, s12366; RV64I-NEXT: or t2, s3, s22367; RV64I-NEXT: or a1, a1, s42368; RV64I-NEXT: slli a4, a4, 322369; RV64I-NEXT: slli a6, a6, 322370; RV64I-NEXT: slli a0, a0, 322371; RV64I-NEXT: slli t3, t1, 322372; RV64I-NEXT: slli a1, a1, 322373; RV64I-NEXT: sraiw t1, t1, 312374; RV64I-NEXT: or a3, a4, a32375; RV64I-NEXT: or a4, a6, a52376; RV64I-NEXT: or a0, a0, a72377; RV64I-NEXT: or a5, t3, t02378; RV64I-NEXT: or a1, a1, t22379; RV64I-NEXT: sd t1, 32(sp)2380; RV64I-NEXT: sd t1, 40(sp)2381; RV64I-NEXT: sd t1, 48(sp)2382; RV64I-NEXT: sd t1, 56(sp)2383; RV64I-NEXT: sd a3, 0(sp)2384; RV64I-NEXT: sd a4, 8(sp)2385; RV64I-NEXT: sd a0, 16(sp)2386; RV64I-NEXT: sd a5, 24(sp)2387; RV64I-NEXT: srli a0, a1, 32388; RV64I-NEXT: andi a3, a1, 632389; RV64I-NEXT: andi a0, a0, 242390; RV64I-NEXT: xori a3, a3, 632391; RV64I-NEXT: add a0, s6, a02392; RV64I-NEXT: ld a4, 8(a0)2393; RV64I-NEXT: ld a5, 16(a0)2394; RV64I-NEXT: ld a6, 0(a0)2395; RV64I-NEXT: ld a0, 24(a0)2396; RV64I-NEXT: srl a7, a4, a12397; RV64I-NEXT: slli t0, a5, 12398; RV64I-NEXT: srl a6, a6, a12399; RV64I-NEXT: slli a4, a4, 12400; RV64I-NEXT: srl a5, a5, a12401; RV64I-NEXT: slli t1, a0, 12402; RV64I-NEXT: sra t2, a0, a12403; RV64I-NEXT: sll a0, t0, a32404; RV64I-NEXT: sll a1, a4, a32405; RV64I-NEXT: sll a3, t1, a32406; RV64I-NEXT: srli a4, t2, 562407; RV64I-NEXT: srli t0, t2, 482408; RV64I-NEXT: srli t1, t2, 402409; RV64I-NEXT: srli t3, t2, 322410; RV64I-NEXT: srli t4, t2, 242411; RV64I-NEXT: srli t5, t2, 162412; RV64I-NEXT: srli t6, t2, 82413; RV64I-NEXT: or a0, a7, a02414; RV64I-NEXT: or a1, a6, a12415; RV64I-NEXT: or a3, a5, a32416; RV64I-NEXT: sb t3, 28(a2)2417; RV64I-NEXT: sb t1, 29(a2)2418; RV64I-NEXT: sb t0, 30(a2)2419; RV64I-NEXT: sb a4, 31(a2)2420; RV64I-NEXT: sb t2, 24(a2)2421; RV64I-NEXT: sb t6, 25(a2)2422; RV64I-NEXT: sb t5, 26(a2)2423; RV64I-NEXT: sb t4, 27(a2)2424; RV64I-NEXT: srli a4, a3, 562425; RV64I-NEXT: srli a5, a3, 482426; RV64I-NEXT: srli a6, a3, 402427; RV64I-NEXT: srli a7, a3, 322428; RV64I-NEXT: srli t0, a3, 242429; RV64I-NEXT: srli t1, a3, 162430; RV64I-NEXT: srli t2, a3, 82431; RV64I-NEXT: srli t3, a1, 562432; RV64I-NEXT: srli t4, a1, 482433; RV64I-NEXT: srli t5, a1, 402434; RV64I-NEXT: srli t6, a1, 322435; RV64I-NEXT: srli s0, a1, 242436; RV64I-NEXT: srli s1, a1, 162437; RV64I-NEXT: srli s2, a1, 82438; RV64I-NEXT: srli s3, a0, 562439; RV64I-NEXT: srli s4, a0, 482440; RV64I-NEXT: srli s5, a0, 402441; RV64I-NEXT: srli s6, a0, 322442; RV64I-NEXT: sb a7, 20(a2)2443; RV64I-NEXT: sb a6, 21(a2)2444; RV64I-NEXT: sb a5, 22(a2)2445; RV64I-NEXT: sb a4, 23(a2)2446; RV64I-NEXT: srli a4, a0, 242447; RV64I-NEXT: sb a3, 16(a2)2448; RV64I-NEXT: sb t2, 17(a2)2449; RV64I-NEXT: sb t1, 18(a2)2450; RV64I-NEXT: sb t0, 19(a2)2451; RV64I-NEXT: srli a3, a0, 162452; RV64I-NEXT: sb t6, 4(a2)2453; RV64I-NEXT: sb t5, 5(a2)2454; RV64I-NEXT: sb t4, 6(a2)2455; RV64I-NEXT: sb t3, 7(a2)2456; RV64I-NEXT: srli a5, a0, 82457; RV64I-NEXT: sb a1, 0(a2)2458; RV64I-NEXT: sb s2, 1(a2)2459; RV64I-NEXT: sb s1, 2(a2)2460; RV64I-NEXT: sb s0, 3(a2)2461; RV64I-NEXT: sb s6, 12(a2)2462; RV64I-NEXT: sb s5, 13(a2)2463; RV64I-NEXT: sb s4, 14(a2)2464; RV64I-NEXT: sb s3, 15(a2)2465; RV64I-NEXT: sb a0, 8(a2)2466; RV64I-NEXT: sb a5, 9(a2)2467; RV64I-NEXT: sb a3, 10(a2)2468; RV64I-NEXT: sb a4, 11(a2)2469; RV64I-NEXT: ld s0, 152(sp) # 8-byte Folded Reload2470; RV64I-NEXT: ld s1, 144(sp) # 8-byte Folded Reload2471; RV64I-NEXT: ld s2, 136(sp) # 8-byte Folded Reload2472; RV64I-NEXT: ld s3, 128(sp) # 8-byte Folded Reload2473; RV64I-NEXT: ld s4, 120(sp) # 8-byte Folded Reload2474; RV64I-NEXT: ld s5, 112(sp) # 8-byte Folded Reload2475; RV64I-NEXT: ld s6, 104(sp) # 8-byte Folded Reload2476; RV64I-NEXT: ld s7, 96(sp) # 8-byte Folded Reload2477; RV64I-NEXT: ld s8, 88(sp) # 8-byte Folded Reload2478; RV64I-NEXT: ld s9, 80(sp) # 8-byte Folded Reload2479; RV64I-NEXT: ld s10, 72(sp) # 8-byte Folded Reload2480; RV64I-NEXT: ld s11, 64(sp) # 8-byte Folded Reload2481; RV64I-NEXT: addi sp, sp, 1602482; RV64I-NEXT: ret2483;2484; RV32I-LABEL: ashr_32bytes:2485; RV32I: # %bb.0:2486; RV32I-NEXT: addi sp, sp, -1282487; RV32I-NEXT: sw ra, 124(sp) # 4-byte Folded Spill2488; RV32I-NEXT: sw s0, 120(sp) # 4-byte Folded Spill2489; RV32I-NEXT: sw s1, 116(sp) # 4-byte Folded Spill2490; RV32I-NEXT: sw s2, 112(sp) # 4-byte Folded Spill2491; RV32I-NEXT: sw s3, 108(sp) # 4-byte Folded Spill2492; RV32I-NEXT: sw s4, 104(sp) # 4-byte Folded Spill2493; RV32I-NEXT: sw s5, 100(sp) # 4-byte Folded Spill2494; RV32I-NEXT: sw s6, 96(sp) # 4-byte Folded Spill2495; RV32I-NEXT: sw s7, 92(sp) # 4-byte Folded Spill2496; RV32I-NEXT: sw s8, 88(sp) # 4-byte Folded Spill2497; RV32I-NEXT: sw s9, 84(sp) # 4-byte Folded Spill2498; RV32I-NEXT: sw s10, 80(sp) # 4-byte Folded Spill2499; RV32I-NEXT: sw s11, 76(sp) # 4-byte Folded Spill2500; RV32I-NEXT: lbu a3, 0(a0)2501; RV32I-NEXT: lbu a4, 1(a0)2502; RV32I-NEXT: lbu a6, 2(a0)2503; RV32I-NEXT: lbu a7, 3(a0)2504; RV32I-NEXT: lbu a5, 4(a0)2505; RV32I-NEXT: lbu t0, 5(a0)2506; RV32I-NEXT: lbu t1, 6(a0)2507; RV32I-NEXT: lbu t2, 7(a0)2508; RV32I-NEXT: lbu t3, 8(a0)2509; RV32I-NEXT: lbu t4, 9(a0)2510; RV32I-NEXT: lbu t5, 10(a0)2511; RV32I-NEXT: lbu t6, 11(a0)2512; RV32I-NEXT: lbu s0, 12(a0)2513; RV32I-NEXT: lbu s1, 13(a0)2514; RV32I-NEXT: lbu s2, 14(a0)2515; RV32I-NEXT: lbu s3, 15(a0)2516; RV32I-NEXT: lbu s4, 16(a0)2517; RV32I-NEXT: lbu s5, 17(a0)2518; RV32I-NEXT: lbu s6, 18(a0)2519; RV32I-NEXT: lbu s7, 19(a0)2520; RV32I-NEXT: slli a4, a4, 82521; RV32I-NEXT: slli a6, a6, 162522; RV32I-NEXT: slli a7, a7, 242523; RV32I-NEXT: or a3, a4, a32524; RV32I-NEXT: sw a3, 4(sp) # 4-byte Folded Spill2525; RV32I-NEXT: or a4, a7, a62526; RV32I-NEXT: lbu s8, 20(a0)2527; RV32I-NEXT: lbu s9, 21(a0)2528; RV32I-NEXT: lbu s10, 22(a0)2529; RV32I-NEXT: lbu s11, 23(a0)2530; RV32I-NEXT: slli t0, t0, 82531; RV32I-NEXT: slli t1, t1, 162532; RV32I-NEXT: slli t2, t2, 242533; RV32I-NEXT: slli t4, t4, 82534; RV32I-NEXT: slli t5, t5, 162535; RV32I-NEXT: slli t6, t6, 242536; RV32I-NEXT: or a5, t0, a52537; RV32I-NEXT: or a6, t2, t12538; RV32I-NEXT: or a7, t4, t32539; RV32I-NEXT: or t0, t6, t52540; RV32I-NEXT: lbu ra, 24(a0)2541; RV32I-NEXT: lbu a3, 25(a0)2542; RV32I-NEXT: lbu t4, 26(a0)2543; RV32I-NEXT: lbu t5, 27(a0)2544; RV32I-NEXT: slli s1, s1, 82545; RV32I-NEXT: slli s2, s2, 162546; RV32I-NEXT: slli s3, s3, 242547; RV32I-NEXT: slli s5, s5, 82548; RV32I-NEXT: or t1, s1, s02549; RV32I-NEXT: or t2, s3, s22550; RV32I-NEXT: or t3, s5, s42551; RV32I-NEXT: lbu t6, 28(a0)2552; RV32I-NEXT: lbu s0, 29(a0)2553; RV32I-NEXT: lbu s1, 30(a0)2554; RV32I-NEXT: lbu a0, 31(a0)2555; RV32I-NEXT: slli s6, s6, 162556; RV32I-NEXT: slli s7, s7, 242557; RV32I-NEXT: slli s9, s9, 82558; RV32I-NEXT: slli s10, s10, 162559; RV32I-NEXT: slli s11, s11, 242560; RV32I-NEXT: or s2, s7, s62561; RV32I-NEXT: or s3, s9, s82562; RV32I-NEXT: or s4, s11, s102563; RV32I-NEXT: lbu s5, 0(a1)2564; RV32I-NEXT: lbu s6, 1(a1)2565; RV32I-NEXT: lbu s7, 2(a1)2566; RV32I-NEXT: lbu a1, 3(a1)2567; RV32I-NEXT: slli a3, a3, 82568; RV32I-NEXT: or a3, a3, ra2569; RV32I-NEXT: addi s8, sp, 82570; RV32I-NEXT: slli t4, t4, 162571; RV32I-NEXT: slli t5, t5, 242572; RV32I-NEXT: slli s0, s0, 82573; RV32I-NEXT: slli s1, s1, 162574; RV32I-NEXT: slli a0, a0, 242575; RV32I-NEXT: slli s6, s6, 82576; RV32I-NEXT: slli s7, s7, 162577; RV32I-NEXT: slli a1, a1, 242578; RV32I-NEXT: or t4, t5, t42579; RV32I-NEXT: or t5, s0, t62580; RV32I-NEXT: or s1, a0, s12581; RV32I-NEXT: or t6, s6, s52582; RV32I-NEXT: or a1, a1, s72583; RV32I-NEXT: srai s0, a0, 312584; RV32I-NEXT: lw a0, 4(sp) # 4-byte Folded Reload2585; RV32I-NEXT: or a4, a4, a02586; RV32I-NEXT: or a5, a6, a52587; RV32I-NEXT: or a6, t0, a72588; RV32I-NEXT: or a7, t2, t12589; RV32I-NEXT: or t0, s2, t32590; RV32I-NEXT: or t1, s4, s32591; RV32I-NEXT: or a3, t4, a32592; RV32I-NEXT: or t2, s1, t52593; RV32I-NEXT: or a0, a1, t62594; RV32I-NEXT: sw s0, 56(sp)2595; RV32I-NEXT: sw s0, 60(sp)2596; RV32I-NEXT: sw s0, 64(sp)2597; RV32I-NEXT: sw s0, 68(sp)2598; RV32I-NEXT: sw s0, 40(sp)2599; RV32I-NEXT: sw s0, 44(sp)2600; RV32I-NEXT: sw s0, 48(sp)2601; RV32I-NEXT: sw s0, 52(sp)2602; RV32I-NEXT: sw t0, 24(sp)2603; RV32I-NEXT: sw t1, 28(sp)2604; RV32I-NEXT: sw a3, 32(sp)2605; RV32I-NEXT: sw t2, 36(sp)2606; RV32I-NEXT: sw a4, 8(sp)2607; RV32I-NEXT: sw a5, 12(sp)2608; RV32I-NEXT: sw a6, 16(sp)2609; RV32I-NEXT: sw a7, 20(sp)2610; RV32I-NEXT: srli a1, a0, 32611; RV32I-NEXT: andi a3, a0, 312612; RV32I-NEXT: andi a4, a1, 282613; RV32I-NEXT: xori a1, a3, 312614; RV32I-NEXT: add a4, s8, a42615; RV32I-NEXT: lw a3, 0(a4)2616; RV32I-NEXT: lw a5, 4(a4)2617; RV32I-NEXT: lw a6, 8(a4)2618; RV32I-NEXT: lw a7, 12(a4)2619; RV32I-NEXT: lw t0, 16(a4)2620; RV32I-NEXT: lw t1, 20(a4)2621; RV32I-NEXT: lw t2, 24(a4)2622; RV32I-NEXT: lw a4, 28(a4)2623; RV32I-NEXT: srl t3, a5, a02624; RV32I-NEXT: slli t4, a6, 12625; RV32I-NEXT: srl a3, a3, a02626; RV32I-NEXT: slli a5, a5, 12627; RV32I-NEXT: srl t5, a7, a02628; RV32I-NEXT: slli t6, t0, 12629; RV32I-NEXT: srl a6, a6, a02630; RV32I-NEXT: slli a7, a7, 12631; RV32I-NEXT: srl s0, t1, a02632; RV32I-NEXT: slli s1, t2, 12633; RV32I-NEXT: srl t0, t0, a02634; RV32I-NEXT: slli t1, t1, 12635; RV32I-NEXT: srl t2, t2, a02636; RV32I-NEXT: slli s2, a4, 12637; RV32I-NEXT: sra s3, a4, a02638; RV32I-NEXT: sll a0, t4, a12639; RV32I-NEXT: sll a4, a5, a12640; RV32I-NEXT: sll a5, t6, a12641; RV32I-NEXT: sll a7, a7, a12642; RV32I-NEXT: sll t4, s1, a12643; RV32I-NEXT: sll t1, t1, a12644; RV32I-NEXT: sll t6, s2, a12645; RV32I-NEXT: srli s1, s3, 242646; RV32I-NEXT: srli s2, s3, 162647; RV32I-NEXT: srli s4, s3, 82648; RV32I-NEXT: or a0, t3, a02649; RV32I-NEXT: or a1, a3, a42650; RV32I-NEXT: or a3, t5, a52651; RV32I-NEXT: or a4, a6, a72652; RV32I-NEXT: or a5, s0, t42653; RV32I-NEXT: or a6, t0, t12654; RV32I-NEXT: or a7, t2, t62655; RV32I-NEXT: sb s3, 28(a2)2656; RV32I-NEXT: sb s4, 29(a2)2657; RV32I-NEXT: sb s2, 30(a2)2658; RV32I-NEXT: sb s1, 31(a2)2659; RV32I-NEXT: srli t0, a7, 242660; RV32I-NEXT: srli t1, a7, 162661; RV32I-NEXT: srli t2, a7, 82662; RV32I-NEXT: srli t3, a6, 242663; RV32I-NEXT: srli t4, a6, 162664; RV32I-NEXT: srli t5, a6, 82665; RV32I-NEXT: srli t6, a5, 242666; RV32I-NEXT: srli s0, a5, 162667; RV32I-NEXT: srli s1, a5, 82668; RV32I-NEXT: srli s2, a4, 242669; RV32I-NEXT: srli s3, a4, 162670; RV32I-NEXT: srli s4, a4, 82671; RV32I-NEXT: srli s5, a3, 242672; RV32I-NEXT: srli s6, a3, 162673; RV32I-NEXT: srli s7, a3, 82674; RV32I-NEXT: srli s8, a1, 242675; RV32I-NEXT: srli s9, a1, 162676; RV32I-NEXT: sb a7, 24(a2)2677; RV32I-NEXT: sb t2, 25(a2)2678; RV32I-NEXT: sb t1, 26(a2)2679; RV32I-NEXT: sb t0, 27(a2)2680; RV32I-NEXT: srli a7, a1, 82681; RV32I-NEXT: sb a6, 16(a2)2682; RV32I-NEXT: sb t5, 17(a2)2683; RV32I-NEXT: sb t4, 18(a2)2684; RV32I-NEXT: sb t3, 19(a2)2685; RV32I-NEXT: srli a6, a0, 242686; RV32I-NEXT: sb a5, 20(a2)2687; RV32I-NEXT: sb s1, 21(a2)2688; RV32I-NEXT: sb s0, 22(a2)2689; RV32I-NEXT: sb t6, 23(a2)2690; RV32I-NEXT: srli a5, a0, 162691; RV32I-NEXT: sb a4, 8(a2)2692; RV32I-NEXT: sb s4, 9(a2)2693; RV32I-NEXT: sb s3, 10(a2)2694; RV32I-NEXT: sb s2, 11(a2)2695; RV32I-NEXT: srli a4, a0, 82696; RV32I-NEXT: sb a3, 12(a2)2697; RV32I-NEXT: sb s7, 13(a2)2698; RV32I-NEXT: sb s6, 14(a2)2699; RV32I-NEXT: sb s5, 15(a2)2700; RV32I-NEXT: sb a1, 0(a2)2701; RV32I-NEXT: sb a7, 1(a2)2702; RV32I-NEXT: sb s9, 2(a2)2703; RV32I-NEXT: sb s8, 3(a2)2704; RV32I-NEXT: sb a0, 4(a2)2705; RV32I-NEXT: sb a4, 5(a2)2706; RV32I-NEXT: sb a5, 6(a2)2707; RV32I-NEXT: sb a6, 7(a2)2708; RV32I-NEXT: lw ra, 124(sp) # 4-byte Folded Reload2709; RV32I-NEXT: lw s0, 120(sp) # 4-byte Folded Reload2710; RV32I-NEXT: lw s1, 116(sp) # 4-byte Folded Reload2711; RV32I-NEXT: lw s2, 112(sp) # 4-byte Folded Reload2712; RV32I-NEXT: lw s3, 108(sp) # 4-byte Folded Reload2713; RV32I-NEXT: lw s4, 104(sp) # 4-byte Folded Reload2714; RV32I-NEXT: lw s5, 100(sp) # 4-byte Folded Reload2715; RV32I-NEXT: lw s6, 96(sp) # 4-byte Folded Reload2716; RV32I-NEXT: lw s7, 92(sp) # 4-byte Folded Reload2717; RV32I-NEXT: lw s8, 88(sp) # 4-byte Folded Reload2718; RV32I-NEXT: lw s9, 84(sp) # 4-byte Folded Reload2719; RV32I-NEXT: lw s10, 80(sp) # 4-byte Folded Reload2720; RV32I-NEXT: lw s11, 76(sp) # 4-byte Folded Reload2721; RV32I-NEXT: addi sp, sp, 1282722; RV32I-NEXT: ret2723 %src = load i256, ptr %src.ptr, align 12724 %bitOff = load i256, ptr %bitOff.ptr, align 12725 %res = ashr i256 %src, %bitOff2726 store i256 %res, ptr %dst, align 12727 ret void2728}2729