@@ -260,3 +260,65 @@ define void @test_vec_fptrunc_double(<4 x double> %a, ptr %p) nounwind {
260
260
ret void
261
261
}
262
262
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