From a73ea9e111cc99b0a743209cbbf24569c24f1cda Mon Sep 17 00:00:00 2001 From: Lioncash Date: Mon, 22 Feb 2021 07:21:51 -0500 Subject: [PATCH 1/6] thumb32: Implement NOP --- src/frontend/A32/decoder/thumb32.inc | 2 +- src/frontend/A32/translate/impl/thumb32_control.cpp | 4 ++++ src/frontend/A32/translate/impl/translate_thumb.h | 1 + 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/frontend/A32/decoder/thumb32.inc b/src/frontend/A32/decoder/thumb32.inc index 01325409..db6b5b0f 100644 --- a/src/frontend/A32/decoder/thumb32.inc +++ b/src/frontend/A32/decoder/thumb32.inc @@ -95,7 +95,7 @@ INST(thumb32_MOVT, "MOVT", "11110i101100iiii0iiidd //INST(thumb32_MSR_reg_3, "MSR (reg)", "111100111000----10-0--1---0-----") //INST(thumb32_MSR_reg_4, "MSR (reg)", "111100111000----10-0--00--0-----") -//INST(thumb32_NOP, "NOP", "111100111010----10-0-00000000000") +INST(thumb32_NOP, "NOP", "11110011101011111000000000000000") //INST(thumb32_YIELD, "YIELD", "111100111010----10-0-00000000001") //INST(thumb32_WFE, "WFE", "111100111010----10-0-00000000010") //INST(thumb32_WFI, "WFI", "111100111010----10-0-00000000011") diff --git a/src/frontend/A32/translate/impl/thumb32_control.cpp b/src/frontend/A32/translate/impl/thumb32_control.cpp index ed2dc29b..9646ee2b 100644 --- a/src/frontend/A32/translate/impl/thumb32_control.cpp +++ b/src/frontend/A32/translate/impl/thumb32_control.cpp @@ -30,6 +30,10 @@ bool ThumbTranslatorVisitor::thumb32_ISB([[maybe_unused]] Imm<4> option) { return false; } +bool ThumbTranslatorVisitor::thumb32_NOP() { + return thumb16_NOP(); +} + bool ThumbTranslatorVisitor::thumb32_UDF() { return thumb16_UDF(); } diff --git a/src/frontend/A32/translate/impl/translate_thumb.h b/src/frontend/A32/translate/impl/translate_thumb.h index eae0f7c6..d97365e6 100644 --- a/src/frontend/A32/translate/impl/translate_thumb.h +++ b/src/frontend/A32/translate/impl/translate_thumb.h @@ -168,6 +168,7 @@ struct ThumbTranslatorVisitor final { bool thumb32_DMB(Imm<4> option); bool thumb32_DSB(Imm<4> option); bool thumb32_ISB(Imm<4> option); + bool thumb32_NOP(); bool thumb32_UDF(); // thumb32 branch instructions From 48fe7afe72defe979ffb6e11a61dd7628f70ea9e Mon Sep 17 00:00:00 2001 From: Lioncash Date: Mon, 22 Feb 2021 07:28:18 -0500 Subject: [PATCH 2/6] thumb32: Implement YIELD --- src/frontend/A32/decoder/thumb32.inc | 2 +- src/frontend/A32/translate/impl/thumb32_control.cpp | 4 ++++ src/frontend/A32/translate/impl/translate_thumb.h | 1 + 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/frontend/A32/decoder/thumb32.inc b/src/frontend/A32/decoder/thumb32.inc index db6b5b0f..2d452b85 100644 --- a/src/frontend/A32/decoder/thumb32.inc +++ b/src/frontend/A32/decoder/thumb32.inc @@ -96,7 +96,7 @@ INST(thumb32_MOVT, "MOVT", "11110i101100iiii0iiidd //INST(thumb32_MSR_reg_4, "MSR (reg)", "111100111000----10-0--00--0-----") INST(thumb32_NOP, "NOP", "11110011101011111000000000000000") -//INST(thumb32_YIELD, "YIELD", "111100111010----10-0-00000000001") +INST(thumb32_YIELD, "YIELD", "11110011101011111000000000000001") //INST(thumb32_WFE, "WFE", "111100111010----10-0-00000000010") //INST(thumb32_WFI, "WFI", "111100111010----10-0-00000000011") //INST(thumb32_SEV, "SEV", "111100111010----10-0-00000000100") diff --git a/src/frontend/A32/translate/impl/thumb32_control.cpp b/src/frontend/A32/translate/impl/thumb32_control.cpp index 9646ee2b..1578a60a 100644 --- a/src/frontend/A32/translate/impl/thumb32_control.cpp +++ b/src/frontend/A32/translate/impl/thumb32_control.cpp @@ -38,4 +38,8 @@ bool ThumbTranslatorVisitor::thumb32_UDF() { return thumb16_UDF(); } +bool ThumbTranslatorVisitor::thumb32_YIELD() { + return thumb16_YIELD(); +} + } // namespace Dynarmic::A32 diff --git a/src/frontend/A32/translate/impl/translate_thumb.h b/src/frontend/A32/translate/impl/translate_thumb.h index d97365e6..b185c852 100644 --- a/src/frontend/A32/translate/impl/translate_thumb.h +++ b/src/frontend/A32/translate/impl/translate_thumb.h @@ -170,6 +170,7 @@ struct ThumbTranslatorVisitor final { bool thumb32_ISB(Imm<4> option); bool thumb32_NOP(); bool thumb32_UDF(); + bool thumb32_YIELD(); // thumb32 branch instructions bool thumb32_BL_imm(Imm<1> S, Imm<10> hi, Imm<1> j1, Imm<1> j2, Imm<11> lo); From 3dc33c1257eb05529a59bc560f60b251d7332cd7 Mon Sep 17 00:00:00 2001 From: Lioncash Date: Mon, 22 Feb 2021 07:29:14 -0500 Subject: [PATCH 3/6] thumb32: Implement WFE --- src/frontend/A32/decoder/thumb32.inc | 2 +- src/frontend/A32/translate/impl/thumb32_control.cpp | 4 ++++ src/frontend/A32/translate/impl/translate_thumb.h | 1 + 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/frontend/A32/decoder/thumb32.inc b/src/frontend/A32/decoder/thumb32.inc index 2d452b85..f8d215a8 100644 --- a/src/frontend/A32/decoder/thumb32.inc +++ b/src/frontend/A32/decoder/thumb32.inc @@ -97,7 +97,7 @@ INST(thumb32_MOVT, "MOVT", "11110i101100iiii0iiidd INST(thumb32_NOP, "NOP", "11110011101011111000000000000000") INST(thumb32_YIELD, "YIELD", "11110011101011111000000000000001") -//INST(thumb32_WFE, "WFE", "111100111010----10-0-00000000010") +INST(thumb32_WFE, "WFE", "11110011101011111000000000000010") //INST(thumb32_WFI, "WFI", "111100111010----10-0-00000000011") //INST(thumb32_SEV, "SEV", "111100111010----10-0-00000000100") //INST(thumb32_SEVL, "SEVL", "111100111010----10-0-00000000101") diff --git a/src/frontend/A32/translate/impl/thumb32_control.cpp b/src/frontend/A32/translate/impl/thumb32_control.cpp index 1578a60a..463cbe94 100644 --- a/src/frontend/A32/translate/impl/thumb32_control.cpp +++ b/src/frontend/A32/translate/impl/thumb32_control.cpp @@ -38,6 +38,10 @@ bool ThumbTranslatorVisitor::thumb32_UDF() { return thumb16_UDF(); } +bool ThumbTranslatorVisitor::thumb32_WFE() { + return thumb16_WFE(); +} + bool ThumbTranslatorVisitor::thumb32_YIELD() { return thumb16_YIELD(); } diff --git a/src/frontend/A32/translate/impl/translate_thumb.h b/src/frontend/A32/translate/impl/translate_thumb.h index b185c852..171b81f5 100644 --- a/src/frontend/A32/translate/impl/translate_thumb.h +++ b/src/frontend/A32/translate/impl/translate_thumb.h @@ -170,6 +170,7 @@ struct ThumbTranslatorVisitor final { bool thumb32_ISB(Imm<4> option); bool thumb32_NOP(); bool thumb32_UDF(); + bool thumb32_WFE(); bool thumb32_YIELD(); // thumb32 branch instructions From 565a20b09601ff3a5ec8c844504a31d7ec14f274 Mon Sep 17 00:00:00 2001 From: Lioncash Date: Mon, 22 Feb 2021 07:30:14 -0500 Subject: [PATCH 4/6] thumb32: Implement WFI --- src/frontend/A32/decoder/thumb32.inc | 2 +- src/frontend/A32/translate/impl/thumb32_control.cpp | 4 ++++ src/frontend/A32/translate/impl/translate_thumb.h | 1 + 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/frontend/A32/decoder/thumb32.inc b/src/frontend/A32/decoder/thumb32.inc index f8d215a8..dc5963cc 100644 --- a/src/frontend/A32/decoder/thumb32.inc +++ b/src/frontend/A32/decoder/thumb32.inc @@ -98,7 +98,7 @@ INST(thumb32_MOVT, "MOVT", "11110i101100iiii0iiidd INST(thumb32_NOP, "NOP", "11110011101011111000000000000000") INST(thumb32_YIELD, "YIELD", "11110011101011111000000000000001") INST(thumb32_WFE, "WFE", "11110011101011111000000000000010") -//INST(thumb32_WFI, "WFI", "111100111010----10-0-00000000011") +INST(thumb32_WFI, "WFI", "11110011101011111000000000000011") //INST(thumb32_SEV, "SEV", "111100111010----10-0-00000000100") //INST(thumb32_SEVL, "SEVL", "111100111010----10-0-00000000101") //INST(thumb32_DBG, "DBG", "111100111010----10-0-0001111----") diff --git a/src/frontend/A32/translate/impl/thumb32_control.cpp b/src/frontend/A32/translate/impl/thumb32_control.cpp index 463cbe94..e4322e51 100644 --- a/src/frontend/A32/translate/impl/thumb32_control.cpp +++ b/src/frontend/A32/translate/impl/thumb32_control.cpp @@ -42,6 +42,10 @@ bool ThumbTranslatorVisitor::thumb32_WFE() { return thumb16_WFE(); } +bool ThumbTranslatorVisitor::thumb32_WFI() { + return thumb16_WFI(); +} + bool ThumbTranslatorVisitor::thumb32_YIELD() { return thumb16_YIELD(); } diff --git a/src/frontend/A32/translate/impl/translate_thumb.h b/src/frontend/A32/translate/impl/translate_thumb.h index 171b81f5..5423f4aa 100644 --- a/src/frontend/A32/translate/impl/translate_thumb.h +++ b/src/frontend/A32/translate/impl/translate_thumb.h @@ -171,6 +171,7 @@ struct ThumbTranslatorVisitor final { bool thumb32_NOP(); bool thumb32_UDF(); bool thumb32_WFE(); + bool thumb32_WFI(); bool thumb32_YIELD(); // thumb32 branch instructions From a4c9ec645f4521bd2d12de6e96c8a1ab078eedcb Mon Sep 17 00:00:00 2001 From: Lioncash Date: Mon, 22 Feb 2021 07:31:08 -0500 Subject: [PATCH 5/6] thumb32: Implement SEV --- src/frontend/A32/decoder/thumb32.inc | 2 +- src/frontend/A32/translate/impl/thumb32_control.cpp | 4 ++++ src/frontend/A32/translate/impl/translate_thumb.h | 1 + 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/frontend/A32/decoder/thumb32.inc b/src/frontend/A32/decoder/thumb32.inc index dc5963cc..ee9deec9 100644 --- a/src/frontend/A32/decoder/thumb32.inc +++ b/src/frontend/A32/decoder/thumb32.inc @@ -99,7 +99,7 @@ INST(thumb32_NOP, "NOP", "1111001110101111100000 INST(thumb32_YIELD, "YIELD", "11110011101011111000000000000001") INST(thumb32_WFE, "WFE", "11110011101011111000000000000010") INST(thumb32_WFI, "WFI", "11110011101011111000000000000011") -//INST(thumb32_SEV, "SEV", "111100111010----10-0-00000000100") +INST(thumb32_SEV, "SEV", "11110011101011111000000000000100") //INST(thumb32_SEVL, "SEVL", "111100111010----10-0-00000000101") //INST(thumb32_DBG, "DBG", "111100111010----10-0-0001111----") //INST(thumb32_CPS, "CPS", "111100111010----10-0------------") diff --git a/src/frontend/A32/translate/impl/thumb32_control.cpp b/src/frontend/A32/translate/impl/thumb32_control.cpp index e4322e51..fbe4b192 100644 --- a/src/frontend/A32/translate/impl/thumb32_control.cpp +++ b/src/frontend/A32/translate/impl/thumb32_control.cpp @@ -34,6 +34,10 @@ bool ThumbTranslatorVisitor::thumb32_NOP() { return thumb16_NOP(); } +bool ThumbTranslatorVisitor::thumb32_SEV() { + return thumb16_SEV(); +} + bool ThumbTranslatorVisitor::thumb32_UDF() { return thumb16_UDF(); } diff --git a/src/frontend/A32/translate/impl/translate_thumb.h b/src/frontend/A32/translate/impl/translate_thumb.h index 5423f4aa..4b41dc78 100644 --- a/src/frontend/A32/translate/impl/translate_thumb.h +++ b/src/frontend/A32/translate/impl/translate_thumb.h @@ -169,6 +169,7 @@ struct ThumbTranslatorVisitor final { bool thumb32_DSB(Imm<4> option); bool thumb32_ISB(Imm<4> option); bool thumb32_NOP(); + bool thumb32_SEV(); bool thumb32_UDF(); bool thumb32_WFE(); bool thumb32_WFI(); From de8e977bb12ddbdfe6bb0b82a3940b500c85cdf9 Mon Sep 17 00:00:00 2001 From: Lioncash Date: Mon, 22 Feb 2021 07:31:54 -0500 Subject: [PATCH 6/6] thumb32: Implement SEVL --- src/frontend/A32/decoder/thumb32.inc | 2 +- src/frontend/A32/translate/impl/thumb32_control.cpp | 4 ++++ src/frontend/A32/translate/impl/translate_thumb.h | 1 + 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/frontend/A32/decoder/thumb32.inc b/src/frontend/A32/decoder/thumb32.inc index ee9deec9..cd8b2d69 100644 --- a/src/frontend/A32/decoder/thumb32.inc +++ b/src/frontend/A32/decoder/thumb32.inc @@ -100,7 +100,7 @@ INST(thumb32_YIELD, "YIELD", "1111001110101111100000 INST(thumb32_WFE, "WFE", "11110011101011111000000000000010") INST(thumb32_WFI, "WFI", "11110011101011111000000000000011") INST(thumb32_SEV, "SEV", "11110011101011111000000000000100") -//INST(thumb32_SEVL, "SEVL", "111100111010----10-0-00000000101") +INST(thumb32_SEVL, "SEVL", "11110011101011111000000000000101") //INST(thumb32_DBG, "DBG", "111100111010----10-0-0001111----") //INST(thumb32_CPS, "CPS", "111100111010----10-0------------") diff --git a/src/frontend/A32/translate/impl/thumb32_control.cpp b/src/frontend/A32/translate/impl/thumb32_control.cpp index fbe4b192..9db2f0f3 100644 --- a/src/frontend/A32/translate/impl/thumb32_control.cpp +++ b/src/frontend/A32/translate/impl/thumb32_control.cpp @@ -38,6 +38,10 @@ bool ThumbTranslatorVisitor::thumb32_SEV() { return thumb16_SEV(); } +bool ThumbTranslatorVisitor::thumb32_SEVL() { + return thumb16_SEVL(); +} + bool ThumbTranslatorVisitor::thumb32_UDF() { return thumb16_UDF(); } diff --git a/src/frontend/A32/translate/impl/translate_thumb.h b/src/frontend/A32/translate/impl/translate_thumb.h index 4b41dc78..c340cc48 100644 --- a/src/frontend/A32/translate/impl/translate_thumb.h +++ b/src/frontend/A32/translate/impl/translate_thumb.h @@ -170,6 +170,7 @@ struct ThumbTranslatorVisitor final { bool thumb32_ISB(Imm<4> option); bool thumb32_NOP(); bool thumb32_SEV(); + bool thumb32_SEVL(); bool thumb32_UDF(); bool thumb32_WFE(); bool thumb32_WFI();