Skip to content

Commit d1b9d67

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 5209591 commit d1b9d67

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
@@ -472,6 +472,7 @@ macro_rules! implicit {
472472
implicit!(c64, c32 => c64);
473473
implicit!(c64, f64 => c64);
474474
implicit!(c64, f32 => c64);
475+
implicit!(c64, f16 => c64);
475476
implicit!(c64, i64 => c64);
476477
implicit!(c64, u64 => c64);
477478
implicit!(c64, i32 => c64);
@@ -485,6 +486,7 @@ implicit!(c64, u8 => c64);
485486
implicit!(c32, c64 => c64);
486487
implicit!(c32, f64 => c64);
487488
implicit!(c32, f32 => c32);
489+
implicit!(c32, f16 => c32);
488490
implicit!(c32, i64 => c32);
489491
implicit!(c32, u64 => c32);
490492
implicit!(c32, i32 => c32);
@@ -498,6 +500,7 @@ implicit!(c32, u8 => c32);
498500
implicit!(f64, c64 => c64);
499501
implicit!(f64, c32 => c64);
500502
implicit!(f64, f32 => f64);
503+
implicit!(f64, f16 => f64);
501504
implicit!(f64, i64 => f64);
502505
implicit!(f64, u64 => f64);
503506
implicit!(f64, i32 => f64);
@@ -511,6 +514,7 @@ implicit!(f64, u8 => f64);
511514
implicit!(f32, c64 => c64);
512515
implicit!(f32, c32 => c32);
513516
implicit!(f32, f64 => f64);
517+
implicit!(f32, f16 => f32);
514518
implicit!(f32, i64 => f32);
515519
implicit!(f32, u64 => f32);
516520
implicit!(f32, i32 => f32);
@@ -520,11 +524,26 @@ implicit!(f32, u16 => f32);
520524
implicit!(f32, bool => f32);
521525
implicit!(f32, u8 => f32);
522526

527+
//LHS is 16-bit floating point
528+
implicit!(f16, c64 => c64);
529+
implicit!(f16, c32 => c32);
530+
implicit!(f16, f64 => f64);
531+
implicit!(f16, f32 => f32);
532+
implicit!(f16, i64 => f16);
533+
implicit!(f16, u64 => f16);
534+
implicit!(f16, i32 => f16);
535+
implicit!(f16, u32 => f16);
536+
implicit!(f16, i16 => f16);
537+
implicit!(f16, u16 => f16);
538+
implicit!(f16, bool => f16);
539+
implicit!(f16, u8 => f16);
540+
523541
//LHS is 64-bit signed integer
524542
implicit!(i64, c64 => c64);
525543
implicit!(i64, c32 => c32);
526544
implicit!(i64, f64 => f64);
527545
implicit!(i64, f32 => f32);
546+
implicit!(i64, f16 => f16);
528547
implicit!(i64, u64 => u64);
529548
implicit!(i64, i32 => i64);
530549
implicit!(i64, u32 => i64);
@@ -538,6 +557,7 @@ implicit!(u64, c64 => c64);
538557
implicit!(u64, c32 => c32);
539558
implicit!(u64, f64 => f64);
540559
implicit!(u64, f32 => f32);
560+
implicit!(u64, f16 => f16);
541561
implicit!(u64, i64 => u64);
542562
implicit!(u64, i32 => u64);
543563
implicit!(u64, u32 => u64);
@@ -551,6 +571,7 @@ implicit!(i32, c64 => c64);
551571
implicit!(i32, c32 => c32);
552572
implicit!(i32, f64 => f64);
553573
implicit!(i32, f32 => f32);
574+
implicit!(i32, f16 => f16);
554575
implicit!(i32, i64 => i64);
555576
implicit!(i32, u64 => u64);
556577
implicit!(i32, u32 => u32);
@@ -564,6 +585,7 @@ implicit!(u32, c64 => c64);
564585
implicit!(u32, c32 => c32);
565586
implicit!(u32, f64 => f64);
566587
implicit!(u32, f32 => f32);
588+
implicit!(u32, f16 => f16);
567589
implicit!(u32, i64 => i64);
568590
implicit!(u32, u64 => u64);
569591
implicit!(u32, i32 => u32);
@@ -577,6 +599,7 @@ implicit!(i16, c64 => c64);
577599
implicit!(i16, c32 => c32);
578600
implicit!(i16, f64 => f64);
579601
implicit!(i16, f32 => f32);
602+
implicit!(i16, f16 => f16);
580603
implicit!(i16, i64 => i64);
581604
implicit!(i16, u64 => u64);
582605
implicit!(i16, i32 => i32);
@@ -590,6 +613,7 @@ implicit!(u16, c64 => c64);
590613
implicit!(u16, c32 => c32);
591614
implicit!(u16, f64 => f64);
592615
implicit!(u16, f32 => f32);
616+
implicit!(u16, f16 => f16);
593617
implicit!(u16, i64 => i64);
594618
implicit!(u16, u64 => u64);
595619
implicit!(u16, i32 => i32);
@@ -603,6 +627,7 @@ implicit!(u8, c64 => c64);
603627
implicit!(u8, c32 => c32);
604628
implicit!(u8, f64 => f64);
605629
implicit!(u8, f32 => f32);
630+
implicit!(u8, f16 => f16);
606631
implicit!(u8, i64 => i64);
607632
implicit!(u8, u64 => u64);
608633
implicit!(u8, i32 => i32);
@@ -616,6 +641,7 @@ implicit!(bool, c64 => c64);
616641
implicit!(bool, c32 => c32);
617642
implicit!(bool, f64 => f64);
618643
implicit!(bool, f32 => f32);
644+
implicit!(bool, f16 => f16);
619645
implicit!(bool, i64 => i64);
620646
implicit!(bool, u64 => u64);
621647
implicit!(bool, i32 => i32);

0 commit comments

Comments
 (0)