mirror of
				https://github.com/openhwgroup/cvw
				synced 2025-02-11 06:05:49 +00:00 
			
		
		
		
	Merge pull request #618 from davidharrishmc/dev
Derived configurations, Zfh FMA tests
This commit is contained in:
		
						commit
						eec1da2d4d
					
				| @ -33,13 +33,14 @@ | ||||
| 
 | ||||
| use strict; | ||||
| use warnings; | ||||
| import os; | ||||
| import os;  | ||||
| use Data::Dumper; | ||||
| 
 | ||||
| my $curderiv = ""; | ||||
| my @derivlist = (); | ||||
| my %derivs; | ||||
| my %basederiv; | ||||
| my @derivnames = (); | ||||
| 
 | ||||
| if ($#ARGV != -1) { | ||||
|     die("Usage: $0") | ||||
| @ -69,7 +70,8 @@ foreach my $line (<$fh>) { | ||||
| } | ||||
| &terminateDeriv(); | ||||
| close($fh); | ||||
| foreach my $key (keys %derivs) { | ||||
| #foreach my $key (keys %derivs) { | ||||
| foreach my $key (@derivnames) { | ||||
|     my $dir = "$ENV{WALLY}/config/deriv/$key"; | ||||
|     system("rm -rf $dir"); | ||||
|     system("mkdir -p $dir"); | ||||
| @ -78,9 +80,9 @@ foreach my $key (keys %derivs) { | ||||
|     my $base = "$ENV{WALLY}/config/$basederiv{$key}/config.vh"; | ||||
|     if (! -e $base) { | ||||
|         $base = "$ENV{WALLY}/config/deriv/$basederiv{$key}/config.vh"; | ||||
|         if (! -e $base) { | ||||
|             die("Unable to find base config $base for $key\n"); | ||||
|         } | ||||
|         #if (! -e $base) { | ||||
|         #    die("Unable to find base config $base for $key\n"); | ||||
|         #} | ||||
|     } | ||||
|     system("cp $base $configunmod"); | ||||
|     open(my $unmod, $configunmod) or die "Could not open file '$configunmod' $!"; | ||||
| @ -117,6 +119,7 @@ sub terminateDeriv { | ||||
|     if ($curderiv ne "") { # close out the previous derivative | ||||
|         my @dl = @derivlist; | ||||
|         $derivs{$curderiv} = \@dl; | ||||
|         push(@derivnames, $curderiv); | ||||
|     } | ||||
| }; | ||||
| 
 | ||||
|  | ||||
| @ -109,9 +109,9 @@ localparam DIVBLEN     = $clog2(DIVb+1);                            // enough bi | ||||
| localparam CVTLEN = ((NF<XLEN) ? (XLEN) : (NF));  // max(XLEN, NF) | ||||
| localparam LLEN = (($unsigned(FLEN)<$unsigned(XLEN)) ? ($unsigned(XLEN)) : ($unsigned(FLEN))); | ||||
| localparam LOGCVTLEN = $unsigned($clog2(CVTLEN+1)); | ||||
| localparam NORMSHIFTSZ = (((CVTLEN+NF+1)>(DIVb + 1 +NF+1) & (CVTLEN+NF+1)>(3*NF+6)) ? (CVTLEN+NF+1) : ((DIVb + 1 +NF+1) > (3*NF+6) ? (DIVb + 1 +NF+1) : (3*NF+6))); | ||||
| localparam NORMSHIFTSZ = (((CVTLEN+NF+1)>(DIVb + 1 +NF+1) & (CVTLEN+NF+1)>(3*NF+6)) ? (CVTLEN+NF+1) : ((DIVb + 1 +NF+1) > (3*NF+6) ? (DIVb + 1 +NF+1) : (3*NF+6))); // max(CVTLEN+NF+1, DIVb + 1 + NF + 1, 3*NF+6) | ||||
| localparam LOGNORMSHIFTSZ = ($clog2(NORMSHIFTSZ)); | ||||
| localparam CORRSHIFTSZ = (((DIVMINb+1+NF) > (3*NF+4) ? (DIVMINb+1+NF) : (3*NF+4))); // max(DIVMINb+NF+1, 3*NF+4) | ||||
| localparam CORRSHIFTSZ = (NORMSHIFTSZ-2 > (DIVMINb + 1 + NF)) ? NORMSHIFTSZ-2 : (DIVMINb+1+NF);  // max(NORMSHIFTSZ-2, DIVMINb + 1 + NF) | ||||
| 
 | ||||
| 
 | ||||
| // Disable spurious Verilator warnings | ||||
|  | ||||
| @ -38,7 +38,7 @@ for config in ${configs[@]}; do | ||||
|         echo -e "${GREEN}$config passed lint${NC}" | ||||
|     fi | ||||
| done | ||||
| if [ $fails > 0 ]; then | ||||
| if [ $fails -gt 0 ]; then | ||||
|     echo -e "${RED}Linting failed for $fails of ${#configs[@]} configurations" | ||||
|     exit 1 | ||||
| fi | ||||
|  | ||||
| @ -54,7 +54,7 @@ else: | ||||
|             name="lints", | ||||
|             variant="all", | ||||
|             cmd="./lint-wally " + nightMode + " | tee {}", | ||||
|             grepstr="All lints run with no errors or warnings" | ||||
|             grepstr="lints run with no errors or warnings" | ||||
|         ) | ||||
|     ] | ||||
| 
 | ||||
| @ -88,7 +88,7 @@ for test in tests64i: | ||||
|   configs.append(tc) | ||||
| 
 | ||||
| tests32gcimperas = ["imperas32i", "imperas32f", "imperas32m", "imperas32c"] # unused | ||||
| tests32gc = ["arch32f", "arch32d", "arch32f_fma", "arch32d_fma", "arch32i", "arch32priv", "arch32c",  "arch32m", "arch32a", "arch32zifencei", "arch32zicond", "arch32zba", "arch32zbb", "arch32zbs", "arch32zfh", "arch32zfaf", "wally32a", "wally32priv", "wally32periph"]  # "arch32zbc", "arch32zfad", | ||||
| tests32gc = ["arch32f", "arch32d", "arch32f_fma", "arch32d_fma", "arch32f_divsqrt", "arch32d_divsqrt", "arch32i", "arch32priv", "arch32c",  "arch32m", "arch32a", "arch32zifencei", "arch32zicond", "arch32zba", "arch32zbb", "arch32zbs", "arch32zfh", "arch32zfh_fma", "arch32zfh_divsqrt", "arch32zfaf", "wally32a", "wally32priv", "wally32periph"]  # "arch32zbc", "arch32zfad", | ||||
| #tests32gc = ["arch32f", "arch32d", "arch32f_fma", "arch32d_fma", "arch32i", "arch32priv", "arch32c",  "arch32m", "arch32a", "arch32zifencei", "arch32zba", "arch32zbb", "arch32zbc", "arch32zbs", "arch32zicboz", "arch32zcb", "wally32a",  "wally32priv", "wally32periph"]   | ||||
| for test in tests32gc: | ||||
|   tc = TestCase( | ||||
| @ -127,7 +127,7 @@ for test in tests32e: | ||||
|         grepstr="All tests ran without failures") | ||||
|   configs.append(tc) | ||||
| 
 | ||||
| tests64gc = ["arch64f", "arch64d", "arch64f_fma", "arch64d_fma", "arch64f_divsqrt", "arch64d_divsqrt", "arch64i", "arch64zba", "arch64zbb", "arch64zbc", "arch64zbs",  "arch64zfh", "arch64zfh_divsqrt", "arch64zfaf", "arch64zfad", | ||||
| tests64gc = ["arch64f", "arch64d", "arch64f_fma", "arch64d_fma", "arch64f_divsqrt", "arch64d_divsqrt", "arch64i", "arch64zba", "arch64zbb", "arch64zbc", "arch64zbs",  "arch64zfh", "arch64zfh_divsqrt", "arch64zfh_fma", "arch64zfaf", "arch64zfad", | ||||
|              "arch64priv", "arch64c",  "arch64m", "arch64a", "arch64zifencei", "arch64zicond", "wally64a", "wally64periph", "wally64priv"] # add arch64zfh_fma when available; arch64zicobz, arch64zcb when working | ||||
| #tests64gc = ["arch64f", "arch64d", "arch64f_fma", "arch64d_fma", "arch64i", "arch64zba", "arch64zbb", "arch64zbc", "arch64zbs",  | ||||
| #             "arch64priv", "arch64c",  "arch64m", "arch64a", "arch64zifencei", "wally64a", "wally64periph", "wally64priv", "arch64zicboz", "arch64zcb"]  | ||||
| @ -141,7 +141,8 @@ if (coverage):  # delete all but 64gc tests when running coverage | ||||
|        tests64gc.append("arch64d") | ||||
|        tests64gc.append("arch64zfh") | ||||
|        tests64gc.append("arch64f_fma") | ||||
|        tests64gc.append("arch64d_fma") # *** add arch64zfh_fma when available(see riscv-arch-test pr 367) | ||||
|        tests64gc.append("arch64d_fma")  | ||||
|        tests64gc.append("arch64zfh_fma") | ||||
|        tests64gc.append("arch64f_divsqrt") | ||||
|        tests64gc.append("arch64d_divsqrt") | ||||
|        tests64gc.append("arch64zfh_divsqrt") | ||||
|  | ||||
| @ -130,7 +130,7 @@ module testbench; | ||||
|         "arch64zicboz":  if (P.ZICBOZ_SUPPORTED)  tests = arch64zicboz; | ||||
|         "arch64zcb":     if (P.ZCB_SUPPORTED)     tests = arch64zcb; | ||||
|         "arch64zfh":     if (P.ZFH_SUPPORTED)     tests = arch64zfh; | ||||
| //        "arch64zfh_fma": if (P.ZFH_SUPPORTED)     tests = arch64zfh_fma; *** not yet in riscv-arch-tst PR367
 | ||||
|         "arch64zfh_fma": if (P.ZFH_SUPPORTED)     tests = arch64zfh_fma;  | ||||
|         "arch64zfh_divsqrt":     if (P.ZFH_SUPPORTED)     tests = arch64zfh_divsqrt; | ||||
|         "arch64zfaf":    if (P.ZFA_SUPPORTED)     tests = arch64zfaf; | ||||
|         "arch64zfad":    if (P.ZFA_SUPPORTED & P.D_SUPPORTED)  tests = arch64zfad; | ||||
| @ -172,7 +172,7 @@ module testbench; | ||||
|         "arch32zicboz":  if (P.ZICBOZ_SUPPORTED)  tests = arch32zicboz; | ||||
|         "arch32zcb":     if (P.ZCB_SUPPORTED)     tests = arch32zcb; | ||||
|         "arch32zfh":     if (P.ZFH_SUPPORTED)     tests = arch32zfh; | ||||
|  //       "arch32zfh_fma": if (P.ZFH_SUPPORTED)     tests = arch32zfh_fma; *** not yet in riscv-arch-tst PR367
 | ||||
|         "arch32zfh_fma": if (P.ZFH_SUPPORTED)     tests = arch32zfh_fma;  | ||||
|         "arch32zfh_divsqrt":     if (P.ZFH_SUPPORTED)     tests = arch32zfh_divsqrt; | ||||
|         "arch32zfaf":    if (P.ZFA_SUPPORTED)     tests = arch32zfaf; | ||||
|         "arch32zfad":    if (P.ZFA_SUPPORTED & P.D_SUPPORTED)  tests = arch32zfad; | ||||
|  | ||||
| @ -1126,6 +1126,14 @@ string imperas32f[] = '{ | ||||
|     // "rv64i_m/F/src/fnmsub_b15-01.S" | ||||
|   }; | ||||
| 
 | ||||
|     string arch64zfh_fma[] = '{ | ||||
|     `RISCVARCHTEST, | ||||
|     //"rv64i_m/F/src/fmadd_b15-01.S", | ||||
|     "rv64i_m/Zfh/src/fmsub_b15-01.S" | ||||
|     // "rv64i_m/F/src/fnmadd_b15-01.S", | ||||
|     // "rv64i_m/F/src/fnmsub_b15-01.S" | ||||
|   }; | ||||
| 
 | ||||
|   string arch64f_divsqrt[] = '{ | ||||
|     `RISCVARCHTEST, | ||||
|     "rv64i_m/F/src/fdiv_b20-01.S", | ||||
| @ -1393,7 +1401,55 @@ string imperas32f[] = '{ | ||||
|     "rv64i_m/Zfh/src/fsub_b5-01.S", | ||||
|     "rv64i_m/Zfh/src/fsub_b7-01.S", | ||||
|     "rv64i_m/Zfh/src/fsub_b8-01.S", | ||||
|     "rv64i_m/Zfh/src/fsh-align-01.S" | ||||
|     "rv64i_m/Zfh/src/fsh-align-01.S", | ||||
|     "rv64i_m/Zfh/src/fmadd_b1-01.S", | ||||
|     "rv64i_m/Zfh/src/fmadd_b14-01.S", | ||||
|     "rv64i_m/Zfh/src/fmadd_b16-01.S", | ||||
|     "rv64i_m/Zfh/src/fmadd_b17-01.S", | ||||
|     "rv64i_m/Zfh/src/fmadd_b18-01.S", | ||||
|     "rv64i_m/Zfh/src/fmadd_b2-01.S", | ||||
|     "rv64i_m/Zfh/src/fmadd_b3-01.S", | ||||
|     "rv64i_m/Zfh/src/fmadd_b4-01.S", | ||||
|     "rv64i_m/Zfh/src/fmadd_b5-01.S", | ||||
|     "rv64i_m/Zfh/src/fmadd_b6-01.S", | ||||
|     "rv64i_m/Zfh/src/fmadd_b7-01.S", | ||||
|     "rv64i_m/Zfh/src/fmadd_b8-01.S", | ||||
|     "rv64i_m/Zfh/src/fmsub_b1-01.S", | ||||
|     "rv64i_m/Zfh/src/fmsub_b14-01.S", | ||||
|     "rv64i_m/Zfh/src/fmsub_b16-01.S", | ||||
|     "rv64i_m/Zfh/src/fmsub_b17-01.S", | ||||
|     "rv64i_m/Zfh/src/fmsub_b18-01.S", | ||||
|     "rv64i_m/Zfh/src/fmsub_b2-01.S", | ||||
|     "rv64i_m/Zfh/src/fmsub_b3-01.S", | ||||
|     "rv64i_m/Zfh/src/fmsub_b4-01.S", | ||||
|     "rv64i_m/Zfh/src/fmsub_b5-01.S", | ||||
|     "rv64i_m/Zfh/src/fmsub_b6-01.S", | ||||
|     "rv64i_m/Zfh/src/fmsub_b7-01.S", | ||||
|     "rv64i_m/Zfh/src/fmsub_b8-01.S", | ||||
|     "rv64i_m/Zfh/src/fnmadd_b1-01.S", | ||||
|     "rv64i_m/Zfh/src/fnmadd_b14-01.S", | ||||
|     "rv64i_m/Zfh/src/fnmadd_b16-01.S", | ||||
|     "rv64i_m/Zfh/src/fnmadd_b17-01.S", | ||||
|     "rv64i_m/Zfh/src/fnmadd_b18-01.S", | ||||
|     "rv64i_m/Zfh/src/fnmadd_b2-01.S", | ||||
|     "rv64i_m/Zfh/src/fnmadd_b3-01.S", | ||||
|     "rv64i_m/Zfh/src/fnmadd_b4-01.S", | ||||
|     "rv64i_m/Zfh/src/fnmadd_b5-01.S", | ||||
|     "rv64i_m/Zfh/src/fnmadd_b6-01.S", | ||||
|     "rv64i_m/Zfh/src/fnmadd_b7-01.S", | ||||
|     "rv64i_m/Zfh/src/fnmadd_b8-01.S", | ||||
|     "rv64i_m/Zfh/src/fnmsub_b1-01.S", | ||||
|     "rv64i_m/Zfh/src/fnmsub_b14-01.S", | ||||
|     "rv64i_m/Zfh/src/fnmsub_b16-01.S", | ||||
|     "rv64i_m/Zfh/src/fnmsub_b17-01.S", | ||||
|     "rv64i_m/Zfh/src/fnmsub_b18-01.S", | ||||
|     "rv64i_m/Zfh/src/fnmsub_b2-01.S", | ||||
|     "rv64i_m/Zfh/src/fnmsub_b3-01.S", | ||||
|     "rv64i_m/Zfh/src/fnmsub_b4-01.S", | ||||
|     "rv64i_m/Zfh/src/fnmsub_b5-01.S", | ||||
|     "rv64i_m/Zfh/src/fnmsub_b6-01.S", | ||||
|     "rv64i_m/Zfh/src/fnmsub_b7-01.S", | ||||
|     "rv64i_m/Zfh/src/fnmsub_b8-01.S" | ||||
|     }; | ||||
| 
 | ||||
| 
 | ||||
| @ -1975,7 +2031,55 @@ string arch64zbs[] = '{ | ||||
|     "rv32i_m/Zfh/src/fsub_b5-01.S", | ||||
|     "rv32i_m/Zfh/src/fsub_b7-01.S", | ||||
|     "rv32i_m/Zfh/src/fsub_b8-01.S", | ||||
|     "rv32i_m/Zfh/src/fsh-align-01.S" | ||||
|     "rv32i_m/Zfh/src/fsh-align-01.S", | ||||
|     "rv32i_m/Zfh/src/fmadd_b1-01.S", | ||||
|     "rv32i_m/Zfh/src/fmadd_b14-01.S", | ||||
|     "rv32i_m/Zfh/src/fmadd_b16-01.S", | ||||
|     "rv32i_m/Zfh/src/fmadd_b17-01.S", | ||||
|     "rv32i_m/Zfh/src/fmadd_b18-01.S", | ||||
|     "rv32i_m/Zfh/src/fmadd_b2-01.S", | ||||
|     "rv32i_m/Zfh/src/fmadd_b3-01.S", | ||||
|     "rv32i_m/Zfh/src/fmadd_b4-01.S", | ||||
|     "rv32i_m/Zfh/src/fmadd_b5-01.S", | ||||
|     "rv32i_m/Zfh/src/fmadd_b6-01.S", | ||||
|     "rv32i_m/Zfh/src/fmadd_b7-01.S", | ||||
|     "rv32i_m/Zfh/src/fmadd_b8-01.S", | ||||
|     "rv32i_m/Zfh/src/fmsub_b1-01.S", | ||||
|     "rv32i_m/Zfh/src/fmsub_b14-01.S", | ||||
|     "rv32i_m/Zfh/src/fmsub_b16-01.S", | ||||
|     "rv32i_m/Zfh/src/fmsub_b17-01.S", | ||||
|     "rv32i_m/Zfh/src/fmsub_b18-01.S", | ||||
|     "rv32i_m/Zfh/src/fmsub_b2-01.S", | ||||
|     "rv32i_m/Zfh/src/fmsub_b3-01.S", | ||||
|     "rv32i_m/Zfh/src/fmsub_b4-01.S", | ||||
|     "rv32i_m/Zfh/src/fmsub_b5-01.S", | ||||
|     "rv32i_m/Zfh/src/fmsub_b6-01.S", | ||||
|     "rv32i_m/Zfh/src/fmsub_b7-01.S", | ||||
|     "rv32i_m/Zfh/src/fmsub_b8-01.S", | ||||
|     "rv32i_m/Zfh/src/fnmadd_b1-01.S", | ||||
|     "rv32i_m/Zfh/src/fnmadd_b14-01.S", | ||||
|     "rv32i_m/Zfh/src/fnmadd_b16-01.S", | ||||
|     "rv32i_m/Zfh/src/fnmadd_b17-01.S", | ||||
|     "rv32i_m/Zfh/src/fnmadd_b18-01.S", | ||||
|     "rv32i_m/Zfh/src/fnmadd_b2-01.S", | ||||
|     "rv32i_m/Zfh/src/fnmadd_b3-01.S", | ||||
|     "rv32i_m/Zfh/src/fnmadd_b4-01.S", | ||||
|     "rv32i_m/Zfh/src/fnmadd_b5-01.S", | ||||
|     "rv32i_m/Zfh/src/fnmadd_b6-01.S", | ||||
|     "rv32i_m/Zfh/src/fnmadd_b7-01.S", | ||||
|     "rv32i_m/Zfh/src/fnmadd_b8-01.S", | ||||
|     "rv32i_m/Zfh/src/fnmsub_b1-01.S", | ||||
|     "rv32i_m/Zfh/src/fnmsub_b14-01.S", | ||||
|     "rv32i_m/Zfh/src/fnmsub_b16-01.S", | ||||
|     "rv32i_m/Zfh/src/fnmsub_b17-01.S", | ||||
|     "rv32i_m/Zfh/src/fnmsub_b18-01.S", | ||||
|     "rv32i_m/Zfh/src/fnmsub_b2-01.S", | ||||
|     "rv32i_m/Zfh/src/fnmsub_b3-01.S", | ||||
|     "rv32i_m/Zfh/src/fnmsub_b4-01.S", | ||||
|     "rv32i_m/Zfh/src/fnmsub_b5-01.S", | ||||
|     "rv32i_m/Zfh/src/fnmsub_b6-01.S", | ||||
|     "rv32i_m/Zfh/src/fnmsub_b7-01.S", | ||||
|     "rv32i_m/Zfh/src/fnmsub_b8-01.S" | ||||
|     }; | ||||
| 
 | ||||
