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
def execute_cvt_w_s( s, inst ): x = bits2float( s.rf[ inst.fs ] ) s.rf[ inst.fd ] = trim_32( int( x ) ) s.pc += 4
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
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
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