@@ -260,3 +260,65 @@ define void @test_vec_fptrunc_double(<4 x double> %a, ptr %p) nounwind {
260260  ret  void 
261261}
262262
263+ define  half  @test_fadd_fadd (half  %a , half  %b , half  %c ) nounwind  {
264+ ; CHECK-LIBCALL-LABEL: test_fadd_fadd: 
265+ ; CHECK-LIBCALL:       # %bb.0: 
266+ ; CHECK-LIBCALL-NEXT:    addiu $sp, $sp, -32 
267+ ; CHECK-LIBCALL-NEXT:    sdc1 $f20, 24($sp) # 8-byte Folded Spill 
268+ ; CHECK-LIBCALL-NEXT:    sw $ra, 20($sp) # 4-byte Folded Spill 
269+ ; CHECK-LIBCALL-NEXT:    sw $16, 16($sp) # 4-byte Folded Spill 
270+ ; CHECK-LIBCALL-NEXT:    move $16, $6 
271+ ; CHECK-LIBCALL-NEXT:    mov.s $f20, $f12 
272+ ; CHECK-LIBCALL-NEXT:    jal __gnu_f2h_ieee 
273+ ; CHECK-LIBCALL-NEXT:    mov.s $f12, $f14 
274+ ; CHECK-LIBCALL-NEXT:    jal __gnu_h2f_ieee 
275+ ; CHECK-LIBCALL-NEXT:    move $4, $2 
276+ ; CHECK-LIBCALL-NEXT:    mov.s $f21, $f0 
277+ ; CHECK-LIBCALL-NEXT:    jal __gnu_f2h_ieee 
278+ ; CHECK-LIBCALL-NEXT:    mov.s $f12, $f20 
279+ ; CHECK-LIBCALL-NEXT:    jal __gnu_h2f_ieee 
280+ ; CHECK-LIBCALL-NEXT:    move $4, $2 
281+ ; CHECK-LIBCALL-NEXT:    add.s $f20, $f0, $f21 
282+ ; CHECK-LIBCALL-NEXT:    jal __gnu_f2h_ieee 
283+ ; CHECK-LIBCALL-NEXT:    mtc1 $16, $f12 
284+ ; CHECK-LIBCALL-NEXT:    jal __gnu_h2f_ieee 
285+ ; CHECK-LIBCALL-NEXT:    move $4, $2 
286+ ; CHECK-LIBCALL-NEXT:    add.s $f0, $f20, $f0 
287+ ; CHECK-LIBCALL-NEXT:    lw $16, 16($sp) # 4-byte Folded Reload 
288+ ; CHECK-LIBCALL-NEXT:    lw $ra, 20($sp) # 4-byte Folded Reload 
289+ ; CHECK-LIBCALL-NEXT:    ldc1 $f20, 24($sp) # 8-byte Folded Reload 
290+ ; CHECK-LIBCALL-NEXT:    jr $ra 
291+ ; CHECK-LIBCALL-NEXT:    addiu $sp, $sp, 32 
292+   %d  = fadd  half  %a , %b 
293+   %e  = fadd  half  %d , %c 
294+   ret  half  %e 
295+ }
296+ 
297+ define  half  @to_half (i16  %bits ) nounwind  {
298+ ; CHECK-LIBCALL-LABEL: to_half: 
299+ ; CHECK-LIBCALL:       # %bb.0: 
300+ ; CHECK-LIBCALL-NEXT:    addiu $sp, $sp, -24 
301+ ; CHECK-LIBCALL-NEXT:    sw $ra, 20($sp) # 4-byte Folded Spill 
302+ ; CHECK-LIBCALL-NEXT:    jal __gnu_h2f_ieee 
303+ ; CHECK-LIBCALL-NEXT:    nop 
304+ ; CHECK-LIBCALL-NEXT:    lw $ra, 20($sp) # 4-byte Folded Reload 
305+ ; CHECK-LIBCALL-NEXT:    jr $ra 
306+ ; CHECK-LIBCALL-NEXT:    addiu $sp, $sp, 24 
307+   %f  = bitcast  i16  %bits  to  half 
308+   ret  half  %f 
309+ }
310+ 
311+ define  i16  @from_half (half  %f ) nounwind  {
312+ ; CHECK-LIBCALL-LABEL: from_half: 
313+ ; CHECK-LIBCALL:       # %bb.0: 
314+ ; CHECK-LIBCALL-NEXT:    addiu $sp, $sp, -24 
315+ ; CHECK-LIBCALL-NEXT:    sw $ra, 20($sp) # 4-byte Folded Spill 
316+ ; CHECK-LIBCALL-NEXT:    jal __gnu_f2h_ieee 
317+ ; CHECK-LIBCALL-NEXT:    nop 
318+ ; CHECK-LIBCALL-NEXT:    andi $2, $2, 65535 
319+ ; CHECK-LIBCALL-NEXT:    lw $ra, 20($sp) # 4-byte Folded Reload 
320+ ; CHECK-LIBCALL-NEXT:    jr $ra 
321+ ; CHECK-LIBCALL-NEXT:    addiu $sp, $sp, 24 
322+   %bits  = bitcast  half  %f  to  i16 
323+   ret  i16  %bits 
324+ }
0 commit comments