1; RUN: llc -mtriple=mipsel-linux-gnu -march=mipsel -mattr=mips16 -relocation-model=static < %s | FileCheck %s -check-prefix=stel 2 3@x = external global float 4@xd = external global double 5@y = external global float 6@yd = external global double 7@ret_sf = external global float 8@ret_df = external global double 9@ret_sc = external global { float, float } 10@ret_dc = external global { double, double } 11 12; Function Attrs: nounwind 13define void @v_sf(float %p) #0 { 14entry: 15 %p.addr = alloca float, align 4 16 store float %p, float* %p.addr, align 4 17 %0 = load float, float* %p.addr, align 4 18 store float %0, float* @x, align 4 19 ret void 20} 21; stel: .section .mips16.fn.v_sf,"ax",@progbits 22; stel: .ent __fn_stub_v_sf 23; stel: lui $25, %hi(v_sf) 24; stel: addiu $25, $25, %lo(v_sf) 25; stel: mfc1 $4, $f12 26; stel: jr $25 27; stel: .set $__fn_local_v_sf, v_sf 28; stel: .end __fn_stub_v_sf 29 30declare i32 @printf(i8*, ...) #1 31 32; Function Attrs: nounwind 33define void @v_df(double %p) #0 { 34entry: 35 %p.addr = alloca double, align 8 36 store double %p, double* %p.addr, align 8 37 %0 = load double, double* %p.addr, align 8 38 store double %0, double* @xd, align 8 39 ret void 40} 41 42; stel: .section .mips16.fn.v_df,"ax",@progbits 43; stel: .ent __fn_stub_v_df 44; stel: lui $25, %hi(v_df) 45; stel: addiu $25, $25, %lo(v_df) 46; stel: mfc1 $4, $f12 47; stel: mfc1 $5, $f13 48; stel: jr $25 49; stel: .set $__fn_local_v_df, v_df 50; stel: .end __fn_stub_v_df 51 52; Function Attrs: nounwind 53define void @v_sf_sf(float %p1, float %p2) #0 { 54entry: 55 %p1.addr = alloca float, align 4 56 %p2.addr = alloca float, align 4 57 store float %p1, float* %p1.addr, align 4 58 store float %p2, float* %p2.addr, align 4 59 %0 = load float, float* %p1.addr, align 4 60 store float %0, float* @x, align 4 61 %1 = load float, float* %p2.addr, align 4 62 store float %1, float* @y, align 4 63 ret void 64} 65 66; stel: .section .mips16.fn.v_sf_sf,"ax",@progbits 67; stel: .ent __fn_stub_v_sf_sf 68; stel: lui $25, %hi(v_sf_sf) 69; stel: addiu $25, $25, %lo(v_sf_sf) 70; stel: mfc1 $4, $f12 71; stel: mfc1 $5, $f14 72; stel: jr $25 73; stel: .set $__fn_local_v_sf_sf, v_sf_sf 74; stel: .end __fn_stub_v_sf_sf 75 76; Function Attrs: nounwind 77define void @v_sf_df(float %p1, double %p2) #0 { 78entry: 79 %p1.addr = alloca float, align 4 80 %p2.addr = alloca double, align 8 81 store float %p1, float* %p1.addr, align 4 82 store double %p2, double* %p2.addr, align 8 83 %0 = load float, float* %p1.addr, align 4 84 store float %0, float* @x, align 4 85 %1 = load double, double* %p2.addr, align 8 86 store double %1, double* @yd, align 8 87 ret void 88} 89 90; stel: .section .mips16.fn.v_sf_df,"ax",@progbits 91; stel: .ent __fn_stub_v_sf_df 92; stel: lui $25, %hi(v_sf_df) 93; stel: addiu $25, $25, %lo(v_sf_df) 94; stel: mfc1 $4, $f12 95; stel: mfc1 $6, $f14 96; stel: mfc1 $7, $f15 97; stel: jr $25 98; stel: .set $__fn_local_v_sf_df, v_sf_df 99; stel: .end __fn_stub_v_sf_df 100 101; Function Attrs: nounwind 102define void @v_df_sf(double %p1, float %p2) #0 { 103entry: 104 %p1.addr = alloca double, align 8 105 %p2.addr = alloca float, align 4 106 store double %p1, double* %p1.addr, align 8 107 store float %p2, float* %p2.addr, align 4 108 %0 = load double, double* %p1.addr, align 8 109 store double %0, double* @xd, align 8 110 %1 = load float, float* %p2.addr, align 4 111 store float %1, float* @y, align 4 112 ret void 113} 114 115; stel: .section .mips16.fn.v_df_sf,"ax",@progbits 116; stel: .ent __fn_stub_v_df_sf 117; stel: lui $25, %hi(v_df_sf) 118; stel: addiu $25, $25, %lo(v_df_sf) 119; stel: mfc1 $4, $f12 120; stel: mfc1 $5, $f13 121; stel: mfc1 $6, $f14 122; stel: jr $25 123; stel: .set $__fn_local_v_df_sf, v_df_sf 124; stel: .end __fn_stub_v_df_sf 125 126; Function Attrs: nounwind 127define void @v_df_df(double %p1, double %p2) #0 { 128entry: 129 %p1.addr = alloca double, align 8 130 %p2.addr = alloca double, align 8 131 store double %p1, double* %p1.addr, align 8 132 store double %p2, double* %p2.addr, align 8 133 %0 = load double, double* %p1.addr, align 8 134 store double %0, double* @xd, align 8 135 %1 = load double, double* %p2.addr, align 8 136 store double %1, double* @yd, align 8 137 ret void 138} 139 140; stel: .section .mips16.fn.v_df_df,"ax",@progbits 141; stel: .ent __fn_stub_v_df_df 142; stel: lui $25, %hi(v_df_df) 143; stel: addiu $25, $25, %lo(v_df_df) 144; stel: mfc1 $4, $f12 145; stel: mfc1 $5, $f13 146; stel: mfc1 $6, $f14 147; stel: mfc1 $7, $f15 148; stel: jr $25 149; stel: .set $__fn_local_v_df_df, v_df_df 150; stel: .end __fn_stub_v_df_df 151 152; Function Attrs: nounwind 153define float @sf_v() #0 { 154entry: 155 %0 = load float, float* @ret_sf, align 4 156 ret float %0 157} 158 159; Function Attrs: nounwind 160define float @sf_sf(float %p) #0 { 161entry: 162 %p.addr = alloca float, align 4 163 store float %p, float* %p.addr, align 4 164 %0 = load float, float* %p.addr, align 4 165 store float %0, float* @x, align 4 166 %1 = load float, float* @ret_sf, align 4 167 ret float %1 168} 169 170 171; stel: .section .mips16.fn.sf_sf,"ax",@progbits 172; stel: .ent __fn_stub_sf_sf 173; stel: lui $25, %hi(sf_sf) 174; stel: addiu $25, $25, %lo(sf_sf) 175; stel: mfc1 $4, $f12 176; stel: jr $25 177; stel: .set $__fn_local_sf_sf, sf_sf 178; stel: .end __fn_stub_sf_sf 179 180 181; Function Attrs: nounwind 182define float @sf_df(double %p) #0 { 183entry: 184 %p.addr = alloca double, align 8 185 store double %p, double* %p.addr, align 8 186 %0 = load double, double* %p.addr, align 8 187 store double %0, double* @xd, align 8 188 %1 = load float, float* @ret_sf, align 4 189 ret float %1 190} 191 192; stel: .section .mips16.fn.sf_df,"ax",@progbits 193; stel: .ent __fn_stub_sf_df 194; stel: lui $25, %hi(sf_df) 195; stel: addiu $25, $25, %lo(sf_df) 196; stel: mfc1 $4, $f12 197; stel: mfc1 $5, $f13 198; stel: jr $25 199; stel: .set $__fn_local_sf_df, sf_df 200; stel: .end __fn_stub_sf_df 201 202; Function Attrs: nounwind 203define float @sf_sf_sf(float %p1, float %p2) #0 { 204entry: 205 %p1.addr = alloca float, align 4 206 %p2.addr = alloca float, align 4 207 store float %p1, float* %p1.addr, align 4 208 store float %p2, float* %p2.addr, align 4 209 %0 = load float, float* %p1.addr, align 4 210 store float %0, float* @x, align 4 211 %1 = load float, float* %p2.addr, align 4 212 store float %1, float* @y, align 4 213 %2 = load float, float* @ret_sf, align 4 214 ret float %2 215} 216 217; stel: .section .mips16.fn.sf_sf_sf,"ax",@progbits 218; stel: .ent __fn_stub_sf_sf_sf 219; stel: lui $25, %hi(sf_sf_sf) 220; stel: addiu $25, $25, %lo(sf_sf_sf) 221; stel: mfc1 $4, $f12 222; stel: mfc1 $5, $f14 223; stel: jr $25 224; stel: .set $__fn_local_sf_sf_sf, sf_sf_sf 225; stel: .end __fn_stub_sf_sf_sf 226 227; Function Attrs: nounwind 228define float @sf_sf_df(float %p1, double %p2) #0 { 229entry: 230 %p1.addr = alloca float, align 4 231 %p2.addr = alloca double, align 8 232 store float %p1, float* %p1.addr, align 4 233 store double %p2, double* %p2.addr, align 8 234 %0 = load float, float* %p1.addr, align 4 235 store float %0, float* @x, align 4 236 %1 = load double, double* %p2.addr, align 8 237 store double %1, double* @yd, align 8 238 %2 = load float, float* @ret_sf, align 4 239 ret float %2 240} 241 242; stel: .section .mips16.fn.sf_sf_df,"ax",@progbits 243; stel: .ent __fn_stub_sf_sf_df 244; stel: lui $25, %hi(sf_sf_df) 245; stel: addiu $25, $25, %lo(sf_sf_df) 246; stel: mfc1 $4, $f12 247; stel: mfc1 $6, $f14 248; stel: mfc1 $7, $f15 249; stel: jr $25 250; stel: .set $__fn_local_sf_sf_df, sf_sf_df 251; stel: .end __fn_stub_sf_sf_df 252 253; Function Attrs: nounwind 254define float @sf_df_sf(double %p1, float %p2) #0 { 255entry: 256 %p1.addr = alloca double, align 8 257 %p2.addr = alloca float, align 4 258 store double %p1, double* %p1.addr, align 8 259 store float %p2, float* %p2.addr, align 4 260 %0 = load double, double* %p1.addr, align 8 261 store double %0, double* @xd, align 8 262 %1 = load float, float* %p2.addr, align 4 263 store float %1, float* @y, align 4 264 %2 = load float, float* @ret_sf, align 4 265 ret float %2 266} 267 268; stel: .section .mips16.fn.sf_df_sf,"ax",@progbits 269; stel: .ent __fn_stub_sf_df_sf 270; stel: lui $25, %hi(sf_df_sf) 271; stel: addiu $25, $25, %lo(sf_df_sf) 272; stel: mfc1 $4, $f12 273; stel: mfc1 $5, $f13 274; stel: mfc1 $6, $f14 275; stel: jr $25 276; stel: .set $__fn_local_sf_df_sf, sf_df_sf 277; stel: .end __fn_stub_sf_df_sf 278 279; Function Attrs: nounwind 280define float @sf_df_df(double %p1, double %p2) #0 { 281entry: 282 %p1.addr = alloca double, align 8 283 %p2.addr = alloca double, align 8 284 store double %p1, double* %p1.addr, align 8 285 store double %p2, double* %p2.addr, align 8 286 %0 = load double, double* %p1.addr, align 8 287 store double %0, double* @xd, align 8 288 %1 = load double, double* %p2.addr, align 8 289 store double %1, double* @yd, align 8 290 %2 = load float, float* @ret_sf, align 4 291 ret float %2 292} 293 294; stel: .section .mips16.fn.sf_df_df,"ax",@progbits 295; stel: .ent __fn_stub_sf_df_df 296; stel: lui $25, %hi(sf_df_df) 297; stel: addiu $25, $25, %lo(sf_df_df) 298; stel: mfc1 $4, $f12 299; stel: mfc1 $5, $f13 300; stel: mfc1 $6, $f14 301; stel: mfc1 $7, $f15 302; stel: jr $25 303; stel: .set $__fn_local_sf_df_df, sf_df_df 304; stel: .end __fn_stub_sf_df_df 305 306attributes #0 = { nounwind "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "unsafe-fp-math"="false" "use-soft-float"="false" } 307