Updated compressed instructions for RV32D
This commit is contained in:
		| @@ -218,9 +218,9 @@ InsructionSet RV32FC extends RV32IC{ | ||||
| 			val res[32] <= MEM[offs]{32}; | ||||
| 			if(FLEN==32) | ||||
| 				F[rd_idx] <= res; | ||||
| 			else { | ||||
| 				val upper[FLEN] <= (-1<<31); | ||||
| 				F[rd_idx] <= upper*2 | res; | ||||
| 			else { // NaN boxing | ||||
| 				val upper[FLEN] <= -1; | ||||
| 				F[rd] <= (upper<<32) | zext(res, FLEN); | ||||
| 			} | ||||
| 		}  | ||||
| 		C.FSW { | ||||
| @@ -239,9 +239,9 @@ InsructionSet RV32FC extends RV32IC{ | ||||
| 			val res[32] <= MEM[offs]{32}; | ||||
| 			if(FLEN==32) | ||||
| 				F[rd] <= res; | ||||
| 			else { | ||||
| 				val upper[FLEN] <= (-1<<31); | ||||
| 				F[rd] <= upper*2 | res; | ||||
| 			else { // NaN boxing | ||||
| 				val upper[FLEN] <= -1; | ||||
| 				F[rd] <= (upper<<32) | zext(res, FLEN); | ||||
| 			} | ||||
| 		} | ||||
| 		C.FSWSP { | ||||
| @@ -249,7 +249,7 @@ InsructionSet RV32FC extends RV32IC{ | ||||
| 			args_disass:"f%rs2$d, %uimm%(x2), "; | ||||
| 			val x2_idx[5] <= 2; | ||||
| 			val offs[XLEN] <= X[x2_idx]+uimm; | ||||
| 			MEM[offs]{32}<=F[rs2]; | ||||
| 			MEM[offs]{32}<=F[rs2]{32}; | ||||
| 		}		 | ||||
| 	} | ||||
| } | ||||
| @@ -268,15 +268,45 @@ InsructionSet RV32DC extends RV32IC{ | ||||
| 	instructions{ | ||||
| 		C.FLD { //(RV32/64) | ||||
| 			encoding: b001 | uimm[5:3] | rs1[2:0] | uimm[7:6] | rd[2:0] | b00; | ||||
| 			args_disass:"f(8+%rd$d), %uimm%(x(8+%rs1$d))"; | ||||
| 			val rs1_idx[5] <= rs1+8; | ||||
| 			val rd_idx[5] <= rd+8; | ||||
| 			val offs[XLEN] <= X[rs1_idx]+uimm; | ||||
| 			val res[64] <= MEM[offs]{64}; | ||||
| 			if(FLEN==64) | ||||
| 				F[rd_idx] <= res; | ||||
| 			else { // NaN boxing | ||||
| 				val upper[FLEN] <= -1; | ||||
| 				F[rd_idx] <= (upper<<64) | res; | ||||
| 			} | ||||
| 	 	} | ||||
| 		C.FSD { //(RV32/64) | ||||
| 			encoding: b101 | uimm[5:3] | rs1[2:0] | uimm[7:6] | rs2[2:0] | b00; | ||||
| 			args_disass:"f(8+%rs2$d), %uimm%(x(8+%rs1$d))"; | ||||
| 			val rs1_idx[5] <= rs1+8; | ||||
| 			val rs2_idx[5] <= rs2+8; | ||||
| 			val offs[XLEN] <= X[rs1_idx]+uimm; | ||||
| 			MEM[offs]{64}<=F[rs2_idx]{64}; | ||||
| 		}  | ||||
| 		C.FLDSP {//(RV32/64) | ||||
| 			encoding:b001 | uimm[5:5] | rd[4:0] | uimm[4:3] | uimm[8:6] | b10; | ||||
| 			args_disass:"f%rd$d, %uimm%(x2)"; | ||||
| 			val x2_idx[5] <= 2; | ||||
| 			val offs[XLEN] <= X[x2_idx]+uimm; | ||||
| 			val res[64] <= MEM[offs]{64}; | ||||
| 			if(FLEN==64) | ||||
| 				F[rd] <= res; | ||||
| 			else { // NaN boxing | ||||
| 				val upper[FLEN] <= -1; | ||||
| 				F[rd] <= (upper<<64) | zext(res, FLEN); | ||||
| 			} | ||||
| 		} | ||||
| 		C.FSDSP {//(RV32/64) | ||||
| 			encoding:b101 | uimm[5:3] | uimm[8:6] | rs2[4:0] | b10; | ||||
| 			args_disass:"f%rs2$d, %uimm%(x2), "; | ||||
| 			val x2_idx[5] <= 2; | ||||
| 			val offs[XLEN] <= X[x2_idx]+uimm; | ||||
| 			MEM[offs]{64}<=F[rs2]{64}; | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user