about summary refs log tree commit diff
path: root/compiler
diff options
context:
space:
mode:
authorTomasz Miąsko <tomasz.miasko@gmail.com>2021-01-27 00:00:00 +0000
committerTomasz Miąsko <tomasz.miasko@gmail.com>2021-01-27 16:13:18 +0100
commit83dc7fe6691b5897b27cc9ca446d3841ed7d86de (patch)
tree6b4b068bd5b5005ab548d46128f4acce8a9966ba /compiler
parent613ef740f3f37702728c6324f948d0abd1e9c82b (diff)
downloadrust-83dc7fe6691b5897b27cc9ca446d3841ed7d86de.tar.gz
rust-83dc7fe6691b5897b27cc9ca446d3841ed7d86de.zip
Inline trivial implementation of rustc_target::abi::Align
Diffstat (limited to 'compiler')
-rw-r--r--compiler/rustc_target/src/abi/mod.rs20
1 files changed, 18 insertions, 2 deletions
diff --git a/compiler/rustc_target/src/abi/mod.rs b/compiler/rustc_target/src/abi/mod.rs
index 93868bed9b9..88b2923f6c4 100644
--- a/compiler/rustc_target/src/abi/mod.rs
+++ b/compiler/rustc_target/src/abi/mod.rs
@@ -441,16 +441,28 @@ pub struct Align {
 }
 
 impl Align {
+    #[inline]
     pub fn from_bits(bits: u64) -> Result<Align, String> {
         Align::from_bytes(Size::from_bits(bits).bytes())
     }
 
+    #[inline]
     pub fn from_bytes(align: u64) -> Result<Align, String> {
         // Treat an alignment of 0 bytes like 1-byte alignment.
         if align == 0 {
             return Ok(Align { pow2: 0 });
         }
 
+        #[cold]
+        fn not_power_of_2(align: u64) -> String {
+            format!("`{}` is not a power of 2", align)
+        }
+
+        #[cold]
+        fn too_large(align: u64) -> String {
+            format!("`{}` is too large", align)
+        }
+
         let mut bytes = align;
         let mut pow2: u8 = 0;
         while (bytes & 1) == 0 {
@@ -458,19 +470,21 @@ impl Align {
             bytes >>= 1;
         }
         if bytes != 1 {
-            return Err(format!("`{}` is not a power of 2", align));
+            return Err(not_power_of_2(align));
         }
         if pow2 > 29 {
-            return Err(format!("`{}` is too large", align));
+            return Err(too_large(align));
         }
 
         Ok(Align { pow2 })
     }
 
+    #[inline]
     pub fn bytes(self) -> u64 {
         1 << self.pow2
     }
 
+    #[inline]
     pub fn bits(self) -> u64 {
         self.bytes() * 8
     }
@@ -479,12 +493,14 @@ impl Align {
     /// (the largest power of two that the offset is a multiple of).
     ///
     /// N.B., for an offset of `0`, this happens to return `2^64`.
+    #[inline]
     pub fn max_for_offset(offset: Size) -> Align {
         Align { pow2: offset.bytes().trailing_zeros() as u8 }
     }
 
     /// Lower the alignment, if necessary, such that the given offset
     /// is aligned to it (the offset is a multiple of the alignment).
+    #[inline]
     pub fn restrict_for_offset(self, offset: Size) -> Align {
         self.min(Align::max_for_offset(offset))
     }