mirror of
https://github.com/openhwgroup/cvw
synced 2025-02-11 06:05:49 +00:00
Test using fpcalc for fp_dataset.py
This commit is contained in:
parent
46bf99d65b
commit
990d40410b
@ -169,6 +169,24 @@ void printF128 (char *msg, float128_t q) {
|
||||
|
||||
}
|
||||
|
||||
void printF128val(float128_t q) {
|
||||
qp conv;
|
||||
//__int128_t v128;
|
||||
int i, j;
|
||||
char buf[64];
|
||||
//v128 = q.v[1];
|
||||
//v128 = v128 << 64 | q.v[0]; // use union to convert between hexadecimal and floating-point views
|
||||
//conv.v = v128;
|
||||
conv.v64[0] = q.v[0]; // use union to convert between hexadecimal and floating-point views
|
||||
conv.v64[1] = q.v[1]; // use union to convert between hexadecimal and floating-point views
|
||||
|
||||
// Some compilers can understand %Q for printf on quad precision instead of the
|
||||
// API call of quadmath_snprintf
|
||||
// printf("0x%016" PRIx64 "_%016" PRIx64 " = %1.15Qe\n", q.v[1], q.v[0], conv.q);
|
||||
//quadmath_snprintf (buf, sizeof buf, "%1.15Qe", conv.q);
|
||||
printf("%016" PRIx64 "%016" PRIx64 "\n", q.v[1], q.v[0]);
|
||||
}
|
||||
|
||||
void printFlags(void) {
|
||||
int NX = softfloat_exceptionFlags % 2;
|
||||
int UF = (softfloat_exceptionFlags >> 1) % 2;
|
||||
@ -369,7 +387,8 @@ int main(int argc, char *argv[])
|
||||
}
|
||||
printF128("X", x); printF128("Y", y);
|
||||
//sprintf(cmd, "0x%016lx %c 0x%016lx", x.v, op1, y.v);
|
||||
printF128("Result", r); printFlags();
|
||||
printF128(cmd, r); printFlags();
|
||||
printF128val(r);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
69
tests/fp/quad/fp_dataset.py
Normal file → Executable file
69
tests/fp/quad/fp_dataset.py
Normal file → Executable file
@ -5,6 +5,7 @@ import random
|
||||
import sys
|
||||
import math
|
||||
from decimal import *
|
||||
import os
|
||||
sys.set_int_max_str_digits(10000)
|
||||
|
||||
fzero = ['0x00000000', '0x80000000']
|
||||
@ -347,6 +348,35 @@ def comments_parser(coverpoints):
|
||||
cvpts.append((cvpt+ " #nosat",comment))
|
||||
return cvpts
|
||||
|
||||
def softfloat_sub(a, b):
|
||||
cmd = "$WALLY/examples/fp/fpcalc/fpcalc " + a + " - " + b
|
||||
result = os.system(cmd)
|
||||
print("cmd = ", cmd, "returns result = ", result)
|
||||
return result
|
||||
|
||||
# rs1, rs3, result are hexadecimal strings
|
||||
def gen_rs2(iflen,opcode,rs1,rs3,result):
|
||||
if opcode in 'fadd':
|
||||
rs2 = softfloat_sub(result, rs1)
|
||||
elif opcode in 'fsub':
|
||||
rs2 = rs1 - fields_dec_converter(iflen,result[i][0])
|
||||
elif opcode in 'fmul':
|
||||
rs2 = fields_dec_converter(iflen,result[i][0])/rs1
|
||||
elif opcode in 'fdiv':
|
||||
if fields_dec_converter(iflen,result[i][0]) != 0:
|
||||
rs2 = rs1/fields_dec_converter(iflen,result[i][0])
|
||||
elif opcode in 'fsqrt':
|
||||
rs2 = fields_dec_converter(iflen,result[i][0])*fields_dec_converter(iflen,result[i][0])
|
||||
elif opcode in 'fmadd':
|
||||
rs2 = (fields_dec_converter(iflen,result[i][0]) - rs3)/rs1
|
||||
elif opcode in 'fnmadd':
|
||||
rs2 = (rs3 - fields_dec_converter(iflen,result[i][0]))/rs1
|
||||
elif opcode in 'fmsub':
|
||||
rs2 = (fields_dec_converter(iflen,result[i][0]) + rs3)/rs1
|
||||
elif opcode in 'fnmsub':
|
||||
rs2 = -1*(rs3 + fields_dec_converter(iflen,result[i][0]))/rs1
|
||||
return rs2
|
||||
|
||||
def ibm_b1(flen, iflen, opcode, ops):
|
||||
'''
|
||||
IBM Model B1 Definition:
|
||||
@ -525,25 +555,26 @@ def ibm_b2(flen, iflen, opcode, ops, int_val = 100, seed = -1): #***Quad support
|
||||
rs1 = fields_dec_converter(iflen,'0x'+hex(int('1'+rs1_bin[2:],2))[3:])
|
||||
#print(rs1)
|
||||
rs3 = fields_dec_converter(iflen,'0x'+hex(int('1'+rs3_bin[2:],2))[3:])
|
||||
if opcode in 'fadd':
|
||||
rs2 = fields_dec_converter(iflen,result[i][0]) - rs1
|
||||
elif opcode in 'fsub':
|
||||
rs2 = rs1 - fields_dec_converter(iflen,result[i][0])
|
||||
elif opcode in 'fmul':
|
||||
rs2 = fields_dec_converter(iflen,result[i][0])/rs1
|
||||
elif opcode in 'fdiv':
|
||||
if fields_dec_converter(iflen,result[i][0]) != 0:
|
||||
rs2 = rs1/fields_dec_converter(iflen,result[i][0])
|
||||
elif opcode in 'fsqrt':
|
||||
rs2 = fields_dec_converter(iflen,result[i][0])*fields_dec_converter(iflen,result[i][0])
|
||||
elif opcode in 'fmadd':
|
||||
rs2 = (fields_dec_converter(iflen,result[i][0]) - rs3)/rs1
|
||||
elif opcode in 'fnmadd':
|
||||
rs2 = (rs3 - fields_dec_converter(iflen,result[i][0]))/rs1
|
||||
elif opcode in 'fmsub':
|
||||
rs2 = (fields_dec_converter(iflen,result[i][0]) + rs3)/rs1
|
||||
elif opcode in 'fnmsub':
|
||||
rs2 = -1*(rs3 + fields_dec_converter(iflen,result[i][0]))/rs1
|
||||
rs2 = gen_rs2(iflen,opcode,"3FFF8000000000000000000000000000","3FFF4000000000000000000000000000","3FFF8800000000000000000000000000")
|
||||
# if opcode in 'fadd':
|
||||
# rs2 = fields_dec_converter(iflen,result[i][0]) - rs1
|
||||
# elif opcode in 'fsub':
|
||||
# rs2 = rs1 - fields_dec_converter(iflen,result[i][0])
|
||||
# elif opcode in 'fmul':
|
||||
# rs2 = fields_dec_converter(iflen,result[i][0])/rs1
|
||||
# elif opcode in 'fdiv':
|
||||
# if fields_dec_converter(iflen,result[i][0]) != 0:
|
||||
# rs2 = rs1/fields_dec_converter(iflen,result[i][0])
|
||||
# elif opcode in 'fsqrt':
|
||||
# rs2 = fields_dec_converter(iflen,result[i][0])*fields_dec_converter(iflen,result[i][0])
|
||||
# elif opcode in 'fmadd':
|
||||
# rs2 = (fields_dec_converter(iflen,result[i][0]) - rs3)/rs1
|
||||
# elif opcode in 'fnmadd':
|
||||
# rs2 = (rs3 - fields_dec_converter(iflen,result[i][0]))/rs1
|
||||
# elif opcode in 'fmsub':
|
||||
# rs2 = (fields_dec_converter(iflen,result[i][0]) + rs3)/rs1
|
||||
# elif opcode in 'fnmsub':
|
||||
# rs2 = -1*(rs3 + fields_dec_converter(iflen,result[i][0]))/rs1
|
||||
|
||||
if(iflen==32):
|
||||
m = struct.unpack('f', struct.pack('f', rs2))[0]
|
||||
|
6
tests/fp/quad/fpdatasetgen.py
Normal file → Executable file
6
tests/fp/quad/fpdatasetgen.py
Normal file → Executable file
@ -1,7 +1,9 @@
|
||||
#!/usr/bin/python
|
||||
|
||||
from fp_dataset import *
|
||||
#coverpoints=ibm_b1(128, 128, 'fadd.q', 2) #ibm_b1(flen, iflen, opcode, ops)
|
||||
#coverpoints=ibm_b2(128,128,'fadd.q',2) #ibm_b2(flen, iflen, opcode, ops, int_val = 100, seed = -1)
|
||||
coverpoints=ibm_b2(32,32,'fadd.s',2) #ibm_b2(flen, iflen, opcode, ops,seed = -1)
|
||||
coverpoints=ibm_b2(128,128,'fadd.q',2) #ibm_b2(flen, iflen, opcode, ops, int_val = 100, seed = -1)
|
||||
#coverpoints=ibm_b2(32,32,'fadd.s',2) #ibm_b2(flen, iflen, opcode, ops,seed = -1)
|
||||
#print(coverpoints)
|
||||
#quad_precision_hex = "0x3ff00000000000000000000000000001" # Example quad precision hexadecimal value
|
||||
#quad_precision_dec = fields_dec_converter(128, quad_precision_hex)
|
||||
|
Loading…
Reference in New Issue
Block a user