Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/asmjit/asmjit.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoraegistudio <aegistudio@users.noreply.github.com>2022-11-10 12:11:05 +0300
committerGitHub <noreply@github.com>2022-11-10 12:11:05 +0300
commit5af57595a909bbd5114e3503ae88bdbb6169c7ea (patch)
treea1f373f51801d34b4ebbac56841980c72be3d286
parentae63ced6dd3bc281a959edd32704b27778622be0 (diff)
[Bug] Fixed LDURSW instruction on AArch64 (#389)
The instruction was wrongly described as supporting both W/X registers, however, it only supports X register.
-rw-r--r--src/asmjit/arm/a64instdb.cpp4
-rw-r--r--test/asmjit_test_assembler_a64.cpp4
2 files changed, 6 insertions, 2 deletions
diff --git a/src/asmjit/arm/a64instdb.cpp b/src/asmjit/arm/a64instdb.cpp
index 5b722b4..a3ea629 100644
--- a/src/asmjit/arm/a64instdb.cpp
+++ b/src/asmjit/arm/a64instdb.cpp
@@ -300,7 +300,7 @@ const InstInfo _instInfoTable[] = {
INST(Ldurh , BaseRM_SImm9 , (0b0111100001000000000000, 0b0000000000000000000000, kW , kZR, 0 , 0) , kRWI_W , 0 , 9 , 2153), // #230
INST(Ldursb , BaseRM_SImm9 , (0b0011100011000000000000, 0b0000000000000000000000, kWX, kZR, 22, 0) , kRWI_W , 0 , 10 , 2159), // #231
INST(Ldursh , BaseRM_SImm9 , (0b0111100011000000000000, 0b0000000000000000000000, kWX, kZR, 22, 0) , kRWI_W , 0 , 11 , 2166), // #232
- INST(Ldursw , BaseRM_SImm9 , (0b1011100010000000000000, 0b0000000000000000000000, kWX, kZR, 0 , 0) , kRWI_W , 0 , 12 , 2173), // #233
+ INST(Ldursw , BaseRM_SImm9 , (0b1011100010000000000000, 0b0000000000000000000000, kX, kZR, 0 , 0) , kRWI_W , 0 , 12 , 2173), // #233
INST(Ldxp , BaseLdxp , (0b1000100001111111000000, kWX, 30) , kRWI_WW , 0 , 1 , 2180), // #234
INST(Ldxr , BaseRM_NoImm , (0b1000100001011111011111, kWX, kZR, 30) , kRWI_W , 0 , 10 , 2185), // #235
INST(Ldxrb , BaseRM_NoImm , (0b0000100001011111011111, kW , kZR, 0 ) , kRWI_W , 0 , 11 , 2190), // #236
@@ -1275,7 +1275,7 @@ const BaseRM_SImm9 baseRM_SImm9[23] = {
{ 0b0111100001000000000000, 0b0000000000000000000000, kW , kZR, 0 , 0 }, // ldurh
{ 0b0011100011000000000000, 0b0000000000000000000000, kWX, kZR, 22, 0 }, // ldursb
{ 0b0111100011000000000000, 0b0000000000000000000000, kWX, kZR, 22, 0 }, // ldursh
- { 0b1011100010000000000000, 0b0000000000000000000000, kWX, kZR, 0 , 0 }, // ldursw
+ { 0b1011100010000000000000, 0b0000000000000000000000, kX, kZR, 0 , 0 }, // ldursw
{ 0b1101100110100000000010, 0b1101100110100000000001, kX, kSP, 0, 4 }, // st2g
{ 0b1101100100100000000010, 0b1101100100100000000001, kX, kSP, 0, 4 }, // stg
{ 0b1011100000000000000010, 0b0000000000000000000000, kWX, kZR, 30, 0 }, // sttr
diff --git a/test/asmjit_test_assembler_a64.cpp b/test/asmjit_test_assembler_a64.cpp
index 9b9a925..bbba4b6 100644
--- a/test/asmjit_test_assembler_a64.cpp
+++ b/test/asmjit_test_assembler_a64.cpp
@@ -746,6 +746,10 @@ static void ASMJIT_NOINLINE testA64AssemblerBase(AssemblerTester<a64::Assembler>
TEST_INSTRUCTION("411088B8", ldursw(x1, ptr(x2, 129)));
TEST_INSTRUCTION("E10380B8", ldursw(x1, ptr(sp)));
TEST_INSTRUCTION("E11388B8", ldursw(x1, ptr(sp, 129)));
+ TEST_INSTRUCTION("420080B8", ldursw(x2, ptr(x2)));
+ TEST_INSTRUCTION("421088B8", ldursw(x2, ptr(x2, 129)));
+ TEST_INSTRUCTION("E20380B8", ldursw(x2, ptr(sp)));
+ TEST_INSTRUCTION("E21388B8", ldursw(x2, ptr(sp, 129)));
TEST_INSTRUCTION("61087F88", ldxp(w1, w2, ptr(x3)));
TEST_INSTRUCTION("E10B7F88", ldxp(w1, w2, ptr(sp)));
TEST_INSTRUCTION("61087FC8", ldxp(x1, x2, ptr(x3)));