@@ -29,6 +29,11 @@ class Instruction(metaclass=ABCMeta):
2929 _funct7 = None
3030 _funct12 = None
3131
32+ def ops_from_string (self , ops : str ):
33+ """
34+ Extract operands from string
35+ """
36+
3237 def randomize (self , variant : Variant ):
3338 """
3439 Randomize this instruction
@@ -112,6 +117,9 @@ def __init__(self, rd: int = None, rs1: int = None, rs2: int = None):
112117 self .rs1 = rs1
113118 self .rs2 = rs2
114119
120+ def ops_from_string (self , ops ):
121+ (self .rd , self .rs1 , self .rs2 ) = [int (op [1 :]) for op in ops .split ("," )]
122+
115123 def randomize (self , variant : Variant ):
116124 self .rd = randrange (0 , variant .xlen )
117125 self .rs1 = randrange (0 , variant .xlen )
@@ -172,6 +180,13 @@ def __init__(self, rd: int = None, rs1: int = None, imm: int = None):
172180 if imm is not None :
173181 self .imm .set (imm )
174182
183+ def ops_from_string (self , ops ):
184+ ops = [op for op in ops .split ("," )]
185+ self .rd = int (ops [0 ][1 :])
186+ self .rs1 = int (ops [1 ][1 :])
187+ self .imm .set (int (ops [2 ]))
188+
189+
175190 def randomize (self , variant : Variant ):
176191 self .rd = randrange (0 , variant .xlen )
177192 self .rs1 = randrange (0 , variant .xlen )
@@ -240,6 +255,12 @@ def __init__(self, rd: int = None, rs1: int = None, shamt: int = None):
240255 self .rs1 = rs1
241256 self .shamt = Immediate (bits = 5 )
242257
258+ def ops_from_string (self , ops ):
259+ ops = [op for op in ops .split ("," )]
260+ self .rd = int (ops [0 ][1 :])
261+ self .rs1 = int (ops [1 ][1 :])
262+ self .shamt .set (int (ops [2 ]))
263+
243264 def decode (self , machinecode : int ):
244265 self .rd = (machinecode >> 7 ) & 0x1F
245266 self .rs1 = (machinecode >> 15 ) & 0x1F
@@ -290,6 +311,12 @@ def __init__(self, rs1: int = None, rs2: int = None, imm: int = None):
290311 if imm is not None :
291312 self .imm .set (imm )
292313
314+ def ops_from_string (self , ops ):
315+ ops = [op for op in ops .split ("," )]
316+ self .rs1 = int (ops [0 ][1 :])
317+ self .rs2 = int (ops [1 ][ops [1 ].find ("(" )+ 2 :- 1 ])
318+ self .imm .set (int (ops [1 ][0 :ops [1 ].find ("(" )]))
319+
293320 def randomize (self , variant : Variant ):
294321 self .rs1 = randrange (0 , variant .xlen )
295322 self .rs2 = randrange (0 , variant .xlen )
@@ -348,6 +375,12 @@ def __init__(self, rs1: int = None, rs2: int = None, imm: int = None):
348375 if imm is not None :
349376 self .imm .set (imm )
350377
378+ def ops_from_string (self , ops ):
379+ ops = [op for op in ops .split ("," )]
380+ self .rs1 = int (ops [0 ][1 :])
381+ self .rs2 = int (ops [1 ][1 :])
382+ self .imm .set (int (ops [2 ]))
383+
351384 def randomize (self , variant : Variant ):
352385 self .rs1 = randrange (0 , variant .xlen )
353386 self .rs2 = randrange (0 , variant .xlen )
@@ -406,6 +439,11 @@ def __init__(self, rd: int = None, imm: int = None):
406439 if imm is not None :
407440 self .imm .set (imm )
408441
442+ def ops_from_string (self , ops ):
443+ ops = [op for op in ops .split ("," )]
444+ self .rs1 = int (ops [0 ][1 :])
445+ self .imm .set (int (ops [1 ]))
446+
409447 def randomize (self , variant : Variant ):
410448 self .rd = randrange (0 , variant .xlen )
411449 self .imm .randomize ()
0 commit comments