diff options
| author | beetrees <b@beetr.ee> | 2024-05-06 13:27:40 +0100 |
|---|---|---|
| committer | beetrees <b@beetr.ee> | 2024-05-06 14:56:10 +0100 |
| commit | 3769fddba23985e9ab83828ccce672507e7dd891 (patch) | |
| tree | ec5cdc7c2024da713350fbccfa04ccb4cfd3b891 /compiler/rustc_target/src | |
| parent | 8cef37dbb67e9c80702925f19cf298c4203991e4 (diff) | |
| download | rust-3769fddba23985e9ab83828ccce672507e7dd891.tar.gz rust-3769fddba23985e9ab83828ccce672507e7dd891.zip | |
Refactor float `Primitive`s to a separate `Float` type
Diffstat (limited to 'compiler/rustc_target/src')
| -rw-r--r-- | compiler/rustc_target/src/abi/call/loongarch.rs | 2 | ||||
| -rw-r--r-- | compiler/rustc_target/src/abi/call/mips64.rs | 6 | ||||
| -rw-r--r-- | compiler/rustc_target/src/abi/call/mod.rs | 2 | ||||
| -rw-r--r-- | compiler/rustc_target/src/abi/call/riscv.rs | 2 | ||||
| -rw-r--r-- | compiler/rustc_target/src/abi/call/sparc64.rs | 10 | ||||
| -rw-r--r-- | compiler/rustc_target/src/abi/call/x86_64.rs | 2 | ||||
| -rw-r--r-- | compiler/rustc_target/src/abi/mod.rs | 6 |
7 files changed, 16 insertions, 14 deletions
diff --git a/compiler/rustc_target/src/abi/call/loongarch.rs b/compiler/rustc_target/src/abi/call/loongarch.rs index 943b12a9fbf..893818af77c 100644 --- a/compiler/rustc_target/src/abi/call/loongarch.rs +++ b/compiler/rustc_target/src/abi/call/loongarch.rs @@ -59,7 +59,7 @@ where _ => return Err(CannotUseFpConv), } } - abi::F16 | abi::F32 | abi::F64 | abi::F128 => { + abi::Float(_) => { if arg_layout.size.bits() > flen { return Err(CannotUseFpConv); } diff --git a/compiler/rustc_target/src/abi/call/mips64.rs b/compiler/rustc_target/src/abi/call/mips64.rs index b2a2c34b980..5b52ebbdedd 100644 --- a/compiler/rustc_target/src/abi/call/mips64.rs +++ b/compiler/rustc_target/src/abi/call/mips64.rs @@ -26,8 +26,8 @@ where { match ret.layout.field(cx, i).abi { abi::Abi::Scalar(scalar) => match scalar.primitive() { - abi::F32 => Some(Reg::f32()), - abi::F64 => Some(Reg::f64()), + abi::Float(abi::F32) => Some(Reg::f32()), + abi::Float(abi::F64) => Some(Reg::f64()), _ => None, }, _ => None, @@ -110,7 +110,7 @@ where // We only care about aligned doubles if let abi::Abi::Scalar(scalar) = field.abi { - if let abi::F64 = scalar.primitive() { + if scalar.primitive() == abi::Float(abi::F64) { if offset.is_aligned(dl.f64_align.abi) { // Insert enough integers to cover [last_offset, offset) assert!(last_offset.is_aligned(dl.f64_align.abi)); diff --git a/compiler/rustc_target/src/abi/call/mod.rs b/compiler/rustc_target/src/abi/call/mod.rs index 3ddea42f67b..919fa2140d5 100644 --- a/compiler/rustc_target/src/abi/call/mod.rs +++ b/compiler/rustc_target/src/abi/call/mod.rs @@ -443,7 +443,7 @@ impl<'a, Ty> TyAndLayout<'a, Ty> { Abi::Scalar(scalar) => { let kind = match scalar.primitive() { abi::Int(..) | abi::Pointer(_) => RegKind::Integer, - abi::F16 | abi::F32 | abi::F64 | abi::F128 => RegKind::Float, + abi::Float(_) => RegKind::Float, }; Ok(HomogeneousAggregate::Homogeneous(Reg { kind, size: self.size })) } diff --git a/compiler/rustc_target/src/abi/call/riscv.rs b/compiler/rustc_target/src/abi/call/riscv.rs index 5d4b3a9d245..84f13f8cc5d 100644 --- a/compiler/rustc_target/src/abi/call/riscv.rs +++ b/compiler/rustc_target/src/abi/call/riscv.rs @@ -65,7 +65,7 @@ where _ => return Err(CannotUseFpConv), } } - abi::F16 | abi::F32 | abi::F64 | abi::F128 => { + abi::Float(_) => { if arg_layout.size.bits() > flen { return Err(CannotUseFpConv); } diff --git a/compiler/rustc_target/src/abi/call/sparc64.rs b/compiler/rustc_target/src/abi/call/sparc64.rs index acdcd5cc0d4..c0952130e04 100644 --- a/compiler/rustc_target/src/abi/call/sparc64.rs +++ b/compiler/rustc_target/src/abi/call/sparc64.rs @@ -20,7 +20,7 @@ where { let dl = cx.data_layout(); - if !matches!(scalar.primitive(), abi::F32 | abi::F64) { + if !matches!(scalar.primitive(), abi::Float(abi::F32 | abi::F64)) { return data; } @@ -56,7 +56,7 @@ where return data; } - if scalar.primitive() == abi::F32 { + if scalar.primitive() == abi::Float(abi::F32) { data.arg_attribute = ArgAttribute::InReg; data.prefix[data.prefix_index] = Some(Reg::f32()); data.last_offset = offset + Reg::f32().size; @@ -80,14 +80,14 @@ where { data = arg_scalar(cx, scalar1, offset, data); match (scalar1.primitive(), scalar2.primitive()) { - (abi::F32, _) => offset += Reg::f32().size, - (_, abi::F64) => offset += Reg::f64().size, + (abi::Float(abi::F32), _) => offset += Reg::f32().size, + (_, abi::Float(abi::F64)) => offset += Reg::f64().size, (abi::Int(i, _signed), _) => offset += i.size(), (abi::Pointer(_), _) => offset += Reg::i64().size, _ => {} } - if (offset.bytes() % 4) != 0 && matches!(scalar2.primitive(), abi::F32 | abi::F64) { + if (offset.bytes() % 4) != 0 && matches!(scalar2.primitive(), abi::Float(abi::F32 | abi::F64)) { offset += Size::from_bytes(4 - (offset.bytes() % 4)); } data = arg_scalar(cx, scalar2, offset, data); diff --git a/compiler/rustc_target/src/abi/call/x86_64.rs b/compiler/rustc_target/src/abi/call/x86_64.rs index f3208fe5d03..fcd712489fa 100644 --- a/compiler/rustc_target/src/abi/call/x86_64.rs +++ b/compiler/rustc_target/src/abi/call/x86_64.rs @@ -51,7 +51,7 @@ where Abi::Scalar(scalar) => match scalar.primitive() { abi::Int(..) | abi::Pointer(_) => Class::Int, - abi::F16 | abi::F32 | abi::F64 | abi::F128 => Class::Sse, + abi::Float(_) => Class::Sse, }, Abi::Vector { .. } => Class::Sse, diff --git a/compiler/rustc_target/src/abi/mod.rs b/compiler/rustc_target/src/abi/mod.rs index 24e49ff648f..666efd9deca 100644 --- a/compiler/rustc_target/src/abi/mod.rs +++ b/compiler/rustc_target/src/abi/mod.rs @@ -1,4 +1,5 @@ use rustc_data_structures::intern::Interned; +pub use Float::*; pub use Integer::*; pub use Primitive::*; @@ -11,7 +12,8 @@ use rustc_macros::HashStable_Generic; pub mod call; -pub use rustc_abi::*; +// Explicitly import `Float` to avoid ambiguity with `Primitive::Float`. +pub use rustc_abi::{Float, *}; impl ToJson for Endian { fn to_json(&self) -> Json { @@ -207,7 +209,7 @@ impl<'a, Ty> TyAndLayout<'a, Ty> { C: HasDataLayout, { match self.abi { - Abi::Scalar(scalar) => matches!(scalar.primitive(), F32 | F64), + Abi::Scalar(scalar) => matches!(scalar.primitive(), Float(F32 | F64)), Abi::Aggregate { .. } => { if self.fields.count() == 1 && self.fields.offset(0).bytes() == 0 { self.field(cx, 0).is_single_fp_element(cx) |
