Remove custom TryInto (#646)

This commit is contained in:
XAMPPRocky
2019-12-03 02:36:13 +01:00
committed by Dan Gohman
parent 4b001912ce
commit 2109935fef

View File

@@ -13,7 +13,7 @@ use more_asserts::assert_le;
use std::{ use std::{
any::{Any, TypeId}, any::{Any, TypeId},
collections::HashMap, collections::HashMap,
convert::TryFrom, convert::{TryFrom, TryInto},
fmt::Display, fmt::Display,
iter::{self, FromIterator}, iter::{self, FromIterator},
mem, mem,
@@ -1198,7 +1198,7 @@ macro_rules! cmp_i64 {
match right { match right {
ValueLocation::Stack(offset) => { ValueLocation::Stack(offset) => {
let offset = self.adjusted_offset(offset); let offset = self.adjusted_offset(offset);
if let Some(i) = i.try_into() { if let Some(i) = i.try_into().ok() {
dynasm!(self.asm dynasm!(self.asm
; cmp QWORD [rsp + offset], i ; cmp QWORD [rsp + offset], i
); );
@@ -1212,7 +1212,7 @@ macro_rules! cmp_i64 {
} }
ValueLocation::Reg(_) | ValueLocation::Cond(_) => { ValueLocation::Reg(_) | ValueLocation::Cond(_) => {
let rreg = self.into_reg(I32, &mut right).unwrap(); let rreg = self.into_reg(I32, &mut right).unwrap();
if let Some(i) = i.try_into() { if let Some(i) = i.try_into().ok() {
dynasm!(self.asm dynasm!(self.asm
; cmp Rq(rreg.rq().unwrap()), i ; cmp Rq(rreg.rq().unwrap()), i
); );
@@ -1252,7 +1252,7 @@ macro_rules! cmp_i64 {
} }
ValueLocation::Immediate(i) => { ValueLocation::Immediate(i) => {
let i = i.as_i64().unwrap(); let i = i.as_i64().unwrap();
if let Some(i) = i.try_into() { if let Some(i) = i.try_into().ok() {
dynasm!(self.asm dynasm!(self.asm
; cmp Rq(lreg.rq().unwrap()), i ; cmp Rq(lreg.rq().unwrap()), i
); );
@@ -1559,7 +1559,7 @@ macro_rules! binop_f32 {
rx, rx,
F32, F32,
imm_f32, imm_f32,
|_, _, _| unreachable!() |_, _, _: i32| unreachable!()
); );
}; };
} }
@@ -1576,7 +1576,7 @@ macro_rules! commutative_binop_f32 {
rx, rx,
F32, F32,
imm_f32, imm_f32,
|_, _, _| unreachable!() |_, _, _: i32| unreachable!()
); );
}; };
} }
@@ -1593,7 +1593,7 @@ macro_rules! binop_f64 {
rx, rx,
F64, F64,
imm_f64, imm_f64,
|_, _, _| unreachable!() |_, _, _: i32| unreachable!()
); );
}; };
} }
@@ -1610,7 +1610,7 @@ macro_rules! commutative_binop_f64 {
rx, rx,
F64, F64,
imm_f64, imm_f64,
|_, _, _| unreachable!() |_, _, _: i32| unreachable!()
); );
}; };
} }
@@ -1673,7 +1673,7 @@ macro_rules! binop {
); );
} }
ValueLocation::Immediate(i) => { ValueLocation::Immediate(i) => {
if let Some(i) = i.as_int().and_then(|i| i.try_into()) { if let Some(i) = i.as_int().and_then(|i| i.try_into().ok()) {
$direct_imm(&mut *self, lreg, i); $direct_imm(&mut *self, lreg, i);
} else { } else {
let scratch = self.take_reg($ty).unwrap(); let scratch = self.take_reg($ty).unwrap();
@@ -2035,35 +2035,6 @@ macro_rules! store {
}; };
} }
trait TryInto<O> {
fn try_into(self) -> Option<O>;
}
impl TryInto<i64> for u64 {
fn try_into(self) -> Option<i64> {
let max = i64::max_value() as u64;
if self <= max {
Some(self as i64)
} else {
None
}
}
}
impl TryInto<i32> for i64 {
fn try_into(self) -> Option<i32> {
let min = i32::min_value() as i64;
let max = i32::max_value() as i64;
if self >= min && self <= max {
Some(self as i32)
} else {
None
}
}
}
#[derive(Debug, Clone, PartialEq, Eq)] #[derive(Debug, Clone, PartialEq, Eq)]
pub struct VirtualCallingConvention { pub struct VirtualCallingConvention {
pub stack: Stack, pub stack: Stack,
@@ -4726,7 +4697,7 @@ impl<'this, M: ModuleContext> Context<'this, M> {
} }
ValueLocation::Immediate(i) => { ValueLocation::Immediate(i) => {
let i = i.as_i64().unwrap(); let i = i.as_i64().unwrap();
if let Some(i) = i.try_into() { if let Some(i) = i.try_into().ok() {
let new_reg = self.take_reg(I64).unwrap(); let new_reg = self.take_reg(I64).unwrap();
let lreg = self.into_reg(I64, &mut left).unwrap(); let lreg = self.into_reg(I64, &mut left).unwrap();