brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.9 KiB · 4143187 Raw
196 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-win32 | FileCheck %s -check-prefix=WIN643; RUN: llc < %s -mtriple=x86_64-mingw32 | FileCheck %s -check-prefix=WIN644 5define i64 @double_to_i128(double %d) nounwind {6; WIN64-LABEL: double_to_i128:7; WIN64:       # %bb.0:8; WIN64-NEXT:    subq $40, %rsp9; WIN64-NEXT:    callq __fixdfti10; WIN64-NEXT:    movq %xmm0, %rax11; WIN64-NEXT:    addq $40, %rsp12; WIN64-NEXT:    retq13  %1 = fptosi double %d to i12814  %2 = trunc i128 %1 to i6415  ret i64 %216}17 18define i64 @double_to_ui128(double %d) nounwind {19; WIN64-LABEL: double_to_ui128:20; WIN64:       # %bb.0:21; WIN64-NEXT:    subq $40, %rsp22; WIN64-NEXT:    callq __fixunsdfti23; WIN64-NEXT:    movq %xmm0, %rax24; WIN64-NEXT:    addq $40, %rsp25; WIN64-NEXT:    retq26  %1 = fptoui double %d to i12827  %2 = trunc i128 %1 to i6428  ret i64 %229}30 31define i64 @float_to_i128(float %d) nounwind {32; WIN64-LABEL: float_to_i128:33; WIN64:       # %bb.0:34; WIN64-NEXT:    subq $40, %rsp35; WIN64-NEXT:    callq __fixsfti36; WIN64-NEXT:    movq %xmm0, %rax37; WIN64-NEXT:    addq $40, %rsp38; WIN64-NEXT:    retq39  %1 = fptosi float %d to i12840  %2 = trunc i128 %1 to i6441  ret i64 %242}43 44define i64 @float_to_ui128(float %d) nounwind {45; WIN64-LABEL: float_to_ui128:46; WIN64:       # %bb.0:47; WIN64-NEXT:    subq $40, %rsp48; WIN64-NEXT:    callq __fixunssfti49; WIN64-NEXT:    movq %xmm0, %rax50; WIN64-NEXT:    addq $40, %rsp51; WIN64-NEXT:    retq52  %1 = fptoui float %d to i12853  %2 = trunc i128 %1 to i6454  ret i64 %255}56 57define i64 @longdouble_to_i128(ptr nocapture readonly %0) nounwind {58; WIN64-LABEL: longdouble_to_i128:59; WIN64:       # %bb.0:60; WIN64-NEXT:    subq $56, %rsp61; WIN64-NEXT:    fldt (%rcx)62; WIN64-NEXT:    fstpt {{[0-9]+}}(%rsp)63; WIN64-NEXT:    leaq {{[0-9]+}}(%rsp), %rcx64; WIN64-NEXT:    callq __fixxfti65; WIN64-NEXT:    movq %xmm0, %rax66; WIN64-NEXT:    addq $56, %rsp67; WIN64-NEXT:    retq68  %2 = load x86_fp80, ptr %0, align 1669  %3 = fptosi x86_fp80 %2 to i12870  %4 = trunc i128 %3 to i6471  ret i64 %472}73 74define i64 @longdouble_to_ui128(ptr nocapture readonly %0) nounwind {75; WIN64-LABEL: longdouble_to_ui128:76; WIN64:       # %bb.0:77; WIN64-NEXT:    subq $56, %rsp78; WIN64-NEXT:    fldt (%rcx)79; WIN64-NEXT:    fstpt {{[0-9]+}}(%rsp)80; WIN64-NEXT:    leaq {{[0-9]+}}(%rsp), %rcx81; WIN64-NEXT:    callq __fixunsxfti82; WIN64-NEXT:    movq %xmm0, %rax83; WIN64-NEXT:    addq $56, %rsp84; WIN64-NEXT:    retq85  %2 = load x86_fp80, ptr %0, align 1686  %3 = fptoui x86_fp80 %2 to i12887  %4 = trunc i128 %3 to i6488  ret i64 %489}90 91define double @i128_to_double(ptr nocapture readonly %0) nounwind {92; WIN64-LABEL: i128_to_double:93; WIN64:       # %bb.0:94; WIN64-NEXT:    subq $56, %rsp95; WIN64-NEXT:    movaps (%rcx), %xmm096; WIN64-NEXT:    movaps %xmm0, {{[0-9]+}}(%rsp)97; WIN64-NEXT:    leaq {{[0-9]+}}(%rsp), %rcx98; WIN64-NEXT:    callq __floattidf99; WIN64-NEXT:    addq $56, %rsp100; WIN64-NEXT:    retq101  %2 = load i128, ptr %0, align 16102  %3 = sitofp i128 %2 to double103  ret double %3104}105 106define double @ui128_to_double(ptr nocapture readonly %0) nounwind {107; WIN64-LABEL: ui128_to_double:108; WIN64:       # %bb.0:109; WIN64-NEXT:    subq $56, %rsp110; WIN64-NEXT:    movaps (%rcx), %xmm0111; WIN64-NEXT:    movaps %xmm0, {{[0-9]+}}(%rsp)112; WIN64-NEXT:    leaq {{[0-9]+}}(%rsp), %rcx113; WIN64-NEXT:    callq __floatuntidf114; WIN64-NEXT:    addq $56, %rsp115; WIN64-NEXT:    retq116  %2 = load i128, ptr %0, align 16117  %3 = uitofp i128 %2 to double118  ret double %3119}120 121define float @i128_to_float(ptr nocapture readonly %0) nounwind {122; WIN64-LABEL: i128_to_float:123; WIN64:       # %bb.0:124; WIN64-NEXT:    subq $56, %rsp125; WIN64-NEXT:    movaps (%rcx), %xmm0126; WIN64-NEXT:    movaps %xmm0, {{[0-9]+}}(%rsp)127; WIN64-NEXT:    leaq {{[0-9]+}}(%rsp), %rcx128; WIN64-NEXT:    callq __floattisf129; WIN64-NEXT:    addq $56, %rsp130; WIN64-NEXT:    retq131  %2 = load i128, ptr %0, align 16132  %3 = sitofp i128 %2 to float133  ret float %3134}135 136define float @ui128_to_float(ptr nocapture readonly %0) nounwind {137; WIN64-LABEL: ui128_to_float:138; WIN64:       # %bb.0:139; WIN64-NEXT:    subq $56, %rsp140; WIN64-NEXT:    movaps (%rcx), %xmm0141; WIN64-NEXT:    movaps %xmm0, {{[0-9]+}}(%rsp)142; WIN64-NEXT:    leaq {{[0-9]+}}(%rsp), %rcx143; WIN64-NEXT:    callq __floatuntisf144; WIN64-NEXT:    addq $56, %rsp145; WIN64-NEXT:    retq146  %2 = load i128, ptr %0, align 16147  %3 = uitofp i128 %2 to float148  ret float %3149}150 151define void @i128_to_longdouble(ptr noalias nocapture sret(x86_fp80) align 16 %agg.result, ptr nocapture readonly %0) nounwind {152; WIN64-LABEL: i128_to_longdouble:153; WIN64:       # %bb.0:154; WIN64-NEXT:    pushq %rsi155; WIN64-NEXT:    subq $64, %rsp156; WIN64-NEXT:    movq %rcx, %rsi157; WIN64-NEXT:    movaps (%rdx), %xmm0158; WIN64-NEXT:    movaps %xmm0, {{[0-9]+}}(%rsp)159; WIN64-NEXT:    leaq {{[0-9]+}}(%rsp), %rcx160; WIN64-NEXT:    leaq {{[0-9]+}}(%rsp), %rdx161; WIN64-NEXT:    callq __floattixf162; WIN64-NEXT:    fldt {{[0-9]+}}(%rsp)163; WIN64-NEXT:    fstpt (%rsi)164; WIN64-NEXT:    movq %rsi, %rax165; WIN64-NEXT:    addq $64, %rsp166; WIN64-NEXT:    popq %rsi167; WIN64-NEXT:    retq168  %2 = load i128, ptr %0, align 16169  %3 = sitofp i128 %2 to x86_fp80170  store x86_fp80 %3, ptr %agg.result, align 16171  ret void172}173 174define void @ui128_to_longdouble(ptr noalias nocapture sret(x86_fp80) align 16 %agg.result, ptr nocapture readonly %0) nounwind {175; WIN64-LABEL: ui128_to_longdouble:176; WIN64:       # %bb.0:177; WIN64-NEXT:    pushq %rsi178; WIN64-NEXT:    subq $64, %rsp179; WIN64-NEXT:    movq %rcx, %rsi180; WIN64-NEXT:    movaps (%rdx), %xmm0181; WIN64-NEXT:    movaps %xmm0, {{[0-9]+}}(%rsp)182; WIN64-NEXT:    leaq {{[0-9]+}}(%rsp), %rcx183; WIN64-NEXT:    leaq {{[0-9]+}}(%rsp), %rdx184; WIN64-NEXT:    callq __floatuntixf185; WIN64-NEXT:    fldt {{[0-9]+}}(%rsp)186; WIN64-NEXT:    fstpt (%rsi)187; WIN64-NEXT:    movq %rsi, %rax188; WIN64-NEXT:    addq $64, %rsp189; WIN64-NEXT:    popq %rsi190; WIN64-NEXT:    retq191  %2 = load i128, ptr %0, align 16192  %3 = uitofp i128 %2 to x86_fp80193  store x86_fp80 %3, ptr %agg.result, align 16194  ret void195}196