FSGNJ working now in all three modes
[ieee754fpu.git] / src / ieee754 / fsgnj / test / test_fsgnj_pipe.py
index d75d30d4022f2880063ada6b62c5432f56e3a656..ded01e3b3be8b9094c1e148cbade4adb68e289fe 100644 (file)
@@ -13,15 +13,37 @@ from sfpy import Float64, Float32, Float16
 # signed int to fp
 ######################
 
-def fsgnj_abs(x):
-    return x.__abs__()
+def fsgnj_f32_mov(a, b):
+    return Float32.from_bits((a.bits & 0x7fffffff) | (b.bits & 0x80000000))
+
+def fsgnj_f32_neg(a, b):
+    sign = b.bits & 0x80000000
+    sign = sign ^ 0x80000000
+    return Float32.from_bits((a.bits & 0x7fffffff) | sign)
+
+def fsgnj_f32_abs(a, b):
+    bsign = b.bits & 0x80000000
+    asign = a.bits & 0x80000000
+    sign = asign ^ bsign
+    return Float32.from_bits((a.bits & 0x7fffffff) | sign)
+
+def test_fsgnj_mov():
+    dut = FSGNJMuxInOut(32, 4)
+    runfp(dut, 32, "test_fsgnj_f32_mov", Float32, fsgnj_f32_mov,
+                False, n_vals=10, opcode=0x0)
+def test_fsgnj_neg():
+    dut = FSGNJMuxInOut(32, 4)
+    runfp(dut, 32, "test_fsgnj_f32_neg", Float32, fsgnj_f32_neg,
+                False, n_vals=10, opcode=0x1)
 
 def test_fsgnj_abs():
     dut = FSGNJMuxInOut(32, 4)
-    runfp(dut, 32, "test_fsgnj_abs", Float32, fsgnj_abs,
-                True, n_vals=10, opcode=0x0)
+    runfp(dut, 32, "test_fsgnj_f32_abs", Float32, fsgnj_f32_abs,
+                False, n_vals=10, opcode=0x2)
 
 
 if __name__ == '__main__':
-    for i in range(200):
+    for i in range(50):
+        test_fsgnj_mov()
+        test_fsgnj_neg()
         test_fsgnj_abs()