Skip to content

Commit 9eb882a

Browse files
Benjamin-Philip9prady9
authored andcommitted
Support implicit promoting with f16
- Create a ImplicitPromote<f16> trait and implement it for other types - Implement ImplicitPromote<T> traits for f16
1 parent 8968120 commit 9eb882a

File tree

1 file changed

+26
-0
lines changed

1 file changed

+26
-0
lines changed

src/core/util.rs

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -468,6 +468,7 @@ macro_rules! implicit {
468468
implicit!(c64, c32 => c64);
469469
implicit!(c64, f64 => c64);
470470
implicit!(c64, f32 => c64);
471+
implicit!(c64, f16 => c64);
471472
implicit!(c64, i64 => c64);
472473
implicit!(c64, u64 => c64);
473474
implicit!(c64, i32 => c64);
@@ -481,6 +482,7 @@ implicit!(c64, u8 => c64);
481482
implicit!(c32, c64 => c64);
482483
implicit!(c32, f64 => c64);
483484
implicit!(c32, f32 => c32);
485+
implicit!(c32, f16 => c32);
484486
implicit!(c32, i64 => c32);
485487
implicit!(c32, u64 => c32);
486488
implicit!(c32, i32 => c32);
@@ -494,6 +496,7 @@ implicit!(c32, u8 => c32);
494496
implicit!(f64, c64 => c64);
495497
implicit!(f64, c32 => c64);
496498
implicit!(f64, f32 => f64);
499+
implicit!(f64, f16 => f64);
497500
implicit!(f64, i64 => f64);
498501
implicit!(f64, u64 => f64);
499502
implicit!(f64, i32 => f64);
@@ -507,6 +510,7 @@ implicit!(f64, u8 => f64);
507510
implicit!(f32, c64 => c64);
508511
implicit!(f32, c32 => c32);
509512
implicit!(f32, f64 => f64);
513+
implicit!(f32, f16 => f32);
510514
implicit!(f32, i64 => f32);
511515
implicit!(f32, u64 => f32);
512516
implicit!(f32, i32 => f32);
@@ -516,11 +520,26 @@ implicit!(f32, u16 => f32);
516520
implicit!(f32, bool => f32);
517521
implicit!(f32, u8 => f32);
518522

523+
//LHS is 16-bit floating point
524+
implicit!(f16, c64 => c64);
525+
implicit!(f16, c32 => c32);
526+
implicit!(f16, f64 => f64);
527+
implicit!(f16, f32 => f32);
528+
implicit!(f16, i64 => f16);
529+
implicit!(f16, u64 => f16);
530+
implicit!(f16, i32 => f16);
531+
implicit!(f16, u32 => f16);
532+
implicit!(f16, i16 => f16);
533+
implicit!(f16, u16 => f16);
534+
implicit!(f16, bool => f16);
535+
implicit!(f16, u8 => f16);
536+
519537
//LHS is 64-bit signed integer
520538
implicit!(i64, c64 => c64);
521539
implicit!(i64, c32 => c32);
522540
implicit!(i64, f64 => f64);
523541
implicit!(i64, f32 => f32);
542+
implicit!(i64, f16 => f16);
524543
implicit!(i64, u64 => u64);
525544
implicit!(i64, i32 => i64);
526545
implicit!(i64, u32 => i64);
@@ -534,6 +553,7 @@ implicit!(u64, c64 => c64);
534553
implicit!(u64, c32 => c32);
535554
implicit!(u64, f64 => f64);
536555
implicit!(u64, f32 => f32);
556+
implicit!(u64, f16 => f16);
537557
implicit!(u64, i64 => u64);
538558
implicit!(u64, i32 => u64);
539559
implicit!(u64, u32 => u64);
@@ -547,6 +567,7 @@ implicit!(i32, c64 => c64);
547567
implicit!(i32, c32 => c32);
548568
implicit!(i32, f64 => f64);
549569
implicit!(i32, f32 => f32);
570+
implicit!(i32, f16 => f16);
550571
implicit!(i32, i64 => i64);
551572
implicit!(i32, u64 => u64);
552573
implicit!(i32, u32 => u32);
@@ -560,6 +581,7 @@ implicit!(u32, c64 => c64);
560581
implicit!(u32, c32 => c32);
561582
implicit!(u32, f64 => f64);
562583
implicit!(u32, f32 => f32);
584+
implicit!(u32, f16 => f16);
563585
implicit!(u32, i64 => i64);
564586
implicit!(u32, u64 => u64);
565587
implicit!(u32, i32 => u32);
@@ -573,6 +595,7 @@ implicit!(i16, c64 => c64);
573595
implicit!(i16, c32 => c32);
574596
implicit!(i16, f64 => f64);
575597
implicit!(i16, f32 => f32);
598+
implicit!(i16, f16 => f16);
576599
implicit!(i16, i64 => i64);
577600
implicit!(i16, u64 => u64);
578601
implicit!(i16, i32 => i32);
@@ -586,6 +609,7 @@ implicit!(u16, c64 => c64);
586609
implicit!(u16, c32 => c32);
587610
implicit!(u16, f64 => f64);
588611
implicit!(u16, f32 => f32);
612+
implicit!(u16, f16 => f16);
589613
implicit!(u16, i64 => i64);
590614
implicit!(u16, u64 => u64);
591615
implicit!(u16, i32 => i32);
@@ -599,6 +623,7 @@ implicit!(u8, c64 => c64);
599623
implicit!(u8, c32 => c32);
600624
implicit!(u8, f64 => f64);
601625
implicit!(u8, f32 => f32);
626+
implicit!(u8, f16 => f16);
602627
implicit!(u8, i64 => i64);
603628
implicit!(u8, u64 => u64);
604629
implicit!(u8, i32 => i32);
@@ -612,6 +637,7 @@ implicit!(bool, c64 => c64);
612637
implicit!(bool, c32 => c32);
613638
implicit!(bool, f64 => f64);
614639
implicit!(bool, f32 => f32);
640+
implicit!(bool, f16 => f16);
615641
implicit!(bool, i64 => i64);
616642
implicit!(bool, u64 => u64);
617643
implicit!(bool, i32 => i32);

0 commit comments

Comments
 (0)