fixes, more trig, demo with floats

This commit is contained in:
2020-10-20 00:26:08 +02:00
parent 68c9b33637
commit 9723ac72be
9 changed files with 421 additions and 50 deletions
+11 -8
View File
@@ -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 {
+6 -3
View File
@@ -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)]