summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar bunnei2015-08-11 17:55:24 -0400
committerGravatar bunnei2015-08-11 17:55:24 -0400
commit35f336066354bd667524d99439a5e792ae7e7366 (patch)
treef1cb819c0574cc3a6cbbdbaf8d71f90ea222c60a
parentMerge pull request #1023 from yuriks/gl-state-bugs (diff)
parentARM Core, Video Core, CitraQt, Citrace: Use CommonTypes types instead of the ... (diff)
downloadyuzu-35f336066354bd667524d99439a5e792ae7e7366.tar.gz
yuzu-35f336066354bd667524d99439a5e792ae7e7366.tar.xz
yuzu-35f336066354bd667524d99439a5e792ae7e7366.zip
Merge pull request #893 from linkmauve/remove-uint._t-int._t
Replace standard uint*_t and int*_t with CommonTypes’ u* and s* types
Diffstat (limited to '')
-rw-r--r--src/citra_qt/debugger/callstack.cpp8
-rw-r--r--src/citra_qt/debugger/graphics_tracing.cpp6
-rw-r--r--src/core/arm/disassembler/arm_disasm.cpp472
-rw-r--r--src/core/arm/disassembler/arm_disasm.h85
-rw-r--r--src/core/arm/dyncom/arm_dyncom_interpreter.cpp41
-rw-r--r--src/core/arm/skyeye_common/vfp/vfp.cpp17
-rw-r--r--src/core/tracer/citrace.h70
-rw-r--r--src/video_core/debug_utils/debug_utils.cpp3
8 files changed, 356 insertions, 346 deletions
diff --git a/src/citra_qt/debugger/callstack.cpp b/src/citra_qt/debugger/callstack.cpp
index 6799ce844..e97e81b65 100644
--- a/src/citra_qt/debugger/callstack.cpp
+++ b/src/citra_qt/debugger/callstack.cpp
@@ -4,12 +4,14 @@
4 4
5#include <QStandardItemModel> 5#include <QStandardItemModel>
6 6
7#include "common/common_types.h"
8#include "common/symbols.h"
9
7#include "callstack.h" 10#include "callstack.h"
8 11
9#include "core/core.h" 12#include "core/core.h"
10#include "core/arm/arm_interface.h" 13#include "core/arm/arm_interface.h"
11#include "core/memory.h" 14#include "core/memory.h"
12#include "common/symbols.h"
13#include "core/arm/disassembler/arm_disasm.h" 15#include "core/arm/disassembler/arm_disasm.h"
14 16
15CallstackWidget::CallstackWidget(QWidget* parent): QDockWidget(parent) 17CallstackWidget::CallstackWidget(QWidget* parent): QDockWidget(parent)
@@ -49,8 +51,8 @@ void CallstackWidget::OnDebugModeEntered()
49 { 51 {
50 std::string name; 52 std::string name;
51 // ripped from disasm 53 // ripped from disasm
52 uint8_t cond = (insn >> 28) & 0xf; 54 u8 cond = (insn >> 28) & 0xf;
53 uint32_t i_offset = insn & 0xffffff; 55 u32 i_offset = insn & 0xffffff;
54 // Sign-extend the 24-bit offset 56 // Sign-extend the 24-bit offset
55 if ((i_offset >> 23) & 1) 57 if ((i_offset >> 23) & 1)
56 i_offset |= 0xff000000; 58 i_offset |= 0xff000000;
diff --git a/src/citra_qt/debugger/graphics_tracing.cpp b/src/citra_qt/debugger/graphics_tracing.cpp
index 3f20f149d..f80cb7493 100644
--- a/src/citra_qt/debugger/graphics_tracing.cpp
+++ b/src/citra_qt/debugger/graphics_tracing.cpp
@@ -14,6 +14,8 @@
14 14
15#include <boost/range/algorithm/copy.hpp> 15#include <boost/range/algorithm/copy.hpp>
16 16
17#include "common/common_types.h"
18
17#include "core/hw/gpu.h" 19#include "core/hw/gpu.h"
18#include "core/hw/lcd.h" 20#include "core/hw/lcd.h"
19 21
@@ -66,14 +68,14 @@ void GraphicsTracingWidget::StartRecording() {
66 68
67 // Encode floating point numbers to 24-bit values 69 // Encode floating point numbers to 24-bit values
68 // TODO: Drop this explicit conversion once we store float24 values bit-correctly internally. 70 // TODO: Drop this explicit conversion once we store float24 values bit-correctly internally.
69 std::array<uint32_t, 4 * 16> default_attributes; 71 std::array<u32, 4 * 16> default_attributes;
70 for (unsigned i = 0; i < 16; ++i) { 72 for (unsigned i = 0; i < 16; ++i) {
71 for (unsigned comp = 0; comp < 3; ++comp) { 73 for (unsigned comp = 0; comp < 3; ++comp) {
72 default_attributes[4 * i + comp] = nihstro::to_float24(Pica::g_state.vs.default_attributes[i][comp].ToFloat32()); 74 default_attributes[4 * i + comp] = nihstro::to_float24(Pica::g_state.vs.default_attributes[i][comp].ToFloat32());
73 } 75 }
74 } 76 }
75 77
76 std::array<uint32_t, 4 * 96> vs_float_uniforms; 78 std::array<u32, 4 * 96> vs_float_uniforms;
77 for (unsigned i = 0; i < 96; ++i) 79 for (unsigned i = 0; i < 96; ++i)
78 for (unsigned comp = 0; comp < 3; ++comp) 80 for (unsigned comp = 0; comp < 3; ++comp)
79 vs_float_uniforms[4 * i + comp] = nihstro::to_float24(Pica::g_state.vs.uniforms.f[i][comp].ToFloat32()); 81 vs_float_uniforms[4 * i + comp] = nihstro::to_float24(Pica::g_state.vs.uniforms.f[i][comp].ToFloat32());
diff --git a/src/core/arm/disassembler/arm_disasm.cpp b/src/core/arm/disassembler/arm_disasm.cpp
index 1d40ae030..77af10b54 100644
--- a/src/core/arm/disassembler/arm_disasm.cpp
+++ b/src/core/arm/disassembler/arm_disasm.cpp
@@ -3,7 +3,9 @@
3#include <string> 3#include <string>
4#include <unordered_set> 4#include <unordered_set>
5 5
6#include "common/common_types.h"
6#include "common/string_util.h" 7#include "common/string_util.h"
8
7#include "core/arm/disassembler/arm_disasm.h" 9#include "core/arm/disassembler/arm_disasm.h"
8#include "core/arm/skyeye_common/armsupp.h" 10#include "core/arm/skyeye_common/armsupp.h"
9 11
@@ -215,11 +217,11 @@ static const char *shift_names[] = {
215 "ROR" 217 "ROR"
216}; 218};
217 219
218static const char* cond_to_str(uint32_t cond) { 220static const char* cond_to_str(u32 cond) {
219 return cond_names[cond]; 221 return cond_names[cond];
220} 222}
221 223
222std::string ARM_Disasm::Disassemble(uint32_t addr, uint32_t insn) 224std::string ARM_Disasm::Disassemble(u32 addr, u32 insn)
223{ 225{
224 Opcode opcode = Decode(insn); 226 Opcode opcode = Decode(insn);
225 switch (opcode) { 227 switch (opcode) {
@@ -400,22 +402,22 @@ std::string ARM_Disasm::Disassemble(uint32_t addr, uint32_t insn)
400 return NULL; 402 return NULL;
401} 403}
402 404
403std::string ARM_Disasm::DisassembleALU(Opcode opcode, uint32_t insn) 405std::string ARM_Disasm::DisassembleALU(Opcode opcode, u32 insn)
404{ 406{
405 static const uint8_t kNoOperand1 = 1; 407 static const u8 kNoOperand1 = 1;
406 static const uint8_t kNoDest = 2; 408 static const u8 kNoDest = 2;
407 static const uint8_t kNoSbit = 4; 409 static const u8 kNoSbit = 4;
408 410
409 std::string rn_str; 411 std::string rn_str;
410 std::string rd_str; 412 std::string rd_str;
411 413
412 uint8_t flags = 0; 414 u8 flags = 0;
413 uint8_t cond = (insn >> 28) & 0xf; 415 u8 cond = (insn >> 28) & 0xf;
414 uint8_t is_immed = (insn >> 25) & 0x1; 416 u8 is_immed = (insn >> 25) & 0x1;
415 uint8_t bit_s = (insn >> 20) & 1; 417 u8 bit_s = (insn >> 20) & 1;
416 uint8_t rn = (insn >> 16) & 0xf; 418 u8 rn = (insn >> 16) & 0xf;
417 uint8_t rd = (insn >> 12) & 0xf; 419 u8 rd = (insn >> 12) & 0xf;
418 uint8_t immed = insn & 0xff; 420 u8 immed = insn & 0xff;
419 421
420 const char* opname = opcode_names[opcode]; 422 const char* opname = opcode_names[opcode];
421 switch (opcode) { 423 switch (opcode) {
@@ -455,14 +457,14 @@ std::string ARM_Disasm::DisassembleALU(Opcode opcode, uint32_t insn)
455 opname, cond_to_str(cond), sbit_str, rd_str.c_str(), rn_str.c_str(), immed, immed); 457 opname, cond_to_str(cond), sbit_str, rd_str.c_str(), rn_str.c_str(), immed, immed);
456 } 458 }
457 459
458 uint8_t shift_is_reg = (insn >> 4) & 1; 460 u8 shift_is_reg = (insn >> 4) & 1;
459 uint8_t rotate = (insn >> 8) & 0xf; 461 u8 rotate = (insn >> 8) & 0xf;
460 uint8_t rm = insn & 0xf; 462 u8 rm = insn & 0xf;
461 uint8_t shift_type = (insn >> 5) & 0x3; 463 u8 shift_type = (insn >> 5) & 0x3;
462 uint8_t rs = (insn >> 8) & 0xf; 464 u8 rs = (insn >> 8) & 0xf;
463 uint8_t shift_amount = (insn >> 7) & 0x1f; 465 u8 shift_amount = (insn >> 7) & 0x1f;
464 uint32_t rotated_val = immed; 466 u32 rotated_val = immed;
465 uint8_t rotate2 = rotate << 1; 467 u8 rotate2 = rotate << 1;
466 rotated_val = (rotated_val >> rotate2) | (rotated_val << (32 - rotate2)); 468 rotated_val = (rotated_val >> rotate2) | (rotated_val << (32 - rotate2));
467 469
468 if (!shift_is_reg && shift_type == 0 && shift_amount == 0) { 470 if (!shift_is_reg && shift_type == 0 && shift_amount == 0) {
@@ -488,10 +490,10 @@ std::string ARM_Disasm::DisassembleALU(Opcode opcode, uint32_t insn)
488 shift_name, shift_amount); 490 shift_name, shift_amount);
489} 491}
490 492
491std::string ARM_Disasm::DisassembleBranch(uint32_t addr, Opcode opcode, uint32_t insn) 493std::string ARM_Disasm::DisassembleBranch(u32 addr, Opcode opcode, u32 insn)
492{ 494{
493 uint8_t cond = (insn >> 28) & 0xf; 495 u8 cond = (insn >> 28) & 0xf;
494 uint32_t offset = insn & 0xffffff; 496 u32 offset = insn & 0xffffff;
495 // Sign-extend the 24-bit offset 497 // Sign-extend the 24-bit offset
496 if ((offset >> 23) & 1) 498 if ((offset >> 23) & 1)
497 offset |= 0xff000000; 499 offset |= 0xff000000;
@@ -504,35 +506,35 @@ std::string ARM_Disasm::DisassembleBranch(uint32_t addr, Opcode opcode, uint32_t
504 return Common::StringFromFormat("%s%s\t0x%x", opname, cond_to_str(cond), addr); 506 return Common::StringFromFormat("%s%s\t0x%x", opname, cond_to_str(cond), addr);
505} 507}
506 508
507std::string ARM_Disasm::DisassembleBX(uint32_t insn) 509std::string ARM_Disasm::DisassembleBX(u32 insn)
508{ 510{
509 uint8_t cond = (insn >> 28) & 0xf; 511 u8 cond = (insn >> 28) & 0xf;
510 uint8_t rn = insn & 0xf; 512 u8 rn = insn & 0xf;
511 return Common::StringFromFormat("bx%s\tr%d", cond_to_str(cond), rn); 513 return Common::StringFromFormat("bx%s\tr%d", cond_to_str(cond), rn);
512} 514}
513 515
514std::string ARM_Disasm::DisassembleBKPT(uint32_t insn) 516std::string ARM_Disasm::DisassembleBKPT(u32 insn)
515{ 517{
516 uint8_t cond = (insn >> 28) & 0xf; 518 u8 cond = (insn >> 28) & 0xf;
517 uint32_t immed = (((insn >> 8) & 0xfff) << 4) | (insn & 0xf); 519 u32 immed = (((insn >> 8) & 0xfff) << 4) | (insn & 0xf);
518 return Common::StringFromFormat("bkpt%s\t#%d", cond_to_str(cond), immed); 520 return Common::StringFromFormat("bkpt%s\t#%d", cond_to_str(cond), immed);
519} 521}
520 522
521std::string ARM_Disasm::DisassembleCLZ(uint32_t insn) 523std::string ARM_Disasm::DisassembleCLZ(u32 insn)
522{ 524{
523 uint8_t cond = (insn >> 28) & 0xf; 525 u8 cond = (insn >> 28) & 0xf;
524 uint8_t rd = (insn >> 12) & 0xf; 526 u8 rd = (insn >> 12) & 0xf;
525 uint8_t rm = insn & 0xf; 527 u8 rm = insn & 0xf;
526 return Common::StringFromFormat("clz%s\tr%d, r%d", cond_to_str(cond), rd, rm); 528 return Common::StringFromFormat("clz%s\tr%d, r%d", cond_to_str(cond), rd, rm);
527} 529}
528 530
529std::string ARM_Disasm::DisassembleMediaMulDiv(Opcode opcode, uint32_t insn) { 531std::string ARM_Disasm::DisassembleMediaMulDiv(Opcode opcode, u32 insn) {
530 uint32_t cond = BITS(insn, 28, 31); 532 u32 cond = BITS(insn, 28, 31);
531 uint32_t rd = BITS(insn, 16, 19); 533 u32 rd = BITS(insn, 16, 19);
532 uint32_t ra = BITS(insn, 12, 15); 534 u32 ra = BITS(insn, 12, 15);
533 uint32_t rm = BITS(insn, 8, 11); 535 u32 rm = BITS(insn, 8, 11);
534 uint32_t m = BIT(insn, 5); 536 u32 m = BIT(insn, 5);
535 uint32_t rn = BITS(insn, 0, 3); 537 u32 rn = BITS(insn, 0, 3);
536 538
537 std::string cross = ""; 539 std::string cross = "";
538 if (m) { 540 if (m) {
@@ -558,17 +560,17 @@ std::string ARM_Disasm::DisassembleMediaMulDiv(Opcode opcode, uint32_t insn) {
558 ext_reg.c_str()); 560 ext_reg.c_str());
559} 561}
560 562
561std::string ARM_Disasm::DisassembleMemblock(Opcode opcode, uint32_t insn) 563std::string ARM_Disasm::DisassembleMemblock(Opcode opcode, u32 insn)
562{ 564{
563 std::string tmp_list; 565 std::string tmp_list;
564 566
565 uint8_t cond = (insn >> 28) & 0xf; 567 u8 cond = (insn >> 28) & 0xf;
566 uint8_t write_back = (insn >> 21) & 0x1; 568 u8 write_back = (insn >> 21) & 0x1;
567 uint8_t bit_s = (insn >> 22) & 0x1; 569 u8 bit_s = (insn >> 22) & 0x1;
568 uint8_t is_up = (insn >> 23) & 0x1; 570 u8 is_up = (insn >> 23) & 0x1;
569 uint8_t is_pre = (insn >> 24) & 0x1; 571 u8 is_pre = (insn >> 24) & 0x1;
570 uint8_t rn = (insn >> 16) & 0xf; 572 u8 rn = (insn >> 16) & 0xf;
571 uint16_t reg_list = insn & 0xffff; 573 u16 reg_list = insn & 0xffff;
572 574
573 const char *opname = opcode_names[opcode]; 575 const char *opname = opcode_names[opcode];
574 576
@@ -608,18 +610,18 @@ std::string ARM_Disasm::DisassembleMemblock(Opcode opcode, uint32_t insn)
608 opname, cond_to_str(cond), addr_mode, rn, bang, tmp_list.c_str(), carret); 610 opname, cond_to_str(cond), addr_mode, rn, bang, tmp_list.c_str(), carret);
609} 611}
610 612
611std::string ARM_Disasm::DisassembleMem(uint32_t insn) 613std::string ARM_Disasm::DisassembleMem(u32 insn)
612{ 614{
613 uint8_t cond = (insn >> 28) & 0xf; 615 u8 cond = (insn >> 28) & 0xf;
614 uint8_t is_reg = (insn >> 25) & 0x1; 616 u8 is_reg = (insn >> 25) & 0x1;
615 uint8_t is_load = (insn >> 20) & 0x1; 617 u8 is_load = (insn >> 20) & 0x1;
616 uint8_t write_back = (insn >> 21) & 0x1; 618 u8 write_back = (insn >> 21) & 0x1;
617 uint8_t is_byte = (insn >> 22) & 0x1; 619 u8 is_byte = (insn >> 22) & 0x1;
618 uint8_t is_up = (insn >> 23) & 0x1; 620 u8 is_up = (insn >> 23) & 0x1;
619 uint8_t is_pre = (insn >> 24) & 0x1; 621 u8 is_pre = (insn >> 24) & 0x1;
620 uint8_t rn = (insn >> 16) & 0xf; 622 u8 rn = (insn >> 16) & 0xf;
621 uint8_t rd = (insn >> 12) & 0xf; 623 u8 rd = (insn >> 12) & 0xf;
622 uint16_t offset = insn & 0xfff; 624 u16 offset = insn & 0xfff;
623 625
624 const char *opname = "ldr"; 626 const char *opname = "ldr";
625 if (!is_load) 627 if (!is_load)
@@ -656,9 +658,9 @@ std::string ARM_Disasm::DisassembleMem(uint32_t insn)
656 } 658 }
657 } 659 }
658 660
659 uint8_t rm = insn & 0xf; 661 u8 rm = insn & 0xf;
660 uint8_t shift_type = (insn >> 5) & 0x3; 662 u8 shift_type = (insn >> 5) & 0x3;
661 uint8_t shift_amount = (insn >> 7) & 0x1f; 663 u8 shift_amount = (insn >> 7) & 0x1f;
662 664
663 const char *shift_name = shift_names[shift_type]; 665 const char *shift_name = shift_names[shift_type];
664 666
@@ -700,19 +702,19 @@ std::string ARM_Disasm::DisassembleMem(uint32_t insn)
700 shift_name, shift_amount); 702 shift_name, shift_amount);
701} 703}
702 704
703std::string ARM_Disasm::DisassembleMemHalf(uint32_t insn) 705std::string ARM_Disasm::DisassembleMemHalf(u32 insn)
704{ 706{
705 uint8_t cond = (insn >> 28) & 0xf; 707 u8 cond = (insn >> 28) & 0xf;
706 uint8_t is_load = (insn >> 20) & 0x1; 708 u8 is_load = (insn >> 20) & 0x1;
707 uint8_t write_back = (insn >> 21) & 0x1; 709 u8 write_back = (insn >> 21) & 0x1;
708 uint8_t is_immed = (insn >> 22) & 0x1; 710 u8 is_immed = (insn >> 22) & 0x1;
709 uint8_t is_up = (insn >> 23) & 0x1; 711 u8 is_up = (insn >> 23) & 0x1;
710 uint8_t is_pre = (insn >> 24) & 0x1; 712 u8 is_pre = (insn >> 24) & 0x1;
711 uint8_t rn = (insn >> 16) & 0xf; 713 u8 rn = (insn >> 16) & 0xf;
712 uint8_t rd = (insn >> 12) & 0xf; 714 u8 rd = (insn >> 12) & 0xf;
713 uint8_t bits_65 = (insn >> 5) & 0x3; 715 u8 bits_65 = (insn >> 5) & 0x3;
714 uint8_t rm = insn & 0xf; 716 u8 rm = insn & 0xf;
715 uint8_t offset = (((insn >> 8) & 0xf) << 4) | (insn & 0xf); 717 u8 offset = (((insn >> 8) & 0xf) << 4) | (insn & 0xf);
716 718
717 const char *opname = "ldr"; 719 const char *opname = "ldr";
718 if (is_load == 0) 720 if (is_load == 0)
@@ -756,78 +758,78 @@ std::string ARM_Disasm::DisassembleMemHalf(uint32_t insn)
756 } 758 }
757} 759}
758 760
759std::string ARM_Disasm::DisassembleMCR(Opcode opcode, uint32_t insn) 761std::string ARM_Disasm::DisassembleMCR(Opcode opcode, u32 insn)
760{ 762{
761 uint8_t cond = (insn >> 28) & 0xf; 763 u8 cond = (insn >> 28) & 0xf;
762 uint8_t crn = (insn >> 16) & 0xf; 764 u8 crn = (insn >> 16) & 0xf;
763 uint8_t crd = (insn >> 12) & 0xf; 765 u8 crd = (insn >> 12) & 0xf;
764 uint8_t cpnum = (insn >> 8) & 0xf; 766 u8 cpnum = (insn >> 8) & 0xf;
765 uint8_t opcode2 = (insn >> 5) & 0x7; 767 u8 opcode2 = (insn >> 5) & 0x7;
766 uint8_t crm = insn & 0xf; 768 u8 crm = insn & 0xf;
767 769
768 const char *opname = opcode_names[opcode]; 770 const char *opname = opcode_names[opcode];
769 return Common::StringFromFormat("%s%s\t%d, 0, r%d, cr%d, cr%d, {%d}", 771 return Common::StringFromFormat("%s%s\t%d, 0, r%d, cr%d, cr%d, {%d}",
770 opname, cond_to_str(cond), cpnum, crd, crn, crm, opcode2); 772 opname, cond_to_str(cond), cpnum, crd, crn, crm, opcode2);
771} 773}
772 774
773std::string ARM_Disasm::DisassembleMLA(Opcode opcode, uint32_t insn) 775std::string ARM_Disasm::DisassembleMLA(Opcode opcode, u32 insn)
774{ 776{
775 uint8_t cond = (insn >> 28) & 0xf; 777 u8 cond = (insn >> 28) & 0xf;
776 uint8_t rd = (insn >> 16) & 0xf; 778 u8 rd = (insn >> 16) & 0xf;
777 uint8_t rn = (insn >> 12) & 0xf; 779 u8 rn = (insn >> 12) & 0xf;
778 uint8_t rs = (insn >> 8) & 0xf; 780 u8 rs = (insn >> 8) & 0xf;
779 uint8_t rm = insn & 0xf; 781 u8 rm = insn & 0xf;
780 uint8_t bit_s = (insn >> 20) & 1; 782 u8 bit_s = (insn >> 20) & 1;
781 783
782 const char *opname = opcode_names[opcode]; 784 const char *opname = opcode_names[opcode];
783 return Common::StringFromFormat("%s%s%s\tr%d, r%d, r%d, r%d", 785 return Common::StringFromFormat("%s%s%s\tr%d, r%d, r%d, r%d",
784 opname, cond_to_str(cond), bit_s ? "s" : "", rd, rm, rs, rn); 786 opname, cond_to_str(cond), bit_s ? "s" : "", rd, rm, rs, rn);
785} 787}
786 788
787std::string ARM_Disasm::DisassembleUMLAL(Opcode opcode, uint32_t insn) 789std::string ARM_Disasm::DisassembleUMLAL(Opcode opcode, u32 insn)
788{ 790{
789 uint8_t cond = (insn >> 28) & 0xf; 791 u8 cond = (insn >> 28) & 0xf;
790 uint8_t rdhi = (insn >> 16) & 0xf; 792 u8 rdhi = (insn >> 16) & 0xf;
791 uint8_t rdlo = (insn >> 12) & 0xf; 793 u8 rdlo = (insn >> 12) & 0xf;
792 uint8_t rs = (insn >> 8) & 0xf; 794 u8 rs = (insn >> 8) & 0xf;
793 uint8_t rm = insn & 0xf; 795 u8 rm = insn & 0xf;
794 uint8_t bit_s = (insn >> 20) & 1; 796 u8 bit_s = (insn >> 20) & 1;
795 797
796 const char *opname = opcode_names[opcode]; 798 const char *opname = opcode_names[opcode];
797 return Common::StringFromFormat("%s%s%s\tr%d, r%d, r%d, r%d", 799 return Common::StringFromFormat("%s%s%s\tr%d, r%d, r%d, r%d",
798 opname, cond_to_str(cond), bit_s ? "s" : "", rdlo, rdhi, rm, rs); 800 opname, cond_to_str(cond), bit_s ? "s" : "", rdlo, rdhi, rm, rs);
799} 801}
800 802
801std::string ARM_Disasm::DisassembleMUL(Opcode opcode, uint32_t insn) 803std::string ARM_Disasm::DisassembleMUL(Opcode opcode, u32 insn)
802{ 804{
803 uint8_t cond = (insn >> 28) & 0xf; 805 u8 cond = (insn >> 28) & 0xf;
804 uint8_t rd = (insn >> 16) & 0xf; 806 u8 rd = (insn >> 16) & 0xf;
805 uint8_t rs = (insn >> 8) & 0xf; 807 u8 rs = (insn >> 8) & 0xf;
806 uint8_t rm = insn & 0xf; 808 u8 rm = insn & 0xf;
807 uint8_t bit_s = (insn >> 20) & 1; 809 u8 bit_s = (insn >> 20) & 1;
808 810
809 const char *opname = opcode_names[opcode]; 811 const char *opname = opcode_names[opcode];
810 return Common::StringFromFormat("%s%s%s\tr%d, r%d, r%d", 812 return Common::StringFromFormat("%s%s%s\tr%d, r%d, r%d",
811 opname, cond_to_str(cond), bit_s ? "s" : "", rd, rm, rs); 813 opname, cond_to_str(cond), bit_s ? "s" : "", rd, rm, rs);
812} 814}
813 815
814std::string ARM_Disasm::DisassembleMRS(uint32_t insn) 816std::string ARM_Disasm::DisassembleMRS(u32 insn)
815{ 817{
816 uint8_t cond = (insn >> 28) & 0xf; 818 u8 cond = (insn >> 28) & 0xf;
817 uint8_t rd = (insn >> 12) & 0xf; 819 u8 rd = (insn >> 12) & 0xf;
818 uint8_t ps = (insn >> 22) & 1; 820 u8 ps = (insn >> 22) & 1;
819 821
820 return Common::StringFromFormat("mrs%s\tr%d, %s", cond_to_str(cond), rd, ps ? "spsr" : "cpsr"); 822 return Common::StringFromFormat("mrs%s\tr%d, %s", cond_to_str(cond), rd, ps ? "spsr" : "cpsr");
821} 823}
822 824
823std::string ARM_Disasm::DisassembleMSR(uint32_t insn) 825std::string ARM_Disasm::DisassembleMSR(u32 insn)
824{ 826{
825 char flags[8]; 827 char flags[8];
826 int flag_index = 0; 828 int flag_index = 0;
827 uint8_t cond = (insn >> 28) & 0xf; 829 u8 cond = (insn >> 28) & 0xf;
828 uint8_t is_immed = (insn >> 25) & 0x1; 830 u8 is_immed = (insn >> 25) & 0x1;
829 uint8_t pd = (insn >> 22) & 1; 831 u8 pd = (insn >> 22) & 1;
830 uint8_t mask = (insn >> 16) & 0xf; 832 u8 mask = (insn >> 16) & 0xf;
831 833
832 if (mask & 1) 834 if (mask & 1)
833 flags[flag_index++] = 'c'; 835 flags[flag_index++] = 'c';
@@ -840,44 +842,44 @@ std::string ARM_Disasm::DisassembleMSR(uint32_t insn)
840 flags[flag_index] = 0; 842 flags[flag_index] = 0;
841 843
842 if (is_immed) { 844 if (is_immed) {
843 uint32_t immed = insn & 0xff; 845 u32 immed = insn & 0xff;
844 uint8_t rotate = (insn >> 8) & 0xf; 846 u8 rotate = (insn >> 8) & 0xf;
845 uint8_t rotate2 = rotate << 1; 847 u8 rotate2 = rotate << 1;
846 uint32_t rotated_val = (immed >> rotate2) | (immed << (32 - rotate2)); 848 u32 rotated_val = (immed >> rotate2) | (immed << (32 - rotate2));
847 return Common::StringFromFormat("msr%s\t%s_%s, #0x%x", 849 return Common::StringFromFormat("msr%s\t%s_%s, #0x%x",
848 cond_to_str(cond), pd ? "spsr" : "cpsr", flags, rotated_val); 850 cond_to_str(cond), pd ? "spsr" : "cpsr", flags, rotated_val);
849 } 851 }
850 852
851 uint8_t rm = insn & 0xf; 853 u8 rm = insn & 0xf;
852 854
853 return Common::StringFromFormat("msr%s\t%s_%s, r%d", 855 return Common::StringFromFormat("msr%s\t%s_%s, r%d",
854 cond_to_str(cond), pd ? "spsr" : "cpsr", flags, rm); 856 cond_to_str(cond), pd ? "spsr" : "cpsr", flags, rm);
855} 857}
856 858
857std::string ARM_Disasm::DisassembleNoOperands(Opcode opcode, uint32_t insn) 859std::string ARM_Disasm::DisassembleNoOperands(Opcode opcode, u32 insn)
858{ 860{
859 uint32_t cond = BITS(insn, 28, 31); 861 u32 cond = BITS(insn, 28, 31);
860 return Common::StringFromFormat("%s%s", opcode_names[opcode], cond_to_str(cond)); 862 return Common::StringFromFormat("%s%s", opcode_names[opcode], cond_to_str(cond));
861} 863}
862 864
863std::string ARM_Disasm::DisassembleParallelAddSub(Opcode opcode, uint32_t insn) { 865std::string ARM_Disasm::DisassembleParallelAddSub(Opcode opcode, u32 insn) {
864 uint32_t cond = BITS(insn, 28, 31); 866 u32 cond = BITS(insn, 28, 31);
865 uint32_t rn = BITS(insn, 16, 19); 867 u32 rn = BITS(insn, 16, 19);
866 uint32_t rd = BITS(insn, 12, 15); 868 u32 rd = BITS(insn, 12, 15);
867 uint32_t rm = BITS(insn, 0, 3); 869 u32 rm = BITS(insn, 0, 3);
868 870
869 return Common::StringFromFormat("%s%s\tr%u, r%u, r%u", opcode_names[opcode], cond_to_str(cond), 871 return Common::StringFromFormat("%s%s\tr%u, r%u, r%u", opcode_names[opcode], cond_to_str(cond),
870 rd, rn, rm); 872 rd, rn, rm);
871} 873}
872 874
873std::string ARM_Disasm::DisassemblePKH(uint32_t insn) 875std::string ARM_Disasm::DisassemblePKH(u32 insn)
874{ 876{
875 uint32_t cond = BITS(insn, 28, 31); 877 u32 cond = BITS(insn, 28, 31);
876 uint32_t rn = BITS(insn, 16, 19); 878 u32 rn = BITS(insn, 16, 19);
877 uint32_t rd = BITS(insn, 12, 15); 879 u32 rd = BITS(insn, 12, 15);
878 uint32_t imm5 = BITS(insn, 7, 11); 880 u32 imm5 = BITS(insn, 7, 11);
879 uint32_t tb = BIT(insn, 6); 881 u32 tb = BIT(insn, 6);
880 uint32_t rm = BITS(insn, 0, 3); 882 u32 rm = BITS(insn, 0, 3);
881 883
882 std::string suffix = tb ? "tb" : "bt"; 884 std::string suffix = tb ? "tb" : "bt";
883 std::string shift = ""; 885 std::string shift = "";
@@ -894,22 +896,22 @@ std::string ARM_Disasm::DisassemblePKH(uint32_t insn)
894 rd, rn, rm, shift.c_str()); 896 rd, rn, rm, shift.c_str());
895} 897}
896 898
897std::string ARM_Disasm::DisassemblePLD(uint32_t insn) 899std::string ARM_Disasm::DisassemblePLD(u32 insn)
898{ 900{
899 uint8_t is_reg = (insn >> 25) & 0x1; 901 u8 is_reg = (insn >> 25) & 0x1;
900 uint8_t is_up = (insn >> 23) & 0x1; 902 u8 is_up = (insn >> 23) & 0x1;
901 uint8_t rn = (insn >> 16) & 0xf; 903 u8 rn = (insn >> 16) & 0xf;
902 904
903 const char *minus = ""; 905 const char *minus = "";
904 if (is_up == 0) 906 if (is_up == 0)
905 minus = "-"; 907 minus = "-";
906 908
907 if (is_reg) { 909 if (is_reg) {
908 uint8_t rm = insn & 0xf; 910 u8 rm = insn & 0xf;
909 return Common::StringFromFormat("pld\t[r%d, %sr%d]", rn, minus, rm); 911 return Common::StringFromFormat("pld\t[r%d, %sr%d]", rn, minus, rm);
910 } 912 }
911 913
912 uint16_t offset = insn & 0xfff; 914 u16 offset = insn & 0xfff;
913 if (offset == 0) { 915 if (offset == 0) {
914 return Common::StringFromFormat("pld\t[r%d]", rn); 916 return Common::StringFromFormat("pld\t[r%d]", rn);
915 } else { 917 } else {
@@ -917,20 +919,20 @@ std::string ARM_Disasm::DisassemblePLD(uint32_t insn)
917 } 919 }
918} 920}
919 921
920std::string ARM_Disasm::DisassembleREV(Opcode opcode, uint32_t insn) { 922std::string ARM_Disasm::DisassembleREV(Opcode opcode, u32 insn) {
921 uint32_t cond = BITS(insn, 28, 31); 923 u32 cond = BITS(insn, 28, 31);
922 uint32_t rd = BITS(insn, 12, 15); 924 u32 rd = BITS(insn, 12, 15);
923 uint32_t rm = BITS(insn, 0, 3); 925 u32 rm = BITS(insn, 0, 3);
924 926
925 return Common::StringFromFormat("%s%s\tr%u, r%u", opcode_names[opcode], cond_to_str(cond), 927 return Common::StringFromFormat("%s%s\tr%u, r%u", opcode_names[opcode], cond_to_str(cond),
926 rd, rm); 928 rd, rm);
927} 929}
928 930
929std::string ARM_Disasm::DisassembleREX(Opcode opcode, uint32_t insn) { 931std::string ARM_Disasm::DisassembleREX(Opcode opcode, u32 insn) {
930 uint32_t rn = BITS(insn, 16, 19); 932 u32 rn = BITS(insn, 16, 19);
931 uint32_t rd = BITS(insn, 12, 15); 933 u32 rd = BITS(insn, 12, 15);
932 uint32_t rt = BITS(insn, 0, 3); 934 u32 rt = BITS(insn, 0, 3);
933 uint32_t cond = BITS(insn, 28, 31); 935 u32 cond = BITS(insn, 28, 31);
934 936
935 switch (opcode) { 937 switch (opcode) {
936 case OP_STREX: 938 case OP_STREX:
@@ -956,13 +958,13 @@ std::string ARM_Disasm::DisassembleREX(Opcode opcode, uint32_t insn) {
956 } 958 }
957} 959}
958 960
959std::string ARM_Disasm::DisassembleSAT(Opcode opcode, uint32_t insn) { 961std::string ARM_Disasm::DisassembleSAT(Opcode opcode, u32 insn) {
960 uint32_t cond = BITS(insn, 28, 31); 962 u32 cond = BITS(insn, 28, 31);
961 uint32_t sat_imm = BITS(insn, 16, 20); 963 u32 sat_imm = BITS(insn, 16, 20);
962 uint32_t rd = BITS(insn, 12, 15); 964 u32 rd = BITS(insn, 12, 15);
963 uint32_t imm5 = BITS(insn, 7, 11); 965 u32 imm5 = BITS(insn, 7, 11);
964 uint32_t sh = BIT(insn, 6); 966 u32 sh = BIT(insn, 6);
965 uint32_t rn = BITS(insn, 0, 3); 967 u32 rn = BITS(insn, 0, 3);
966 968
967 std::string shift_part = ""; 969 std::string shift_part = "";
968 bool opcode_has_shift = (opcode == OP_SSAT) || (opcode == OP_USAT); 970 bool opcode_has_shift = (opcode == OP_SSAT) || (opcode == OP_USAT);
@@ -984,42 +986,42 @@ std::string ARM_Disasm::DisassembleSAT(Opcode opcode, uint32_t insn) {
984 sat_imm, rn, shift_part.c_str()); 986 sat_imm, rn, shift_part.c_str());
985} 987}
986 988
987std::string ARM_Disasm::DisassembleSEL(uint32_t insn) { 989std::string ARM_Disasm::DisassembleSEL(u32 insn) {
988 uint32_t cond = BITS(insn, 28, 31); 990 u32 cond = BITS(insn, 28, 31);
989 uint32_t rn = BITS(insn, 16, 19); 991 u32 rn = BITS(insn, 16, 19);
990 uint32_t rd = BITS(insn, 12, 15); 992 u32 rd = BITS(insn, 12, 15);
991 uint32_t rm = BITS(insn, 0, 3); 993 u32 rm = BITS(insn, 0, 3);
992 994
993 return Common::StringFromFormat("%s%s\tr%u, r%u, r%u", opcode_names[OP_SEL], cond_to_str(cond), 995 return Common::StringFromFormat("%s%s\tr%u, r%u, r%u", opcode_names[OP_SEL], cond_to_str(cond),
994 rd, rn, rm); 996 rd, rn, rm);
995} 997}
996 998
997std::string ARM_Disasm::DisassembleSWI(uint32_t insn) 999std::string ARM_Disasm::DisassembleSWI(u32 insn)
998{ 1000{
999 uint8_t cond = (insn >> 28) & 0xf; 1001 u8 cond = (insn >> 28) & 0xf;
1000 uint32_t sysnum = insn & 0x00ffffff; 1002 u32 sysnum = insn & 0x00ffffff;
1001 1003
1002 return Common::StringFromFormat("swi%s 0x%x", cond_to_str(cond), sysnum); 1004 return Common::StringFromFormat("swi%s 0x%x", cond_to_str(cond), sysnum);
1003} 1005}
1004 1006
1005std::string ARM_Disasm::DisassembleSWP(Opcode opcode, uint32_t insn) 1007std::string ARM_Disasm::DisassembleSWP(Opcode opcode, u32 insn)
1006{ 1008{
1007 uint8_t cond = (insn >> 28) & 0xf; 1009 u8 cond = (insn >> 28) & 0xf;
1008 uint8_t rn = (insn >> 16) & 0xf; 1010 u8 rn = (insn >> 16) & 0xf;
1009 uint8_t rd = (insn >> 12) & 0xf; 1011 u8 rd = (insn >> 12) & 0xf;
1010 uint8_t rm = insn & 0xf; 1012 u8 rm = insn & 0xf;
1011 1013
1012 const char *opname = opcode_names[opcode]; 1014 const char *opname = opcode_names[opcode];
1013 return Common::StringFromFormat("%s%s\tr%d, r%d, [r%d]", opname, cond_to_str(cond), rd, rm, rn); 1015 return Common::StringFromFormat("%s%s\tr%d, r%d, [r%d]", opname, cond_to_str(cond), rd, rm, rn);
1014} 1016}
1015 1017
1016std::string ARM_Disasm::DisassembleXT(Opcode opcode, uint32_t insn) 1018std::string ARM_Disasm::DisassembleXT(Opcode opcode, u32 insn)
1017{ 1019{
1018 uint32_t cond = BITS(insn, 28, 31); 1020 u32 cond = BITS(insn, 28, 31);
1019 uint32_t rn = BITS(insn, 16, 19); 1021 u32 rn = BITS(insn, 16, 19);
1020 uint32_t rd = BITS(insn, 12, 15); 1022 u32 rd = BITS(insn, 12, 15);
1021 uint32_t rotate = BITS(insn, 10, 11); 1023 u32 rotate = BITS(insn, 10, 11);
1022 uint32_t rm = BITS(insn, 0, 3); 1024 u32 rm = BITS(insn, 0, 3);
1023 1025
1024 std::string rn_part = ""; 1026 std::string rn_part = "";
1025 static std::unordered_set<Opcode, std::hash<int>> extend_with_add = { 1027 static std::unordered_set<Opcode, std::hash<int>> extend_with_add = {
@@ -1037,8 +1039,8 @@ std::string ARM_Disasm::DisassembleXT(Opcode opcode, uint32_t insn)
1037 rd, rn_part.c_str(), rm, rotate_part.c_str()); 1039 rd, rn_part.c_str(), rm, rotate_part.c_str());
1038} 1040}
1039 1041
1040Opcode ARM_Disasm::Decode(uint32_t insn) { 1042Opcode ARM_Disasm::Decode(u32 insn) {
1041 uint32_t bits27_26 = (insn >> 26) & 0x3; 1043 u32 bits27_26 = (insn >> 26) & 0x3;
1042 switch (bits27_26) { 1044 switch (bits27_26) {
1043 case 0x0: 1045 case 0x0:
1044 return Decode00(insn); 1046 return Decode00(insn);
@@ -1052,9 +1054,9 @@ Opcode ARM_Disasm::Decode(uint32_t insn) {
1052 return OP_INVALID; 1054 return OP_INVALID;
1053} 1055}
1054 1056
1055Opcode ARM_Disasm::Decode00(uint32_t insn) { 1057Opcode ARM_Disasm::Decode00(u32 insn) {
1056 uint8_t bit25 = (insn >> 25) & 0x1; 1058 u8 bit25 = (insn >> 25) & 0x1;
1057 uint8_t bit4 = (insn >> 4) & 0x1; 1059 u8 bit4 = (insn >> 4) & 0x1;
1058 if (bit25 == 0 && bit4 == 1) { 1060 if (bit25 == 0 && bit4 == 1) {
1059 if ((insn & 0x0ffffff0) == 0x012fff10) { 1061 if ((insn & 0x0ffffff0) == 0x012fff10) {
1060 // Bx instruction 1062 // Bx instruction
@@ -1068,9 +1070,9 @@ Opcode ARM_Disasm::Decode00(uint32_t insn) {
1068 // Bkpt instruction 1070 // Bkpt instruction
1069 return OP_BKPT; 1071 return OP_BKPT;
1070 } 1072 }
1071 uint32_t bits7_4 = (insn >> 4) & 0xf; 1073 u32 bits7_4 = (insn >> 4) & 0xf;
1072 if (bits7_4 == 0x9) { 1074 if (bits7_4 == 0x9) {
1073 uint32_t bit24 = BIT(insn, 24); 1075 u32 bit24 = BIT(insn, 24);
1074 if (bit24) { 1076 if (bit24) {
1075 return DecodeSyncPrimitive(insn); 1077 return DecodeSyncPrimitive(insn);
1076 } 1078 }
@@ -1078,14 +1080,14 @@ Opcode ARM_Disasm::Decode00(uint32_t insn) {
1078 return DecodeMUL(insn); 1080 return DecodeMUL(insn);
1079 } 1081 }
1080 1082
1081 uint8_t bit7 = (insn >> 7) & 0x1; 1083 u8 bit7 = (insn >> 7) & 0x1;
1082 if (bit7 == 1) { 1084 if (bit7 == 1) {
1083 // One of the load/store halfword/byte instructions 1085 // One of the load/store halfword/byte instructions
1084 return DecodeLDRH(insn); 1086 return DecodeLDRH(insn);
1085 } 1087 }
1086 } 1088 }
1087 1089
1088 uint32_t op1 = BITS(insn, 20, 24); 1090 u32 op1 = BITS(insn, 20, 24);
1089 if (bit25 && (op1 == 0x12 || op1 == 0x16)) { 1091 if (bit25 && (op1 == 0x12 || op1 == 0x16)) {
1090 // One of the MSR (immediate) and hints instructions 1092 // One of the MSR (immediate) and hints instructions
1091 return DecodeMSRImmAndHints(insn); 1093 return DecodeMSRImmAndHints(insn);
@@ -1095,13 +1097,13 @@ Opcode ARM_Disasm::Decode00(uint32_t insn) {
1095 return DecodeALU(insn); 1097 return DecodeALU(insn);
1096} 1098}
1097 1099
1098Opcode ARM_Disasm::Decode01(uint32_t insn) { 1100Opcode ARM_Disasm::Decode01(u32 insn) {
1099 uint8_t is_reg = (insn >> 25) & 0x1; 1101 u8 is_reg = (insn >> 25) & 0x1;
1100 uint8_t bit4 = (insn >> 4) & 0x1; 1102 u8 bit4 = (insn >> 4) & 0x1;
1101 if (is_reg == 1 && bit4 == 1) 1103 if (is_reg == 1 && bit4 == 1)
1102 return DecodeMedia(insn); 1104 return DecodeMedia(insn);
1103 uint8_t is_load = (insn >> 20) & 0x1; 1105 u8 is_load = (insn >> 20) & 0x1;
1104 uint8_t is_byte = (insn >> 22) & 0x1; 1106 u8 is_byte = (insn >> 22) & 0x1;
1105 if ((insn & 0xfd70f000) == 0xf550f000) { 1107 if ((insn & 0xfd70f000) == 0xf550f000) {
1106 // Pre-load 1108 // Pre-load
1107 return OP_PLD; 1109 return OP_PLD;
@@ -1126,11 +1128,11 @@ Opcode ARM_Disasm::Decode01(uint32_t insn) {
1126 return OP_STR; 1128 return OP_STR;
1127} 1129}
1128 1130
1129Opcode ARM_Disasm::Decode10(uint32_t insn) { 1131Opcode ARM_Disasm::Decode10(u32 insn) {
1130 uint8_t bit25 = (insn >> 25) & 0x1; 1132 u8 bit25 = (insn >> 25) & 0x1;
1131 if (bit25 == 0) { 1133 if (bit25 == 0) {
1132 // LDM/STM 1134 // LDM/STM
1133 uint8_t is_load = (insn >> 20) & 0x1; 1135 u8 is_load = (insn >> 20) & 0x1;
1134 if (is_load) 1136 if (is_load)
1135 return OP_LDM; 1137 return OP_LDM;
1136 return OP_STM; 1138 return OP_STM;
@@ -1143,11 +1145,11 @@ Opcode ARM_Disasm::Decode10(uint32_t insn) {
1143 return OP_B; 1145 return OP_B;
1144} 1146}
1145 1147
1146Opcode ARM_Disasm::Decode11(uint32_t insn) { 1148Opcode ARM_Disasm::Decode11(u32 insn) {
1147 uint8_t bit25 = (insn >> 25) & 0x1; 1149 u8 bit25 = (insn >> 25) & 0x1;
1148 if (bit25 == 0) { 1150 if (bit25 == 0) {
1149 // LDC, SDC 1151 // LDC, SDC
1150 uint8_t is_load = (insn >> 20) & 0x1; 1152 u8 is_load = (insn >> 20) & 0x1;
1151 if (is_load) { 1153 if (is_load) {
1152 // LDC 1154 // LDC
1153 return OP_LDC; 1155 return OP_LDC;
@@ -1156,18 +1158,18 @@ Opcode ARM_Disasm::Decode11(uint32_t insn) {
1156 return OP_STC; 1158 return OP_STC;
1157 } 1159 }
1158 1160
1159 uint8_t bit24 = (insn >> 24) & 0x1; 1161 u8 bit24 = (insn >> 24) & 0x1;
1160 if (bit24 == 0x1) { 1162 if (bit24 == 0x1) {
1161 // SWI 1163 // SWI
1162 return OP_SWI; 1164 return OP_SWI;
1163 } 1165 }
1164 1166
1165 uint8_t bit4 = (insn >> 4) & 0x1; 1167 u8 bit4 = (insn >> 4) & 0x1;
1166 uint8_t cpnum = (insn >> 8) & 0xf; 1168 u8 cpnum = (insn >> 8) & 0xf;
1167 1169
1168 if (cpnum == 15) { 1170 if (cpnum == 15) {
1169 // Special case for coprocessor 15 1171 // Special case for coprocessor 15
1170 uint8_t opcode = (insn >> 21) & 0x7; 1172 u8 opcode = (insn >> 21) & 0x7;
1171 if (bit4 == 0 || opcode != 0) { 1173 if (bit4 == 0 || opcode != 0) {
1172 // This is an unexpected bit pattern. Create an undefined 1174 // This is an unexpected bit pattern. Create an undefined
1173 // instruction in case this is ever executed. 1175 // instruction in case this is ever executed.
@@ -1175,7 +1177,7 @@ Opcode ARM_Disasm::Decode11(uint32_t insn) {
1175 } 1177 }
1176 1178
1177 // MRC, MCR 1179 // MRC, MCR
1178 uint8_t is_mrc = (insn >> 20) & 0x1; 1180 u8 is_mrc = (insn >> 20) & 0x1;
1179 if (is_mrc) 1181 if (is_mrc)
1180 return OP_MRC; 1182 return OP_MRC;
1181 return OP_MCR; 1183 return OP_MCR;
@@ -1186,15 +1188,15 @@ Opcode ARM_Disasm::Decode11(uint32_t insn) {
1186 return OP_CDP; 1188 return OP_CDP;
1187 } 1189 }
1188 // MRC, MCR 1190 // MRC, MCR
1189 uint8_t is_mrc = (insn >> 20) & 0x1; 1191 u8 is_mrc = (insn >> 20) & 0x1;
1190 if (is_mrc) 1192 if (is_mrc)
1191 return OP_MRC; 1193 return OP_MRC;
1192 return OP_MCR; 1194 return OP_MCR;
1193} 1195}
1194 1196
1195Opcode ARM_Disasm::DecodeSyncPrimitive(uint32_t insn) { 1197Opcode ARM_Disasm::DecodeSyncPrimitive(u32 insn) {
1196 uint32_t op = BITS(insn, 20, 23); 1198 u32 op = BITS(insn, 20, 23);
1197 uint32_t bit22 = BIT(insn, 22); 1199 u32 bit22 = BIT(insn, 22);
1198 switch (op) { 1200 switch (op) {
1199 case 0x0: 1201 case 0x0:
1200 if (bit22) 1202 if (bit22)
@@ -1221,10 +1223,10 @@ Opcode ARM_Disasm::DecodeSyncPrimitive(uint32_t insn) {
1221 } 1223 }
1222} 1224}
1223 1225
1224Opcode ARM_Disasm::DecodeParallelAddSub(uint32_t insn) { 1226Opcode ARM_Disasm::DecodeParallelAddSub(u32 insn) {
1225 uint32_t op1 = BITS(insn, 20, 21); 1227 u32 op1 = BITS(insn, 20, 21);
1226 uint32_t op2 = BITS(insn, 5, 7); 1228 u32 op2 = BITS(insn, 5, 7);
1227 uint32_t is_unsigned = BIT(insn, 22); 1229 u32 is_unsigned = BIT(insn, 22);
1228 1230
1229 if (op1 == 0x0 || op2 == 0x5 || op2 == 0x6) 1231 if (op1 == 0x0 || op2 == 0x5 || op2 == 0x6)
1230 return OP_UNDEFINED; 1232 return OP_UNDEFINED;
@@ -1260,14 +1262,14 @@ Opcode ARM_Disasm::DecodeParallelAddSub(uint32_t insn) {
1260 OP_SHSUB8, OP_UHSUB8 1262 OP_SHSUB8, OP_UHSUB8
1261 }; 1263 };
1262 1264
1263 uint32_t opcode_index = op1 * 12 + op2 * 2 + is_unsigned; 1265 u32 opcode_index = op1 * 12 + op2 * 2 + is_unsigned;
1264 return opcodes[opcode_index]; 1266 return opcodes[opcode_index];
1265} 1267}
1266 1268
1267Opcode ARM_Disasm::DecodePackingSaturationReversal(uint32_t insn) { 1269Opcode ARM_Disasm::DecodePackingSaturationReversal(u32 insn) {
1268 uint32_t op1 = BITS(insn, 20, 22); 1270 u32 op1 = BITS(insn, 20, 22);
1269 uint32_t a = BITS(insn, 16, 19); 1271 u32 a = BITS(insn, 16, 19);
1270 uint32_t op2 = BITS(insn, 5, 7); 1272 u32 op2 = BITS(insn, 5, 7);
1271 1273
1272 switch (op1) { 1274 switch (op1) {
1273 case 0x0: 1275 case 0x0:
@@ -1335,16 +1337,16 @@ Opcode ARM_Disasm::DecodePackingSaturationReversal(uint32_t insn) {
1335 return OP_UNDEFINED; 1337 return OP_UNDEFINED;
1336} 1338}
1337 1339
1338Opcode ARM_Disasm::DecodeMUL(uint32_t insn) { 1340Opcode ARM_Disasm::DecodeMUL(u32 insn) {
1339 uint8_t bit24 = (insn >> 24) & 0x1; 1341 u8 bit24 = (insn >> 24) & 0x1;
1340 if (bit24 != 0) { 1342 if (bit24 != 0) {
1341 // This is an unexpected bit pattern. Create an undefined 1343 // This is an unexpected bit pattern. Create an undefined
1342 // instruction in case this is ever executed. 1344 // instruction in case this is ever executed.
1343 return OP_UNDEFINED; 1345 return OP_UNDEFINED;
1344 } 1346 }
1345 uint8_t bit23 = (insn >> 23) & 0x1; 1347 u8 bit23 = (insn >> 23) & 0x1;
1346 uint8_t bit22_U = (insn >> 22) & 0x1; 1348 u8 bit22_U = (insn >> 22) & 0x1;
1347 uint8_t bit21_A = (insn >> 21) & 0x1; 1349 u8 bit21_A = (insn >> 21) & 0x1;
1348 if (bit23 == 0) { 1350 if (bit23 == 0) {
1349 // 32-bit multiply 1351 // 32-bit multiply
1350 if (bit22_U != 0) { 1352 if (bit22_U != 0) {
@@ -1369,10 +1371,10 @@ Opcode ARM_Disasm::DecodeMUL(uint32_t insn) {
1369 return OP_SMLAL; 1371 return OP_SMLAL;
1370} 1372}
1371 1373
1372Opcode ARM_Disasm::DecodeMSRImmAndHints(uint32_t insn) { 1374Opcode ARM_Disasm::DecodeMSRImmAndHints(u32 insn) {
1373 uint32_t op = BIT(insn, 22); 1375 u32 op = BIT(insn, 22);
1374 uint32_t op1 = BITS(insn, 16, 19); 1376 u32 op1 = BITS(insn, 16, 19);
1375 uint32_t op2 = BITS(insn, 0, 7); 1377 u32 op2 = BITS(insn, 0, 7);
1376 1378
1377 if (op == 0 && op1 == 0) { 1379 if (op == 0 && op1 == 0) {
1378 switch (op2) { 1380 switch (op2) {
@@ -1394,10 +1396,10 @@ Opcode ARM_Disasm::DecodeMSRImmAndHints(uint32_t insn) {
1394 return OP_MSR; 1396 return OP_MSR;
1395} 1397}
1396 1398
1397Opcode ARM_Disasm::DecodeMediaMulDiv(uint32_t insn) { 1399Opcode ARM_Disasm::DecodeMediaMulDiv(u32 insn) {
1398 uint32_t op1 = BITS(insn, 20, 22); 1400 u32 op1 = BITS(insn, 20, 22);
1399 uint32_t op2_h = BITS(insn, 6, 7); 1401 u32 op2_h = BITS(insn, 6, 7);
1400 uint32_t a = BITS(insn, 12, 15); 1402 u32 a = BITS(insn, 12, 15);
1401 1403
1402 switch (op1) { 1404 switch (op1) {
1403 case 0x0: 1405 case 0x0:
@@ -1436,10 +1438,10 @@ Opcode ARM_Disasm::DecodeMediaMulDiv(uint32_t insn) {
1436 return OP_UNDEFINED; 1438 return OP_UNDEFINED;
1437} 1439}
1438 1440
1439Opcode ARM_Disasm::DecodeMedia(uint32_t insn) { 1441Opcode ARM_Disasm::DecodeMedia(u32 insn) {
1440 uint32_t op1 = BITS(insn, 20, 24); 1442 u32 op1 = BITS(insn, 20, 24);
1441 uint32_t rd = BITS(insn, 12, 15); 1443 u32 rd = BITS(insn, 12, 15);
1442 uint32_t op2 = BITS(insn, 5, 7); 1444 u32 op2 = BITS(insn, 5, 7);
1443 1445
1444 switch (BITS(op1, 3, 4)) { 1446 switch (BITS(op1, 3, 4)) {
1445 case 0x0: 1447 case 0x0:
@@ -1464,9 +1466,9 @@ Opcode ARM_Disasm::DecodeMedia(uint32_t insn) {
1464 return OP_UNDEFINED; 1466 return OP_UNDEFINED;
1465} 1467}
1466 1468
1467Opcode ARM_Disasm::DecodeLDRH(uint32_t insn) { 1469Opcode ARM_Disasm::DecodeLDRH(u32 insn) {
1468 uint8_t is_load = (insn >> 20) & 0x1; 1470 u8 is_load = (insn >> 20) & 0x1;
1469 uint8_t bits_65 = (insn >> 5) & 0x3; 1471 u8 bits_65 = (insn >> 5) & 0x3;
1470 if (is_load) { 1472 if (is_load) {
1471 if (bits_65 == 0x1) { 1473 if (bits_65 == 0x1) {
1472 // Load unsigned halfword 1474 // Load unsigned halfword
@@ -1494,12 +1496,12 @@ Opcode ARM_Disasm::DecodeLDRH(uint32_t insn) {
1494 return OP_STRH; 1496 return OP_STRH;
1495} 1497}
1496 1498
1497Opcode ARM_Disasm::DecodeALU(uint32_t insn) { 1499Opcode ARM_Disasm::DecodeALU(u32 insn) {
1498 uint8_t is_immed = (insn >> 25) & 0x1; 1500 u8 is_immed = (insn >> 25) & 0x1;
1499 uint8_t opcode = (insn >> 21) & 0xf; 1501 u8 opcode = (insn >> 21) & 0xf;
1500 uint8_t bit_s = (insn >> 20) & 1; 1502 u8 bit_s = (insn >> 20) & 1;
1501 uint8_t shift_is_reg = (insn >> 4) & 1; 1503 u8 shift_is_reg = (insn >> 4) & 1;
1502 uint8_t bit7 = (insn >> 7) & 1; 1504 u8 bit7 = (insn >> 7) & 1;
1503 if (!is_immed && shift_is_reg && (bit7 != 0)) { 1505 if (!is_immed && shift_is_reg && (bit7 != 0)) {
1504 // This is an unexpected bit pattern. Create an undefined 1506 // This is an unexpected bit pattern. Create an undefined
1505 // instruction in case this is ever executed. 1507 // instruction in case this is ever executed.
diff --git a/src/core/arm/disassembler/arm_disasm.h b/src/core/arm/disassembler/arm_disasm.h
index 259a77861..53d9c6a74 100644
--- a/src/core/arm/disassembler/arm_disasm.h
+++ b/src/core/arm/disassembler/arm_disasm.h
@@ -2,9 +2,10 @@
2 2
3#pragma once 3#pragma once
4 4
5#include <cstdint>
6#include <string> 5#include <string>
7 6
7#include "common/common_types.h"
8
8// Note: this list of opcodes must match the list used to initialize 9// Note: this list of opcodes must match the list used to initialize
9// the opflags[] array in opcode.cpp. 10// the opflags[] array in opcode.cpp.
10enum Opcode { 11enum Opcode {
@@ -191,48 +192,48 @@ enum Opcode {
191 192
192class ARM_Disasm { 193class ARM_Disasm {
193 public: 194 public:
194 static std::string Disassemble(uint32_t addr, uint32_t insn); 195 static std::string Disassemble(u32 addr, u32 insn);
195 static Opcode Decode(uint32_t insn); 196 static Opcode Decode(u32 insn);
196 197
197 private: 198 private:
198 static Opcode Decode00(uint32_t insn); 199 static Opcode Decode00(u32 insn);
199 static Opcode Decode01(uint32_t insn); 200 static Opcode Decode01(u32 insn);
200 static Opcode Decode10(uint32_t insn); 201 static Opcode Decode10(u32 insn);
201 static Opcode Decode11(uint32_t insn); 202 static Opcode Decode11(u32 insn);
202 static Opcode DecodeSyncPrimitive(uint32_t insn); 203 static Opcode DecodeSyncPrimitive(u32 insn);
203 static Opcode DecodeParallelAddSub(uint32_t insn); 204 static Opcode DecodeParallelAddSub(u32 insn);
204 static Opcode DecodePackingSaturationReversal(uint32_t insn); 205 static Opcode DecodePackingSaturationReversal(u32 insn);
205 static Opcode DecodeMUL(uint32_t insn); 206 static Opcode DecodeMUL(u32 insn);
206 static Opcode DecodeMSRImmAndHints(uint32_t insn); 207 static Opcode DecodeMSRImmAndHints(u32 insn);
207 static Opcode DecodeMediaMulDiv(uint32_t insn); 208 static Opcode DecodeMediaMulDiv(u32 insn);
208 static Opcode DecodeMedia(uint32_t insn); 209 static Opcode DecodeMedia(u32 insn);
209 static Opcode DecodeLDRH(uint32_t insn); 210 static Opcode DecodeLDRH(u32 insn);
210 static Opcode DecodeALU(uint32_t insn); 211 static Opcode DecodeALU(u32 insn);
211 212
212 static std::string DisassembleALU(Opcode opcode, uint32_t insn); 213 static std::string DisassembleALU(Opcode opcode, u32 insn);
213 static std::string DisassembleBranch(uint32_t addr, Opcode opcode, uint32_t insn); 214 static std::string DisassembleBranch(u32 addr, Opcode opcode, u32 insn);
214 static std::string DisassembleBX(uint32_t insn); 215 static std::string DisassembleBX(u32 insn);
215 static std::string DisassembleBKPT(uint32_t insn); 216 static std::string DisassembleBKPT(u32 insn);
216 static std::string DisassembleCLZ(uint32_t insn); 217 static std::string DisassembleCLZ(u32 insn);
217 static std::string DisassembleMediaMulDiv(Opcode opcode, uint32_t insn); 218 static std::string DisassembleMediaMulDiv(Opcode opcode, u32 insn);
218 static std::string DisassembleMemblock(Opcode opcode, uint32_t insn); 219 static std::string DisassembleMemblock(Opcode opcode, u32 insn);
219 static std::string DisassembleMem(uint32_t insn); 220 static std::string DisassembleMem(u32 insn);
220 static std::string DisassembleMemHalf(uint32_t insn); 221 static std::string DisassembleMemHalf(u32 insn);
221 static std::string DisassembleMCR(Opcode opcode, uint32_t insn); 222 static std::string DisassembleMCR(Opcode opcode, u32 insn);
222 static std::string DisassembleMLA(Opcode opcode, uint32_t insn); 223 static std::string DisassembleMLA(Opcode opcode, u32 insn);
223 static std::string DisassembleUMLAL(Opcode opcode, uint32_t insn); 224 static std::string DisassembleUMLAL(Opcode opcode, u32 insn);
224 static std::string DisassembleMUL(Opcode opcode, uint32_t insn); 225 static std::string DisassembleMUL(Opcode opcode, u32 insn);
225 static std::string DisassembleMRS(uint32_t insn); 226 static std::string DisassembleMRS(u32 insn);
226 static std::string DisassembleMSR(uint32_t insn); 227 static std::string DisassembleMSR(u32 insn);
227 static std::string DisassembleNoOperands(Opcode opcode, uint32_t insn); 228 static std::string DisassembleNoOperands(Opcode opcode, u32 insn);
228 static std::string DisassembleParallelAddSub(Opcode opcode, uint32_t insn); 229 static std::string DisassembleParallelAddSub(Opcode opcode, u32 insn);
229 static std::string DisassemblePKH(uint32_t insn); 230 static std::string DisassemblePKH(u32 insn);
230 static std::string DisassemblePLD(uint32_t insn); 231 static std::string DisassemblePLD(u32 insn);
231 static std::string DisassembleREV(Opcode opcode, uint32_t insn); 232 static std::string DisassembleREV(Opcode opcode, u32 insn);
232 static std::string DisassembleREX(Opcode opcode, uint32_t insn); 233 static std::string DisassembleREX(Opcode opcode, u32 insn);
233 static std::string DisassembleSAT(Opcode opcode, uint32_t insn); 234 static std::string DisassembleSAT(Opcode opcode, u32 insn);
234 static std::string DisassembleSEL(uint32_t insn); 235 static std::string DisassembleSEL(u32 insn);
235 static std::string DisassembleSWI(uint32_t insn); 236 static std::string DisassembleSWI(u32 insn);
236 static std::string DisassembleSWP(Opcode opcode, uint32_t insn); 237 static std::string DisassembleSWP(Opcode opcode, u32 insn);
237 static std::string DisassembleXT(Opcode opcode, uint32_t insn); 238 static std::string DisassembleXT(Opcode opcode, u32 insn);
238}; 239};
diff --git a/src/core/arm/dyncom/arm_dyncom_interpreter.cpp b/src/core/arm/dyncom/arm_dyncom_interpreter.cpp
index b88b74752..422e80b50 100644
--- a/src/core/arm/dyncom/arm_dyncom_interpreter.cpp
+++ b/src/core/arm/dyncom/arm_dyncom_interpreter.cpp
@@ -7,6 +7,7 @@
7#include <algorithm> 7#include <algorithm>
8#include <cstdio> 8#include <cstdio>
9 9
10#include "common/common_types.h"
10#include "common/logging/log.h" 11#include "common/logging/log.h"
11#include "common/profiler.h" 12#include "common/profiler.h"
12 13
@@ -759,8 +760,8 @@ struct bx_inst {
759 760
760struct blx_inst { 761struct blx_inst {
761 union { 762 union {
762 int32_t signed_immed_24; 763 s32 signed_immed_24;
763 uint32_t Rm; 764 u32 Rm;
764 } val; 765 } val;
765 unsigned int inst; 766 unsigned int inst;
766}; 767};
@@ -3544,7 +3545,7 @@ static int InterpreterTranslate(ARMul_State* cpu, int& bb_start, u32 addr) {
3544 size++; 3545 size++;
3545 // If we are in Thumb mode, we'll translate one Thumb instruction to the corresponding ARM instruction 3546 // If we are in Thumb mode, we'll translate one Thumb instruction to the corresponding ARM instruction
3546 if (cpu->TFlag) { 3547 if (cpu->TFlag) {
3547 uint32_t arm_inst; 3548 u32 arm_inst;
3548 ThumbDecodeStatus state = DecodeThumbInstruction(inst, phys_addr, &arm_inst, &inst_size, &inst_base); 3549 ThumbDecodeStatus state = DecodeThumbInstruction(inst, phys_addr, &arm_inst, &inst_size, &inst_base);
3549 3550
3550 // We have translated the Thumb branch instruction in the Thumb decoder 3551 // We have translated the Thumb branch instruction in the Thumb decoder
@@ -4215,8 +4216,8 @@ unsigned InterpreterMainLoop(ARMul_State* cpu) {
4215 CPS_INST: 4216 CPS_INST:
4216 { 4217 {
4217 cps_inst *inst_cream = (cps_inst *)inst_base->component; 4218 cps_inst *inst_cream = (cps_inst *)inst_base->component;
4218 uint32_t aif_val = 0; 4219 u32 aif_val = 0;
4219 uint32_t aif_mask = 0; 4220 u32 aif_mask = 0;
4220 if (cpu->InAPrivilegedMode()) { 4221 if (cpu->InAPrivilegedMode()) {
4221 if (inst_cream->imod1) { 4222 if (inst_cream->imod1) {
4222 if (inst_cream->A) { 4223 if (inst_cream->A) {
@@ -4710,11 +4711,11 @@ unsigned InterpreterMainLoop(ARMul_State* cpu) {
4710 if (inst_base->cond == 0xE || CondPassed(cpu, inst_base->cond)) { 4711 if (inst_base->cond == 0xE || CondPassed(cpu, inst_base->cond)) {
4711 mla_inst* inst_cream = (mla_inst*)inst_base->component; 4712 mla_inst* inst_cream = (mla_inst*)inst_base->component;
4712 4713
4713 uint64_t rm = RM; 4714 u64 rm = RM;
4714 uint64_t rs = RS; 4715 u64 rs = RS;
4715 uint64_t rn = RN; 4716 u64 rn = RN;
4716 4717
4717 RD = static_cast<uint32_t>((rm * rs + rn) & 0xffffffff); 4718 RD = static_cast<u32>((rm * rs + rn) & 0xffffffff);
4718 if (inst_cream->S) { 4719 if (inst_cream->S) {
4719 UPDATE_NFLAG(RD); 4720 UPDATE_NFLAG(RD);
4720 UPDATE_ZFLAG(RD); 4721 UPDATE_ZFLAG(RD);
@@ -4819,7 +4820,7 @@ unsigned InterpreterMainLoop(ARMul_State* cpu) {
4819 { 4820 {
4820 if (inst_base->cond == 0xE || CondPassed(cpu, inst_base->cond)) { 4821 if (inst_base->cond == 0xE || CondPassed(cpu, inst_base->cond)) {
4821 msr_inst* inst_cream = (msr_inst*)inst_base->component; 4822 msr_inst* inst_cream = (msr_inst*)inst_base->component;
4822 const uint32_t UserMask = 0xf80f0200, PrivMask = 0x000001df, StateMask = 0x01000020; 4823 const u32 UserMask = 0xf80f0200, PrivMask = 0x000001df, StateMask = 0x01000020;
4823 unsigned int inst = inst_cream->inst; 4824 unsigned int inst = inst_cream->inst;
4824 unsigned int operand; 4825 unsigned int operand;
4825 4826
@@ -4829,9 +4830,9 @@ unsigned InterpreterMainLoop(ARMul_State* cpu) {
4829 } else { 4830 } else {
4830 operand = cpu->Reg[BITS(inst, 0, 3)]; 4831 operand = cpu->Reg[BITS(inst, 0, 3)];
4831 } 4832 }
4832 uint32_t byte_mask = (BIT(inst, 16) ? 0xff : 0) | (BIT(inst, 17) ? 0xff00 : 0) 4833 u32 byte_mask = (BIT(inst, 16) ? 0xff : 0) | (BIT(inst, 17) ? 0xff00 : 0)
4833 | (BIT(inst, 18) ? 0xff0000 : 0) | (BIT(inst, 19) ? 0xff000000 : 0); 4834 | (BIT(inst, 18) ? 0xff0000 : 0) | (BIT(inst, 19) ? 0xff000000 : 0);
4834 uint32_t mask = 0; 4835 u32 mask = 0;
4835 if (!inst_cream->R) { 4836 if (!inst_cream->R) {
4836 if (cpu->InAPrivilegedMode()) { 4837 if (cpu->InAPrivilegedMode()) {
4837 if ((operand & StateMask) != 0) { 4838 if ((operand & StateMask) != 0) {
@@ -4864,9 +4865,9 @@ unsigned InterpreterMainLoop(ARMul_State* cpu) {
4864 if (inst_base->cond == 0xE || CondPassed(cpu, inst_base->cond)) { 4865 if (inst_base->cond == 0xE || CondPassed(cpu, inst_base->cond)) {
4865 mul_inst* inst_cream = (mul_inst*)inst_base->component; 4866 mul_inst* inst_cream = (mul_inst*)inst_base->component;
4866 4867
4867 uint64_t rm = RM; 4868 u64 rm = RM;
4868 uint64_t rs = RS; 4869 u64 rs = RS;
4869 RD = static_cast<uint32_t>((rm * rs) & 0xffffffff); 4870 RD = static_cast<u32>((rm * rs) & 0xffffffff);
4870 if (inst_cream->S) { 4871 if (inst_cream->S) {
4871 UPDATE_NFLAG(RD); 4872 UPDATE_NFLAG(RD);
4872 UPDATE_ZFLAG(RD); 4873 UPDATE_ZFLAG(RD);
@@ -5532,7 +5533,7 @@ unsigned InterpreterMainLoop(ARMul_State* cpu) {
5532 { 5533 {
5533 if (inst_base->cond == 0xE || CondPassed(cpu, inst_base->cond)) { 5534 if (inst_base->cond == 0xE || CondPassed(cpu, inst_base->cond)) {
5534 smla_inst* inst_cream = (smla_inst*)inst_base->component; 5535 smla_inst* inst_cream = (smla_inst*)inst_base->component;
5535 int32_t operand1, operand2; 5536 s32 operand1, operand2;
5536 if (inst_cream->x == 0) 5537 if (inst_cream->x == 0)
5537 operand1 = (BIT(RM, 15)) ? (BITS(RM, 0, 15) | 0xffff0000) : BITS(RM, 0, 15); 5538 operand1 = (BIT(RM, 15)) ? (BITS(RM, 0, 15) | 0xffff0000) : BITS(RM, 0, 15);
5538 else 5539 else
@@ -5771,7 +5772,7 @@ unsigned InterpreterMainLoop(ARMul_State* cpu) {
5771 { 5772 {
5772 if (inst_base->cond == 0xE || CondPassed(cpu, inst_base->cond)) { 5773 if (inst_base->cond == 0xE || CondPassed(cpu, inst_base->cond)) {
5773 smul_inst* inst_cream = (smul_inst*)inst_base->component; 5774 smul_inst* inst_cream = (smul_inst*)inst_base->component;
5774 uint32_t operand1, operand2; 5775 u32 operand1, operand2;
5775 if (inst_cream->x == 0) 5776 if (inst_cream->x == 0)
5776 operand1 = (BIT(RM, 15)) ? (BITS(RM, 0, 15) | 0xffff0000) : BITS(RM, 0, 15); 5777 operand1 = (BIT(RM, 15)) ? (BITS(RM, 0, 15) | 0xffff0000) : BITS(RM, 0, 15);
5777 else 5778 else
@@ -5792,15 +5793,15 @@ unsigned InterpreterMainLoop(ARMul_State* cpu) {
5792 { 5793 {
5793 if (inst_base->cond == 0xE || CondPassed(cpu, inst_base->cond)) { 5794 if (inst_base->cond == 0xE || CondPassed(cpu, inst_base->cond)) {
5794 umull_inst* inst_cream = (umull_inst*)inst_base->component; 5795 umull_inst* inst_cream = (umull_inst*)inst_base->component;
5795 int64_t rm = RM; 5796 s64 rm = RM;
5796 int64_t rs = RS; 5797 s64 rs = RS;
5797 if (BIT(rm, 31)) { 5798 if (BIT(rm, 31)) {
5798 rm |= 0xffffffff00000000LL; 5799 rm |= 0xffffffff00000000LL;
5799 } 5800 }
5800 if (BIT(rs, 31)) { 5801 if (BIT(rs, 31)) {
5801 rs |= 0xffffffff00000000LL; 5802 rs |= 0xffffffff00000000LL;
5802 } 5803 }
5803 int64_t rst = rm * rs; 5804 s64 rst = rm * rs;
5804 RDHI = BITS(rst, 32, 63); 5805 RDHI = BITS(rst, 32, 63);
5805 RDLO = BITS(rst, 0, 31); 5806 RDLO = BITS(rst, 0, 31);
5806 5807
diff --git a/src/core/arm/skyeye_common/vfp/vfp.cpp b/src/core/arm/skyeye_common/vfp/vfp.cpp
index 26f303de4..0537135e2 100644
--- a/src/core/arm/skyeye_common/vfp/vfp.cpp
+++ b/src/core/arm/skyeye_common/vfp/vfp.cpp
@@ -21,6 +21,7 @@
21/* Note: this file handles interface with arm core and vfp registers */ 21/* Note: this file handles interface with arm core and vfp registers */
22 22
23#include "common/common_funcs.h" 23#include "common/common_funcs.h"
24#include "common/common_types.h"
24#include "common/logging/log.h" 25#include "common/logging/log.h"
25 26
26#include "core/arm/skyeye_common/armstate.h" 27#include "core/arm/skyeye_common/armstate.h"
@@ -110,30 +111,30 @@ void VMOVR(ARMul_State* state, u32 single, u32 d, u32 m)
110} 111}
111 112
112/* Miscellaneous functions */ 113/* Miscellaneous functions */
113int32_t vfp_get_float(ARMul_State* state, unsigned int reg) 114s32 vfp_get_float(ARMul_State* state, unsigned int reg)
114{ 115{
115 LOG_TRACE(Core_ARM11, "VFP get float: s%d=[%08x]\n", reg, state->ExtReg[reg]); 116 LOG_TRACE(Core_ARM11, "VFP get float: s%d=[%08x]\n", reg, state->ExtReg[reg]);
116 return state->ExtReg[reg]; 117 return state->ExtReg[reg];
117} 118}
118 119
119void vfp_put_float(ARMul_State* state, int32_t val, unsigned int reg) 120void vfp_put_float(ARMul_State* state, s32 val, unsigned int reg)
120{ 121{
121 LOG_TRACE(Core_ARM11, "VFP put float: s%d <= [%08x]\n", reg, val); 122 LOG_TRACE(Core_ARM11, "VFP put float: s%d <= [%08x]\n", reg, val);
122 state->ExtReg[reg] = val; 123 state->ExtReg[reg] = val;
123} 124}
124 125
125uint64_t vfp_get_double(ARMul_State* state, unsigned int reg) 126u64 vfp_get_double(ARMul_State* state, unsigned int reg)
126{ 127{
127 uint64_t result = ((uint64_t) state->ExtReg[reg*2+1])<<32 | state->ExtReg[reg*2]; 128 u64 result = ((u64) state->ExtReg[reg*2+1])<<32 | state->ExtReg[reg*2];
128 LOG_TRACE(Core_ARM11, "VFP get double: s[%d-%d]=[%016llx]\n", reg * 2 + 1, reg * 2, result); 129 LOG_TRACE(Core_ARM11, "VFP get double: s[%d-%d]=[%016llx]\n", reg * 2 + 1, reg * 2, result);
129 return result; 130 return result;
130} 131}
131 132
132void vfp_put_double(ARMul_State* state, uint64_t val, unsigned int reg) 133void vfp_put_double(ARMul_State* state, u64 val, unsigned int reg)
133{ 134{
134 LOG_TRACE(Core_ARM11, "VFP put double: s[%d-%d] <= [%08x-%08x]\n", reg * 2 + 1, reg * 2, (uint32_t)(val >> 32), (uint32_t)(val & 0xffffffff)); 135 LOG_TRACE(Core_ARM11, "VFP put double: s[%d-%d] <= [%08x-%08x]\n", reg * 2 + 1, reg * 2, (u32)(val >> 32), (u32)(val & 0xffffffff));
135 state->ExtReg[reg*2] = (uint32_t) (val & 0xffffffff); 136 state->ExtReg[reg*2] = (u32) (val & 0xffffffff);
136 state->ExtReg[reg*2+1] = (uint32_t) (val>>32); 137 state->ExtReg[reg*2+1] = (u32) (val>>32);
137} 138}
138 139
139/* 140/*
diff --git a/src/core/tracer/citrace.h b/src/core/tracer/citrace.h
index 5deb6ce9e..709abdfb3 100644
--- a/src/core/tracer/citrace.h
+++ b/src/core/tracer/citrace.h
@@ -4,7 +4,7 @@
4 4
5#pragma once 5#pragma once
6 6
7#include <cstdint> 7#include "common/common_types.h"
8 8
9namespace CiTrace { 9namespace CiTrace {
10 10
@@ -17,38 +17,38 @@ struct CTHeader {
17 return "CiTr"; 17 return "CiTr";
18 } 18 }
19 19
20 static uint32_t ExpectedVersion() { 20 static u32 ExpectedVersion() {
21 return 1; 21 return 1;
22 } 22 }
23 23
24 char magic[4]; 24 char magic[4];
25 uint32_t version; 25 u32 version;
26 uint32_t header_size; 26 u32 header_size;
27 27
28 struct { 28 struct {
29 // NOTE: Register range sizes are technically hardware-constants, but the actual limits 29 // NOTE: Register range sizes are technically hardware-constants, but the actual limits
30 // aren't known. Hence we store the presumed limits along the offsets. 30 // aren't known. Hence we store the presumed limits along the offsets.
31 // Sizes are given in uint32_t units. 31 // Sizes are given in u32 units.
32 uint32_t gpu_registers; 32 u32 gpu_registers;
33 uint32_t gpu_registers_size; 33 u32 gpu_registers_size;
34 uint32_t lcd_registers; 34 u32 lcd_registers;
35 uint32_t lcd_registers_size; 35 u32 lcd_registers_size;
36 uint32_t pica_registers; 36 u32 pica_registers;
37 uint32_t pica_registers_size; 37 u32 pica_registers_size;
38 uint32_t default_attributes; 38 u32 default_attributes;
39 uint32_t default_attributes_size; 39 u32 default_attributes_size;
40 uint32_t vs_program_binary; 40 u32 vs_program_binary;
41 uint32_t vs_program_binary_size; 41 u32 vs_program_binary_size;
42 uint32_t vs_swizzle_data; 42 u32 vs_swizzle_data;
43 uint32_t vs_swizzle_data_size; 43 u32 vs_swizzle_data_size;
44 uint32_t vs_float_uniforms; 44 u32 vs_float_uniforms;
45 uint32_t vs_float_uniforms_size; 45 u32 vs_float_uniforms_size;
46 uint32_t gs_program_binary; 46 u32 gs_program_binary;
47 uint32_t gs_program_binary_size; 47 u32 gs_program_binary_size;
48 uint32_t gs_swizzle_data; 48 u32 gs_swizzle_data;
49 uint32_t gs_swizzle_data_size; 49 u32 gs_swizzle_data_size;
50 uint32_t gs_float_uniforms; 50 u32 gs_float_uniforms;
51 uint32_t gs_float_uniforms_size; 51 u32 gs_float_uniforms_size;
52 52
53 // Other things we might want to store here: 53 // Other things we might want to store here:
54 // - Initial framebuffer data, maybe even a full copy of FCRAM/VRAM 54 // - Initial framebuffer data, maybe even a full copy of FCRAM/VRAM
@@ -56,27 +56,27 @@ struct CTHeader {
56 // - Lookup tables for procedural textures 56 // - Lookup tables for procedural textures
57 } initial_state_offsets; 57 } initial_state_offsets;
58 58
59 uint32_t stream_offset; 59 u32 stream_offset;
60 uint32_t stream_size; 60 u32 stream_size;
61}; 61};
62 62
63enum CTStreamElementType : uint32_t { 63enum CTStreamElementType : u32 {
64 FrameMarker = 0xE1, 64 FrameMarker = 0xE1,
65 MemoryLoad = 0xE2, 65 MemoryLoad = 0xE2,
66 RegisterWrite = 0xE3, 66 RegisterWrite = 0xE3,
67}; 67};
68 68
69struct CTMemoryLoad { 69struct CTMemoryLoad {
70 uint32_t file_offset; 70 u32 file_offset;
71 uint32_t size; 71 u32 size;
72 uint32_t physical_address; 72 u32 physical_address;
73 uint32_t pad; 73 u32 pad;
74}; 74};
75 75
76struct CTRegisterWrite { 76struct CTRegisterWrite {
77 uint32_t physical_address; 77 u32 physical_address;
78 78
79 enum : uint32_t { 79 enum : u32 {
80 SIZE_8 = 0xD1, 80 SIZE_8 = 0xD1,
81 SIZE_16 = 0xD2, 81 SIZE_16 = 0xD2,
82 SIZE_32 = 0xD3, 82 SIZE_32 = 0xD3,
@@ -84,7 +84,7 @@ struct CTRegisterWrite {
84 } size; 84 } size;
85 85
86 // TODO: Make it clearer which bits of this member are used for sizes other than 32 bits 86 // TODO: Make it clearer which bits of this member are used for sizes other than 32 bits
87 uint64_t value; 87 u64 value;
88}; 88};
89 89
90struct CTStreamElement { 90struct CTStreamElement {
diff --git a/src/video_core/debug_utils/debug_utils.cpp b/src/video_core/debug_utils/debug_utils.cpp
index e9a858411..572b4fd62 100644
--- a/src/video_core/debug_utils/debug_utils.cpp
+++ b/src/video_core/debug_utils/debug_utils.cpp
@@ -18,6 +18,7 @@
18 18
19#include "common/assert.h" 19#include "common/assert.h"
20#include "common/color.h" 20#include "common/color.h"
21#include "common/common_types.h"
21#include "common/file_util.h" 22#include "common/file_util.h"
22#include "common/math_util.h" 23#include "common/math_util.h"
23#include "common/vector_math.h" 24#include "common/vector_math.h"
@@ -233,7 +234,7 @@ void DumpShader(const u32* binary_data, u32 binary_size, const u32* swizzle_data
233 234
234 dvle.main_offset_words = main_offset; 235 dvle.main_offset_words = main_offset;
235 dvle.output_register_table_offset = write_offset - dvlb.dvle_offset; 236 dvle.output_register_table_offset = write_offset - dvlb.dvle_offset;
236 dvle.output_register_table_size = static_cast<uint32_t>(output_info_table.size()); 237 dvle.output_register_table_size = static_cast<u32>(output_info_table.size());
237 QueueForWriting((u8*)output_info_table.data(), static_cast<u32>(output_info_table.size() * sizeof(OutputRegisterInfo))); 238 QueueForWriting((u8*)output_info_table.data(), static_cast<u32>(output_info_table.size() * sizeof(OutputRegisterInfo)));
238 239
239 // TODO: Create a label table for "main" 240 // TODO: Create a label table for "main"