Test using fpcalc for fp_dataset.py

This commit is contained in:
David Harris 2024-05-14 11:11:24 -07:00
parent 46bf99d65b
commit 990d40410b
3 changed files with 74 additions and 22 deletions

View File

@ -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) { void printFlags(void) {
int NX = softfloat_exceptionFlags % 2; int NX = softfloat_exceptionFlags % 2;
int UF = (softfloat_exceptionFlags >> 1) % 2; int UF = (softfloat_exceptionFlags >> 1) % 2;
@ -369,7 +387,8 @@ int main(int argc, char *argv[])
} }
printF128("X", x); printF128("Y", y); printF128("X", x); printF128("Y", y);
//sprintf(cmd, "0x%016lx %c 0x%016lx", x.v, op1, y.v); //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
View File

@ -5,6 +5,7 @@ import random
import sys import sys
import math import math
from decimal import * from decimal import *
import os
sys.set_int_max_str_digits(10000) sys.set_int_max_str_digits(10000)
fzero = ['0x00000000', '0x80000000'] fzero = ['0x00000000', '0x80000000']
@ -347,6 +348,35 @@ def comments_parser(coverpoints):
cvpts.append((cvpt+ " #nosat",comment)) cvpts.append((cvpt+ " #nosat",comment))
return cvpts 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): def ibm_b1(flen, iflen, opcode, ops):
''' '''
IBM Model B1 Definition: 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:]) rs1 = fields_dec_converter(iflen,'0x'+hex(int('1'+rs1_bin[2:],2))[3:])
#print(rs1) #print(rs1)
rs3 = fields_dec_converter(iflen,'0x'+hex(int('1'+rs3_bin[2:],2))[3:]) rs3 = fields_dec_converter(iflen,'0x'+hex(int('1'+rs3_bin[2:],2))[3:])
if opcode in 'fadd': rs2 = gen_rs2(iflen,opcode,"3FFF8000000000000000000000000000","3FFF4000000000000000000000000000","3FFF8800000000000000000000000000")
rs2 = fields_dec_converter(iflen,result[i][0]) - rs1 # if opcode in 'fadd':
elif opcode in 'fsub': # rs2 = fields_dec_converter(iflen,result[i][0]) - rs1
rs2 = rs1 - fields_dec_converter(iflen,result[i][0]) # elif opcode in 'fsub':
elif opcode in 'fmul': # rs2 = rs1 - fields_dec_converter(iflen,result[i][0])
rs2 = fields_dec_converter(iflen,result[i][0])/rs1 # elif opcode in 'fmul':
elif opcode in 'fdiv': # rs2 = fields_dec_converter(iflen,result[i][0])/rs1
if fields_dec_converter(iflen,result[i][0]) != 0: # elif opcode in 'fdiv':
rs2 = rs1/fields_dec_converter(iflen,result[i][0]) # if fields_dec_converter(iflen,result[i][0]) != 0:
elif opcode in 'fsqrt': # rs2 = rs1/fields_dec_converter(iflen,result[i][0])
rs2 = fields_dec_converter(iflen,result[i][0])*fields_dec_converter(iflen,result[i][0]) # elif opcode in 'fsqrt':
elif opcode in 'fmadd': # rs2 = fields_dec_converter(iflen,result[i][0])*fields_dec_converter(iflen,result[i][0])
rs2 = (fields_dec_converter(iflen,result[i][0]) - rs3)/rs1 # elif opcode in 'fmadd':
elif opcode in 'fnmadd': # rs2 = (fields_dec_converter(iflen,result[i][0]) - rs3)/rs1
rs2 = (rs3 - fields_dec_converter(iflen,result[i][0]))/rs1 # elif opcode in 'fnmadd':
elif opcode in 'fmsub': # rs2 = (rs3 - fields_dec_converter(iflen,result[i][0]))/rs1
rs2 = (fields_dec_converter(iflen,result[i][0]) + rs3)/rs1 # elif opcode in 'fmsub':
elif opcode in 'fnmsub': # rs2 = (fields_dec_converter(iflen,result[i][0]) + rs3)/rs1
rs2 = -1*(rs3 + fields_dec_converter(iflen,result[i][0]))/rs1 # elif opcode in 'fnmsub':
# rs2 = -1*(rs3 + fields_dec_converter(iflen,result[i][0]))/rs1
if(iflen==32): if(iflen==32):
m = struct.unpack('f', struct.pack('f', rs2))[0] m = struct.unpack('f', struct.pack('f', rs2))[0]

6
tests/fp/quad/fpdatasetgen.py Normal file → Executable file
View File

@ -1,7 +1,9 @@
#!/usr/bin/python
from fp_dataset import * from fp_dataset import *
#coverpoints=ibm_b1(128, 128, 'fadd.q', 2) #ibm_b1(flen, iflen, opcode, ops) #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(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(32,32,'fadd.s',2) #ibm_b2(flen, iflen, opcode, ops,seed = -1)
#print(coverpoints) #print(coverpoints)
#quad_precision_hex = "0x3ff00000000000000000000000000001" # Example quad precision hexadecimal value #quad_precision_hex = "0x3ff00000000000000000000000000001" # Example quad precision hexadecimal value
#quad_precision_dec = fields_dec_converter(128, quad_precision_hex) #quad_precision_dec = fields_dec_converter(128, quad_precision_hex)