Home | History | Annotate | Download | only in PowerPC
      1 ; RUN: llc < %s -O0 -verify-machineinstrs -fast-isel-abort=1 -mtriple=powerpc64-unknown-linux-gnu -mcpu=pwr5 | FileCheck %s --check-prefix=ELF64
      2 
      3 ; Test sitofp
      4 
      5 define void @sitofp_double_i32(i32 %a, double %b) nounwind {
      6 entry:
      7 ; ELF64: sitofp_double_i32
      8   %b.addr = alloca double, align 8
      9   %conv = sitofp i32 %a to double
     10 ; ELF64: std {{[0-9]+}}, -[[OFFSET:[0-9]+]](1)
     11 ; ELF64: lfd {{[0-9]+}}, -[[OFFSET]](1)
     12 ; ELF64: fcfid
     13   store double %conv, double* %b.addr, align 8
     14   ret void
     15 }
     16 
     17 define void @sitofp_double_i64(i64 %a, double %b) nounwind {
     18 entry:
     19 ; ELF64: sitofp_double_i64
     20   %b.addr = alloca double, align 8
     21   %conv = sitofp i64 %a to double
     22 ; ELF64: std {{[0-9]+}}, -[[OFFSET:[0-9]+]](1)
     23 ; ELF64: lfd {{[0-9]+}}, -[[OFFSET]](1)
     24 ; ELF64: fcfid
     25   store double %conv, double* %b.addr, align 8
     26   ret void
     27 }
     28 
     29 define void @sitofp_double_i16(i16 %a, double %b) nounwind {
     30 entry:
     31 ; ELF64: sitofp_double_i16
     32   %b.addr = alloca double, align 8
     33   %conv = sitofp i16 %a to double
     34 ; ELF64: extsh
     35 ; ELF64: std {{[0-9]+}}, -[[OFFSET:[0-9]+]](1)
     36 ; ELF64: lfd {{[0-9]+}}, -[[OFFSET]](1)
     37 ; ELF64: fcfid
     38   store double %conv, double* %b.addr, align 8
     39   ret void
     40 }
     41 
     42 define void @sitofp_double_i8(i8 %a, double %b) nounwind {
     43 entry:
     44 ; ELF64: sitofp_double_i8
     45   %b.addr = alloca double, align 8
     46   %conv = sitofp i8 %a to double
     47 ; ELF64: extsb
     48 ; ELF64: std {{[0-9]+}}, -[[OFFSET:[0-9]+]](1)
     49 ; ELF64: lfd {{[0-9]+}}, -[[OFFSET]](1)
     50 ; ELF64: fcfid
     51   store double %conv, double* %b.addr, align 8
     52   ret void
     53 }
     54 
     55 ; Test fptosi
     56 
     57 define void @fptosi_float_i32(float %a) nounwind {
     58 entry:
     59 ; ELF64: fptosi_float_i32
     60   %b.addr = alloca i32, align 4
     61   %conv = fptosi float %a to i32
     62 ; ELF64: fctiwz
     63 ; ELF64: stfd
     64 ; ELF64: lwa
     65   store i32 %conv, i32* %b.addr, align 4
     66   ret void
     67 }
     68 
     69 define void @fptosi_float_i64(float %a) nounwind {
     70 entry:
     71 ; ELF64: fptosi_float_i64
     72   %b.addr = alloca i64, align 4
     73   %conv = fptosi float %a to i64
     74 ; ELF64: fctidz
     75 ; ELF64: stfd
     76 ; ELF64: ld
     77   store i64 %conv, i64* %b.addr, align 4
     78   ret void
     79 }
     80 
     81 define void @fptosi_double_i32(double %a) nounwind {
     82 entry:
     83 ; ELF64: fptosi_double_i32
     84   %b.addr = alloca i32, align 8
     85   %conv = fptosi double %a to i32
     86 ; ELF64: fctiwz
     87 ; ELF64: stfd
     88 ; ELF64: lwa
     89   store i32 %conv, i32* %b.addr, align 8
     90   ret void
     91 }
     92 
     93 define void @fptosi_double_i64(double %a) nounwind {
     94 entry:
     95 ; ELF64: fptosi_double_i64
     96   %b.addr = alloca i64, align 8
     97   %conv = fptosi double %a to i64
     98 ; ELF64: fctidz
     99 ; ELF64: stfd
    100 ; ELF64: ld
    101   store i64 %conv, i64* %b.addr, align 8
    102   ret void
    103 }
    104 
    105 ; Test fptoui
    106 
    107 define void @fptoui_float_i32(float %a) nounwind {
    108 entry:
    109 ; ELF64: fptoui_float_i32
    110   %b.addr = alloca i32, align 4
    111   %conv = fptoui float %a to i32
    112 ; ELF64: fctidz
    113 ; ELF64: stfd
    114 ; ELF64: lwz
    115   store i32 %conv, i32* %b.addr, align 4
    116   ret void
    117 }
    118 
    119 define void @fptoui_double_i32(double %a) nounwind {
    120 entry:
    121 ; ELF64: fptoui_double_i32
    122   %b.addr = alloca i32, align 8
    123   %conv = fptoui double %a to i32
    124 ; ELF64: fctidz
    125 ; ELF64: stfd
    126 ; ELF64: lwz
    127   store i32 %conv, i32* %b.addr, align 8
    128   ret void
    129 }
    130 
    131