1 |
/* |
/* |
2 |
* Copyright (C) 2005 Anders Gavare. All rights reserved. |
* Copyright (C) 2005-2006 Anders Gavare. All rights reserved. |
3 |
* |
* |
4 |
* Redistribution and use in source and binary forms, with or without |
* Redistribution and use in source and binary forms, with or without |
5 |
* modification, are permitted provided that the following conditions are met: |
* modification, are permitted provided that the following conditions are met: |
25 |
* SUCH DAMAGE. |
* SUCH DAMAGE. |
26 |
* |
* |
27 |
* |
* |
28 |
* $Id: cpu_alpha.c,v 1.3 2005/11/13 00:14:07 debug Exp $ |
* $Id: cpu_alpha.c,v 1.5 2006/01/01 16:08:25 debug Exp $ |
29 |
* |
* |
30 |
* Alpha CPU emulation. |
* Alpha CPU emulation. |
31 |
* |
* |
487 |
break; |
break; |
488 |
case 0x16: |
case 0x16: |
489 |
switch (func & 0x7ff) { |
switch (func & 0x7ff) { |
490 |
|
case 0x02f: mnem = "cvttq/c"; rbrc = 1; break; |
491 |
case 0x080: mnem = "adds"; break; |
case 0x080: mnem = "adds"; break; |
492 |
case 0x081: mnem = "subs"; break; |
case 0x081: mnem = "subs"; break; |
493 |
case 0x082: mnem = "muls"; break; |
case 0x082: mnem = "muls"; break; |
494 |
case 0x083: mnem = "mult"; break; |
case 0x083: mnem = "XXXx083"; break; |
495 |
case 0x0a0: mnem = "addt"; break; |
case 0x0a0: mnem = "addt"; break; |
496 |
case 0x0a1: mnem = "subt"; break; |
case 0x0a1: mnem = "subt"; break; |
497 |
case 0x0a2: mnem = "mult"; break; |
case 0x0a2: mnem = "mult"; break; |
498 |
case 0x0a3: mnem = "divt"; break; |
case 0x0a3: mnem = "divt"; break; |
499 |
|
case 0x0a5: mnem = "cmpteq"; break; |
500 |
|
case 0x0a6: mnem = "cmptlt"; break; |
501 |
|
case 0x0a7: mnem = "cmptle"; break; |
502 |
case 0x0be: mnem = "cvtqt"; rbrc = 1; break; |
case 0x0be: mnem = "cvtqt"; rbrc = 1; break; |
503 |
default:debug("UNIMPLEMENTED opcode 0x%x func 0x%x\n", |
default:debug("UNIMPLEMENTED opcode 0x%x func 0x%x\n", |
504 |
opcode, func); |
opcode, func); |
513 |
case 0x17: |
case 0x17: |
514 |
switch (func & 0x7ff) { |
switch (func & 0x7ff) { |
515 |
case 0x020: mnem = "fabs"; rbrc = 1; break; |
case 0x020: mnem = "fabs"; rbrc = 1; break; |
516 |
|
case 0x021: mnem = "fneg"; rbrc = 1; break; |
517 |
default:debug("UNIMPLEMENTED opcode 0x%x func 0x%x\n", |
default:debug("UNIMPLEMENTED opcode 0x%x func 0x%x\n", |
518 |
opcode, func); |
opcode, func); |
519 |
} |
} |
597 |
debug("\t<%s>", symbol); |
debug("\t<%s>", symbol); |
598 |
debug("\n"); |
debug("\n"); |
599 |
break; |
break; |
600 |
|
case 0x31: |
601 |
|
case 0x35: |
602 |
case 0x38: |
case 0x38: |
603 |
case 0x39: |
case 0x39: |
604 |
case 0x3a: |
case 0x3a: |
607 |
case 0x3d: |
case 0x3d: |
608 |
case 0x3e: |
case 0x3e: |
609 |
case 0x3f: |
case 0x3f: |
610 |
|
floating = 0; |
611 |
switch (opcode) { |
switch (opcode) { |
612 |
|
case 0x31: mnem = "fbeq"; floating = 1; break; |
613 |
|
case 0x35: mnem = "fbne"; floating = 1; break; |
614 |
case 0x38: mnem = "blbc"; break; |
case 0x38: mnem = "blbc"; break; |
615 |
case 0x39: mnem = "beq"; break; |
case 0x39: mnem = "beq"; break; |
616 |
case 0x3a: mnem = "blt"; break; |
case 0x3a: mnem = "blt"; break; |
625 |
tmp |= 0xffffffffffe00000ULL; |
tmp |= 0xffffffffffe00000ULL; |
626 |
tmp <<= 2; |
tmp <<= 2; |
627 |
tmp += dumpaddr + sizeof(uint32_t); |
tmp += dumpaddr + sizeof(uint32_t); |
628 |
debug("%s\t%s,", mnem, alpha_regname[ra]); |
debug("%s\t", mnem); |
629 |
|
if (floating) |
630 |
|
debug("f%i,", ra); |
631 |
|
else |
632 |
|
debug("%s,", alpha_regname[ra]); |
633 |
debug("0x%llx", (long long)tmp); |
debug("0x%llx", (long long)tmp); |
634 |
symbol = get_symbol_name(&cpu->machine->symbol_context, |
symbol = get_symbol_name(&cpu->machine->symbol_context, |
635 |
tmp, &offset); |
tmp, &offset); |