Mercurial > repos > blastem
comparison gentests.py @ 2582:6c475ddefd6f
Add support for ccr/sr update instructions to 68K test generator
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Sat, 08 Feb 2025 13:34:07 -0800 |
parents | db32408394c3 |
children | 01cd8aa40573 |
comparison
equal
deleted
inserted
replaced
2581:9e10149c9e10 | 2582:6c475ddefd6f |
---|---|
91 if self.kind == 'd' or self.kind == 'a': | 91 if self.kind == 'd' or self.kind == 'a': |
92 return self.kind + str(self.num) | 92 return self.kind + str(self.num) |
93 return self.kind | 93 return self.kind |
94 | 94 |
95 def write_init(self, outfile, size, already): | 95 def write_init(self, outfile, size, already): |
96 if not str(self) in already: | 96 if not str(self) in already and not self.kind in ('ccr', 'sr'): |
97 minv,maxv = get_size_range(size) | 97 minv,maxv = get_size_range(size) |
98 val = randint(minv,maxv) | 98 val = randint(minv,maxv) |
99 already[str(self)] = val | 99 already[str(self)] = val |
100 outfile.write('\tmove.'+size+' #'+str(val)+', ' + str(self) + '\n') | 100 outfile.write('\tmove.'+size+' #'+str(val)+', ' + str(self) + '\n') |
101 | 101 |
426 start,end = int(start),int(end) | 426 start,end = int(start),int(end) |
427 if end-start > 16: | 427 if end-start > 16: |
428 return [Immediate(randint(start, end)) for x in range(0,8)] | 428 return [Immediate(randint(start, end)) for x in range(0,8)] |
429 else: | 429 else: |
430 return [Immediate(num) for num in range(start, end+1)] | 430 return [Immediate(num) for num in range(start, end+1)] |
431 elif mode in ('ccr', 'sr'): | |
432 return [Register(mode, 0)] | |
431 else: | 433 else: |
432 print("Don't know what to do with source type", mode) | 434 print("Don't know what to do with source type", mode) |
433 return None | 435 return None |
434 | 436 |
435 class Inst2Op(object): | 437 class Inst2Op(object): |
445 def write_init(self, outfile, already): | 447 def write_init(self, outfile, already): |
446 self.src.write_init(outfile, self.size, already) | 448 self.src.write_init(outfile, self.size, already) |
447 self.dst.write_init(outfile, self.size, already) | 449 self.dst.write_init(outfile, self.size, already) |
448 | 450 |
449 def invalidate_dest(self, already): | 451 def invalidate_dest(self, already): |
450 if type(self.dst) == Register: | 452 if type(self.dst) == Register and not self.dst.kind in ('ccr', 'sr'): |
451 del already[str(self.dst)] | 453 del already[str(self.dst)] |
452 | 454 |
453 def save_result(self, reg, always): | 455 def save_result(self, reg, always): |
454 if always or type(self.dst) != Register: | 456 if always or type(self.dst) != Register: |
455 if type(self.dst) == Decrement: | 457 if type(self.dst) == Decrement: |
456 src = Increment(self.dst.reg) | 458 src = Increment(self.dst.reg) |
457 elif type(self.dst) == Increment: | 459 elif type(self.dst) == Increment: |
458 src = Decrement(self.dst.reg) | 460 src = Decrement(self.dst.reg) |
459 else: | 461 else: |
460 src = self.dst | 462 src = self.dst |
461 return 'move.' + self.size + ' ' + str(src) + ', ' + str(reg) | 463 if type(src) is Register and src.kind == 'ccr': |
464 return 'move sr, ' + str(reg) | |
465 else: | |
466 return 'move.' + self.size + ' ' + str(src) + ', ' + str(reg) | |
462 else: | 467 else: |
463 return '' | 468 return '' |
464 | 469 |
465 def consume_regs(self, program): | 470 def consume_regs(self, program): |
466 self.src.consume_regs(program) | 471 self.src.consume_regs(program) |