Exemple #1
0
def execute_trunc_w_s( s, inst ):
  # TODO: check for overflow
  x = bits2float( s.rf[ inst.fs ] )
  s.rf[ inst.fd ] = trim_32(int(x))  # round down
  s.pc += 4
Exemple #2
0
def execute_cvt_w_s( s, inst ):
  x = bits2float( s.rf[ inst.fs ] )
  s.rf[ inst.fd ] = trim_32( int( x ) )
  s.pc += 4
Exemple #3
0
def execute_c_le_s( s, inst ):
  a = bits2float( s.rf[ inst.fs ] )
  b = bits2float( s.rf[ inst.ft ] )
  s.rf[ inst.fd ] = 1 if a <= b else 0
  s.pc += 4
Exemple #4
0
def execute_div_s( s, inst ):
  a = bits2float( s.rf[ inst.fs ] )
  b = bits2float( s.rf[ inst.ft ] )
  s.rf[ inst.fd ] = float2bits( a / b )
  s.pc += 4
    int_fast64_t  f64_to_i64( float64_t, int_fast8_t, bool );
''')
ffi.compile()

shutil.move('_abi.py', '../softfloat/_abi.py')

#-----------------------------------------------------------------------
# verify everything went swimmingly
#-----------------------------------------------------------------------

from softfloat._abi import ffi
from pydgin.utils   import bits2float, float2bits

lib = ffi.dlopen('../build/libsoftfloat.so')

assert bits2float(0x3f800000) == 1.0

def test_add( is_inexact, out, a, b ):
  a_bits = float2bits(a)
  b_bits = float2bits(b)
  #print 'expected:', float2bits(out), out, lib.softfloat_exceptionFlags
  out_bits = lib.f32_add( a_bits, b_bits )
  #print 'actual:  ', out_bits, bits2float( out_bits ), is_inexact
  assert float2bits(out) == out_bits
  assert is_inexact == lib.softfloat_exceptionFlags
  #if out != bits2float( out_bits ):
  #  print "WARNING: bits match but float conversion doesn't!"
  #print
  lib.softfloat_exceptionFlags = 0

Exemple #6
0
    int_fast64_t  f64_to_i64( float64_t, int_fast8_t, bool );
''')
ffi.compile()

shutil.move('_abi.py', '../softfloat/_abi.py')

#-----------------------------------------------------------------------
# verify everything went swimmingly
#-----------------------------------------------------------------------

from softfloat._abi import ffi
from pydgin.utils import bits2float, float2bits

lib = ffi.dlopen('../build/libsoftfloat.so')

assert bits2float(0x3f800000) == 1.0


def test_add(is_inexact, out, a, b):
    a_bits = float2bits(a)
    b_bits = float2bits(b)
    #print 'expected:', float2bits(out), out, lib.softfloat_exceptionFlags
    out_bits = lib.f32_add(a_bits, b_bits)
    #print 'actual:  ', out_bits, bits2float( out_bits ), is_inexact
    assert float2bits(out) == out_bits
    assert is_inexact == lib.softfloat_exceptionFlags
    #if out != bits2float( out_bits ):
    #  print "WARNING: bits match but float conversion doesn't!"
    #print
    lib.softfloat_exceptionFlags = 0