brintos

brintos / llvm-project-archived public Read only

0
0
Text · 30.3 KiB · ed882cb Raw
912 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=i386-linux-generic -verify-machineinstrs -mattr=sse | FileCheck %s --check-prefixes=X86,X86-SSE13; RUN: llc < %s -mtriple=i386-linux-generic -verify-machineinstrs -mattr=sse2 | FileCheck %s --check-prefixes=X86,X86-SSE24; RUN: llc < %s -mtriple=i386-linux-generic -verify-machineinstrs -mattr=avx | FileCheck %s --check-prefixes=X86,X86-AVX5; RUN: llc < %s -mtriple=i386-linux-generic -verify-machineinstrs -mattr=avx512f | FileCheck %s --check-prefixes=X86,X86-AVX6; RUN: llc < %s -mtriple=i386-linux-generic -verify-machineinstrs | FileCheck %s --check-prefixes=X86,X86-NOSSE7; RUN: llc < %s -mtriple=x86_64-linux-generic -verify-machineinstrs -mattr=sse2 | FileCheck %s --check-prefixes=X64-SSE8; RUN: llc < %s -mtriple=x86_64-linux-generic -verify-machineinstrs -mattr=avx | FileCheck %s --check-prefixes=X64-AVX9; RUN: llc < %s -mtriple=x86_64-linux-generic -verify-machineinstrs -mattr=avx512f | FileCheck %s --check-prefixes=X64-AVX10 11; Note: This test is testing that the lowering for atomics matches what we12; currently emit for non-atomics + the atomic restriction.  The presence of13; particular lowering detail in these tests should not be read as requiring14; that detail for correctness unless it's related to the atomicity itself.15; (Specifically, there were reviewer questions about the lowering for halfs16;  and their calling convention which remain unresolved.)17 18define void @store_half(ptr %fptr, half %v) {19; X86-SSE1-LABEL: store_half:20; X86-SSE1:       # %bb.0:21; X86-SSE1-NEXT:    movzwl {{[0-9]+}}(%esp), %eax22; X86-SSE1-NEXT:    movl {{[0-9]+}}(%esp), %ecx23; X86-SSE1-NEXT:    movw %ax, (%ecx)24; X86-SSE1-NEXT:    retl25;26; X86-SSE2-LABEL: store_half:27; X86-SSE2:       # %bb.0:28; X86-SSE2-NEXT:    movl {{[0-9]+}}(%esp), %eax29; X86-SSE2-NEXT:    movzwl {{[0-9]+}}(%esp), %ecx30; X86-SSE2-NEXT:    movw %cx, (%eax)31; X86-SSE2-NEXT:    retl32;33; X86-AVX-LABEL: store_half:34; X86-AVX:       # %bb.0:35; X86-AVX-NEXT:    movl {{[0-9]+}}(%esp), %eax36; X86-AVX-NEXT:    movzwl {{[0-9]+}}(%esp), %ecx37; X86-AVX-NEXT:    movw %cx, (%eax)38; X86-AVX-NEXT:    retl39;40; X86-NOSSE-LABEL: store_half:41; X86-NOSSE:       # %bb.0:42; X86-NOSSE-NEXT:    movzwl {{[0-9]+}}(%esp), %eax43; X86-NOSSE-NEXT:    movl {{[0-9]+}}(%esp), %ecx44; X86-NOSSE-NEXT:    movw %ax, (%ecx)45; X86-NOSSE-NEXT:    retl46;47; X64-SSE-LABEL: store_half:48; X64-SSE:       # %bb.0:49; X64-SSE-NEXT:    pextrw $0, %xmm0, %eax50; X64-SSE-NEXT:    movw %ax, (%rdi)51; X64-SSE-NEXT:    retq52;53; X64-AVX-LABEL: store_half:54; X64-AVX:       # %bb.0:55; X64-AVX-NEXT:    vpextrw $0, %xmm0, %eax56; X64-AVX-NEXT:    movw %ax, (%rdi)57; X64-AVX-NEXT:    retq58  store atomic half %v, ptr %fptr unordered, align 259  ret void60}61 62define void @store_float(ptr %fptr, float %v) {63; X86-LABEL: store_float:64; X86:       # %bb.0:65; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax66; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx67; X86-NEXT:    movl %ecx, (%eax)68; X86-NEXT:    retl69;70; X64-SSE-LABEL: store_float:71; X64-SSE:       # %bb.0:72; X64-SSE-NEXT:    movss %xmm0, (%rdi)73; X64-SSE-NEXT:    retq74;75; X64-AVX-LABEL: store_float:76; X64-AVX:       # %bb.0:77; X64-AVX-NEXT:    vmovss %xmm0, (%rdi)78; X64-AVX-NEXT:    retq79  store atomic float %v, ptr %fptr unordered, align 480  ret void81}82 83define void @store_double(ptr %fptr, double %v) {84; X86-SSE1-LABEL: store_double:85; X86-SSE1:       # %bb.0:86; X86-SSE1-NEXT:    movl {{[0-9]+}}(%esp), %eax87; X86-SSE1-NEXT:    xorps %xmm0, %xmm088; X86-SSE1-NEXT:    movlps {{.*#+}} xmm0 = mem[0,1],xmm0[2,3]89; X86-SSE1-NEXT:    movlps %xmm0, (%eax)90; X86-SSE1-NEXT:    retl91;92; X86-SSE2-LABEL: store_double:93; X86-SSE2:       # %bb.0:94; X86-SSE2-NEXT:    movl {{[0-9]+}}(%esp), %eax95; X86-SSE2-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero96; X86-SSE2-NEXT:    movlps %xmm0, (%eax)97; X86-SSE2-NEXT:    retl98;99; X86-AVX-LABEL: store_double:100; X86-AVX:       # %bb.0:101; X86-AVX-NEXT:    movl {{[0-9]+}}(%esp), %eax102; X86-AVX-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero103; X86-AVX-NEXT:    vmovlps %xmm0, (%eax)104; X86-AVX-NEXT:    retl105;106; X86-NOSSE-LABEL: store_double:107; X86-NOSSE:       # %bb.0:108; X86-NOSSE-NEXT:    subl $12, %esp109; X86-NOSSE-NEXT:    .cfi_def_cfa_offset 16110; X86-NOSSE-NEXT:    movl {{[0-9]+}}(%esp), %eax111; X86-NOSSE-NEXT:    movl {{[0-9]+}}(%esp), %ecx112; X86-NOSSE-NEXT:    movl {{[0-9]+}}(%esp), %edx113; X86-NOSSE-NEXT:    movl %edx, {{[0-9]+}}(%esp)114; X86-NOSSE-NEXT:    movl %ecx, (%esp)115; X86-NOSSE-NEXT:    fildll (%esp)116; X86-NOSSE-NEXT:    fistpll (%eax)117; X86-NOSSE-NEXT:    addl $12, %esp118; X86-NOSSE-NEXT:    .cfi_def_cfa_offset 4119; X86-NOSSE-NEXT:    retl120;121; X64-SSE-LABEL: store_double:122; X64-SSE:       # %bb.0:123; X64-SSE-NEXT:    movsd %xmm0, (%rdi)124; X64-SSE-NEXT:    retq125;126; X64-AVX-LABEL: store_double:127; X64-AVX:       # %bb.0:128; X64-AVX-NEXT:    vmovsd %xmm0, (%rdi)129; X64-AVX-NEXT:    retq130  store atomic double %v, ptr %fptr unordered, align 8131  ret void132}133 134define half @load_half(ptr %fptr) {135; X86-SSE1-LABEL: load_half:136; X86-SSE1:       # %bb.0:137; X86-SSE1-NEXT:    movl {{[0-9]+}}(%esp), %eax138; X86-SSE1-NEXT:    movzwl (%eax), %eax139; X86-SSE1-NEXT:    retl140;141; X86-SSE2-LABEL: load_half:142; X86-SSE2:       # %bb.0:143; X86-SSE2-NEXT:    movl {{[0-9]+}}(%esp), %eax144; X86-SSE2-NEXT:    movzwl (%eax), %eax145; X86-SSE2-NEXT:    pinsrw $0, %eax, %xmm0146; X86-SSE2-NEXT:    retl147;148; X86-AVX-LABEL: load_half:149; X86-AVX:       # %bb.0:150; X86-AVX-NEXT:    movl {{[0-9]+}}(%esp), %eax151; X86-AVX-NEXT:    movzwl (%eax), %eax152; X86-AVX-NEXT:    vpinsrw $0, %eax, %xmm0, %xmm0153; X86-AVX-NEXT:    retl154;155; X86-NOSSE-LABEL: load_half:156; X86-NOSSE:       # %bb.0:157; X86-NOSSE-NEXT:    movl {{[0-9]+}}(%esp), %eax158; X86-NOSSE-NEXT:    movzwl (%eax), %eax159; X86-NOSSE-NEXT:    retl160;161; X64-SSE-LABEL: load_half:162; X64-SSE:       # %bb.0:163; X64-SSE-NEXT:    movzwl (%rdi), %eax164; X64-SSE-NEXT:    pinsrw $0, %eax, %xmm0165; X64-SSE-NEXT:    retq166;167; X64-AVX-LABEL: load_half:168; X64-AVX:       # %bb.0:169; X64-AVX-NEXT:    movzwl (%rdi), %eax170; X64-AVX-NEXT:    vpinsrw $0, %eax, %xmm0, %xmm0171; X64-AVX-NEXT:    retq172  %v = load atomic half, ptr %fptr unordered, align 2173  ret half %v174}175 176define float @load_float(ptr %fptr) {177; X86-SSE1-LABEL: load_float:178; X86-SSE1:       # %bb.0:179; X86-SSE1-NEXT:    pushl %eax180; X86-SSE1-NEXT:    .cfi_def_cfa_offset 8181; X86-SSE1-NEXT:    movl {{[0-9]+}}(%esp), %eax182; X86-SSE1-NEXT:    movl (%eax), %eax183; X86-SSE1-NEXT:    movl %eax, (%esp)184; X86-SSE1-NEXT:    flds (%esp)185; X86-SSE1-NEXT:    popl %eax186; X86-SSE1-NEXT:    .cfi_def_cfa_offset 4187; X86-SSE1-NEXT:    retl188;189; X86-SSE2-LABEL: load_float:190; X86-SSE2:       # %bb.0:191; X86-SSE2-NEXT:    pushl %eax192; X86-SSE2-NEXT:    .cfi_def_cfa_offset 8193; X86-SSE2-NEXT:    movl {{[0-9]+}}(%esp), %eax194; X86-SSE2-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero195; X86-SSE2-NEXT:    movss %xmm0, (%esp)196; X86-SSE2-NEXT:    flds (%esp)197; X86-SSE2-NEXT:    popl %eax198; X86-SSE2-NEXT:    .cfi_def_cfa_offset 4199; X86-SSE2-NEXT:    retl200;201; X86-AVX-LABEL: load_float:202; X86-AVX:       # %bb.0:203; X86-AVX-NEXT:    pushl %eax204; X86-AVX-NEXT:    .cfi_def_cfa_offset 8205; X86-AVX-NEXT:    movl {{[0-9]+}}(%esp), %eax206; X86-AVX-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero207; X86-AVX-NEXT:    vmovss %xmm0, (%esp)208; X86-AVX-NEXT:    flds (%esp)209; X86-AVX-NEXT:    popl %eax210; X86-AVX-NEXT:    .cfi_def_cfa_offset 4211; X86-AVX-NEXT:    retl212;213; X86-NOSSE-LABEL: load_float:214; X86-NOSSE:       # %bb.0:215; X86-NOSSE-NEXT:    pushl %eax216; X86-NOSSE-NEXT:    .cfi_def_cfa_offset 8217; X86-NOSSE-NEXT:    movl {{[0-9]+}}(%esp), %eax218; X86-NOSSE-NEXT:    movl (%eax), %eax219; X86-NOSSE-NEXT:    movl %eax, (%esp)220; X86-NOSSE-NEXT:    flds (%esp)221; X86-NOSSE-NEXT:    popl %eax222; X86-NOSSE-NEXT:    .cfi_def_cfa_offset 4223; X86-NOSSE-NEXT:    retl224;225; X64-SSE-LABEL: load_float:226; X64-SSE:       # %bb.0:227; X64-SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero228; X64-SSE-NEXT:    retq229;230; X64-AVX-LABEL: load_float:231; X64-AVX:       # %bb.0:232; X64-AVX-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero233; X64-AVX-NEXT:    retq234  %v = load atomic float, ptr %fptr unordered, align 4235  ret float %v236}237 238define double @load_double(ptr %fptr) {239; X86-SSE1-LABEL: load_double:240; X86-SSE1:       # %bb.0:241; X86-SSE1-NEXT:    subl $12, %esp242; X86-SSE1-NEXT:    .cfi_def_cfa_offset 16243; X86-SSE1-NEXT:    movl {{[0-9]+}}(%esp), %eax244; X86-SSE1-NEXT:    xorps %xmm0, %xmm0245; X86-SSE1-NEXT:    movlps {{.*#+}} xmm0 = mem[0,1],xmm0[2,3]246; X86-SSE1-NEXT:    movss %xmm0, (%esp)247; X86-SSE1-NEXT:    shufps {{.*#+}} xmm0 = xmm0[1,1,1,1]248; X86-SSE1-NEXT:    movss %xmm0, {{[0-9]+}}(%esp)249; X86-SSE1-NEXT:    fldl (%esp)250; X86-SSE1-NEXT:    addl $12, %esp251; X86-SSE1-NEXT:    .cfi_def_cfa_offset 4252; X86-SSE1-NEXT:    retl253;254; X86-SSE2-LABEL: load_double:255; X86-SSE2:       # %bb.0:256; X86-SSE2-NEXT:    subl $12, %esp257; X86-SSE2-NEXT:    .cfi_def_cfa_offset 16258; X86-SSE2-NEXT:    movl {{[0-9]+}}(%esp), %eax259; X86-SSE2-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero260; X86-SSE2-NEXT:    movlps %xmm0, (%esp)261; X86-SSE2-NEXT:    fldl (%esp)262; X86-SSE2-NEXT:    addl $12, %esp263; X86-SSE2-NEXT:    .cfi_def_cfa_offset 4264; X86-SSE2-NEXT:    retl265;266; X86-AVX-LABEL: load_double:267; X86-AVX:       # %bb.0:268; X86-AVX-NEXT:    subl $12, %esp269; X86-AVX-NEXT:    .cfi_def_cfa_offset 16270; X86-AVX-NEXT:    movl {{[0-9]+}}(%esp), %eax271; X86-AVX-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero272; X86-AVX-NEXT:    vmovlps %xmm0, (%esp)273; X86-AVX-NEXT:    fldl (%esp)274; X86-AVX-NEXT:    addl $12, %esp275; X86-AVX-NEXT:    .cfi_def_cfa_offset 4276; X86-AVX-NEXT:    retl277;278; X86-NOSSE-LABEL: load_double:279; X86-NOSSE:       # %bb.0:280; X86-NOSSE-NEXT:    subl $20, %esp281; X86-NOSSE-NEXT:    .cfi_def_cfa_offset 24282; X86-NOSSE-NEXT:    movl {{[0-9]+}}(%esp), %eax283; X86-NOSSE-NEXT:    fildll (%eax)284; X86-NOSSE-NEXT:    fistpll {{[0-9]+}}(%esp)285; X86-NOSSE-NEXT:    movl {{[0-9]+}}(%esp), %eax286; X86-NOSSE-NEXT:    movl {{[0-9]+}}(%esp), %ecx287; X86-NOSSE-NEXT:    movl %ecx, {{[0-9]+}}(%esp)288; X86-NOSSE-NEXT:    movl %eax, (%esp)289; X86-NOSSE-NEXT:    fldl (%esp)290; X86-NOSSE-NEXT:    addl $20, %esp291; X86-NOSSE-NEXT:    .cfi_def_cfa_offset 4292; X86-NOSSE-NEXT:    retl293;294; X64-SSE-LABEL: load_double:295; X64-SSE:       # %bb.0:296; X64-SSE-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero297; X64-SSE-NEXT:    retq298;299; X64-AVX-LABEL: load_double:300; X64-AVX:       # %bb.0:301; X64-AVX-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero302; X64-AVX-NEXT:    retq303  %v = load atomic double, ptr %fptr unordered, align 8304  ret double %v305}306 307define half @exchange_half(ptr %fptr, half %x) {308; X86-SSE1-LABEL: exchange_half:309; X86-SSE1:       # %bb.0:310; X86-SSE1-NEXT:    movl {{[0-9]+}}(%esp), %ecx311; X86-SSE1-NEXT:    movzwl {{[0-9]+}}(%esp), %eax312; X86-SSE1-NEXT:    xchgw %ax, (%ecx)313; X86-SSE1-NEXT:    retl314;315; X86-SSE2-LABEL: exchange_half:316; X86-SSE2:       # %bb.0:317; X86-SSE2-NEXT:    movl {{[0-9]+}}(%esp), %eax318; X86-SSE2-NEXT:    movzwl {{[0-9]+}}(%esp), %ecx319; X86-SSE2-NEXT:    xchgw %cx, (%eax)320; X86-SSE2-NEXT:    pinsrw $0, %ecx, %xmm0321; X86-SSE2-NEXT:    retl322;323; X86-AVX-LABEL: exchange_half:324; X86-AVX:       # %bb.0:325; X86-AVX-NEXT:    movl {{[0-9]+}}(%esp), %eax326; X86-AVX-NEXT:    movzwl {{[0-9]+}}(%esp), %ecx327; X86-AVX-NEXT:    xchgw %cx, (%eax)328; X86-AVX-NEXT:    vpinsrw $0, %ecx, %xmm0, %xmm0329; X86-AVX-NEXT:    retl330;331; X86-NOSSE-LABEL: exchange_half:332; X86-NOSSE:       # %bb.0:333; X86-NOSSE-NEXT:    movl {{[0-9]+}}(%esp), %ecx334; X86-NOSSE-NEXT:    movzwl {{[0-9]+}}(%esp), %eax335; X86-NOSSE-NEXT:    xchgw %ax, (%ecx)336; X86-NOSSE-NEXT:    retl337;338; X64-SSE-LABEL: exchange_half:339; X64-SSE:       # %bb.0:340; X64-SSE-NEXT:    pextrw $0, %xmm0, %eax341; X64-SSE-NEXT:    xchgw %ax, (%rdi)342; X64-SSE-NEXT:    pinsrw $0, %eax, %xmm0343; X64-SSE-NEXT:    retq344;345; X64-AVX-LABEL: exchange_half:346; X64-AVX:       # %bb.0:347; X64-AVX-NEXT:    vpextrw $0, %xmm0, %eax348; X64-AVX-NEXT:    xchgw %ax, (%rdi)349; X64-AVX-NEXT:    vpinsrw $0, %eax, %xmm0, %xmm0350; X64-AVX-NEXT:    retq351  %v = atomicrmw xchg ptr %fptr, half %x monotonic, align 2352  ret half %v353}354 355define float @exchange_float(ptr %fptr, float %x) {356; X86-SSE1-LABEL: exchange_float:357; X86-SSE1:       # %bb.0:358; X86-SSE1-NEXT:    pushl %eax359; X86-SSE1-NEXT:    .cfi_def_cfa_offset 8360; X86-SSE1-NEXT:    movl {{[0-9]+}}(%esp), %eax361; X86-SSE1-NEXT:    movl {{[0-9]+}}(%esp), %ecx362; X86-SSE1-NEXT:    xchgl %ecx, (%eax)363; X86-SSE1-NEXT:    movl %ecx, (%esp)364; X86-SSE1-NEXT:    flds (%esp)365; X86-SSE1-NEXT:    popl %eax366; X86-SSE1-NEXT:    .cfi_def_cfa_offset 4367; X86-SSE1-NEXT:    retl368;369; X86-SSE2-LABEL: exchange_float:370; X86-SSE2:       # %bb.0:371; X86-SSE2-NEXT:    pushl %eax372; X86-SSE2-NEXT:    .cfi_def_cfa_offset 8373; X86-SSE2-NEXT:    movl {{[0-9]+}}(%esp), %eax374; X86-SSE2-NEXT:    movl {{[0-9]+}}(%esp), %ecx375; X86-SSE2-NEXT:    xchgl %ecx, (%eax)376; X86-SSE2-NEXT:    movd %ecx, %xmm0377; X86-SSE2-NEXT:    movd %xmm0, (%esp)378; X86-SSE2-NEXT:    flds (%esp)379; X86-SSE2-NEXT:    popl %eax380; X86-SSE2-NEXT:    .cfi_def_cfa_offset 4381; X86-SSE2-NEXT:    retl382;383; X86-AVX-LABEL: exchange_float:384; X86-AVX:       # %bb.0:385; X86-AVX-NEXT:    pushl %eax386; X86-AVX-NEXT:    .cfi_def_cfa_offset 8387; X86-AVX-NEXT:    movl {{[0-9]+}}(%esp), %eax388; X86-AVX-NEXT:    movl {{[0-9]+}}(%esp), %ecx389; X86-AVX-NEXT:    xchgl %ecx, (%eax)390; X86-AVX-NEXT:    vmovd %ecx, %xmm0391; X86-AVX-NEXT:    vmovd %xmm0, (%esp)392; X86-AVX-NEXT:    flds (%esp)393; X86-AVX-NEXT:    popl %eax394; X86-AVX-NEXT:    .cfi_def_cfa_offset 4395; X86-AVX-NEXT:    retl396;397; X86-NOSSE-LABEL: exchange_float:398; X86-NOSSE:       # %bb.0:399; X86-NOSSE-NEXT:    pushl %eax400; X86-NOSSE-NEXT:    .cfi_def_cfa_offset 8401; X86-NOSSE-NEXT:    movl {{[0-9]+}}(%esp), %eax402; X86-NOSSE-NEXT:    movl {{[0-9]+}}(%esp), %ecx403; X86-NOSSE-NEXT:    xchgl %ecx, (%eax)404; X86-NOSSE-NEXT:    movl %ecx, (%esp)405; X86-NOSSE-NEXT:    flds (%esp)406; X86-NOSSE-NEXT:    popl %eax407; X86-NOSSE-NEXT:    .cfi_def_cfa_offset 4408; X86-NOSSE-NEXT:    retl409;410; X64-SSE-LABEL: exchange_float:411; X64-SSE:       # %bb.0:412; X64-SSE-NEXT:    movd %xmm0, %eax413; X64-SSE-NEXT:    xchgl %eax, (%rdi)414; X64-SSE-NEXT:    movd %eax, %xmm0415; X64-SSE-NEXT:    retq416;417; X64-AVX-LABEL: exchange_float:418; X64-AVX:       # %bb.0:419; X64-AVX-NEXT:    vmovd %xmm0, %eax420; X64-AVX-NEXT:    xchgl %eax, (%rdi)421; X64-AVX-NEXT:    vmovd %eax, %xmm0422; X64-AVX-NEXT:    retq423  %v = atomicrmw xchg ptr %fptr, float %x monotonic, align 4424  ret float %v425}426 427define double @exchange_double(ptr %fptr, double %x) {428; X86-SSE1-LABEL: exchange_double:429; X86-SSE1:       # %bb.0:430; X86-SSE1-NEXT:    pushl %ebx431; X86-SSE1-NEXT:    .cfi_def_cfa_offset 8432; X86-SSE1-NEXT:    pushl %esi433; X86-SSE1-NEXT:    .cfi_def_cfa_offset 12434; X86-SSE1-NEXT:    subl $12, %esp435; X86-SSE1-NEXT:    .cfi_def_cfa_offset 24436; X86-SSE1-NEXT:    .cfi_offset %esi, -12437; X86-SSE1-NEXT:    .cfi_offset %ebx, -8438; X86-SSE1-NEXT:    movl {{[0-9]+}}(%esp), %esi439; X86-SSE1-NEXT:    movl {{[0-9]+}}(%esp), %ebx440; X86-SSE1-NEXT:    movl {{[0-9]+}}(%esp), %ecx441; X86-SSE1-NEXT:    movl (%esi), %eax442; X86-SSE1-NEXT:    movl 4(%esi), %edx443; X86-SSE1-NEXT:    .p2align 4444; X86-SSE1-NEXT:  .LBB8_1: # %atomicrmw.start445; X86-SSE1-NEXT:    # =>This Inner Loop Header: Depth=1446; X86-SSE1-NEXT:    lock cmpxchg8b (%esi)447; X86-SSE1-NEXT:    jne .LBB8_1448; X86-SSE1-NEXT:  # %bb.2: # %atomicrmw.end449; X86-SSE1-NEXT:    movl %eax, (%esp)450; X86-SSE1-NEXT:    movl %edx, {{[0-9]+}}(%esp)451; X86-SSE1-NEXT:    fldl (%esp)452; X86-SSE1-NEXT:    addl $12, %esp453; X86-SSE1-NEXT:    .cfi_def_cfa_offset 12454; X86-SSE1-NEXT:    popl %esi455; X86-SSE1-NEXT:    .cfi_def_cfa_offset 8456; X86-SSE1-NEXT:    popl %ebx457; X86-SSE1-NEXT:    .cfi_def_cfa_offset 4458; X86-SSE1-NEXT:    retl459;460; X86-SSE2-LABEL: exchange_double:461; X86-SSE2:       # %bb.0:462; X86-SSE2-NEXT:    pushl %ebx463; X86-SSE2-NEXT:    .cfi_def_cfa_offset 8464; X86-SSE2-NEXT:    pushl %esi465; X86-SSE2-NEXT:    .cfi_def_cfa_offset 12466; X86-SSE2-NEXT:    subl $12, %esp467; X86-SSE2-NEXT:    .cfi_def_cfa_offset 24468; X86-SSE2-NEXT:    .cfi_offset %esi, -12469; X86-SSE2-NEXT:    .cfi_offset %ebx, -8470; X86-SSE2-NEXT:    movl {{[0-9]+}}(%esp), %esi471; X86-SSE2-NEXT:    movl {{[0-9]+}}(%esp), %ebx472; X86-SSE2-NEXT:    movl {{[0-9]+}}(%esp), %ecx473; X86-SSE2-NEXT:    movl (%esi), %eax474; X86-SSE2-NEXT:    movl 4(%esi), %edx475; X86-SSE2-NEXT:    .p2align 4476; X86-SSE2-NEXT:  .LBB8_1: # %atomicrmw.start477; X86-SSE2-NEXT:    # =>This Inner Loop Header: Depth=1478; X86-SSE2-NEXT:    lock cmpxchg8b (%esi)479; X86-SSE2-NEXT:    jne .LBB8_1480; X86-SSE2-NEXT:  # %bb.2: # %atomicrmw.end481; X86-SSE2-NEXT:    movd %eax, %xmm0482; X86-SSE2-NEXT:    movd %edx, %xmm1483; X86-SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]484; X86-SSE2-NEXT:    movq %xmm0, (%esp)485; X86-SSE2-NEXT:    fldl (%esp)486; X86-SSE2-NEXT:    addl $12, %esp487; X86-SSE2-NEXT:    .cfi_def_cfa_offset 12488; X86-SSE2-NEXT:    popl %esi489; X86-SSE2-NEXT:    .cfi_def_cfa_offset 8490; X86-SSE2-NEXT:    popl %ebx491; X86-SSE2-NEXT:    .cfi_def_cfa_offset 4492; X86-SSE2-NEXT:    retl493;494; X86-AVX-LABEL: exchange_double:495; X86-AVX:       # %bb.0:496; X86-AVX-NEXT:    pushl %ebx497; X86-AVX-NEXT:    .cfi_def_cfa_offset 8498; X86-AVX-NEXT:    pushl %esi499; X86-AVX-NEXT:    .cfi_def_cfa_offset 12500; X86-AVX-NEXT:    subl $12, %esp501; X86-AVX-NEXT:    .cfi_def_cfa_offset 24502; X86-AVX-NEXT:    .cfi_offset %esi, -12503; X86-AVX-NEXT:    .cfi_offset %ebx, -8504; X86-AVX-NEXT:    movl {{[0-9]+}}(%esp), %esi505; X86-AVX-NEXT:    movl {{[0-9]+}}(%esp), %ebx506; X86-AVX-NEXT:    movl {{[0-9]+}}(%esp), %ecx507; X86-AVX-NEXT:    movl (%esi), %eax508; X86-AVX-NEXT:    movl 4(%esi), %edx509; X86-AVX-NEXT:    .p2align 4510; X86-AVX-NEXT:  .LBB8_1: # %atomicrmw.start511; X86-AVX-NEXT:    # =>This Inner Loop Header: Depth=1512; X86-AVX-NEXT:    lock cmpxchg8b (%esi)513; X86-AVX-NEXT:    jne .LBB8_1514; X86-AVX-NEXT:  # %bb.2: # %atomicrmw.end515; X86-AVX-NEXT:    vmovd %eax, %xmm0516; X86-AVX-NEXT:    vpinsrd $1, %edx, %xmm0, %xmm0517; X86-AVX-NEXT:    vmovq %xmm0, (%esp)518; X86-AVX-NEXT:    fldl (%esp)519; X86-AVX-NEXT:    addl $12, %esp520; X86-AVX-NEXT:    .cfi_def_cfa_offset 12521; X86-AVX-NEXT:    popl %esi522; X86-AVX-NEXT:    .cfi_def_cfa_offset 8523; X86-AVX-NEXT:    popl %ebx524; X86-AVX-NEXT:    .cfi_def_cfa_offset 4525; X86-AVX-NEXT:    retl526;527; X86-NOSSE-LABEL: exchange_double:528; X86-NOSSE:       # %bb.0:529; X86-NOSSE-NEXT:    pushl %ebx530; X86-NOSSE-NEXT:    .cfi_def_cfa_offset 8531; X86-NOSSE-NEXT:    pushl %esi532; X86-NOSSE-NEXT:    .cfi_def_cfa_offset 12533; X86-NOSSE-NEXT:    subl $12, %esp534; X86-NOSSE-NEXT:    .cfi_def_cfa_offset 24535; X86-NOSSE-NEXT:    .cfi_offset %esi, -12536; X86-NOSSE-NEXT:    .cfi_offset %ebx, -8537; X86-NOSSE-NEXT:    movl {{[0-9]+}}(%esp), %esi538; X86-NOSSE-NEXT:    movl {{[0-9]+}}(%esp), %ebx539; X86-NOSSE-NEXT:    movl {{[0-9]+}}(%esp), %ecx540; X86-NOSSE-NEXT:    movl (%esi), %eax541; X86-NOSSE-NEXT:    movl 4(%esi), %edx542; X86-NOSSE-NEXT:    .p2align 4543; X86-NOSSE-NEXT:  .LBB8_1: # %atomicrmw.start544; X86-NOSSE-NEXT:    # =>This Inner Loop Header: Depth=1545; X86-NOSSE-NEXT:    lock cmpxchg8b (%esi)546; X86-NOSSE-NEXT:    jne .LBB8_1547; X86-NOSSE-NEXT:  # %bb.2: # %atomicrmw.end548; X86-NOSSE-NEXT:    movl %eax, (%esp)549; X86-NOSSE-NEXT:    movl %edx, {{[0-9]+}}(%esp)550; X86-NOSSE-NEXT:    fldl (%esp)551; X86-NOSSE-NEXT:    addl $12, %esp552; X86-NOSSE-NEXT:    .cfi_def_cfa_offset 12553; X86-NOSSE-NEXT:    popl %esi554; X86-NOSSE-NEXT:    .cfi_def_cfa_offset 8555; X86-NOSSE-NEXT:    popl %ebx556; X86-NOSSE-NEXT:    .cfi_def_cfa_offset 4557; X86-NOSSE-NEXT:    retl558;559; X64-SSE-LABEL: exchange_double:560; X64-SSE:       # %bb.0:561; X64-SSE-NEXT:    movq %xmm0, %rax562; X64-SSE-NEXT:    xchgq %rax, (%rdi)563; X64-SSE-NEXT:    movq %rax, %xmm0564; X64-SSE-NEXT:    retq565;566; X64-AVX-LABEL: exchange_double:567; X64-AVX:       # %bb.0:568; X64-AVX-NEXT:    vmovq %xmm0, %rax569; X64-AVX-NEXT:    xchgq %rax, (%rdi)570; X64-AVX-NEXT:    vmovq %rax, %xmm0571; X64-AVX-NEXT:    retq572  %v = atomicrmw xchg ptr %fptr, double %x monotonic, align 8573  ret double %v574}575 576 577; Check the seq_cst lowering since that's the578; interesting one from an ordering perspective on x86.579 580define void @store_float_seq_cst(ptr %fptr, float %v) {581; X86-LABEL: store_float_seq_cst:582; X86:       # %bb.0:583; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax584; X86-NEXT:    movl {{[0-9]+}}(%esp), %ecx585; X86-NEXT:    xchgl %ecx, (%eax)586; X86-NEXT:    retl587;588; X64-SSE-LABEL: store_float_seq_cst:589; X64-SSE:       # %bb.0:590; X64-SSE-NEXT:    movd %xmm0, %eax591; X64-SSE-NEXT:    xchgl %eax, (%rdi)592; X64-SSE-NEXT:    retq593;594; X64-AVX-LABEL: store_float_seq_cst:595; X64-AVX:       # %bb.0:596; X64-AVX-NEXT:    vmovd %xmm0, %eax597; X64-AVX-NEXT:    xchgl %eax, (%rdi)598; X64-AVX-NEXT:    retq599  store atomic float %v, ptr %fptr seq_cst, align 4600  ret void601}602 603define void @store_double_seq_cst(ptr %fptr, double %v) {604; X86-SSE1-LABEL: store_double_seq_cst:605; X86-SSE1:       # %bb.0:606; X86-SSE1-NEXT:    movl {{[0-9]+}}(%esp), %eax607; X86-SSE1-NEXT:    xorps %xmm0, %xmm0608; X86-SSE1-NEXT:    movlps {{.*#+}} xmm0 = mem[0,1],xmm0[2,3]609; X86-SSE1-NEXT:    movlps %xmm0, (%eax)610; X86-SSE1-NEXT:    lock orl $0, (%esp)611; X86-SSE1-NEXT:    retl612;613; X86-SSE2-LABEL: store_double_seq_cst:614; X86-SSE2:       # %bb.0:615; X86-SSE2-NEXT:    movl {{[0-9]+}}(%esp), %eax616; X86-SSE2-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero617; X86-SSE2-NEXT:    movlps %xmm0, (%eax)618; X86-SSE2-NEXT:    lock orl $0, (%esp)619; X86-SSE2-NEXT:    retl620;621; X86-AVX-LABEL: store_double_seq_cst:622; X86-AVX:       # %bb.0:623; X86-AVX-NEXT:    movl {{[0-9]+}}(%esp), %eax624; X86-AVX-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero625; X86-AVX-NEXT:    vmovlps %xmm0, (%eax)626; X86-AVX-NEXT:    lock orl $0, (%esp)627; X86-AVX-NEXT:    retl628;629; X86-NOSSE-LABEL: store_double_seq_cst:630; X86-NOSSE:       # %bb.0:631; X86-NOSSE-NEXT:    subl $12, %esp632; X86-NOSSE-NEXT:    .cfi_def_cfa_offset 16633; X86-NOSSE-NEXT:    movl {{[0-9]+}}(%esp), %eax634; X86-NOSSE-NEXT:    movl {{[0-9]+}}(%esp), %ecx635; X86-NOSSE-NEXT:    movl {{[0-9]+}}(%esp), %edx636; X86-NOSSE-NEXT:    movl %edx, {{[0-9]+}}(%esp)637; X86-NOSSE-NEXT:    movl %ecx, (%esp)638; X86-NOSSE-NEXT:    fildll (%esp)639; X86-NOSSE-NEXT:    fistpll (%eax)640; X86-NOSSE-NEXT:    lock orl $0, (%esp)641; X86-NOSSE-NEXT:    addl $12, %esp642; X86-NOSSE-NEXT:    .cfi_def_cfa_offset 4643; X86-NOSSE-NEXT:    retl644;645; X64-SSE-LABEL: store_double_seq_cst:646; X64-SSE:       # %bb.0:647; X64-SSE-NEXT:    movq %xmm0, %rax648; X64-SSE-NEXT:    xchgq %rax, (%rdi)649; X64-SSE-NEXT:    retq650;651; X64-AVX-LABEL: store_double_seq_cst:652; X64-AVX:       # %bb.0:653; X64-AVX-NEXT:    vmovq %xmm0, %rax654; X64-AVX-NEXT:    xchgq %rax, (%rdi)655; X64-AVX-NEXT:    retq656  store atomic double %v, ptr %fptr seq_cst, align 8657  ret void658}659 660define float @load_float_seq_cst(ptr %fptr) {661; X86-SSE1-LABEL: load_float_seq_cst:662; X86-SSE1:       # %bb.0:663; X86-SSE1-NEXT:    pushl %eax664; X86-SSE1-NEXT:    .cfi_def_cfa_offset 8665; X86-SSE1-NEXT:    movl {{[0-9]+}}(%esp), %eax666; X86-SSE1-NEXT:    movl (%eax), %eax667; X86-SSE1-NEXT:    movl %eax, (%esp)668; X86-SSE1-NEXT:    flds (%esp)669; X86-SSE1-NEXT:    popl %eax670; X86-SSE1-NEXT:    .cfi_def_cfa_offset 4671; X86-SSE1-NEXT:    retl672;673; X86-SSE2-LABEL: load_float_seq_cst:674; X86-SSE2:       # %bb.0:675; X86-SSE2-NEXT:    pushl %eax676; X86-SSE2-NEXT:    .cfi_def_cfa_offset 8677; X86-SSE2-NEXT:    movl {{[0-9]+}}(%esp), %eax678; X86-SSE2-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero679; X86-SSE2-NEXT:    movss %xmm0, (%esp)680; X86-SSE2-NEXT:    flds (%esp)681; X86-SSE2-NEXT:    popl %eax682; X86-SSE2-NEXT:    .cfi_def_cfa_offset 4683; X86-SSE2-NEXT:    retl684;685; X86-AVX-LABEL: load_float_seq_cst:686; X86-AVX:       # %bb.0:687; X86-AVX-NEXT:    pushl %eax688; X86-AVX-NEXT:    .cfi_def_cfa_offset 8689; X86-AVX-NEXT:    movl {{[0-9]+}}(%esp), %eax690; X86-AVX-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero691; X86-AVX-NEXT:    vmovss %xmm0, (%esp)692; X86-AVX-NEXT:    flds (%esp)693; X86-AVX-NEXT:    popl %eax694; X86-AVX-NEXT:    .cfi_def_cfa_offset 4695; X86-AVX-NEXT:    retl696;697; X86-NOSSE-LABEL: load_float_seq_cst:698; X86-NOSSE:       # %bb.0:699; X86-NOSSE-NEXT:    pushl %eax700; X86-NOSSE-NEXT:    .cfi_def_cfa_offset 8701; X86-NOSSE-NEXT:    movl {{[0-9]+}}(%esp), %eax702; X86-NOSSE-NEXT:    movl (%eax), %eax703; X86-NOSSE-NEXT:    movl %eax, (%esp)704; X86-NOSSE-NEXT:    flds (%esp)705; X86-NOSSE-NEXT:    popl %eax706; X86-NOSSE-NEXT:    .cfi_def_cfa_offset 4707; X86-NOSSE-NEXT:    retl708;709; X64-SSE-LABEL: load_float_seq_cst:710; X64-SSE:       # %bb.0:711; X64-SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero712; X64-SSE-NEXT:    retq713;714; X64-AVX-LABEL: load_float_seq_cst:715; X64-AVX:       # %bb.0:716; X64-AVX-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero717; X64-AVX-NEXT:    retq718  %v = load atomic float, ptr %fptr seq_cst, align 4719  ret float %v720}721 722define double @load_double_seq_cst(ptr %fptr) {723; X86-SSE1-LABEL: load_double_seq_cst:724; X86-SSE1:       # %bb.0:725; X86-SSE1-NEXT:    subl $12, %esp726; X86-SSE1-NEXT:    .cfi_def_cfa_offset 16727; X86-SSE1-NEXT:    movl {{[0-9]+}}(%esp), %eax728; X86-SSE1-NEXT:    xorps %xmm0, %xmm0729; X86-SSE1-NEXT:    movlps {{.*#+}} xmm0 = mem[0,1],xmm0[2,3]730; X86-SSE1-NEXT:    movss %xmm0, (%esp)731; X86-SSE1-NEXT:    shufps {{.*#+}} xmm0 = xmm0[1,1,1,1]732; X86-SSE1-NEXT:    movss %xmm0, {{[0-9]+}}(%esp)733; X86-SSE1-NEXT:    fldl (%esp)734; X86-SSE1-NEXT:    addl $12, %esp735; X86-SSE1-NEXT:    .cfi_def_cfa_offset 4736; X86-SSE1-NEXT:    retl737;738; X86-SSE2-LABEL: load_double_seq_cst:739; X86-SSE2:       # %bb.0:740; X86-SSE2-NEXT:    subl $12, %esp741; X86-SSE2-NEXT:    .cfi_def_cfa_offset 16742; X86-SSE2-NEXT:    movl {{[0-9]+}}(%esp), %eax743; X86-SSE2-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero744; X86-SSE2-NEXT:    movlps %xmm0, (%esp)745; X86-SSE2-NEXT:    fldl (%esp)746; X86-SSE2-NEXT:    addl $12, %esp747; X86-SSE2-NEXT:    .cfi_def_cfa_offset 4748; X86-SSE2-NEXT:    retl749;750; X86-AVX-LABEL: load_double_seq_cst:751; X86-AVX:       # %bb.0:752; X86-AVX-NEXT:    subl $12, %esp753; X86-AVX-NEXT:    .cfi_def_cfa_offset 16754; X86-AVX-NEXT:    movl {{[0-9]+}}(%esp), %eax755; X86-AVX-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero756; X86-AVX-NEXT:    vmovlps %xmm0, (%esp)757; X86-AVX-NEXT:    fldl (%esp)758; X86-AVX-NEXT:    addl $12, %esp759; X86-AVX-NEXT:    .cfi_def_cfa_offset 4760; X86-AVX-NEXT:    retl761;762; X86-NOSSE-LABEL: load_double_seq_cst:763; X86-NOSSE:       # %bb.0:764; X86-NOSSE-NEXT:    subl $20, %esp765; X86-NOSSE-NEXT:    .cfi_def_cfa_offset 24766; X86-NOSSE-NEXT:    movl {{[0-9]+}}(%esp), %eax767; X86-NOSSE-NEXT:    fildll (%eax)768; X86-NOSSE-NEXT:    fistpll {{[0-9]+}}(%esp)769; X86-NOSSE-NEXT:    movl {{[0-9]+}}(%esp), %eax770; X86-NOSSE-NEXT:    movl {{[0-9]+}}(%esp), %ecx771; X86-NOSSE-NEXT:    movl %ecx, {{[0-9]+}}(%esp)772; X86-NOSSE-NEXT:    movl %eax, (%esp)773; X86-NOSSE-NEXT:    fldl (%esp)774; X86-NOSSE-NEXT:    addl $20, %esp775; X86-NOSSE-NEXT:    .cfi_def_cfa_offset 4776; X86-NOSSE-NEXT:    retl777;778; X64-SSE-LABEL: load_double_seq_cst:779; X64-SSE:       # %bb.0:780; X64-SSE-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero781; X64-SSE-NEXT:    retq782;783; X64-AVX-LABEL: load_double_seq_cst:784; X64-AVX:       # %bb.0:785; X64-AVX-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero786; X64-AVX-NEXT:    retq787  %v = load atomic double, ptr %fptr seq_cst, align 8788  ret double %v789}790 791define void @store_bfloat(ptr %fptr, bfloat %v) {792; X86-SSE1-LABEL: store_bfloat:793; X86-SSE1:       # %bb.0:794; X86-SSE1-NEXT:    pushl %esi795; X86-SSE1-NEXT:    .cfi_def_cfa_offset 8796; X86-SSE1-NEXT:    subl $8, %esp797; X86-SSE1-NEXT:    .cfi_def_cfa_offset 16798; X86-SSE1-NEXT:    .cfi_offset %esi, -8799; X86-SSE1-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero800; X86-SSE1-NEXT:    movss %xmm0, (%esp)801; X86-SSE1-NEXT:    movl {{[0-9]+}}(%esp), %esi802; X86-SSE1-NEXT:    calll __truncsfbf2803; X86-SSE1-NEXT:    movw %ax, (%esi)804; X86-SSE1-NEXT:    addl $8, %esp805; X86-SSE1-NEXT:    .cfi_def_cfa_offset 8806; X86-SSE1-NEXT:    popl %esi807; X86-SSE1-NEXT:    .cfi_def_cfa_offset 4808; X86-SSE1-NEXT:    retl809;810; X86-SSE2-LABEL: store_bfloat:811; X86-SSE2:       # %bb.0:812; X86-SSE2-NEXT:    movl {{[0-9]+}}(%esp), %eax813; X86-SSE2-NEXT:    movzwl {{[0-9]+}}(%esp), %ecx814; X86-SSE2-NEXT:    movw %cx, (%eax)815; X86-SSE2-NEXT:    retl816;817; X86-AVX-LABEL: store_bfloat:818; X86-AVX:       # %bb.0:819; X86-AVX-NEXT:    movl {{[0-9]+}}(%esp), %eax820; X86-AVX-NEXT:    movzwl {{[0-9]+}}(%esp), %ecx821; X86-AVX-NEXT:    movw %cx, (%eax)822; X86-AVX-NEXT:    retl823;824; X86-NOSSE-LABEL: store_bfloat:825; X86-NOSSE:       # %bb.0:826; X86-NOSSE-NEXT:    pushl %esi827; X86-NOSSE-NEXT:    .cfi_def_cfa_offset 8828; X86-NOSSE-NEXT:    subl $8, %esp829; X86-NOSSE-NEXT:    .cfi_def_cfa_offset 16830; X86-NOSSE-NEXT:    .cfi_offset %esi, -8831; X86-NOSSE-NEXT:    flds {{[0-9]+}}(%esp)832; X86-NOSSE-NEXT:    fstps (%esp)833; X86-NOSSE-NEXT:    movl {{[0-9]+}}(%esp), %esi834; X86-NOSSE-NEXT:    calll __truncsfbf2835; X86-NOSSE-NEXT:    movw %ax, (%esi)836; X86-NOSSE-NEXT:    addl $8, %esp837; X86-NOSSE-NEXT:    .cfi_def_cfa_offset 8838; X86-NOSSE-NEXT:    popl %esi839; X86-NOSSE-NEXT:    .cfi_def_cfa_offset 4840; X86-NOSSE-NEXT:    retl841;842; X64-SSE-LABEL: store_bfloat:843; X64-SSE:       # %bb.0:844; X64-SSE-NEXT:    pextrw $0, %xmm0, %eax845; X64-SSE-NEXT:    movw %ax, (%rdi)846; X64-SSE-NEXT:    retq847;848; X64-AVX-LABEL: store_bfloat:849; X64-AVX:       # %bb.0:850; X64-AVX-NEXT:    vpextrw $0, %xmm0, %eax851; X64-AVX-NEXT:    movw %ax, (%rdi)852; X64-AVX-NEXT:    retq853  store atomic bfloat %v, ptr %fptr unordered, align 2854  ret void855}856 857define bfloat @load_bfloat(ptr %fptr) {858; X86-SSE1-LABEL: load_bfloat:859; X86-SSE1:       # %bb.0:860; X86-SSE1-NEXT:    pushl %eax861; X86-SSE1-NEXT:    .cfi_def_cfa_offset 8862; X86-SSE1-NEXT:    movl {{[0-9]+}}(%esp), %eax863; X86-SSE1-NEXT:    movzwl (%eax), %eax864; X86-SSE1-NEXT:    shll $16, %eax865; X86-SSE1-NEXT:    movl %eax, (%esp)866; X86-SSE1-NEXT:    flds (%esp)867; X86-SSE1-NEXT:    popl %eax868; X86-SSE1-NEXT:    .cfi_def_cfa_offset 4869; X86-SSE1-NEXT:    retl870;871; X86-SSE2-LABEL: load_bfloat:872; X86-SSE2:       # %bb.0:873; X86-SSE2-NEXT:    movl {{[0-9]+}}(%esp), %eax874; X86-SSE2-NEXT:    movzwl (%eax), %eax875; X86-SSE2-NEXT:    pinsrw $0, %eax, %xmm0876; X86-SSE2-NEXT:    retl877;878; X86-AVX-LABEL: load_bfloat:879; X86-AVX:       # %bb.0:880; X86-AVX-NEXT:    movl {{[0-9]+}}(%esp), %eax881; X86-AVX-NEXT:    movzwl (%eax), %eax882; X86-AVX-NEXT:    vpinsrw $0, %eax, %xmm0, %xmm0883; X86-AVX-NEXT:    retl884;885; X86-NOSSE-LABEL: load_bfloat:886; X86-NOSSE:       # %bb.0:887; X86-NOSSE-NEXT:    pushl %eax888; X86-NOSSE-NEXT:    .cfi_def_cfa_offset 8889; X86-NOSSE-NEXT:    movl {{[0-9]+}}(%esp), %eax890; X86-NOSSE-NEXT:    movzwl (%eax), %eax891; X86-NOSSE-NEXT:    shll $16, %eax892; X86-NOSSE-NEXT:    movl %eax, (%esp)893; X86-NOSSE-NEXT:    flds (%esp)894; X86-NOSSE-NEXT:    popl %eax895; X86-NOSSE-NEXT:    .cfi_def_cfa_offset 4896; X86-NOSSE-NEXT:    retl897;898; X64-SSE-LABEL: load_bfloat:899; X64-SSE:       # %bb.0:900; X64-SSE-NEXT:    movzwl (%rdi), %eax901; X64-SSE-NEXT:    pinsrw $0, %eax, %xmm0902; X64-SSE-NEXT:    retq903;904; X64-AVX-LABEL: load_bfloat:905; X64-AVX:       # %bb.0:906; X64-AVX-NEXT:    movzwl (%rdi), %eax907; X64-AVX-NEXT:    vpinsrw $0, %eax, %xmm0, %xmm0908; X64-AVX-NEXT:    retq909  %v = load atomic bfloat, ptr %fptr unordered, align 2910  ret bfloat %v911}912