|   string arch32zfaf[] = '{ | ||||
| @ -2066,6 +2170,14 @@ string arch64zbs[] = '{ | ||||
|     "rv32i_m/D/src/fnmsub.d_b15-01.S" | ||||
|   }; | ||||
| 
 | ||||
| string arch32zfh_fma[] = '{ | ||||
|     `RISCVARCHTEST, | ||||
|     //"rv32i_m/D/src/fmadd.d_b15-01.S", | ||||
|     //"rv32i_m/D/src/fmsub.d_b15-01.S", | ||||
|     // "rv32i_m/D/src/fnmadd.d_b15-01.S", | ||||
|     "rv32i_m/Zfh/src/fnmsub.d_b15-01.S" | ||||
|   }; | ||||
| 
 | ||||
|   string arch32d_divsqrt[] = '{ | ||||
|     `RISCVARCHTEST, | ||||
|     "rv32i_m/D/src/fdiv.d_b1-01.S", | ||||
|  | ||||
| @ -37,6 +37,16 @@ main: | ||||
|     flw ft0, 0(t0) | ||||
|     fclass.s t1, ft0 | ||||
| 
 | ||||
|     # zfa instructions (because Zfa tests aren't running yet) | ||||
|     fli.d fs0, 16 | ||||
|     fcvtmod.w.d t0, fs0, rtz | ||||
|     fminm.d fs1, fs0, fs0 | ||||
|     fmaxm.d fs1, fs0, fs0 | ||||
|     fround.d fs1, fs0 | ||||
|     froundnx.d fs1, fs0 | ||||
|     fltq.d t0, fs1, ft0 | ||||
|     fleq.d t0, fs1, ft0 | ||||
| 
 | ||||
|     #Result Sign Test Coverage | ||||
|     la t0, TestData2 | ||||
|     flw ft0, 0(t0) | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user