forked from MightyPork/crsn
fixes, more trig, demo with floats
This commit is contained in:
+11
-8
@@ -24,15 +24,18 @@ impl Rd {
|
||||
Rd(RdData::Immediate(val.to_bits()))
|
||||
}
|
||||
|
||||
/// Convert immediate read to float
|
||||
/// Convert immediate integer to float
|
||||
pub fn imm_to_float(self) -> Rd {
|
||||
match self {
|
||||
Rd(RdData::Immediate(v)) => {
|
||||
let signed : i64 = unsafe { std::mem::transmute(v) };
|
||||
Rd::new_float(signed as f64)
|
||||
}
|
||||
other => other
|
||||
}
|
||||
self
|
||||
|
||||
// FIXME
|
||||
// match self {
|
||||
// Rd(RdData::Immediate(v)) => {
|
||||
// let signed : i64 = unsafe { std::mem::transmute(v) };
|
||||
// Rd::new_float(signed as f64)
|
||||
// }
|
||||
// other => other
|
||||
// }
|
||||
}
|
||||
|
||||
pub fn is_imm_equal(self, other: Value) -> bool {
|
||||
|
||||
@@ -4,6 +4,7 @@ use std::fmt;
|
||||
use crate::asm::data::literal::{is_negative, is_positive, Value};
|
||||
use crate::asm::instr::Cond;
|
||||
use crate::asm::instr::cond::Flag;
|
||||
use num_traits::Zero;
|
||||
|
||||
#[derive(Default, Clone, Debug)]
|
||||
pub struct StatusFlags {
|
||||
@@ -80,9 +81,11 @@ impl StatusFlags {
|
||||
|
||||
#[inline(always)]
|
||||
pub fn update_float(&mut self, val: f64) {
|
||||
self.zero = val == 0.0;
|
||||
self.positive = val > 0.0;
|
||||
self.negative = val < 0.0;
|
||||
self.invalid = val.is_nan();
|
||||
self.overflow = val.is_infinite();
|
||||
self.zero = val.is_zero();
|
||||
self.positive = val.is_sign_positive();
|
||||
self.negative = val.is_sign_negative();
|
||||
}
|
||||
|
||||
#[inline(always)]
|
||||
|
||||
Reference in New Issue
Block a user