6545 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mattr=+sse2,-bmi2,+slow-shld | FileCheck %s --check-prefixes=ALL,X64,X64-NO-BMI2,X64-NO-SHLD,X64-NO-BMI2-NO-SHLD3; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mattr=+sse2,-bmi2,-slow-shld | FileCheck %s --check-prefixes=ALL,X64,X64-NO-BMI2,X64-SHLD,X64-NO-BMI2-HAVE-SHLD4; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mattr=+sse2,+bmi2,+slow-shld | FileCheck %s --check-prefixes=ALL,X64,X64-BMI2,X64-NO-SHLD,X64-HAVE-BMI2-NO-SHLD5; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mattr=+sse2,+bmi2,-slow-shld | FileCheck %s --check-prefixes=ALL,X64,X64-BMI2,X64-SHLD,X64-HAVE-BMI2-HAVE-SHLD6; RUN: llc < %s -mtriple=i686-unknown-linux-gnu -mattr=+sse2,-bmi2,+slow-shld | FileCheck %s --check-prefixes=ALL,X86,X86-NO-BMI2,X86-NO-SHLD,X86-NO-BMI2-NO-SHLD7; RUN: llc < %s -mtriple=i686-unknown-linux-gnu -mattr=+sse2,-bmi2,-slow-shld | FileCheck %s --check-prefixes=ALL,X86,X86-NO-BMI2,X86-SHLD,X86-NO-BMI2-HAVE-SHLD8; RUN: llc < %s -mtriple=i686-unknown-linux-gnu -mattr=+sse2,+bmi2,+slow-shld | FileCheck %s --check-prefixes=ALL,X86,X86-BMI2,X86-NO-SHLD,X86-HAVE-BMI2-NO-SHLD9; RUN: llc < %s -mtriple=i686-unknown-linux-gnu -mattr=+sse2,+bmi2,-slow-shld | FileCheck %s --check-prefixes=ALL,X86,X86-BMI2,X86-SHLD,X86-HAVE-BMI2-HAVE-SHLD10 11define void @lshr_4bytes(ptr %src.ptr, ptr %bitOff.ptr, ptr %dst) nounwind {12; X64-NO-BMI2-LABEL: lshr_4bytes:13; X64-NO-BMI2: # %bb.0:14; X64-NO-BMI2-NEXT: movl (%rdi), %eax15; X64-NO-BMI2-NEXT: movzbl (%rsi), %ecx16; X64-NO-BMI2-NEXT: shrl %cl, %eax17; X64-NO-BMI2-NEXT: movl %eax, (%rdx)18; X64-NO-BMI2-NEXT: retq19;20; X64-BMI2-LABEL: lshr_4bytes:21; X64-BMI2: # %bb.0:22; X64-BMI2-NEXT: movzbl (%rsi), %eax23; X64-BMI2-NEXT: shrxl %eax, (%rdi), %eax24; X64-BMI2-NEXT: movl %eax, (%rdx)25; X64-BMI2-NEXT: retq26;27; X86-NO-BMI2-LABEL: lshr_4bytes:28; X86-NO-BMI2: # %bb.0:29; X86-NO-BMI2-NEXT: movl {{[0-9]+}}(%esp), %eax30; X86-NO-BMI2-NEXT: movl {{[0-9]+}}(%esp), %ecx31; X86-NO-BMI2-NEXT: movl {{[0-9]+}}(%esp), %edx32; X86-NO-BMI2-NEXT: movl (%edx), %edx33; X86-NO-BMI2-NEXT: movzbl (%ecx), %ecx34; X86-NO-BMI2-NEXT: shrl %cl, %edx35; X86-NO-BMI2-NEXT: movl %edx, (%eax)36; X86-NO-BMI2-NEXT: retl37;38; X86-BMI2-LABEL: lshr_4bytes:39; X86-BMI2: # %bb.0:40; X86-BMI2-NEXT: movl {{[0-9]+}}(%esp), %eax41; X86-BMI2-NEXT: movl {{[0-9]+}}(%esp), %ecx42; X86-BMI2-NEXT: movl {{[0-9]+}}(%esp), %edx43; X86-BMI2-NEXT: movzbl (%edx), %edx44; X86-BMI2-NEXT: shrxl %edx, (%ecx), %ecx45; X86-BMI2-NEXT: movl %ecx, (%eax)46; X86-BMI2-NEXT: retl47 %src = load i32, ptr %src.ptr, align 148 %bitOff = load i32, ptr %bitOff.ptr, align 149 %res = lshr i32 %src, %bitOff50 store i32 %res, ptr %dst, align 151 ret void52}53define void @shl_4bytes(ptr %src.ptr, ptr %bitOff.ptr, ptr %dst) nounwind {54; X64-NO-BMI2-LABEL: shl_4bytes:55; X64-NO-BMI2: # %bb.0:56; X64-NO-BMI2-NEXT: movl (%rdi), %eax57; X64-NO-BMI2-NEXT: movzbl (%rsi), %ecx58; X64-NO-BMI2-NEXT: shll %cl, %eax59; X64-NO-BMI2-NEXT: movl %eax, (%rdx)60; X64-NO-BMI2-NEXT: retq61;62; X64-BMI2-LABEL: shl_4bytes:63; X64-BMI2: # %bb.0:64; X64-BMI2-NEXT: movzbl (%rsi), %eax65; X64-BMI2-NEXT: shlxl %eax, (%rdi), %eax66; X64-BMI2-NEXT: movl %eax, (%rdx)67; X64-BMI2-NEXT: retq68;69; X86-NO-BMI2-LABEL: shl_4bytes:70; X86-NO-BMI2: # %bb.0:71; X86-NO-BMI2-NEXT: movl {{[0-9]+}}(%esp), %eax72; X86-NO-BMI2-NEXT: movl {{[0-9]+}}(%esp), %ecx73; X86-NO-BMI2-NEXT: movl {{[0-9]+}}(%esp), %edx74; X86-NO-BMI2-NEXT: movl (%edx), %edx75; X86-NO-BMI2-NEXT: movzbl (%ecx), %ecx76; X86-NO-BMI2-NEXT: shll %cl, %edx77; X86-NO-BMI2-NEXT: movl %edx, (%eax)78; X86-NO-BMI2-NEXT: retl79;80; X86-BMI2-LABEL: shl_4bytes:81; X86-BMI2: # %bb.0:82; X86-BMI2-NEXT: movl {{[0-9]+}}(%esp), %eax83; X86-BMI2-NEXT: movl {{[0-9]+}}(%esp), %ecx84; X86-BMI2-NEXT: movl {{[0-9]+}}(%esp), %edx85; X86-BMI2-NEXT: movzbl (%edx), %edx86; X86-BMI2-NEXT: shlxl %edx, (%ecx), %ecx87; X86-BMI2-NEXT: movl %ecx, (%eax)88; X86-BMI2-NEXT: retl89 %src = load i32, ptr %src.ptr, align 190 %bitOff = load i32, ptr %bitOff.ptr, align 191 %res = shl i32 %src, %bitOff92 store i32 %res, ptr %dst, align 193 ret void94}95define void @ashr_4bytes(ptr %src.ptr, ptr %bitOff.ptr, ptr %dst) nounwind {96; X64-NO-BMI2-LABEL: ashr_4bytes:97; X64-NO-BMI2: # %bb.0:98; X64-NO-BMI2-NEXT: movl (%rdi), %eax99; X64-NO-BMI2-NEXT: movzbl (%rsi), %ecx100; X64-NO-BMI2-NEXT: sarl %cl, %eax101; X64-NO-BMI2-NEXT: movl %eax, (%rdx)102; X64-NO-BMI2-NEXT: retq103;104; X64-BMI2-LABEL: ashr_4bytes:105; X64-BMI2: # %bb.0:106; X64-BMI2-NEXT: movzbl (%rsi), %eax107; X64-BMI2-NEXT: sarxl %eax, (%rdi), %eax108; X64-BMI2-NEXT: movl %eax, (%rdx)109; X64-BMI2-NEXT: retq110;111; X86-NO-BMI2-LABEL: ashr_4bytes:112; X86-NO-BMI2: # %bb.0:113; X86-NO-BMI2-NEXT: movl {{[0-9]+}}(%esp), %eax114; X86-NO-BMI2-NEXT: movl {{[0-9]+}}(%esp), %ecx115; X86-NO-BMI2-NEXT: movl {{[0-9]+}}(%esp), %edx116; X86-NO-BMI2-NEXT: movl (%edx), %edx117; X86-NO-BMI2-NEXT: movzbl (%ecx), %ecx118; X86-NO-BMI2-NEXT: sarl %cl, %edx119; X86-NO-BMI2-NEXT: movl %edx, (%eax)120; X86-NO-BMI2-NEXT: retl121;122; X86-BMI2-LABEL: ashr_4bytes:123; X86-BMI2: # %bb.0:124; X86-BMI2-NEXT: movl {{[0-9]+}}(%esp), %eax125; X86-BMI2-NEXT: movl {{[0-9]+}}(%esp), %ecx126; X86-BMI2-NEXT: movl {{[0-9]+}}(%esp), %edx127; X86-BMI2-NEXT: movzbl (%edx), %edx128; X86-BMI2-NEXT: sarxl %edx, (%ecx), %ecx129; X86-BMI2-NEXT: movl %ecx, (%eax)130; X86-BMI2-NEXT: retl131 %src = load i32, ptr %src.ptr, align 1132 %bitOff = load i32, ptr %bitOff.ptr, align 1133 %res = ashr i32 %src, %bitOff134 store i32 %res, ptr %dst, align 1135 ret void136}137 138define void @lshr_8bytes(ptr %src.ptr, ptr %bitOff.ptr, ptr %dst) nounwind {139; X64-NO-BMI2-LABEL: lshr_8bytes:140; X64-NO-BMI2: # %bb.0:141; X64-NO-BMI2-NEXT: movq (%rdi), %rax142; X64-NO-BMI2-NEXT: movzbl (%rsi), %ecx143; X64-NO-BMI2-NEXT: shrq %cl, %rax144; X64-NO-BMI2-NEXT: movq %rax, (%rdx)145; X64-NO-BMI2-NEXT: retq146;147; X64-BMI2-LABEL: lshr_8bytes:148; X64-BMI2: # %bb.0:149; X64-BMI2-NEXT: movzbl (%rsi), %eax150; X64-BMI2-NEXT: shrxq %rax, (%rdi), %rax151; X64-BMI2-NEXT: movq %rax, (%rdx)152; X64-BMI2-NEXT: retq153;154; X86-NO-BMI2-NO-SHLD-LABEL: lshr_8bytes:155; X86-NO-BMI2-NO-SHLD: # %bb.0:156; X86-NO-BMI2-NO-SHLD-NEXT: pushl %ebx157; X86-NO-BMI2-NO-SHLD-NEXT: pushl %edi158; X86-NO-BMI2-NO-SHLD-NEXT: pushl %esi159; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[0-9]+}}(%esp), %edx160; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[0-9]+}}(%esp), %eax161; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[0-9]+}}(%esp), %ecx162; X86-NO-BMI2-NO-SHLD-NEXT: movl (%ecx), %ebx163; X86-NO-BMI2-NO-SHLD-NEXT: movl 4(%ecx), %esi164; X86-NO-BMI2-NO-SHLD-NEXT: movzbl (%eax), %eax165; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, %ecx166; X86-NO-BMI2-NO-SHLD-NEXT: shrl %cl, %ebx167; X86-NO-BMI2-NO-SHLD-NEXT: notb %cl168; X86-NO-BMI2-NO-SHLD-NEXT: leal (%esi,%esi), %edi169; X86-NO-BMI2-NO-SHLD-NEXT: shll %cl, %edi170; X86-NO-BMI2-NO-SHLD-NEXT: orl %ebx, %edi171; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, %ecx172; X86-NO-BMI2-NO-SHLD-NEXT: shrl %cl, %esi173; X86-NO-BMI2-NO-SHLD-NEXT: xorl %ecx, %ecx174; X86-NO-BMI2-NO-SHLD-NEXT: testb $32, %al175; X86-NO-BMI2-NO-SHLD-NEXT: cmovnel %esi, %edi176; X86-NO-BMI2-NO-SHLD-NEXT: cmovel %esi, %ecx177; X86-NO-BMI2-NO-SHLD-NEXT: movl %ecx, 4(%edx)178; X86-NO-BMI2-NO-SHLD-NEXT: movl %edi, (%edx)179; X86-NO-BMI2-NO-SHLD-NEXT: popl %esi180; X86-NO-BMI2-NO-SHLD-NEXT: popl %edi181; X86-NO-BMI2-NO-SHLD-NEXT: popl %ebx182; X86-NO-BMI2-NO-SHLD-NEXT: retl183;184; X86-NO-BMI2-HAVE-SHLD-LABEL: lshr_8bytes:185; X86-NO-BMI2-HAVE-SHLD: # %bb.0:186; X86-NO-BMI2-HAVE-SHLD-NEXT: pushl %edi187; X86-NO-BMI2-HAVE-SHLD-NEXT: pushl %esi188; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[0-9]+}}(%esp), %eax189; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[0-9]+}}(%esp), %ecx190; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[0-9]+}}(%esp), %esi191; X86-NO-BMI2-HAVE-SHLD-NEXT: movl (%esi), %edx192; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 4(%esi), %esi193; X86-NO-BMI2-HAVE-SHLD-NEXT: movzbl (%ecx), %ecx194; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %esi, %edi195; X86-NO-BMI2-HAVE-SHLD-NEXT: shrl %cl, %edi196; X86-NO-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %esi, %edx197; X86-NO-BMI2-HAVE-SHLD-NEXT: xorl %esi, %esi198; X86-NO-BMI2-HAVE-SHLD-NEXT: testb $32, %cl199; X86-NO-BMI2-HAVE-SHLD-NEXT: cmovnel %edi, %edx200; X86-NO-BMI2-HAVE-SHLD-NEXT: cmovel %edi, %esi201; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %esi, 4(%eax)202; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %edx, (%eax)203; X86-NO-BMI2-HAVE-SHLD-NEXT: popl %esi204; X86-NO-BMI2-HAVE-SHLD-NEXT: popl %edi205; X86-NO-BMI2-HAVE-SHLD-NEXT: retl206;207; X86-HAVE-BMI2-NO-SHLD-LABEL: lshr_8bytes:208; X86-HAVE-BMI2-NO-SHLD: # %bb.0:209; X86-HAVE-BMI2-NO-SHLD-NEXT: pushl %ebx210; X86-HAVE-BMI2-NO-SHLD-NEXT: pushl %edi211; X86-HAVE-BMI2-NO-SHLD-NEXT: pushl %esi212; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[0-9]+}}(%esp), %eax213; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[0-9]+}}(%esp), %ecx214; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[0-9]+}}(%esp), %edx215; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 4(%edx), %esi216; X86-HAVE-BMI2-NO-SHLD-NEXT: movzbl (%ecx), %ecx217; X86-HAVE-BMI2-NO-SHLD-NEXT: shrxl %ecx, (%edx), %edx218; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, %ebx219; X86-HAVE-BMI2-NO-SHLD-NEXT: notb %bl220; X86-HAVE-BMI2-NO-SHLD-NEXT: leal (%esi,%esi), %edi221; X86-HAVE-BMI2-NO-SHLD-NEXT: shlxl %ebx, %edi, %edi222; X86-HAVE-BMI2-NO-SHLD-NEXT: orl %edx, %edi223; X86-HAVE-BMI2-NO-SHLD-NEXT: shrxl %ecx, %esi, %edx224; X86-HAVE-BMI2-NO-SHLD-NEXT: xorl %esi, %esi225; X86-HAVE-BMI2-NO-SHLD-NEXT: testb $32, %cl226; X86-HAVE-BMI2-NO-SHLD-NEXT: cmovnel %edx, %edi227; X86-HAVE-BMI2-NO-SHLD-NEXT: cmovel %edx, %esi228; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %esi, 4(%eax)229; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %edi, (%eax)230; X86-HAVE-BMI2-NO-SHLD-NEXT: popl %esi231; X86-HAVE-BMI2-NO-SHLD-NEXT: popl %edi232; X86-HAVE-BMI2-NO-SHLD-NEXT: popl %ebx233; X86-HAVE-BMI2-NO-SHLD-NEXT: retl234;235; X86-HAVE-BMI2-HAVE-SHLD-LABEL: lshr_8bytes:236; X86-HAVE-BMI2-HAVE-SHLD: # %bb.0:237; X86-HAVE-BMI2-HAVE-SHLD-NEXT: pushl %edi238; X86-HAVE-BMI2-HAVE-SHLD-NEXT: pushl %esi239; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[0-9]+}}(%esp), %eax240; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[0-9]+}}(%esp), %ecx241; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[0-9]+}}(%esp), %esi242; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl (%esi), %edx243; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 4(%esi), %esi244; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movzbl (%ecx), %ecx245; X86-HAVE-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %esi, %edx246; X86-HAVE-BMI2-HAVE-SHLD-NEXT: shrxl %ecx, %esi, %esi247; X86-HAVE-BMI2-HAVE-SHLD-NEXT: xorl %edi, %edi248; X86-HAVE-BMI2-HAVE-SHLD-NEXT: testb $32, %cl249; X86-HAVE-BMI2-HAVE-SHLD-NEXT: cmovnel %esi, %edx250; X86-HAVE-BMI2-HAVE-SHLD-NEXT: cmovel %esi, %edi251; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edi, 4(%eax)252; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edx, (%eax)253; X86-HAVE-BMI2-HAVE-SHLD-NEXT: popl %esi254; X86-HAVE-BMI2-HAVE-SHLD-NEXT: popl %edi255; X86-HAVE-BMI2-HAVE-SHLD-NEXT: retl256 %src = load i64, ptr %src.ptr, align 1257 %bitOff = load i64, ptr %bitOff.ptr, align 1258 %res = lshr i64 %src, %bitOff259 store i64 %res, ptr %dst, align 1260 ret void261}262define void @shl_8bytes(ptr %src.ptr, ptr %bitOff.ptr, ptr %dst) nounwind {263; X64-NO-BMI2-LABEL: shl_8bytes:264; X64-NO-BMI2: # %bb.0:265; X64-NO-BMI2-NEXT: movq (%rdi), %rax266; X64-NO-BMI2-NEXT: movzbl (%rsi), %ecx267; X64-NO-BMI2-NEXT: shlq %cl, %rax268; X64-NO-BMI2-NEXT: movq %rax, (%rdx)269; X64-NO-BMI2-NEXT: retq270;271; X64-BMI2-LABEL: shl_8bytes:272; X64-BMI2: # %bb.0:273; X64-BMI2-NEXT: movzbl (%rsi), %eax274; X64-BMI2-NEXT: shlxq %rax, (%rdi), %rax275; X64-BMI2-NEXT: movq %rax, (%rdx)276; X64-BMI2-NEXT: retq277;278; X86-NO-BMI2-NO-SHLD-LABEL: shl_8bytes:279; X86-NO-BMI2-NO-SHLD: # %bb.0:280; X86-NO-BMI2-NO-SHLD-NEXT: pushl %ebx281; X86-NO-BMI2-NO-SHLD-NEXT: pushl %edi282; X86-NO-BMI2-NO-SHLD-NEXT: pushl %esi283; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[0-9]+}}(%esp), %edx284; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[0-9]+}}(%esp), %eax285; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[0-9]+}}(%esp), %ecx286; X86-NO-BMI2-NO-SHLD-NEXT: movl (%ecx), %esi287; X86-NO-BMI2-NO-SHLD-NEXT: movl 4(%ecx), %ebx288; X86-NO-BMI2-NO-SHLD-NEXT: movzbl (%eax), %eax289; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, %ecx290; X86-NO-BMI2-NO-SHLD-NEXT: shll %cl, %ebx291; X86-NO-BMI2-NO-SHLD-NEXT: notb %cl292; X86-NO-BMI2-NO-SHLD-NEXT: movl %esi, %edi293; X86-NO-BMI2-NO-SHLD-NEXT: shrl %edi294; X86-NO-BMI2-NO-SHLD-NEXT: shrl %cl, %edi295; X86-NO-BMI2-NO-SHLD-NEXT: orl %ebx, %edi296; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, %ecx297; X86-NO-BMI2-NO-SHLD-NEXT: shll %cl, %esi298; X86-NO-BMI2-NO-SHLD-NEXT: xorl %ecx, %ecx299; X86-NO-BMI2-NO-SHLD-NEXT: testb $32, %al300; X86-NO-BMI2-NO-SHLD-NEXT: cmovnel %esi, %edi301; X86-NO-BMI2-NO-SHLD-NEXT: cmovel %esi, %ecx302; X86-NO-BMI2-NO-SHLD-NEXT: movl %ecx, (%edx)303; X86-NO-BMI2-NO-SHLD-NEXT: movl %edi, 4(%edx)304; X86-NO-BMI2-NO-SHLD-NEXT: popl %esi305; X86-NO-BMI2-NO-SHLD-NEXT: popl %edi306; X86-NO-BMI2-NO-SHLD-NEXT: popl %ebx307; X86-NO-BMI2-NO-SHLD-NEXT: retl308;309; X86-NO-BMI2-HAVE-SHLD-LABEL: shl_8bytes:310; X86-NO-BMI2-HAVE-SHLD: # %bb.0:311; X86-NO-BMI2-HAVE-SHLD-NEXT: pushl %edi312; X86-NO-BMI2-HAVE-SHLD-NEXT: pushl %esi313; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[0-9]+}}(%esp), %eax314; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[0-9]+}}(%esp), %ecx315; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[0-9]+}}(%esp), %edx316; X86-NO-BMI2-HAVE-SHLD-NEXT: movl (%edx), %esi317; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 4(%edx), %edx318; X86-NO-BMI2-HAVE-SHLD-NEXT: movzbl (%ecx), %ecx319; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %esi, %edi320; X86-NO-BMI2-HAVE-SHLD-NEXT: shll %cl, %edi321; X86-NO-BMI2-HAVE-SHLD-NEXT: shldl %cl, %esi, %edx322; X86-NO-BMI2-HAVE-SHLD-NEXT: xorl %esi, %esi323; X86-NO-BMI2-HAVE-SHLD-NEXT: testb $32, %cl324; X86-NO-BMI2-HAVE-SHLD-NEXT: cmovnel %edi, %edx325; X86-NO-BMI2-HAVE-SHLD-NEXT: cmovel %edi, %esi326; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %edx, 4(%eax)327; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %esi, (%eax)328; X86-NO-BMI2-HAVE-SHLD-NEXT: popl %esi329; X86-NO-BMI2-HAVE-SHLD-NEXT: popl %edi330; X86-NO-BMI2-HAVE-SHLD-NEXT: retl331;332; X86-HAVE-BMI2-NO-SHLD-LABEL: shl_8bytes:333; X86-HAVE-BMI2-NO-SHLD: # %bb.0:334; X86-HAVE-BMI2-NO-SHLD-NEXT: pushl %ebx335; X86-HAVE-BMI2-NO-SHLD-NEXT: pushl %edi336; X86-HAVE-BMI2-NO-SHLD-NEXT: pushl %esi337; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[0-9]+}}(%esp), %eax338; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[0-9]+}}(%esp), %ecx339; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[0-9]+}}(%esp), %edx340; X86-HAVE-BMI2-NO-SHLD-NEXT: movl (%edx), %esi341; X86-HAVE-BMI2-NO-SHLD-NEXT: movzbl (%ecx), %ecx342; X86-HAVE-BMI2-NO-SHLD-NEXT: shlxl %ecx, 4(%edx), %edx343; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, %ebx344; X86-HAVE-BMI2-NO-SHLD-NEXT: notb %bl345; X86-HAVE-BMI2-NO-SHLD-NEXT: shlxl %ecx, %esi, %edi346; X86-HAVE-BMI2-NO-SHLD-NEXT: shrl %esi347; X86-HAVE-BMI2-NO-SHLD-NEXT: shrxl %ebx, %esi, %esi348; X86-HAVE-BMI2-NO-SHLD-NEXT: orl %edx, %esi349; X86-HAVE-BMI2-NO-SHLD-NEXT: xorl %edx, %edx350; X86-HAVE-BMI2-NO-SHLD-NEXT: testb $32, %cl351; X86-HAVE-BMI2-NO-SHLD-NEXT: cmovnel %edi, %esi352; X86-HAVE-BMI2-NO-SHLD-NEXT: cmovel %edi, %edx353; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %edx, (%eax)354; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %esi, 4(%eax)355; X86-HAVE-BMI2-NO-SHLD-NEXT: popl %esi356; X86-HAVE-BMI2-NO-SHLD-NEXT: popl %edi357; X86-HAVE-BMI2-NO-SHLD-NEXT: popl %ebx358; X86-HAVE-BMI2-NO-SHLD-NEXT: retl359;360; X86-HAVE-BMI2-HAVE-SHLD-LABEL: shl_8bytes:361; X86-HAVE-BMI2-HAVE-SHLD: # %bb.0:362; X86-HAVE-BMI2-HAVE-SHLD-NEXT: pushl %edi363; X86-HAVE-BMI2-HAVE-SHLD-NEXT: pushl %esi364; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[0-9]+}}(%esp), %eax365; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[0-9]+}}(%esp), %ecx366; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[0-9]+}}(%esp), %edx367; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl (%edx), %esi368; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 4(%edx), %edx369; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movzbl (%ecx), %ecx370; X86-HAVE-BMI2-HAVE-SHLD-NEXT: shldl %cl, %esi, %edx371; X86-HAVE-BMI2-HAVE-SHLD-NEXT: shlxl %ecx, %esi, %esi372; X86-HAVE-BMI2-HAVE-SHLD-NEXT: xorl %edi, %edi373; X86-HAVE-BMI2-HAVE-SHLD-NEXT: testb $32, %cl374; X86-HAVE-BMI2-HAVE-SHLD-NEXT: cmovnel %esi, %edx375; X86-HAVE-BMI2-HAVE-SHLD-NEXT: cmovel %esi, %edi376; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edx, 4(%eax)377; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edi, (%eax)378; X86-HAVE-BMI2-HAVE-SHLD-NEXT: popl %esi379; X86-HAVE-BMI2-HAVE-SHLD-NEXT: popl %edi380; X86-HAVE-BMI2-HAVE-SHLD-NEXT: retl381 %src = load i64, ptr %src.ptr, align 1382 %bitOff = load i64, ptr %bitOff.ptr, align 1383 %res = shl i64 %src, %bitOff384 store i64 %res, ptr %dst, align 1385 ret void386}387define void @ashr_8bytes(ptr %src.ptr, ptr %bitOff.ptr, ptr %dst) nounwind {388; X64-NO-BMI2-LABEL: ashr_8bytes:389; X64-NO-BMI2: # %bb.0:390; X64-NO-BMI2-NEXT: movq (%rdi), %rax391; X64-NO-BMI2-NEXT: movzbl (%rsi), %ecx392; X64-NO-BMI2-NEXT: sarq %cl, %rax393; X64-NO-BMI2-NEXT: movq %rax, (%rdx)394; X64-NO-BMI2-NEXT: retq395;396; X64-BMI2-LABEL: ashr_8bytes:397; X64-BMI2: # %bb.0:398; X64-BMI2-NEXT: movzbl (%rsi), %eax399; X64-BMI2-NEXT: sarxq %rax, (%rdi), %rax400; X64-BMI2-NEXT: movq %rax, (%rdx)401; X64-BMI2-NEXT: retq402;403; X86-NO-BMI2-NO-SHLD-LABEL: ashr_8bytes:404; X86-NO-BMI2-NO-SHLD: # %bb.0:405; X86-NO-BMI2-NO-SHLD-NEXT: pushl %ebx406; X86-NO-BMI2-NO-SHLD-NEXT: pushl %edi407; X86-NO-BMI2-NO-SHLD-NEXT: pushl %esi408; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[0-9]+}}(%esp), %edx409; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[0-9]+}}(%esp), %eax410; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[0-9]+}}(%esp), %ecx411; X86-NO-BMI2-NO-SHLD-NEXT: movl (%ecx), %ebx412; X86-NO-BMI2-NO-SHLD-NEXT: movl 4(%ecx), %esi413; X86-NO-BMI2-NO-SHLD-NEXT: movzbl (%eax), %eax414; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, %ecx415; X86-NO-BMI2-NO-SHLD-NEXT: shrl %cl, %ebx416; X86-NO-BMI2-NO-SHLD-NEXT: notb %cl417; X86-NO-BMI2-NO-SHLD-NEXT: leal (%esi,%esi), %edi418; X86-NO-BMI2-NO-SHLD-NEXT: shll %cl, %edi419; X86-NO-BMI2-NO-SHLD-NEXT: orl %ebx, %edi420; X86-NO-BMI2-NO-SHLD-NEXT: movl %esi, %ebx421; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, %ecx422; X86-NO-BMI2-NO-SHLD-NEXT: sarl %cl, %ebx423; X86-NO-BMI2-NO-SHLD-NEXT: sarl $31, %esi424; X86-NO-BMI2-NO-SHLD-NEXT: testb $32, %al425; X86-NO-BMI2-NO-SHLD-NEXT: cmovnel %ebx, %edi426; X86-NO-BMI2-NO-SHLD-NEXT: cmovel %ebx, %esi427; X86-NO-BMI2-NO-SHLD-NEXT: movl %esi, 4(%edx)428; X86-NO-BMI2-NO-SHLD-NEXT: movl %edi, (%edx)429; X86-NO-BMI2-NO-SHLD-NEXT: popl %esi430; X86-NO-BMI2-NO-SHLD-NEXT: popl %edi431; X86-NO-BMI2-NO-SHLD-NEXT: popl %ebx432; X86-NO-BMI2-NO-SHLD-NEXT: retl433;434; X86-NO-BMI2-HAVE-SHLD-LABEL: ashr_8bytes:435; X86-NO-BMI2-HAVE-SHLD: # %bb.0:436; X86-NO-BMI2-HAVE-SHLD-NEXT: pushl %edi437; X86-NO-BMI2-HAVE-SHLD-NEXT: pushl %esi438; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[0-9]+}}(%esp), %eax439; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[0-9]+}}(%esp), %ecx440; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[0-9]+}}(%esp), %esi441; X86-NO-BMI2-HAVE-SHLD-NEXT: movl (%esi), %edx442; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 4(%esi), %esi443; X86-NO-BMI2-HAVE-SHLD-NEXT: movzbl (%ecx), %ecx444; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %esi, %edi445; X86-NO-BMI2-HAVE-SHLD-NEXT: sarl %cl, %edi446; X86-NO-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %esi, %edx447; X86-NO-BMI2-HAVE-SHLD-NEXT: sarl $31, %esi448; X86-NO-BMI2-HAVE-SHLD-NEXT: testb $32, %cl449; X86-NO-BMI2-HAVE-SHLD-NEXT: cmovnel %edi, %edx450; X86-NO-BMI2-HAVE-SHLD-NEXT: cmovel %edi, %esi451; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %esi, 4(%eax)452; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %edx, (%eax)453; X86-NO-BMI2-HAVE-SHLD-NEXT: popl %esi454; X86-NO-BMI2-HAVE-SHLD-NEXT: popl %edi455; X86-NO-BMI2-HAVE-SHLD-NEXT: retl456;457; X86-HAVE-BMI2-NO-SHLD-LABEL: ashr_8bytes:458; X86-HAVE-BMI2-NO-SHLD: # %bb.0:459; X86-HAVE-BMI2-NO-SHLD-NEXT: pushl %ebx460; X86-HAVE-BMI2-NO-SHLD-NEXT: pushl %edi461; X86-HAVE-BMI2-NO-SHLD-NEXT: pushl %esi462; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[0-9]+}}(%esp), %eax463; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[0-9]+}}(%esp), %edx464; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[0-9]+}}(%esp), %esi465; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 4(%esi), %ecx466; X86-HAVE-BMI2-NO-SHLD-NEXT: movzbl (%edx), %edx467; X86-HAVE-BMI2-NO-SHLD-NEXT: shrxl %edx, (%esi), %esi468; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %edx, %ebx469; X86-HAVE-BMI2-NO-SHLD-NEXT: notb %bl470; X86-HAVE-BMI2-NO-SHLD-NEXT: leal (%ecx,%ecx), %edi471; X86-HAVE-BMI2-NO-SHLD-NEXT: shlxl %ebx, %edi, %edi472; X86-HAVE-BMI2-NO-SHLD-NEXT: orl %esi, %edi473; X86-HAVE-BMI2-NO-SHLD-NEXT: sarxl %edx, %ecx, %esi474; X86-HAVE-BMI2-NO-SHLD-NEXT: sarl $31, %ecx475; X86-HAVE-BMI2-NO-SHLD-NEXT: testb $32, %dl476; X86-HAVE-BMI2-NO-SHLD-NEXT: cmovnel %esi, %edi477; X86-HAVE-BMI2-NO-SHLD-NEXT: cmovel %esi, %ecx478; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, 4(%eax)479; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %edi, (%eax)480; X86-HAVE-BMI2-NO-SHLD-NEXT: popl %esi481; X86-HAVE-BMI2-NO-SHLD-NEXT: popl %edi482; X86-HAVE-BMI2-NO-SHLD-NEXT: popl %ebx483; X86-HAVE-BMI2-NO-SHLD-NEXT: retl484;485; X86-HAVE-BMI2-HAVE-SHLD-LABEL: ashr_8bytes:486; X86-HAVE-BMI2-HAVE-SHLD: # %bb.0:487; X86-HAVE-BMI2-HAVE-SHLD-NEXT: pushl %edi488; X86-HAVE-BMI2-HAVE-SHLD-NEXT: pushl %esi489; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[0-9]+}}(%esp), %eax490; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[0-9]+}}(%esp), %ecx491; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[0-9]+}}(%esp), %esi492; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl (%esi), %edx493; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 4(%esi), %esi494; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movzbl (%ecx), %ecx495; X86-HAVE-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %esi, %edx496; X86-HAVE-BMI2-HAVE-SHLD-NEXT: sarxl %ecx, %esi, %edi497; X86-HAVE-BMI2-HAVE-SHLD-NEXT: sarl $31, %esi498; X86-HAVE-BMI2-HAVE-SHLD-NEXT: testb $32, %cl499; X86-HAVE-BMI2-HAVE-SHLD-NEXT: cmovnel %edi, %edx500; X86-HAVE-BMI2-HAVE-SHLD-NEXT: cmovel %edi, %esi501; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %esi, 4(%eax)502; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edx, (%eax)503; X86-HAVE-BMI2-HAVE-SHLD-NEXT: popl %esi504; X86-HAVE-BMI2-HAVE-SHLD-NEXT: popl %edi505; X86-HAVE-BMI2-HAVE-SHLD-NEXT: retl506 %src = load i64, ptr %src.ptr, align 1507 %bitOff = load i64, ptr %bitOff.ptr, align 1508 %res = ashr i64 %src, %bitOff509 store i64 %res, ptr %dst, align 1510 ret void511}512 513define void @lshr_16bytes(ptr %src.ptr, ptr %bitOff.ptr, ptr %dst) nounwind {514; X64-NO-BMI2-NO-SHLD-LABEL: lshr_16bytes:515; X64-NO-BMI2-NO-SHLD: # %bb.0:516; X64-NO-BMI2-NO-SHLD-NEXT: movq (%rdi), %r8517; X64-NO-BMI2-NO-SHLD-NEXT: movq 8(%rdi), %rdi518; X64-NO-BMI2-NO-SHLD-NEXT: movzbl (%rsi), %eax519; X64-NO-BMI2-NO-SHLD-NEXT: movl %eax, %ecx520; X64-NO-BMI2-NO-SHLD-NEXT: shrq %cl, %r8521; X64-NO-BMI2-NO-SHLD-NEXT: notb %cl522; X64-NO-BMI2-NO-SHLD-NEXT: leaq (%rdi,%rdi), %rsi523; X64-NO-BMI2-NO-SHLD-NEXT: shlq %cl, %rsi524; X64-NO-BMI2-NO-SHLD-NEXT: orq %r8, %rsi525; X64-NO-BMI2-NO-SHLD-NEXT: movl %eax, %ecx526; X64-NO-BMI2-NO-SHLD-NEXT: shrq %cl, %rdi527; X64-NO-BMI2-NO-SHLD-NEXT: xorl %ecx, %ecx528; X64-NO-BMI2-NO-SHLD-NEXT: testb $64, %al529; X64-NO-BMI2-NO-SHLD-NEXT: cmovneq %rdi, %rsi530; X64-NO-BMI2-NO-SHLD-NEXT: cmoveq %rdi, %rcx531; X64-NO-BMI2-NO-SHLD-NEXT: movq %rcx, 8(%rdx)532; X64-NO-BMI2-NO-SHLD-NEXT: movq %rsi, (%rdx)533; X64-NO-BMI2-NO-SHLD-NEXT: retq534;535; X64-NO-BMI2-HAVE-SHLD-LABEL: lshr_16bytes:536; X64-NO-BMI2-HAVE-SHLD: # %bb.0:537; X64-NO-BMI2-HAVE-SHLD-NEXT: movq (%rdi), %rax538; X64-NO-BMI2-HAVE-SHLD-NEXT: movq 8(%rdi), %rdi539; X64-NO-BMI2-HAVE-SHLD-NEXT: movzbl (%rsi), %ecx540; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %rdi, %rsi541; X64-NO-BMI2-HAVE-SHLD-NEXT: shrq %cl, %rsi542; X64-NO-BMI2-HAVE-SHLD-NEXT: shrdq %cl, %rdi, %rax543; X64-NO-BMI2-HAVE-SHLD-NEXT: xorl %edi, %edi544; X64-NO-BMI2-HAVE-SHLD-NEXT: testb $64, %cl545; X64-NO-BMI2-HAVE-SHLD-NEXT: cmovneq %rsi, %rax546; X64-NO-BMI2-HAVE-SHLD-NEXT: cmoveq %rsi, %rdi547; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %rdi, 8(%rdx)548; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %rax, (%rdx)549; X64-NO-BMI2-HAVE-SHLD-NEXT: retq550;551; X64-HAVE-BMI2-NO-SHLD-LABEL: lshr_16bytes:552; X64-HAVE-BMI2-NO-SHLD: # %bb.0:553; X64-HAVE-BMI2-NO-SHLD-NEXT: movq 8(%rdi), %rax554; X64-HAVE-BMI2-NO-SHLD-NEXT: movzbl (%rsi), %ecx555; X64-HAVE-BMI2-NO-SHLD-NEXT: shrxq %rcx, (%rdi), %rsi556; X64-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, %edi557; X64-HAVE-BMI2-NO-SHLD-NEXT: notb %dil558; X64-HAVE-BMI2-NO-SHLD-NEXT: leaq (%rax,%rax), %r8559; X64-HAVE-BMI2-NO-SHLD-NEXT: shlxq %rdi, %r8, %rdi560; X64-HAVE-BMI2-NO-SHLD-NEXT: orq %rsi, %rdi561; X64-HAVE-BMI2-NO-SHLD-NEXT: shrxq %rcx, %rax, %rax562; X64-HAVE-BMI2-NO-SHLD-NEXT: xorl %esi, %esi563; X64-HAVE-BMI2-NO-SHLD-NEXT: testb $64, %cl564; X64-HAVE-BMI2-NO-SHLD-NEXT: cmovneq %rax, %rdi565; X64-HAVE-BMI2-NO-SHLD-NEXT: cmoveq %rax, %rsi566; X64-HAVE-BMI2-NO-SHLD-NEXT: movq %rsi, 8(%rdx)567; X64-HAVE-BMI2-NO-SHLD-NEXT: movq %rdi, (%rdx)568; X64-HAVE-BMI2-NO-SHLD-NEXT: retq569;570; X64-HAVE-BMI2-HAVE-SHLD-LABEL: lshr_16bytes:571; X64-HAVE-BMI2-HAVE-SHLD: # %bb.0:572; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq (%rdi), %rax573; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq 8(%rdi), %rdi574; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movzbl (%rsi), %ecx575; X64-HAVE-BMI2-HAVE-SHLD-NEXT: shrdq %cl, %rdi, %rax576; X64-HAVE-BMI2-HAVE-SHLD-NEXT: shrxq %rcx, %rdi, %rsi577; X64-HAVE-BMI2-HAVE-SHLD-NEXT: xorl %edi, %edi578; X64-HAVE-BMI2-HAVE-SHLD-NEXT: testb $64, %cl579; X64-HAVE-BMI2-HAVE-SHLD-NEXT: cmovneq %rsi, %rax580; X64-HAVE-BMI2-HAVE-SHLD-NEXT: cmoveq %rsi, %rdi581; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq %rdi, 8(%rdx)582; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq %rax, (%rdx)583; X64-HAVE-BMI2-HAVE-SHLD-NEXT: retq584;585; X86-NO-BMI2-NO-SHLD-LABEL: lshr_16bytes:586; X86-NO-BMI2-NO-SHLD: # %bb.0:587; X86-NO-BMI2-NO-SHLD-NEXT: pushl %ebp588; X86-NO-BMI2-NO-SHLD-NEXT: pushl %ebx589; X86-NO-BMI2-NO-SHLD-NEXT: pushl %edi590; X86-NO-BMI2-NO-SHLD-NEXT: pushl %esi591; X86-NO-BMI2-NO-SHLD-NEXT: subl $44, %esp592; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[0-9]+}}(%esp), %eax593; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[0-9]+}}(%esp), %ecx594; X86-NO-BMI2-NO-SHLD-NEXT: movl (%ecx), %ebx595; X86-NO-BMI2-NO-SHLD-NEXT: movl 4(%ecx), %esi596; X86-NO-BMI2-NO-SHLD-NEXT: movl 8(%ecx), %edi597; X86-NO-BMI2-NO-SHLD-NEXT: movl 12(%ecx), %ecx598; X86-NO-BMI2-NO-SHLD-NEXT: movb (%eax), %dh599; X86-NO-BMI2-NO-SHLD-NEXT: xorps %xmm0, %xmm0600; X86-NO-BMI2-NO-SHLD-NEXT: movaps %xmm0, {{[0-9]+}}(%esp)601; X86-NO-BMI2-NO-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)602; X86-NO-BMI2-NO-SHLD-NEXT: movl %edi, {{[0-9]+}}(%esp)603; X86-NO-BMI2-NO-SHLD-NEXT: movl %esi, {{[0-9]+}}(%esp)604; X86-NO-BMI2-NO-SHLD-NEXT: movl %ebx, (%esp)605; X86-NO-BMI2-NO-SHLD-NEXT: movb %dh, %cl606; X86-NO-BMI2-NO-SHLD-NEXT: shrb $3, %cl607; X86-NO-BMI2-NO-SHLD-NEXT: andb $12, %cl608; X86-NO-BMI2-NO-SHLD-NEXT: movzbl %cl, %eax609; X86-NO-BMI2-NO-SHLD-NEXT: movl 4(%esp,%eax), %esi610; X86-NO-BMI2-NO-SHLD-NEXT: movl %esi, %ebx611; X86-NO-BMI2-NO-SHLD-NEXT: movb %dh, %cl612; X86-NO-BMI2-NO-SHLD-NEXT: shrl %cl, %ebx613; X86-NO-BMI2-NO-SHLD-NEXT: movb %dh, %dl614; X86-NO-BMI2-NO-SHLD-NEXT: andb $31, %dl615; X86-NO-BMI2-NO-SHLD-NEXT: xorb $31, %dl616; X86-NO-BMI2-NO-SHLD-NEXT: movl 8(%esp,%eax), %ebp617; X86-NO-BMI2-NO-SHLD-NEXT: leal (%ebp,%ebp), %edi618; X86-NO-BMI2-NO-SHLD-NEXT: movl %edx, %ecx619; X86-NO-BMI2-NO-SHLD-NEXT: shll %cl, %edi620; X86-NO-BMI2-NO-SHLD-NEXT: orl %ebx, %edi621; X86-NO-BMI2-NO-SHLD-NEXT: movl (%esp,%eax), %ebx622; X86-NO-BMI2-NO-SHLD-NEXT: movb %dh, %cl623; X86-NO-BMI2-NO-SHLD-NEXT: shrl %cl, %ebx624; X86-NO-BMI2-NO-SHLD-NEXT: addl %esi, %esi625; X86-NO-BMI2-NO-SHLD-NEXT: movl %edx, %ecx626; X86-NO-BMI2-NO-SHLD-NEXT: shll %cl, %esi627; X86-NO-BMI2-NO-SHLD-NEXT: orl %ebx, %esi628; X86-NO-BMI2-NO-SHLD-NEXT: movb %dh, %cl629; X86-NO-BMI2-NO-SHLD-NEXT: shrl %cl, %ebp630; X86-NO-BMI2-NO-SHLD-NEXT: movl 12(%esp,%eax), %ebx631; X86-NO-BMI2-NO-SHLD-NEXT: leal (%ebx,%ebx), %eax632; X86-NO-BMI2-NO-SHLD-NEXT: movl %edx, %ecx633; X86-NO-BMI2-NO-SHLD-NEXT: shll %cl, %eax634; X86-NO-BMI2-NO-SHLD-NEXT: orl %ebp, %eax635; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[0-9]+}}(%esp), %ebp636; X86-NO-BMI2-NO-SHLD-NEXT: movb %dh, %cl637; X86-NO-BMI2-NO-SHLD-NEXT: shrl %cl, %ebx638; X86-NO-BMI2-NO-SHLD-NEXT: movl %ebx, 12(%ebp)639; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, 8(%ebp)640; X86-NO-BMI2-NO-SHLD-NEXT: movl %esi, (%ebp)641; X86-NO-BMI2-NO-SHLD-NEXT: movl %edi, 4(%ebp)642; X86-NO-BMI2-NO-SHLD-NEXT: addl $44, %esp643; X86-NO-BMI2-NO-SHLD-NEXT: popl %esi644; X86-NO-BMI2-NO-SHLD-NEXT: popl %edi645; X86-NO-BMI2-NO-SHLD-NEXT: popl %ebx646; X86-NO-BMI2-NO-SHLD-NEXT: popl %ebp647; X86-NO-BMI2-NO-SHLD-NEXT: retl648;649; X86-NO-BMI2-HAVE-SHLD-LABEL: lshr_16bytes:650; X86-NO-BMI2-HAVE-SHLD: # %bb.0:651; X86-NO-BMI2-HAVE-SHLD-NEXT: pushl %ebp652; X86-NO-BMI2-HAVE-SHLD-NEXT: pushl %ebx653; X86-NO-BMI2-HAVE-SHLD-NEXT: pushl %edi654; X86-NO-BMI2-HAVE-SHLD-NEXT: pushl %esi655; X86-NO-BMI2-HAVE-SHLD-NEXT: subl $44, %esp656; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[0-9]+}}(%esp), %eax657; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[0-9]+}}(%esp), %ecx658; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[0-9]+}}(%esp), %edx659; X86-NO-BMI2-HAVE-SHLD-NEXT: movl (%edx), %esi660; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 4(%edx), %edi661; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 8(%edx), %ebx662; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 12(%edx), %edx663; X86-NO-BMI2-HAVE-SHLD-NEXT: movzbl (%ecx), %ecx664; X86-NO-BMI2-HAVE-SHLD-NEXT: xorps %xmm0, %xmm0665; X86-NO-BMI2-HAVE-SHLD-NEXT: movaps %xmm0, {{[0-9]+}}(%esp)666; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %edx, {{[0-9]+}}(%esp)667; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ebx, {{[0-9]+}}(%esp)668; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %edi, {{[0-9]+}}(%esp)669; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %esi, (%esp)670; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ecx, %edx671; X86-NO-BMI2-HAVE-SHLD-NEXT: shrb $3, %dl672; X86-NO-BMI2-HAVE-SHLD-NEXT: andb $12, %dl673; X86-NO-BMI2-HAVE-SHLD-NEXT: movzbl %dl, %ebx674; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 8(%esp,%ebx), %esi675; X86-NO-BMI2-HAVE-SHLD-NEXT: movl (%esp,%ebx), %edx676; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 4(%esp,%ebx), %ebp677; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ebp, %edi678; X86-NO-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %esi, %edi679; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 12(%esp,%ebx), %ebx680; X86-NO-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %ebx, %esi681; X86-NO-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %ebp, %edx682; X86-NO-BMI2-HAVE-SHLD-NEXT: shrl %cl, %ebx683; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %esi, 8(%eax)684; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ebx, 12(%eax)685; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %edx, (%eax)686; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %edi, 4(%eax)687; X86-NO-BMI2-HAVE-SHLD-NEXT: addl $44, %esp688; X86-NO-BMI2-HAVE-SHLD-NEXT: popl %esi689; X86-NO-BMI2-HAVE-SHLD-NEXT: popl %edi690; X86-NO-BMI2-HAVE-SHLD-NEXT: popl %ebx691; X86-NO-BMI2-HAVE-SHLD-NEXT: popl %ebp692; X86-NO-BMI2-HAVE-SHLD-NEXT: retl693;694; X86-HAVE-BMI2-NO-SHLD-LABEL: lshr_16bytes:695; X86-HAVE-BMI2-NO-SHLD: # %bb.0:696; X86-HAVE-BMI2-NO-SHLD-NEXT: pushl %ebp697; X86-HAVE-BMI2-NO-SHLD-NEXT: pushl %ebx698; X86-HAVE-BMI2-NO-SHLD-NEXT: pushl %edi699; X86-HAVE-BMI2-NO-SHLD-NEXT: pushl %esi700; X86-HAVE-BMI2-NO-SHLD-NEXT: subl $44, %esp701; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[0-9]+}}(%esp), %eax702; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[0-9]+}}(%esp), %ecx703; X86-HAVE-BMI2-NO-SHLD-NEXT: movl (%ecx), %edx704; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 4(%ecx), %esi705; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 8(%ecx), %edi706; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 12(%ecx), %ecx707; X86-HAVE-BMI2-NO-SHLD-NEXT: movzbl (%eax), %eax708; X86-HAVE-BMI2-NO-SHLD-NEXT: xorps %xmm0, %xmm0709; X86-HAVE-BMI2-NO-SHLD-NEXT: movaps %xmm0, {{[0-9]+}}(%esp)710; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)711; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %edi, {{[0-9]+}}(%esp)712; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %esi, {{[0-9]+}}(%esp)713; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %edx, (%esp)714; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, %ecx715; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, %edx716; X86-HAVE-BMI2-NO-SHLD-NEXT: shrb $3, %dl717; X86-HAVE-BMI2-NO-SHLD-NEXT: andb $12, %dl718; X86-HAVE-BMI2-NO-SHLD-NEXT: movzbl %dl, %edi719; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 4(%esp,%edi), %ebx720; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 8(%esp,%edi), %edx721; X86-HAVE-BMI2-NO-SHLD-NEXT: shrxl %ecx, %ebx, %ebp722; X86-HAVE-BMI2-NO-SHLD-NEXT: andb $31, %al723; X86-HAVE-BMI2-NO-SHLD-NEXT: xorb $31, %al724; X86-HAVE-BMI2-NO-SHLD-NEXT: leal (%edx,%edx), %esi725; X86-HAVE-BMI2-NO-SHLD-NEXT: shlxl %eax, %esi, %esi726; X86-HAVE-BMI2-NO-SHLD-NEXT: orl %ebp, %esi727; X86-HAVE-BMI2-NO-SHLD-NEXT: shrxl %ecx, (%esp,%edi), %ebp728; X86-HAVE-BMI2-NO-SHLD-NEXT: addl %ebx, %ebx729; X86-HAVE-BMI2-NO-SHLD-NEXT: shlxl %eax, %ebx, %ebx730; X86-HAVE-BMI2-NO-SHLD-NEXT: orl %ebp, %ebx731; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 12(%esp,%edi), %edi732; X86-HAVE-BMI2-NO-SHLD-NEXT: leal (%edi,%edi), %ebp733; X86-HAVE-BMI2-NO-SHLD-NEXT: shlxl %eax, %ebp, %eax734; X86-HAVE-BMI2-NO-SHLD-NEXT: shrxl %ecx, %edx, %edx735; X86-HAVE-BMI2-NO-SHLD-NEXT: orl %edx, %eax736; X86-HAVE-BMI2-NO-SHLD-NEXT: shrxl %ecx, %edi, %ecx737; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[0-9]+}}(%esp), %edx738; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, 12(%edx)739; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, 8(%edx)740; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ebx, (%edx)741; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %esi, 4(%edx)742; X86-HAVE-BMI2-NO-SHLD-NEXT: addl $44, %esp743; X86-HAVE-BMI2-NO-SHLD-NEXT: popl %esi744; X86-HAVE-BMI2-NO-SHLD-NEXT: popl %edi745; X86-HAVE-BMI2-NO-SHLD-NEXT: popl %ebx746; X86-HAVE-BMI2-NO-SHLD-NEXT: popl %ebp747; X86-HAVE-BMI2-NO-SHLD-NEXT: retl748;749; X86-HAVE-BMI2-HAVE-SHLD-LABEL: lshr_16bytes:750; X86-HAVE-BMI2-HAVE-SHLD: # %bb.0:751; X86-HAVE-BMI2-HAVE-SHLD-NEXT: pushl %ebp752; X86-HAVE-BMI2-HAVE-SHLD-NEXT: pushl %ebx753; X86-HAVE-BMI2-HAVE-SHLD-NEXT: pushl %edi754; X86-HAVE-BMI2-HAVE-SHLD-NEXT: pushl %esi755; X86-HAVE-BMI2-HAVE-SHLD-NEXT: subl $44, %esp756; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[0-9]+}}(%esp), %eax757; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[0-9]+}}(%esp), %ecx758; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[0-9]+}}(%esp), %edx759; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl (%edx), %esi760; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 4(%edx), %edi761; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 8(%edx), %ebx762; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 12(%edx), %edx763; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movzbl (%ecx), %ecx764; X86-HAVE-BMI2-HAVE-SHLD-NEXT: xorps %xmm0, %xmm0765; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movaps %xmm0, {{[0-9]+}}(%esp)766; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edx, {{[0-9]+}}(%esp)767; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ebx, {{[0-9]+}}(%esp)768; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edi, {{[0-9]+}}(%esp)769; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %esi, (%esp)770; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ecx, %edx771; X86-HAVE-BMI2-HAVE-SHLD-NEXT: shrb $3, %dl772; X86-HAVE-BMI2-HAVE-SHLD-NEXT: andb $12, %dl773; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movzbl %dl, %ebp774; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 8(%esp,%ebp), %ebx775; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl (%esp,%ebp), %edx776; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 4(%esp,%ebp), %esi777; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %esi, %edi778; X86-HAVE-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %ebx, %edi779; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 12(%esp,%ebp), %ebp780; X86-HAVE-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %ebp, %ebx781; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ebx, 8(%eax)782; X86-HAVE-BMI2-HAVE-SHLD-NEXT: shrxl %ecx, %ebp, %ebx783; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ebx, 12(%eax)784; X86-HAVE-BMI2-HAVE-SHLD-NEXT: # kill: def $cl killed $cl killed $ecx785; X86-HAVE-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %esi, %edx786; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edx, (%eax)787; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edi, 4(%eax)788; X86-HAVE-BMI2-HAVE-SHLD-NEXT: addl $44, %esp789; X86-HAVE-BMI2-HAVE-SHLD-NEXT: popl %esi790; X86-HAVE-BMI2-HAVE-SHLD-NEXT: popl %edi791; X86-HAVE-BMI2-HAVE-SHLD-NEXT: popl %ebx792; X86-HAVE-BMI2-HAVE-SHLD-NEXT: popl %ebp793; X86-HAVE-BMI2-HAVE-SHLD-NEXT: retl794 %src = load i128, ptr %src.ptr, align 1795 %bitOff = load i128, ptr %bitOff.ptr, align 1796 %res = lshr i128 %src, %bitOff797 store i128 %res, ptr %dst, align 1798 ret void799}800define void @shl_16bytes(ptr %src.ptr, ptr %bitOff.ptr, ptr %dst) nounwind {801; X64-NO-BMI2-NO-SHLD-LABEL: shl_16bytes:802; X64-NO-BMI2-NO-SHLD: # %bb.0:803; X64-NO-BMI2-NO-SHLD-NEXT: movq (%rdi), %r8804; X64-NO-BMI2-NO-SHLD-NEXT: movq 8(%rdi), %rdi805; X64-NO-BMI2-NO-SHLD-NEXT: movzbl (%rsi), %eax806; X64-NO-BMI2-NO-SHLD-NEXT: movl %eax, %ecx807; X64-NO-BMI2-NO-SHLD-NEXT: shlq %cl, %rdi808; X64-NO-BMI2-NO-SHLD-NEXT: notb %cl809; X64-NO-BMI2-NO-SHLD-NEXT: movq %r8, %rsi810; X64-NO-BMI2-NO-SHLD-NEXT: shrq %rsi811; X64-NO-BMI2-NO-SHLD-NEXT: shrq %cl, %rsi812; X64-NO-BMI2-NO-SHLD-NEXT: orq %rdi, %rsi813; X64-NO-BMI2-NO-SHLD-NEXT: movl %eax, %ecx814; X64-NO-BMI2-NO-SHLD-NEXT: shlq %cl, %r8815; X64-NO-BMI2-NO-SHLD-NEXT: xorl %ecx, %ecx816; X64-NO-BMI2-NO-SHLD-NEXT: testb $64, %al817; X64-NO-BMI2-NO-SHLD-NEXT: cmovneq %r8, %rsi818; X64-NO-BMI2-NO-SHLD-NEXT: cmoveq %r8, %rcx819; X64-NO-BMI2-NO-SHLD-NEXT: movq %rcx, (%rdx)820; X64-NO-BMI2-NO-SHLD-NEXT: movq %rsi, 8(%rdx)821; X64-NO-BMI2-NO-SHLD-NEXT: retq822;823; X64-NO-BMI2-HAVE-SHLD-LABEL: shl_16bytes:824; X64-NO-BMI2-HAVE-SHLD: # %bb.0:825; X64-NO-BMI2-HAVE-SHLD-NEXT: movq (%rdi), %rax826; X64-NO-BMI2-HAVE-SHLD-NEXT: movq 8(%rdi), %rdi827; X64-NO-BMI2-HAVE-SHLD-NEXT: movzbl (%rsi), %ecx828; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %rax, %rsi829; X64-NO-BMI2-HAVE-SHLD-NEXT: shlq %cl, %rsi830; X64-NO-BMI2-HAVE-SHLD-NEXT: shldq %cl, %rax, %rdi831; X64-NO-BMI2-HAVE-SHLD-NEXT: xorl %eax, %eax832; X64-NO-BMI2-HAVE-SHLD-NEXT: testb $64, %cl833; X64-NO-BMI2-HAVE-SHLD-NEXT: cmovneq %rsi, %rdi834; X64-NO-BMI2-HAVE-SHLD-NEXT: cmoveq %rsi, %rax835; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %rdi, 8(%rdx)836; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %rax, (%rdx)837; X64-NO-BMI2-HAVE-SHLD-NEXT: retq838;839; X64-HAVE-BMI2-NO-SHLD-LABEL: shl_16bytes:840; X64-HAVE-BMI2-NO-SHLD: # %bb.0:841; X64-HAVE-BMI2-NO-SHLD-NEXT: movq (%rdi), %rax842; X64-HAVE-BMI2-NO-SHLD-NEXT: movzbl (%rsi), %ecx843; X64-HAVE-BMI2-NO-SHLD-NEXT: shlxq %rcx, 8(%rdi), %rsi844; X64-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, %edi845; X64-HAVE-BMI2-NO-SHLD-NEXT: notb %dil846; X64-HAVE-BMI2-NO-SHLD-NEXT: shlxq %rcx, %rax, %r8847; X64-HAVE-BMI2-NO-SHLD-NEXT: shrq %rax848; X64-HAVE-BMI2-NO-SHLD-NEXT: shrxq %rdi, %rax, %rax849; X64-HAVE-BMI2-NO-SHLD-NEXT: orq %rsi, %rax850; X64-HAVE-BMI2-NO-SHLD-NEXT: xorl %esi, %esi851; X64-HAVE-BMI2-NO-SHLD-NEXT: testb $64, %cl852; X64-HAVE-BMI2-NO-SHLD-NEXT: cmovneq %r8, %rax853; X64-HAVE-BMI2-NO-SHLD-NEXT: cmoveq %r8, %rsi854; X64-HAVE-BMI2-NO-SHLD-NEXT: movq %rsi, (%rdx)855; X64-HAVE-BMI2-NO-SHLD-NEXT: movq %rax, 8(%rdx)856; X64-HAVE-BMI2-NO-SHLD-NEXT: retq857;858; X64-HAVE-BMI2-HAVE-SHLD-LABEL: shl_16bytes:859; X64-HAVE-BMI2-HAVE-SHLD: # %bb.0:860; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq (%rdi), %rax861; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq 8(%rdi), %rdi862; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movzbl (%rsi), %ecx863; X64-HAVE-BMI2-HAVE-SHLD-NEXT: shldq %cl, %rax, %rdi864; X64-HAVE-BMI2-HAVE-SHLD-NEXT: shlxq %rcx, %rax, %rax865; X64-HAVE-BMI2-HAVE-SHLD-NEXT: xorl %esi, %esi866; X64-HAVE-BMI2-HAVE-SHLD-NEXT: testb $64, %cl867; X64-HAVE-BMI2-HAVE-SHLD-NEXT: cmovneq %rax, %rdi868; X64-HAVE-BMI2-HAVE-SHLD-NEXT: cmoveq %rax, %rsi869; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq %rdi, 8(%rdx)870; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq %rsi, (%rdx)871; X64-HAVE-BMI2-HAVE-SHLD-NEXT: retq872;873; X86-NO-BMI2-NO-SHLD-LABEL: shl_16bytes:874; X86-NO-BMI2-NO-SHLD: # %bb.0:875; X86-NO-BMI2-NO-SHLD-NEXT: pushl %ebp876; X86-NO-BMI2-NO-SHLD-NEXT: pushl %ebx877; X86-NO-BMI2-NO-SHLD-NEXT: pushl %edi878; X86-NO-BMI2-NO-SHLD-NEXT: pushl %esi879; X86-NO-BMI2-NO-SHLD-NEXT: subl $60, %esp880; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[0-9]+}}(%esp), %eax881; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[0-9]+}}(%esp), %ecx882; X86-NO-BMI2-NO-SHLD-NEXT: movl (%ecx), %ebx883; X86-NO-BMI2-NO-SHLD-NEXT: movl 4(%ecx), %esi884; X86-NO-BMI2-NO-SHLD-NEXT: movl 8(%ecx), %edi885; X86-NO-BMI2-NO-SHLD-NEXT: movl 12(%ecx), %ecx886; X86-NO-BMI2-NO-SHLD-NEXT: movb (%eax), %dh887; X86-NO-BMI2-NO-SHLD-NEXT: xorps %xmm0, %xmm0888; X86-NO-BMI2-NO-SHLD-NEXT: movaps %xmm0, {{[0-9]+}}(%esp)889; X86-NO-BMI2-NO-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)890; X86-NO-BMI2-NO-SHLD-NEXT: movl %edi, {{[0-9]+}}(%esp)891; X86-NO-BMI2-NO-SHLD-NEXT: movl %esi, {{[0-9]+}}(%esp)892; X86-NO-BMI2-NO-SHLD-NEXT: movl %ebx, {{[0-9]+}}(%esp)893; X86-NO-BMI2-NO-SHLD-NEXT: movb %dh, %cl894; X86-NO-BMI2-NO-SHLD-NEXT: shrb $3, %cl895; X86-NO-BMI2-NO-SHLD-NEXT: andb $12, %cl896; X86-NO-BMI2-NO-SHLD-NEXT: negb %cl897; X86-NO-BMI2-NO-SHLD-NEXT: movsbl %cl, %ebp898; X86-NO-BMI2-NO-SHLD-NEXT: movl 32(%esp,%ebp), %ebx899; X86-NO-BMI2-NO-SHLD-NEXT: movl %ebx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill900; X86-NO-BMI2-NO-SHLD-NEXT: movl 36(%esp,%ebp), %esi901; X86-NO-BMI2-NO-SHLD-NEXT: movl %esi, %edi902; X86-NO-BMI2-NO-SHLD-NEXT: movb %dh, %cl903; X86-NO-BMI2-NO-SHLD-NEXT: shll %cl, %edi904; X86-NO-BMI2-NO-SHLD-NEXT: movb %dh, %dl905; X86-NO-BMI2-NO-SHLD-NEXT: andb $31, %dl906; X86-NO-BMI2-NO-SHLD-NEXT: xorb $31, %dl907; X86-NO-BMI2-NO-SHLD-NEXT: shrl %ebx908; X86-NO-BMI2-NO-SHLD-NEXT: movl %edx, %ecx909; X86-NO-BMI2-NO-SHLD-NEXT: shrl %cl, %ebx910; X86-NO-BMI2-NO-SHLD-NEXT: orl %edi, %ebx911; X86-NO-BMI2-NO-SHLD-NEXT: movl 44(%esp,%ebp), %eax912; X86-NO-BMI2-NO-SHLD-NEXT: movb %dh, %cl913; X86-NO-BMI2-NO-SHLD-NEXT: shll %cl, %eax914; X86-NO-BMI2-NO-SHLD-NEXT: movl 40(%esp,%ebp), %edi915; X86-NO-BMI2-NO-SHLD-NEXT: movl %edi, %ebp916; X86-NO-BMI2-NO-SHLD-NEXT: shrl %ebp917; X86-NO-BMI2-NO-SHLD-NEXT: movl %edx, %ecx918; X86-NO-BMI2-NO-SHLD-NEXT: shrl %cl, %ebp919; X86-NO-BMI2-NO-SHLD-NEXT: orl %eax, %ebp920; X86-NO-BMI2-NO-SHLD-NEXT: movb %dh, %cl921; X86-NO-BMI2-NO-SHLD-NEXT: shll %cl, %edi922; X86-NO-BMI2-NO-SHLD-NEXT: shrl %esi923; X86-NO-BMI2-NO-SHLD-NEXT: movl %edx, %ecx924; X86-NO-BMI2-NO-SHLD-NEXT: shrl %cl, %esi925; X86-NO-BMI2-NO-SHLD-NEXT: orl %edi, %esi926; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[0-9]+}}(%esp), %eax927; X86-NO-BMI2-NO-SHLD-NEXT: movb %dh, %cl928; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload929; X86-NO-BMI2-NO-SHLD-NEXT: shll %cl, %edx930; X86-NO-BMI2-NO-SHLD-NEXT: movl %edx, (%eax)931; X86-NO-BMI2-NO-SHLD-NEXT: movl %esi, 8(%eax)932; X86-NO-BMI2-NO-SHLD-NEXT: movl %ebp, 12(%eax)933; X86-NO-BMI2-NO-SHLD-NEXT: movl %ebx, 4(%eax)934; X86-NO-BMI2-NO-SHLD-NEXT: addl $60, %esp935; X86-NO-BMI2-NO-SHLD-NEXT: popl %esi936; X86-NO-BMI2-NO-SHLD-NEXT: popl %edi937; X86-NO-BMI2-NO-SHLD-NEXT: popl %ebx938; X86-NO-BMI2-NO-SHLD-NEXT: popl %ebp939; X86-NO-BMI2-NO-SHLD-NEXT: retl940;941; X86-NO-BMI2-HAVE-SHLD-LABEL: shl_16bytes:942; X86-NO-BMI2-HAVE-SHLD: # %bb.0:943; X86-NO-BMI2-HAVE-SHLD-NEXT: pushl %ebx944; X86-NO-BMI2-HAVE-SHLD-NEXT: pushl %edi945; X86-NO-BMI2-HAVE-SHLD-NEXT: pushl %esi946; X86-NO-BMI2-HAVE-SHLD-NEXT: subl $32, %esp947; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[0-9]+}}(%esp), %eax948; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[0-9]+}}(%esp), %ecx949; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[0-9]+}}(%esp), %edx950; X86-NO-BMI2-HAVE-SHLD-NEXT: movl (%edx), %esi951; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 4(%edx), %edi952; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 8(%edx), %ebx953; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 12(%edx), %edx954; X86-NO-BMI2-HAVE-SHLD-NEXT: movzbl (%ecx), %ecx955; X86-NO-BMI2-HAVE-SHLD-NEXT: xorps %xmm0, %xmm0956; X86-NO-BMI2-HAVE-SHLD-NEXT: movaps %xmm0, (%esp)957; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %edx, {{[0-9]+}}(%esp)958; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ebx, {{[0-9]+}}(%esp)959; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %edi, {{[0-9]+}}(%esp)960; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %esi, {{[0-9]+}}(%esp)961; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ecx, %edx962; X86-NO-BMI2-HAVE-SHLD-NEXT: shrb $3, %dl963; X86-NO-BMI2-HAVE-SHLD-NEXT: andb $12, %dl964; X86-NO-BMI2-HAVE-SHLD-NEXT: negb %dl965; X86-NO-BMI2-HAVE-SHLD-NEXT: movsbl %dl, %edi966; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 24(%esp,%edi), %esi967; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 28(%esp,%edi), %edx968; X86-NO-BMI2-HAVE-SHLD-NEXT: shldl %cl, %esi, %edx969; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 16(%esp,%edi), %ebx970; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 20(%esp,%edi), %edi971; X86-NO-BMI2-HAVE-SHLD-NEXT: shldl %cl, %edi, %esi972; X86-NO-BMI2-HAVE-SHLD-NEXT: shldl %cl, %ebx, %edi973; X86-NO-BMI2-HAVE-SHLD-NEXT: shll %cl, %ebx974; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %esi, 8(%eax)975; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %edx, 12(%eax)976; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ebx, (%eax)977; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %edi, 4(%eax)978; X86-NO-BMI2-HAVE-SHLD-NEXT: addl $32, %esp979; X86-NO-BMI2-HAVE-SHLD-NEXT: popl %esi980; X86-NO-BMI2-HAVE-SHLD-NEXT: popl %edi981; X86-NO-BMI2-HAVE-SHLD-NEXT: popl %ebx982; X86-NO-BMI2-HAVE-SHLD-NEXT: retl983;984; X86-HAVE-BMI2-NO-SHLD-LABEL: shl_16bytes:985; X86-HAVE-BMI2-NO-SHLD: # %bb.0:986; X86-HAVE-BMI2-NO-SHLD-NEXT: pushl %ebp987; X86-HAVE-BMI2-NO-SHLD-NEXT: pushl %ebx988; X86-HAVE-BMI2-NO-SHLD-NEXT: pushl %edi989; X86-HAVE-BMI2-NO-SHLD-NEXT: pushl %esi990; X86-HAVE-BMI2-NO-SHLD-NEXT: subl $44, %esp991; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[0-9]+}}(%esp), %eax992; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[0-9]+}}(%esp), %ecx993; X86-HAVE-BMI2-NO-SHLD-NEXT: movl (%ecx), %edx994; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 4(%ecx), %esi995; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 8(%ecx), %edi996; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 12(%ecx), %ecx997; X86-HAVE-BMI2-NO-SHLD-NEXT: movzbl (%eax), %eax998; X86-HAVE-BMI2-NO-SHLD-NEXT: xorps %xmm0, %xmm0999; X86-HAVE-BMI2-NO-SHLD-NEXT: movaps %xmm0, (%esp)1000; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)1001; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %edi, {{[0-9]+}}(%esp)1002; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %esi, {{[0-9]+}}(%esp)1003; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %edx, {{[0-9]+}}(%esp)1004; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, %ecx1005; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, %edx1006; X86-HAVE-BMI2-NO-SHLD-NEXT: shrb $3, %dl1007; X86-HAVE-BMI2-NO-SHLD-NEXT: andb $12, %dl1008; X86-HAVE-BMI2-NO-SHLD-NEXT: negb %dl1009; X86-HAVE-BMI2-NO-SHLD-NEXT: movsbl %dl, %esi1010; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 16(%esp,%esi), %ebx1011; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 20(%esp,%esi), %edx1012; X86-HAVE-BMI2-NO-SHLD-NEXT: shlxl %ecx, %edx, %edi1013; X86-HAVE-BMI2-NO-SHLD-NEXT: andb $31, %al1014; X86-HAVE-BMI2-NO-SHLD-NEXT: xorb $31, %al1015; X86-HAVE-BMI2-NO-SHLD-NEXT: shlxl %ecx, %ebx, %ebp1016; X86-HAVE-BMI2-NO-SHLD-NEXT: shrl %ebx1017; X86-HAVE-BMI2-NO-SHLD-NEXT: shrxl %eax, %ebx, %ebx1018; X86-HAVE-BMI2-NO-SHLD-NEXT: orl %edi, %ebx1019; X86-HAVE-BMI2-NO-SHLD-NEXT: shlxl %ecx, 28(%esp,%esi), %edi1020; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 24(%esp,%esi), %esi1021; X86-HAVE-BMI2-NO-SHLD-NEXT: shlxl %ecx, %esi, %ecx1022; X86-HAVE-BMI2-NO-SHLD-NEXT: shrl %esi1023; X86-HAVE-BMI2-NO-SHLD-NEXT: shrxl %eax, %esi, %esi1024; X86-HAVE-BMI2-NO-SHLD-NEXT: orl %edi, %esi1025; X86-HAVE-BMI2-NO-SHLD-NEXT: shrl %edx1026; X86-HAVE-BMI2-NO-SHLD-NEXT: shrxl %eax, %edx, %eax1027; X86-HAVE-BMI2-NO-SHLD-NEXT: orl %ecx, %eax1028; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[0-9]+}}(%esp), %ecx1029; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ebp, (%ecx)1030; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, 8(%ecx)1031; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %esi, 12(%ecx)1032; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ebx, 4(%ecx)1033; X86-HAVE-BMI2-NO-SHLD-NEXT: addl $44, %esp1034; X86-HAVE-BMI2-NO-SHLD-NEXT: popl %esi1035; X86-HAVE-BMI2-NO-SHLD-NEXT: popl %edi1036; X86-HAVE-BMI2-NO-SHLD-NEXT: popl %ebx1037; X86-HAVE-BMI2-NO-SHLD-NEXT: popl %ebp1038; X86-HAVE-BMI2-NO-SHLD-NEXT: retl1039;1040; X86-HAVE-BMI2-HAVE-SHLD-LABEL: shl_16bytes:1041; X86-HAVE-BMI2-HAVE-SHLD: # %bb.0:1042; X86-HAVE-BMI2-HAVE-SHLD-NEXT: pushl %ebx1043; X86-HAVE-BMI2-HAVE-SHLD-NEXT: pushl %edi1044; X86-HAVE-BMI2-HAVE-SHLD-NEXT: pushl %esi1045; X86-HAVE-BMI2-HAVE-SHLD-NEXT: subl $32, %esp1046; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[0-9]+}}(%esp), %eax1047; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[0-9]+}}(%esp), %ecx1048; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[0-9]+}}(%esp), %edx1049; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl (%edx), %esi1050; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 4(%edx), %edi1051; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 8(%edx), %ebx1052; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 12(%edx), %edx1053; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movzbl (%ecx), %ecx1054; X86-HAVE-BMI2-HAVE-SHLD-NEXT: xorps %xmm0, %xmm01055; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movaps %xmm0, (%esp)1056; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edx, {{[0-9]+}}(%esp)1057; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ebx, {{[0-9]+}}(%esp)1058; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edi, {{[0-9]+}}(%esp)1059; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %esi, {{[0-9]+}}(%esp)1060; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ecx, %edx1061; X86-HAVE-BMI2-HAVE-SHLD-NEXT: shrb $3, %dl1062; X86-HAVE-BMI2-HAVE-SHLD-NEXT: andb $12, %dl1063; X86-HAVE-BMI2-HAVE-SHLD-NEXT: negb %dl1064; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movsbl %dl, %edi1065; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 24(%esp,%edi), %esi1066; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 28(%esp,%edi), %edx1067; X86-HAVE-BMI2-HAVE-SHLD-NEXT: shldl %cl, %esi, %edx1068; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 16(%esp,%edi), %ebx1069; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 20(%esp,%edi), %edi1070; X86-HAVE-BMI2-HAVE-SHLD-NEXT: shldl %cl, %edi, %esi1071; X86-HAVE-BMI2-HAVE-SHLD-NEXT: shldl %cl, %ebx, %edi1072; X86-HAVE-BMI2-HAVE-SHLD-NEXT: shlxl %ecx, %ebx, %ecx1073; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %esi, 8(%eax)1074; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edx, 12(%eax)1075; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ecx, (%eax)1076; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edi, 4(%eax)1077; X86-HAVE-BMI2-HAVE-SHLD-NEXT: addl $32, %esp1078; X86-HAVE-BMI2-HAVE-SHLD-NEXT: popl %esi1079; X86-HAVE-BMI2-HAVE-SHLD-NEXT: popl %edi1080; X86-HAVE-BMI2-HAVE-SHLD-NEXT: popl %ebx1081; X86-HAVE-BMI2-HAVE-SHLD-NEXT: retl1082 %src = load i128, ptr %src.ptr, align 11083 %bitOff = load i128, ptr %bitOff.ptr, align 11084 %res = shl i128 %src, %bitOff1085 store i128 %res, ptr %dst, align 11086 ret void1087}1088define void @ashr_16bytes(ptr %src.ptr, ptr %bitOff.ptr, ptr %dst) nounwind {1089; X64-NO-BMI2-NO-SHLD-LABEL: ashr_16bytes:1090; X64-NO-BMI2-NO-SHLD: # %bb.0:1091; X64-NO-BMI2-NO-SHLD-NEXT: movq (%rdi), %r81092; X64-NO-BMI2-NO-SHLD-NEXT: movq 8(%rdi), %rdi1093; X64-NO-BMI2-NO-SHLD-NEXT: movzbl (%rsi), %eax1094; X64-NO-BMI2-NO-SHLD-NEXT: movl %eax, %ecx1095; X64-NO-BMI2-NO-SHLD-NEXT: shrq %cl, %r81096; X64-NO-BMI2-NO-SHLD-NEXT: notb %cl1097; X64-NO-BMI2-NO-SHLD-NEXT: leaq (%rdi,%rdi), %rsi1098; X64-NO-BMI2-NO-SHLD-NEXT: shlq %cl, %rsi1099; X64-NO-BMI2-NO-SHLD-NEXT: orq %r8, %rsi1100; X64-NO-BMI2-NO-SHLD-NEXT: movq %rdi, %r81101; X64-NO-BMI2-NO-SHLD-NEXT: movl %eax, %ecx1102; X64-NO-BMI2-NO-SHLD-NEXT: sarq %cl, %r81103; X64-NO-BMI2-NO-SHLD-NEXT: sarq $63, %rdi1104; X64-NO-BMI2-NO-SHLD-NEXT: testb $64, %al1105; X64-NO-BMI2-NO-SHLD-NEXT: cmovneq %r8, %rsi1106; X64-NO-BMI2-NO-SHLD-NEXT: cmoveq %r8, %rdi1107; X64-NO-BMI2-NO-SHLD-NEXT: movq %rdi, 8(%rdx)1108; X64-NO-BMI2-NO-SHLD-NEXT: movq %rsi, (%rdx)1109; X64-NO-BMI2-NO-SHLD-NEXT: retq1110;1111; X64-NO-BMI2-HAVE-SHLD-LABEL: ashr_16bytes:1112; X64-NO-BMI2-HAVE-SHLD: # %bb.0:1113; X64-NO-BMI2-HAVE-SHLD-NEXT: movq (%rdi), %rax1114; X64-NO-BMI2-HAVE-SHLD-NEXT: movq 8(%rdi), %rdi1115; X64-NO-BMI2-HAVE-SHLD-NEXT: movzbl (%rsi), %ecx1116; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %rdi, %rsi1117; X64-NO-BMI2-HAVE-SHLD-NEXT: sarq %cl, %rsi1118; X64-NO-BMI2-HAVE-SHLD-NEXT: shrdq %cl, %rdi, %rax1119; X64-NO-BMI2-HAVE-SHLD-NEXT: sarq $63, %rdi1120; X64-NO-BMI2-HAVE-SHLD-NEXT: testb $64, %cl1121; X64-NO-BMI2-HAVE-SHLD-NEXT: cmovneq %rsi, %rax1122; X64-NO-BMI2-HAVE-SHLD-NEXT: cmoveq %rsi, %rdi1123; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %rdi, 8(%rdx)1124; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %rax, (%rdx)1125; X64-NO-BMI2-HAVE-SHLD-NEXT: retq1126;1127; X64-HAVE-BMI2-NO-SHLD-LABEL: ashr_16bytes:1128; X64-HAVE-BMI2-NO-SHLD: # %bb.0:1129; X64-HAVE-BMI2-NO-SHLD-NEXT: movq 8(%rdi), %rax1130; X64-HAVE-BMI2-NO-SHLD-NEXT: movzbl (%rsi), %ecx1131; X64-HAVE-BMI2-NO-SHLD-NEXT: shrxq %rcx, (%rdi), %rsi1132; X64-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, %edi1133; X64-HAVE-BMI2-NO-SHLD-NEXT: notb %dil1134; X64-HAVE-BMI2-NO-SHLD-NEXT: leaq (%rax,%rax), %r81135; X64-HAVE-BMI2-NO-SHLD-NEXT: shlxq %rdi, %r8, %rdi1136; X64-HAVE-BMI2-NO-SHLD-NEXT: orq %rsi, %rdi1137; X64-HAVE-BMI2-NO-SHLD-NEXT: sarxq %rcx, %rax, %rsi1138; X64-HAVE-BMI2-NO-SHLD-NEXT: sarq $63, %rax1139; X64-HAVE-BMI2-NO-SHLD-NEXT: testb $64, %cl1140; X64-HAVE-BMI2-NO-SHLD-NEXT: cmovneq %rsi, %rdi1141; X64-HAVE-BMI2-NO-SHLD-NEXT: cmoveq %rsi, %rax1142; X64-HAVE-BMI2-NO-SHLD-NEXT: movq %rax, 8(%rdx)1143; X64-HAVE-BMI2-NO-SHLD-NEXT: movq %rdi, (%rdx)1144; X64-HAVE-BMI2-NO-SHLD-NEXT: retq1145;1146; X64-HAVE-BMI2-HAVE-SHLD-LABEL: ashr_16bytes:1147; X64-HAVE-BMI2-HAVE-SHLD: # %bb.0:1148; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq (%rdi), %rax1149; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq 8(%rdi), %rdi1150; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movzbl (%rsi), %ecx1151; X64-HAVE-BMI2-HAVE-SHLD-NEXT: shrdq %cl, %rdi, %rax1152; X64-HAVE-BMI2-HAVE-SHLD-NEXT: sarxq %rcx, %rdi, %rsi1153; X64-HAVE-BMI2-HAVE-SHLD-NEXT: sarq $63, %rdi1154; X64-HAVE-BMI2-HAVE-SHLD-NEXT: testb $64, %cl1155; X64-HAVE-BMI2-HAVE-SHLD-NEXT: cmovneq %rsi, %rax1156; X64-HAVE-BMI2-HAVE-SHLD-NEXT: cmoveq %rsi, %rdi1157; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq %rdi, 8(%rdx)1158; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq %rax, (%rdx)1159; X64-HAVE-BMI2-HAVE-SHLD-NEXT: retq1160;1161; X86-NO-BMI2-NO-SHLD-LABEL: ashr_16bytes:1162; X86-NO-BMI2-NO-SHLD: # %bb.0:1163; X86-NO-BMI2-NO-SHLD-NEXT: pushl %ebp1164; X86-NO-BMI2-NO-SHLD-NEXT: pushl %ebx1165; X86-NO-BMI2-NO-SHLD-NEXT: pushl %edi1166; X86-NO-BMI2-NO-SHLD-NEXT: pushl %esi1167; X86-NO-BMI2-NO-SHLD-NEXT: subl $44, %esp1168; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[0-9]+}}(%esp), %eax1169; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[0-9]+}}(%esp), %ecx1170; X86-NO-BMI2-NO-SHLD-NEXT: movl (%ecx), %ebx1171; X86-NO-BMI2-NO-SHLD-NEXT: movl 4(%ecx), %esi1172; X86-NO-BMI2-NO-SHLD-NEXT: movl 8(%ecx), %edi1173; X86-NO-BMI2-NO-SHLD-NEXT: movl 12(%ecx), %ecx1174; X86-NO-BMI2-NO-SHLD-NEXT: movb (%eax), %dh1175; X86-NO-BMI2-NO-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)1176; X86-NO-BMI2-NO-SHLD-NEXT: movl %edi, {{[0-9]+}}(%esp)1177; X86-NO-BMI2-NO-SHLD-NEXT: movl %esi, {{[0-9]+}}(%esp)1178; X86-NO-BMI2-NO-SHLD-NEXT: movl %ebx, (%esp)1179; X86-NO-BMI2-NO-SHLD-NEXT: sarl $31, %ecx1180; X86-NO-BMI2-NO-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)1181; X86-NO-BMI2-NO-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)1182; X86-NO-BMI2-NO-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)1183; X86-NO-BMI2-NO-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)1184; X86-NO-BMI2-NO-SHLD-NEXT: movb %dh, %cl1185; X86-NO-BMI2-NO-SHLD-NEXT: shrb $3, %cl1186; X86-NO-BMI2-NO-SHLD-NEXT: andb $12, %cl1187; X86-NO-BMI2-NO-SHLD-NEXT: movzbl %cl, %ebx1188; X86-NO-BMI2-NO-SHLD-NEXT: movl 4(%esp,%ebx), %esi1189; X86-NO-BMI2-NO-SHLD-NEXT: movl %esi, %eax1190; X86-NO-BMI2-NO-SHLD-NEXT: movb %dh, %cl1191; X86-NO-BMI2-NO-SHLD-NEXT: shrl %cl, %eax1192; X86-NO-BMI2-NO-SHLD-NEXT: movb %dh, %dl1193; X86-NO-BMI2-NO-SHLD-NEXT: andb $31, %dl1194; X86-NO-BMI2-NO-SHLD-NEXT: xorb $31, %dl1195; X86-NO-BMI2-NO-SHLD-NEXT: movl 8(%esp,%ebx), %ebp1196; X86-NO-BMI2-NO-SHLD-NEXT: leal (%ebp,%ebp), %edi1197; X86-NO-BMI2-NO-SHLD-NEXT: movl %edx, %ecx1198; X86-NO-BMI2-NO-SHLD-NEXT: shll %cl, %edi1199; X86-NO-BMI2-NO-SHLD-NEXT: orl %eax, %edi1200; X86-NO-BMI2-NO-SHLD-NEXT: movl (%esp,%ebx), %eax1201; X86-NO-BMI2-NO-SHLD-NEXT: movb %dh, %cl1202; X86-NO-BMI2-NO-SHLD-NEXT: shrl %cl, %eax1203; X86-NO-BMI2-NO-SHLD-NEXT: addl %esi, %esi1204; X86-NO-BMI2-NO-SHLD-NEXT: movl %edx, %ecx1205; X86-NO-BMI2-NO-SHLD-NEXT: shll %cl, %esi1206; X86-NO-BMI2-NO-SHLD-NEXT: orl %eax, %esi1207; X86-NO-BMI2-NO-SHLD-NEXT: movb %dh, %cl1208; X86-NO-BMI2-NO-SHLD-NEXT: shrl %cl, %ebp1209; X86-NO-BMI2-NO-SHLD-NEXT: movl 12(%esp,%ebx), %eax1210; X86-NO-BMI2-NO-SHLD-NEXT: leal (%eax,%eax), %ebx1211; X86-NO-BMI2-NO-SHLD-NEXT: movl %edx, %ecx1212; X86-NO-BMI2-NO-SHLD-NEXT: shll %cl, %ebx1213; X86-NO-BMI2-NO-SHLD-NEXT: orl %ebp, %ebx1214; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[0-9]+}}(%esp), %ebp1215; X86-NO-BMI2-NO-SHLD-NEXT: movb %dh, %cl1216; X86-NO-BMI2-NO-SHLD-NEXT: sarl %cl, %eax1217; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, 12(%ebp)1218; X86-NO-BMI2-NO-SHLD-NEXT: movl %ebx, 8(%ebp)1219; X86-NO-BMI2-NO-SHLD-NEXT: movl %esi, (%ebp)1220; X86-NO-BMI2-NO-SHLD-NEXT: movl %edi, 4(%ebp)1221; X86-NO-BMI2-NO-SHLD-NEXT: addl $44, %esp1222; X86-NO-BMI2-NO-SHLD-NEXT: popl %esi1223; X86-NO-BMI2-NO-SHLD-NEXT: popl %edi1224; X86-NO-BMI2-NO-SHLD-NEXT: popl %ebx1225; X86-NO-BMI2-NO-SHLD-NEXT: popl %ebp1226; X86-NO-BMI2-NO-SHLD-NEXT: retl1227;1228; X86-NO-BMI2-HAVE-SHLD-LABEL: ashr_16bytes:1229; X86-NO-BMI2-HAVE-SHLD: # %bb.0:1230; X86-NO-BMI2-HAVE-SHLD-NEXT: pushl %ebp1231; X86-NO-BMI2-HAVE-SHLD-NEXT: pushl %ebx1232; X86-NO-BMI2-HAVE-SHLD-NEXT: pushl %edi1233; X86-NO-BMI2-HAVE-SHLD-NEXT: pushl %esi1234; X86-NO-BMI2-HAVE-SHLD-NEXT: subl $44, %esp1235; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[0-9]+}}(%esp), %eax1236; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[0-9]+}}(%esp), %ecx1237; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[0-9]+}}(%esp), %edx1238; X86-NO-BMI2-HAVE-SHLD-NEXT: movl (%edx), %esi1239; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 4(%edx), %edi1240; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 8(%edx), %ebx1241; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 12(%edx), %edx1242; X86-NO-BMI2-HAVE-SHLD-NEXT: movzbl (%ecx), %ecx1243; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %edx, {{[0-9]+}}(%esp)1244; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ebx, {{[0-9]+}}(%esp)1245; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %edi, {{[0-9]+}}(%esp)1246; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %esi, (%esp)1247; X86-NO-BMI2-HAVE-SHLD-NEXT: sarl $31, %edx1248; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %edx, {{[0-9]+}}(%esp)1249; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %edx, {{[0-9]+}}(%esp)1250; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %edx, {{[0-9]+}}(%esp)1251; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %edx, {{[0-9]+}}(%esp)1252; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ecx, %edx1253; X86-NO-BMI2-HAVE-SHLD-NEXT: shrb $3, %dl1254; X86-NO-BMI2-HAVE-SHLD-NEXT: andb $12, %dl1255; X86-NO-BMI2-HAVE-SHLD-NEXT: movzbl %dl, %ebx1256; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 8(%esp,%ebx), %esi1257; X86-NO-BMI2-HAVE-SHLD-NEXT: movl (%esp,%ebx), %edx1258; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 4(%esp,%ebx), %ebp1259; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ebp, %edi1260; X86-NO-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %esi, %edi1261; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 12(%esp,%ebx), %ebx1262; X86-NO-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %ebx, %esi1263; X86-NO-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %ebp, %edx1264; X86-NO-BMI2-HAVE-SHLD-NEXT: sarl %cl, %ebx1265; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %esi, 8(%eax)1266; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ebx, 12(%eax)1267; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %edx, (%eax)1268; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %edi, 4(%eax)1269; X86-NO-BMI2-HAVE-SHLD-NEXT: addl $44, %esp1270; X86-NO-BMI2-HAVE-SHLD-NEXT: popl %esi1271; X86-NO-BMI2-HAVE-SHLD-NEXT: popl %edi1272; X86-NO-BMI2-HAVE-SHLD-NEXT: popl %ebx1273; X86-NO-BMI2-HAVE-SHLD-NEXT: popl %ebp1274; X86-NO-BMI2-HAVE-SHLD-NEXT: retl1275;1276; X86-HAVE-BMI2-NO-SHLD-LABEL: ashr_16bytes:1277; X86-HAVE-BMI2-NO-SHLD: # %bb.0:1278; X86-HAVE-BMI2-NO-SHLD-NEXT: pushl %ebp1279; X86-HAVE-BMI2-NO-SHLD-NEXT: pushl %ebx1280; X86-HAVE-BMI2-NO-SHLD-NEXT: pushl %edi1281; X86-HAVE-BMI2-NO-SHLD-NEXT: pushl %esi1282; X86-HAVE-BMI2-NO-SHLD-NEXT: subl $44, %esp1283; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[0-9]+}}(%esp), %eax1284; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[0-9]+}}(%esp), %ecx1285; X86-HAVE-BMI2-NO-SHLD-NEXT: movl (%ecx), %edx1286; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 4(%ecx), %esi1287; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 8(%ecx), %edi1288; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 12(%ecx), %ecx1289; X86-HAVE-BMI2-NO-SHLD-NEXT: movzbl (%eax), %eax1290; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)1291; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %edi, {{[0-9]+}}(%esp)1292; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %esi, {{[0-9]+}}(%esp)1293; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %edx, (%esp)1294; X86-HAVE-BMI2-NO-SHLD-NEXT: sarl $31, %ecx1295; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)1296; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)1297; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)1298; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)1299; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, %ecx1300; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, %edx1301; X86-HAVE-BMI2-NO-SHLD-NEXT: shrb $3, %dl1302; X86-HAVE-BMI2-NO-SHLD-NEXT: andb $12, %dl1303; X86-HAVE-BMI2-NO-SHLD-NEXT: movzbl %dl, %edi1304; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 4(%esp,%edi), %ebx1305; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 8(%esp,%edi), %edx1306; X86-HAVE-BMI2-NO-SHLD-NEXT: shrxl %ecx, %ebx, %ebp1307; X86-HAVE-BMI2-NO-SHLD-NEXT: andb $31, %al1308; X86-HAVE-BMI2-NO-SHLD-NEXT: xorb $31, %al1309; X86-HAVE-BMI2-NO-SHLD-NEXT: leal (%edx,%edx), %esi1310; X86-HAVE-BMI2-NO-SHLD-NEXT: shlxl %eax, %esi, %esi1311; X86-HAVE-BMI2-NO-SHLD-NEXT: orl %ebp, %esi1312; X86-HAVE-BMI2-NO-SHLD-NEXT: shrxl %ecx, (%esp,%edi), %ebp1313; X86-HAVE-BMI2-NO-SHLD-NEXT: addl %ebx, %ebx1314; X86-HAVE-BMI2-NO-SHLD-NEXT: shlxl %eax, %ebx, %ebx1315; X86-HAVE-BMI2-NO-SHLD-NEXT: orl %ebp, %ebx1316; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 12(%esp,%edi), %edi1317; X86-HAVE-BMI2-NO-SHLD-NEXT: leal (%edi,%edi), %ebp1318; X86-HAVE-BMI2-NO-SHLD-NEXT: shlxl %eax, %ebp, %eax1319; X86-HAVE-BMI2-NO-SHLD-NEXT: shrxl %ecx, %edx, %edx1320; X86-HAVE-BMI2-NO-SHLD-NEXT: orl %edx, %eax1321; X86-HAVE-BMI2-NO-SHLD-NEXT: sarxl %ecx, %edi, %ecx1322; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[0-9]+}}(%esp), %edx1323; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, 12(%edx)1324; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, 8(%edx)1325; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ebx, (%edx)1326; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %esi, 4(%edx)1327; X86-HAVE-BMI2-NO-SHLD-NEXT: addl $44, %esp1328; X86-HAVE-BMI2-NO-SHLD-NEXT: popl %esi1329; X86-HAVE-BMI2-NO-SHLD-NEXT: popl %edi1330; X86-HAVE-BMI2-NO-SHLD-NEXT: popl %ebx1331; X86-HAVE-BMI2-NO-SHLD-NEXT: popl %ebp1332; X86-HAVE-BMI2-NO-SHLD-NEXT: retl1333;1334; X86-HAVE-BMI2-HAVE-SHLD-LABEL: ashr_16bytes:1335; X86-HAVE-BMI2-HAVE-SHLD: # %bb.0:1336; X86-HAVE-BMI2-HAVE-SHLD-NEXT: pushl %ebp1337; X86-HAVE-BMI2-HAVE-SHLD-NEXT: pushl %ebx1338; X86-HAVE-BMI2-HAVE-SHLD-NEXT: pushl %edi1339; X86-HAVE-BMI2-HAVE-SHLD-NEXT: pushl %esi1340; X86-HAVE-BMI2-HAVE-SHLD-NEXT: subl $44, %esp1341; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[0-9]+}}(%esp), %eax1342; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[0-9]+}}(%esp), %ecx1343; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[0-9]+}}(%esp), %edx1344; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl (%edx), %esi1345; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 4(%edx), %edi1346; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 8(%edx), %ebx1347; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 12(%edx), %edx1348; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movzbl (%ecx), %ecx1349; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edx, {{[0-9]+}}(%esp)1350; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ebx, {{[0-9]+}}(%esp)1351; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edi, {{[0-9]+}}(%esp)1352; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %esi, (%esp)1353; X86-HAVE-BMI2-HAVE-SHLD-NEXT: sarl $31, %edx1354; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edx, {{[0-9]+}}(%esp)1355; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edx, {{[0-9]+}}(%esp)1356; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edx, {{[0-9]+}}(%esp)1357; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edx, {{[0-9]+}}(%esp)1358; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ecx, %edx1359; X86-HAVE-BMI2-HAVE-SHLD-NEXT: shrb $3, %dl1360; X86-HAVE-BMI2-HAVE-SHLD-NEXT: andb $12, %dl1361; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movzbl %dl, %ebp1362; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 8(%esp,%ebp), %ebx1363; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl (%esp,%ebp), %edx1364; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 4(%esp,%ebp), %esi1365; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %esi, %edi1366; X86-HAVE-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %ebx, %edi1367; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 12(%esp,%ebp), %ebp1368; X86-HAVE-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %ebp, %ebx1369; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ebx, 8(%eax)1370; X86-HAVE-BMI2-HAVE-SHLD-NEXT: sarxl %ecx, %ebp, %ebx1371; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ebx, 12(%eax)1372; X86-HAVE-BMI2-HAVE-SHLD-NEXT: # kill: def $cl killed $cl killed $ecx1373; X86-HAVE-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %esi, %edx1374; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edx, (%eax)1375; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edi, 4(%eax)1376; X86-HAVE-BMI2-HAVE-SHLD-NEXT: addl $44, %esp1377; X86-HAVE-BMI2-HAVE-SHLD-NEXT: popl %esi1378; X86-HAVE-BMI2-HAVE-SHLD-NEXT: popl %edi1379; X86-HAVE-BMI2-HAVE-SHLD-NEXT: popl %ebx1380; X86-HAVE-BMI2-HAVE-SHLD-NEXT: popl %ebp1381; X86-HAVE-BMI2-HAVE-SHLD-NEXT: retl1382 %src = load i128, ptr %src.ptr, align 11383 %bitOff = load i128, ptr %bitOff.ptr, align 11384 %res = ashr i128 %src, %bitOff1385 store i128 %res, ptr %dst, align 11386 ret void1387}1388 1389define void @lshr_32bytes(ptr %src.ptr, ptr %bitOff.ptr, ptr %dst) nounwind {1390; X64-NO-BMI2-NO-SHLD-LABEL: lshr_32bytes:1391; X64-NO-BMI2-NO-SHLD: # %bb.0:1392; X64-NO-BMI2-NO-SHLD-NEXT: pushq %rbx1393; X64-NO-BMI2-NO-SHLD-NEXT: movq (%rdi), %rcx1394; X64-NO-BMI2-NO-SHLD-NEXT: movq 8(%rdi), %r81395; X64-NO-BMI2-NO-SHLD-NEXT: movq 16(%rdi), %r91396; X64-NO-BMI2-NO-SHLD-NEXT: movq 24(%rdi), %rdi1397; X64-NO-BMI2-NO-SHLD-NEXT: movzbl (%rsi), %eax1398; X64-NO-BMI2-NO-SHLD-NEXT: xorps %xmm0, %xmm01399; X64-NO-BMI2-NO-SHLD-NEXT: movaps %xmm0, -{{[0-9]+}}(%rsp)1400; X64-NO-BMI2-NO-SHLD-NEXT: movaps %xmm0, -{{[0-9]+}}(%rsp)1401; X64-NO-BMI2-NO-SHLD-NEXT: movq %rdi, -{{[0-9]+}}(%rsp)1402; X64-NO-BMI2-NO-SHLD-NEXT: movq %r9, -{{[0-9]+}}(%rsp)1403; X64-NO-BMI2-NO-SHLD-NEXT: movq %r8, -{{[0-9]+}}(%rsp)1404; X64-NO-BMI2-NO-SHLD-NEXT: movq %rcx, -{{[0-9]+}}(%rsp)1405; X64-NO-BMI2-NO-SHLD-NEXT: movl %eax, %ecx1406; X64-NO-BMI2-NO-SHLD-NEXT: shrb $6, %cl1407; X64-NO-BMI2-NO-SHLD-NEXT: movzbl %cl, %r8d1408; X64-NO-BMI2-NO-SHLD-NEXT: movq -64(%rsp,%r8,8), %r101409; X64-NO-BMI2-NO-SHLD-NEXT: movq -56(%rsp,%r8,8), %rdi1410; X64-NO-BMI2-NO-SHLD-NEXT: movq %rdi, %r111411; X64-NO-BMI2-NO-SHLD-NEXT: movl %eax, %ecx1412; X64-NO-BMI2-NO-SHLD-NEXT: shrq %cl, %r111413; X64-NO-BMI2-NO-SHLD-NEXT: movl %eax, %esi1414; X64-NO-BMI2-NO-SHLD-NEXT: andb $63, %sil1415; X64-NO-BMI2-NO-SHLD-NEXT: xorb $63, %sil1416; X64-NO-BMI2-NO-SHLD-NEXT: movq -48(%rsp,%r8,8), %rbx1417; X64-NO-BMI2-NO-SHLD-NEXT: leaq (%rbx,%rbx), %r91418; X64-NO-BMI2-NO-SHLD-NEXT: movl %esi, %ecx1419; X64-NO-BMI2-NO-SHLD-NEXT: shlq %cl, %r91420; X64-NO-BMI2-NO-SHLD-NEXT: orq %r11, %r91421; X64-NO-BMI2-NO-SHLD-NEXT: movl %eax, %ecx1422; X64-NO-BMI2-NO-SHLD-NEXT: shrq %cl, %r101423; X64-NO-BMI2-NO-SHLD-NEXT: addq %rdi, %rdi1424; X64-NO-BMI2-NO-SHLD-NEXT: movl %esi, %ecx1425; X64-NO-BMI2-NO-SHLD-NEXT: shlq %cl, %rdi1426; X64-NO-BMI2-NO-SHLD-NEXT: orq %r10, %rdi1427; X64-NO-BMI2-NO-SHLD-NEXT: movl %eax, %ecx1428; X64-NO-BMI2-NO-SHLD-NEXT: shrq %cl, %rbx1429; X64-NO-BMI2-NO-SHLD-NEXT: movq -40(%rsp,%r8,8), %r81430; X64-NO-BMI2-NO-SHLD-NEXT: leaq (%r8,%r8), %r101431; X64-NO-BMI2-NO-SHLD-NEXT: movl %esi, %ecx1432; X64-NO-BMI2-NO-SHLD-NEXT: shlq %cl, %r101433; X64-NO-BMI2-NO-SHLD-NEXT: orq %rbx, %r101434; X64-NO-BMI2-NO-SHLD-NEXT: movl %eax, %ecx1435; X64-NO-BMI2-NO-SHLD-NEXT: shrq %cl, %r81436; X64-NO-BMI2-NO-SHLD-NEXT: movq %r8, 24(%rdx)1437; X64-NO-BMI2-NO-SHLD-NEXT: movq %r10, 16(%rdx)1438; X64-NO-BMI2-NO-SHLD-NEXT: movq %rdi, (%rdx)1439; X64-NO-BMI2-NO-SHLD-NEXT: movq %r9, 8(%rdx)1440; X64-NO-BMI2-NO-SHLD-NEXT: popq %rbx1441; X64-NO-BMI2-NO-SHLD-NEXT: retq1442;1443; X64-NO-BMI2-HAVE-SHLD-LABEL: lshr_32bytes:1444; X64-NO-BMI2-HAVE-SHLD: # %bb.0:1445; X64-NO-BMI2-HAVE-SHLD-NEXT: movq (%rdi), %rax1446; X64-NO-BMI2-HAVE-SHLD-NEXT: movq 8(%rdi), %r81447; X64-NO-BMI2-HAVE-SHLD-NEXT: movq 16(%rdi), %r91448; X64-NO-BMI2-HAVE-SHLD-NEXT: movq 24(%rdi), %rdi1449; X64-NO-BMI2-HAVE-SHLD-NEXT: movzbl (%rsi), %ecx1450; X64-NO-BMI2-HAVE-SHLD-NEXT: xorps %xmm0, %xmm01451; X64-NO-BMI2-HAVE-SHLD-NEXT: movaps %xmm0, -{{[0-9]+}}(%rsp)1452; X64-NO-BMI2-HAVE-SHLD-NEXT: movaps %xmm0, -{{[0-9]+}}(%rsp)1453; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %rdi, -{{[0-9]+}}(%rsp)1454; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %r9, -{{[0-9]+}}(%rsp)1455; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %r8, -{{[0-9]+}}(%rsp)1456; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %rax, -{{[0-9]+}}(%rsp)1457; X64-NO-BMI2-HAVE-SHLD-NEXT: movl %ecx, %eax1458; X64-NO-BMI2-HAVE-SHLD-NEXT: shrb $6, %al1459; X64-NO-BMI2-HAVE-SHLD-NEXT: movzbl %al, %eax1460; X64-NO-BMI2-HAVE-SHLD-NEXT: movq -56(%rsp,%rax,8), %rsi1461; X64-NO-BMI2-HAVE-SHLD-NEXT: movq -72(%rsp,%rax,8), %rdi1462; X64-NO-BMI2-HAVE-SHLD-NEXT: movq -64(%rsp,%rax,8), %r81463; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %r8, %r91464; X64-NO-BMI2-HAVE-SHLD-NEXT: shrdq %cl, %rsi, %r91465; X64-NO-BMI2-HAVE-SHLD-NEXT: movq -48(%rsp,%rax,8), %rax1466; X64-NO-BMI2-HAVE-SHLD-NEXT: shrdq %cl, %rax, %rsi1467; X64-NO-BMI2-HAVE-SHLD-NEXT: shrdq %cl, %r8, %rdi1468; X64-NO-BMI2-HAVE-SHLD-NEXT: shrq %cl, %rax1469; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %rsi, 16(%rdx)1470; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %rax, 24(%rdx)1471; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %rdi, (%rdx)1472; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %r9, 8(%rdx)1473; X64-NO-BMI2-HAVE-SHLD-NEXT: retq1474;1475; X64-HAVE-BMI2-NO-SHLD-LABEL: lshr_32bytes:1476; X64-HAVE-BMI2-NO-SHLD: # %bb.0:1477; X64-HAVE-BMI2-NO-SHLD-NEXT: movq (%rdi), %rcx1478; X64-HAVE-BMI2-NO-SHLD-NEXT: movq 8(%rdi), %r81479; X64-HAVE-BMI2-NO-SHLD-NEXT: movq 16(%rdi), %r91480; X64-HAVE-BMI2-NO-SHLD-NEXT: movq 24(%rdi), %rdi1481; X64-HAVE-BMI2-NO-SHLD-NEXT: movzbl (%rsi), %eax1482; X64-HAVE-BMI2-NO-SHLD-NEXT: xorps %xmm0, %xmm01483; X64-HAVE-BMI2-NO-SHLD-NEXT: movaps %xmm0, -{{[0-9]+}}(%rsp)1484; X64-HAVE-BMI2-NO-SHLD-NEXT: movaps %xmm0, -{{[0-9]+}}(%rsp)1485; X64-HAVE-BMI2-NO-SHLD-NEXT: movq %rdi, -{{[0-9]+}}(%rsp)1486; X64-HAVE-BMI2-NO-SHLD-NEXT: movq %r9, -{{[0-9]+}}(%rsp)1487; X64-HAVE-BMI2-NO-SHLD-NEXT: movq %r8, -{{[0-9]+}}(%rsp)1488; X64-HAVE-BMI2-NO-SHLD-NEXT: movq %rcx, -{{[0-9]+}}(%rsp)1489; X64-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, %ecx1490; X64-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, %esi1491; X64-HAVE-BMI2-NO-SHLD-NEXT: shrb $6, %sil1492; X64-HAVE-BMI2-NO-SHLD-NEXT: movzbl %sil, %esi1493; X64-HAVE-BMI2-NO-SHLD-NEXT: movq -64(%rsp,%rsi,8), %rdi1494; X64-HAVE-BMI2-NO-SHLD-NEXT: movq -56(%rsp,%rsi,8), %r81495; X64-HAVE-BMI2-NO-SHLD-NEXT: shrxq %rcx, %rdi, %r91496; X64-HAVE-BMI2-NO-SHLD-NEXT: andb $63, %al1497; X64-HAVE-BMI2-NO-SHLD-NEXT: xorb $63, %al1498; X64-HAVE-BMI2-NO-SHLD-NEXT: leaq (%r8,%r8), %r101499; X64-HAVE-BMI2-NO-SHLD-NEXT: shlxq %rax, %r10, %r101500; X64-HAVE-BMI2-NO-SHLD-NEXT: orq %r9, %r101501; X64-HAVE-BMI2-NO-SHLD-NEXT: shrxq %rcx, -72(%rsp,%rsi,8), %r91502; X64-HAVE-BMI2-NO-SHLD-NEXT: addq %rdi, %rdi1503; X64-HAVE-BMI2-NO-SHLD-NEXT: shlxq %rax, %rdi, %rdi1504; X64-HAVE-BMI2-NO-SHLD-NEXT: orq %r9, %rdi1505; X64-HAVE-BMI2-NO-SHLD-NEXT: shrxq %rcx, %r8, %r81506; X64-HAVE-BMI2-NO-SHLD-NEXT: movq -48(%rsp,%rsi,8), %rsi1507; X64-HAVE-BMI2-NO-SHLD-NEXT: leaq (%rsi,%rsi), %r91508; X64-HAVE-BMI2-NO-SHLD-NEXT: shlxq %rax, %r9, %rax1509; X64-HAVE-BMI2-NO-SHLD-NEXT: orq %r8, %rax1510; X64-HAVE-BMI2-NO-SHLD-NEXT: shrxq %rcx, %rsi, %rcx1511; X64-HAVE-BMI2-NO-SHLD-NEXT: movq %rcx, 24(%rdx)1512; X64-HAVE-BMI2-NO-SHLD-NEXT: movq %rax, 16(%rdx)1513; X64-HAVE-BMI2-NO-SHLD-NEXT: movq %rdi, (%rdx)1514; X64-HAVE-BMI2-NO-SHLD-NEXT: movq %r10, 8(%rdx)1515; X64-HAVE-BMI2-NO-SHLD-NEXT: retq1516;1517; X64-HAVE-BMI2-HAVE-SHLD-LABEL: lshr_32bytes:1518; X64-HAVE-BMI2-HAVE-SHLD: # %bb.0:1519; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq (%rdi), %rax1520; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq 8(%rdi), %r81521; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq 16(%rdi), %r91522; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq 24(%rdi), %rdi1523; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movzbl (%rsi), %ecx1524; X64-HAVE-BMI2-HAVE-SHLD-NEXT: xorps %xmm0, %xmm01525; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movaps %xmm0, -{{[0-9]+}}(%rsp)1526; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movaps %xmm0, -{{[0-9]+}}(%rsp)1527; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq %rdi, -{{[0-9]+}}(%rsp)1528; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq %r9, -{{[0-9]+}}(%rsp)1529; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq %r8, -{{[0-9]+}}(%rsp)1530; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq %rax, -{{[0-9]+}}(%rsp)1531; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ecx, %eax1532; X64-HAVE-BMI2-HAVE-SHLD-NEXT: shrb $6, %al1533; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movzbl %al, %eax1534; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq -56(%rsp,%rax,8), %rsi1535; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq -72(%rsp,%rax,8), %rdi1536; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq -64(%rsp,%rax,8), %r81537; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq %r8, %r91538; X64-HAVE-BMI2-HAVE-SHLD-NEXT: shrdq %cl, %rsi, %r91539; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq -48(%rsp,%rax,8), %rax1540; X64-HAVE-BMI2-HAVE-SHLD-NEXT: shrdq %cl, %rax, %rsi1541; X64-HAVE-BMI2-HAVE-SHLD-NEXT: shrdq %cl, %r8, %rdi1542; X64-HAVE-BMI2-HAVE-SHLD-NEXT: shrxq %rcx, %rax, %rax1543; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq %rsi, 16(%rdx)1544; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq %rax, 24(%rdx)1545; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq %rdi, (%rdx)1546; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq %r9, 8(%rdx)1547; X64-HAVE-BMI2-HAVE-SHLD-NEXT: retq1548;1549; X86-NO-BMI2-NO-SHLD-LABEL: lshr_32bytes:1550; X86-NO-BMI2-NO-SHLD: # %bb.0:1551; X86-NO-BMI2-NO-SHLD-NEXT: pushl %ebp1552; X86-NO-BMI2-NO-SHLD-NEXT: pushl %ebx1553; X86-NO-BMI2-NO-SHLD-NEXT: pushl %edi1554; X86-NO-BMI2-NO-SHLD-NEXT: pushl %esi1555; X86-NO-BMI2-NO-SHLD-NEXT: subl $108, %esp1556; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[0-9]+}}(%esp), %ecx1557; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[0-9]+}}(%esp), %ebp1558; X86-NO-BMI2-NO-SHLD-NEXT: movl (%ebp), %eax1559; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1560; X86-NO-BMI2-NO-SHLD-NEXT: movl 4(%ebp), %eax1561; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1562; X86-NO-BMI2-NO-SHLD-NEXT: movl 8(%ebp), %esi1563; X86-NO-BMI2-NO-SHLD-NEXT: movl 12(%ebp), %edi1564; X86-NO-BMI2-NO-SHLD-NEXT: movl 16(%ebp), %ebx1565; X86-NO-BMI2-NO-SHLD-NEXT: movzbl (%ecx), %edx1566; X86-NO-BMI2-NO-SHLD-NEXT: movl 20(%ebp), %ecx1567; X86-NO-BMI2-NO-SHLD-NEXT: movl 24(%ebp), %eax1568; X86-NO-BMI2-NO-SHLD-NEXT: movl 28(%ebp), %ebp1569; X86-NO-BMI2-NO-SHLD-NEXT: xorps %xmm0, %xmm01570; X86-NO-BMI2-NO-SHLD-NEXT: movaps %xmm0, {{[0-9]+}}(%esp)1571; X86-NO-BMI2-NO-SHLD-NEXT: movl %ebp, {{[0-9]+}}(%esp)1572; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)1573; X86-NO-BMI2-NO-SHLD-NEXT: movaps %xmm0, {{[0-9]+}}(%esp)1574; X86-NO-BMI2-NO-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)1575; X86-NO-BMI2-NO-SHLD-NEXT: movl %ebx, {{[0-9]+}}(%esp)1576; X86-NO-BMI2-NO-SHLD-NEXT: movl %edi, {{[0-9]+}}(%esp)1577; X86-NO-BMI2-NO-SHLD-NEXT: movl %esi, {{[0-9]+}}(%esp)1578; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload1579; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)1580; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload1581; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)1582; X86-NO-BMI2-NO-SHLD-NEXT: movl %edx, %eax1583; X86-NO-BMI2-NO-SHLD-NEXT: shrb $5, %al1584; X86-NO-BMI2-NO-SHLD-NEXT: movzbl %al, %edi1585; X86-NO-BMI2-NO-SHLD-NEXT: movl 32(%esp,%edi,4), %esi1586; X86-NO-BMI2-NO-SHLD-NEXT: movl 36(%esp,%edi,4), %ebx1587; X86-NO-BMI2-NO-SHLD-NEXT: movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1588; X86-NO-BMI2-NO-SHLD-NEXT: movl %ebx, %eax1589; X86-NO-BMI2-NO-SHLD-NEXT: movl %edx, %ecx1590; X86-NO-BMI2-NO-SHLD-NEXT: shrl %cl, %eax1591; X86-NO-BMI2-NO-SHLD-NEXT: movb %dl, %ch1592; X86-NO-BMI2-NO-SHLD-NEXT: andb $31, %ch1593; X86-NO-BMI2-NO-SHLD-NEXT: xorb $31, %ch1594; X86-NO-BMI2-NO-SHLD-NEXT: movl 40(%esp,%edi,4), %edi1595; X86-NO-BMI2-NO-SHLD-NEXT: leal (%edi,%edi), %ebp1596; X86-NO-BMI2-NO-SHLD-NEXT: movb %ch, %cl1597; X86-NO-BMI2-NO-SHLD-NEXT: shll %cl, %ebp1598; X86-NO-BMI2-NO-SHLD-NEXT: orl %eax, %ebp1599; X86-NO-BMI2-NO-SHLD-NEXT: movl %ebp, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1600; X86-NO-BMI2-NO-SHLD-NEXT: movb %dl, %cl1601; X86-NO-BMI2-NO-SHLD-NEXT: shrl %cl, %esi1602; X86-NO-BMI2-NO-SHLD-NEXT: addl %ebx, %ebx1603; X86-NO-BMI2-NO-SHLD-NEXT: movb %ch, %cl1604; X86-NO-BMI2-NO-SHLD-NEXT: shll %cl, %ebx1605; X86-NO-BMI2-NO-SHLD-NEXT: orl %esi, %ebx1606; X86-NO-BMI2-NO-SHLD-NEXT: movl %ebx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1607; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Reload1608; X86-NO-BMI2-NO-SHLD-NEXT: movl 44(%esp,%esi,4), %ebp1609; X86-NO-BMI2-NO-SHLD-NEXT: movl %ebp, %eax1610; X86-NO-BMI2-NO-SHLD-NEXT: movb %dl, %cl1611; X86-NO-BMI2-NO-SHLD-NEXT: movl %edx, %ebx1612; X86-NO-BMI2-NO-SHLD-NEXT: shrl %cl, %eax1613; X86-NO-BMI2-NO-SHLD-NEXT: movl 48(%esp,%esi,4), %edx1614; X86-NO-BMI2-NO-SHLD-NEXT: movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1615; X86-NO-BMI2-NO-SHLD-NEXT: leal (%edx,%edx), %esi1616; X86-NO-BMI2-NO-SHLD-NEXT: movb %ch, %cl1617; X86-NO-BMI2-NO-SHLD-NEXT: shll %cl, %esi1618; X86-NO-BMI2-NO-SHLD-NEXT: orl %eax, %esi1619; X86-NO-BMI2-NO-SHLD-NEXT: movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1620; X86-NO-BMI2-NO-SHLD-NEXT: movl %ebx, %edx1621; X86-NO-BMI2-NO-SHLD-NEXT: movb %bl, %cl1622; X86-NO-BMI2-NO-SHLD-NEXT: shrl %cl, %edi1623; X86-NO-BMI2-NO-SHLD-NEXT: addl %ebp, %ebp1624; X86-NO-BMI2-NO-SHLD-NEXT: movb %ch, %cl1625; X86-NO-BMI2-NO-SHLD-NEXT: shll %cl, %ebp1626; X86-NO-BMI2-NO-SHLD-NEXT: orl %edi, %ebp1627; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Reload1628; X86-NO-BMI2-NO-SHLD-NEXT: movl 52(%esp,%esi,4), %edi1629; X86-NO-BMI2-NO-SHLD-NEXT: movl %edi, %eax1630; X86-NO-BMI2-NO-SHLD-NEXT: movb %bl, %cl1631; X86-NO-BMI2-NO-SHLD-NEXT: shrl %cl, %eax1632; X86-NO-BMI2-NO-SHLD-NEXT: movl 56(%esp,%esi,4), %ebx1633; X86-NO-BMI2-NO-SHLD-NEXT: leal (%ebx,%ebx), %esi1634; X86-NO-BMI2-NO-SHLD-NEXT: movb %ch, %cl1635; X86-NO-BMI2-NO-SHLD-NEXT: shll %cl, %esi1636; X86-NO-BMI2-NO-SHLD-NEXT: orl %eax, %esi1637; X86-NO-BMI2-NO-SHLD-NEXT: movb %dl, {{[-0-9]+}}(%e{{[sb]}}p) # 1-byte Spill1638; X86-NO-BMI2-NO-SHLD-NEXT: movb %dl, %cl1639; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload1640; X86-NO-BMI2-NO-SHLD-NEXT: shrl %cl, %eax1641; X86-NO-BMI2-NO-SHLD-NEXT: addl %edi, %edi1642; X86-NO-BMI2-NO-SHLD-NEXT: movb %ch, %cl1643; X86-NO-BMI2-NO-SHLD-NEXT: shll %cl, %edi1644; X86-NO-BMI2-NO-SHLD-NEXT: orl %eax, %edi1645; X86-NO-BMI2-NO-SHLD-NEXT: movb %dl, %cl1646; X86-NO-BMI2-NO-SHLD-NEXT: shrl %cl, %ebx1647; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload1648; X86-NO-BMI2-NO-SHLD-NEXT: movl 60(%esp,%eax,4), %eax1649; X86-NO-BMI2-NO-SHLD-NEXT: leal (%eax,%eax), %edx1650; X86-NO-BMI2-NO-SHLD-NEXT: movb %ch, %cl1651; X86-NO-BMI2-NO-SHLD-NEXT: shll %cl, %edx1652; X86-NO-BMI2-NO-SHLD-NEXT: orl %ebx, %edx1653; X86-NO-BMI2-NO-SHLD-NEXT: movzbl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 1-byte Folded Reload1654; X86-NO-BMI2-NO-SHLD-NEXT: shrl %cl, %eax1655; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[0-9]+}}(%esp), %ecx1656; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, 28(%ecx)1657; X86-NO-BMI2-NO-SHLD-NEXT: movl %edx, 24(%ecx)1658; X86-NO-BMI2-NO-SHLD-NEXT: movl %edi, 16(%ecx)1659; X86-NO-BMI2-NO-SHLD-NEXT: movl %esi, 20(%ecx)1660; X86-NO-BMI2-NO-SHLD-NEXT: movl %ebp, 8(%ecx)1661; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload1662; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, 12(%ecx)1663; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload1664; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, (%ecx)1665; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload1666; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, 4(%ecx)1667; X86-NO-BMI2-NO-SHLD-NEXT: addl $108, %esp1668; X86-NO-BMI2-NO-SHLD-NEXT: popl %esi1669; X86-NO-BMI2-NO-SHLD-NEXT: popl %edi1670; X86-NO-BMI2-NO-SHLD-NEXT: popl %ebx1671; X86-NO-BMI2-NO-SHLD-NEXT: popl %ebp1672; X86-NO-BMI2-NO-SHLD-NEXT: retl1673;1674; X86-NO-BMI2-HAVE-SHLD-LABEL: lshr_32bytes:1675; X86-NO-BMI2-HAVE-SHLD: # %bb.0:1676; X86-NO-BMI2-HAVE-SHLD-NEXT: pushl %ebp1677; X86-NO-BMI2-HAVE-SHLD-NEXT: pushl %ebx1678; X86-NO-BMI2-HAVE-SHLD-NEXT: pushl %edi1679; X86-NO-BMI2-HAVE-SHLD-NEXT: pushl %esi1680; X86-NO-BMI2-HAVE-SHLD-NEXT: subl $92, %esp1681; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[0-9]+}}(%esp), %ecx1682; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[0-9]+}}(%esp), %ebp1683; X86-NO-BMI2-HAVE-SHLD-NEXT: movl (%ebp), %eax1684; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1685; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 4(%ebp), %eax1686; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %eax, (%esp) # 4-byte Spill1687; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 8(%ebp), %esi1688; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 12(%ebp), %edi1689; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 16(%ebp), %ebx1690; X86-NO-BMI2-HAVE-SHLD-NEXT: movzbl (%ecx), %ecx1691; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 20(%ebp), %edx1692; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 24(%ebp), %eax1693; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 28(%ebp), %ebp1694; X86-NO-BMI2-HAVE-SHLD-NEXT: xorps %xmm0, %xmm01695; X86-NO-BMI2-HAVE-SHLD-NEXT: movaps %xmm0, {{[0-9]+}}(%esp)1696; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ebp, {{[0-9]+}}(%esp)1697; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)1698; X86-NO-BMI2-HAVE-SHLD-NEXT: movaps %xmm0, {{[0-9]+}}(%esp)1699; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %edx, {{[0-9]+}}(%esp)1700; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ebx, {{[0-9]+}}(%esp)1701; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %edi, {{[0-9]+}}(%esp)1702; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %esi, {{[0-9]+}}(%esp)1703; X86-NO-BMI2-HAVE-SHLD-NEXT: movl (%esp), %eax # 4-byte Reload1704; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)1705; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload1706; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)1707; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ecx, %eax1708; X86-NO-BMI2-HAVE-SHLD-NEXT: shrb $5, %al1709; X86-NO-BMI2-HAVE-SHLD-NEXT: movzbl %al, %ebp1710; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 24(%esp,%ebp,4), %edx1711; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 20(%esp,%ebp,4), %eax1712; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %eax, (%esp) # 4-byte Spill1713; X86-NO-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %edx, %eax1714; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1715; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 32(%esp,%ebp,4), %ebx1716; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 28(%esp,%ebp,4), %eax1717; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %eax, %esi1718; X86-NO-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %ebx, %esi1719; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1720; X86-NO-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %eax, %edx1721; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1722; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 40(%esp,%ebp,4), %edx1723; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 36(%esp,%ebp,4), %eax1724; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %eax, %edi1725; X86-NO-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %edx, %edi1726; X86-NO-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %eax, %ebx1727; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 16(%esp,%ebp,4), %esi1728; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 44(%esp,%ebp,4), %eax1729; X86-NO-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %eax, %edx1730; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[0-9]+}}(%esp), %ebp1731; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %edx, 24(%ebp)1732; X86-NO-BMI2-HAVE-SHLD-NEXT: movl (%esp), %edx # 4-byte Reload1733; X86-NO-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %edx, %esi1734; X86-NO-BMI2-HAVE-SHLD-NEXT: shrl %cl, %eax1735; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %eax, 28(%ebp)1736; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ebx, 16(%ebp)1737; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %edi, 20(%ebp)1738; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload1739; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %eax, 8(%ebp)1740; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload1741; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %eax, 12(%ebp)1742; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %esi, (%ebp)1743; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload1744; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %eax, 4(%ebp)1745; X86-NO-BMI2-HAVE-SHLD-NEXT: addl $92, %esp1746; X86-NO-BMI2-HAVE-SHLD-NEXT: popl %esi1747; X86-NO-BMI2-HAVE-SHLD-NEXT: popl %edi1748; X86-NO-BMI2-HAVE-SHLD-NEXT: popl %ebx1749; X86-NO-BMI2-HAVE-SHLD-NEXT: popl %ebp1750; X86-NO-BMI2-HAVE-SHLD-NEXT: retl1751;1752; X86-HAVE-BMI2-NO-SHLD-LABEL: lshr_32bytes:1753; X86-HAVE-BMI2-NO-SHLD: # %bb.0:1754; X86-HAVE-BMI2-NO-SHLD-NEXT: pushl %ebp1755; X86-HAVE-BMI2-NO-SHLD-NEXT: pushl %ebx1756; X86-HAVE-BMI2-NO-SHLD-NEXT: pushl %edi1757; X86-HAVE-BMI2-NO-SHLD-NEXT: pushl %esi1758; X86-HAVE-BMI2-NO-SHLD-NEXT: subl $108, %esp1759; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[0-9]+}}(%esp), %eax1760; X86-HAVE-BMI2-NO-SHLD-NEXT: movl (%eax), %ecx1761; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1762; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 4(%eax), %ecx1763; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1764; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 8(%eax), %ecx1765; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1766; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 12(%eax), %edi1767; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 16(%eax), %ebx1768; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 20(%eax), %ebp1769; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 24(%eax), %esi1770; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 28(%eax), %edx1771; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[0-9]+}}(%esp), %eax1772; X86-HAVE-BMI2-NO-SHLD-NEXT: movzbl (%eax), %ecx1773; X86-HAVE-BMI2-NO-SHLD-NEXT: xorps %xmm0, %xmm01774; X86-HAVE-BMI2-NO-SHLD-NEXT: movaps %xmm0, {{[0-9]+}}(%esp)1775; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %edx, {{[0-9]+}}(%esp)1776; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %esi, {{[0-9]+}}(%esp)1777; X86-HAVE-BMI2-NO-SHLD-NEXT: movaps %xmm0, {{[0-9]+}}(%esp)1778; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ebp, {{[0-9]+}}(%esp)1779; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ebx, {{[0-9]+}}(%esp)1780; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %edi, {{[0-9]+}}(%esp)1781; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload1782; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)1783; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload1784; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)1785; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload1786; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)1787; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, %eax1788; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, %edx1789; X86-HAVE-BMI2-NO-SHLD-NEXT: shrb $5, %dl1790; X86-HAVE-BMI2-NO-SHLD-NEXT: movzbl %dl, %esi1791; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 36(%esp,%esi,4), %edx1792; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 40(%esp,%esi,4), %ebp1793; X86-HAVE-BMI2-NO-SHLD-NEXT: shrxl %eax, %edx, %edi1794; X86-HAVE-BMI2-NO-SHLD-NEXT: andb $31, %cl1795; X86-HAVE-BMI2-NO-SHLD-NEXT: xorb $31, %cl1796; X86-HAVE-BMI2-NO-SHLD-NEXT: leal (%ebp,%ebp), %ebx1797; X86-HAVE-BMI2-NO-SHLD-NEXT: shlxl %ecx, %ebx, %ebx1798; X86-HAVE-BMI2-NO-SHLD-NEXT: orl %edi, %ebx1799; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ebx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1800; X86-HAVE-BMI2-NO-SHLD-NEXT: shrxl %eax, 32(%esp,%esi,4), %edi1801; X86-HAVE-BMI2-NO-SHLD-NEXT: addl %edx, %edx1802; X86-HAVE-BMI2-NO-SHLD-NEXT: shlxl %ecx, %edx, %edx1803; X86-HAVE-BMI2-NO-SHLD-NEXT: orl %edi, %edx1804; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1805; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 48(%esp,%esi,4), %edx1806; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1807; X86-HAVE-BMI2-NO-SHLD-NEXT: addl %edx, %edx1808; X86-HAVE-BMI2-NO-SHLD-NEXT: shlxl %ecx, %edx, %ebx1809; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 44(%esp,%esi,4), %edx1810; X86-HAVE-BMI2-NO-SHLD-NEXT: shrxl %eax, %edx, %edi1811; X86-HAVE-BMI2-NO-SHLD-NEXT: orl %edi, %ebx1812; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ebx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1813; X86-HAVE-BMI2-NO-SHLD-NEXT: shrxl %eax, %ebp, %edi1814; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, %ebp1815; X86-HAVE-BMI2-NO-SHLD-NEXT: addl %edx, %edx1816; X86-HAVE-BMI2-NO-SHLD-NEXT: shlxl %ecx, %edx, %eax1817; X86-HAVE-BMI2-NO-SHLD-NEXT: orl %edi, %eax1818; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1819; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 56(%esp,%esi,4), %edi1820; X86-HAVE-BMI2-NO-SHLD-NEXT: leal (%edi,%edi), %edx1821; X86-HAVE-BMI2-NO-SHLD-NEXT: shlxl %ecx, %edx, %edx1822; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 52(%esp,%esi,4), %eax1823; X86-HAVE-BMI2-NO-SHLD-NEXT: shrxl %ebp, %eax, %ebx1824; X86-HAVE-BMI2-NO-SHLD-NEXT: orl %ebx, %edx1825; X86-HAVE-BMI2-NO-SHLD-NEXT: shrxl %ebp, {{[-0-9]+}}(%e{{[sb]}}p), %ebx # 4-byte Folded Reload1826; X86-HAVE-BMI2-NO-SHLD-NEXT: addl %eax, %eax1827; X86-HAVE-BMI2-NO-SHLD-NEXT: shlxl %ecx, %eax, %eax1828; X86-HAVE-BMI2-NO-SHLD-NEXT: orl %ebx, %eax1829; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 60(%esp,%esi,4), %esi1830; X86-HAVE-BMI2-NO-SHLD-NEXT: leal (%esi,%esi), %ebx1831; X86-HAVE-BMI2-NO-SHLD-NEXT: shlxl %ecx, %ebx, %ecx1832; X86-HAVE-BMI2-NO-SHLD-NEXT: shrxl %ebp, %edi, %edi1833; X86-HAVE-BMI2-NO-SHLD-NEXT: orl %edi, %ecx1834; X86-HAVE-BMI2-NO-SHLD-NEXT: shrxl %ebp, %esi, %esi1835; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[0-9]+}}(%esp), %edi1836; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %esi, 28(%edi)1837; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, 24(%edi)1838; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, 16(%edi)1839; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %edx, 20(%edi)1840; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload1841; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, 8(%edi)1842; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload1843; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, 12(%edi)1844; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload1845; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, (%edi)1846; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload1847; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, 4(%edi)1848; X86-HAVE-BMI2-NO-SHLD-NEXT: addl $108, %esp1849; X86-HAVE-BMI2-NO-SHLD-NEXT: popl %esi1850; X86-HAVE-BMI2-NO-SHLD-NEXT: popl %edi1851; X86-HAVE-BMI2-NO-SHLD-NEXT: popl %ebx1852; X86-HAVE-BMI2-NO-SHLD-NEXT: popl %ebp1853; X86-HAVE-BMI2-NO-SHLD-NEXT: retl1854;1855; X86-HAVE-BMI2-HAVE-SHLD-LABEL: lshr_32bytes:1856; X86-HAVE-BMI2-HAVE-SHLD: # %bb.0:1857; X86-HAVE-BMI2-HAVE-SHLD-NEXT: pushl %ebp1858; X86-HAVE-BMI2-HAVE-SHLD-NEXT: pushl %ebx1859; X86-HAVE-BMI2-HAVE-SHLD-NEXT: pushl %edi1860; X86-HAVE-BMI2-HAVE-SHLD-NEXT: pushl %esi1861; X86-HAVE-BMI2-HAVE-SHLD-NEXT: subl $92, %esp1862; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[0-9]+}}(%esp), %ecx1863; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl (%ecx), %eax1864; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1865; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 4(%ecx), %eax1866; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %eax, (%esp) # 4-byte Spill1867; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 8(%ecx), %esi1868; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 12(%ecx), %edi1869; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 16(%ecx), %ebx1870; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 20(%ecx), %ebp1871; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 24(%ecx), %edx1872; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 28(%ecx), %eax1873; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[0-9]+}}(%esp), %ecx1874; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movzbl (%ecx), %ecx1875; X86-HAVE-BMI2-HAVE-SHLD-NEXT: xorps %xmm0, %xmm01876; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movaps %xmm0, {{[0-9]+}}(%esp)1877; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)1878; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edx, {{[0-9]+}}(%esp)1879; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movaps %xmm0, {{[0-9]+}}(%esp)1880; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ebp, {{[0-9]+}}(%esp)1881; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ebx, {{[0-9]+}}(%esp)1882; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edi, {{[0-9]+}}(%esp)1883; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %esi, {{[0-9]+}}(%esp)1884; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl (%esp), %eax # 4-byte Reload1885; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)1886; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload1887; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)1888; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ecx, %eax1889; X86-HAVE-BMI2-HAVE-SHLD-NEXT: shrb $5, %al1890; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movzbl %al, %ebp1891; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 24(%esp,%ebp,4), %esi1892; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 20(%esp,%ebp,4), %eax1893; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1894; X86-HAVE-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %esi, %eax1895; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %eax, (%esp) # 4-byte Spill1896; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 32(%esp,%ebp,4), %ebx1897; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 28(%esp,%ebp,4), %eax1898; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %eax, %edx1899; X86-HAVE-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %ebx, %edx1900; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1901; X86-HAVE-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %eax, %esi1902; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1903; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 40(%esp,%ebp,4), %eax1904; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 36(%esp,%ebp,4), %edx1905; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edx, %esi1906; X86-HAVE-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %eax, %esi1907; X86-HAVE-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %edx, %ebx1908; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 16(%esp,%ebp,4), %edx1909; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 44(%esp,%ebp,4), %edi1910; X86-HAVE-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %edi, %eax1911; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[0-9]+}}(%esp), %ebp1912; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %eax, 24(%ebp)1913; X86-HAVE-BMI2-HAVE-SHLD-NEXT: shrxl %ecx, %edi, %eax1914; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %eax, 28(%ebp)1915; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ebx, 16(%ebp)1916; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %esi, 20(%ebp)1917; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload1918; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %eax, 8(%ebp)1919; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload1920; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %eax, 12(%ebp)1921; X86-HAVE-BMI2-HAVE-SHLD-NEXT: # kill: def $cl killed $cl killed $ecx1922; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload1923; X86-HAVE-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %eax, %edx1924; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edx, (%ebp)1925; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl (%esp), %eax # 4-byte Reload1926; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %eax, 4(%ebp)1927; X86-HAVE-BMI2-HAVE-SHLD-NEXT: addl $92, %esp1928; X86-HAVE-BMI2-HAVE-SHLD-NEXT: popl %esi1929; X86-HAVE-BMI2-HAVE-SHLD-NEXT: popl %edi1930; X86-HAVE-BMI2-HAVE-SHLD-NEXT: popl %ebx1931; X86-HAVE-BMI2-HAVE-SHLD-NEXT: popl %ebp1932; X86-HAVE-BMI2-HAVE-SHLD-NEXT: retl1933 %src = load i256, ptr %src.ptr, align 11934 %bitOff = load i256, ptr %bitOff.ptr, align 11935 %res = lshr i256 %src, %bitOff1936 store i256 %res, ptr %dst, align 11937 ret void1938}1939define void @shl_32bytes(ptr %src.ptr, ptr %bitOff.ptr, ptr %dst) nounwind {1940; X64-NO-BMI2-NO-SHLD-LABEL: shl_32bytes:1941; X64-NO-BMI2-NO-SHLD: # %bb.0:1942; X64-NO-BMI2-NO-SHLD-NEXT: pushq %rbx1943; X64-NO-BMI2-NO-SHLD-NEXT: movq (%rdi), %rcx1944; X64-NO-BMI2-NO-SHLD-NEXT: movq 8(%rdi), %r81945; X64-NO-BMI2-NO-SHLD-NEXT: movq 16(%rdi), %r91946; X64-NO-BMI2-NO-SHLD-NEXT: movq 24(%rdi), %rdi1947; X64-NO-BMI2-NO-SHLD-NEXT: movzbl (%rsi), %eax1948; X64-NO-BMI2-NO-SHLD-NEXT: xorps %xmm0, %xmm01949; X64-NO-BMI2-NO-SHLD-NEXT: movaps %xmm0, -{{[0-9]+}}(%rsp)1950; X64-NO-BMI2-NO-SHLD-NEXT: movaps %xmm0, -{{[0-9]+}}(%rsp)1951; X64-NO-BMI2-NO-SHLD-NEXT: movq %rdi, -{{[0-9]+}}(%rsp)1952; X64-NO-BMI2-NO-SHLD-NEXT: movq %r9, -{{[0-9]+}}(%rsp)1953; X64-NO-BMI2-NO-SHLD-NEXT: movq %r8, -{{[0-9]+}}(%rsp)1954; X64-NO-BMI2-NO-SHLD-NEXT: movq %rcx, -{{[0-9]+}}(%rsp)1955; X64-NO-BMI2-NO-SHLD-NEXT: movl %eax, %ecx1956; X64-NO-BMI2-NO-SHLD-NEXT: shrb $3, %cl1957; X64-NO-BMI2-NO-SHLD-NEXT: andb $24, %cl1958; X64-NO-BMI2-NO-SHLD-NEXT: negb %cl1959; X64-NO-BMI2-NO-SHLD-NEXT: movsbq %cl, %r101960; X64-NO-BMI2-NO-SHLD-NEXT: movq -32(%rsp,%r10), %r81961; X64-NO-BMI2-NO-SHLD-NEXT: movq -24(%rsp,%r10), %rdi1962; X64-NO-BMI2-NO-SHLD-NEXT: movq %rdi, %r111963; X64-NO-BMI2-NO-SHLD-NEXT: movl %eax, %ecx1964; X64-NO-BMI2-NO-SHLD-NEXT: shlq %cl, %r111965; X64-NO-BMI2-NO-SHLD-NEXT: movl %eax, %esi1966; X64-NO-BMI2-NO-SHLD-NEXT: andb $63, %sil1967; X64-NO-BMI2-NO-SHLD-NEXT: xorb $63, %sil1968; X64-NO-BMI2-NO-SHLD-NEXT: movq %r8, %r91969; X64-NO-BMI2-NO-SHLD-NEXT: shrq %r91970; X64-NO-BMI2-NO-SHLD-NEXT: movl %esi, %ecx1971; X64-NO-BMI2-NO-SHLD-NEXT: shrq %cl, %r91972; X64-NO-BMI2-NO-SHLD-NEXT: orq %r11, %r91973; X64-NO-BMI2-NO-SHLD-NEXT: movq -8(%rsp,%r10), %r111974; X64-NO-BMI2-NO-SHLD-NEXT: movl %eax, %ecx1975; X64-NO-BMI2-NO-SHLD-NEXT: shlq %cl, %r111976; X64-NO-BMI2-NO-SHLD-NEXT: movq -16(%rsp,%r10), %r101977; X64-NO-BMI2-NO-SHLD-NEXT: movq %r10, %rbx1978; X64-NO-BMI2-NO-SHLD-NEXT: shrq %rbx1979; X64-NO-BMI2-NO-SHLD-NEXT: movl %esi, %ecx1980; X64-NO-BMI2-NO-SHLD-NEXT: shrq %cl, %rbx1981; X64-NO-BMI2-NO-SHLD-NEXT: orq %r11, %rbx1982; X64-NO-BMI2-NO-SHLD-NEXT: movl %eax, %ecx1983; X64-NO-BMI2-NO-SHLD-NEXT: shlq %cl, %r101984; X64-NO-BMI2-NO-SHLD-NEXT: shrq %rdi1985; X64-NO-BMI2-NO-SHLD-NEXT: movl %esi, %ecx1986; X64-NO-BMI2-NO-SHLD-NEXT: shrq %cl, %rdi1987; X64-NO-BMI2-NO-SHLD-NEXT: orq %r10, %rdi1988; X64-NO-BMI2-NO-SHLD-NEXT: movl %eax, %ecx1989; X64-NO-BMI2-NO-SHLD-NEXT: shlq %cl, %r81990; X64-NO-BMI2-NO-SHLD-NEXT: movq %r8, (%rdx)1991; X64-NO-BMI2-NO-SHLD-NEXT: movq %rdi, 16(%rdx)1992; X64-NO-BMI2-NO-SHLD-NEXT: movq %rbx, 24(%rdx)1993; X64-NO-BMI2-NO-SHLD-NEXT: movq %r9, 8(%rdx)1994; X64-NO-BMI2-NO-SHLD-NEXT: popq %rbx1995; X64-NO-BMI2-NO-SHLD-NEXT: retq1996;1997; X64-NO-BMI2-HAVE-SHLD-LABEL: shl_32bytes:1998; X64-NO-BMI2-HAVE-SHLD: # %bb.0:1999; X64-NO-BMI2-HAVE-SHLD-NEXT: movq (%rdi), %rax2000; X64-NO-BMI2-HAVE-SHLD-NEXT: movq 8(%rdi), %r82001; X64-NO-BMI2-HAVE-SHLD-NEXT: movq 16(%rdi), %r92002; X64-NO-BMI2-HAVE-SHLD-NEXT: movq 24(%rdi), %rdi2003; X64-NO-BMI2-HAVE-SHLD-NEXT: movzbl (%rsi), %ecx2004; X64-NO-BMI2-HAVE-SHLD-NEXT: xorps %xmm0, %xmm02005; X64-NO-BMI2-HAVE-SHLD-NEXT: movaps %xmm0, -{{[0-9]+}}(%rsp)2006; X64-NO-BMI2-HAVE-SHLD-NEXT: movaps %xmm0, -{{[0-9]+}}(%rsp)2007; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %rdi, -{{[0-9]+}}(%rsp)2008; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %r9, -{{[0-9]+}}(%rsp)2009; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %r8, -{{[0-9]+}}(%rsp)2010; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %rax, -{{[0-9]+}}(%rsp)2011; X64-NO-BMI2-HAVE-SHLD-NEXT: movl %ecx, %eax2012; X64-NO-BMI2-HAVE-SHLD-NEXT: shrb $3, %al2013; X64-NO-BMI2-HAVE-SHLD-NEXT: andb $24, %al2014; X64-NO-BMI2-HAVE-SHLD-NEXT: negb %al2015; X64-NO-BMI2-HAVE-SHLD-NEXT: movsbq %al, %rax2016; X64-NO-BMI2-HAVE-SHLD-NEXT: movq -24(%rsp,%rax), %rsi2017; X64-NO-BMI2-HAVE-SHLD-NEXT: movq -16(%rsp,%rax), %rdi2018; X64-NO-BMI2-HAVE-SHLD-NEXT: shldq %cl, %rsi, %rdi2019; X64-NO-BMI2-HAVE-SHLD-NEXT: movq -40(%rsp,%rax), %r82020; X64-NO-BMI2-HAVE-SHLD-NEXT: movq -32(%rsp,%rax), %rax2021; X64-NO-BMI2-HAVE-SHLD-NEXT: shldq %cl, %rax, %rsi2022; X64-NO-BMI2-HAVE-SHLD-NEXT: shldq %cl, %r8, %rax2023; X64-NO-BMI2-HAVE-SHLD-NEXT: shlq %cl, %r82024; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %rsi, 16(%rdx)2025; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %rdi, 24(%rdx)2026; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %r8, (%rdx)2027; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %rax, 8(%rdx)2028; X64-NO-BMI2-HAVE-SHLD-NEXT: retq2029;2030; X64-HAVE-BMI2-NO-SHLD-LABEL: shl_32bytes:2031; X64-HAVE-BMI2-NO-SHLD: # %bb.0:2032; X64-HAVE-BMI2-NO-SHLD-NEXT: movq (%rdi), %rcx2033; X64-HAVE-BMI2-NO-SHLD-NEXT: movq 8(%rdi), %r82034; X64-HAVE-BMI2-NO-SHLD-NEXT: movq 16(%rdi), %r92035; X64-HAVE-BMI2-NO-SHLD-NEXT: movq 24(%rdi), %rdi2036; X64-HAVE-BMI2-NO-SHLD-NEXT: movzbl (%rsi), %eax2037; X64-HAVE-BMI2-NO-SHLD-NEXT: xorps %xmm0, %xmm02038; X64-HAVE-BMI2-NO-SHLD-NEXT: movaps %xmm0, -{{[0-9]+}}(%rsp)2039; X64-HAVE-BMI2-NO-SHLD-NEXT: movaps %xmm0, -{{[0-9]+}}(%rsp)2040; X64-HAVE-BMI2-NO-SHLD-NEXT: movq %rdi, -{{[0-9]+}}(%rsp)2041; X64-HAVE-BMI2-NO-SHLD-NEXT: movq %r9, -{{[0-9]+}}(%rsp)2042; X64-HAVE-BMI2-NO-SHLD-NEXT: movq %r8, -{{[0-9]+}}(%rsp)2043; X64-HAVE-BMI2-NO-SHLD-NEXT: movq %rcx, -{{[0-9]+}}(%rsp)2044; X64-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, %ecx2045; X64-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, %esi2046; X64-HAVE-BMI2-NO-SHLD-NEXT: shrb $3, %sil2047; X64-HAVE-BMI2-NO-SHLD-NEXT: andb $24, %sil2048; X64-HAVE-BMI2-NO-SHLD-NEXT: negb %sil2049; X64-HAVE-BMI2-NO-SHLD-NEXT: movsbq %sil, %rdi2050; X64-HAVE-BMI2-NO-SHLD-NEXT: movq -40(%rsp,%rdi), %r82051; X64-HAVE-BMI2-NO-SHLD-NEXT: movq -32(%rsp,%rdi), %rsi2052; X64-HAVE-BMI2-NO-SHLD-NEXT: shlxq %rcx, %rsi, %r92053; X64-HAVE-BMI2-NO-SHLD-NEXT: andb $63, %al2054; X64-HAVE-BMI2-NO-SHLD-NEXT: xorb $63, %al2055; X64-HAVE-BMI2-NO-SHLD-NEXT: shlxq %rcx, %r8, %r102056; X64-HAVE-BMI2-NO-SHLD-NEXT: shrq %r82057; X64-HAVE-BMI2-NO-SHLD-NEXT: shrxq %rax, %r8, %r82058; X64-HAVE-BMI2-NO-SHLD-NEXT: orq %r9, %r82059; X64-HAVE-BMI2-NO-SHLD-NEXT: shlxq %rcx, -16(%rsp,%rdi), %r92060; X64-HAVE-BMI2-NO-SHLD-NEXT: movq -24(%rsp,%rdi), %rdi2061; X64-HAVE-BMI2-NO-SHLD-NEXT: shlxq %rcx, %rdi, %rcx2062; X64-HAVE-BMI2-NO-SHLD-NEXT: shrq %rdi2063; X64-HAVE-BMI2-NO-SHLD-NEXT: shrxq %rax, %rdi, %rdi2064; X64-HAVE-BMI2-NO-SHLD-NEXT: orq %r9, %rdi2065; X64-HAVE-BMI2-NO-SHLD-NEXT: shrq %rsi2066; X64-HAVE-BMI2-NO-SHLD-NEXT: shrxq %rax, %rsi, %rax2067; X64-HAVE-BMI2-NO-SHLD-NEXT: orq %rcx, %rax2068; X64-HAVE-BMI2-NO-SHLD-NEXT: movq %r10, (%rdx)2069; X64-HAVE-BMI2-NO-SHLD-NEXT: movq %rax, 16(%rdx)2070; X64-HAVE-BMI2-NO-SHLD-NEXT: movq %rdi, 24(%rdx)2071; X64-HAVE-BMI2-NO-SHLD-NEXT: movq %r8, 8(%rdx)2072; X64-HAVE-BMI2-NO-SHLD-NEXT: retq2073;2074; X64-HAVE-BMI2-HAVE-SHLD-LABEL: shl_32bytes:2075; X64-HAVE-BMI2-HAVE-SHLD: # %bb.0:2076; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq (%rdi), %rax2077; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq 8(%rdi), %r82078; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq 16(%rdi), %r92079; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq 24(%rdi), %rdi2080; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movzbl (%rsi), %ecx2081; X64-HAVE-BMI2-HAVE-SHLD-NEXT: xorps %xmm0, %xmm02082; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movaps %xmm0, -{{[0-9]+}}(%rsp)2083; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movaps %xmm0, -{{[0-9]+}}(%rsp)2084; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq %rdi, -{{[0-9]+}}(%rsp)2085; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq %r9, -{{[0-9]+}}(%rsp)2086; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq %r8, -{{[0-9]+}}(%rsp)2087; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq %rax, -{{[0-9]+}}(%rsp)2088; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ecx, %eax2089; X64-HAVE-BMI2-HAVE-SHLD-NEXT: shrb $3, %al2090; X64-HAVE-BMI2-HAVE-SHLD-NEXT: andb $24, %al2091; X64-HAVE-BMI2-HAVE-SHLD-NEXT: negb %al2092; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movsbq %al, %rax2093; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq -24(%rsp,%rax), %rsi2094; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq -16(%rsp,%rax), %rdi2095; X64-HAVE-BMI2-HAVE-SHLD-NEXT: shldq %cl, %rsi, %rdi2096; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq -40(%rsp,%rax), %r82097; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq -32(%rsp,%rax), %rax2098; X64-HAVE-BMI2-HAVE-SHLD-NEXT: shldq %cl, %rax, %rsi2099; X64-HAVE-BMI2-HAVE-SHLD-NEXT: shldq %cl, %r8, %rax2100; X64-HAVE-BMI2-HAVE-SHLD-NEXT: shlxq %rcx, %r8, %rcx2101; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq %rsi, 16(%rdx)2102; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq %rdi, 24(%rdx)2103; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq %rcx, (%rdx)2104; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq %rax, 8(%rdx)2105; X64-HAVE-BMI2-HAVE-SHLD-NEXT: retq2106;2107; X86-NO-BMI2-NO-SHLD-LABEL: shl_32bytes:2108; X86-NO-BMI2-NO-SHLD: # %bb.0:2109; X86-NO-BMI2-NO-SHLD-NEXT: pushl %ebp2110; X86-NO-BMI2-NO-SHLD-NEXT: pushl %ebx2111; X86-NO-BMI2-NO-SHLD-NEXT: pushl %edi2112; X86-NO-BMI2-NO-SHLD-NEXT: pushl %esi2113; X86-NO-BMI2-NO-SHLD-NEXT: subl $108, %esp2114; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[0-9]+}}(%esp), %ecx2115; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[0-9]+}}(%esp), %ebp2116; X86-NO-BMI2-NO-SHLD-NEXT: movl (%ebp), %eax2117; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill2118; X86-NO-BMI2-NO-SHLD-NEXT: movl 4(%ebp), %eax2119; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill2120; X86-NO-BMI2-NO-SHLD-NEXT: movl 8(%ebp), %esi2121; X86-NO-BMI2-NO-SHLD-NEXT: movl 12(%ebp), %edi2122; X86-NO-BMI2-NO-SHLD-NEXT: movl 16(%ebp), %ebx2123; X86-NO-BMI2-NO-SHLD-NEXT: movb (%ecx), %ch2124; X86-NO-BMI2-NO-SHLD-NEXT: movl 20(%ebp), %edx2125; X86-NO-BMI2-NO-SHLD-NEXT: movl 24(%ebp), %eax2126; X86-NO-BMI2-NO-SHLD-NEXT: movl 28(%ebp), %ebp2127; X86-NO-BMI2-NO-SHLD-NEXT: movl %ebp, {{[0-9]+}}(%esp)2128; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)2129; X86-NO-BMI2-NO-SHLD-NEXT: xorps %xmm0, %xmm02130; X86-NO-BMI2-NO-SHLD-NEXT: movaps %xmm0, {{[0-9]+}}(%esp)2131; X86-NO-BMI2-NO-SHLD-NEXT: movaps %xmm0, {{[0-9]+}}(%esp)2132; X86-NO-BMI2-NO-SHLD-NEXT: movl %edx, {{[0-9]+}}(%esp)2133; X86-NO-BMI2-NO-SHLD-NEXT: movl %ebx, {{[0-9]+}}(%esp)2134; X86-NO-BMI2-NO-SHLD-NEXT: movl %edi, {{[0-9]+}}(%esp)2135; X86-NO-BMI2-NO-SHLD-NEXT: movl %esi, {{[0-9]+}}(%esp)2136; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload2137; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)2138; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload2139; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)2140; X86-NO-BMI2-NO-SHLD-NEXT: movb %ch, %al2141; X86-NO-BMI2-NO-SHLD-NEXT: shrb $3, %al2142; X86-NO-BMI2-NO-SHLD-NEXT: andb $28, %al2143; X86-NO-BMI2-NO-SHLD-NEXT: negb %al2144; X86-NO-BMI2-NO-SHLD-NEXT: movsbl %al, %ebx2145; X86-NO-BMI2-NO-SHLD-NEXT: movl 64(%esp,%ebx), %ebp2146; X86-NO-BMI2-NO-SHLD-NEXT: movl %ebp, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill2147; X86-NO-BMI2-NO-SHLD-NEXT: movl 68(%esp,%ebx), %edi2148; X86-NO-BMI2-NO-SHLD-NEXT: movl %edi, %eax2149; X86-NO-BMI2-NO-SHLD-NEXT: movb %ch, %cl2150; X86-NO-BMI2-NO-SHLD-NEXT: shll %cl, %eax2151; X86-NO-BMI2-NO-SHLD-NEXT: movb %ch, %dl2152; X86-NO-BMI2-NO-SHLD-NEXT: andb $31, %dl2153; X86-NO-BMI2-NO-SHLD-NEXT: xorb $31, %dl2154; X86-NO-BMI2-NO-SHLD-NEXT: shrl %ebp2155; X86-NO-BMI2-NO-SHLD-NEXT: movb %dl, %cl2156; X86-NO-BMI2-NO-SHLD-NEXT: shrl %cl, %ebp2157; X86-NO-BMI2-NO-SHLD-NEXT: orl %eax, %ebp2158; X86-NO-BMI2-NO-SHLD-NEXT: movl %ebp, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill2159; X86-NO-BMI2-NO-SHLD-NEXT: movl 76(%esp,%ebx), %esi2160; X86-NO-BMI2-NO-SHLD-NEXT: movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill2161; X86-NO-BMI2-NO-SHLD-NEXT: movb %ch, %cl2162; X86-NO-BMI2-NO-SHLD-NEXT: shll %cl, %esi2163; X86-NO-BMI2-NO-SHLD-NEXT: movl 72(%esp,%ebx), %eax2164; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, %ebp2165; X86-NO-BMI2-NO-SHLD-NEXT: shrl %ebp2166; X86-NO-BMI2-NO-SHLD-NEXT: movb %dl, %cl2167; X86-NO-BMI2-NO-SHLD-NEXT: shrl %cl, %ebp2168; X86-NO-BMI2-NO-SHLD-NEXT: orl %esi, %ebp2169; X86-NO-BMI2-NO-SHLD-NEXT: movl %ebp, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill2170; X86-NO-BMI2-NO-SHLD-NEXT: movb %ch, %cl2171; X86-NO-BMI2-NO-SHLD-NEXT: shll %cl, %eax2172; X86-NO-BMI2-NO-SHLD-NEXT: shrl %edi2173; X86-NO-BMI2-NO-SHLD-NEXT: movb %dl, %cl2174; X86-NO-BMI2-NO-SHLD-NEXT: shrl %cl, %edi2175; X86-NO-BMI2-NO-SHLD-NEXT: orl %eax, %edi2176; X86-NO-BMI2-NO-SHLD-NEXT: movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill2177; X86-NO-BMI2-NO-SHLD-NEXT: movl 84(%esp,%ebx), %esi2178; X86-NO-BMI2-NO-SHLD-NEXT: movl %esi, %edi2179; X86-NO-BMI2-NO-SHLD-NEXT: movb %ch, %cl2180; X86-NO-BMI2-NO-SHLD-NEXT: shll %cl, %edi2181; X86-NO-BMI2-NO-SHLD-NEXT: movl 80(%esp,%ebx), %eax2182; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, %ebp2183; X86-NO-BMI2-NO-SHLD-NEXT: shrl %ebp2184; X86-NO-BMI2-NO-SHLD-NEXT: movb %dl, %cl2185; X86-NO-BMI2-NO-SHLD-NEXT: shrl %cl, %ebp2186; X86-NO-BMI2-NO-SHLD-NEXT: orl %edi, %ebp2187; X86-NO-BMI2-NO-SHLD-NEXT: movb %ch, %cl2188; X86-NO-BMI2-NO-SHLD-NEXT: shll %cl, %eax2189; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edi # 4-byte Reload2190; X86-NO-BMI2-NO-SHLD-NEXT: shrl %edi2191; X86-NO-BMI2-NO-SHLD-NEXT: movb %dl, %cl2192; X86-NO-BMI2-NO-SHLD-NEXT: shrl %cl, %edi2193; X86-NO-BMI2-NO-SHLD-NEXT: orl %eax, %edi2194; X86-NO-BMI2-NO-SHLD-NEXT: movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill2195; X86-NO-BMI2-NO-SHLD-NEXT: movl 92(%esp,%ebx), %edi2196; X86-NO-BMI2-NO-SHLD-NEXT: movb %ch, %cl2197; X86-NO-BMI2-NO-SHLD-NEXT: shll %cl, %edi2198; X86-NO-BMI2-NO-SHLD-NEXT: movl 88(%esp,%ebx), %eax2199; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, %ebx2200; X86-NO-BMI2-NO-SHLD-NEXT: shrl %ebx2201; X86-NO-BMI2-NO-SHLD-NEXT: movb %dl, %cl2202; X86-NO-BMI2-NO-SHLD-NEXT: shrl %cl, %ebx2203; X86-NO-BMI2-NO-SHLD-NEXT: orl %edi, %ebx2204; X86-NO-BMI2-NO-SHLD-NEXT: movb %ch, %cl2205; X86-NO-BMI2-NO-SHLD-NEXT: shll %cl, %eax2206; X86-NO-BMI2-NO-SHLD-NEXT: shrl %esi2207; X86-NO-BMI2-NO-SHLD-NEXT: movb %dl, %cl2208; X86-NO-BMI2-NO-SHLD-NEXT: shrl %cl, %esi2209; X86-NO-BMI2-NO-SHLD-NEXT: orl %eax, %esi2210; X86-NO-BMI2-NO-SHLD-NEXT: movb %ch, %cl2211; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload2212; X86-NO-BMI2-NO-SHLD-NEXT: shll %cl, %edx2213; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[0-9]+}}(%esp), %eax2214; X86-NO-BMI2-NO-SHLD-NEXT: movl %edx, (%eax)2215; X86-NO-BMI2-NO-SHLD-NEXT: movl %esi, 24(%eax)2216; X86-NO-BMI2-NO-SHLD-NEXT: movl %ebx, 28(%eax)2217; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload2218; X86-NO-BMI2-NO-SHLD-NEXT: movl %ecx, 16(%eax)2219; X86-NO-BMI2-NO-SHLD-NEXT: movl %ebp, 20(%eax)2220; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload2221; X86-NO-BMI2-NO-SHLD-NEXT: movl %ecx, 8(%eax)2222; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload2223; X86-NO-BMI2-NO-SHLD-NEXT: movl %ecx, 12(%eax)2224; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload2225; X86-NO-BMI2-NO-SHLD-NEXT: movl %ecx, 4(%eax)2226; X86-NO-BMI2-NO-SHLD-NEXT: addl $108, %esp2227; X86-NO-BMI2-NO-SHLD-NEXT: popl %esi2228; X86-NO-BMI2-NO-SHLD-NEXT: popl %edi2229; X86-NO-BMI2-NO-SHLD-NEXT: popl %ebx2230; X86-NO-BMI2-NO-SHLD-NEXT: popl %ebp2231; X86-NO-BMI2-NO-SHLD-NEXT: retl2232;2233; X86-NO-BMI2-HAVE-SHLD-LABEL: shl_32bytes:2234; X86-NO-BMI2-HAVE-SHLD: # %bb.0:2235; X86-NO-BMI2-HAVE-SHLD-NEXT: pushl %ebp2236; X86-NO-BMI2-HAVE-SHLD-NEXT: pushl %ebx2237; X86-NO-BMI2-HAVE-SHLD-NEXT: pushl %edi2238; X86-NO-BMI2-HAVE-SHLD-NEXT: pushl %esi2239; X86-NO-BMI2-HAVE-SHLD-NEXT: subl $92, %esp2240; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[0-9]+}}(%esp), %ecx2241; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[0-9]+}}(%esp), %ebp2242; X86-NO-BMI2-HAVE-SHLD-NEXT: movl (%ebp), %eax2243; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill2244; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 4(%ebp), %eax2245; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %eax, (%esp) # 4-byte Spill2246; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 8(%ebp), %esi2247; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 12(%ebp), %edi2248; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 16(%ebp), %ebx2249; X86-NO-BMI2-HAVE-SHLD-NEXT: movzbl (%ecx), %ecx2250; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 20(%ebp), %edx2251; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 24(%ebp), %eax2252; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 28(%ebp), %ebp2253; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ebp, {{[0-9]+}}(%esp)2254; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)2255; X86-NO-BMI2-HAVE-SHLD-NEXT: xorps %xmm0, %xmm02256; X86-NO-BMI2-HAVE-SHLD-NEXT: movaps %xmm0, {{[0-9]+}}(%esp)2257; X86-NO-BMI2-HAVE-SHLD-NEXT: movaps %xmm0, {{[0-9]+}}(%esp)2258; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %edx, {{[0-9]+}}(%esp)2259; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ebx, {{[0-9]+}}(%esp)2260; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %edi, {{[0-9]+}}(%esp)2261; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %esi, {{[0-9]+}}(%esp)2262; X86-NO-BMI2-HAVE-SHLD-NEXT: movl (%esp), %eax # 4-byte Reload2263; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)2264; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload2265; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)2266; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ecx, %eax2267; X86-NO-BMI2-HAVE-SHLD-NEXT: shrb $3, %al2268; X86-NO-BMI2-HAVE-SHLD-NEXT: andb $28, %al2269; X86-NO-BMI2-HAVE-SHLD-NEXT: negb %al2270; X86-NO-BMI2-HAVE-SHLD-NEXT: movsbl %al, %eax2271; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 56(%esp,%eax), %edx2272; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 60(%esp,%eax), %ebx2273; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ebx, %esi2274; X86-NO-BMI2-HAVE-SHLD-NEXT: shldl %cl, %edx, %esi2275; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill2276; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 52(%esp,%eax), %esi2277; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %esi, (%esp) # 4-byte Spill2278; X86-NO-BMI2-HAVE-SHLD-NEXT: shldl %cl, %esi, %edx2279; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill2280; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 64(%esp,%eax), %edi2281; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 68(%esp,%eax), %ebp2282; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ebp, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill2283; X86-NO-BMI2-HAVE-SHLD-NEXT: shldl %cl, %edi, %ebp2284; X86-NO-BMI2-HAVE-SHLD-NEXT: shldl %cl, %ebx, %edi2285; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 48(%esp,%eax), %ebx2286; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 72(%esp,%eax), %edx2287; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 76(%esp,%eax), %esi2288; X86-NO-BMI2-HAVE-SHLD-NEXT: shldl %cl, %edx, %esi2289; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload2290; X86-NO-BMI2-HAVE-SHLD-NEXT: shldl %cl, %eax, %edx2291; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[0-9]+}}(%esp), %eax2292; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %edx, 24(%eax)2293; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %esi, 28(%eax)2294; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %edi, 16(%eax)2295; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ebp, 20(%eax)2296; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload2297; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %edx, 8(%eax)2298; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload2299; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %edx, 12(%eax)2300; X86-NO-BMI2-HAVE-SHLD-NEXT: movl (%esp), %edx # 4-byte Reload2301; X86-NO-BMI2-HAVE-SHLD-NEXT: shldl %cl, %ebx, %edx2302; X86-NO-BMI2-HAVE-SHLD-NEXT: shll %cl, %ebx2303; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ebx, (%eax)2304; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %edx, 4(%eax)2305; X86-NO-BMI2-HAVE-SHLD-NEXT: addl $92, %esp2306; X86-NO-BMI2-HAVE-SHLD-NEXT: popl %esi2307; X86-NO-BMI2-HAVE-SHLD-NEXT: popl %edi2308; X86-NO-BMI2-HAVE-SHLD-NEXT: popl %ebx2309; X86-NO-BMI2-HAVE-SHLD-NEXT: popl %ebp2310; X86-NO-BMI2-HAVE-SHLD-NEXT: retl2311;2312; X86-HAVE-BMI2-NO-SHLD-LABEL: shl_32bytes:2313; X86-HAVE-BMI2-NO-SHLD: # %bb.0:2314; X86-HAVE-BMI2-NO-SHLD-NEXT: pushl %ebp2315; X86-HAVE-BMI2-NO-SHLD-NEXT: pushl %ebx2316; X86-HAVE-BMI2-NO-SHLD-NEXT: pushl %edi2317; X86-HAVE-BMI2-NO-SHLD-NEXT: pushl %esi2318; X86-HAVE-BMI2-NO-SHLD-NEXT: subl $108, %esp2319; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[0-9]+}}(%esp), %eax2320; X86-HAVE-BMI2-NO-SHLD-NEXT: movl (%eax), %ecx2321; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill2322; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 4(%eax), %ecx2323; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill2324; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 8(%eax), %ecx2325; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill2326; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 12(%eax), %edi2327; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 16(%eax), %ebx2328; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 20(%eax), %ebp2329; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 24(%eax), %esi2330; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 28(%eax), %edx2331; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[0-9]+}}(%esp), %eax2332; X86-HAVE-BMI2-NO-SHLD-NEXT: movzbl (%eax), %ecx2333; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %edx, {{[0-9]+}}(%esp)2334; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %esi, {{[0-9]+}}(%esp)2335; X86-HAVE-BMI2-NO-SHLD-NEXT: xorps %xmm0, %xmm02336; X86-HAVE-BMI2-NO-SHLD-NEXT: movaps %xmm0, {{[0-9]+}}(%esp)2337; X86-HAVE-BMI2-NO-SHLD-NEXT: movaps %xmm0, {{[0-9]+}}(%esp)2338; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ebp, {{[0-9]+}}(%esp)2339; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ebx, {{[0-9]+}}(%esp)2340; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %edi, {{[0-9]+}}(%esp)2341; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload2342; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)2343; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload2344; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)2345; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload2346; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)2347; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, %eax2348; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, %ebp2349; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, %edx2350; X86-HAVE-BMI2-NO-SHLD-NEXT: shrb $3, %dl2351; X86-HAVE-BMI2-NO-SHLD-NEXT: andb $28, %dl2352; X86-HAVE-BMI2-NO-SHLD-NEXT: negb %dl2353; X86-HAVE-BMI2-NO-SHLD-NEXT: movsbl %dl, %esi2354; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 64(%esp,%esi), %ebx2355; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ebx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill2356; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 68(%esp,%esi), %edx2357; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill2358; X86-HAVE-BMI2-NO-SHLD-NEXT: shlxl %eax, %edx, %edi2359; X86-HAVE-BMI2-NO-SHLD-NEXT: andb $31, %cl2360; X86-HAVE-BMI2-NO-SHLD-NEXT: xorb $31, %cl2361; X86-HAVE-BMI2-NO-SHLD-NEXT: shrl %ebx2362; X86-HAVE-BMI2-NO-SHLD-NEXT: shrxl %ecx, %ebx, %ebx2363; X86-HAVE-BMI2-NO-SHLD-NEXT: orl %edi, %ebx2364; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ebx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill2365; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 72(%esp,%esi), %ebx2366; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ebx, %edi2367; X86-HAVE-BMI2-NO-SHLD-NEXT: shrl %edi2368; X86-HAVE-BMI2-NO-SHLD-NEXT: shrxl %ecx, %edi, %eax2369; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 76(%esp,%esi), %edi2370; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ebp, %esi2371; X86-HAVE-BMI2-NO-SHLD-NEXT: shlxl %ebp, %edi, %ebp2372; X86-HAVE-BMI2-NO-SHLD-NEXT: orl %ebp, %eax2373; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill2374; X86-HAVE-BMI2-NO-SHLD-NEXT: shlxl %esi, %ebx, %ebx2375; X86-HAVE-BMI2-NO-SHLD-NEXT: shrl %edx2376; X86-HAVE-BMI2-NO-SHLD-NEXT: shrxl %ecx, %edx, %edx2377; X86-HAVE-BMI2-NO-SHLD-NEXT: orl %ebx, %edx2378; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill2379; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ebp # 4-byte Reload2380; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 80(%esp,%ebp), %edx2381; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %edx, %ebx2382; X86-HAVE-BMI2-NO-SHLD-NEXT: shrl %ebx2383; X86-HAVE-BMI2-NO-SHLD-NEXT: shrxl %ecx, %ebx, %eax2384; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 84(%esp,%ebp), %ebx2385; X86-HAVE-BMI2-NO-SHLD-NEXT: shlxl %esi, %ebx, %ebp2386; X86-HAVE-BMI2-NO-SHLD-NEXT: orl %ebp, %eax2387; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill2388; X86-HAVE-BMI2-NO-SHLD-NEXT: shlxl %esi, %edx, %edx2389; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %esi, %eax2390; X86-HAVE-BMI2-NO-SHLD-NEXT: shrl %edi2391; X86-HAVE-BMI2-NO-SHLD-NEXT: shrxl %ecx, %edi, %edi2392; X86-HAVE-BMI2-NO-SHLD-NEXT: orl %edx, %edi2393; X86-HAVE-BMI2-NO-SHLD-NEXT: shlxl %esi, {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Folded Reload2394; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill2395; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload2396; X86-HAVE-BMI2-NO-SHLD-NEXT: shlxl %esi, 92(%esp,%edx), %ebp2397; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 88(%esp,%edx), %esi2398; X86-HAVE-BMI2-NO-SHLD-NEXT: shlxl %eax, %esi, %edx2399; X86-HAVE-BMI2-NO-SHLD-NEXT: shrl %esi2400; X86-HAVE-BMI2-NO-SHLD-NEXT: shrxl %ecx, %esi, %esi2401; X86-HAVE-BMI2-NO-SHLD-NEXT: orl %ebp, %esi2402; X86-HAVE-BMI2-NO-SHLD-NEXT: shrl %ebx2403; X86-HAVE-BMI2-NO-SHLD-NEXT: shrxl %ecx, %ebx, %eax2404; X86-HAVE-BMI2-NO-SHLD-NEXT: orl %edx, %eax2405; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[0-9]+}}(%esp), %ecx2406; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload2407; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %edx, (%ecx)2408; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, 24(%ecx)2409; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %esi, 28(%ecx)2410; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %edi, 16(%ecx)2411; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload2412; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, 20(%ecx)2413; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload2414; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, 8(%ecx)2415; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload2416; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, 12(%ecx)2417; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload2418; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, 4(%ecx)2419; X86-HAVE-BMI2-NO-SHLD-NEXT: addl $108, %esp2420; X86-HAVE-BMI2-NO-SHLD-NEXT: popl %esi2421; X86-HAVE-BMI2-NO-SHLD-NEXT: popl %edi2422; X86-HAVE-BMI2-NO-SHLD-NEXT: popl %ebx2423; X86-HAVE-BMI2-NO-SHLD-NEXT: popl %ebp2424; X86-HAVE-BMI2-NO-SHLD-NEXT: retl2425;2426; X86-HAVE-BMI2-HAVE-SHLD-LABEL: shl_32bytes:2427; X86-HAVE-BMI2-HAVE-SHLD: # %bb.0:2428; X86-HAVE-BMI2-HAVE-SHLD-NEXT: pushl %ebp2429; X86-HAVE-BMI2-HAVE-SHLD-NEXT: pushl %ebx2430; X86-HAVE-BMI2-HAVE-SHLD-NEXT: pushl %edi2431; X86-HAVE-BMI2-HAVE-SHLD-NEXT: pushl %esi2432; X86-HAVE-BMI2-HAVE-SHLD-NEXT: subl $92, %esp2433; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[0-9]+}}(%esp), %ecx2434; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl (%ecx), %eax2435; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill2436; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 4(%ecx), %eax2437; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill2438; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 8(%ecx), %esi2439; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 12(%ecx), %edi2440; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 16(%ecx), %ebx2441; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 20(%ecx), %ebp2442; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 24(%ecx), %edx2443; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 28(%ecx), %eax2444; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[0-9]+}}(%esp), %ecx2445; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movzbl (%ecx), %ecx2446; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)2447; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edx, {{[0-9]+}}(%esp)2448; X86-HAVE-BMI2-HAVE-SHLD-NEXT: xorps %xmm0, %xmm02449; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movaps %xmm0, {{[0-9]+}}(%esp)2450; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movaps %xmm0, {{[0-9]+}}(%esp)2451; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ebp, {{[0-9]+}}(%esp)2452; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ebx, {{[0-9]+}}(%esp)2453; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edi, {{[0-9]+}}(%esp)2454; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %esi, {{[0-9]+}}(%esp)2455; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload2456; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)2457; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload2458; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)2459; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ecx, %eax2460; X86-HAVE-BMI2-HAVE-SHLD-NEXT: shrb $3, %al2461; X86-HAVE-BMI2-HAVE-SHLD-NEXT: andb $28, %al2462; X86-HAVE-BMI2-HAVE-SHLD-NEXT: negb %al2463; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movsbl %al, %eax2464; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 56(%esp,%eax), %edx2465; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 60(%esp,%eax), %esi2466; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %esi, (%esp) # 4-byte Spill2467; X86-HAVE-BMI2-HAVE-SHLD-NEXT: shldl %cl, %edx, %esi2468; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill2469; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 52(%esp,%eax), %ebx2470; X86-HAVE-BMI2-HAVE-SHLD-NEXT: shldl %cl, %ebx, %edx2471; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill2472; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 64(%esp,%eax), %edi2473; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 68(%esp,%eax), %ebp2474; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ebp, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill2475; X86-HAVE-BMI2-HAVE-SHLD-NEXT: shldl %cl, %edi, %ebp2476; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl (%esp), %edx # 4-byte Reload2477; X86-HAVE-BMI2-HAVE-SHLD-NEXT: shldl %cl, %edx, %edi2478; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 48(%esp,%eax), %edx2479; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edx, (%esp) # 4-byte Spill2480; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 72(%esp,%eax), %edx2481; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 76(%esp,%eax), %esi2482; X86-HAVE-BMI2-HAVE-SHLD-NEXT: shldl %cl, %edx, %esi2483; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload2484; X86-HAVE-BMI2-HAVE-SHLD-NEXT: shldl %cl, %eax, %edx2485; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[0-9]+}}(%esp), %eax2486; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edx, 24(%eax)2487; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %esi, 28(%eax)2488; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edi, 16(%eax)2489; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ebp, 20(%eax)2490; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload2491; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edx, 8(%eax)2492; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload2493; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edx, 12(%eax)2494; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl (%esp), %esi # 4-byte Reload2495; X86-HAVE-BMI2-HAVE-SHLD-NEXT: shlxl %ecx, %esi, %edx2496; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edx, (%eax)2497; X86-HAVE-BMI2-HAVE-SHLD-NEXT: # kill: def $cl killed $cl killed $ecx2498; X86-HAVE-BMI2-HAVE-SHLD-NEXT: shldl %cl, %esi, %ebx2499; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ebx, 4(%eax)2500; X86-HAVE-BMI2-HAVE-SHLD-NEXT: addl $92, %esp2501; X86-HAVE-BMI2-HAVE-SHLD-NEXT: popl %esi2502; X86-HAVE-BMI2-HAVE-SHLD-NEXT: popl %edi2503; X86-HAVE-BMI2-HAVE-SHLD-NEXT: popl %ebx2504; X86-HAVE-BMI2-HAVE-SHLD-NEXT: popl %ebp2505; X86-HAVE-BMI2-HAVE-SHLD-NEXT: retl2506 %src = load i256, ptr %src.ptr, align 12507 %bitOff = load i256, ptr %bitOff.ptr, align 12508 %res = shl i256 %src, %bitOff2509 store i256 %res, ptr %dst, align 12510 ret void2511}2512define void @ashr_32bytes(ptr %src.ptr, ptr %bitOff.ptr, ptr %dst) nounwind {2513; X64-NO-BMI2-NO-SHLD-LABEL: ashr_32bytes:2514; X64-NO-BMI2-NO-SHLD: # %bb.0:2515; X64-NO-BMI2-NO-SHLD-NEXT: pushq %rbx2516; X64-NO-BMI2-NO-SHLD-NEXT: movq (%rdi), %rcx2517; X64-NO-BMI2-NO-SHLD-NEXT: movq 8(%rdi), %r82518; X64-NO-BMI2-NO-SHLD-NEXT: movq 16(%rdi), %r92519; X64-NO-BMI2-NO-SHLD-NEXT: movq 24(%rdi), %rdi2520; X64-NO-BMI2-NO-SHLD-NEXT: movzbl (%rsi), %eax2521; X64-NO-BMI2-NO-SHLD-NEXT: movq %rdi, -{{[0-9]+}}(%rsp)2522; X64-NO-BMI2-NO-SHLD-NEXT: movq %r9, -{{[0-9]+}}(%rsp)2523; X64-NO-BMI2-NO-SHLD-NEXT: movq %r8, -{{[0-9]+}}(%rsp)2524; X64-NO-BMI2-NO-SHLD-NEXT: movq %rcx, -{{[0-9]+}}(%rsp)2525; X64-NO-BMI2-NO-SHLD-NEXT: sarq $63, %rdi2526; X64-NO-BMI2-NO-SHLD-NEXT: movq %rdi, -{{[0-9]+}}(%rsp)2527; X64-NO-BMI2-NO-SHLD-NEXT: movq %rdi, -{{[0-9]+}}(%rsp)2528; X64-NO-BMI2-NO-SHLD-NEXT: movq %rdi, -{{[0-9]+}}(%rsp)2529; X64-NO-BMI2-NO-SHLD-NEXT: movq %rdi, -{{[0-9]+}}(%rsp)2530; X64-NO-BMI2-NO-SHLD-NEXT: movl %eax, %ecx2531; X64-NO-BMI2-NO-SHLD-NEXT: shrb $6, %cl2532; X64-NO-BMI2-NO-SHLD-NEXT: movzbl %cl, %r8d2533; X64-NO-BMI2-NO-SHLD-NEXT: movq -64(%rsp,%r8,8), %r102534; X64-NO-BMI2-NO-SHLD-NEXT: movq -56(%rsp,%r8,8), %rdi2535; X64-NO-BMI2-NO-SHLD-NEXT: movq %rdi, %r112536; X64-NO-BMI2-NO-SHLD-NEXT: movl %eax, %ecx2537; X64-NO-BMI2-NO-SHLD-NEXT: shrq %cl, %r112538; X64-NO-BMI2-NO-SHLD-NEXT: movl %eax, %esi2539; X64-NO-BMI2-NO-SHLD-NEXT: andb $63, %sil2540; X64-NO-BMI2-NO-SHLD-NEXT: xorb $63, %sil2541; X64-NO-BMI2-NO-SHLD-NEXT: movq -48(%rsp,%r8,8), %rbx2542; X64-NO-BMI2-NO-SHLD-NEXT: leaq (%rbx,%rbx), %r92543; X64-NO-BMI2-NO-SHLD-NEXT: movl %esi, %ecx2544; X64-NO-BMI2-NO-SHLD-NEXT: shlq %cl, %r92545; X64-NO-BMI2-NO-SHLD-NEXT: orq %r11, %r92546; X64-NO-BMI2-NO-SHLD-NEXT: movl %eax, %ecx2547; X64-NO-BMI2-NO-SHLD-NEXT: shrq %cl, %r102548; X64-NO-BMI2-NO-SHLD-NEXT: addq %rdi, %rdi2549; X64-NO-BMI2-NO-SHLD-NEXT: movl %esi, %ecx2550; X64-NO-BMI2-NO-SHLD-NEXT: shlq %cl, %rdi2551; X64-NO-BMI2-NO-SHLD-NEXT: orq %r10, %rdi2552; X64-NO-BMI2-NO-SHLD-NEXT: movl %eax, %ecx2553; X64-NO-BMI2-NO-SHLD-NEXT: shrq %cl, %rbx2554; X64-NO-BMI2-NO-SHLD-NEXT: movq -40(%rsp,%r8,8), %r82555; X64-NO-BMI2-NO-SHLD-NEXT: leaq (%r8,%r8), %r102556; X64-NO-BMI2-NO-SHLD-NEXT: movl %esi, %ecx2557; X64-NO-BMI2-NO-SHLD-NEXT: shlq %cl, %r102558; X64-NO-BMI2-NO-SHLD-NEXT: orq %rbx, %r102559; X64-NO-BMI2-NO-SHLD-NEXT: movl %eax, %ecx2560; X64-NO-BMI2-NO-SHLD-NEXT: sarq %cl, %r82561; X64-NO-BMI2-NO-SHLD-NEXT: movq %r8, 24(%rdx)2562; X64-NO-BMI2-NO-SHLD-NEXT: movq %r10, 16(%rdx)2563; X64-NO-BMI2-NO-SHLD-NEXT: movq %rdi, (%rdx)2564; X64-NO-BMI2-NO-SHLD-NEXT: movq %r9, 8(%rdx)2565; X64-NO-BMI2-NO-SHLD-NEXT: popq %rbx2566; X64-NO-BMI2-NO-SHLD-NEXT: retq2567;2568; X64-NO-BMI2-HAVE-SHLD-LABEL: ashr_32bytes:2569; X64-NO-BMI2-HAVE-SHLD: # %bb.0:2570; X64-NO-BMI2-HAVE-SHLD-NEXT: movq (%rdi), %rax2571; X64-NO-BMI2-HAVE-SHLD-NEXT: movq 8(%rdi), %r82572; X64-NO-BMI2-HAVE-SHLD-NEXT: movq 16(%rdi), %r92573; X64-NO-BMI2-HAVE-SHLD-NEXT: movq 24(%rdi), %rdi2574; X64-NO-BMI2-HAVE-SHLD-NEXT: movzbl (%rsi), %ecx2575; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %rdi, -{{[0-9]+}}(%rsp)2576; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %r9, -{{[0-9]+}}(%rsp)2577; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %r8, -{{[0-9]+}}(%rsp)2578; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %rax, -{{[0-9]+}}(%rsp)2579; X64-NO-BMI2-HAVE-SHLD-NEXT: sarq $63, %rdi2580; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %rdi, -{{[0-9]+}}(%rsp)2581; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %rdi, -{{[0-9]+}}(%rsp)2582; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %rdi, -{{[0-9]+}}(%rsp)2583; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %rdi, -{{[0-9]+}}(%rsp)2584; X64-NO-BMI2-HAVE-SHLD-NEXT: movl %ecx, %eax2585; X64-NO-BMI2-HAVE-SHLD-NEXT: shrb $6, %al2586; X64-NO-BMI2-HAVE-SHLD-NEXT: movzbl %al, %eax2587; X64-NO-BMI2-HAVE-SHLD-NEXT: movq -56(%rsp,%rax,8), %rsi2588; X64-NO-BMI2-HAVE-SHLD-NEXT: movq -72(%rsp,%rax,8), %rdi2589; X64-NO-BMI2-HAVE-SHLD-NEXT: movq -64(%rsp,%rax,8), %r82590; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %r8, %r92591; X64-NO-BMI2-HAVE-SHLD-NEXT: shrdq %cl, %rsi, %r92592; X64-NO-BMI2-HAVE-SHLD-NEXT: movq -48(%rsp,%rax,8), %rax2593; X64-NO-BMI2-HAVE-SHLD-NEXT: shrdq %cl, %rax, %rsi2594; X64-NO-BMI2-HAVE-SHLD-NEXT: shrdq %cl, %r8, %rdi2595; X64-NO-BMI2-HAVE-SHLD-NEXT: sarq %cl, %rax2596; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %rsi, 16(%rdx)2597; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %rax, 24(%rdx)2598; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %rdi, (%rdx)2599; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %r9, 8(%rdx)2600; X64-NO-BMI2-HAVE-SHLD-NEXT: retq2601;2602; X64-HAVE-BMI2-NO-SHLD-LABEL: ashr_32bytes:2603; X64-HAVE-BMI2-NO-SHLD: # %bb.0:2604; X64-HAVE-BMI2-NO-SHLD-NEXT: movq (%rdi), %rcx2605; X64-HAVE-BMI2-NO-SHLD-NEXT: movq 8(%rdi), %r82606; X64-HAVE-BMI2-NO-SHLD-NEXT: movq 16(%rdi), %r92607; X64-HAVE-BMI2-NO-SHLD-NEXT: movq 24(%rdi), %rdi2608; X64-HAVE-BMI2-NO-SHLD-NEXT: movzbl (%rsi), %eax2609; X64-HAVE-BMI2-NO-SHLD-NEXT: movq %rdi, -{{[0-9]+}}(%rsp)2610; X64-HAVE-BMI2-NO-SHLD-NEXT: movq %r9, -{{[0-9]+}}(%rsp)2611; X64-HAVE-BMI2-NO-SHLD-NEXT: movq %r8, -{{[0-9]+}}(%rsp)2612; X64-HAVE-BMI2-NO-SHLD-NEXT: movq %rcx, -{{[0-9]+}}(%rsp)2613; X64-HAVE-BMI2-NO-SHLD-NEXT: sarq $63, %rdi2614; X64-HAVE-BMI2-NO-SHLD-NEXT: movq %rdi, -{{[0-9]+}}(%rsp)2615; X64-HAVE-BMI2-NO-SHLD-NEXT: movq %rdi, -{{[0-9]+}}(%rsp)2616; X64-HAVE-BMI2-NO-SHLD-NEXT: movq %rdi, -{{[0-9]+}}(%rsp)2617; X64-HAVE-BMI2-NO-SHLD-NEXT: movq %rdi, -{{[0-9]+}}(%rsp)2618; X64-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, %ecx2619; X64-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, %esi2620; X64-HAVE-BMI2-NO-SHLD-NEXT: shrb $6, %sil2621; X64-HAVE-BMI2-NO-SHLD-NEXT: movzbl %sil, %esi2622; X64-HAVE-BMI2-NO-SHLD-NEXT: movq -64(%rsp,%rsi,8), %rdi2623; X64-HAVE-BMI2-NO-SHLD-NEXT: movq -56(%rsp,%rsi,8), %r82624; X64-HAVE-BMI2-NO-SHLD-NEXT: shrxq %rcx, %rdi, %r92625; X64-HAVE-BMI2-NO-SHLD-NEXT: andb $63, %al2626; X64-HAVE-BMI2-NO-SHLD-NEXT: xorb $63, %al2627; X64-HAVE-BMI2-NO-SHLD-NEXT: leaq (%r8,%r8), %r102628; X64-HAVE-BMI2-NO-SHLD-NEXT: shlxq %rax, %r10, %r102629; X64-HAVE-BMI2-NO-SHLD-NEXT: orq %r9, %r102630; X64-HAVE-BMI2-NO-SHLD-NEXT: shrxq %rcx, -72(%rsp,%rsi,8), %r92631; X64-HAVE-BMI2-NO-SHLD-NEXT: addq %rdi, %rdi2632; X64-HAVE-BMI2-NO-SHLD-NEXT: shlxq %rax, %rdi, %rdi2633; X64-HAVE-BMI2-NO-SHLD-NEXT: orq %r9, %rdi2634; X64-HAVE-BMI2-NO-SHLD-NEXT: shrxq %rcx, %r8, %r82635; X64-HAVE-BMI2-NO-SHLD-NEXT: movq -48(%rsp,%rsi,8), %rsi2636; X64-HAVE-BMI2-NO-SHLD-NEXT: leaq (%rsi,%rsi), %r92637; X64-HAVE-BMI2-NO-SHLD-NEXT: shlxq %rax, %r9, %rax2638; X64-HAVE-BMI2-NO-SHLD-NEXT: orq %r8, %rax2639; X64-HAVE-BMI2-NO-SHLD-NEXT: sarxq %rcx, %rsi, %rcx2640; X64-HAVE-BMI2-NO-SHLD-NEXT: movq %rcx, 24(%rdx)2641; X64-HAVE-BMI2-NO-SHLD-NEXT: movq %rax, 16(%rdx)2642; X64-HAVE-BMI2-NO-SHLD-NEXT: movq %rdi, (%rdx)2643; X64-HAVE-BMI2-NO-SHLD-NEXT: movq %r10, 8(%rdx)2644; X64-HAVE-BMI2-NO-SHLD-NEXT: retq2645;2646; X64-HAVE-BMI2-HAVE-SHLD-LABEL: ashr_32bytes:2647; X64-HAVE-BMI2-HAVE-SHLD: # %bb.0:2648; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq (%rdi), %rax2649; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq 8(%rdi), %r82650; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq 16(%rdi), %r92651; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq 24(%rdi), %rdi2652; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movzbl (%rsi), %ecx2653; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq %rdi, -{{[0-9]+}}(%rsp)2654; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq %r9, -{{[0-9]+}}(%rsp)2655; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq %r8, -{{[0-9]+}}(%rsp)2656; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq %rax, -{{[0-9]+}}(%rsp)2657; X64-HAVE-BMI2-HAVE-SHLD-NEXT: sarq $63, %rdi2658; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq %rdi, -{{[0-9]+}}(%rsp)2659; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq %rdi, -{{[0-9]+}}(%rsp)2660; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq %rdi, -{{[0-9]+}}(%rsp)2661; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq %rdi, -{{[0-9]+}}(%rsp)2662; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ecx, %eax2663; X64-HAVE-BMI2-HAVE-SHLD-NEXT: shrb $6, %al2664; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movzbl %al, %eax2665; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq -56(%rsp,%rax,8), %rsi2666; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq -72(%rsp,%rax,8), %rdi2667; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq -64(%rsp,%rax,8), %r82668; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq %r8, %r92669; X64-HAVE-BMI2-HAVE-SHLD-NEXT: shrdq %cl, %rsi, %r92670; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq -48(%rsp,%rax,8), %rax2671; X64-HAVE-BMI2-HAVE-SHLD-NEXT: shrdq %cl, %rax, %rsi2672; X64-HAVE-BMI2-HAVE-SHLD-NEXT: shrdq %cl, %r8, %rdi2673; X64-HAVE-BMI2-HAVE-SHLD-NEXT: sarxq %rcx, %rax, %rax2674; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq %rsi, 16(%rdx)2675; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq %rax, 24(%rdx)2676; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq %rdi, (%rdx)2677; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq %r9, 8(%rdx)2678; X64-HAVE-BMI2-HAVE-SHLD-NEXT: retq2679;2680; X86-NO-BMI2-NO-SHLD-LABEL: ashr_32bytes:2681; X86-NO-BMI2-NO-SHLD: # %bb.0:2682; X86-NO-BMI2-NO-SHLD-NEXT: pushl %ebp2683; X86-NO-BMI2-NO-SHLD-NEXT: pushl %ebx2684; X86-NO-BMI2-NO-SHLD-NEXT: pushl %edi2685; X86-NO-BMI2-NO-SHLD-NEXT: pushl %esi2686; X86-NO-BMI2-NO-SHLD-NEXT: subl $108, %esp2687; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[0-9]+}}(%esp), %ecx2688; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[0-9]+}}(%esp), %edx2689; X86-NO-BMI2-NO-SHLD-NEXT: movl (%edx), %eax2690; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill2691; X86-NO-BMI2-NO-SHLD-NEXT: movl 4(%edx), %eax2692; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill2693; X86-NO-BMI2-NO-SHLD-NEXT: movl 8(%edx), %edi2694; X86-NO-BMI2-NO-SHLD-NEXT: movl 12(%edx), %ebx2695; X86-NO-BMI2-NO-SHLD-NEXT: movl 16(%edx), %ebp2696; X86-NO-BMI2-NO-SHLD-NEXT: movzbl (%ecx), %ecx2697; X86-NO-BMI2-NO-SHLD-NEXT: movl 20(%edx), %esi2698; X86-NO-BMI2-NO-SHLD-NEXT: movl 24(%edx), %eax2699; X86-NO-BMI2-NO-SHLD-NEXT: movl 28(%edx), %edx2700; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)2701; X86-NO-BMI2-NO-SHLD-NEXT: movl %esi, {{[0-9]+}}(%esp)2702; X86-NO-BMI2-NO-SHLD-NEXT: movl %edx, {{[0-9]+}}(%esp)2703; X86-NO-BMI2-NO-SHLD-NEXT: movl %ebp, {{[0-9]+}}(%esp)2704; X86-NO-BMI2-NO-SHLD-NEXT: movl %ebx, {{[0-9]+}}(%esp)2705; X86-NO-BMI2-NO-SHLD-NEXT: movl %edi, {{[0-9]+}}(%esp)2706; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload2707; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)2708; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload2709; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)2710; X86-NO-BMI2-NO-SHLD-NEXT: sarl $31, %edx2711; X86-NO-BMI2-NO-SHLD-NEXT: movl %edx, {{[0-9]+}}(%esp)2712; X86-NO-BMI2-NO-SHLD-NEXT: movl %edx, {{[0-9]+}}(%esp)2713; X86-NO-BMI2-NO-SHLD-NEXT: movl %edx, {{[0-9]+}}(%esp)2714; X86-NO-BMI2-NO-SHLD-NEXT: movl %edx, {{[0-9]+}}(%esp)2715; X86-NO-BMI2-NO-SHLD-NEXT: movl %edx, {{[0-9]+}}(%esp)2716; X86-NO-BMI2-NO-SHLD-NEXT: movl %edx, {{[0-9]+}}(%esp)2717; X86-NO-BMI2-NO-SHLD-NEXT: movl %edx, {{[0-9]+}}(%esp)2718; X86-NO-BMI2-NO-SHLD-NEXT: movl %edx, {{[0-9]+}}(%esp)2719; X86-NO-BMI2-NO-SHLD-NEXT: movb %cl, {{[-0-9]+}}(%e{{[sb]}}p) # 1-byte Spill2720; X86-NO-BMI2-NO-SHLD-NEXT: movl %ecx, %eax2721; X86-NO-BMI2-NO-SHLD-NEXT: shrb $5, %al2722; X86-NO-BMI2-NO-SHLD-NEXT: movzbl %al, %ebp2723; X86-NO-BMI2-NO-SHLD-NEXT: movl 32(%esp,%ebp,4), %esi2724; X86-NO-BMI2-NO-SHLD-NEXT: movl 36(%esp,%ebp,4), %edx2725; X86-NO-BMI2-NO-SHLD-NEXT: movl %edx, %eax2726; X86-NO-BMI2-NO-SHLD-NEXT: shrl %cl, %eax2727; X86-NO-BMI2-NO-SHLD-NEXT: movb %cl, %ch2728; X86-NO-BMI2-NO-SHLD-NEXT: andb $31, %ch2729; X86-NO-BMI2-NO-SHLD-NEXT: xorb $31, %ch2730; X86-NO-BMI2-NO-SHLD-NEXT: movl 40(%esp,%ebp,4), %edi2731; X86-NO-BMI2-NO-SHLD-NEXT: movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill2732; X86-NO-BMI2-NO-SHLD-NEXT: leal (%edi,%edi), %ebx2733; X86-NO-BMI2-NO-SHLD-NEXT: movb %ch, %cl2734; X86-NO-BMI2-NO-SHLD-NEXT: shll %cl, %ebx2735; X86-NO-BMI2-NO-SHLD-NEXT: orl %eax, %ebx2736; X86-NO-BMI2-NO-SHLD-NEXT: movl %ebx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill2737; X86-NO-BMI2-NO-SHLD-NEXT: movzbl {{[-0-9]+}}(%e{{[sb]}}p), %ebx # 1-byte Folded Reload2738; X86-NO-BMI2-NO-SHLD-NEXT: movb %bl, %cl2739; X86-NO-BMI2-NO-SHLD-NEXT: shrl %cl, %esi2740; X86-NO-BMI2-NO-SHLD-NEXT: addl %edx, %edx2741; X86-NO-BMI2-NO-SHLD-NEXT: movb %ch, %cl2742; X86-NO-BMI2-NO-SHLD-NEXT: shll %cl, %edx2743; X86-NO-BMI2-NO-SHLD-NEXT: orl %esi, %edx2744; X86-NO-BMI2-NO-SHLD-NEXT: movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill2745; X86-NO-BMI2-NO-SHLD-NEXT: movl %ebp, %esi2746; X86-NO-BMI2-NO-SHLD-NEXT: movl 44(%esp,%ebp,4), %ebp2747; X86-NO-BMI2-NO-SHLD-NEXT: movl %ebp, %eax2748; X86-NO-BMI2-NO-SHLD-NEXT: movl %ebx, %edx2749; X86-NO-BMI2-NO-SHLD-NEXT: movb %bl, %cl2750; X86-NO-BMI2-NO-SHLD-NEXT: shrl %cl, %eax2751; X86-NO-BMI2-NO-SHLD-NEXT: movl 48(%esp,%esi,4), %edi2752; X86-NO-BMI2-NO-SHLD-NEXT: movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill2753; X86-NO-BMI2-NO-SHLD-NEXT: movl %esi, %ebx2754; X86-NO-BMI2-NO-SHLD-NEXT: leal (%edi,%edi), %esi2755; X86-NO-BMI2-NO-SHLD-NEXT: movb %ch, %cl2756; X86-NO-BMI2-NO-SHLD-NEXT: shll %cl, %esi2757; X86-NO-BMI2-NO-SHLD-NEXT: orl %eax, %esi2758; X86-NO-BMI2-NO-SHLD-NEXT: movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill2759; X86-NO-BMI2-NO-SHLD-NEXT: movb %dl, %cl2760; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload2761; X86-NO-BMI2-NO-SHLD-NEXT: shrl %cl, %eax2762; X86-NO-BMI2-NO-SHLD-NEXT: addl %ebp, %ebp2763; X86-NO-BMI2-NO-SHLD-NEXT: movb %ch, %cl2764; X86-NO-BMI2-NO-SHLD-NEXT: shll %cl, %ebp2765; X86-NO-BMI2-NO-SHLD-NEXT: orl %eax, %ebp2766; X86-NO-BMI2-NO-SHLD-NEXT: movl %ebx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill2767; X86-NO-BMI2-NO-SHLD-NEXT: movl 52(%esp,%ebx,4), %edi2768; X86-NO-BMI2-NO-SHLD-NEXT: movl %edi, %eax2769; X86-NO-BMI2-NO-SHLD-NEXT: movb %dl, %cl2770; X86-NO-BMI2-NO-SHLD-NEXT: shrl %cl, %eax2771; X86-NO-BMI2-NO-SHLD-NEXT: movl 56(%esp,%ebx,4), %ebx2772; X86-NO-BMI2-NO-SHLD-NEXT: leal (%ebx,%ebx), %esi2773; X86-NO-BMI2-NO-SHLD-NEXT: movb %ch, %cl2774; X86-NO-BMI2-NO-SHLD-NEXT: shll %cl, %esi2775; X86-NO-BMI2-NO-SHLD-NEXT: orl %eax, %esi2776; X86-NO-BMI2-NO-SHLD-NEXT: movb %dl, %cl2777; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload2778; X86-NO-BMI2-NO-SHLD-NEXT: shrl %cl, %eax2779; X86-NO-BMI2-NO-SHLD-NEXT: addl %edi, %edi2780; X86-NO-BMI2-NO-SHLD-NEXT: movb %ch, %cl2781; X86-NO-BMI2-NO-SHLD-NEXT: shll %cl, %edi2782; X86-NO-BMI2-NO-SHLD-NEXT: orl %eax, %edi2783; X86-NO-BMI2-NO-SHLD-NEXT: movb %dl, %cl2784; X86-NO-BMI2-NO-SHLD-NEXT: shrl %cl, %ebx2785; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload2786; X86-NO-BMI2-NO-SHLD-NEXT: movl 60(%esp,%eax,4), %eax2787; X86-NO-BMI2-NO-SHLD-NEXT: leal (%eax,%eax), %edx2788; X86-NO-BMI2-NO-SHLD-NEXT: movb %ch, %cl2789; X86-NO-BMI2-NO-SHLD-NEXT: shll %cl, %edx2790; X86-NO-BMI2-NO-SHLD-NEXT: orl %ebx, %edx2791; X86-NO-BMI2-NO-SHLD-NEXT: movzbl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 1-byte Folded Reload2792; X86-NO-BMI2-NO-SHLD-NEXT: sarl %cl, %eax2793; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[0-9]+}}(%esp), %ecx2794; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, 28(%ecx)2795; X86-NO-BMI2-NO-SHLD-NEXT: movl %edx, 24(%ecx)2796; X86-NO-BMI2-NO-SHLD-NEXT: movl %edi, 16(%ecx)2797; X86-NO-BMI2-NO-SHLD-NEXT: movl %esi, 20(%ecx)2798; X86-NO-BMI2-NO-SHLD-NEXT: movl %ebp, 8(%ecx)2799; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload2800; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, 12(%ecx)2801; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload2802; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, (%ecx)2803; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload2804; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, 4(%ecx)2805; X86-NO-BMI2-NO-SHLD-NEXT: addl $108, %esp2806; X86-NO-BMI2-NO-SHLD-NEXT: popl %esi2807; X86-NO-BMI2-NO-SHLD-NEXT: popl %edi2808; X86-NO-BMI2-NO-SHLD-NEXT: popl %ebx2809; X86-NO-BMI2-NO-SHLD-NEXT: popl %ebp2810; X86-NO-BMI2-NO-SHLD-NEXT: retl2811;2812; X86-NO-BMI2-HAVE-SHLD-LABEL: ashr_32bytes:2813; X86-NO-BMI2-HAVE-SHLD: # %bb.0:2814; X86-NO-BMI2-HAVE-SHLD-NEXT: pushl %ebp2815; X86-NO-BMI2-HAVE-SHLD-NEXT: pushl %ebx2816; X86-NO-BMI2-HAVE-SHLD-NEXT: pushl %edi2817; X86-NO-BMI2-HAVE-SHLD-NEXT: pushl %esi2818; X86-NO-BMI2-HAVE-SHLD-NEXT: subl $92, %esp2819; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[0-9]+}}(%esp), %ecx2820; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[0-9]+}}(%esp), %edx2821; X86-NO-BMI2-HAVE-SHLD-NEXT: movl (%edx), %eax2822; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill2823; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 4(%edx), %eax2824; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %eax, (%esp) # 4-byte Spill2825; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 8(%edx), %edi2826; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 12(%edx), %ebx2827; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 16(%edx), %ebp2828; X86-NO-BMI2-HAVE-SHLD-NEXT: movzbl (%ecx), %ecx2829; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 20(%edx), %esi2830; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 24(%edx), %eax2831; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 28(%edx), %edx2832; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)2833; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %esi, {{[0-9]+}}(%esp)2834; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %edx, {{[0-9]+}}(%esp)2835; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ebp, {{[0-9]+}}(%esp)2836; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ebx, {{[0-9]+}}(%esp)2837; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %edi, {{[0-9]+}}(%esp)2838; X86-NO-BMI2-HAVE-SHLD-NEXT: movl (%esp), %eax # 4-byte Reload2839; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)2840; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload2841; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)2842; X86-NO-BMI2-HAVE-SHLD-NEXT: sarl $31, %edx2843; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %edx, {{[0-9]+}}(%esp)2844; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %edx, {{[0-9]+}}(%esp)2845; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %edx, {{[0-9]+}}(%esp)2846; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %edx, {{[0-9]+}}(%esp)2847; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %edx, {{[0-9]+}}(%esp)2848; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %edx, {{[0-9]+}}(%esp)2849; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %edx, {{[0-9]+}}(%esp)2850; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %edx, {{[0-9]+}}(%esp)2851; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ecx, %eax2852; X86-NO-BMI2-HAVE-SHLD-NEXT: shrb $5, %al2853; X86-NO-BMI2-HAVE-SHLD-NEXT: movzbl %al, %ebp2854; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 24(%esp,%ebp,4), %edx2855; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 20(%esp,%ebp,4), %eax2856; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %eax, (%esp) # 4-byte Spill2857; X86-NO-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %edx, %eax2858; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill2859; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 32(%esp,%ebp,4), %ebx2860; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 28(%esp,%ebp,4), %eax2861; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %eax, %esi2862; X86-NO-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %ebx, %esi2863; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill2864; X86-NO-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %eax, %edx2865; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill2866; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 40(%esp,%ebp,4), %edx2867; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 36(%esp,%ebp,4), %eax2868; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %eax, %edi2869; X86-NO-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %edx, %edi2870; X86-NO-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %eax, %ebx2871; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 16(%esp,%ebp,4), %esi2872; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 44(%esp,%ebp,4), %eax2873; X86-NO-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %eax, %edx2874; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[0-9]+}}(%esp), %ebp2875; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %edx, 24(%ebp)2876; X86-NO-BMI2-HAVE-SHLD-NEXT: movl (%esp), %edx # 4-byte Reload2877; X86-NO-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %edx, %esi2878; X86-NO-BMI2-HAVE-SHLD-NEXT: sarl %cl, %eax2879; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %eax, 28(%ebp)2880; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ebx, 16(%ebp)2881; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %edi, 20(%ebp)2882; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload2883; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %eax, 8(%ebp)2884; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload2885; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %eax, 12(%ebp)2886; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %esi, (%ebp)2887; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload2888; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %eax, 4(%ebp)2889; X86-NO-BMI2-HAVE-SHLD-NEXT: addl $92, %esp2890; X86-NO-BMI2-HAVE-SHLD-NEXT: popl %esi2891; X86-NO-BMI2-HAVE-SHLD-NEXT: popl %edi2892; X86-NO-BMI2-HAVE-SHLD-NEXT: popl %ebx2893; X86-NO-BMI2-HAVE-SHLD-NEXT: popl %ebp2894; X86-NO-BMI2-HAVE-SHLD-NEXT: retl2895;2896; X86-HAVE-BMI2-NO-SHLD-LABEL: ashr_32bytes:2897; X86-HAVE-BMI2-NO-SHLD: # %bb.0:2898; X86-HAVE-BMI2-NO-SHLD-NEXT: pushl %ebp2899; X86-HAVE-BMI2-NO-SHLD-NEXT: pushl %ebx2900; X86-HAVE-BMI2-NO-SHLD-NEXT: pushl %edi2901; X86-HAVE-BMI2-NO-SHLD-NEXT: pushl %esi2902; X86-HAVE-BMI2-NO-SHLD-NEXT: subl $108, %esp2903; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[0-9]+}}(%esp), %eax2904; X86-HAVE-BMI2-NO-SHLD-NEXT: movl (%eax), %ecx2905; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill2906; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 4(%eax), %ecx2907; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill2908; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 8(%eax), %edi2909; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 12(%eax), %ebx2910; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 16(%eax), %ebp2911; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 20(%eax), %esi2912; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 24(%eax), %edx2913; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 28(%eax), %ecx2914; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[0-9]+}}(%esp), %eax2915; X86-HAVE-BMI2-NO-SHLD-NEXT: movzbl (%eax), %eax2916; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %edx, {{[0-9]+}}(%esp)2917; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %esi, {{[0-9]+}}(%esp)2918; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)2919; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ebp, {{[0-9]+}}(%esp)2920; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ebx, {{[0-9]+}}(%esp)2921; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %edi, {{[0-9]+}}(%esp)2922; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload2923; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %edx, {{[0-9]+}}(%esp)2924; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload2925; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %edx, {{[0-9]+}}(%esp)2926; X86-HAVE-BMI2-NO-SHLD-NEXT: sarl $31, %ecx2927; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)2928; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)2929; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)2930; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)2931; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)2932; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)2933; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)2934; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)2935; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, %ecx2936; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, %edx2937; X86-HAVE-BMI2-NO-SHLD-NEXT: shrb $5, %dl2938; X86-HAVE-BMI2-NO-SHLD-NEXT: movzbl %dl, %esi2939; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 36(%esp,%esi,4), %edx2940; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 40(%esp,%esi,4), %ebp2941; X86-HAVE-BMI2-NO-SHLD-NEXT: shrxl %ecx, %edx, %edi2942; X86-HAVE-BMI2-NO-SHLD-NEXT: andb $31, %al2943; X86-HAVE-BMI2-NO-SHLD-NEXT: xorb $31, %al2944; X86-HAVE-BMI2-NO-SHLD-NEXT: leal (%ebp,%ebp), %ebx2945; X86-HAVE-BMI2-NO-SHLD-NEXT: shlxl %eax, %ebx, %ebx2946; X86-HAVE-BMI2-NO-SHLD-NEXT: orl %edi, %ebx2947; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ebx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill2948; X86-HAVE-BMI2-NO-SHLD-NEXT: shrxl %ecx, 32(%esp,%esi,4), %edi2949; X86-HAVE-BMI2-NO-SHLD-NEXT: addl %edx, %edx2950; X86-HAVE-BMI2-NO-SHLD-NEXT: shlxl %eax, %edx, %edx2951; X86-HAVE-BMI2-NO-SHLD-NEXT: orl %edi, %edx2952; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill2953; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 48(%esp,%esi,4), %edx2954; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill2955; X86-HAVE-BMI2-NO-SHLD-NEXT: addl %edx, %edx2956; X86-HAVE-BMI2-NO-SHLD-NEXT: shlxl %eax, %edx, %ebx2957; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 44(%esp,%esi,4), %edx2958; X86-HAVE-BMI2-NO-SHLD-NEXT: shrxl %ecx, %edx, %edi2959; X86-HAVE-BMI2-NO-SHLD-NEXT: orl %edi, %ebx2960; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ebx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill2961; X86-HAVE-BMI2-NO-SHLD-NEXT: shrxl %ecx, %ebp, %edi2962; X86-HAVE-BMI2-NO-SHLD-NEXT: addl %edx, %edx2963; X86-HAVE-BMI2-NO-SHLD-NEXT: shlxl %eax, %edx, %ebp2964; X86-HAVE-BMI2-NO-SHLD-NEXT: orl %edi, %ebp2965; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 56(%esp,%esi,4), %edx2966; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill2967; X86-HAVE-BMI2-NO-SHLD-NEXT: addl %edx, %edx2968; X86-HAVE-BMI2-NO-SHLD-NEXT: shlxl %eax, %edx, %edx2969; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, %edi2970; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 52(%esp,%esi,4), %eax2971; X86-HAVE-BMI2-NO-SHLD-NEXT: shrxl %ecx, %eax, %ebx2972; X86-HAVE-BMI2-NO-SHLD-NEXT: orl %ebx, %edx2973; X86-HAVE-BMI2-NO-SHLD-NEXT: shrxl %ecx, {{[-0-9]+}}(%e{{[sb]}}p), %ebx # 4-byte Folded Reload2974; X86-HAVE-BMI2-NO-SHLD-NEXT: addl %eax, %eax2975; X86-HAVE-BMI2-NO-SHLD-NEXT: shlxl %edi, %eax, %eax2976; X86-HAVE-BMI2-NO-SHLD-NEXT: orl %ebx, %eax2977; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 60(%esp,%esi,4), %esi2978; X86-HAVE-BMI2-NO-SHLD-NEXT: leal (%esi,%esi), %ebx2979; X86-HAVE-BMI2-NO-SHLD-NEXT: shlxl %edi, %ebx, %ebx2980; X86-HAVE-BMI2-NO-SHLD-NEXT: shrxl %ecx, {{[-0-9]+}}(%e{{[sb]}}p), %edi # 4-byte Folded Reload2981; X86-HAVE-BMI2-NO-SHLD-NEXT: orl %edi, %ebx2982; X86-HAVE-BMI2-NO-SHLD-NEXT: sarxl %ecx, %esi, %ecx2983; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[0-9]+}}(%esp), %esi2984; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, 28(%esi)2985; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ebx, 24(%esi)2986; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, 16(%esi)2987; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %edx, 20(%esi)2988; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ebp, 8(%esi)2989; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload2990; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, 12(%esi)2991; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload2992; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, (%esi)2993; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload2994; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, 4(%esi)2995; X86-HAVE-BMI2-NO-SHLD-NEXT: addl $108, %esp2996; X86-HAVE-BMI2-NO-SHLD-NEXT: popl %esi2997; X86-HAVE-BMI2-NO-SHLD-NEXT: popl %edi2998; X86-HAVE-BMI2-NO-SHLD-NEXT: popl %ebx2999; X86-HAVE-BMI2-NO-SHLD-NEXT: popl %ebp3000; X86-HAVE-BMI2-NO-SHLD-NEXT: retl3001;3002; X86-HAVE-BMI2-HAVE-SHLD-LABEL: ashr_32bytes:3003; X86-HAVE-BMI2-HAVE-SHLD: # %bb.0:3004; X86-HAVE-BMI2-HAVE-SHLD-NEXT: pushl %ebp3005; X86-HAVE-BMI2-HAVE-SHLD-NEXT: pushl %ebx3006; X86-HAVE-BMI2-HAVE-SHLD-NEXT: pushl %edi3007; X86-HAVE-BMI2-HAVE-SHLD-NEXT: pushl %esi3008; X86-HAVE-BMI2-HAVE-SHLD-NEXT: subl $92, %esp3009; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[0-9]+}}(%esp), %eax3010; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl (%eax), %ecx3011; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3012; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 4(%eax), %ecx3013; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ecx, (%esp) # 4-byte Spill3014; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 8(%eax), %edi3015; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 12(%eax), %ebx3016; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 16(%eax), %ebp3017; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 20(%eax), %esi3018; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 24(%eax), %edx3019; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 28(%eax), %eax3020; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[0-9]+}}(%esp), %ecx3021; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movzbl (%ecx), %ecx3022; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edx, {{[0-9]+}}(%esp)3023; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %esi, {{[0-9]+}}(%esp)3024; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)3025; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ebp, {{[0-9]+}}(%esp)3026; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ebx, {{[0-9]+}}(%esp)3027; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edi, {{[0-9]+}}(%esp)3028; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl (%esp), %edx # 4-byte Reload3029; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edx, {{[0-9]+}}(%esp)3030; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload3031; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edx, {{[0-9]+}}(%esp)3032; X86-HAVE-BMI2-HAVE-SHLD-NEXT: sarl $31, %eax3033; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)3034; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)3035; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)3036; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)3037; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)3038; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)3039; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)3040; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)3041; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ecx, %eax3042; X86-HAVE-BMI2-HAVE-SHLD-NEXT: shrb $5, %al3043; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movzbl %al, %ebp3044; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 24(%esp,%ebp,4), %esi3045; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 20(%esp,%ebp,4), %eax3046; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3047; X86-HAVE-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %esi, %eax3048; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %eax, (%esp) # 4-byte Spill3049; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 32(%esp,%ebp,4), %ebx3050; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 28(%esp,%ebp,4), %eax3051; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %eax, %edx3052; X86-HAVE-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %ebx, %edx3053; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3054; X86-HAVE-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %eax, %esi3055; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3056; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 40(%esp,%ebp,4), %eax3057; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 36(%esp,%ebp,4), %edx3058; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edx, %esi3059; X86-HAVE-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %eax, %esi3060; X86-HAVE-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %edx, %ebx3061; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 16(%esp,%ebp,4), %edx3062; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 44(%esp,%ebp,4), %edi3063; X86-HAVE-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %edi, %eax3064; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[0-9]+}}(%esp), %ebp3065; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %eax, 24(%ebp)3066; X86-HAVE-BMI2-HAVE-SHLD-NEXT: sarxl %ecx, %edi, %eax3067; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %eax, 28(%ebp)3068; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ebx, 16(%ebp)3069; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %esi, 20(%ebp)3070; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload3071; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %eax, 8(%ebp)3072; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload3073; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %eax, 12(%ebp)3074; X86-HAVE-BMI2-HAVE-SHLD-NEXT: # kill: def $cl killed $cl killed $ecx3075; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload3076; X86-HAVE-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %eax, %edx3077; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edx, (%ebp)3078; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl (%esp), %eax # 4-byte Reload3079; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %eax, 4(%ebp)3080; X86-HAVE-BMI2-HAVE-SHLD-NEXT: addl $92, %esp3081; X86-HAVE-BMI2-HAVE-SHLD-NEXT: popl %esi3082; X86-HAVE-BMI2-HAVE-SHLD-NEXT: popl %edi3083; X86-HAVE-BMI2-HAVE-SHLD-NEXT: popl %ebx3084; X86-HAVE-BMI2-HAVE-SHLD-NEXT: popl %ebp3085; X86-HAVE-BMI2-HAVE-SHLD-NEXT: retl3086 %src = load i256, ptr %src.ptr, align 13087 %bitOff = load i256, ptr %bitOff.ptr, align 13088 %res = ashr i256 %src, %bitOff3089 store i256 %res, ptr %dst, align 13090 ret void3091}3092 3093define void @lshr_64bytes(ptr %src.ptr, ptr %bitOff.ptr, ptr %dst) nounwind {3094; X64-NO-BMI2-NO-SHLD-LABEL: lshr_64bytes:3095; X64-NO-BMI2-NO-SHLD: # %bb.0:3096; X64-NO-BMI2-NO-SHLD-NEXT: pushq %rbp3097; X64-NO-BMI2-NO-SHLD-NEXT: pushq %r153098; X64-NO-BMI2-NO-SHLD-NEXT: pushq %r143099; X64-NO-BMI2-NO-SHLD-NEXT: pushq %r133100; X64-NO-BMI2-NO-SHLD-NEXT: pushq %r123101; X64-NO-BMI2-NO-SHLD-NEXT: pushq %rbx3102; X64-NO-BMI2-NO-SHLD-NEXT: pushq %rax3103; X64-NO-BMI2-NO-SHLD-NEXT: movq (%rdi), %rax3104; X64-NO-BMI2-NO-SHLD-NEXT: movq 8(%rdi), %rcx3105; X64-NO-BMI2-NO-SHLD-NEXT: movq 16(%rdi), %r93106; X64-NO-BMI2-NO-SHLD-NEXT: movq 24(%rdi), %r103107; X64-NO-BMI2-NO-SHLD-NEXT: movq 32(%rdi), %r113108; X64-NO-BMI2-NO-SHLD-NEXT: movq 40(%rdi), %rbx3109; X64-NO-BMI2-NO-SHLD-NEXT: movq 48(%rdi), %r143110; X64-NO-BMI2-NO-SHLD-NEXT: movq 56(%rdi), %rdi3111; X64-NO-BMI2-NO-SHLD-NEXT: movl (%rsi), %r8d3112; X64-NO-BMI2-NO-SHLD-NEXT: xorps %xmm0, %xmm03113; X64-NO-BMI2-NO-SHLD-NEXT: movaps %xmm0, -{{[0-9]+}}(%rsp)3114; X64-NO-BMI2-NO-SHLD-NEXT: movaps %xmm0, -{{[0-9]+}}(%rsp)3115; X64-NO-BMI2-NO-SHLD-NEXT: movaps %xmm0, -{{[0-9]+}}(%rsp)3116; X64-NO-BMI2-NO-SHLD-NEXT: movaps %xmm0, -{{[0-9]+}}(%rsp)3117; X64-NO-BMI2-NO-SHLD-NEXT: movq %rdi, -{{[0-9]+}}(%rsp)3118; X64-NO-BMI2-NO-SHLD-NEXT: movq %r14, -{{[0-9]+}}(%rsp)3119; X64-NO-BMI2-NO-SHLD-NEXT: movq %rbx, -{{[0-9]+}}(%rsp)3120; X64-NO-BMI2-NO-SHLD-NEXT: movq %r11, -{{[0-9]+}}(%rsp)3121; X64-NO-BMI2-NO-SHLD-NEXT: movq %r10, -{{[0-9]+}}(%rsp)3122; X64-NO-BMI2-NO-SHLD-NEXT: movq %r9, -{{[0-9]+}}(%rsp)3123; X64-NO-BMI2-NO-SHLD-NEXT: movq %rcx, -{{[0-9]+}}(%rsp)3124; X64-NO-BMI2-NO-SHLD-NEXT: movq %rax, -{{[0-9]+}}(%rsp)3125; X64-NO-BMI2-NO-SHLD-NEXT: movl %r8d, %eax3126; X64-NO-BMI2-NO-SHLD-NEXT: andl $63, %eax3127; X64-NO-BMI2-NO-SHLD-NEXT: shrl $3, %r8d3128; X64-NO-BMI2-NO-SHLD-NEXT: andl $56, %r8d3129; X64-NO-BMI2-NO-SHLD-NEXT: movq -128(%rsp,%r8), %r113130; X64-NO-BMI2-NO-SHLD-NEXT: movq -120(%rsp,%r8), %r93131; X64-NO-BMI2-NO-SHLD-NEXT: movq %r9, %rsi3132; X64-NO-BMI2-NO-SHLD-NEXT: movl %eax, %ecx3133; X64-NO-BMI2-NO-SHLD-NEXT: shrq %cl, %rsi3134; X64-NO-BMI2-NO-SHLD-NEXT: movl %eax, %edi3135; X64-NO-BMI2-NO-SHLD-NEXT: notl %edi3136; X64-NO-BMI2-NO-SHLD-NEXT: movq -112(%rsp,%r8), %r143137; X64-NO-BMI2-NO-SHLD-NEXT: leaq (%r14,%r14), %r103138; X64-NO-BMI2-NO-SHLD-NEXT: movl %edi, %ecx3139; X64-NO-BMI2-NO-SHLD-NEXT: shlq %cl, %r103140; X64-NO-BMI2-NO-SHLD-NEXT: orq %rsi, %r103141; X64-NO-BMI2-NO-SHLD-NEXT: movl %eax, %ecx3142; X64-NO-BMI2-NO-SHLD-NEXT: shrq %cl, %r113143; X64-NO-BMI2-NO-SHLD-NEXT: movl %eax, %esi3144; X64-NO-BMI2-NO-SHLD-NEXT: xorb $63, %sil3145; X64-NO-BMI2-NO-SHLD-NEXT: addq %r9, %r93146; X64-NO-BMI2-NO-SHLD-NEXT: movl %esi, %ecx3147; X64-NO-BMI2-NO-SHLD-NEXT: shlq %cl, %r93148; X64-NO-BMI2-NO-SHLD-NEXT: orq %r11, %r93149; X64-NO-BMI2-NO-SHLD-NEXT: movq -104(%rsp,%r8), %r113150; X64-NO-BMI2-NO-SHLD-NEXT: movq %r11, %r123151; X64-NO-BMI2-NO-SHLD-NEXT: movl %eax, %ecx3152; X64-NO-BMI2-NO-SHLD-NEXT: shrq %cl, %r123153; X64-NO-BMI2-NO-SHLD-NEXT: movq -96(%rsp,%r8), %r153154; X64-NO-BMI2-NO-SHLD-NEXT: leaq (%r15,%r15), %rbx3155; X64-NO-BMI2-NO-SHLD-NEXT: movl %edi, %ecx3156; X64-NO-BMI2-NO-SHLD-NEXT: shlq %cl, %rbx3157; X64-NO-BMI2-NO-SHLD-NEXT: orq %r12, %rbx3158; X64-NO-BMI2-NO-SHLD-NEXT: movl %eax, %ecx3159; X64-NO-BMI2-NO-SHLD-NEXT: shrq %cl, %r143160; X64-NO-BMI2-NO-SHLD-NEXT: addq %r11, %r113161; X64-NO-BMI2-NO-SHLD-NEXT: movl %esi, %ecx3162; X64-NO-BMI2-NO-SHLD-NEXT: shlq %cl, %r113163; X64-NO-BMI2-NO-SHLD-NEXT: orq %r14, %r113164; X64-NO-BMI2-NO-SHLD-NEXT: movq -88(%rsp,%r8), %r143165; X64-NO-BMI2-NO-SHLD-NEXT: movq %r14, %r133166; X64-NO-BMI2-NO-SHLD-NEXT: movl %eax, %ecx3167; X64-NO-BMI2-NO-SHLD-NEXT: shrq %cl, %r133168; X64-NO-BMI2-NO-SHLD-NEXT: movq -80(%rsp,%r8), %rbp3169; X64-NO-BMI2-NO-SHLD-NEXT: leaq (%rbp,%rbp), %r123170; X64-NO-BMI2-NO-SHLD-NEXT: movl %edi, %ecx3171; X64-NO-BMI2-NO-SHLD-NEXT: shlq %cl, %r123172; X64-NO-BMI2-NO-SHLD-NEXT: orq %r13, %r123173; X64-NO-BMI2-NO-SHLD-NEXT: movl %eax, %ecx3174; X64-NO-BMI2-NO-SHLD-NEXT: shrq %cl, %r153175; X64-NO-BMI2-NO-SHLD-NEXT: addq %r14, %r143176; X64-NO-BMI2-NO-SHLD-NEXT: movl %esi, %ecx3177; X64-NO-BMI2-NO-SHLD-NEXT: shlq %cl, %r143178; X64-NO-BMI2-NO-SHLD-NEXT: orq %r15, %r143179; X64-NO-BMI2-NO-SHLD-NEXT: movl %eax, %ecx3180; X64-NO-BMI2-NO-SHLD-NEXT: shrq %cl, %rbp3181; X64-NO-BMI2-NO-SHLD-NEXT: movq -72(%rsp,%r8), %rdi3182; X64-NO-BMI2-NO-SHLD-NEXT: leaq (%rdi,%rdi), %r83183; X64-NO-BMI2-NO-SHLD-NEXT: movl %esi, %ecx3184; X64-NO-BMI2-NO-SHLD-NEXT: shlq %cl, %r83185; X64-NO-BMI2-NO-SHLD-NEXT: orq %rbp, %r83186; X64-NO-BMI2-NO-SHLD-NEXT: movl %eax, %ecx3187; X64-NO-BMI2-NO-SHLD-NEXT: shrq %cl, %rdi3188; X64-NO-BMI2-NO-SHLD-NEXT: movq %rdi, 56(%rdx)3189; X64-NO-BMI2-NO-SHLD-NEXT: movq %r8, 48(%rdx)3190; X64-NO-BMI2-NO-SHLD-NEXT: movq %r14, 32(%rdx)3191; X64-NO-BMI2-NO-SHLD-NEXT: movq %r12, 40(%rdx)3192; X64-NO-BMI2-NO-SHLD-NEXT: movq %r11, 16(%rdx)3193; X64-NO-BMI2-NO-SHLD-NEXT: movq %rbx, 24(%rdx)3194; X64-NO-BMI2-NO-SHLD-NEXT: movq %r9, (%rdx)3195; X64-NO-BMI2-NO-SHLD-NEXT: movq %r10, 8(%rdx)3196; X64-NO-BMI2-NO-SHLD-NEXT: addq $8, %rsp3197; X64-NO-BMI2-NO-SHLD-NEXT: popq %rbx3198; X64-NO-BMI2-NO-SHLD-NEXT: popq %r123199; X64-NO-BMI2-NO-SHLD-NEXT: popq %r133200; X64-NO-BMI2-NO-SHLD-NEXT: popq %r143201; X64-NO-BMI2-NO-SHLD-NEXT: popq %r153202; X64-NO-BMI2-NO-SHLD-NEXT: popq %rbp3203; X64-NO-BMI2-NO-SHLD-NEXT: retq3204;3205; X64-NO-BMI2-HAVE-SHLD-LABEL: lshr_64bytes:3206; X64-NO-BMI2-HAVE-SHLD: # %bb.0:3207; X64-NO-BMI2-HAVE-SHLD-NEXT: pushq %r153208; X64-NO-BMI2-HAVE-SHLD-NEXT: pushq %r143209; X64-NO-BMI2-HAVE-SHLD-NEXT: pushq %rbx3210; X64-NO-BMI2-HAVE-SHLD-NEXT: movq (%rdi), %rcx3211; X64-NO-BMI2-HAVE-SHLD-NEXT: movq 8(%rdi), %r83212; X64-NO-BMI2-HAVE-SHLD-NEXT: movq 16(%rdi), %r93213; X64-NO-BMI2-HAVE-SHLD-NEXT: movq 24(%rdi), %r103214; X64-NO-BMI2-HAVE-SHLD-NEXT: movq 32(%rdi), %r113215; X64-NO-BMI2-HAVE-SHLD-NEXT: movq 40(%rdi), %rbx3216; X64-NO-BMI2-HAVE-SHLD-NEXT: movq 48(%rdi), %r143217; X64-NO-BMI2-HAVE-SHLD-NEXT: movq 56(%rdi), %rdi3218; X64-NO-BMI2-HAVE-SHLD-NEXT: movl (%rsi), %eax3219; X64-NO-BMI2-HAVE-SHLD-NEXT: xorps %xmm0, %xmm03220; X64-NO-BMI2-HAVE-SHLD-NEXT: movaps %xmm0, -{{[0-9]+}}(%rsp)3221; X64-NO-BMI2-HAVE-SHLD-NEXT: movaps %xmm0, -{{[0-9]+}}(%rsp)3222; X64-NO-BMI2-HAVE-SHLD-NEXT: movaps %xmm0, -{{[0-9]+}}(%rsp)3223; X64-NO-BMI2-HAVE-SHLD-NEXT: movaps %xmm0, -{{[0-9]+}}(%rsp)3224; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %rdi, -{{[0-9]+}}(%rsp)3225; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %r14, -{{[0-9]+}}(%rsp)3226; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %rbx, -{{[0-9]+}}(%rsp)3227; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %r11, -{{[0-9]+}}(%rsp)3228; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %r10, -{{[0-9]+}}(%rsp)3229; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %r9, -{{[0-9]+}}(%rsp)3230; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %r8, -{{[0-9]+}}(%rsp)3231; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %rcx, -{{[0-9]+}}(%rsp)3232; X64-NO-BMI2-HAVE-SHLD-NEXT: movl %eax, %ecx3233; X64-NO-BMI2-HAVE-SHLD-NEXT: andl $63, %ecx3234; X64-NO-BMI2-HAVE-SHLD-NEXT: shrl $3, %eax3235; X64-NO-BMI2-HAVE-SHLD-NEXT: andl $56, %eax3236; X64-NO-BMI2-HAVE-SHLD-NEXT: movq -112(%rsp,%rax), %rdi3237; X64-NO-BMI2-HAVE-SHLD-NEXT: movq -128(%rsp,%rax), %rsi3238; X64-NO-BMI2-HAVE-SHLD-NEXT: movq -120(%rsp,%rax), %r93239; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %r9, %r83240; X64-NO-BMI2-HAVE-SHLD-NEXT: shrdq %cl, %rdi, %r83241; X64-NO-BMI2-HAVE-SHLD-NEXT: movq -96(%rsp,%rax), %r103242; X64-NO-BMI2-HAVE-SHLD-NEXT: movq -104(%rsp,%rax), %r113243; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %r11, %rbx3244; X64-NO-BMI2-HAVE-SHLD-NEXT: shrdq %cl, %r10, %rbx3245; X64-NO-BMI2-HAVE-SHLD-NEXT: shrdq %cl, %r11, %rdi3246; X64-NO-BMI2-HAVE-SHLD-NEXT: movq -80(%rsp,%rax), %r113247; X64-NO-BMI2-HAVE-SHLD-NEXT: movq -88(%rsp,%rax), %r143248; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %r14, %r153249; X64-NO-BMI2-HAVE-SHLD-NEXT: shrdq %cl, %r11, %r153250; X64-NO-BMI2-HAVE-SHLD-NEXT: shrdq %cl, %r14, %r103251; X64-NO-BMI2-HAVE-SHLD-NEXT: movq -72(%rsp,%rax), %rax3252; X64-NO-BMI2-HAVE-SHLD-NEXT: shrdq %cl, %rax, %r113253; X64-NO-BMI2-HAVE-SHLD-NEXT: shrdq %cl, %r9, %rsi3254; X64-NO-BMI2-HAVE-SHLD-NEXT: # kill: def $cl killed $cl killed $ecx3255; X64-NO-BMI2-HAVE-SHLD-NEXT: shrq %cl, %rax3256; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %r11, 48(%rdx)3257; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %rax, 56(%rdx)3258; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %r10, 32(%rdx)3259; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %r15, 40(%rdx)3260; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %rdi, 16(%rdx)3261; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %rbx, 24(%rdx)3262; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %rsi, (%rdx)3263; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %r8, 8(%rdx)3264; X64-NO-BMI2-HAVE-SHLD-NEXT: popq %rbx3265; X64-NO-BMI2-HAVE-SHLD-NEXT: popq %r143266; X64-NO-BMI2-HAVE-SHLD-NEXT: popq %r153267; X64-NO-BMI2-HAVE-SHLD-NEXT: retq3268;3269; X64-HAVE-BMI2-NO-SHLD-LABEL: lshr_64bytes:3270; X64-HAVE-BMI2-NO-SHLD: # %bb.0:3271; X64-HAVE-BMI2-NO-SHLD-NEXT: pushq %r153272; X64-HAVE-BMI2-NO-SHLD-NEXT: pushq %r143273; X64-HAVE-BMI2-NO-SHLD-NEXT: pushq %r133274; X64-HAVE-BMI2-NO-SHLD-NEXT: pushq %r123275; X64-HAVE-BMI2-NO-SHLD-NEXT: pushq %rbx3276; X64-HAVE-BMI2-NO-SHLD-NEXT: movq (%rdi), %rcx3277; X64-HAVE-BMI2-NO-SHLD-NEXT: movq 8(%rdi), %r83278; X64-HAVE-BMI2-NO-SHLD-NEXT: movq 16(%rdi), %r93279; X64-HAVE-BMI2-NO-SHLD-NEXT: movq 24(%rdi), %r103280; X64-HAVE-BMI2-NO-SHLD-NEXT: movq 32(%rdi), %r113281; X64-HAVE-BMI2-NO-SHLD-NEXT: movq 40(%rdi), %rbx3282; X64-HAVE-BMI2-NO-SHLD-NEXT: movq 48(%rdi), %r143283; X64-HAVE-BMI2-NO-SHLD-NEXT: movq 56(%rdi), %rdi3284; X64-HAVE-BMI2-NO-SHLD-NEXT: movl (%rsi), %eax3285; X64-HAVE-BMI2-NO-SHLD-NEXT: xorps %xmm0, %xmm03286; X64-HAVE-BMI2-NO-SHLD-NEXT: movaps %xmm0, -{{[0-9]+}}(%rsp)3287; X64-HAVE-BMI2-NO-SHLD-NEXT: movaps %xmm0, -{{[0-9]+}}(%rsp)3288; X64-HAVE-BMI2-NO-SHLD-NEXT: movaps %xmm0, -{{[0-9]+}}(%rsp)3289; X64-HAVE-BMI2-NO-SHLD-NEXT: movaps %xmm0, -{{[0-9]+}}(%rsp)3290; X64-HAVE-BMI2-NO-SHLD-NEXT: movq %rdi, -{{[0-9]+}}(%rsp)3291; X64-HAVE-BMI2-NO-SHLD-NEXT: movq %r14, -{{[0-9]+}}(%rsp)3292; X64-HAVE-BMI2-NO-SHLD-NEXT: movq %rbx, -{{[0-9]+}}(%rsp)3293; X64-HAVE-BMI2-NO-SHLD-NEXT: movq %r11, -{{[0-9]+}}(%rsp)3294; X64-HAVE-BMI2-NO-SHLD-NEXT: movq %r10, -{{[0-9]+}}(%rsp)3295; X64-HAVE-BMI2-NO-SHLD-NEXT: movq %r9, -{{[0-9]+}}(%rsp)3296; X64-HAVE-BMI2-NO-SHLD-NEXT: movq %r8, -{{[0-9]+}}(%rsp)3297; X64-HAVE-BMI2-NO-SHLD-NEXT: movq %rcx, -{{[0-9]+}}(%rsp)3298; X64-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, %esi3299; X64-HAVE-BMI2-NO-SHLD-NEXT: andl $63, %esi3300; X64-HAVE-BMI2-NO-SHLD-NEXT: movl %esi, %ecx3301; X64-HAVE-BMI2-NO-SHLD-NEXT: shrl $3, %eax3302; X64-HAVE-BMI2-NO-SHLD-NEXT: andl $56, %eax3303; X64-HAVE-BMI2-NO-SHLD-NEXT: movq -120(%rsp,%rax), %r83304; X64-HAVE-BMI2-NO-SHLD-NEXT: movq -112(%rsp,%rax), %r113305; X64-HAVE-BMI2-NO-SHLD-NEXT: shrxq %rcx, %r8, %r93306; X64-HAVE-BMI2-NO-SHLD-NEXT: movl %esi, %r10d3307; X64-HAVE-BMI2-NO-SHLD-NEXT: notl %r10d3308; X64-HAVE-BMI2-NO-SHLD-NEXT: leaq (%r11,%r11), %rdi3309; X64-HAVE-BMI2-NO-SHLD-NEXT: shlxq %r10, %rdi, %rdi3310; X64-HAVE-BMI2-NO-SHLD-NEXT: orq %r9, %rdi3311; X64-HAVE-BMI2-NO-SHLD-NEXT: shrxq %rcx, -128(%rsp,%rax), %r93312; X64-HAVE-BMI2-NO-SHLD-NEXT: xorb $63, %sil3313; X64-HAVE-BMI2-NO-SHLD-NEXT: addq %r8, %r83314; X64-HAVE-BMI2-NO-SHLD-NEXT: shlxq %rsi, %r8, %r83315; X64-HAVE-BMI2-NO-SHLD-NEXT: orq %r9, %r83316; X64-HAVE-BMI2-NO-SHLD-NEXT: movq -104(%rsp,%rax), %rbx3317; X64-HAVE-BMI2-NO-SHLD-NEXT: shrxq %rcx, %rbx, %r143318; X64-HAVE-BMI2-NO-SHLD-NEXT: movq -96(%rsp,%rax), %r153319; X64-HAVE-BMI2-NO-SHLD-NEXT: leaq (%r15,%r15), %r93320; X64-HAVE-BMI2-NO-SHLD-NEXT: shlxq %r10, %r9, %r93321; X64-HAVE-BMI2-NO-SHLD-NEXT: orq %r14, %r93322; X64-HAVE-BMI2-NO-SHLD-NEXT: shrxq %rcx, %r11, %r113323; X64-HAVE-BMI2-NO-SHLD-NEXT: addq %rbx, %rbx3324; X64-HAVE-BMI2-NO-SHLD-NEXT: shlxq %rsi, %rbx, %rbx3325; X64-HAVE-BMI2-NO-SHLD-NEXT: orq %r11, %rbx3326; X64-HAVE-BMI2-NO-SHLD-NEXT: movq -88(%rsp,%rax), %r113327; X64-HAVE-BMI2-NO-SHLD-NEXT: shrxq %rcx, %r11, %r143328; X64-HAVE-BMI2-NO-SHLD-NEXT: movq -80(%rsp,%rax), %r123329; X64-HAVE-BMI2-NO-SHLD-NEXT: leaq (%r12,%r12), %r133330; X64-HAVE-BMI2-NO-SHLD-NEXT: shlxq %r10, %r13, %r103331; X64-HAVE-BMI2-NO-SHLD-NEXT: orq %r14, %r103332; X64-HAVE-BMI2-NO-SHLD-NEXT: shrxq %rcx, %r15, %r143333; X64-HAVE-BMI2-NO-SHLD-NEXT: addq %r11, %r113334; X64-HAVE-BMI2-NO-SHLD-NEXT: shlxq %rsi, %r11, %r113335; X64-HAVE-BMI2-NO-SHLD-NEXT: orq %r14, %r113336; X64-HAVE-BMI2-NO-SHLD-NEXT: shrxq %rcx, %r12, %r143337; X64-HAVE-BMI2-NO-SHLD-NEXT: movq -72(%rsp,%rax), %rax3338; X64-HAVE-BMI2-NO-SHLD-NEXT: leaq (%rax,%rax), %r153339; X64-HAVE-BMI2-NO-SHLD-NEXT: shlxq %rsi, %r15, %rsi3340; X64-HAVE-BMI2-NO-SHLD-NEXT: orq %r14, %rsi3341; X64-HAVE-BMI2-NO-SHLD-NEXT: shrxq %rcx, %rax, %rax3342; X64-HAVE-BMI2-NO-SHLD-NEXT: movq %rax, 56(%rdx)3343; X64-HAVE-BMI2-NO-SHLD-NEXT: movq %rsi, 48(%rdx)3344; X64-HAVE-BMI2-NO-SHLD-NEXT: movq %r11, 32(%rdx)3345; X64-HAVE-BMI2-NO-SHLD-NEXT: movq %r10, 40(%rdx)3346; X64-HAVE-BMI2-NO-SHLD-NEXT: movq %rbx, 16(%rdx)3347; X64-HAVE-BMI2-NO-SHLD-NEXT: movq %r9, 24(%rdx)3348; X64-HAVE-BMI2-NO-SHLD-NEXT: movq %r8, (%rdx)3349; X64-HAVE-BMI2-NO-SHLD-NEXT: movq %rdi, 8(%rdx)3350; X64-HAVE-BMI2-NO-SHLD-NEXT: popq %rbx3351; X64-HAVE-BMI2-NO-SHLD-NEXT: popq %r123352; X64-HAVE-BMI2-NO-SHLD-NEXT: popq %r133353; X64-HAVE-BMI2-NO-SHLD-NEXT: popq %r143354; X64-HAVE-BMI2-NO-SHLD-NEXT: popq %r153355; X64-HAVE-BMI2-NO-SHLD-NEXT: retq3356;3357; X64-HAVE-BMI2-HAVE-SHLD-LABEL: lshr_64bytes:3358; X64-HAVE-BMI2-HAVE-SHLD: # %bb.0:3359; X64-HAVE-BMI2-HAVE-SHLD-NEXT: pushq %r153360; X64-HAVE-BMI2-HAVE-SHLD-NEXT: pushq %r143361; X64-HAVE-BMI2-HAVE-SHLD-NEXT: pushq %rbx3362; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq (%rdi), %rcx3363; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq 8(%rdi), %r83364; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq 16(%rdi), %r93365; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq 24(%rdi), %r103366; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq 32(%rdi), %r113367; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq 40(%rdi), %rbx3368; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq 48(%rdi), %r143369; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq 56(%rdi), %rdi3370; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movl (%rsi), %eax3371; X64-HAVE-BMI2-HAVE-SHLD-NEXT: xorps %xmm0, %xmm03372; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movaps %xmm0, -{{[0-9]+}}(%rsp)3373; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movaps %xmm0, -{{[0-9]+}}(%rsp)3374; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movaps %xmm0, -{{[0-9]+}}(%rsp)3375; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movaps %xmm0, -{{[0-9]+}}(%rsp)3376; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq %rdi, -{{[0-9]+}}(%rsp)3377; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq %r14, -{{[0-9]+}}(%rsp)3378; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq %rbx, -{{[0-9]+}}(%rsp)3379; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq %r11, -{{[0-9]+}}(%rsp)3380; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq %r10, -{{[0-9]+}}(%rsp)3381; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq %r9, -{{[0-9]+}}(%rsp)3382; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq %r8, -{{[0-9]+}}(%rsp)3383; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq %rcx, -{{[0-9]+}}(%rsp)3384; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movl %eax, %ecx3385; X64-HAVE-BMI2-HAVE-SHLD-NEXT: andl $63, %ecx3386; X64-HAVE-BMI2-HAVE-SHLD-NEXT: shrl $3, %eax3387; X64-HAVE-BMI2-HAVE-SHLD-NEXT: andl $56, %eax3388; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq -112(%rsp,%rax), %rdi3389; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq -128(%rsp,%rax), %rsi3390; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq -120(%rsp,%rax), %r93391; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq %r9, %r83392; X64-HAVE-BMI2-HAVE-SHLD-NEXT: shrdq %cl, %rdi, %r83393; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq -96(%rsp,%rax), %r103394; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq -104(%rsp,%rax), %r113395; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq %r11, %rbx3396; X64-HAVE-BMI2-HAVE-SHLD-NEXT: shrdq %cl, %r10, %rbx3397; X64-HAVE-BMI2-HAVE-SHLD-NEXT: shrdq %cl, %r11, %rdi3398; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq -80(%rsp,%rax), %r113399; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq -88(%rsp,%rax), %r143400; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq %r14, %r153401; X64-HAVE-BMI2-HAVE-SHLD-NEXT: shrdq %cl, %r11, %r153402; X64-HAVE-BMI2-HAVE-SHLD-NEXT: shrdq %cl, %r14, %r103403; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq -72(%rsp,%rax), %rax3404; X64-HAVE-BMI2-HAVE-SHLD-NEXT: shrdq %cl, %rax, %r113405; X64-HAVE-BMI2-HAVE-SHLD-NEXT: shrdq %cl, %r9, %rsi3406; X64-HAVE-BMI2-HAVE-SHLD-NEXT: shrxq %rcx, %rax, %rax3407; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq %r11, 48(%rdx)3408; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq %rax, 56(%rdx)3409; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq %r10, 32(%rdx)3410; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq %r15, 40(%rdx)3411; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq %rdi, 16(%rdx)3412; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq %rbx, 24(%rdx)3413; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq %rsi, (%rdx)3414; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq %r8, 8(%rdx)3415; X64-HAVE-BMI2-HAVE-SHLD-NEXT: popq %rbx3416; X64-HAVE-BMI2-HAVE-SHLD-NEXT: popq %r143417; X64-HAVE-BMI2-HAVE-SHLD-NEXT: popq %r153418; X64-HAVE-BMI2-HAVE-SHLD-NEXT: retq3419;3420; X86-NO-BMI2-NO-SHLD-LABEL: lshr_64bytes:3421; X86-NO-BMI2-NO-SHLD: # %bb.0:3422; X86-NO-BMI2-NO-SHLD-NEXT: pushl %ebp3423; X86-NO-BMI2-NO-SHLD-NEXT: pushl %ebx3424; X86-NO-BMI2-NO-SHLD-NEXT: pushl %edi3425; X86-NO-BMI2-NO-SHLD-NEXT: pushl %esi3426; X86-NO-BMI2-NO-SHLD-NEXT: subl $204, %esp3427; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[0-9]+}}(%esp), %edi3428; X86-NO-BMI2-NO-SHLD-NEXT: movl (%edi), %eax3429; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3430; X86-NO-BMI2-NO-SHLD-NEXT: movl 4(%edi), %eax3431; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, (%esp) # 4-byte Spill3432; X86-NO-BMI2-NO-SHLD-NEXT: movl 8(%edi), %eax3433; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3434; X86-NO-BMI2-NO-SHLD-NEXT: movl 12(%edi), %eax3435; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3436; X86-NO-BMI2-NO-SHLD-NEXT: movl 16(%edi), %eax3437; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3438; X86-NO-BMI2-NO-SHLD-NEXT: movl 20(%edi), %eax3439; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3440; X86-NO-BMI2-NO-SHLD-NEXT: movl 24(%edi), %eax3441; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3442; X86-NO-BMI2-NO-SHLD-NEXT: movl 28(%edi), %eax3443; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3444; X86-NO-BMI2-NO-SHLD-NEXT: movl 32(%edi), %eax3445; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3446; X86-NO-BMI2-NO-SHLD-NEXT: movl 36(%edi), %eax3447; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3448; X86-NO-BMI2-NO-SHLD-NEXT: movl 40(%edi), %ebp3449; X86-NO-BMI2-NO-SHLD-NEXT: movl 44(%edi), %ebx3450; X86-NO-BMI2-NO-SHLD-NEXT: movl 48(%edi), %esi3451; X86-NO-BMI2-NO-SHLD-NEXT: movl 52(%edi), %edx3452; X86-NO-BMI2-NO-SHLD-NEXT: movl 56(%edi), %ecx3453; X86-NO-BMI2-NO-SHLD-NEXT: movl 60(%edi), %eax3454; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[0-9]+}}(%esp), %edi3455; X86-NO-BMI2-NO-SHLD-NEXT: movl (%edi), %edi3456; X86-NO-BMI2-NO-SHLD-NEXT: xorps %xmm0, %xmm03457; X86-NO-BMI2-NO-SHLD-NEXT: movaps %xmm0, {{[0-9]+}}(%esp)3458; X86-NO-BMI2-NO-SHLD-NEXT: movaps %xmm0, {{[0-9]+}}(%esp)3459; X86-NO-BMI2-NO-SHLD-NEXT: movaps %xmm0, {{[0-9]+}}(%esp)3460; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)3461; X86-NO-BMI2-NO-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)3462; X86-NO-BMI2-NO-SHLD-NEXT: movl %edx, {{[0-9]+}}(%esp)3463; X86-NO-BMI2-NO-SHLD-NEXT: movl %esi, {{[0-9]+}}(%esp)3464; X86-NO-BMI2-NO-SHLD-NEXT: movl %ebx, {{[0-9]+}}(%esp)3465; X86-NO-BMI2-NO-SHLD-NEXT: movl %ebp, {{[0-9]+}}(%esp)3466; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload3467; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)3468; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload3469; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)3470; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload3471; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)3472; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload3473; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)3474; X86-NO-BMI2-NO-SHLD-NEXT: movaps %xmm0, {{[0-9]+}}(%esp)3475; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload3476; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)3477; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload3478; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)3479; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload3480; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)3481; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload3482; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)3483; X86-NO-BMI2-NO-SHLD-NEXT: movl (%esp), %eax # 4-byte Reload3484; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)3485; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload3486; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)3487; X86-NO-BMI2-NO-SHLD-NEXT: movl %edi, %ebx3488; X86-NO-BMI2-NO-SHLD-NEXT: andl $31, %ebx3489; X86-NO-BMI2-NO-SHLD-NEXT: shrl $3, %edi3490; X86-NO-BMI2-NO-SHLD-NEXT: andl $60, %edi3491; X86-NO-BMI2-NO-SHLD-NEXT: movl 68(%esp,%edi), %eax3492; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, %esi3493; X86-NO-BMI2-NO-SHLD-NEXT: movl %ebx, %ecx3494; X86-NO-BMI2-NO-SHLD-NEXT: shrl %cl, %esi3495; X86-NO-BMI2-NO-SHLD-NEXT: movl %ebx, %ecx3496; X86-NO-BMI2-NO-SHLD-NEXT: notl %ecx3497; X86-NO-BMI2-NO-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3498; X86-NO-BMI2-NO-SHLD-NEXT: movl 72(%esp,%edi), %edx3499; X86-NO-BMI2-NO-SHLD-NEXT: leal (%edx,%edx), %ebp3500; X86-NO-BMI2-NO-SHLD-NEXT: # kill: def $cl killed $cl killed $ecx3501; X86-NO-BMI2-NO-SHLD-NEXT: shll %cl, %ebp3502; X86-NO-BMI2-NO-SHLD-NEXT: orl %esi, %ebp3503; X86-NO-BMI2-NO-SHLD-NEXT: movl %ebp, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3504; X86-NO-BMI2-NO-SHLD-NEXT: movl 64(%esp,%edi), %esi3505; X86-NO-BMI2-NO-SHLD-NEXT: movl %ebx, %ecx3506; X86-NO-BMI2-NO-SHLD-NEXT: shrl %cl, %esi3507; X86-NO-BMI2-NO-SHLD-NEXT: movl %ebx, %ebp3508; X86-NO-BMI2-NO-SHLD-NEXT: xorb $31, %cl3509; X86-NO-BMI2-NO-SHLD-NEXT: movb %cl, (%esp) # 1-byte Spill3510; X86-NO-BMI2-NO-SHLD-NEXT: addl %eax, %eax3511; X86-NO-BMI2-NO-SHLD-NEXT: shll %cl, %eax3512; X86-NO-BMI2-NO-SHLD-NEXT: orl %esi, %eax3513; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3514; X86-NO-BMI2-NO-SHLD-NEXT: movl 76(%esp,%edi), %ebx3515; X86-NO-BMI2-NO-SHLD-NEXT: movl %ebx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3516; X86-NO-BMI2-NO-SHLD-NEXT: movl %ebp, %eax3517; X86-NO-BMI2-NO-SHLD-NEXT: movl %ebp, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3518; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, %ecx3519; X86-NO-BMI2-NO-SHLD-NEXT: shrl %cl, %ebx3520; X86-NO-BMI2-NO-SHLD-NEXT: movl 80(%esp,%edi), %esi3521; X86-NO-BMI2-NO-SHLD-NEXT: leal (%esi,%esi), %ebp3522; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload3523; X86-NO-BMI2-NO-SHLD-NEXT: # kill: def $cl killed $cl killed $ecx3524; X86-NO-BMI2-NO-SHLD-NEXT: shll %cl, %ebp3525; X86-NO-BMI2-NO-SHLD-NEXT: orl %ebx, %ebp3526; X86-NO-BMI2-NO-SHLD-NEXT: movl %ebp, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3527; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, %ecx3528; X86-NO-BMI2-NO-SHLD-NEXT: shrl %cl, %edx3529; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload3530; X86-NO-BMI2-NO-SHLD-NEXT: addl %eax, %eax3531; X86-NO-BMI2-NO-SHLD-NEXT: movzbl (%esp), %ecx # 1-byte Folded Reload3532; X86-NO-BMI2-NO-SHLD-NEXT: shll %cl, %eax3533; X86-NO-BMI2-NO-SHLD-NEXT: orl %edx, %eax3534; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3535; X86-NO-BMI2-NO-SHLD-NEXT: movl 84(%esp,%edi), %ebp3536; X86-NO-BMI2-NO-SHLD-NEXT: movl %ebp, %ebx3537; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload3538; X86-NO-BMI2-NO-SHLD-NEXT: movl %edx, %ecx3539; X86-NO-BMI2-NO-SHLD-NEXT: shrl %cl, %ebx3540; X86-NO-BMI2-NO-SHLD-NEXT: movl 88(%esp,%edi), %eax3541; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3542; X86-NO-BMI2-NO-SHLD-NEXT: addl %eax, %eax3543; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload3544; X86-NO-BMI2-NO-SHLD-NEXT: # kill: def $cl killed $cl killed $ecx3545; X86-NO-BMI2-NO-SHLD-NEXT: shll %cl, %eax3546; X86-NO-BMI2-NO-SHLD-NEXT: orl %ebx, %eax3547; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3548; X86-NO-BMI2-NO-SHLD-NEXT: movl %edx, %ecx3549; X86-NO-BMI2-NO-SHLD-NEXT: movl %edx, %ebx3550; X86-NO-BMI2-NO-SHLD-NEXT: shrl %cl, %esi3551; X86-NO-BMI2-NO-SHLD-NEXT: addl %ebp, %ebp3552; X86-NO-BMI2-NO-SHLD-NEXT: movzbl (%esp), %ecx # 1-byte Folded Reload3553; X86-NO-BMI2-NO-SHLD-NEXT: shll %cl, %ebp3554; X86-NO-BMI2-NO-SHLD-NEXT: orl %esi, %ebp3555; X86-NO-BMI2-NO-SHLD-NEXT: movl %ebp, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3556; X86-NO-BMI2-NO-SHLD-NEXT: movl 92(%esp,%edi), %edx3557; X86-NO-BMI2-NO-SHLD-NEXT: movl %edx, %esi3558; X86-NO-BMI2-NO-SHLD-NEXT: movl %ebx, %ecx3559; X86-NO-BMI2-NO-SHLD-NEXT: shrl %cl, %esi3560; X86-NO-BMI2-NO-SHLD-NEXT: movl 96(%esp,%edi), %eax3561; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3562; X86-NO-BMI2-NO-SHLD-NEXT: leal (%eax,%eax), %ebp3563; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload3564; X86-NO-BMI2-NO-SHLD-NEXT: # kill: def $cl killed $cl killed $ecx3565; X86-NO-BMI2-NO-SHLD-NEXT: shll %cl, %ebp3566; X86-NO-BMI2-NO-SHLD-NEXT: orl %esi, %ebp3567; X86-NO-BMI2-NO-SHLD-NEXT: movl %ebp, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3568; X86-NO-BMI2-NO-SHLD-NEXT: movl %ebx, %ecx3569; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload3570; X86-NO-BMI2-NO-SHLD-NEXT: shrl %cl, %eax3571; X86-NO-BMI2-NO-SHLD-NEXT: addl %edx, %edx3572; X86-NO-BMI2-NO-SHLD-NEXT: movzbl (%esp), %ecx # 1-byte Folded Reload3573; X86-NO-BMI2-NO-SHLD-NEXT: shll %cl, %edx3574; X86-NO-BMI2-NO-SHLD-NEXT: orl %eax, %edx3575; X86-NO-BMI2-NO-SHLD-NEXT: movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3576; X86-NO-BMI2-NO-SHLD-NEXT: movl 100(%esp,%edi), %ebp3577; X86-NO-BMI2-NO-SHLD-NEXT: movl %ebp, %esi3578; X86-NO-BMI2-NO-SHLD-NEXT: movl %ebx, %ecx3579; X86-NO-BMI2-NO-SHLD-NEXT: shrl %cl, %esi3580; X86-NO-BMI2-NO-SHLD-NEXT: movl 104(%esp,%edi), %edx3581; X86-NO-BMI2-NO-SHLD-NEXT: leal (%edx,%edx), %eax3582; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload3583; X86-NO-BMI2-NO-SHLD-NEXT: # kill: def $cl killed $cl killed $ecx3584; X86-NO-BMI2-NO-SHLD-NEXT: shll %cl, %eax3585; X86-NO-BMI2-NO-SHLD-NEXT: orl %esi, %eax3586; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3587; X86-NO-BMI2-NO-SHLD-NEXT: movl %ebx, %eax3588; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, %ecx3589; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Reload3590; X86-NO-BMI2-NO-SHLD-NEXT: shrl %cl, %esi3591; X86-NO-BMI2-NO-SHLD-NEXT: addl %ebp, %ebp3592; X86-NO-BMI2-NO-SHLD-NEXT: movzbl (%esp), %ecx # 1-byte Folded Reload3593; X86-NO-BMI2-NO-SHLD-NEXT: shll %cl, %ebp3594; X86-NO-BMI2-NO-SHLD-NEXT: orl %esi, %ebp3595; X86-NO-BMI2-NO-SHLD-NEXT: movl %ebp, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3596; X86-NO-BMI2-NO-SHLD-NEXT: movl 108(%esp,%edi), %ebx3597; X86-NO-BMI2-NO-SHLD-NEXT: movl %ebx, %esi3598; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, %ecx3599; X86-NO-BMI2-NO-SHLD-NEXT: shrl %cl, %esi3600; X86-NO-BMI2-NO-SHLD-NEXT: movl 112(%esp,%edi), %ecx3601; X86-NO-BMI2-NO-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3602; X86-NO-BMI2-NO-SHLD-NEXT: leal (%ecx,%ecx), %ebp3603; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload3604; X86-NO-BMI2-NO-SHLD-NEXT: # kill: def $cl killed $cl killed $ecx3605; X86-NO-BMI2-NO-SHLD-NEXT: shll %cl, %ebp3606; X86-NO-BMI2-NO-SHLD-NEXT: orl %esi, %ebp3607; X86-NO-BMI2-NO-SHLD-NEXT: movl %ebp, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3608; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, %ecx3609; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, %ebp3610; X86-NO-BMI2-NO-SHLD-NEXT: shrl %cl, %edx3611; X86-NO-BMI2-NO-SHLD-NEXT: addl %ebx, %ebx3612; X86-NO-BMI2-NO-SHLD-NEXT: movzbl (%esp), %ecx # 1-byte Folded Reload3613; X86-NO-BMI2-NO-SHLD-NEXT: shll %cl, %ebx3614; X86-NO-BMI2-NO-SHLD-NEXT: orl %edx, %ebx3615; X86-NO-BMI2-NO-SHLD-NEXT: movl 116(%esp,%edi), %esi3616; X86-NO-BMI2-NO-SHLD-NEXT: movl %esi, %eax3617; X86-NO-BMI2-NO-SHLD-NEXT: movl %ebp, %edx3618; X86-NO-BMI2-NO-SHLD-NEXT: movl %edx, %ecx3619; X86-NO-BMI2-NO-SHLD-NEXT: shrl %cl, %eax3620; X86-NO-BMI2-NO-SHLD-NEXT: movl 120(%esp,%edi), %ecx3621; X86-NO-BMI2-NO-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3622; X86-NO-BMI2-NO-SHLD-NEXT: leal (%ecx,%ecx), %ebp3623; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload3624; X86-NO-BMI2-NO-SHLD-NEXT: # kill: def $cl killed $cl killed $ecx3625; X86-NO-BMI2-NO-SHLD-NEXT: shll %cl, %ebp3626; X86-NO-BMI2-NO-SHLD-NEXT: orl %eax, %ebp3627; X86-NO-BMI2-NO-SHLD-NEXT: movl %edx, %eax3628; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, %ecx3629; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload3630; X86-NO-BMI2-NO-SHLD-NEXT: shrl %cl, %edx3631; X86-NO-BMI2-NO-SHLD-NEXT: addl %esi, %esi3632; X86-NO-BMI2-NO-SHLD-NEXT: movb (%esp), %ch # 1-byte Reload3633; X86-NO-BMI2-NO-SHLD-NEXT: movb %ch, %cl3634; X86-NO-BMI2-NO-SHLD-NEXT: shll %cl, %esi3635; X86-NO-BMI2-NO-SHLD-NEXT: orl %edx, %esi3636; X86-NO-BMI2-NO-SHLD-NEXT: movb %al, %cl3637; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload3638; X86-NO-BMI2-NO-SHLD-NEXT: shrl %cl, %eax3639; X86-NO-BMI2-NO-SHLD-NEXT: movl 124(%esp,%edi), %edi3640; X86-NO-BMI2-NO-SHLD-NEXT: leal (%edi,%edi), %edx3641; X86-NO-BMI2-NO-SHLD-NEXT: movb %ch, %cl3642; X86-NO-BMI2-NO-SHLD-NEXT: shll %cl, %edx3643; X86-NO-BMI2-NO-SHLD-NEXT: orl %eax, %edx3644; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload3645; X86-NO-BMI2-NO-SHLD-NEXT: # kill: def $cl killed $cl killed $ecx3646; X86-NO-BMI2-NO-SHLD-NEXT: shrl %cl, %edi3647; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[0-9]+}}(%esp), %eax3648; X86-NO-BMI2-NO-SHLD-NEXT: movl %edi, 60(%eax)3649; X86-NO-BMI2-NO-SHLD-NEXT: movl %edx, 56(%eax)3650; X86-NO-BMI2-NO-SHLD-NEXT: movl %esi, 48(%eax)3651; X86-NO-BMI2-NO-SHLD-NEXT: movl %ebp, 52(%eax)3652; X86-NO-BMI2-NO-SHLD-NEXT: movl %ebx, 40(%eax)3653; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload3654; X86-NO-BMI2-NO-SHLD-NEXT: movl %ecx, 44(%eax)3655; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload3656; X86-NO-BMI2-NO-SHLD-NEXT: movl %ecx, 32(%eax)3657; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload3658; X86-NO-BMI2-NO-SHLD-NEXT: movl %ecx, 36(%eax)3659; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload3660; X86-NO-BMI2-NO-SHLD-NEXT: movl %ecx, 24(%eax)3661; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload3662; X86-NO-BMI2-NO-SHLD-NEXT: movl %ecx, 28(%eax)3663; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload3664; X86-NO-BMI2-NO-SHLD-NEXT: movl %ecx, 16(%eax)3665; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload3666; X86-NO-BMI2-NO-SHLD-NEXT: movl %ecx, 20(%eax)3667; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload3668; X86-NO-BMI2-NO-SHLD-NEXT: movl %ecx, 8(%eax)3669; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload3670; X86-NO-BMI2-NO-SHLD-NEXT: movl %ecx, 12(%eax)3671; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload3672; X86-NO-BMI2-NO-SHLD-NEXT: movl %ecx, (%eax)3673; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload3674; X86-NO-BMI2-NO-SHLD-NEXT: movl %ecx, 4(%eax)3675; X86-NO-BMI2-NO-SHLD-NEXT: addl $204, %esp3676; X86-NO-BMI2-NO-SHLD-NEXT: popl %esi3677; X86-NO-BMI2-NO-SHLD-NEXT: popl %edi3678; X86-NO-BMI2-NO-SHLD-NEXT: popl %ebx3679; X86-NO-BMI2-NO-SHLD-NEXT: popl %ebp3680; X86-NO-BMI2-NO-SHLD-NEXT: retl3681;3682; X86-NO-BMI2-HAVE-SHLD-LABEL: lshr_64bytes:3683; X86-NO-BMI2-HAVE-SHLD: # %bb.0:3684; X86-NO-BMI2-HAVE-SHLD-NEXT: pushl %ebp3685; X86-NO-BMI2-HAVE-SHLD-NEXT: pushl %ebx3686; X86-NO-BMI2-HAVE-SHLD-NEXT: pushl %edi3687; X86-NO-BMI2-HAVE-SHLD-NEXT: pushl %esi3688; X86-NO-BMI2-HAVE-SHLD-NEXT: subl $188, %esp3689; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[0-9]+}}(%esp), %eax3690; X86-NO-BMI2-HAVE-SHLD-NEXT: movl (%eax), %ecx3691; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3692; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 4(%eax), %ecx3693; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3694; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 8(%eax), %ecx3695; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3696; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 12(%eax), %ecx3697; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3698; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 16(%eax), %ecx3699; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3700; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 20(%eax), %ecx3701; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3702; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 24(%eax), %ecx3703; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3704; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 28(%eax), %ecx3705; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3706; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 32(%eax), %ecx3707; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3708; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 36(%eax), %ecx3709; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ecx, (%esp) # 4-byte Spill3710; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 40(%eax), %ebp3711; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 44(%eax), %ebx3712; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 48(%eax), %edi3713; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 52(%eax), %esi3714; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 56(%eax), %edx3715; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 60(%eax), %ecx3716; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[0-9]+}}(%esp), %eax3717; X86-NO-BMI2-HAVE-SHLD-NEXT: movl (%eax), %eax3718; X86-NO-BMI2-HAVE-SHLD-NEXT: xorps %xmm0, %xmm03719; X86-NO-BMI2-HAVE-SHLD-NEXT: movaps %xmm0, {{[0-9]+}}(%esp)3720; X86-NO-BMI2-HAVE-SHLD-NEXT: movaps %xmm0, {{[0-9]+}}(%esp)3721; X86-NO-BMI2-HAVE-SHLD-NEXT: movaps %xmm0, {{[0-9]+}}(%esp)3722; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)3723; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %edx, {{[0-9]+}}(%esp)3724; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %esi, {{[0-9]+}}(%esp)3725; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %edi, {{[0-9]+}}(%esp)3726; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ebx, {{[0-9]+}}(%esp)3727; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ebp, {{[0-9]+}}(%esp)3728; X86-NO-BMI2-HAVE-SHLD-NEXT: movl (%esp), %ecx # 4-byte Reload3729; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)3730; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload3731; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)3732; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload3733; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)3734; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload3735; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)3736; X86-NO-BMI2-HAVE-SHLD-NEXT: movaps %xmm0, {{[0-9]+}}(%esp)3737; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload3738; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)3739; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload3740; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)3741; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload3742; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)3743; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload3744; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)3745; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload3746; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)3747; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload3748; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)3749; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %eax, %ecx3750; X86-NO-BMI2-HAVE-SHLD-NEXT: andl $31, %ecx3751; X86-NO-BMI2-HAVE-SHLD-NEXT: shrl $3, %eax3752; X86-NO-BMI2-HAVE-SHLD-NEXT: andl $60, %eax3753; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 56(%esp,%eax), %esi3754; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 52(%esp,%eax), %edx3755; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3756; X86-NO-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %esi, %edx3757; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3758; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 64(%esp,%eax), %ebx3759; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 60(%esp,%eax), %edx3760; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %edx, %edi3761; X86-NO-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %ebx, %edi3762; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3763; X86-NO-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %edx, %esi3764; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3765; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 72(%esp,%eax), %edi3766; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 68(%esp,%eax), %edx3767; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %edx, %esi3768; X86-NO-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %edi, %esi3769; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3770; X86-NO-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %edx, %ebx3771; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ebx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3772; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 80(%esp,%eax), %ebx3773; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 76(%esp,%eax), %edx3774; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %edx, %esi3775; X86-NO-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %ebx, %esi3776; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3777; X86-NO-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %edx, %edi3778; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3779; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 88(%esp,%eax), %edi3780; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 84(%esp,%eax), %edx3781; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %edx, %esi3782; X86-NO-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %edi, %esi3783; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3784; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %edi, %esi3785; X86-NO-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %edx, %ebx3786; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ebx, (%esp) # 4-byte Spill3787; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 96(%esp,%eax), %edi3788; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 92(%esp,%eax), %edx3789; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %edx, %ebx3790; X86-NO-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %edi, %ebx3791; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ebx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3792; X86-NO-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %edx, %esi3793; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3794; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 104(%esp,%eax), %esi3795; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 100(%esp,%eax), %edx3796; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %edx, %ebx3797; X86-NO-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %esi, %ebx3798; X86-NO-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %edx, %edi3799; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 48(%esp,%eax), %ebp3800; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 108(%esp,%eax), %edx3801; X86-NO-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %edx, %esi3802; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[0-9]+}}(%esp), %eax3803; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %esi, 56(%eax)3804; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Reload3805; X86-NO-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %esi, %ebp3806; X86-NO-BMI2-HAVE-SHLD-NEXT: # kill: def $cl killed $cl killed $ecx3807; X86-NO-BMI2-HAVE-SHLD-NEXT: shrl %cl, %edx3808; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %edx, 60(%eax)3809; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %edi, 48(%eax)3810; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ebx, 52(%eax)3811; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload3812; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ecx, 40(%eax)3813; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload3814; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ecx, 44(%eax)3815; X86-NO-BMI2-HAVE-SHLD-NEXT: movl (%esp), %ecx # 4-byte Reload3816; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ecx, 32(%eax)3817; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload3818; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ecx, 36(%eax)3819; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload3820; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ecx, 24(%eax)3821; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload3822; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ecx, 28(%eax)3823; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload3824; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ecx, 16(%eax)3825; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload3826; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ecx, 20(%eax)3827; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload3828; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ecx, 8(%eax)3829; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload3830; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ecx, 12(%eax)3831; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ebp, (%eax)3832; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload3833; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ecx, 4(%eax)3834; X86-NO-BMI2-HAVE-SHLD-NEXT: addl $188, %esp3835; X86-NO-BMI2-HAVE-SHLD-NEXT: popl %esi3836; X86-NO-BMI2-HAVE-SHLD-NEXT: popl %edi3837; X86-NO-BMI2-HAVE-SHLD-NEXT: popl %ebx3838; X86-NO-BMI2-HAVE-SHLD-NEXT: popl %ebp3839; X86-NO-BMI2-HAVE-SHLD-NEXT: retl3840;3841; X86-HAVE-BMI2-NO-SHLD-LABEL: lshr_64bytes:3842; X86-HAVE-BMI2-NO-SHLD: # %bb.0:3843; X86-HAVE-BMI2-NO-SHLD-NEXT: pushl %ebp3844; X86-HAVE-BMI2-NO-SHLD-NEXT: pushl %ebx3845; X86-HAVE-BMI2-NO-SHLD-NEXT: pushl %edi3846; X86-HAVE-BMI2-NO-SHLD-NEXT: pushl %esi3847; X86-HAVE-BMI2-NO-SHLD-NEXT: subl $204, %esp3848; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[0-9]+}}(%esp), %eax3849; X86-HAVE-BMI2-NO-SHLD-NEXT: movl (%eax), %ecx3850; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3851; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 4(%eax), %ecx3852; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3853; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 8(%eax), %ecx3854; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3855; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 12(%eax), %ecx3856; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3857; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 16(%eax), %ecx3858; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3859; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 20(%eax), %ecx3860; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3861; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 24(%eax), %ecx3862; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3863; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 28(%eax), %ecx3864; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3865; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 32(%eax), %ecx3866; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3867; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 36(%eax), %ecx3868; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3869; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 40(%eax), %ecx3870; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3871; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 44(%eax), %ebp3872; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 48(%eax), %edi3873; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 52(%eax), %esi3874; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 56(%eax), %edx3875; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 60(%eax), %ecx3876; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[0-9]+}}(%esp), %eax3877; X86-HAVE-BMI2-NO-SHLD-NEXT: movl (%eax), %ebx3878; X86-HAVE-BMI2-NO-SHLD-NEXT: xorps %xmm0, %xmm03879; X86-HAVE-BMI2-NO-SHLD-NEXT: movaps %xmm0, {{[0-9]+}}(%esp)3880; X86-HAVE-BMI2-NO-SHLD-NEXT: movaps %xmm0, {{[0-9]+}}(%esp)3881; X86-HAVE-BMI2-NO-SHLD-NEXT: movaps %xmm0, {{[0-9]+}}(%esp)3882; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)3883; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %edx, {{[0-9]+}}(%esp)3884; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %esi, {{[0-9]+}}(%esp)3885; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %edi, {{[0-9]+}}(%esp)3886; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ebp, {{[0-9]+}}(%esp)3887; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload3888; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)3889; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload3890; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)3891; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload3892; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)3893; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload3894; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)3895; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload3896; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)3897; X86-HAVE-BMI2-NO-SHLD-NEXT: movaps %xmm0, {{[0-9]+}}(%esp)3898; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload3899; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)3900; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload3901; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)3902; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload3903; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)3904; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload3905; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)3906; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload3907; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)3908; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload3909; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)3910; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ebx, %ecx3911; X86-HAVE-BMI2-NO-SHLD-NEXT: andl $31, %ecx3912; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, %edx3913; X86-HAVE-BMI2-NO-SHLD-NEXT: shrl $3, %ebx3914; X86-HAVE-BMI2-NO-SHLD-NEXT: andl $60, %ebx3915; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 68(%esp,%ebx), %edi3916; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 72(%esp,%ebx), %esi3917; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3918; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, %eax3919; X86-HAVE-BMI2-NO-SHLD-NEXT: notl %eax3920; X86-HAVE-BMI2-NO-SHLD-NEXT: leal (%esi,%esi), %ebp3921; X86-HAVE-BMI2-NO-SHLD-NEXT: shlxl %eax, %ebp, %esi3922; X86-HAVE-BMI2-NO-SHLD-NEXT: shrxl %edx, %edi, %ebp3923; X86-HAVE-BMI2-NO-SHLD-NEXT: orl %ebp, %esi3924; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3925; X86-HAVE-BMI2-NO-SHLD-NEXT: xorb $31, %cl3926; X86-HAVE-BMI2-NO-SHLD-NEXT: addl %edi, %edi3927; X86-HAVE-BMI2-NO-SHLD-NEXT: shlxl %ecx, %edi, %esi3928; X86-HAVE-BMI2-NO-SHLD-NEXT: shrxl %edx, 64(%esp,%ebx), %edi3929; X86-HAVE-BMI2-NO-SHLD-NEXT: orl %edi, %esi3930; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3931; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 80(%esp,%ebx), %esi3932; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3933; X86-HAVE-BMI2-NO-SHLD-NEXT: leal (%esi,%esi), %ebp3934; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, %edi3935; X86-HAVE-BMI2-NO-SHLD-NEXT: shlxl %eax, %ebp, %eax3936; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 76(%esp,%ebx), %ebp3937; X86-HAVE-BMI2-NO-SHLD-NEXT: shrxl %edx, %ebp, %esi3938; X86-HAVE-BMI2-NO-SHLD-NEXT: orl %esi, %eax3939; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3940; X86-HAVE-BMI2-NO-SHLD-NEXT: shrxl %edx, {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Folded Reload3941; X86-HAVE-BMI2-NO-SHLD-NEXT: addl %ebp, %ebp3942; X86-HAVE-BMI2-NO-SHLD-NEXT: shlxl %ecx, %ebp, %eax3943; X86-HAVE-BMI2-NO-SHLD-NEXT: orl %esi, %eax3944; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3945; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 88(%esp,%ebx), %eax3946; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3947; X86-HAVE-BMI2-NO-SHLD-NEXT: leal (%eax,%eax), %ebp3948; X86-HAVE-BMI2-NO-SHLD-NEXT: shlxl %edi, %ebp, %eax3949; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 84(%esp,%ebx), %ebp3950; X86-HAVE-BMI2-NO-SHLD-NEXT: shrxl %edx, %ebp, %esi3951; X86-HAVE-BMI2-NO-SHLD-NEXT: orl %esi, %eax3952; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3953; X86-HAVE-BMI2-NO-SHLD-NEXT: shrxl %edx, {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Folded Reload3954; X86-HAVE-BMI2-NO-SHLD-NEXT: addl %ebp, %ebp3955; X86-HAVE-BMI2-NO-SHLD-NEXT: shlxl %ecx, %ebp, %eax3956; X86-HAVE-BMI2-NO-SHLD-NEXT: orl %esi, %eax3957; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3958; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 96(%esp,%ebx), %eax3959; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3960; X86-HAVE-BMI2-NO-SHLD-NEXT: leal (%eax,%eax), %esi3961; X86-HAVE-BMI2-NO-SHLD-NEXT: shlxl %edi, %esi, %eax3962; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 92(%esp,%ebx), %esi3963; X86-HAVE-BMI2-NO-SHLD-NEXT: shrxl %edx, %esi, %ebp3964; X86-HAVE-BMI2-NO-SHLD-NEXT: orl %ebp, %eax3965; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3966; X86-HAVE-BMI2-NO-SHLD-NEXT: shrxl %edx, {{[-0-9]+}}(%e{{[sb]}}p), %ebp # 4-byte Folded Reload3967; X86-HAVE-BMI2-NO-SHLD-NEXT: addl %esi, %esi3968; X86-HAVE-BMI2-NO-SHLD-NEXT: shlxl %ecx, %esi, %eax3969; X86-HAVE-BMI2-NO-SHLD-NEXT: orl %ebp, %eax3970; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3971; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 104(%esp,%ebx), %eax3972; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3973; X86-HAVE-BMI2-NO-SHLD-NEXT: leal (%eax,%eax), %ebp3974; X86-HAVE-BMI2-NO-SHLD-NEXT: shlxl %edi, %ebp, %eax3975; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 100(%esp,%ebx), %ebp3976; X86-HAVE-BMI2-NO-SHLD-NEXT: shrxl %edx, %ebp, %esi3977; X86-HAVE-BMI2-NO-SHLD-NEXT: orl %esi, %eax3978; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3979; X86-HAVE-BMI2-NO-SHLD-NEXT: shrxl %edx, {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Folded Reload3980; X86-HAVE-BMI2-NO-SHLD-NEXT: addl %ebp, %ebp3981; X86-HAVE-BMI2-NO-SHLD-NEXT: shlxl %ecx, %ebp, %eax3982; X86-HAVE-BMI2-NO-SHLD-NEXT: orl %esi, %eax3983; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3984; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 112(%esp,%ebx), %eax3985; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3986; X86-HAVE-BMI2-NO-SHLD-NEXT: leal (%eax,%eax), %esi3987; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %edi, %eax3988; X86-HAVE-BMI2-NO-SHLD-NEXT: shlxl %edi, %esi, %ebp3989; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 108(%esp,%ebx), %esi3990; X86-HAVE-BMI2-NO-SHLD-NEXT: shrxl %edx, %esi, %edi3991; X86-HAVE-BMI2-NO-SHLD-NEXT: orl %edi, %ebp3992; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ebp, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3993; X86-HAVE-BMI2-NO-SHLD-NEXT: shrxl %edx, {{[-0-9]+}}(%e{{[sb]}}p), %edi # 4-byte Folded Reload3994; X86-HAVE-BMI2-NO-SHLD-NEXT: addl %esi, %esi3995; X86-HAVE-BMI2-NO-SHLD-NEXT: shlxl %ecx, %esi, %esi3996; X86-HAVE-BMI2-NO-SHLD-NEXT: orl %edi, %esi3997; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill3998; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 120(%esp,%ebx), %edi3999; X86-HAVE-BMI2-NO-SHLD-NEXT: leal (%edi,%edi), %ebp4000; X86-HAVE-BMI2-NO-SHLD-NEXT: shlxl %eax, %ebp, %eax4001; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 116(%esp,%ebx), %ebp4002; X86-HAVE-BMI2-NO-SHLD-NEXT: shrxl %edx, %ebp, %esi4003; X86-HAVE-BMI2-NO-SHLD-NEXT: orl %esi, %eax4004; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill4005; X86-HAVE-BMI2-NO-SHLD-NEXT: shrxl %edx, {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Folded Reload4006; X86-HAVE-BMI2-NO-SHLD-NEXT: addl %ebp, %ebp4007; X86-HAVE-BMI2-NO-SHLD-NEXT: shlxl %ecx, %ebp, %ebp4008; X86-HAVE-BMI2-NO-SHLD-NEXT: orl %esi, %ebp4009; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 124(%esp,%ebx), %eax4010; X86-HAVE-BMI2-NO-SHLD-NEXT: leal (%eax,%eax), %esi4011; X86-HAVE-BMI2-NO-SHLD-NEXT: shlxl %ecx, %esi, %esi4012; X86-HAVE-BMI2-NO-SHLD-NEXT: shrxl %edx, %edi, %edi4013; X86-HAVE-BMI2-NO-SHLD-NEXT: orl %edi, %esi4014; X86-HAVE-BMI2-NO-SHLD-NEXT: shrxl %edx, %eax, %edx4015; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[0-9]+}}(%esp), %eax4016; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %edx, 60(%eax)4017; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %esi, 56(%eax)4018; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ebp, 48(%eax)4019; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload4020; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, 52(%eax)4021; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload4022; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, 40(%eax)4023; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload4024; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, 44(%eax)4025; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload4026; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, 32(%eax)4027; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload4028; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, 36(%eax)4029; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload4030; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, 24(%eax)4031; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload4032; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, 28(%eax)4033; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload4034; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, 16(%eax)4035; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload4036; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, 20(%eax)4037; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload4038; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, 8(%eax)4039; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload4040; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, 12(%eax)4041; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload4042; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, (%eax)4043; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload4044; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, 4(%eax)4045; X86-HAVE-BMI2-NO-SHLD-NEXT: addl $204, %esp4046; X86-HAVE-BMI2-NO-SHLD-NEXT: popl %esi4047; X86-HAVE-BMI2-NO-SHLD-NEXT: popl %edi4048; X86-HAVE-BMI2-NO-SHLD-NEXT: popl %ebx4049; X86-HAVE-BMI2-NO-SHLD-NEXT: popl %ebp4050; X86-HAVE-BMI2-NO-SHLD-NEXT: retl4051;4052; X86-HAVE-BMI2-HAVE-SHLD-LABEL: lshr_64bytes:4053; X86-HAVE-BMI2-HAVE-SHLD: # %bb.0:4054; X86-HAVE-BMI2-HAVE-SHLD-NEXT: pushl %ebp4055; X86-HAVE-BMI2-HAVE-SHLD-NEXT: pushl %ebx4056; X86-HAVE-BMI2-HAVE-SHLD-NEXT: pushl %edi4057; X86-HAVE-BMI2-HAVE-SHLD-NEXT: pushl %esi4058; X86-HAVE-BMI2-HAVE-SHLD-NEXT: subl $188, %esp4059; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[0-9]+}}(%esp), %eax4060; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl (%eax), %ecx4061; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill4062; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 4(%eax), %ecx4063; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill4064; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 8(%eax), %ecx4065; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill4066; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 12(%eax), %ecx4067; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill4068; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 16(%eax), %ecx4069; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill4070; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 20(%eax), %ecx4071; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill4072; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 24(%eax), %ecx4073; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill4074; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 28(%eax), %ecx4075; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill4076; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 32(%eax), %ecx4077; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill4078; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 36(%eax), %ecx4079; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ecx, (%esp) # 4-byte Spill4080; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 40(%eax), %ebp4081; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 44(%eax), %ebx4082; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 48(%eax), %edi4083; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 52(%eax), %esi4084; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 56(%eax), %edx4085; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 60(%eax), %ecx4086; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[0-9]+}}(%esp), %eax4087; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl (%eax), %eax4088; X86-HAVE-BMI2-HAVE-SHLD-NEXT: xorps %xmm0, %xmm04089; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movaps %xmm0, {{[0-9]+}}(%esp)4090; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movaps %xmm0, {{[0-9]+}}(%esp)4091; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movaps %xmm0, {{[0-9]+}}(%esp)4092; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)4093; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edx, {{[0-9]+}}(%esp)4094; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %esi, {{[0-9]+}}(%esp)4095; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edi, {{[0-9]+}}(%esp)4096; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ebx, {{[0-9]+}}(%esp)4097; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ebp, {{[0-9]+}}(%esp)4098; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl (%esp), %ecx # 4-byte Reload4099; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)4100; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload4101; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)4102; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload4103; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)4104; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload4105; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)4106; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movaps %xmm0, {{[0-9]+}}(%esp)4107; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload4108; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)4109; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload4110; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)4111; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload4112; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)4113; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload4114; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)4115; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload4116; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)4117; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload4118; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)4119; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %eax, %ecx4120; X86-HAVE-BMI2-HAVE-SHLD-NEXT: andl $31, %ecx4121; X86-HAVE-BMI2-HAVE-SHLD-NEXT: shrl $3, %eax4122; X86-HAVE-BMI2-HAVE-SHLD-NEXT: andl $60, %eax4123; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 56(%esp,%eax), %edi4124; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 52(%esp,%eax), %edx4125; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill4126; X86-HAVE-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %edi, %edx4127; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill4128; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 64(%esp,%eax), %ebx4129; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 60(%esp,%eax), %edx4130; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edx, %esi4131; X86-HAVE-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %ebx, %esi4132; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill4133; X86-HAVE-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %edx, %edi4134; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill4135; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 72(%esp,%eax), %edi4136; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 68(%esp,%eax), %edx4137; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edx, %esi4138; X86-HAVE-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %edi, %esi4139; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill4140; X86-HAVE-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %edx, %ebx4141; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ebx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill4142; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 80(%esp,%eax), %ebx4143; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 76(%esp,%eax), %edx4144; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edx, %esi4145; X86-HAVE-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %ebx, %esi4146; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill4147; X86-HAVE-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %edx, %edi4148; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill4149; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 88(%esp,%eax), %ebp4150; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 84(%esp,%eax), %edx4151; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edx, %esi4152; X86-HAVE-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %ebp, %esi4153; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill4154; X86-HAVE-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %edx, %ebx4155; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ebx, (%esp) # 4-byte Spill4156; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 96(%esp,%eax), %edi4157; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 92(%esp,%eax), %edx4158; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edx, %esi4159; X86-HAVE-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %edi, %esi4160; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill4161; X86-HAVE-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %edx, %ebp4162; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 104(%esp,%eax), %edx4163; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 100(%esp,%eax), %ebx4164; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ebx, %esi4165; X86-HAVE-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %edx, %esi4166; X86-HAVE-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %ebx, %edi4167; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 48(%esp,%eax), %ebx4168; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 108(%esp,%eax), %eax4169; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill4170; X86-HAVE-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %eax, %edx4171; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[0-9]+}}(%esp), %eax4172; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edx, 56(%eax)4173; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edi, 48(%eax)4174; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %esi, 52(%eax)4175; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ebp, 40(%eax)4176; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload4177; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edx, 44(%eax)4178; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl (%esp), %edx # 4-byte Reload4179; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edx, 32(%eax)4180; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload4181; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edx, 36(%eax)4182; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload4183; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edx, 24(%eax)4184; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload4185; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edx, 28(%eax)4186; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload4187; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edx, 16(%eax)4188; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload4189; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edx, 20(%eax)4190; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload4191; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edx, 8(%eax)4192; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload4193; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edx, 12(%eax)4194; X86-HAVE-BMI2-HAVE-SHLD-NEXT: shrxl %ecx, {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Folded Reload4195; X86-HAVE-BMI2-HAVE-SHLD-NEXT: # kill: def $cl killed $cl killed $ecx4196; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Reload4197; X86-HAVE-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %esi, %ebx4198; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ebx, (%eax)4199; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload4200; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ecx, 4(%eax)4201; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edx, 60(%eax)4202; X86-HAVE-BMI2-HAVE-SHLD-NEXT: addl $188, %esp4203; X86-HAVE-BMI2-HAVE-SHLD-NEXT: popl %esi4204; X86-HAVE-BMI2-HAVE-SHLD-NEXT: popl %edi4205; X86-HAVE-BMI2-HAVE-SHLD-NEXT: popl %ebx4206; X86-HAVE-BMI2-HAVE-SHLD-NEXT: popl %ebp4207; X86-HAVE-BMI2-HAVE-SHLD-NEXT: retl4208 %src = load i512, ptr %src.ptr, align 14209 %bitOff = load i512, ptr %bitOff.ptr, align 14210 %res = lshr i512 %src, %bitOff4211 store i512 %res, ptr %dst, align 14212 ret void4213}4214define void @shl_64bytes(ptr %src.ptr, ptr %bitOff.ptr, ptr %dst) nounwind {4215; X64-NO-BMI2-NO-SHLD-LABEL: shl_64bytes:4216; X64-NO-BMI2-NO-SHLD: # %bb.0:4217; X64-NO-BMI2-NO-SHLD-NEXT: pushq %r154218; X64-NO-BMI2-NO-SHLD-NEXT: pushq %r144219; X64-NO-BMI2-NO-SHLD-NEXT: pushq %r134220; X64-NO-BMI2-NO-SHLD-NEXT: pushq %r124221; X64-NO-BMI2-NO-SHLD-NEXT: pushq %rbx4222; X64-NO-BMI2-NO-SHLD-NEXT: movq (%rdi), %rax4223; X64-NO-BMI2-NO-SHLD-NEXT: movq 8(%rdi), %rcx4224; X64-NO-BMI2-NO-SHLD-NEXT: movq 16(%rdi), %r84225; X64-NO-BMI2-NO-SHLD-NEXT: movq 24(%rdi), %r94226; X64-NO-BMI2-NO-SHLD-NEXT: movq 32(%rdi), %r104227; X64-NO-BMI2-NO-SHLD-NEXT: movq 40(%rdi), %r114228; X64-NO-BMI2-NO-SHLD-NEXT: movq 48(%rdi), %rbx4229; X64-NO-BMI2-NO-SHLD-NEXT: movq 56(%rdi), %rdi4230; X64-NO-BMI2-NO-SHLD-NEXT: movl (%rsi), %esi4231; X64-NO-BMI2-NO-SHLD-NEXT: xorps %xmm0, %xmm04232; X64-NO-BMI2-NO-SHLD-NEXT: movaps %xmm0, -{{[0-9]+}}(%rsp)4233; X64-NO-BMI2-NO-SHLD-NEXT: movaps %xmm0, -{{[0-9]+}}(%rsp)4234; X64-NO-BMI2-NO-SHLD-NEXT: movaps %xmm0, -{{[0-9]+}}(%rsp)4235; X64-NO-BMI2-NO-SHLD-NEXT: movaps %xmm0, -{{[0-9]+}}(%rsp)4236; X64-NO-BMI2-NO-SHLD-NEXT: movq %rdi, -{{[0-9]+}}(%rsp)4237; X64-NO-BMI2-NO-SHLD-NEXT: movq %rbx, -{{[0-9]+}}(%rsp)4238; X64-NO-BMI2-NO-SHLD-NEXT: movq %r11, -{{[0-9]+}}(%rsp)4239; X64-NO-BMI2-NO-SHLD-NEXT: movq %r10, -{{[0-9]+}}(%rsp)4240; X64-NO-BMI2-NO-SHLD-NEXT: movq %r9, -{{[0-9]+}}(%rsp)4241; X64-NO-BMI2-NO-SHLD-NEXT: movq %r8, -{{[0-9]+}}(%rsp)4242; X64-NO-BMI2-NO-SHLD-NEXT: movq %rcx, -{{[0-9]+}}(%rsp)4243; X64-NO-BMI2-NO-SHLD-NEXT: movq %rax, -{{[0-9]+}}(%rsp)4244; X64-NO-BMI2-NO-SHLD-NEXT: movl %esi, %eax4245; X64-NO-BMI2-NO-SHLD-NEXT: andl $63, %eax4246; X64-NO-BMI2-NO-SHLD-NEXT: shrl $3, %esi4247; X64-NO-BMI2-NO-SHLD-NEXT: andl $56, %esi4248; X64-NO-BMI2-NO-SHLD-NEXT: negl %esi4249; X64-NO-BMI2-NO-SHLD-NEXT: movslq %esi, %rbx4250; X64-NO-BMI2-NO-SHLD-NEXT: movq -64(%rsp,%rbx), %r84251; X64-NO-BMI2-NO-SHLD-NEXT: movq -56(%rsp,%rbx), %rdi4252; X64-NO-BMI2-NO-SHLD-NEXT: movq %rdi, %r104253; X64-NO-BMI2-NO-SHLD-NEXT: movl %eax, %ecx4254; X64-NO-BMI2-NO-SHLD-NEXT: shlq %cl, %r104255; X64-NO-BMI2-NO-SHLD-NEXT: movl %eax, %esi4256; X64-NO-BMI2-NO-SHLD-NEXT: xorb $63, %sil4257; X64-NO-BMI2-NO-SHLD-NEXT: movq %r8, %r94258; X64-NO-BMI2-NO-SHLD-NEXT: shrq %r94259; X64-NO-BMI2-NO-SHLD-NEXT: movl %esi, %ecx4260; X64-NO-BMI2-NO-SHLD-NEXT: shrq %cl, %r94261; X64-NO-BMI2-NO-SHLD-NEXT: orq %r10, %r94262; X64-NO-BMI2-NO-SHLD-NEXT: movq -40(%rsp,%rbx), %r104263; X64-NO-BMI2-NO-SHLD-NEXT: movq %r10, %r144264; X64-NO-BMI2-NO-SHLD-NEXT: movl %eax, %ecx4265; X64-NO-BMI2-NO-SHLD-NEXT: shlq %cl, %r144266; X64-NO-BMI2-NO-SHLD-NEXT: movq -48(%rsp,%rbx), %r154267; X64-NO-BMI2-NO-SHLD-NEXT: movq %r15, %r114268; X64-NO-BMI2-NO-SHLD-NEXT: shrq %r114269; X64-NO-BMI2-NO-SHLD-NEXT: movl %esi, %ecx4270; X64-NO-BMI2-NO-SHLD-NEXT: shrq %cl, %r114271; X64-NO-BMI2-NO-SHLD-NEXT: orq %r14, %r114272; X64-NO-BMI2-NO-SHLD-NEXT: movl %eax, %ecx4273; X64-NO-BMI2-NO-SHLD-NEXT: shlq %cl, %r154274; X64-NO-BMI2-NO-SHLD-NEXT: shrq %rdi4275; X64-NO-BMI2-NO-SHLD-NEXT: movl %esi, %ecx4276; X64-NO-BMI2-NO-SHLD-NEXT: shrq %cl, %rdi4277; X64-NO-BMI2-NO-SHLD-NEXT: orq %r15, %rdi4278; X64-NO-BMI2-NO-SHLD-NEXT: movq -24(%rsp,%rbx), %r144279; X64-NO-BMI2-NO-SHLD-NEXT: movq %r14, %r124280; X64-NO-BMI2-NO-SHLD-NEXT: movl %eax, %ecx4281; X64-NO-BMI2-NO-SHLD-NEXT: shlq %cl, %r124282; X64-NO-BMI2-NO-SHLD-NEXT: movq -32(%rsp,%rbx), %r134283; X64-NO-BMI2-NO-SHLD-NEXT: movq %r13, %r154284; X64-NO-BMI2-NO-SHLD-NEXT: shrq %r154285; X64-NO-BMI2-NO-SHLD-NEXT: movl %esi, %ecx4286; X64-NO-BMI2-NO-SHLD-NEXT: shrq %cl, %r154287; X64-NO-BMI2-NO-SHLD-NEXT: orq %r12, %r154288; X64-NO-BMI2-NO-SHLD-NEXT: movl %eax, %ecx4289; X64-NO-BMI2-NO-SHLD-NEXT: shlq %cl, %r134290; X64-NO-BMI2-NO-SHLD-NEXT: shrq %r104291; X64-NO-BMI2-NO-SHLD-NEXT: movl %esi, %ecx4292; X64-NO-BMI2-NO-SHLD-NEXT: shrq %cl, %r104293; X64-NO-BMI2-NO-SHLD-NEXT: orq %r13, %r104294; X64-NO-BMI2-NO-SHLD-NEXT: movq -8(%rsp,%rbx), %r124295; X64-NO-BMI2-NO-SHLD-NEXT: movl %eax, %ecx4296; X64-NO-BMI2-NO-SHLD-NEXT: shlq %cl, %r124297; X64-NO-BMI2-NO-SHLD-NEXT: movq -16(%rsp,%rbx), %rbx4298; X64-NO-BMI2-NO-SHLD-NEXT: movq %rbx, %r134299; X64-NO-BMI2-NO-SHLD-NEXT: shrq %r134300; X64-NO-BMI2-NO-SHLD-NEXT: movl %esi, %ecx4301; X64-NO-BMI2-NO-SHLD-NEXT: shrq %cl, %r134302; X64-NO-BMI2-NO-SHLD-NEXT: orq %r12, %r134303; X64-NO-BMI2-NO-SHLD-NEXT: movl %eax, %ecx4304; X64-NO-BMI2-NO-SHLD-NEXT: shlq %cl, %rbx4305; X64-NO-BMI2-NO-SHLD-NEXT: shrq %r144306; X64-NO-BMI2-NO-SHLD-NEXT: movl %esi, %ecx4307; X64-NO-BMI2-NO-SHLD-NEXT: shrq %cl, %r144308; X64-NO-BMI2-NO-SHLD-NEXT: orq %rbx, %r144309; X64-NO-BMI2-NO-SHLD-NEXT: movl %eax, %ecx4310; X64-NO-BMI2-NO-SHLD-NEXT: shlq %cl, %r84311; X64-NO-BMI2-NO-SHLD-NEXT: movq %r8, (%rdx)4312; X64-NO-BMI2-NO-SHLD-NEXT: movq %r14, 48(%rdx)4313; X64-NO-BMI2-NO-SHLD-NEXT: movq %r13, 56(%rdx)4314; X64-NO-BMI2-NO-SHLD-NEXT: movq %r10, 32(%rdx)4315; X64-NO-BMI2-NO-SHLD-NEXT: movq %r15, 40(%rdx)4316; X64-NO-BMI2-NO-SHLD-NEXT: movq %rdi, 16(%rdx)4317; X64-NO-BMI2-NO-SHLD-NEXT: movq %r11, 24(%rdx)4318; X64-NO-BMI2-NO-SHLD-NEXT: movq %r9, 8(%rdx)4319; X64-NO-BMI2-NO-SHLD-NEXT: popq %rbx4320; X64-NO-BMI2-NO-SHLD-NEXT: popq %r124321; X64-NO-BMI2-NO-SHLD-NEXT: popq %r134322; X64-NO-BMI2-NO-SHLD-NEXT: popq %r144323; X64-NO-BMI2-NO-SHLD-NEXT: popq %r154324; X64-NO-BMI2-NO-SHLD-NEXT: retq4325;4326; X64-NO-BMI2-HAVE-SHLD-LABEL: shl_64bytes:4327; X64-NO-BMI2-HAVE-SHLD: # %bb.0:4328; X64-NO-BMI2-HAVE-SHLD-NEXT: pushq %r144329; X64-NO-BMI2-HAVE-SHLD-NEXT: pushq %rbx4330; X64-NO-BMI2-HAVE-SHLD-NEXT: pushq %rax4331; X64-NO-BMI2-HAVE-SHLD-NEXT: movq (%rdi), %rax4332; X64-NO-BMI2-HAVE-SHLD-NEXT: movq 8(%rdi), %rcx4333; X64-NO-BMI2-HAVE-SHLD-NEXT: movq 16(%rdi), %r84334; X64-NO-BMI2-HAVE-SHLD-NEXT: movq 24(%rdi), %r94335; X64-NO-BMI2-HAVE-SHLD-NEXT: movq 32(%rdi), %r104336; X64-NO-BMI2-HAVE-SHLD-NEXT: movq 40(%rdi), %r114337; X64-NO-BMI2-HAVE-SHLD-NEXT: movq 48(%rdi), %rbx4338; X64-NO-BMI2-HAVE-SHLD-NEXT: movq 56(%rdi), %rdi4339; X64-NO-BMI2-HAVE-SHLD-NEXT: movl (%rsi), %esi4340; X64-NO-BMI2-HAVE-SHLD-NEXT: xorps %xmm0, %xmm04341; X64-NO-BMI2-HAVE-SHLD-NEXT: movaps %xmm0, -{{[0-9]+}}(%rsp)4342; X64-NO-BMI2-HAVE-SHLD-NEXT: movaps %xmm0, -{{[0-9]+}}(%rsp)4343; X64-NO-BMI2-HAVE-SHLD-NEXT: movaps %xmm0, -{{[0-9]+}}(%rsp)4344; X64-NO-BMI2-HAVE-SHLD-NEXT: movaps %xmm0, -{{[0-9]+}}(%rsp)4345; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %rdi, -{{[0-9]+}}(%rsp)4346; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %rbx, -{{[0-9]+}}(%rsp)4347; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %r11, -{{[0-9]+}}(%rsp)4348; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %r10, -{{[0-9]+}}(%rsp)4349; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %r9, -{{[0-9]+}}(%rsp)4350; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %r8, -{{[0-9]+}}(%rsp)4351; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %rcx, -{{[0-9]+}}(%rsp)4352; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %rax, -{{[0-9]+}}(%rsp)4353; X64-NO-BMI2-HAVE-SHLD-NEXT: movl %esi, %ecx4354; X64-NO-BMI2-HAVE-SHLD-NEXT: andl $63, %ecx4355; X64-NO-BMI2-HAVE-SHLD-NEXT: shrl $3, %esi4356; X64-NO-BMI2-HAVE-SHLD-NEXT: andl $56, %esi4357; X64-NO-BMI2-HAVE-SHLD-NEXT: negl %esi4358; X64-NO-BMI2-HAVE-SHLD-NEXT: movslq %esi, %r94359; X64-NO-BMI2-HAVE-SHLD-NEXT: movq -48(%rsp,%r9), %rax4360; X64-NO-BMI2-HAVE-SHLD-NEXT: movq -40(%rsp,%r9), %r104361; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %r10, %rsi4362; X64-NO-BMI2-HAVE-SHLD-NEXT: shldq %cl, %rax, %rsi4363; X64-NO-BMI2-HAVE-SHLD-NEXT: movq -64(%rsp,%r9), %r84364; X64-NO-BMI2-HAVE-SHLD-NEXT: movq -56(%rsp,%r9), %rdi4365; X64-NO-BMI2-HAVE-SHLD-NEXT: shldq %cl, %rdi, %rax4366; X64-NO-BMI2-HAVE-SHLD-NEXT: movq -32(%rsp,%r9), %r114367; X64-NO-BMI2-HAVE-SHLD-NEXT: movq -24(%rsp,%r9), %rbx4368; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %rbx, %r144369; X64-NO-BMI2-HAVE-SHLD-NEXT: shldq %cl, %r11, %r144370; X64-NO-BMI2-HAVE-SHLD-NEXT: shldq %cl, %r10, %r114371; X64-NO-BMI2-HAVE-SHLD-NEXT: movq -16(%rsp,%r9), %r104372; X64-NO-BMI2-HAVE-SHLD-NEXT: movq -8(%rsp,%r9), %r94373; X64-NO-BMI2-HAVE-SHLD-NEXT: shldq %cl, %r10, %r94374; X64-NO-BMI2-HAVE-SHLD-NEXT: shldq %cl, %rbx, %r104375; X64-NO-BMI2-HAVE-SHLD-NEXT: shldq %cl, %r8, %rdi4376; X64-NO-BMI2-HAVE-SHLD-NEXT: # kill: def $cl killed $cl killed $ecx4377; X64-NO-BMI2-HAVE-SHLD-NEXT: shlq %cl, %r84378; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %r10, 48(%rdx)4379; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %r9, 56(%rdx)4380; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %r11, 32(%rdx)4381; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %r14, 40(%rdx)4382; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %rax, 16(%rdx)4383; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %rsi, 24(%rdx)4384; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %r8, (%rdx)4385; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %rdi, 8(%rdx)4386; X64-NO-BMI2-HAVE-SHLD-NEXT: addq $8, %rsp4387; X64-NO-BMI2-HAVE-SHLD-NEXT: popq %rbx4388; X64-NO-BMI2-HAVE-SHLD-NEXT: popq %r144389; X64-NO-BMI2-HAVE-SHLD-NEXT: retq4390;4391; X64-HAVE-BMI2-NO-SHLD-LABEL: shl_64bytes:4392; X64-HAVE-BMI2-NO-SHLD: # %bb.0:4393; X64-HAVE-BMI2-NO-SHLD-NEXT: pushq %r154394; X64-HAVE-BMI2-NO-SHLD-NEXT: pushq %r144395; X64-HAVE-BMI2-NO-SHLD-NEXT: pushq %r124396; X64-HAVE-BMI2-NO-SHLD-NEXT: pushq %rbx4397; X64-HAVE-BMI2-NO-SHLD-NEXT: pushq %rax4398; X64-HAVE-BMI2-NO-SHLD-NEXT: movq (%rdi), %rax4399; X64-HAVE-BMI2-NO-SHLD-NEXT: movq 8(%rdi), %rcx4400; X64-HAVE-BMI2-NO-SHLD-NEXT: movq 16(%rdi), %r84401; X64-HAVE-BMI2-NO-SHLD-NEXT: movq 24(%rdi), %r94402; X64-HAVE-BMI2-NO-SHLD-NEXT: movq 32(%rdi), %r104403; X64-HAVE-BMI2-NO-SHLD-NEXT: movq 40(%rdi), %r114404; X64-HAVE-BMI2-NO-SHLD-NEXT: movq 48(%rdi), %rbx4405; X64-HAVE-BMI2-NO-SHLD-NEXT: movq 56(%rdi), %rdi4406; X64-HAVE-BMI2-NO-SHLD-NEXT: movl (%rsi), %esi4407; X64-HAVE-BMI2-NO-SHLD-NEXT: xorps %xmm0, %xmm04408; X64-HAVE-BMI2-NO-SHLD-NEXT: movaps %xmm0, -{{[0-9]+}}(%rsp)4409; X64-HAVE-BMI2-NO-SHLD-NEXT: movaps %xmm0, -{{[0-9]+}}(%rsp)4410; X64-HAVE-BMI2-NO-SHLD-NEXT: movaps %xmm0, -{{[0-9]+}}(%rsp)4411; X64-HAVE-BMI2-NO-SHLD-NEXT: movaps %xmm0, -{{[0-9]+}}(%rsp)4412; X64-HAVE-BMI2-NO-SHLD-NEXT: movq %rdi, -{{[0-9]+}}(%rsp)4413; X64-HAVE-BMI2-NO-SHLD-NEXT: movq %rbx, -{{[0-9]+}}(%rsp)4414; X64-HAVE-BMI2-NO-SHLD-NEXT: movq %r11, -{{[0-9]+}}(%rsp)4415; X64-HAVE-BMI2-NO-SHLD-NEXT: movq %r10, -{{[0-9]+}}(%rsp)4416; X64-HAVE-BMI2-NO-SHLD-NEXT: movq %r9, -{{[0-9]+}}(%rsp)4417; X64-HAVE-BMI2-NO-SHLD-NEXT: movq %r8, -{{[0-9]+}}(%rsp)4418; X64-HAVE-BMI2-NO-SHLD-NEXT: movq %rcx, -{{[0-9]+}}(%rsp)4419; X64-HAVE-BMI2-NO-SHLD-NEXT: movq %rax, -{{[0-9]+}}(%rsp)4420; X64-HAVE-BMI2-NO-SHLD-NEXT: movl %esi, %eax4421; X64-HAVE-BMI2-NO-SHLD-NEXT: andl $63, %eax4422; X64-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, %ecx4423; X64-HAVE-BMI2-NO-SHLD-NEXT: shrl $3, %esi4424; X64-HAVE-BMI2-NO-SHLD-NEXT: andl $56, %esi4425; X64-HAVE-BMI2-NO-SHLD-NEXT: negl %esi4426; X64-HAVE-BMI2-NO-SHLD-NEXT: movslq %esi, %rsi4427; X64-HAVE-BMI2-NO-SHLD-NEXT: movq -64(%rsp,%rsi), %r94428; X64-HAVE-BMI2-NO-SHLD-NEXT: movq -56(%rsp,%rsi), %rdi4429; X64-HAVE-BMI2-NO-SHLD-NEXT: shlxq %rcx, %rdi, %r84430; X64-HAVE-BMI2-NO-SHLD-NEXT: xorb $63, %al4431; X64-HAVE-BMI2-NO-SHLD-NEXT: shlxq %rcx, %r9, %r104432; X64-HAVE-BMI2-NO-SHLD-NEXT: shrq %r94433; X64-HAVE-BMI2-NO-SHLD-NEXT: shrxq %rax, %r9, %r94434; X64-HAVE-BMI2-NO-SHLD-NEXT: orq %r8, %r94435; X64-HAVE-BMI2-NO-SHLD-NEXT: movq -40(%rsp,%rsi), %r114436; X64-HAVE-BMI2-NO-SHLD-NEXT: shlxq %rcx, %r11, %rbx4437; X64-HAVE-BMI2-NO-SHLD-NEXT: movq -48(%rsp,%rsi), %r84438; X64-HAVE-BMI2-NO-SHLD-NEXT: shlxq %rcx, %r8, %r144439; X64-HAVE-BMI2-NO-SHLD-NEXT: shrq %r84440; X64-HAVE-BMI2-NO-SHLD-NEXT: shrxq %rax, %r8, %r84441; X64-HAVE-BMI2-NO-SHLD-NEXT: orq %rbx, %r84442; X64-HAVE-BMI2-NO-SHLD-NEXT: shrq %rdi4443; X64-HAVE-BMI2-NO-SHLD-NEXT: shrxq %rax, %rdi, %rdi4444; X64-HAVE-BMI2-NO-SHLD-NEXT: orq %r14, %rdi4445; X64-HAVE-BMI2-NO-SHLD-NEXT: movq -24(%rsp,%rsi), %rbx4446; X64-HAVE-BMI2-NO-SHLD-NEXT: shlxq %rcx, %rbx, %r144447; X64-HAVE-BMI2-NO-SHLD-NEXT: movq -32(%rsp,%rsi), %r154448; X64-HAVE-BMI2-NO-SHLD-NEXT: shlxq %rcx, %r15, %r124449; X64-HAVE-BMI2-NO-SHLD-NEXT: shrq %r154450; X64-HAVE-BMI2-NO-SHLD-NEXT: shrxq %rax, %r15, %r154451; X64-HAVE-BMI2-NO-SHLD-NEXT: orq %r14, %r154452; X64-HAVE-BMI2-NO-SHLD-NEXT: shrq %r114453; X64-HAVE-BMI2-NO-SHLD-NEXT: shrxq %rax, %r11, %r114454; X64-HAVE-BMI2-NO-SHLD-NEXT: orq %r12, %r114455; X64-HAVE-BMI2-NO-SHLD-NEXT: shlxq %rcx, -8(%rsp,%rsi), %r144456; X64-HAVE-BMI2-NO-SHLD-NEXT: movq -16(%rsp,%rsi), %rsi4457; X64-HAVE-BMI2-NO-SHLD-NEXT: shlxq %rcx, %rsi, %rcx4458; X64-HAVE-BMI2-NO-SHLD-NEXT: shrq %rsi4459; X64-HAVE-BMI2-NO-SHLD-NEXT: shrxq %rax, %rsi, %rsi4460; X64-HAVE-BMI2-NO-SHLD-NEXT: orq %r14, %rsi4461; X64-HAVE-BMI2-NO-SHLD-NEXT: shrq %rbx4462; X64-HAVE-BMI2-NO-SHLD-NEXT: shrxq %rax, %rbx, %rax4463; X64-HAVE-BMI2-NO-SHLD-NEXT: orq %rcx, %rax4464; X64-HAVE-BMI2-NO-SHLD-NEXT: movq %r10, (%rdx)4465; X64-HAVE-BMI2-NO-SHLD-NEXT: movq %rax, 48(%rdx)4466; X64-HAVE-BMI2-NO-SHLD-NEXT: movq %rsi, 56(%rdx)4467; X64-HAVE-BMI2-NO-SHLD-NEXT: movq %r11, 32(%rdx)4468; X64-HAVE-BMI2-NO-SHLD-NEXT: movq %r15, 40(%rdx)4469; X64-HAVE-BMI2-NO-SHLD-NEXT: movq %rdi, 16(%rdx)4470; X64-HAVE-BMI2-NO-SHLD-NEXT: movq %r8, 24(%rdx)4471; X64-HAVE-BMI2-NO-SHLD-NEXT: movq %r9, 8(%rdx)4472; X64-HAVE-BMI2-NO-SHLD-NEXT: addq $8, %rsp4473; X64-HAVE-BMI2-NO-SHLD-NEXT: popq %rbx4474; X64-HAVE-BMI2-NO-SHLD-NEXT: popq %r124475; X64-HAVE-BMI2-NO-SHLD-NEXT: popq %r144476; X64-HAVE-BMI2-NO-SHLD-NEXT: popq %r154477; X64-HAVE-BMI2-NO-SHLD-NEXT: retq4478;4479; X64-HAVE-BMI2-HAVE-SHLD-LABEL: shl_64bytes:4480; X64-HAVE-BMI2-HAVE-SHLD: # %bb.0:4481; X64-HAVE-BMI2-HAVE-SHLD-NEXT: pushq %r144482; X64-HAVE-BMI2-HAVE-SHLD-NEXT: pushq %rbx4483; X64-HAVE-BMI2-HAVE-SHLD-NEXT: pushq %rax4484; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq (%rdi), %rax4485; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq 8(%rdi), %rcx4486; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq 16(%rdi), %r84487; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq 24(%rdi), %r94488; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq 32(%rdi), %r104489; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq 40(%rdi), %r114490; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq 48(%rdi), %rbx4491; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq 56(%rdi), %rdi4492; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movl (%rsi), %esi4493; X64-HAVE-BMI2-HAVE-SHLD-NEXT: xorps %xmm0, %xmm04494; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movaps %xmm0, -{{[0-9]+}}(%rsp)4495; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movaps %xmm0, -{{[0-9]+}}(%rsp)4496; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movaps %xmm0, -{{[0-9]+}}(%rsp)4497; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movaps %xmm0, -{{[0-9]+}}(%rsp)4498; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq %rdi, -{{[0-9]+}}(%rsp)4499; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq %rbx, -{{[0-9]+}}(%rsp)4500; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq %r11, -{{[0-9]+}}(%rsp)4501; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq %r10, -{{[0-9]+}}(%rsp)4502; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq %r9, -{{[0-9]+}}(%rsp)4503; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq %r8, -{{[0-9]+}}(%rsp)4504; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq %rcx, -{{[0-9]+}}(%rsp)4505; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq %rax, -{{[0-9]+}}(%rsp)4506; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movl %esi, %ecx4507; X64-HAVE-BMI2-HAVE-SHLD-NEXT: andl $63, %ecx4508; X64-HAVE-BMI2-HAVE-SHLD-NEXT: shrl $3, %esi4509; X64-HAVE-BMI2-HAVE-SHLD-NEXT: andl $56, %esi4510; X64-HAVE-BMI2-HAVE-SHLD-NEXT: negl %esi4511; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movslq %esi, %r84512; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq -48(%rsp,%r8), %rax4513; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq -40(%rsp,%r8), %r94514; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq %r9, %rsi4515; X64-HAVE-BMI2-HAVE-SHLD-NEXT: shldq %cl, %rax, %rsi4516; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq -64(%rsp,%r8), %r104517; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq -56(%rsp,%r8), %rdi4518; X64-HAVE-BMI2-HAVE-SHLD-NEXT: shldq %cl, %rdi, %rax4519; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq -32(%rsp,%r8), %r114520; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq -24(%rsp,%r8), %rbx4521; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq %rbx, %r144522; X64-HAVE-BMI2-HAVE-SHLD-NEXT: shldq %cl, %r11, %r144523; X64-HAVE-BMI2-HAVE-SHLD-NEXT: shldq %cl, %r9, %r114524; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq -16(%rsp,%r8), %r94525; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq -8(%rsp,%r8), %r84526; X64-HAVE-BMI2-HAVE-SHLD-NEXT: shldq %cl, %r9, %r84527; X64-HAVE-BMI2-HAVE-SHLD-NEXT: shldq %cl, %rbx, %r94528; X64-HAVE-BMI2-HAVE-SHLD-NEXT: shldq %cl, %r10, %rdi4529; X64-HAVE-BMI2-HAVE-SHLD-NEXT: shlxq %rcx, %r10, %rcx4530; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq %r9, 48(%rdx)4531; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq %r8, 56(%rdx)4532; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq %r11, 32(%rdx)4533; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq %r14, 40(%rdx)4534; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq %rax, 16(%rdx)4535; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq %rsi, 24(%rdx)4536; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq %rcx, (%rdx)4537; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq %rdi, 8(%rdx)4538; X64-HAVE-BMI2-HAVE-SHLD-NEXT: addq $8, %rsp4539; X64-HAVE-BMI2-HAVE-SHLD-NEXT: popq %rbx4540; X64-HAVE-BMI2-HAVE-SHLD-NEXT: popq %r144541; X64-HAVE-BMI2-HAVE-SHLD-NEXT: retq4542;4543; X86-NO-BMI2-NO-SHLD-LABEL: shl_64bytes:4544; X86-NO-BMI2-NO-SHLD: # %bb.0:4545; X86-NO-BMI2-NO-SHLD-NEXT: pushl %ebp4546; X86-NO-BMI2-NO-SHLD-NEXT: pushl %ebx4547; X86-NO-BMI2-NO-SHLD-NEXT: pushl %edi4548; X86-NO-BMI2-NO-SHLD-NEXT: pushl %esi4549; X86-NO-BMI2-NO-SHLD-NEXT: subl $204, %esp4550; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[0-9]+}}(%esp), %eax4551; X86-NO-BMI2-NO-SHLD-NEXT: movl (%eax), %ecx4552; X86-NO-BMI2-NO-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill4553; X86-NO-BMI2-NO-SHLD-NEXT: movl 4(%eax), %ecx4554; X86-NO-BMI2-NO-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill4555; X86-NO-BMI2-NO-SHLD-NEXT: movl 8(%eax), %ecx4556; X86-NO-BMI2-NO-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill4557; X86-NO-BMI2-NO-SHLD-NEXT: movl 12(%eax), %ecx4558; X86-NO-BMI2-NO-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill4559; X86-NO-BMI2-NO-SHLD-NEXT: movl 16(%eax), %ecx4560; X86-NO-BMI2-NO-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill4561; X86-NO-BMI2-NO-SHLD-NEXT: movl 20(%eax), %ecx4562; X86-NO-BMI2-NO-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill4563; X86-NO-BMI2-NO-SHLD-NEXT: movl 24(%eax), %ecx4564; X86-NO-BMI2-NO-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill4565; X86-NO-BMI2-NO-SHLD-NEXT: movl 28(%eax), %ecx4566; X86-NO-BMI2-NO-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill4567; X86-NO-BMI2-NO-SHLD-NEXT: movl 32(%eax), %ecx4568; X86-NO-BMI2-NO-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill4569; X86-NO-BMI2-NO-SHLD-NEXT: movl 36(%eax), %ecx4570; X86-NO-BMI2-NO-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill4571; X86-NO-BMI2-NO-SHLD-NEXT: movl 40(%eax), %ebx4572; X86-NO-BMI2-NO-SHLD-NEXT: movl 44(%eax), %edi4573; X86-NO-BMI2-NO-SHLD-NEXT: movl 48(%eax), %esi4574; X86-NO-BMI2-NO-SHLD-NEXT: movl 52(%eax), %edx4575; X86-NO-BMI2-NO-SHLD-NEXT: movl 56(%eax), %ecx4576; X86-NO-BMI2-NO-SHLD-NEXT: movl 60(%eax), %eax4577; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[0-9]+}}(%esp), %ebp4578; X86-NO-BMI2-NO-SHLD-NEXT: movl (%ebp), %ebp4579; X86-NO-BMI2-NO-SHLD-NEXT: xorps %xmm0, %xmm04580; X86-NO-BMI2-NO-SHLD-NEXT: movaps %xmm0, {{[0-9]+}}(%esp)4581; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)4582; X86-NO-BMI2-NO-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)4583; X86-NO-BMI2-NO-SHLD-NEXT: movl %edx, {{[0-9]+}}(%esp)4584; X86-NO-BMI2-NO-SHLD-NEXT: movl %esi, {{[0-9]+}}(%esp)4585; X86-NO-BMI2-NO-SHLD-NEXT: movl %edi, {{[0-9]+}}(%esp)4586; X86-NO-BMI2-NO-SHLD-NEXT: movl %ebx, {{[0-9]+}}(%esp)4587; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload4588; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)4589; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload4590; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)4591; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload4592; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)4593; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload4594; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)4595; X86-NO-BMI2-NO-SHLD-NEXT: movaps %xmm0, {{[0-9]+}}(%esp)4596; X86-NO-BMI2-NO-SHLD-NEXT: movaps %xmm0, {{[0-9]+}}(%esp)4597; X86-NO-BMI2-NO-SHLD-NEXT: movaps %xmm0, {{[0-9]+}}(%esp)4598; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload4599; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)4600; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload4601; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)4602; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload4603; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)4604; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload4605; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)4606; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload4607; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)4608; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload4609; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)4610; X86-NO-BMI2-NO-SHLD-NEXT: movl %ebp, %edx4611; X86-NO-BMI2-NO-SHLD-NEXT: movl %ebp, %ecx4612; X86-NO-BMI2-NO-SHLD-NEXT: shrl $3, %ecx4613; X86-NO-BMI2-NO-SHLD-NEXT: andl $60, %ecx4614; X86-NO-BMI2-NO-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill4615; X86-NO-BMI2-NO-SHLD-NEXT: leal {{[0-9]+}}(%esp), %eax4616; X86-NO-BMI2-NO-SHLD-NEXT: subl %ecx, %eax4617; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill4618; X86-NO-BMI2-NO-SHLD-NEXT: movl (%eax), %esi4619; X86-NO-BMI2-NO-SHLD-NEXT: movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill4620; X86-NO-BMI2-NO-SHLD-NEXT: movl 4(%eax), %edi4621; X86-NO-BMI2-NO-SHLD-NEXT: andl $31, %edx4622; X86-NO-BMI2-NO-SHLD-NEXT: movl %edi, %eax4623; X86-NO-BMI2-NO-SHLD-NEXT: movl %edx, %ecx4624; X86-NO-BMI2-NO-SHLD-NEXT: shll %cl, %eax4625; X86-NO-BMI2-NO-SHLD-NEXT: shrl %esi4626; X86-NO-BMI2-NO-SHLD-NEXT: movb %dl, %ch4627; X86-NO-BMI2-NO-SHLD-NEXT: xorb $31, %ch4628; X86-NO-BMI2-NO-SHLD-NEXT: movb %ch, %cl4629; X86-NO-BMI2-NO-SHLD-NEXT: movb %ch, {{[-0-9]+}}(%e{{[sb]}}p) # 1-byte Spill4630; X86-NO-BMI2-NO-SHLD-NEXT: shrl %cl, %esi4631; X86-NO-BMI2-NO-SHLD-NEXT: orl %eax, %esi4632; X86-NO-BMI2-NO-SHLD-NEXT: movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill4633; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ebp # 4-byte Reload4634; X86-NO-BMI2-NO-SHLD-NEXT: movl 12(%ebp), %eax4635; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill4636; X86-NO-BMI2-NO-SHLD-NEXT: movb %dl, %cl4637; X86-NO-BMI2-NO-SHLD-NEXT: shll %cl, %eax4638; X86-NO-BMI2-NO-SHLD-NEXT: movl 8(%ebp), %esi4639; X86-NO-BMI2-NO-SHLD-NEXT: movl %esi, %ebx4640; X86-NO-BMI2-NO-SHLD-NEXT: shrl %ebx4641; X86-NO-BMI2-NO-SHLD-NEXT: movb %ch, %cl4642; X86-NO-BMI2-NO-SHLD-NEXT: shrl %cl, %ebx4643; X86-NO-BMI2-NO-SHLD-NEXT: orl %eax, %ebx4644; X86-NO-BMI2-NO-SHLD-NEXT: movl %ebx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill4645; X86-NO-BMI2-NO-SHLD-NEXT: movl %edx, %ebx4646; X86-NO-BMI2-NO-SHLD-NEXT: movb %bl, %cl4647; X86-NO-BMI2-NO-SHLD-NEXT: shll %cl, %esi4648; X86-NO-BMI2-NO-SHLD-NEXT: shrl %edi4649; X86-NO-BMI2-NO-SHLD-NEXT: movb %ch, %cl4650; X86-NO-BMI2-NO-SHLD-NEXT: shrl %cl, %edi4651; X86-NO-BMI2-NO-SHLD-NEXT: orl %esi, %edi4652; X86-NO-BMI2-NO-SHLD-NEXT: movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill4653; X86-NO-BMI2-NO-SHLD-NEXT: movl 20(%ebp), %eax4654; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill4655; X86-NO-BMI2-NO-SHLD-NEXT: movb %bl, %cl4656; X86-NO-BMI2-NO-SHLD-NEXT: shll %cl, %eax4657; X86-NO-BMI2-NO-SHLD-NEXT: movl 16(%ebp), %esi4658; X86-NO-BMI2-NO-SHLD-NEXT: movl %esi, %ebp4659; X86-NO-BMI2-NO-SHLD-NEXT: shrl %ebp4660; X86-NO-BMI2-NO-SHLD-NEXT: movb %ch, %cl4661; X86-NO-BMI2-NO-SHLD-NEXT: shrl %cl, %ebp4662; X86-NO-BMI2-NO-SHLD-NEXT: orl %eax, %ebp4663; X86-NO-BMI2-NO-SHLD-NEXT: movl %ebp, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill4664; X86-NO-BMI2-NO-SHLD-NEXT: movb %bl, %cl4665; X86-NO-BMI2-NO-SHLD-NEXT: shll %cl, %esi4666; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edi # 4-byte Reload4667; X86-NO-BMI2-NO-SHLD-NEXT: shrl %edi4668; X86-NO-BMI2-NO-SHLD-NEXT: movb %ch, %cl4669; X86-NO-BMI2-NO-SHLD-NEXT: shrl %cl, %edi4670; X86-NO-BMI2-NO-SHLD-NEXT: orl %esi, %edi4671; X86-NO-BMI2-NO-SHLD-NEXT: movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill4672; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ebp # 4-byte Reload4673; X86-NO-BMI2-NO-SHLD-NEXT: movl 28(%ebp), %edi4674; X86-NO-BMI2-NO-SHLD-NEXT: movl %edi, %eax4675; X86-NO-BMI2-NO-SHLD-NEXT: movb %bl, %cl4676; X86-NO-BMI2-NO-SHLD-NEXT: shll %cl, %eax4677; X86-NO-BMI2-NO-SHLD-NEXT: movl 24(%ebp), %esi4678; X86-NO-BMI2-NO-SHLD-NEXT: movl %esi, %edx4679; X86-NO-BMI2-NO-SHLD-NEXT: shrl %edx4680; X86-NO-BMI2-NO-SHLD-NEXT: movb %ch, %cl4681; X86-NO-BMI2-NO-SHLD-NEXT: shrl %cl, %edx4682; X86-NO-BMI2-NO-SHLD-NEXT: orl %eax, %edx4683; X86-NO-BMI2-NO-SHLD-NEXT: movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill4684; X86-NO-BMI2-NO-SHLD-NEXT: movl %ebx, %edx4685; X86-NO-BMI2-NO-SHLD-NEXT: movb %dl, %cl4686; X86-NO-BMI2-NO-SHLD-NEXT: shll %cl, %esi4687; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ebx # 4-byte Reload4688; X86-NO-BMI2-NO-SHLD-NEXT: shrl %ebx4689; X86-NO-BMI2-NO-SHLD-NEXT: movb %ch, %cl4690; X86-NO-BMI2-NO-SHLD-NEXT: shrl %cl, %ebx4691; X86-NO-BMI2-NO-SHLD-NEXT: orl %esi, %ebx4692; X86-NO-BMI2-NO-SHLD-NEXT: movl %ebx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill4693; X86-NO-BMI2-NO-SHLD-NEXT: movl 36(%ebp), %eax4694; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill4695; X86-NO-BMI2-NO-SHLD-NEXT: movb %dl, %cl4696; X86-NO-BMI2-NO-SHLD-NEXT: shll %cl, %eax4697; X86-NO-BMI2-NO-SHLD-NEXT: movl 32(%ebp), %esi4698; X86-NO-BMI2-NO-SHLD-NEXT: movl %esi, %ebx4699; X86-NO-BMI2-NO-SHLD-NEXT: shrl %ebx4700; X86-NO-BMI2-NO-SHLD-NEXT: movb %ch, %cl4701; X86-NO-BMI2-NO-SHLD-NEXT: shrl %cl, %ebx4702; X86-NO-BMI2-NO-SHLD-NEXT: orl %eax, %ebx4703; X86-NO-BMI2-NO-SHLD-NEXT: movl %ebx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill4704; X86-NO-BMI2-NO-SHLD-NEXT: movb %dl, %cl4705; X86-NO-BMI2-NO-SHLD-NEXT: shll %cl, %esi4706; X86-NO-BMI2-NO-SHLD-NEXT: shrl %edi4707; X86-NO-BMI2-NO-SHLD-NEXT: movb %ch, %cl4708; X86-NO-BMI2-NO-SHLD-NEXT: shrl %cl, %edi4709; X86-NO-BMI2-NO-SHLD-NEXT: orl %esi, %edi4710; X86-NO-BMI2-NO-SHLD-NEXT: movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill4711; X86-NO-BMI2-NO-SHLD-NEXT: movl 44(%ebp), %esi4712; X86-NO-BMI2-NO-SHLD-NEXT: movl %esi, %eax4713; X86-NO-BMI2-NO-SHLD-NEXT: movb %dl, %cl4714; X86-NO-BMI2-NO-SHLD-NEXT: shll %cl, %eax4715; X86-NO-BMI2-NO-SHLD-NEXT: movl 40(%ebp), %ebx4716; X86-NO-BMI2-NO-SHLD-NEXT: movl %ebx, %edi4717; X86-NO-BMI2-NO-SHLD-NEXT: shrl %edi4718; X86-NO-BMI2-NO-SHLD-NEXT: movb %ch, %cl4719; X86-NO-BMI2-NO-SHLD-NEXT: shrl %cl, %edi4720; X86-NO-BMI2-NO-SHLD-NEXT: orl %eax, %edi4721; X86-NO-BMI2-NO-SHLD-NEXT: movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill4722; X86-NO-BMI2-NO-SHLD-NEXT: movb %dl, %cl4723; X86-NO-BMI2-NO-SHLD-NEXT: shll %cl, %ebx4724; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload4725; X86-NO-BMI2-NO-SHLD-NEXT: shrl %eax4726; X86-NO-BMI2-NO-SHLD-NEXT: movb %ch, %cl4727; X86-NO-BMI2-NO-SHLD-NEXT: shrl %cl, %eax4728; X86-NO-BMI2-NO-SHLD-NEXT: orl %ebx, %eax4729; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill4730; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload4731; X86-NO-BMI2-NO-SHLD-NEXT: movl 52(%eax), %ebp4732; X86-NO-BMI2-NO-SHLD-NEXT: movl %ebp, %edi4733; X86-NO-BMI2-NO-SHLD-NEXT: movb %dl, %cl4734; X86-NO-BMI2-NO-SHLD-NEXT: movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill4735; X86-NO-BMI2-NO-SHLD-NEXT: shll %cl, %edi4736; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload4737; X86-NO-BMI2-NO-SHLD-NEXT: negl %eax4738; X86-NO-BMI2-NO-SHLD-NEXT: movl 176(%esp,%eax), %ebx4739; X86-NO-BMI2-NO-SHLD-NEXT: movl %ebx, %eax4740; X86-NO-BMI2-NO-SHLD-NEXT: shrl %eax4741; X86-NO-BMI2-NO-SHLD-NEXT: movb %ch, %cl4742; X86-NO-BMI2-NO-SHLD-NEXT: shrl %cl, %eax4743; X86-NO-BMI2-NO-SHLD-NEXT: orl %edi, %eax4744; X86-NO-BMI2-NO-SHLD-NEXT: movb %dl, %cl4745; X86-NO-BMI2-NO-SHLD-NEXT: shll %cl, %ebx4746; X86-NO-BMI2-NO-SHLD-NEXT: shrl %esi4747; X86-NO-BMI2-NO-SHLD-NEXT: movb %ch, %cl4748; X86-NO-BMI2-NO-SHLD-NEXT: shrl %cl, %esi4749; X86-NO-BMI2-NO-SHLD-NEXT: orl %ebx, %esi4750; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edi # 4-byte Reload4751; X86-NO-BMI2-NO-SHLD-NEXT: movl 60(%edi), %edx4752; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload4753; X86-NO-BMI2-NO-SHLD-NEXT: # kill: def $cl killed $cl killed $ecx4754; X86-NO-BMI2-NO-SHLD-NEXT: shll %cl, %edx4755; X86-NO-BMI2-NO-SHLD-NEXT: movl 56(%edi), %ebx4756; X86-NO-BMI2-NO-SHLD-NEXT: movl %ebx, %edi4757; X86-NO-BMI2-NO-SHLD-NEXT: shrl %edi4758; X86-NO-BMI2-NO-SHLD-NEXT: movb {{[-0-9]+}}(%e{{[sb]}}p), %ch # 1-byte Reload4759; X86-NO-BMI2-NO-SHLD-NEXT: movb %ch, %cl4760; X86-NO-BMI2-NO-SHLD-NEXT: shrl %cl, %edi4761; X86-NO-BMI2-NO-SHLD-NEXT: orl %edx, %edi4762; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload4763; X86-NO-BMI2-NO-SHLD-NEXT: movb %dl, %cl4764; X86-NO-BMI2-NO-SHLD-NEXT: shll %cl, %ebx4765; X86-NO-BMI2-NO-SHLD-NEXT: shrl %ebp4766; X86-NO-BMI2-NO-SHLD-NEXT: movb %ch, %cl4767; X86-NO-BMI2-NO-SHLD-NEXT: shrl %cl, %ebp4768; X86-NO-BMI2-NO-SHLD-NEXT: orl %ebx, %ebp4769; X86-NO-BMI2-NO-SHLD-NEXT: movl %edx, %ecx4770; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload4771; X86-NO-BMI2-NO-SHLD-NEXT: shll %cl, %edx4772; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[0-9]+}}(%esp), %ecx4773; X86-NO-BMI2-NO-SHLD-NEXT: movl %edx, (%ecx)4774; X86-NO-BMI2-NO-SHLD-NEXT: movl %ebp, 56(%ecx)4775; X86-NO-BMI2-NO-SHLD-NEXT: movl %edi, 60(%ecx)4776; X86-NO-BMI2-NO-SHLD-NEXT: movl %esi, 48(%ecx)4777; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, 52(%ecx)4778; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload4779; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, 40(%ecx)4780; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload4781; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, 44(%ecx)4782; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload4783; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, 32(%ecx)4784; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload4785; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, 36(%ecx)4786; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload4787; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, 24(%ecx)4788; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload4789; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, 28(%ecx)4790; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload4791; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, 16(%ecx)4792; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload4793; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, 20(%ecx)4794; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload4795; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, 8(%ecx)4796; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload4797; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, 12(%ecx)4798; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload4799; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, 4(%ecx)4800; X86-NO-BMI2-NO-SHLD-NEXT: addl $204, %esp4801; X86-NO-BMI2-NO-SHLD-NEXT: popl %esi4802; X86-NO-BMI2-NO-SHLD-NEXT: popl %edi4803; X86-NO-BMI2-NO-SHLD-NEXT: popl %ebx4804; X86-NO-BMI2-NO-SHLD-NEXT: popl %ebp4805; X86-NO-BMI2-NO-SHLD-NEXT: retl4806;4807; X86-NO-BMI2-HAVE-SHLD-LABEL: shl_64bytes:4808; X86-NO-BMI2-HAVE-SHLD: # %bb.0:4809; X86-NO-BMI2-HAVE-SHLD-NEXT: pushl %ebp4810; X86-NO-BMI2-HAVE-SHLD-NEXT: pushl %ebx4811; X86-NO-BMI2-HAVE-SHLD-NEXT: pushl %edi4812; X86-NO-BMI2-HAVE-SHLD-NEXT: pushl %esi4813; X86-NO-BMI2-HAVE-SHLD-NEXT: subl $188, %esp4814; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[0-9]+}}(%esp), %ecx4815; X86-NO-BMI2-HAVE-SHLD-NEXT: movl (%ecx), %eax4816; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill4817; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 4(%ecx), %eax4818; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill4819; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 8(%ecx), %eax4820; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill4821; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 12(%ecx), %eax4822; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill4823; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 16(%ecx), %eax4824; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill4825; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 20(%ecx), %eax4826; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill4827; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 24(%ecx), %eax4828; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill4829; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 28(%ecx), %eax4830; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill4831; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 32(%ecx), %eax4832; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill4833; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 36(%ecx), %eax4834; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %eax, (%esp) # 4-byte Spill4835; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 40(%ecx), %ebp4836; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 44(%ecx), %ebx4837; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 48(%ecx), %edi4838; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 52(%ecx), %esi4839; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 56(%ecx), %edx4840; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 60(%ecx), %eax4841; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[0-9]+}}(%esp), %ecx4842; X86-NO-BMI2-HAVE-SHLD-NEXT: movl (%ecx), %ecx4843; X86-NO-BMI2-HAVE-SHLD-NEXT: xorps %xmm0, %xmm04844; X86-NO-BMI2-HAVE-SHLD-NEXT: movaps %xmm0, {{[0-9]+}}(%esp)4845; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)4846; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %edx, {{[0-9]+}}(%esp)4847; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %esi, {{[0-9]+}}(%esp)4848; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %edi, {{[0-9]+}}(%esp)4849; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ebx, {{[0-9]+}}(%esp)4850; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ebp, {{[0-9]+}}(%esp)4851; X86-NO-BMI2-HAVE-SHLD-NEXT: movl (%esp), %eax # 4-byte Reload4852; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)4853; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload4854; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)4855; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload4856; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)4857; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload4858; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)4859; X86-NO-BMI2-HAVE-SHLD-NEXT: movaps %xmm0, {{[0-9]+}}(%esp)4860; X86-NO-BMI2-HAVE-SHLD-NEXT: movaps %xmm0, {{[0-9]+}}(%esp)4861; X86-NO-BMI2-HAVE-SHLD-NEXT: movaps %xmm0, {{[0-9]+}}(%esp)4862; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload4863; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)4864; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload4865; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)4866; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload4867; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)4868; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload4869; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)4870; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload4871; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)4872; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload4873; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)4874; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ecx, %ebp4875; X86-NO-BMI2-HAVE-SHLD-NEXT: shrl $3, %ebp4876; X86-NO-BMI2-HAVE-SHLD-NEXT: andl $60, %ebp4877; X86-NO-BMI2-HAVE-SHLD-NEXT: leal {{[0-9]+}}(%esp), %eax4878; X86-NO-BMI2-HAVE-SHLD-NEXT: subl %ebp, %eax4879; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 8(%eax), %esi4880; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 12(%eax), %edx4881; X86-NO-BMI2-HAVE-SHLD-NEXT: andl $31, %ecx4882; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %edx, %edi4883; X86-NO-BMI2-HAVE-SHLD-NEXT: shldl %cl, %esi, %edi4884; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill4885; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 4(%eax), %edi4886; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill4887; X86-NO-BMI2-HAVE-SHLD-NEXT: shldl %cl, %edi, %esi4888; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill4889; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 16(%eax), %edi4890; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 20(%eax), %esi4891; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %esi, %ebx4892; X86-NO-BMI2-HAVE-SHLD-NEXT: shldl %cl, %edi, %ebx4893; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ebx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill4894; X86-NO-BMI2-HAVE-SHLD-NEXT: shldl %cl, %edx, %edi4895; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill4896; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 24(%eax), %edi4897; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 28(%eax), %edx4898; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %edx, %ebx4899; X86-NO-BMI2-HAVE-SHLD-NEXT: shldl %cl, %edi, %ebx4900; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ebx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill4901; X86-NO-BMI2-HAVE-SHLD-NEXT: shldl %cl, %esi, %edi4902; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill4903; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 32(%eax), %edi4904; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 36(%eax), %esi4905; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %esi, %ebx4906; X86-NO-BMI2-HAVE-SHLD-NEXT: shldl %cl, %edi, %ebx4907; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ebx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill4908; X86-NO-BMI2-HAVE-SHLD-NEXT: shldl %cl, %edx, %edi4909; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill4910; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 40(%eax), %edx4911; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 44(%eax), %edi4912; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill4913; X86-NO-BMI2-HAVE-SHLD-NEXT: shldl %cl, %edx, %edi4914; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %edi, (%esp) # 4-byte Spill4915; X86-NO-BMI2-HAVE-SHLD-NEXT: shldl %cl, %esi, %edx4916; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill4917; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 56(%eax), %edx4918; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 60(%eax), %edi4919; X86-NO-BMI2-HAVE-SHLD-NEXT: shldl %cl, %edx, %edi4920; X86-NO-BMI2-HAVE-SHLD-NEXT: movl (%eax), %ebx4921; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 52(%eax), %esi4922; X86-NO-BMI2-HAVE-SHLD-NEXT: shldl %cl, %esi, %edx4923; X86-NO-BMI2-HAVE-SHLD-NEXT: negl %ebp4924; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 160(%esp,%ebp), %eax4925; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[0-9]+}}(%esp), %ebp4926; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %edx, 56(%ebp)4927; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %edi, 60(%ebp)4928; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload4929; X86-NO-BMI2-HAVE-SHLD-NEXT: shldl %cl, %ebx, %edx4930; X86-NO-BMI2-HAVE-SHLD-NEXT: shll %cl, %ebx4931; X86-NO-BMI2-HAVE-SHLD-NEXT: shldl %cl, %eax, %esi4932; X86-NO-BMI2-HAVE-SHLD-NEXT: # kill: def $cl killed $cl killed $ecx4933; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edi # 4-byte Reload4934; X86-NO-BMI2-HAVE-SHLD-NEXT: shldl %cl, %edi, %eax4935; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %eax, 48(%ebp)4936; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %esi, 52(%ebp)4937; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload4938; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %eax, 40(%ebp)4939; X86-NO-BMI2-HAVE-SHLD-NEXT: movl (%esp), %eax # 4-byte Reload4940; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %eax, 44(%ebp)4941; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload4942; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %eax, 32(%ebp)4943; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload4944; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %eax, 36(%ebp)4945; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload4946; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %eax, 24(%ebp)4947; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload4948; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %eax, 28(%ebp)4949; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload4950; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %eax, 16(%ebp)4951; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload4952; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %eax, 20(%ebp)4953; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload4954; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %eax, 8(%ebp)4955; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload4956; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %eax, 12(%ebp)4957; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ebx, (%ebp)4958; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %edx, 4(%ebp)4959; X86-NO-BMI2-HAVE-SHLD-NEXT: addl $188, %esp4960; X86-NO-BMI2-HAVE-SHLD-NEXT: popl %esi4961; X86-NO-BMI2-HAVE-SHLD-NEXT: popl %edi4962; X86-NO-BMI2-HAVE-SHLD-NEXT: popl %ebx4963; X86-NO-BMI2-HAVE-SHLD-NEXT: popl %ebp4964; X86-NO-BMI2-HAVE-SHLD-NEXT: retl4965;4966; X86-HAVE-BMI2-NO-SHLD-LABEL: shl_64bytes:4967; X86-HAVE-BMI2-NO-SHLD: # %bb.0:4968; X86-HAVE-BMI2-NO-SHLD-NEXT: pushl %ebp4969; X86-HAVE-BMI2-NO-SHLD-NEXT: pushl %ebx4970; X86-HAVE-BMI2-NO-SHLD-NEXT: pushl %edi4971; X86-HAVE-BMI2-NO-SHLD-NEXT: pushl %esi4972; X86-HAVE-BMI2-NO-SHLD-NEXT: subl $204, %esp4973; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[0-9]+}}(%esp), %eax4974; X86-HAVE-BMI2-NO-SHLD-NEXT: movl (%eax), %ecx4975; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill4976; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 4(%eax), %ecx4977; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill4978; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 8(%eax), %ecx4979; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill4980; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 12(%eax), %ecx4981; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill4982; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 16(%eax), %ecx4983; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill4984; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 20(%eax), %ecx4985; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill4986; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 24(%eax), %ecx4987; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill4988; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 28(%eax), %ecx4989; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill4990; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 32(%eax), %ecx4991; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill4992; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 36(%eax), %ecx4993; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill4994; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 40(%eax), %ebx4995; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 44(%eax), %edi4996; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 48(%eax), %esi4997; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 52(%eax), %edx4998; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 56(%eax), %ecx4999; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 60(%eax), %eax5000; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[0-9]+}}(%esp), %ebp5001; X86-HAVE-BMI2-NO-SHLD-NEXT: movl (%ebp), %ebp5002; X86-HAVE-BMI2-NO-SHLD-NEXT: xorps %xmm0, %xmm05003; X86-HAVE-BMI2-NO-SHLD-NEXT: movaps %xmm0, {{[0-9]+}}(%esp)5004; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)5005; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)5006; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %edx, {{[0-9]+}}(%esp)5007; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %esi, {{[0-9]+}}(%esp)5008; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %edi, {{[0-9]+}}(%esp)5009; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ebx, {{[0-9]+}}(%esp)5010; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload5011; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)5012; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload5013; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)5014; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload5015; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)5016; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload5017; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)5018; X86-HAVE-BMI2-NO-SHLD-NEXT: movaps %xmm0, {{[0-9]+}}(%esp)5019; X86-HAVE-BMI2-NO-SHLD-NEXT: movaps %xmm0, {{[0-9]+}}(%esp)5020; X86-HAVE-BMI2-NO-SHLD-NEXT: movaps %xmm0, {{[0-9]+}}(%esp)5021; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload5022; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)5023; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload5024; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)5025; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload5026; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)5027; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload5028; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)5029; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload5030; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)5031; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload5032; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)5033; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ebp, %eax5034; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ebp, %ebx5035; X86-HAVE-BMI2-NO-SHLD-NEXT: andl $31, %ebx5036; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ebx, %ecx5037; X86-HAVE-BMI2-NO-SHLD-NEXT: shrl $3, %eax5038; X86-HAVE-BMI2-NO-SHLD-NEXT: andl $60, %eax5039; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill5040; X86-HAVE-BMI2-NO-SHLD-NEXT: leal {{[0-9]+}}(%esp), %edx5041; X86-HAVE-BMI2-NO-SHLD-NEXT: subl %eax, %edx5042; X86-HAVE-BMI2-NO-SHLD-NEXT: movl (%edx), %esi5043; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill5044; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 4(%edx), %eax5045; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill5046; X86-HAVE-BMI2-NO-SHLD-NEXT: xorb $31, %bl5047; X86-HAVE-BMI2-NO-SHLD-NEXT: shrl %esi5048; X86-HAVE-BMI2-NO-SHLD-NEXT: shrxl %ebx, %esi, %edi5049; X86-HAVE-BMI2-NO-SHLD-NEXT: shlxl %ecx, %eax, %esi5050; X86-HAVE-BMI2-NO-SHLD-NEXT: orl %esi, %edi5051; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill5052; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 8(%edx), %esi5053; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill5054; X86-HAVE-BMI2-NO-SHLD-NEXT: shrl %esi5055; X86-HAVE-BMI2-NO-SHLD-NEXT: shrxl %ebx, %esi, %eax5056; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 12(%edx), %esi5057; X86-HAVE-BMI2-NO-SHLD-NEXT: shlxl %ecx, %esi, %ebp5058; X86-HAVE-BMI2-NO-SHLD-NEXT: orl %ebp, %eax5059; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill5060; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, %edi5061; X86-HAVE-BMI2-NO-SHLD-NEXT: shlxl %ecx, {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Folded Reload5062; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload5063; X86-HAVE-BMI2-NO-SHLD-NEXT: shrl %ecx5064; X86-HAVE-BMI2-NO-SHLD-NEXT: shrxl %ebx, %ecx, %ecx5065; X86-HAVE-BMI2-NO-SHLD-NEXT: orl %eax, %ecx5066; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill5067; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 16(%edx), %ecx5068; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill5069; X86-HAVE-BMI2-NO-SHLD-NEXT: shrl %ecx5070; X86-HAVE-BMI2-NO-SHLD-NEXT: shrxl %ebx, %ecx, %eax5071; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 20(%edx), %ecx5072; X86-HAVE-BMI2-NO-SHLD-NEXT: shlxl %edi, %ecx, %ebp5073; X86-HAVE-BMI2-NO-SHLD-NEXT: orl %ebp, %eax5074; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill5075; X86-HAVE-BMI2-NO-SHLD-NEXT: shlxl %edi, {{[-0-9]+}}(%e{{[sb]}}p), %ebp # 4-byte Folded Reload5076; X86-HAVE-BMI2-NO-SHLD-NEXT: shrl %esi5077; X86-HAVE-BMI2-NO-SHLD-NEXT: shrxl %ebx, %esi, %eax5078; X86-HAVE-BMI2-NO-SHLD-NEXT: orl %ebp, %eax5079; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill5080; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 24(%edx), %esi5081; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill5082; X86-HAVE-BMI2-NO-SHLD-NEXT: shrl %esi5083; X86-HAVE-BMI2-NO-SHLD-NEXT: shrxl %ebx, %esi, %eax5084; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 28(%edx), %esi5085; X86-HAVE-BMI2-NO-SHLD-NEXT: shlxl %edi, %esi, %ebp5086; X86-HAVE-BMI2-NO-SHLD-NEXT: orl %ebp, %eax5087; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill5088; X86-HAVE-BMI2-NO-SHLD-NEXT: shlxl %edi, {{[-0-9]+}}(%e{{[sb]}}p), %ebp # 4-byte Folded Reload5089; X86-HAVE-BMI2-NO-SHLD-NEXT: shrl %ecx5090; X86-HAVE-BMI2-NO-SHLD-NEXT: shrxl %ebx, %ecx, %eax5091; X86-HAVE-BMI2-NO-SHLD-NEXT: orl %ebp, %eax5092; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill5093; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 32(%edx), %ecx5094; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill5095; X86-HAVE-BMI2-NO-SHLD-NEXT: shrl %ecx5096; X86-HAVE-BMI2-NO-SHLD-NEXT: shrxl %ebx, %ecx, %eax5097; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 36(%edx), %ecx5098; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill5099; X86-HAVE-BMI2-NO-SHLD-NEXT: shlxl %edi, %ecx, %ebp5100; X86-HAVE-BMI2-NO-SHLD-NEXT: orl %ebp, %eax5101; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill5102; X86-HAVE-BMI2-NO-SHLD-NEXT: shlxl %edi, {{[-0-9]+}}(%e{{[sb]}}p), %ebp # 4-byte Folded Reload5103; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %edi, %eax5104; X86-HAVE-BMI2-NO-SHLD-NEXT: shrl %esi5105; X86-HAVE-BMI2-NO-SHLD-NEXT: shrxl %ebx, %esi, %esi5106; X86-HAVE-BMI2-NO-SHLD-NEXT: orl %ebp, %esi5107; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill5108; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 40(%edx), %edi5109; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %edi, %esi5110; X86-HAVE-BMI2-NO-SHLD-NEXT: shrl %esi5111; X86-HAVE-BMI2-NO-SHLD-NEXT: shrxl %ebx, %esi, %ecx5112; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 44(%edx), %esi5113; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill5114; X86-HAVE-BMI2-NO-SHLD-NEXT: shlxl %eax, %esi, %ebp5115; X86-HAVE-BMI2-NO-SHLD-NEXT: orl %ebp, %ecx5116; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill5117; X86-HAVE-BMI2-NO-SHLD-NEXT: shlxl %eax, %edi, %edi5118; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, %esi5119; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload5120; X86-HAVE-BMI2-NO-SHLD-NEXT: shrl %eax5121; X86-HAVE-BMI2-NO-SHLD-NEXT: shrxl %ebx, %eax, %eax5122; X86-HAVE-BMI2-NO-SHLD-NEXT: orl %edi, %eax5123; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill5124; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 48(%edx), %ebp5125; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ebp, %edi5126; X86-HAVE-BMI2-NO-SHLD-NEXT: shrl %edi5127; X86-HAVE-BMI2-NO-SHLD-NEXT: shrxl %ebx, %edi, %eax5128; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 52(%edx), %ecx5129; X86-HAVE-BMI2-NO-SHLD-NEXT: shlxl %esi, %ecx, %edi5130; X86-HAVE-BMI2-NO-SHLD-NEXT: orl %edi, %eax5131; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill5132; X86-HAVE-BMI2-NO-SHLD-NEXT: shlxl %esi, %ebp, %edi5133; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %esi, %ebp5134; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload5135; X86-HAVE-BMI2-NO-SHLD-NEXT: shrl %eax5136; X86-HAVE-BMI2-NO-SHLD-NEXT: shrxl %ebx, %eax, %esi5137; X86-HAVE-BMI2-NO-SHLD-NEXT: orl %edi, %esi5138; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 56(%edx), %edi5139; X86-HAVE-BMI2-NO-SHLD-NEXT: shrl %ecx5140; X86-HAVE-BMI2-NO-SHLD-NEXT: shrxl %ebx, %ecx, %eax5141; X86-HAVE-BMI2-NO-SHLD-NEXT: shlxl %ebp, %edi, %ecx5142; X86-HAVE-BMI2-NO-SHLD-NEXT: orl %ecx, %eax5143; X86-HAVE-BMI2-NO-SHLD-NEXT: shrl %edi5144; X86-HAVE-BMI2-NO-SHLD-NEXT: shrxl %ebx, %edi, %ecx5145; X86-HAVE-BMI2-NO-SHLD-NEXT: shlxl %ebp, {{[-0-9]+}}(%e{{[sb]}}p), %edi # 4-byte Folded Reload5146; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ebx # 4-byte Reload5147; X86-HAVE-BMI2-NO-SHLD-NEXT: negl %ebx5148; X86-HAVE-BMI2-NO-SHLD-NEXT: shlxl %ebp, 188(%esp,%ebx), %ebx5149; X86-HAVE-BMI2-NO-SHLD-NEXT: orl %ecx, %ebx5150; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[0-9]+}}(%esp), %edx5151; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %edi, (%edx)5152; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, 56(%edx)5153; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ebx, 60(%edx)5154; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %esi, 48(%edx)5155; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload5156; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, 52(%edx)5157; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload5158; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, 40(%edx)5159; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload5160; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, 44(%edx)5161; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload5162; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, 32(%edx)5163; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload5164; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, 36(%edx)5165; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload5166; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, 24(%edx)5167; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload5168; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, 28(%edx)5169; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload5170; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, 16(%edx)5171; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload5172; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, 20(%edx)5173; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload5174; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, 8(%edx)5175; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload5176; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, 12(%edx)5177; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload5178; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, 4(%edx)5179; X86-HAVE-BMI2-NO-SHLD-NEXT: addl $204, %esp5180; X86-HAVE-BMI2-NO-SHLD-NEXT: popl %esi5181; X86-HAVE-BMI2-NO-SHLD-NEXT: popl %edi5182; X86-HAVE-BMI2-NO-SHLD-NEXT: popl %ebx5183; X86-HAVE-BMI2-NO-SHLD-NEXT: popl %ebp5184; X86-HAVE-BMI2-NO-SHLD-NEXT: retl5185;5186; X86-HAVE-BMI2-HAVE-SHLD-LABEL: shl_64bytes:5187; X86-HAVE-BMI2-HAVE-SHLD: # %bb.0:5188; X86-HAVE-BMI2-HAVE-SHLD-NEXT: pushl %ebp5189; X86-HAVE-BMI2-HAVE-SHLD-NEXT: pushl %ebx5190; X86-HAVE-BMI2-HAVE-SHLD-NEXT: pushl %edi5191; X86-HAVE-BMI2-HAVE-SHLD-NEXT: pushl %esi5192; X86-HAVE-BMI2-HAVE-SHLD-NEXT: subl $204, %esp5193; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[0-9]+}}(%esp), %ebx5194; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl (%ebx), %eax5195; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill5196; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 4(%ebx), %eax5197; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill5198; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 8(%ebx), %eax5199; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill5200; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 12(%ebx), %eax5201; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill5202; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 16(%ebx), %eax5203; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill5204; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 20(%ebx), %eax5205; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill5206; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 24(%ebx), %eax5207; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill5208; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 28(%ebx), %eax5209; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill5210; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 32(%ebx), %eax5211; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill5212; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 36(%ebx), %eax5213; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill5214; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 40(%ebx), %ebp5215; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 44(%ebx), %edi5216; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 48(%ebx), %esi5217; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 52(%ebx), %edx5218; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 56(%ebx), %ecx5219; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 60(%ebx), %eax5220; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[0-9]+}}(%esp), %ebx5221; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl (%ebx), %ebx5222; X86-HAVE-BMI2-HAVE-SHLD-NEXT: xorps %xmm0, %xmm05223; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movaps %xmm0, {{[0-9]+}}(%esp)5224; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)5225; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)5226; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edx, {{[0-9]+}}(%esp)5227; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %esi, {{[0-9]+}}(%esp)5228; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edi, {{[0-9]+}}(%esp)5229; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ebp, {{[0-9]+}}(%esp)5230; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload5231; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)5232; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload5233; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)5234; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload5235; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)5236; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload5237; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)5238; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movaps %xmm0, {{[0-9]+}}(%esp)5239; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movaps %xmm0, {{[0-9]+}}(%esp)5240; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movaps %xmm0, {{[0-9]+}}(%esp)5241; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload5242; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)5243; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload5244; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)5245; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload5246; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)5247; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload5248; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)5249; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload5250; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)5251; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload5252; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)5253; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ebx, %ecx5254; X86-HAVE-BMI2-HAVE-SHLD-NEXT: andl $31, %ecx5255; X86-HAVE-BMI2-HAVE-SHLD-NEXT: shrl $3, %ebx5256; X86-HAVE-BMI2-HAVE-SHLD-NEXT: andl $60, %ebx5257; X86-HAVE-BMI2-HAVE-SHLD-NEXT: leal {{[0-9]+}}(%esp), %eax5258; X86-HAVE-BMI2-HAVE-SHLD-NEXT: subl %ebx, %eax5259; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 4(%eax), %esi5260; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill5261; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 8(%eax), %edi5262; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 12(%eax), %edx5263; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edx, %ebp5264; X86-HAVE-BMI2-HAVE-SHLD-NEXT: shldl %cl, %edi, %ebp5265; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ebp, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill5266; X86-HAVE-BMI2-HAVE-SHLD-NEXT: shldl %cl, %esi, %edi5267; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill5268; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 16(%eax), %edi5269; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 20(%eax), %esi5270; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %esi, %ebp5271; X86-HAVE-BMI2-HAVE-SHLD-NEXT: shldl %cl, %edi, %ebp5272; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ebp, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill5273; X86-HAVE-BMI2-HAVE-SHLD-NEXT: shldl %cl, %edx, %edi5274; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill5275; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 24(%eax), %edi5276; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 28(%eax), %edx5277; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edx, %ebp5278; X86-HAVE-BMI2-HAVE-SHLD-NEXT: shldl %cl, %edi, %ebp5279; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ebp, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill5280; X86-HAVE-BMI2-HAVE-SHLD-NEXT: shldl %cl, %esi, %edi5281; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill5282; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 32(%eax), %edi5283; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 36(%eax), %esi5284; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %esi, %ebp5285; X86-HAVE-BMI2-HAVE-SHLD-NEXT: shldl %cl, %edi, %ebp5286; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ebp, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill5287; X86-HAVE-BMI2-HAVE-SHLD-NEXT: shldl %cl, %edx, %edi5288; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill5289; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 40(%eax), %ebp5290; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 44(%eax), %edx5291; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill5292; X86-HAVE-BMI2-HAVE-SHLD-NEXT: shldl %cl, %ebp, %edx5293; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill5294; X86-HAVE-BMI2-HAVE-SHLD-NEXT: shldl %cl, %esi, %ebp5295; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 56(%eax), %edx5296; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 60(%eax), %edi5297; X86-HAVE-BMI2-HAVE-SHLD-NEXT: shldl %cl, %edx, %edi5298; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl (%eax), %esi5299; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill5300; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 52(%eax), %esi5301; X86-HAVE-BMI2-HAVE-SHLD-NEXT: shldl %cl, %esi, %edx5302; X86-HAVE-BMI2-HAVE-SHLD-NEXT: negl %ebx5303; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 176(%esp,%ebx), %ebx5304; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[0-9]+}}(%esp), %eax5305; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edx, 56(%eax)5306; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edi, 60(%eax)5307; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload5308; X86-HAVE-BMI2-HAVE-SHLD-NEXT: shlxl %ecx, %edx, %edi5309; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill5310; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edi # 4-byte Reload5311; X86-HAVE-BMI2-HAVE-SHLD-NEXT: shldl %cl, %edx, %edi5312; X86-HAVE-BMI2-HAVE-SHLD-NEXT: shldl %cl, %ebx, %esi5313; X86-HAVE-BMI2-HAVE-SHLD-NEXT: # kill: def $cl killed $cl killed $ecx5314; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload5315; X86-HAVE-BMI2-HAVE-SHLD-NEXT: shldl %cl, %edx, %ebx5316; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ebx, 48(%eax)5317; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %esi, 52(%eax)5318; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ebp, 40(%eax)5319; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload5320; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ecx, 44(%eax)5321; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload5322; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ecx, 32(%eax)5323; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload5324; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ecx, 36(%eax)5325; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload5326; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ecx, 24(%eax)5327; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload5328; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ecx, 28(%eax)5329; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload5330; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ecx, 16(%eax)5331; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload5332; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ecx, 20(%eax)5333; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload5334; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ecx, 8(%eax)5335; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload5336; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ecx, 12(%eax)5337; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload5338; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ecx, (%eax)5339; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edi, 4(%eax)5340; X86-HAVE-BMI2-HAVE-SHLD-NEXT: addl $204, %esp5341; X86-HAVE-BMI2-HAVE-SHLD-NEXT: popl %esi5342; X86-HAVE-BMI2-HAVE-SHLD-NEXT: popl %edi5343; X86-HAVE-BMI2-HAVE-SHLD-NEXT: popl %ebx5344; X86-HAVE-BMI2-HAVE-SHLD-NEXT: popl %ebp5345; X86-HAVE-BMI2-HAVE-SHLD-NEXT: retl5346 %src = load i512, ptr %src.ptr, align 15347 %bitOff = load i512, ptr %bitOff.ptr, align 15348 %res = shl i512 %src, %bitOff5349 store i512 %res, ptr %dst, align 15350 ret void5351}5352define void @ashr_64bytes(ptr %src.ptr, ptr %bitOff.ptr, ptr %dst) nounwind {5353; X64-NO-BMI2-NO-SHLD-LABEL: ashr_64bytes:5354; X64-NO-BMI2-NO-SHLD: # %bb.0:5355; X64-NO-BMI2-NO-SHLD-NEXT: pushq %rbp5356; X64-NO-BMI2-NO-SHLD-NEXT: pushq %r155357; X64-NO-BMI2-NO-SHLD-NEXT: pushq %r145358; X64-NO-BMI2-NO-SHLD-NEXT: pushq %r135359; X64-NO-BMI2-NO-SHLD-NEXT: pushq %r125360; X64-NO-BMI2-NO-SHLD-NEXT: pushq %rbx5361; X64-NO-BMI2-NO-SHLD-NEXT: pushq %rax5362; X64-NO-BMI2-NO-SHLD-NEXT: movq (%rdi), %rax5363; X64-NO-BMI2-NO-SHLD-NEXT: movq 8(%rdi), %rcx5364; X64-NO-BMI2-NO-SHLD-NEXT: movq 16(%rdi), %r95365; X64-NO-BMI2-NO-SHLD-NEXT: movq 24(%rdi), %r105366; X64-NO-BMI2-NO-SHLD-NEXT: movq 32(%rdi), %r115367; X64-NO-BMI2-NO-SHLD-NEXT: movq 40(%rdi), %rbx5368; X64-NO-BMI2-NO-SHLD-NEXT: movq 48(%rdi), %r145369; X64-NO-BMI2-NO-SHLD-NEXT: movq 56(%rdi), %rdi5370; X64-NO-BMI2-NO-SHLD-NEXT: movl (%rsi), %r8d5371; X64-NO-BMI2-NO-SHLD-NEXT: movq %rdi, -{{[0-9]+}}(%rsp)5372; X64-NO-BMI2-NO-SHLD-NEXT: movq %r14, -{{[0-9]+}}(%rsp)5373; X64-NO-BMI2-NO-SHLD-NEXT: movq %rbx, -{{[0-9]+}}(%rsp)5374; X64-NO-BMI2-NO-SHLD-NEXT: movq %r11, -{{[0-9]+}}(%rsp)5375; X64-NO-BMI2-NO-SHLD-NEXT: movq %r10, -{{[0-9]+}}(%rsp)5376; X64-NO-BMI2-NO-SHLD-NEXT: movq %r9, -{{[0-9]+}}(%rsp)5377; X64-NO-BMI2-NO-SHLD-NEXT: movq %rcx, -{{[0-9]+}}(%rsp)5378; X64-NO-BMI2-NO-SHLD-NEXT: movq %rax, -{{[0-9]+}}(%rsp)5379; X64-NO-BMI2-NO-SHLD-NEXT: sarq $63, %rdi5380; X64-NO-BMI2-NO-SHLD-NEXT: movq %rdi, -{{[0-9]+}}(%rsp)5381; X64-NO-BMI2-NO-SHLD-NEXT: movq %rdi, -{{[0-9]+}}(%rsp)5382; X64-NO-BMI2-NO-SHLD-NEXT: movq %rdi, -{{[0-9]+}}(%rsp)5383; X64-NO-BMI2-NO-SHLD-NEXT: movq %rdi, -{{[0-9]+}}(%rsp)5384; X64-NO-BMI2-NO-SHLD-NEXT: movq %rdi, -{{[0-9]+}}(%rsp)5385; X64-NO-BMI2-NO-SHLD-NEXT: movq %rdi, -{{[0-9]+}}(%rsp)5386; X64-NO-BMI2-NO-SHLD-NEXT: movq %rdi, -{{[0-9]+}}(%rsp)5387; X64-NO-BMI2-NO-SHLD-NEXT: movq %rdi, -{{[0-9]+}}(%rsp)5388; X64-NO-BMI2-NO-SHLD-NEXT: movl %r8d, %eax5389; X64-NO-BMI2-NO-SHLD-NEXT: andl $63, %eax5390; X64-NO-BMI2-NO-SHLD-NEXT: shrl $3, %r8d5391; X64-NO-BMI2-NO-SHLD-NEXT: andl $56, %r8d5392; X64-NO-BMI2-NO-SHLD-NEXT: movq -128(%rsp,%r8), %r115393; X64-NO-BMI2-NO-SHLD-NEXT: movq -120(%rsp,%r8), %r95394; X64-NO-BMI2-NO-SHLD-NEXT: movq %r9, %rsi5395; X64-NO-BMI2-NO-SHLD-NEXT: movl %eax, %ecx5396; X64-NO-BMI2-NO-SHLD-NEXT: shrq %cl, %rsi5397; X64-NO-BMI2-NO-SHLD-NEXT: movl %eax, %edi5398; X64-NO-BMI2-NO-SHLD-NEXT: notl %edi5399; X64-NO-BMI2-NO-SHLD-NEXT: movq -112(%rsp,%r8), %r145400; X64-NO-BMI2-NO-SHLD-NEXT: leaq (%r14,%r14), %r105401; X64-NO-BMI2-NO-SHLD-NEXT: movl %edi, %ecx5402; X64-NO-BMI2-NO-SHLD-NEXT: shlq %cl, %r105403; X64-NO-BMI2-NO-SHLD-NEXT: orq %rsi, %r105404; X64-NO-BMI2-NO-SHLD-NEXT: movl %eax, %ecx5405; X64-NO-BMI2-NO-SHLD-NEXT: shrq %cl, %r115406; X64-NO-BMI2-NO-SHLD-NEXT: movl %eax, %esi5407; X64-NO-BMI2-NO-SHLD-NEXT: xorb $63, %sil5408; X64-NO-BMI2-NO-SHLD-NEXT: addq %r9, %r95409; X64-NO-BMI2-NO-SHLD-NEXT: movl %esi, %ecx5410; X64-NO-BMI2-NO-SHLD-NEXT: shlq %cl, %r95411; X64-NO-BMI2-NO-SHLD-NEXT: orq %r11, %r95412; X64-NO-BMI2-NO-SHLD-NEXT: movq -104(%rsp,%r8), %r115413; X64-NO-BMI2-NO-SHLD-NEXT: movq %r11, %r125414; X64-NO-BMI2-NO-SHLD-NEXT: movl %eax, %ecx5415; X64-NO-BMI2-NO-SHLD-NEXT: shrq %cl, %r125416; X64-NO-BMI2-NO-SHLD-NEXT: movq -96(%rsp,%r8), %r155417; X64-NO-BMI2-NO-SHLD-NEXT: leaq (%r15,%r15), %rbx5418; X64-NO-BMI2-NO-SHLD-NEXT: movl %edi, %ecx5419; X64-NO-BMI2-NO-SHLD-NEXT: shlq %cl, %rbx5420; X64-NO-BMI2-NO-SHLD-NEXT: orq %r12, %rbx5421; X64-NO-BMI2-NO-SHLD-NEXT: movl %eax, %ecx5422; X64-NO-BMI2-NO-SHLD-NEXT: shrq %cl, %r145423; X64-NO-BMI2-NO-SHLD-NEXT: addq %r11, %r115424; X64-NO-BMI2-NO-SHLD-NEXT: movl %esi, %ecx5425; X64-NO-BMI2-NO-SHLD-NEXT: shlq %cl, %r115426; X64-NO-BMI2-NO-SHLD-NEXT: orq %r14, %r115427; X64-NO-BMI2-NO-SHLD-NEXT: movq -88(%rsp,%r8), %r145428; X64-NO-BMI2-NO-SHLD-NEXT: movq %r14, %r135429; X64-NO-BMI2-NO-SHLD-NEXT: movl %eax, %ecx5430; X64-NO-BMI2-NO-SHLD-NEXT: shrq %cl, %r135431; X64-NO-BMI2-NO-SHLD-NEXT: movq -80(%rsp,%r8), %rbp5432; X64-NO-BMI2-NO-SHLD-NEXT: leaq (%rbp,%rbp), %r125433; X64-NO-BMI2-NO-SHLD-NEXT: movl %edi, %ecx5434; X64-NO-BMI2-NO-SHLD-NEXT: shlq %cl, %r125435; X64-NO-BMI2-NO-SHLD-NEXT: orq %r13, %r125436; X64-NO-BMI2-NO-SHLD-NEXT: movl %eax, %ecx5437; X64-NO-BMI2-NO-SHLD-NEXT: shrq %cl, %r155438; X64-NO-BMI2-NO-SHLD-NEXT: addq %r14, %r145439; X64-NO-BMI2-NO-SHLD-NEXT: movl %esi, %ecx5440; X64-NO-BMI2-NO-SHLD-NEXT: shlq %cl, %r145441; X64-NO-BMI2-NO-SHLD-NEXT: orq %r15, %r145442; X64-NO-BMI2-NO-SHLD-NEXT: movl %eax, %ecx5443; X64-NO-BMI2-NO-SHLD-NEXT: shrq %cl, %rbp5444; X64-NO-BMI2-NO-SHLD-NEXT: movq -72(%rsp,%r8), %rdi5445; X64-NO-BMI2-NO-SHLD-NEXT: leaq (%rdi,%rdi), %r85446; X64-NO-BMI2-NO-SHLD-NEXT: movl %esi, %ecx5447; X64-NO-BMI2-NO-SHLD-NEXT: shlq %cl, %r85448; X64-NO-BMI2-NO-SHLD-NEXT: orq %rbp, %r85449; X64-NO-BMI2-NO-SHLD-NEXT: movl %eax, %ecx5450; X64-NO-BMI2-NO-SHLD-NEXT: sarq %cl, %rdi5451; X64-NO-BMI2-NO-SHLD-NEXT: movq %rdi, 56(%rdx)5452; X64-NO-BMI2-NO-SHLD-NEXT: movq %r8, 48(%rdx)5453; X64-NO-BMI2-NO-SHLD-NEXT: movq %r14, 32(%rdx)5454; X64-NO-BMI2-NO-SHLD-NEXT: movq %r12, 40(%rdx)5455; X64-NO-BMI2-NO-SHLD-NEXT: movq %r11, 16(%rdx)5456; X64-NO-BMI2-NO-SHLD-NEXT: movq %rbx, 24(%rdx)5457; X64-NO-BMI2-NO-SHLD-NEXT: movq %r9, (%rdx)5458; X64-NO-BMI2-NO-SHLD-NEXT: movq %r10, 8(%rdx)5459; X64-NO-BMI2-NO-SHLD-NEXT: addq $8, %rsp5460; X64-NO-BMI2-NO-SHLD-NEXT: popq %rbx5461; X64-NO-BMI2-NO-SHLD-NEXT: popq %r125462; X64-NO-BMI2-NO-SHLD-NEXT: popq %r135463; X64-NO-BMI2-NO-SHLD-NEXT: popq %r145464; X64-NO-BMI2-NO-SHLD-NEXT: popq %r155465; X64-NO-BMI2-NO-SHLD-NEXT: popq %rbp5466; X64-NO-BMI2-NO-SHLD-NEXT: retq5467;5468; X64-NO-BMI2-HAVE-SHLD-LABEL: ashr_64bytes:5469; X64-NO-BMI2-HAVE-SHLD: # %bb.0:5470; X64-NO-BMI2-HAVE-SHLD-NEXT: pushq %r155471; X64-NO-BMI2-HAVE-SHLD-NEXT: pushq %r145472; X64-NO-BMI2-HAVE-SHLD-NEXT: pushq %rbx5473; X64-NO-BMI2-HAVE-SHLD-NEXT: movq (%rdi), %rcx5474; X64-NO-BMI2-HAVE-SHLD-NEXT: movq 8(%rdi), %r85475; X64-NO-BMI2-HAVE-SHLD-NEXT: movq 16(%rdi), %r95476; X64-NO-BMI2-HAVE-SHLD-NEXT: movq 24(%rdi), %r105477; X64-NO-BMI2-HAVE-SHLD-NEXT: movq 32(%rdi), %r115478; X64-NO-BMI2-HAVE-SHLD-NEXT: movq 40(%rdi), %rbx5479; X64-NO-BMI2-HAVE-SHLD-NEXT: movq 48(%rdi), %r145480; X64-NO-BMI2-HAVE-SHLD-NEXT: movq 56(%rdi), %rdi5481; X64-NO-BMI2-HAVE-SHLD-NEXT: movl (%rsi), %eax5482; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %rdi, -{{[0-9]+}}(%rsp)5483; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %r14, -{{[0-9]+}}(%rsp)5484; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %rbx, -{{[0-9]+}}(%rsp)5485; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %r11, -{{[0-9]+}}(%rsp)5486; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %r10, -{{[0-9]+}}(%rsp)5487; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %r9, -{{[0-9]+}}(%rsp)5488; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %r8, -{{[0-9]+}}(%rsp)5489; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %rcx, -{{[0-9]+}}(%rsp)5490; X64-NO-BMI2-HAVE-SHLD-NEXT: sarq $63, %rdi5491; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %rdi, -{{[0-9]+}}(%rsp)5492; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %rdi, -{{[0-9]+}}(%rsp)5493; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %rdi, -{{[0-9]+}}(%rsp)5494; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %rdi, -{{[0-9]+}}(%rsp)5495; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %rdi, -{{[0-9]+}}(%rsp)5496; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %rdi, -{{[0-9]+}}(%rsp)5497; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %rdi, -{{[0-9]+}}(%rsp)5498; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %rdi, -{{[0-9]+}}(%rsp)5499; X64-NO-BMI2-HAVE-SHLD-NEXT: movl %eax, %ecx5500; X64-NO-BMI2-HAVE-SHLD-NEXT: andl $63, %ecx5501; X64-NO-BMI2-HAVE-SHLD-NEXT: shrl $3, %eax5502; X64-NO-BMI2-HAVE-SHLD-NEXT: andl $56, %eax5503; X64-NO-BMI2-HAVE-SHLD-NEXT: movq -112(%rsp,%rax), %rdi5504; X64-NO-BMI2-HAVE-SHLD-NEXT: movq -128(%rsp,%rax), %rsi5505; X64-NO-BMI2-HAVE-SHLD-NEXT: movq -120(%rsp,%rax), %r95506; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %r9, %r85507; X64-NO-BMI2-HAVE-SHLD-NEXT: shrdq %cl, %rdi, %r85508; X64-NO-BMI2-HAVE-SHLD-NEXT: movq -96(%rsp,%rax), %r105509; X64-NO-BMI2-HAVE-SHLD-NEXT: movq -104(%rsp,%rax), %r115510; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %r11, %rbx5511; X64-NO-BMI2-HAVE-SHLD-NEXT: shrdq %cl, %r10, %rbx5512; X64-NO-BMI2-HAVE-SHLD-NEXT: shrdq %cl, %r11, %rdi5513; X64-NO-BMI2-HAVE-SHLD-NEXT: movq -80(%rsp,%rax), %r115514; X64-NO-BMI2-HAVE-SHLD-NEXT: movq -88(%rsp,%rax), %r145515; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %r14, %r155516; X64-NO-BMI2-HAVE-SHLD-NEXT: shrdq %cl, %r11, %r155517; X64-NO-BMI2-HAVE-SHLD-NEXT: shrdq %cl, %r14, %r105518; X64-NO-BMI2-HAVE-SHLD-NEXT: movq -72(%rsp,%rax), %rax5519; X64-NO-BMI2-HAVE-SHLD-NEXT: shrdq %cl, %rax, %r115520; X64-NO-BMI2-HAVE-SHLD-NEXT: shrdq %cl, %r9, %rsi5521; X64-NO-BMI2-HAVE-SHLD-NEXT: # kill: def $cl killed $cl killed $ecx5522; X64-NO-BMI2-HAVE-SHLD-NEXT: sarq %cl, %rax5523; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %r11, 48(%rdx)5524; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %rax, 56(%rdx)5525; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %r10, 32(%rdx)5526; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %r15, 40(%rdx)5527; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %rdi, 16(%rdx)5528; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %rbx, 24(%rdx)5529; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %rsi, (%rdx)5530; X64-NO-BMI2-HAVE-SHLD-NEXT: movq %r8, 8(%rdx)5531; X64-NO-BMI2-HAVE-SHLD-NEXT: popq %rbx5532; X64-NO-BMI2-HAVE-SHLD-NEXT: popq %r145533; X64-NO-BMI2-HAVE-SHLD-NEXT: popq %r155534; X64-NO-BMI2-HAVE-SHLD-NEXT: retq5535;5536; X64-HAVE-BMI2-NO-SHLD-LABEL: ashr_64bytes:5537; X64-HAVE-BMI2-NO-SHLD: # %bb.0:5538; X64-HAVE-BMI2-NO-SHLD-NEXT: pushq %r155539; X64-HAVE-BMI2-NO-SHLD-NEXT: pushq %r145540; X64-HAVE-BMI2-NO-SHLD-NEXT: pushq %r135541; X64-HAVE-BMI2-NO-SHLD-NEXT: pushq %r125542; X64-HAVE-BMI2-NO-SHLD-NEXT: pushq %rbx5543; X64-HAVE-BMI2-NO-SHLD-NEXT: movq (%rdi), %rcx5544; X64-HAVE-BMI2-NO-SHLD-NEXT: movq 8(%rdi), %r85545; X64-HAVE-BMI2-NO-SHLD-NEXT: movq 16(%rdi), %r95546; X64-HAVE-BMI2-NO-SHLD-NEXT: movq 24(%rdi), %r105547; X64-HAVE-BMI2-NO-SHLD-NEXT: movq 32(%rdi), %r115548; X64-HAVE-BMI2-NO-SHLD-NEXT: movq 40(%rdi), %rbx5549; X64-HAVE-BMI2-NO-SHLD-NEXT: movq 48(%rdi), %r145550; X64-HAVE-BMI2-NO-SHLD-NEXT: movq 56(%rdi), %rdi5551; X64-HAVE-BMI2-NO-SHLD-NEXT: movl (%rsi), %eax5552; X64-HAVE-BMI2-NO-SHLD-NEXT: movq %rdi, -{{[0-9]+}}(%rsp)5553; X64-HAVE-BMI2-NO-SHLD-NEXT: movq %r14, -{{[0-9]+}}(%rsp)5554; X64-HAVE-BMI2-NO-SHLD-NEXT: movq %rbx, -{{[0-9]+}}(%rsp)5555; X64-HAVE-BMI2-NO-SHLD-NEXT: movq %r11, -{{[0-9]+}}(%rsp)5556; X64-HAVE-BMI2-NO-SHLD-NEXT: movq %r10, -{{[0-9]+}}(%rsp)5557; X64-HAVE-BMI2-NO-SHLD-NEXT: movq %r9, -{{[0-9]+}}(%rsp)5558; X64-HAVE-BMI2-NO-SHLD-NEXT: movq %r8, -{{[0-9]+}}(%rsp)5559; X64-HAVE-BMI2-NO-SHLD-NEXT: movq %rcx, -{{[0-9]+}}(%rsp)5560; X64-HAVE-BMI2-NO-SHLD-NEXT: sarq $63, %rdi5561; X64-HAVE-BMI2-NO-SHLD-NEXT: movq %rdi, -{{[0-9]+}}(%rsp)5562; X64-HAVE-BMI2-NO-SHLD-NEXT: movq %rdi, -{{[0-9]+}}(%rsp)5563; X64-HAVE-BMI2-NO-SHLD-NEXT: movq %rdi, -{{[0-9]+}}(%rsp)5564; X64-HAVE-BMI2-NO-SHLD-NEXT: movq %rdi, -{{[0-9]+}}(%rsp)5565; X64-HAVE-BMI2-NO-SHLD-NEXT: movq %rdi, -{{[0-9]+}}(%rsp)5566; X64-HAVE-BMI2-NO-SHLD-NEXT: movq %rdi, -{{[0-9]+}}(%rsp)5567; X64-HAVE-BMI2-NO-SHLD-NEXT: movq %rdi, -{{[0-9]+}}(%rsp)5568; X64-HAVE-BMI2-NO-SHLD-NEXT: movq %rdi, -{{[0-9]+}}(%rsp)5569; X64-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, %esi5570; X64-HAVE-BMI2-NO-SHLD-NEXT: andl $63, %esi5571; X64-HAVE-BMI2-NO-SHLD-NEXT: movl %esi, %ecx5572; X64-HAVE-BMI2-NO-SHLD-NEXT: shrl $3, %eax5573; X64-HAVE-BMI2-NO-SHLD-NEXT: andl $56, %eax5574; X64-HAVE-BMI2-NO-SHLD-NEXT: movq -120(%rsp,%rax), %r85575; X64-HAVE-BMI2-NO-SHLD-NEXT: movq -112(%rsp,%rax), %r115576; X64-HAVE-BMI2-NO-SHLD-NEXT: shrxq %rcx, %r8, %r95577; X64-HAVE-BMI2-NO-SHLD-NEXT: movl %esi, %r10d5578; X64-HAVE-BMI2-NO-SHLD-NEXT: notl %r10d5579; X64-HAVE-BMI2-NO-SHLD-NEXT: leaq (%r11,%r11), %rdi5580; X64-HAVE-BMI2-NO-SHLD-NEXT: shlxq %r10, %rdi, %rdi5581; X64-HAVE-BMI2-NO-SHLD-NEXT: orq %r9, %rdi5582; X64-HAVE-BMI2-NO-SHLD-NEXT: shrxq %rcx, -128(%rsp,%rax), %r95583; X64-HAVE-BMI2-NO-SHLD-NEXT: xorb $63, %sil5584; X64-HAVE-BMI2-NO-SHLD-NEXT: addq %r8, %r85585; X64-HAVE-BMI2-NO-SHLD-NEXT: shlxq %rsi, %r8, %r85586; X64-HAVE-BMI2-NO-SHLD-NEXT: orq %r9, %r85587; X64-HAVE-BMI2-NO-SHLD-NEXT: movq -104(%rsp,%rax), %rbx5588; X64-HAVE-BMI2-NO-SHLD-NEXT: shrxq %rcx, %rbx, %r145589; X64-HAVE-BMI2-NO-SHLD-NEXT: movq -96(%rsp,%rax), %r155590; X64-HAVE-BMI2-NO-SHLD-NEXT: leaq (%r15,%r15), %r95591; X64-HAVE-BMI2-NO-SHLD-NEXT: shlxq %r10, %r9, %r95592; X64-HAVE-BMI2-NO-SHLD-NEXT: orq %r14, %r95593; X64-HAVE-BMI2-NO-SHLD-NEXT: shrxq %rcx, %r11, %r115594; X64-HAVE-BMI2-NO-SHLD-NEXT: addq %rbx, %rbx5595; X64-HAVE-BMI2-NO-SHLD-NEXT: shlxq %rsi, %rbx, %rbx5596; X64-HAVE-BMI2-NO-SHLD-NEXT: orq %r11, %rbx5597; X64-HAVE-BMI2-NO-SHLD-NEXT: movq -88(%rsp,%rax), %r115598; X64-HAVE-BMI2-NO-SHLD-NEXT: shrxq %rcx, %r11, %r145599; X64-HAVE-BMI2-NO-SHLD-NEXT: movq -80(%rsp,%rax), %r125600; X64-HAVE-BMI2-NO-SHLD-NEXT: leaq (%r12,%r12), %r135601; X64-HAVE-BMI2-NO-SHLD-NEXT: shlxq %r10, %r13, %r105602; X64-HAVE-BMI2-NO-SHLD-NEXT: orq %r14, %r105603; X64-HAVE-BMI2-NO-SHLD-NEXT: shrxq %rcx, %r15, %r145604; X64-HAVE-BMI2-NO-SHLD-NEXT: addq %r11, %r115605; X64-HAVE-BMI2-NO-SHLD-NEXT: shlxq %rsi, %r11, %r115606; X64-HAVE-BMI2-NO-SHLD-NEXT: orq %r14, %r115607; X64-HAVE-BMI2-NO-SHLD-NEXT: shrxq %rcx, %r12, %r145608; X64-HAVE-BMI2-NO-SHLD-NEXT: movq -72(%rsp,%rax), %rax5609; X64-HAVE-BMI2-NO-SHLD-NEXT: leaq (%rax,%rax), %r155610; X64-HAVE-BMI2-NO-SHLD-NEXT: shlxq %rsi, %r15, %rsi5611; X64-HAVE-BMI2-NO-SHLD-NEXT: orq %r14, %rsi5612; X64-HAVE-BMI2-NO-SHLD-NEXT: sarxq %rcx, %rax, %rax5613; X64-HAVE-BMI2-NO-SHLD-NEXT: movq %rax, 56(%rdx)5614; X64-HAVE-BMI2-NO-SHLD-NEXT: movq %rsi, 48(%rdx)5615; X64-HAVE-BMI2-NO-SHLD-NEXT: movq %r11, 32(%rdx)5616; X64-HAVE-BMI2-NO-SHLD-NEXT: movq %r10, 40(%rdx)5617; X64-HAVE-BMI2-NO-SHLD-NEXT: movq %rbx, 16(%rdx)5618; X64-HAVE-BMI2-NO-SHLD-NEXT: movq %r9, 24(%rdx)5619; X64-HAVE-BMI2-NO-SHLD-NEXT: movq %r8, (%rdx)5620; X64-HAVE-BMI2-NO-SHLD-NEXT: movq %rdi, 8(%rdx)5621; X64-HAVE-BMI2-NO-SHLD-NEXT: popq %rbx5622; X64-HAVE-BMI2-NO-SHLD-NEXT: popq %r125623; X64-HAVE-BMI2-NO-SHLD-NEXT: popq %r135624; X64-HAVE-BMI2-NO-SHLD-NEXT: popq %r145625; X64-HAVE-BMI2-NO-SHLD-NEXT: popq %r155626; X64-HAVE-BMI2-NO-SHLD-NEXT: retq5627;5628; X64-HAVE-BMI2-HAVE-SHLD-LABEL: ashr_64bytes:5629; X64-HAVE-BMI2-HAVE-SHLD: # %bb.0:5630; X64-HAVE-BMI2-HAVE-SHLD-NEXT: pushq %r155631; X64-HAVE-BMI2-HAVE-SHLD-NEXT: pushq %r145632; X64-HAVE-BMI2-HAVE-SHLD-NEXT: pushq %rbx5633; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq (%rdi), %rcx5634; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq 8(%rdi), %r85635; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq 16(%rdi), %r95636; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq 24(%rdi), %r105637; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq 32(%rdi), %r115638; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq 40(%rdi), %rbx5639; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq 48(%rdi), %r145640; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq 56(%rdi), %rdi5641; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movl (%rsi), %eax5642; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq %rdi, -{{[0-9]+}}(%rsp)5643; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq %r14, -{{[0-9]+}}(%rsp)5644; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq %rbx, -{{[0-9]+}}(%rsp)5645; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq %r11, -{{[0-9]+}}(%rsp)5646; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq %r10, -{{[0-9]+}}(%rsp)5647; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq %r9, -{{[0-9]+}}(%rsp)5648; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq %r8, -{{[0-9]+}}(%rsp)5649; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq %rcx, -{{[0-9]+}}(%rsp)5650; X64-HAVE-BMI2-HAVE-SHLD-NEXT: sarq $63, %rdi5651; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq %rdi, -{{[0-9]+}}(%rsp)5652; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq %rdi, -{{[0-9]+}}(%rsp)5653; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq %rdi, -{{[0-9]+}}(%rsp)5654; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq %rdi, -{{[0-9]+}}(%rsp)5655; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq %rdi, -{{[0-9]+}}(%rsp)5656; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq %rdi, -{{[0-9]+}}(%rsp)5657; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq %rdi, -{{[0-9]+}}(%rsp)5658; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq %rdi, -{{[0-9]+}}(%rsp)5659; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movl %eax, %ecx5660; X64-HAVE-BMI2-HAVE-SHLD-NEXT: andl $63, %ecx5661; X64-HAVE-BMI2-HAVE-SHLD-NEXT: shrl $3, %eax5662; X64-HAVE-BMI2-HAVE-SHLD-NEXT: andl $56, %eax5663; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq -112(%rsp,%rax), %rdi5664; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq -128(%rsp,%rax), %rsi5665; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq -120(%rsp,%rax), %r95666; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq %r9, %r85667; X64-HAVE-BMI2-HAVE-SHLD-NEXT: shrdq %cl, %rdi, %r85668; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq -96(%rsp,%rax), %r105669; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq -104(%rsp,%rax), %r115670; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq %r11, %rbx5671; X64-HAVE-BMI2-HAVE-SHLD-NEXT: shrdq %cl, %r10, %rbx5672; X64-HAVE-BMI2-HAVE-SHLD-NEXT: shrdq %cl, %r11, %rdi5673; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq -80(%rsp,%rax), %r115674; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq -88(%rsp,%rax), %r145675; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq %r14, %r155676; X64-HAVE-BMI2-HAVE-SHLD-NEXT: shrdq %cl, %r11, %r155677; X64-HAVE-BMI2-HAVE-SHLD-NEXT: shrdq %cl, %r14, %r105678; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq -72(%rsp,%rax), %rax5679; X64-HAVE-BMI2-HAVE-SHLD-NEXT: shrdq %cl, %rax, %r115680; X64-HAVE-BMI2-HAVE-SHLD-NEXT: shrdq %cl, %r9, %rsi5681; X64-HAVE-BMI2-HAVE-SHLD-NEXT: sarxq %rcx, %rax, %rax5682; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq %r11, 48(%rdx)5683; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq %rax, 56(%rdx)5684; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq %r10, 32(%rdx)5685; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq %r15, 40(%rdx)5686; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq %rdi, 16(%rdx)5687; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq %rbx, 24(%rdx)5688; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq %rsi, (%rdx)5689; X64-HAVE-BMI2-HAVE-SHLD-NEXT: movq %r8, 8(%rdx)5690; X64-HAVE-BMI2-HAVE-SHLD-NEXT: popq %rbx5691; X64-HAVE-BMI2-HAVE-SHLD-NEXT: popq %r145692; X64-HAVE-BMI2-HAVE-SHLD-NEXT: popq %r155693; X64-HAVE-BMI2-HAVE-SHLD-NEXT: retq5694;5695; X86-NO-BMI2-NO-SHLD-LABEL: ashr_64bytes:5696; X86-NO-BMI2-NO-SHLD: # %bb.0:5697; X86-NO-BMI2-NO-SHLD-NEXT: pushl %ebp5698; X86-NO-BMI2-NO-SHLD-NEXT: pushl %ebx5699; X86-NO-BMI2-NO-SHLD-NEXT: pushl %edi5700; X86-NO-BMI2-NO-SHLD-NEXT: pushl %esi5701; X86-NO-BMI2-NO-SHLD-NEXT: subl $204, %esp5702; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[0-9]+}}(%esp), %eax5703; X86-NO-BMI2-NO-SHLD-NEXT: movl (%eax), %ecx5704; X86-NO-BMI2-NO-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill5705; X86-NO-BMI2-NO-SHLD-NEXT: movl 4(%eax), %ecx5706; X86-NO-BMI2-NO-SHLD-NEXT: movl %ecx, (%esp) # 4-byte Spill5707; X86-NO-BMI2-NO-SHLD-NEXT: movl 8(%eax), %ecx5708; X86-NO-BMI2-NO-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill5709; X86-NO-BMI2-NO-SHLD-NEXT: movl 12(%eax), %ecx5710; X86-NO-BMI2-NO-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill5711; X86-NO-BMI2-NO-SHLD-NEXT: movl 16(%eax), %ecx5712; X86-NO-BMI2-NO-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill5713; X86-NO-BMI2-NO-SHLD-NEXT: movl 20(%eax), %ecx5714; X86-NO-BMI2-NO-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill5715; X86-NO-BMI2-NO-SHLD-NEXT: movl 24(%eax), %ecx5716; X86-NO-BMI2-NO-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill5717; X86-NO-BMI2-NO-SHLD-NEXT: movl 28(%eax), %ecx5718; X86-NO-BMI2-NO-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill5719; X86-NO-BMI2-NO-SHLD-NEXT: movl 32(%eax), %ecx5720; X86-NO-BMI2-NO-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill5721; X86-NO-BMI2-NO-SHLD-NEXT: movl 36(%eax), %ecx5722; X86-NO-BMI2-NO-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill5723; X86-NO-BMI2-NO-SHLD-NEXT: movl 40(%eax), %ebx5724; X86-NO-BMI2-NO-SHLD-NEXT: movl 44(%eax), %edi5725; X86-NO-BMI2-NO-SHLD-NEXT: movl 48(%eax), %esi5726; X86-NO-BMI2-NO-SHLD-NEXT: movl 52(%eax), %edx5727; X86-NO-BMI2-NO-SHLD-NEXT: movl 56(%eax), %ecx5728; X86-NO-BMI2-NO-SHLD-NEXT: movl 60(%eax), %eax5729; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[0-9]+}}(%esp), %ebp5730; X86-NO-BMI2-NO-SHLD-NEXT: movl (%ebp), %ebp5731; X86-NO-BMI2-NO-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)5732; X86-NO-BMI2-NO-SHLD-NEXT: movl %edx, {{[0-9]+}}(%esp)5733; X86-NO-BMI2-NO-SHLD-NEXT: movl %esi, {{[0-9]+}}(%esp)5734; X86-NO-BMI2-NO-SHLD-NEXT: movl %edi, {{[0-9]+}}(%esp)5735; X86-NO-BMI2-NO-SHLD-NEXT: movl %ebx, {{[0-9]+}}(%esp)5736; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload5737; X86-NO-BMI2-NO-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)5738; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload5739; X86-NO-BMI2-NO-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)5740; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload5741; X86-NO-BMI2-NO-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)5742; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload5743; X86-NO-BMI2-NO-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)5744; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload5745; X86-NO-BMI2-NO-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)5746; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)5747; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload5748; X86-NO-BMI2-NO-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)5749; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload5750; X86-NO-BMI2-NO-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)5751; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload5752; X86-NO-BMI2-NO-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)5753; X86-NO-BMI2-NO-SHLD-NEXT: movl (%esp), %ecx # 4-byte Reload5754; X86-NO-BMI2-NO-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)5755; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload5756; X86-NO-BMI2-NO-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)5757; X86-NO-BMI2-NO-SHLD-NEXT: sarl $31, %eax5758; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)5759; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)5760; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)5761; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)5762; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)5763; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)5764; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)5765; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)5766; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)5767; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)5768; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)5769; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)5770; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)5771; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)5772; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)5773; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)5774; X86-NO-BMI2-NO-SHLD-NEXT: movl %ebp, %ebx5775; X86-NO-BMI2-NO-SHLD-NEXT: andl $31, %ebx5776; X86-NO-BMI2-NO-SHLD-NEXT: shrl $3, %ebp5777; X86-NO-BMI2-NO-SHLD-NEXT: andl $60, %ebp5778; X86-NO-BMI2-NO-SHLD-NEXT: movl 68(%esp,%ebp), %eax5779; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, %esi5780; X86-NO-BMI2-NO-SHLD-NEXT: movl %ebx, %ecx5781; X86-NO-BMI2-NO-SHLD-NEXT: shrl %cl, %esi5782; X86-NO-BMI2-NO-SHLD-NEXT: movl %ebx, %ecx5783; X86-NO-BMI2-NO-SHLD-NEXT: notl %ecx5784; X86-NO-BMI2-NO-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill5785; X86-NO-BMI2-NO-SHLD-NEXT: movl 72(%esp,%ebp), %edx5786; X86-NO-BMI2-NO-SHLD-NEXT: leal (%edx,%edx), %edi5787; X86-NO-BMI2-NO-SHLD-NEXT: # kill: def $cl killed $cl killed $ecx5788; X86-NO-BMI2-NO-SHLD-NEXT: shll %cl, %edi5789; X86-NO-BMI2-NO-SHLD-NEXT: orl %esi, %edi5790; X86-NO-BMI2-NO-SHLD-NEXT: movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill5791; X86-NO-BMI2-NO-SHLD-NEXT: movl 64(%esp,%ebp), %esi5792; X86-NO-BMI2-NO-SHLD-NEXT: movl %ebx, %ecx5793; X86-NO-BMI2-NO-SHLD-NEXT: shrl %cl, %esi5794; X86-NO-BMI2-NO-SHLD-NEXT: xorb $31, %cl5795; X86-NO-BMI2-NO-SHLD-NEXT: movb %cl, (%esp) # 1-byte Spill5796; X86-NO-BMI2-NO-SHLD-NEXT: addl %eax, %eax5797; X86-NO-BMI2-NO-SHLD-NEXT: shll %cl, %eax5798; X86-NO-BMI2-NO-SHLD-NEXT: orl %esi, %eax5799; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill5800; X86-NO-BMI2-NO-SHLD-NEXT: movl 76(%esp,%ebp), %edi5801; X86-NO-BMI2-NO-SHLD-NEXT: movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill5802; X86-NO-BMI2-NO-SHLD-NEXT: movl %ebx, %ecx5803; X86-NO-BMI2-NO-SHLD-NEXT: movl %ebx, %eax5804; X86-NO-BMI2-NO-SHLD-NEXT: movl %ebx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill5805; X86-NO-BMI2-NO-SHLD-NEXT: shrl %cl, %edi5806; X86-NO-BMI2-NO-SHLD-NEXT: movl 80(%esp,%ebp), %esi5807; X86-NO-BMI2-NO-SHLD-NEXT: leal (%esi,%esi), %ebx5808; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload5809; X86-NO-BMI2-NO-SHLD-NEXT: # kill: def $cl killed $cl killed $ecx5810; X86-NO-BMI2-NO-SHLD-NEXT: shll %cl, %ebx5811; X86-NO-BMI2-NO-SHLD-NEXT: orl %edi, %ebx5812; X86-NO-BMI2-NO-SHLD-NEXT: movl %ebx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill5813; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, %ecx5814; X86-NO-BMI2-NO-SHLD-NEXT: shrl %cl, %edx5815; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload5816; X86-NO-BMI2-NO-SHLD-NEXT: addl %eax, %eax5817; X86-NO-BMI2-NO-SHLD-NEXT: movzbl (%esp), %ecx # 1-byte Folded Reload5818; X86-NO-BMI2-NO-SHLD-NEXT: shll %cl, %eax5819; X86-NO-BMI2-NO-SHLD-NEXT: orl %edx, %eax5820; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill5821; X86-NO-BMI2-NO-SHLD-NEXT: movl 84(%esp,%ebp), %ebx5822; X86-NO-BMI2-NO-SHLD-NEXT: movl %ebx, %edi5823; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload5824; X86-NO-BMI2-NO-SHLD-NEXT: movl %edx, %ecx5825; X86-NO-BMI2-NO-SHLD-NEXT: shrl %cl, %edi5826; X86-NO-BMI2-NO-SHLD-NEXT: movl 88(%esp,%ebp), %eax5827; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill5828; X86-NO-BMI2-NO-SHLD-NEXT: addl %eax, %eax5829; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload5830; X86-NO-BMI2-NO-SHLD-NEXT: # kill: def $cl killed $cl killed $ecx5831; X86-NO-BMI2-NO-SHLD-NEXT: shll %cl, %eax5832; X86-NO-BMI2-NO-SHLD-NEXT: orl %edi, %eax5833; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill5834; X86-NO-BMI2-NO-SHLD-NEXT: movl %edx, %ecx5835; X86-NO-BMI2-NO-SHLD-NEXT: movl %edx, %eax5836; X86-NO-BMI2-NO-SHLD-NEXT: shrl %cl, %esi5837; X86-NO-BMI2-NO-SHLD-NEXT: addl %ebx, %ebx5838; X86-NO-BMI2-NO-SHLD-NEXT: movzbl (%esp), %ecx # 1-byte Folded Reload5839; X86-NO-BMI2-NO-SHLD-NEXT: shll %cl, %ebx5840; X86-NO-BMI2-NO-SHLD-NEXT: orl %esi, %ebx5841; X86-NO-BMI2-NO-SHLD-NEXT: movl %ebx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill5842; X86-NO-BMI2-NO-SHLD-NEXT: movl 92(%esp,%ebp), %edx5843; X86-NO-BMI2-NO-SHLD-NEXT: movl %edx, %esi5844; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, %ecx5845; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, %ebx5846; X86-NO-BMI2-NO-SHLD-NEXT: shrl %cl, %esi5847; X86-NO-BMI2-NO-SHLD-NEXT: movl 96(%esp,%ebp), %eax5848; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill5849; X86-NO-BMI2-NO-SHLD-NEXT: leal (%eax,%eax), %edi5850; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload5851; X86-NO-BMI2-NO-SHLD-NEXT: # kill: def $cl killed $cl killed $ecx5852; X86-NO-BMI2-NO-SHLD-NEXT: shll %cl, %edi5853; X86-NO-BMI2-NO-SHLD-NEXT: orl %esi, %edi5854; X86-NO-BMI2-NO-SHLD-NEXT: movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill5855; X86-NO-BMI2-NO-SHLD-NEXT: movl %ebx, %ecx5856; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload5857; X86-NO-BMI2-NO-SHLD-NEXT: shrl %cl, %eax5858; X86-NO-BMI2-NO-SHLD-NEXT: addl %edx, %edx5859; X86-NO-BMI2-NO-SHLD-NEXT: movzbl (%esp), %ecx # 1-byte Folded Reload5860; X86-NO-BMI2-NO-SHLD-NEXT: shll %cl, %edx5861; X86-NO-BMI2-NO-SHLD-NEXT: orl %eax, %edx5862; X86-NO-BMI2-NO-SHLD-NEXT: movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill5863; X86-NO-BMI2-NO-SHLD-NEXT: movl 100(%esp,%ebp), %edi5864; X86-NO-BMI2-NO-SHLD-NEXT: movl %edi, %esi5865; X86-NO-BMI2-NO-SHLD-NEXT: movl %ebx, %ecx5866; X86-NO-BMI2-NO-SHLD-NEXT: shrl %cl, %esi5867; X86-NO-BMI2-NO-SHLD-NEXT: movl 104(%esp,%ebp), %edx5868; X86-NO-BMI2-NO-SHLD-NEXT: leal (%edx,%edx), %eax5869; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload5870; X86-NO-BMI2-NO-SHLD-NEXT: # kill: def $cl killed $cl killed $ecx5871; X86-NO-BMI2-NO-SHLD-NEXT: shll %cl, %eax5872; X86-NO-BMI2-NO-SHLD-NEXT: orl %esi, %eax5873; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill5874; X86-NO-BMI2-NO-SHLD-NEXT: movl %ebx, %eax5875; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, %ecx5876; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Reload5877; X86-NO-BMI2-NO-SHLD-NEXT: shrl %cl, %esi5878; X86-NO-BMI2-NO-SHLD-NEXT: addl %edi, %edi5879; X86-NO-BMI2-NO-SHLD-NEXT: movzbl (%esp), %ecx # 1-byte Folded Reload5880; X86-NO-BMI2-NO-SHLD-NEXT: shll %cl, %edi5881; X86-NO-BMI2-NO-SHLD-NEXT: orl %esi, %edi5882; X86-NO-BMI2-NO-SHLD-NEXT: movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill5883; X86-NO-BMI2-NO-SHLD-NEXT: movl 108(%esp,%ebp), %ebx5884; X86-NO-BMI2-NO-SHLD-NEXT: movl %ebx, %esi5885; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, %ecx5886; X86-NO-BMI2-NO-SHLD-NEXT: shrl %cl, %esi5887; X86-NO-BMI2-NO-SHLD-NEXT: movl 112(%esp,%ebp), %ecx5888; X86-NO-BMI2-NO-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill5889; X86-NO-BMI2-NO-SHLD-NEXT: leal (%ecx,%ecx), %edi5890; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload5891; X86-NO-BMI2-NO-SHLD-NEXT: # kill: def $cl killed $cl killed $ecx5892; X86-NO-BMI2-NO-SHLD-NEXT: shll %cl, %edi5893; X86-NO-BMI2-NO-SHLD-NEXT: orl %esi, %edi5894; X86-NO-BMI2-NO-SHLD-NEXT: movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill5895; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, %ecx5896; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, %edi5897; X86-NO-BMI2-NO-SHLD-NEXT: shrl %cl, %edx5898; X86-NO-BMI2-NO-SHLD-NEXT: addl %ebx, %ebx5899; X86-NO-BMI2-NO-SHLD-NEXT: movzbl (%esp), %ecx # 1-byte Folded Reload5900; X86-NO-BMI2-NO-SHLD-NEXT: shll %cl, %ebx5901; X86-NO-BMI2-NO-SHLD-NEXT: orl %edx, %ebx5902; X86-NO-BMI2-NO-SHLD-NEXT: movl 116(%esp,%ebp), %esi5903; X86-NO-BMI2-NO-SHLD-NEXT: movl %esi, %eax5904; X86-NO-BMI2-NO-SHLD-NEXT: movl %edi, %edx5905; X86-NO-BMI2-NO-SHLD-NEXT: movl %edx, %ecx5906; X86-NO-BMI2-NO-SHLD-NEXT: shrl %cl, %eax5907; X86-NO-BMI2-NO-SHLD-NEXT: movl 120(%esp,%ebp), %ecx5908; X86-NO-BMI2-NO-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill5909; X86-NO-BMI2-NO-SHLD-NEXT: leal (%ecx,%ecx), %edi5910; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload5911; X86-NO-BMI2-NO-SHLD-NEXT: # kill: def $cl killed $cl killed $ecx5912; X86-NO-BMI2-NO-SHLD-NEXT: shll %cl, %edi5913; X86-NO-BMI2-NO-SHLD-NEXT: orl %eax, %edi5914; X86-NO-BMI2-NO-SHLD-NEXT: movl %edx, %eax5915; X86-NO-BMI2-NO-SHLD-NEXT: movl %eax, %ecx5916; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload5917; X86-NO-BMI2-NO-SHLD-NEXT: shrl %cl, %edx5918; X86-NO-BMI2-NO-SHLD-NEXT: addl %esi, %esi5919; X86-NO-BMI2-NO-SHLD-NEXT: movb (%esp), %ch # 1-byte Reload5920; X86-NO-BMI2-NO-SHLD-NEXT: movb %ch, %cl5921; X86-NO-BMI2-NO-SHLD-NEXT: shll %cl, %esi5922; X86-NO-BMI2-NO-SHLD-NEXT: orl %edx, %esi5923; X86-NO-BMI2-NO-SHLD-NEXT: movb %al, %cl5924; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload5925; X86-NO-BMI2-NO-SHLD-NEXT: shrl %cl, %eax5926; X86-NO-BMI2-NO-SHLD-NEXT: movl 124(%esp,%ebp), %ebp5927; X86-NO-BMI2-NO-SHLD-NEXT: leal (%ebp,%ebp), %edx5928; X86-NO-BMI2-NO-SHLD-NEXT: movb %ch, %cl5929; X86-NO-BMI2-NO-SHLD-NEXT: shll %cl, %edx5930; X86-NO-BMI2-NO-SHLD-NEXT: orl %eax, %edx5931; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload5932; X86-NO-BMI2-NO-SHLD-NEXT: # kill: def $cl killed $cl killed $ecx5933; X86-NO-BMI2-NO-SHLD-NEXT: sarl %cl, %ebp5934; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[0-9]+}}(%esp), %eax5935; X86-NO-BMI2-NO-SHLD-NEXT: movl %ebp, 60(%eax)5936; X86-NO-BMI2-NO-SHLD-NEXT: movl %edx, 56(%eax)5937; X86-NO-BMI2-NO-SHLD-NEXT: movl %esi, 48(%eax)5938; X86-NO-BMI2-NO-SHLD-NEXT: movl %edi, 52(%eax)5939; X86-NO-BMI2-NO-SHLD-NEXT: movl %ebx, 40(%eax)5940; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload5941; X86-NO-BMI2-NO-SHLD-NEXT: movl %ecx, 44(%eax)5942; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload5943; X86-NO-BMI2-NO-SHLD-NEXT: movl %ecx, 32(%eax)5944; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload5945; X86-NO-BMI2-NO-SHLD-NEXT: movl %ecx, 36(%eax)5946; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload5947; X86-NO-BMI2-NO-SHLD-NEXT: movl %ecx, 24(%eax)5948; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload5949; X86-NO-BMI2-NO-SHLD-NEXT: movl %ecx, 28(%eax)5950; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload5951; X86-NO-BMI2-NO-SHLD-NEXT: movl %ecx, 16(%eax)5952; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload5953; X86-NO-BMI2-NO-SHLD-NEXT: movl %ecx, 20(%eax)5954; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload5955; X86-NO-BMI2-NO-SHLD-NEXT: movl %ecx, 8(%eax)5956; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload5957; X86-NO-BMI2-NO-SHLD-NEXT: movl %ecx, 12(%eax)5958; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload5959; X86-NO-BMI2-NO-SHLD-NEXT: movl %ecx, (%eax)5960; X86-NO-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload5961; X86-NO-BMI2-NO-SHLD-NEXT: movl %ecx, 4(%eax)5962; X86-NO-BMI2-NO-SHLD-NEXT: addl $204, %esp5963; X86-NO-BMI2-NO-SHLD-NEXT: popl %esi5964; X86-NO-BMI2-NO-SHLD-NEXT: popl %edi5965; X86-NO-BMI2-NO-SHLD-NEXT: popl %ebx5966; X86-NO-BMI2-NO-SHLD-NEXT: popl %ebp5967; X86-NO-BMI2-NO-SHLD-NEXT: retl5968;5969; X86-NO-BMI2-HAVE-SHLD-LABEL: ashr_64bytes:5970; X86-NO-BMI2-HAVE-SHLD: # %bb.0:5971; X86-NO-BMI2-HAVE-SHLD-NEXT: pushl %ebp5972; X86-NO-BMI2-HAVE-SHLD-NEXT: pushl %ebx5973; X86-NO-BMI2-HAVE-SHLD-NEXT: pushl %edi5974; X86-NO-BMI2-HAVE-SHLD-NEXT: pushl %esi5975; X86-NO-BMI2-HAVE-SHLD-NEXT: subl $188, %esp5976; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[0-9]+}}(%esp), %eax5977; X86-NO-BMI2-HAVE-SHLD-NEXT: movl (%eax), %ecx5978; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill5979; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 4(%eax), %ecx5980; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill5981; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 8(%eax), %ecx5982; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill5983; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 12(%eax), %ecx5984; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill5985; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 16(%eax), %ecx5986; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill5987; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 20(%eax), %ecx5988; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill5989; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 24(%eax), %ecx5990; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill5991; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 28(%eax), %ecx5992; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill5993; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 32(%eax), %ecx5994; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill5995; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 36(%eax), %ecx5996; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ecx, (%esp) # 4-byte Spill5997; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 40(%eax), %ebp5998; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 44(%eax), %ebx5999; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 48(%eax), %edi6000; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 52(%eax), %esi6001; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 56(%eax), %edx6002; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 60(%eax), %ecx6003; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[0-9]+}}(%esp), %eax6004; X86-NO-BMI2-HAVE-SHLD-NEXT: movl (%eax), %eax6005; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %edx, {{[0-9]+}}(%esp)6006; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %esi, {{[0-9]+}}(%esp)6007; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %edi, {{[0-9]+}}(%esp)6008; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ebx, {{[0-9]+}}(%esp)6009; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ebp, {{[0-9]+}}(%esp)6010; X86-NO-BMI2-HAVE-SHLD-NEXT: movl (%esp), %edx # 4-byte Reload6011; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %edx, {{[0-9]+}}(%esp)6012; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload6013; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %edx, {{[0-9]+}}(%esp)6014; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload6015; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %edx, {{[0-9]+}}(%esp)6016; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload6017; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %edx, {{[0-9]+}}(%esp)6018; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload6019; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %edx, {{[0-9]+}}(%esp)6020; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)6021; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload6022; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %edx, {{[0-9]+}}(%esp)6023; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload6024; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %edx, {{[0-9]+}}(%esp)6025; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload6026; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %edx, {{[0-9]+}}(%esp)6027; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload6028; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %edx, {{[0-9]+}}(%esp)6029; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload6030; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %edx, {{[0-9]+}}(%esp)6031; X86-NO-BMI2-HAVE-SHLD-NEXT: sarl $31, %ecx6032; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)6033; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)6034; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)6035; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)6036; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)6037; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)6038; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)6039; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)6040; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)6041; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)6042; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)6043; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)6044; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)6045; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)6046; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)6047; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)6048; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %eax, %ecx6049; X86-NO-BMI2-HAVE-SHLD-NEXT: andl $31, %ecx6050; X86-NO-BMI2-HAVE-SHLD-NEXT: shrl $3, %eax6051; X86-NO-BMI2-HAVE-SHLD-NEXT: andl $60, %eax6052; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 56(%esp,%eax), %esi6053; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 52(%esp,%eax), %edx6054; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill6055; X86-NO-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %esi, %edx6056; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill6057; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 64(%esp,%eax), %ebx6058; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 60(%esp,%eax), %edx6059; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %edx, %edi6060; X86-NO-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %ebx, %edi6061; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill6062; X86-NO-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %edx, %esi6063; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill6064; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 72(%esp,%eax), %edi6065; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 68(%esp,%eax), %edx6066; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %edx, %esi6067; X86-NO-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %edi, %esi6068; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill6069; X86-NO-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %edx, %ebx6070; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ebx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill6071; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 80(%esp,%eax), %ebx6072; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 76(%esp,%eax), %edx6073; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %edx, %esi6074; X86-NO-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %ebx, %esi6075; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill6076; X86-NO-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %edx, %edi6077; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill6078; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 88(%esp,%eax), %edi6079; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 84(%esp,%eax), %edx6080; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %edx, %esi6081; X86-NO-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %edi, %esi6082; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill6083; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %edi, %esi6084; X86-NO-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %edx, %ebx6085; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ebx, (%esp) # 4-byte Spill6086; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 96(%esp,%eax), %edi6087; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 92(%esp,%eax), %edx6088; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %edx, %ebx6089; X86-NO-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %edi, %ebx6090; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ebx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill6091; X86-NO-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %edx, %esi6092; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill6093; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 104(%esp,%eax), %esi6094; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 100(%esp,%eax), %edx6095; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %edx, %ebx6096; X86-NO-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %esi, %ebx6097; X86-NO-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %edx, %edi6098; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 48(%esp,%eax), %ebp6099; X86-NO-BMI2-HAVE-SHLD-NEXT: movl 108(%esp,%eax), %edx6100; X86-NO-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %edx, %esi6101; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[0-9]+}}(%esp), %eax6102; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %esi, 56(%eax)6103; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Reload6104; X86-NO-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %esi, %ebp6105; X86-NO-BMI2-HAVE-SHLD-NEXT: # kill: def $cl killed $cl killed $ecx6106; X86-NO-BMI2-HAVE-SHLD-NEXT: sarl %cl, %edx6107; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %edx, 60(%eax)6108; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %edi, 48(%eax)6109; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ebx, 52(%eax)6110; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload6111; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ecx, 40(%eax)6112; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload6113; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ecx, 44(%eax)6114; X86-NO-BMI2-HAVE-SHLD-NEXT: movl (%esp), %ecx # 4-byte Reload6115; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ecx, 32(%eax)6116; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload6117; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ecx, 36(%eax)6118; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload6119; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ecx, 24(%eax)6120; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload6121; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ecx, 28(%eax)6122; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload6123; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ecx, 16(%eax)6124; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload6125; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ecx, 20(%eax)6126; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload6127; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ecx, 8(%eax)6128; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload6129; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ecx, 12(%eax)6130; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ebp, (%eax)6131; X86-NO-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload6132; X86-NO-BMI2-HAVE-SHLD-NEXT: movl %ecx, 4(%eax)6133; X86-NO-BMI2-HAVE-SHLD-NEXT: addl $188, %esp6134; X86-NO-BMI2-HAVE-SHLD-NEXT: popl %esi6135; X86-NO-BMI2-HAVE-SHLD-NEXT: popl %edi6136; X86-NO-BMI2-HAVE-SHLD-NEXT: popl %ebx6137; X86-NO-BMI2-HAVE-SHLD-NEXT: popl %ebp6138; X86-NO-BMI2-HAVE-SHLD-NEXT: retl6139;6140; X86-HAVE-BMI2-NO-SHLD-LABEL: ashr_64bytes:6141; X86-HAVE-BMI2-NO-SHLD: # %bb.0:6142; X86-HAVE-BMI2-NO-SHLD-NEXT: pushl %ebp6143; X86-HAVE-BMI2-NO-SHLD-NEXT: pushl %ebx6144; X86-HAVE-BMI2-NO-SHLD-NEXT: pushl %edi6145; X86-HAVE-BMI2-NO-SHLD-NEXT: pushl %esi6146; X86-HAVE-BMI2-NO-SHLD-NEXT: subl $204, %esp6147; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[0-9]+}}(%esp), %eax6148; X86-HAVE-BMI2-NO-SHLD-NEXT: movl (%eax), %ecx6149; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill6150; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 4(%eax), %ecx6151; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill6152; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 8(%eax), %ecx6153; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill6154; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 12(%eax), %ecx6155; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill6156; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 16(%eax), %ecx6157; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill6158; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 20(%eax), %ecx6159; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill6160; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 24(%eax), %ecx6161; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill6162; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 28(%eax), %ecx6163; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill6164; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 32(%eax), %ecx6165; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill6166; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 36(%eax), %ecx6167; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill6168; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 40(%eax), %ecx6169; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill6170; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 44(%eax), %ebp6171; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 48(%eax), %edi6172; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 52(%eax), %esi6173; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 56(%eax), %edx6174; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 60(%eax), %ecx6175; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[0-9]+}}(%esp), %eax6176; X86-HAVE-BMI2-NO-SHLD-NEXT: movl (%eax), %ebx6177; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %edx, {{[0-9]+}}(%esp)6178; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %esi, {{[0-9]+}}(%esp)6179; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %edi, {{[0-9]+}}(%esp)6180; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ebp, {{[0-9]+}}(%esp)6181; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload6182; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)6183; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload6184; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)6185; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload6186; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)6187; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload6188; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)6189; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload6190; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)6191; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload6192; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)6193; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)6194; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload6195; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)6196; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload6197; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)6198; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload6199; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)6200; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload6201; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)6202; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload6203; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, {{[0-9]+}}(%esp)6204; X86-HAVE-BMI2-NO-SHLD-NEXT: sarl $31, %ecx6205; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)6206; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)6207; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)6208; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)6209; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)6210; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)6211; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)6212; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)6213; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)6214; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)6215; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)6216; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)6217; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)6218; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)6219; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)6220; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)6221; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ebx, %ecx6222; X86-HAVE-BMI2-NO-SHLD-NEXT: andl $31, %ecx6223; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, %edx6224; X86-HAVE-BMI2-NO-SHLD-NEXT: shrl $3, %ebx6225; X86-HAVE-BMI2-NO-SHLD-NEXT: andl $60, %ebx6226; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 68(%esp,%ebx), %edi6227; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 72(%esp,%ebx), %esi6228; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill6229; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, %eax6230; X86-HAVE-BMI2-NO-SHLD-NEXT: notl %eax6231; X86-HAVE-BMI2-NO-SHLD-NEXT: leal (%esi,%esi), %ebp6232; X86-HAVE-BMI2-NO-SHLD-NEXT: shlxl %eax, %ebp, %esi6233; X86-HAVE-BMI2-NO-SHLD-NEXT: shrxl %edx, %edi, %ebp6234; X86-HAVE-BMI2-NO-SHLD-NEXT: orl %ebp, %esi6235; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill6236; X86-HAVE-BMI2-NO-SHLD-NEXT: xorb $31, %cl6237; X86-HAVE-BMI2-NO-SHLD-NEXT: addl %edi, %edi6238; X86-HAVE-BMI2-NO-SHLD-NEXT: shlxl %ecx, %edi, %esi6239; X86-HAVE-BMI2-NO-SHLD-NEXT: shrxl %edx, 64(%esp,%ebx), %edi6240; X86-HAVE-BMI2-NO-SHLD-NEXT: orl %edi, %esi6241; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill6242; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 80(%esp,%ebx), %esi6243; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill6244; X86-HAVE-BMI2-NO-SHLD-NEXT: leal (%esi,%esi), %ebp6245; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, %edi6246; X86-HAVE-BMI2-NO-SHLD-NEXT: shlxl %eax, %ebp, %eax6247; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 76(%esp,%ebx), %ebp6248; X86-HAVE-BMI2-NO-SHLD-NEXT: shrxl %edx, %ebp, %esi6249; X86-HAVE-BMI2-NO-SHLD-NEXT: orl %esi, %eax6250; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill6251; X86-HAVE-BMI2-NO-SHLD-NEXT: shrxl %edx, {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Folded Reload6252; X86-HAVE-BMI2-NO-SHLD-NEXT: addl %ebp, %ebp6253; X86-HAVE-BMI2-NO-SHLD-NEXT: shlxl %ecx, %ebp, %eax6254; X86-HAVE-BMI2-NO-SHLD-NEXT: orl %esi, %eax6255; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill6256; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 88(%esp,%ebx), %eax6257; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill6258; X86-HAVE-BMI2-NO-SHLD-NEXT: leal (%eax,%eax), %ebp6259; X86-HAVE-BMI2-NO-SHLD-NEXT: shlxl %edi, %ebp, %eax6260; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 84(%esp,%ebx), %ebp6261; X86-HAVE-BMI2-NO-SHLD-NEXT: shrxl %edx, %ebp, %esi6262; X86-HAVE-BMI2-NO-SHLD-NEXT: orl %esi, %eax6263; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill6264; X86-HAVE-BMI2-NO-SHLD-NEXT: shrxl %edx, {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Folded Reload6265; X86-HAVE-BMI2-NO-SHLD-NEXT: addl %ebp, %ebp6266; X86-HAVE-BMI2-NO-SHLD-NEXT: shlxl %ecx, %ebp, %eax6267; X86-HAVE-BMI2-NO-SHLD-NEXT: orl %esi, %eax6268; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill6269; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 96(%esp,%ebx), %eax6270; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill6271; X86-HAVE-BMI2-NO-SHLD-NEXT: leal (%eax,%eax), %esi6272; X86-HAVE-BMI2-NO-SHLD-NEXT: shlxl %edi, %esi, %eax6273; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 92(%esp,%ebx), %esi6274; X86-HAVE-BMI2-NO-SHLD-NEXT: shrxl %edx, %esi, %ebp6275; X86-HAVE-BMI2-NO-SHLD-NEXT: orl %ebp, %eax6276; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill6277; X86-HAVE-BMI2-NO-SHLD-NEXT: shrxl %edx, {{[-0-9]+}}(%e{{[sb]}}p), %ebp # 4-byte Folded Reload6278; X86-HAVE-BMI2-NO-SHLD-NEXT: addl %esi, %esi6279; X86-HAVE-BMI2-NO-SHLD-NEXT: shlxl %ecx, %esi, %eax6280; X86-HAVE-BMI2-NO-SHLD-NEXT: orl %ebp, %eax6281; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill6282; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 104(%esp,%ebx), %eax6283; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill6284; X86-HAVE-BMI2-NO-SHLD-NEXT: leal (%eax,%eax), %ebp6285; X86-HAVE-BMI2-NO-SHLD-NEXT: shlxl %edi, %ebp, %eax6286; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 100(%esp,%ebx), %ebp6287; X86-HAVE-BMI2-NO-SHLD-NEXT: shrxl %edx, %ebp, %esi6288; X86-HAVE-BMI2-NO-SHLD-NEXT: orl %esi, %eax6289; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill6290; X86-HAVE-BMI2-NO-SHLD-NEXT: shrxl %edx, {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Folded Reload6291; X86-HAVE-BMI2-NO-SHLD-NEXT: addl %ebp, %ebp6292; X86-HAVE-BMI2-NO-SHLD-NEXT: shlxl %ecx, %ebp, %eax6293; X86-HAVE-BMI2-NO-SHLD-NEXT: orl %esi, %eax6294; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill6295; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 112(%esp,%ebx), %eax6296; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill6297; X86-HAVE-BMI2-NO-SHLD-NEXT: leal (%eax,%eax), %esi6298; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %edi, %eax6299; X86-HAVE-BMI2-NO-SHLD-NEXT: shlxl %edi, %esi, %ebp6300; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 108(%esp,%ebx), %esi6301; X86-HAVE-BMI2-NO-SHLD-NEXT: shrxl %edx, %esi, %edi6302; X86-HAVE-BMI2-NO-SHLD-NEXT: orl %edi, %ebp6303; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ebp, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill6304; X86-HAVE-BMI2-NO-SHLD-NEXT: shrxl %edx, {{[-0-9]+}}(%e{{[sb]}}p), %edi # 4-byte Folded Reload6305; X86-HAVE-BMI2-NO-SHLD-NEXT: addl %esi, %esi6306; X86-HAVE-BMI2-NO-SHLD-NEXT: shlxl %ecx, %esi, %esi6307; X86-HAVE-BMI2-NO-SHLD-NEXT: orl %edi, %esi6308; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill6309; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 120(%esp,%ebx), %edi6310; X86-HAVE-BMI2-NO-SHLD-NEXT: leal (%edi,%edi), %ebp6311; X86-HAVE-BMI2-NO-SHLD-NEXT: shlxl %eax, %ebp, %eax6312; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 116(%esp,%ebx), %ebp6313; X86-HAVE-BMI2-NO-SHLD-NEXT: shrxl %edx, %ebp, %esi6314; X86-HAVE-BMI2-NO-SHLD-NEXT: orl %esi, %eax6315; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill6316; X86-HAVE-BMI2-NO-SHLD-NEXT: shrxl %edx, {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Folded Reload6317; X86-HAVE-BMI2-NO-SHLD-NEXT: addl %ebp, %ebp6318; X86-HAVE-BMI2-NO-SHLD-NEXT: shlxl %ecx, %ebp, %ebp6319; X86-HAVE-BMI2-NO-SHLD-NEXT: orl %esi, %ebp6320; X86-HAVE-BMI2-NO-SHLD-NEXT: movl 124(%esp,%ebx), %eax6321; X86-HAVE-BMI2-NO-SHLD-NEXT: leal (%eax,%eax), %esi6322; X86-HAVE-BMI2-NO-SHLD-NEXT: shlxl %ecx, %esi, %esi6323; X86-HAVE-BMI2-NO-SHLD-NEXT: shrxl %edx, %edi, %edi6324; X86-HAVE-BMI2-NO-SHLD-NEXT: orl %edi, %esi6325; X86-HAVE-BMI2-NO-SHLD-NEXT: sarxl %edx, %eax, %edx6326; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[0-9]+}}(%esp), %eax6327; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %edx, 60(%eax)6328; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %esi, 56(%eax)6329; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ebp, 48(%eax)6330; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload6331; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, 52(%eax)6332; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload6333; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, 40(%eax)6334; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload6335; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, 44(%eax)6336; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload6337; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, 32(%eax)6338; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload6339; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, 36(%eax)6340; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload6341; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, 24(%eax)6342; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload6343; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, 28(%eax)6344; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload6345; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, 16(%eax)6346; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload6347; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, 20(%eax)6348; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload6349; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, 8(%eax)6350; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload6351; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, 12(%eax)6352; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload6353; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, (%eax)6354; X86-HAVE-BMI2-NO-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload6355; X86-HAVE-BMI2-NO-SHLD-NEXT: movl %ecx, 4(%eax)6356; X86-HAVE-BMI2-NO-SHLD-NEXT: addl $204, %esp6357; X86-HAVE-BMI2-NO-SHLD-NEXT: popl %esi6358; X86-HAVE-BMI2-NO-SHLD-NEXT: popl %edi6359; X86-HAVE-BMI2-NO-SHLD-NEXT: popl %ebx6360; X86-HAVE-BMI2-NO-SHLD-NEXT: popl %ebp6361; X86-HAVE-BMI2-NO-SHLD-NEXT: retl6362;6363; X86-HAVE-BMI2-HAVE-SHLD-LABEL: ashr_64bytes:6364; X86-HAVE-BMI2-HAVE-SHLD: # %bb.0:6365; X86-HAVE-BMI2-HAVE-SHLD-NEXT: pushl %ebp6366; X86-HAVE-BMI2-HAVE-SHLD-NEXT: pushl %ebx6367; X86-HAVE-BMI2-HAVE-SHLD-NEXT: pushl %edi6368; X86-HAVE-BMI2-HAVE-SHLD-NEXT: pushl %esi6369; X86-HAVE-BMI2-HAVE-SHLD-NEXT: subl $188, %esp6370; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[0-9]+}}(%esp), %eax6371; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl (%eax), %ecx6372; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill6373; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 4(%eax), %ecx6374; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill6375; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 8(%eax), %ecx6376; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill6377; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 12(%eax), %ecx6378; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill6379; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 16(%eax), %ecx6380; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill6381; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 20(%eax), %ecx6382; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill6383; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 24(%eax), %ecx6384; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill6385; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 28(%eax), %ecx6386; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill6387; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 32(%eax), %ecx6388; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill6389; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 36(%eax), %ecx6390; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ecx, (%esp) # 4-byte Spill6391; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 40(%eax), %ebp6392; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 44(%eax), %ebx6393; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 48(%eax), %edi6394; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 52(%eax), %esi6395; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 56(%eax), %edx6396; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 60(%eax), %ecx6397; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[0-9]+}}(%esp), %eax6398; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl (%eax), %eax6399; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edx, {{[0-9]+}}(%esp)6400; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %esi, {{[0-9]+}}(%esp)6401; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edi, {{[0-9]+}}(%esp)6402; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ebx, {{[0-9]+}}(%esp)6403; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ebp, {{[0-9]+}}(%esp)6404; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl (%esp), %edx # 4-byte Reload6405; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edx, {{[0-9]+}}(%esp)6406; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload6407; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edx, {{[0-9]+}}(%esp)6408; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload6409; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edx, {{[0-9]+}}(%esp)6410; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload6411; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edx, {{[0-9]+}}(%esp)6412; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload6413; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edx, {{[0-9]+}}(%esp)6414; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)6415; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload6416; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edx, {{[0-9]+}}(%esp)6417; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload6418; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edx, {{[0-9]+}}(%esp)6419; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload6420; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edx, {{[0-9]+}}(%esp)6421; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload6422; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edx, {{[0-9]+}}(%esp)6423; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload6424; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edx, {{[0-9]+}}(%esp)6425; X86-HAVE-BMI2-HAVE-SHLD-NEXT: sarl $31, %ecx6426; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)6427; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)6428; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)6429; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)6430; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)6431; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)6432; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)6433; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)6434; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)6435; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)6436; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)6437; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)6438; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)6439; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)6440; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)6441; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ecx, {{[0-9]+}}(%esp)6442; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %eax, %ecx6443; X86-HAVE-BMI2-HAVE-SHLD-NEXT: andl $31, %ecx6444; X86-HAVE-BMI2-HAVE-SHLD-NEXT: shrl $3, %eax6445; X86-HAVE-BMI2-HAVE-SHLD-NEXT: andl $60, %eax6446; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 56(%esp,%eax), %edi6447; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 52(%esp,%eax), %edx6448; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill6449; X86-HAVE-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %edi, %edx6450; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill6451; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 64(%esp,%eax), %ebx6452; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 60(%esp,%eax), %edx6453; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edx, %esi6454; X86-HAVE-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %ebx, %esi6455; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill6456; X86-HAVE-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %edx, %edi6457; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill6458; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 72(%esp,%eax), %edi6459; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 68(%esp,%eax), %edx6460; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edx, %esi6461; X86-HAVE-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %edi, %esi6462; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill6463; X86-HAVE-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %edx, %ebx6464; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ebx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill6465; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 80(%esp,%eax), %ebx6466; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 76(%esp,%eax), %edx6467; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edx, %esi6468; X86-HAVE-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %ebx, %esi6469; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill6470; X86-HAVE-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %edx, %edi6471; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill6472; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 88(%esp,%eax), %ebp6473; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 84(%esp,%eax), %edx6474; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edx, %esi6475; X86-HAVE-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %ebp, %esi6476; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill6477; X86-HAVE-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %edx, %ebx6478; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ebx, (%esp) # 4-byte Spill6479; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 96(%esp,%eax), %edi6480; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 92(%esp,%eax), %edx6481; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edx, %esi6482; X86-HAVE-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %edi, %esi6483; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill6484; X86-HAVE-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %edx, %ebp6485; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 104(%esp,%eax), %edx6486; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 100(%esp,%eax), %ebx6487; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ebx, %esi6488; X86-HAVE-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %edx, %esi6489; X86-HAVE-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %ebx, %edi6490; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 48(%esp,%eax), %ebx6491; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl 108(%esp,%eax), %eax6492; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill6493; X86-HAVE-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %eax, %edx6494; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[0-9]+}}(%esp), %eax6495; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edx, 56(%eax)6496; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edi, 48(%eax)6497; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %esi, 52(%eax)6498; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ebp, 40(%eax)6499; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload6500; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edx, 44(%eax)6501; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl (%esp), %edx # 4-byte Reload6502; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edx, 32(%eax)6503; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload6504; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edx, 36(%eax)6505; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload6506; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edx, 24(%eax)6507; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload6508; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edx, 28(%eax)6509; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload6510; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edx, 16(%eax)6511; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload6512; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edx, 20(%eax)6513; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload6514; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edx, 8(%eax)6515; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload6516; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edx, 12(%eax)6517; X86-HAVE-BMI2-HAVE-SHLD-NEXT: sarxl %ecx, {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Folded Reload6518; X86-HAVE-BMI2-HAVE-SHLD-NEXT: # kill: def $cl killed $cl killed $ecx6519; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Reload6520; X86-HAVE-BMI2-HAVE-SHLD-NEXT: shrdl %cl, %esi, %ebx6521; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ebx, (%eax)6522; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload6523; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %ecx, 4(%eax)6524; X86-HAVE-BMI2-HAVE-SHLD-NEXT: movl %edx, 60(%eax)6525; X86-HAVE-BMI2-HAVE-SHLD-NEXT: addl $188, %esp6526; X86-HAVE-BMI2-HAVE-SHLD-NEXT: popl %esi6527; X86-HAVE-BMI2-HAVE-SHLD-NEXT: popl %edi6528; X86-HAVE-BMI2-HAVE-SHLD-NEXT: popl %ebx6529; X86-HAVE-BMI2-HAVE-SHLD-NEXT: popl %ebp6530; X86-HAVE-BMI2-HAVE-SHLD-NEXT: retl6531 %src = load i512, ptr %src.ptr, align 16532 %bitOff = load i512, ptr %bitOff.ptr, align 16533 %res = ashr i512 %src, %bitOff6534 store i512 %res, ptr %dst, align 16535 ret void6536}6537;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:6538; ALL: {{.*}}6539; X64: {{.*}}6540; X64-NO-SHLD: {{.*}}6541; X64-SHLD: {{.*}}6542; X86: {{.*}}6543; X86-NO-SHLD: {{.*}}6544; X86-SHLD: {{.*}}6545