mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2026-05-24 03:09:36 +08:00
Merge remote-tracking branch 'origin/Ghidra_12.1'
This commit is contained in:
+10
-10
@@ -4,9 +4,9 @@
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
@@ -117,14 +117,14 @@ public class ARMAssemblyTest extends AbstractAssemblyTest {
|
||||
|
||||
@Test
|
||||
public void testAssemble_T_vmov_simd_immed() {
|
||||
assertOneCompatRestExact("vmov.i32 d0,simdExpand(0x0,0x0,0xb1)", "83:ff:11:00", THUMB,
|
||||
0x00010100, "vmov.i32 d0,simdExpand(0x0,0x0,0xb1)");
|
||||
assertOneCompatRestExact("vmov.i16 d0,simdExpand(0x0,0xa,0xb1)", "83:ff:11:0a", THUMB,
|
||||
0x00010100, "vmov.i16 d0,simdExpand(0x0,0xa,0xb1)");
|
||||
assertOneCompatRestExact("vmov.i32 d0,simdExpand(0x0,0xd,0xb1)", "83:ff:11:0d", THUMB,
|
||||
0x00010100, "vmov.i32 d0,simdExpand(0x0,0xd,0xb1)");
|
||||
assertOneCompatRestExact("vmov.i64 d0,simdExpand(0x1,0xe,0xb1)", "83:ff:31:0e", THUMB,
|
||||
0x00010100, "vmov.i64 d0,simdExpand(0x1,0xe,0xb1)");
|
||||
assertOneCompatRestExact("vmov.i32 d0,#0xb1", "83:ff:11:00", THUMB,
|
||||
0x00010100, "vmov.i32 d0,#0xb1");
|
||||
assertOneCompatRestExact("vmov.i16 d0,#0xb100", "83:ff:11:0a", THUMB,
|
||||
0x00010100, "vmov.i16 d0,#0xb100");
|
||||
assertOneCompatRestExact("vmov.i32 d0,#0xb1ffff", "83:ff:11:0d", THUMB,
|
||||
0x00010100, "vmov.i32 d0,#0xb1ffff");
|
||||
assertOneCompatRestExact("vmov.i64 d0,#-0xff0000ffffff01", "83:ff:31:0e", THUMB,
|
||||
0x00010100, "vmov.i64 d0,#-0xff0000ffffff01");
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
@@ -459,15 +459,31 @@ simdExpImm_8: "#"^imm is TMode=1 & thv_c2828 & thv_c1618 & thv_c0003 & thv_c111
|
||||
}
|
||||
|
||||
# cmode 110x I32
|
||||
simdExpImm_8: "#"^imm is TMode=0 & c2424 & c1618 & c0003 & c0911=6 & c0808
|
||||
[ imm = ((c2424 << 7) | (c1618 << 4) | c0003) << (8*(c0808+1)) | (c0808*(0xff << 8)) | 0xff; ] {
|
||||
simdExpImm_8: "#"^imm is TMode=0 & c2424 & c1618 & c0003 & c0911=6 & c0808=0
|
||||
[ imm = ((c2424 << 7) | (c1618 << 4) | c0003) << 8 | 0xff; ] {
|
||||
local val:8 = 0;
|
||||
val[0,32] = imm;
|
||||
val[32,32] = imm;
|
||||
export *[const]:8 val;
|
||||
}
|
||||
simdExpImm_8: "#"^imm is TMode=1 & thv_c2828 & thv_c1618 & thv_c0003 & thv_c0911=6 & thv_c0808
|
||||
[ imm = ((thv_c2828 << 7) | (thv_c1618 << 4) | thv_c0003) << (8*(thv_c0808+1)) | (thv_c0808*(0xff << 8)) | 0xff; ] {
|
||||
simdExpImm_8: "#"^imm is TMode=0 & c2424 & c1618 & c0003 & c0911=6 & c0808=1
|
||||
[ imm = ((c2424 << 7) | (c1618 << 4) | c0003) << 16 | 0xffff; ] {
|
||||
local val:8 = 0;
|
||||
val[0,32] = imm;
|
||||
val[32,32] = imm;
|
||||
export *[const]:8 val;
|
||||
}
|
||||
|
||||
simdExpImm_8: "#"^imm is TMode=1 & thv_c2828 & thv_c1618 & thv_c0003 & thv_c0911=6 & thv_c0808=0
|
||||
[ imm = ((thv_c2828 << 7) | (thv_c1618 << 4) | thv_c0003) << 8 | 0xff; ] {
|
||||
local val:8 = 0;
|
||||
val[0,32] = imm;
|
||||
val[32,32] = imm;
|
||||
export *[const]:8 val;
|
||||
}
|
||||
|
||||
simdExpImm_8: "#"^imm is TMode=1 & thv_c2828 & thv_c1618 & thv_c0003 & thv_c0911=6 & thv_c0808=1
|
||||
[ imm = ((thv_c2828 << 7) | (thv_c1618 << 4) | thv_c0003) << 16 | 0xffff; ] {
|
||||
local val:8 = 0;
|
||||
val[0,32] = imm;
|
||||
val[32,32] = imm;
|
||||
@@ -504,24 +520,24 @@ simdExpImm_8: "#"^imm is TMode=1 & thv_c2828 & thv_c1618 & thv_c0003 & thv_cmod
|
||||
|
||||
# op 1 cmode 1110 I64
|
||||
simdExpImm_8: "#"^imm is TMode=0 & c2424 & c1818 & c1717 & c1616 & c0303 & c0202 & c0101 & c0000 & cmode=0xe & c0505=1
|
||||
[ imm = ((1 << (8*c2424))-1 << 56) | ((1 << (8*c1818))-1 << 48) | ((1 << (8*c1717))-1 << 40) | ((1 << (8*c1616))-1 << 32) | ((1 << (8*c0303))-1 << 24) | ((1 << (8*c0202))-1 << 16) | ((1 << (8*c0101))-1 << 8) | (1 << (8*c0000))-1; ] {
|
||||
[ imm = ((0xff*c2424) << 56) | ((0xff*c1818) << 48) | ((0xff*c1717) << 40) | ((0xff*c1616) << 32) | ((0xff*c0303) << 24) | ((0xff*c0202) << 16) | ((0xff*c0101) << 8) | (0xff*c0000); ] {
|
||||
export *[const]:8 imm;
|
||||
}
|
||||
simdExpImm_8: "#"^imm is TMode=1 & thv_c2828 & thv_c1818 & thv_c1717 & thv_c1616 & thv_c0303 & thv_c0202 & thv_c0101 & thv_c0000 & thv_cmode=0xe & thv_c0505=1
|
||||
[ imm = ((1 << (8*thv_c2828))-1 << 56) | ((1 << (8*thv_c1818))-1 << 48) | ((1 << (8*thv_c1717))-1 << 40) | ((1 << (8*thv_c1616))-1 << 32) | ((1 << (8*thv_c0303))-1 << 24) | ((1 << (8*thv_c0202))-1 << 16) | ((1 << (8*thv_c0101))-1 << 8) | (1 << (8*thv_c0000))-1; ] {
|
||||
[ imm = ((0xff*thv_c2828) << 56) | ((0xff*thv_c1818) << 48) | ((0xff*thv_c1717)<< 40) | ((0xff*thv_c1616) << 32) | ((0xff*thv_c0303)<< 24) | ((0xff*thv_c0202) << 16) | ((0xff*thv_c0101) << 8) | (0xff*thv_c0000); ] {
|
||||
export *[const]:8 imm;
|
||||
}
|
||||
|
||||
# op 0 cmode 1111 F32
|
||||
simdExpImm_8: "#"^imm is TMode=0 & c2424 & c1818 & c1717 & c1616 & c0003 & cmode=0xf & c0505=0
|
||||
[ imm = (c2424 << 31) | ((~(c1818) & 0x1) << 30) | ((1 << (5*c1818))-1 << 25) | (c1717 << 24) | (c1616 << 23) | (c0003 << 19); ] {
|
||||
[ imm = (c2424 << 31) | ((~(c1818) & 0x1) << 30) | ((0x1f*c1818) << 25) | (c1717 << 24) | (c1616 << 23) | (c0003 << 19); ] {
|
||||
local val:8 = 0;
|
||||
val[0,32] = imm;
|
||||
val[32,32] = imm;
|
||||
export *[const]:8 val;
|
||||
}
|
||||
simdExpImm_8: "#"^imm is TMode=1 & thv_c2828 & thv_c1818 & thv_c1717 & thv_c1616 & thv_c0003 & thv_cmode=0xf & thv_c0505=0
|
||||
[ imm = (thv_c2828 << 31) | ((~(thv_c1818) & 0x1) << 30) | ((1 << (5*thv_c1818))-1 << 25) | (thv_c1717 << 24) | (thv_c1616 << 23) | (thv_c0003 << 19); ] {
|
||||
[ imm = (thv_c2828 << 31) | ((~(thv_c1818) & 0x1) << 30) | ((0x1f*thv_c1818) << 25) | (thv_c1717 << 24) | (thv_c1616 << 23) | (thv_c0003 << 19); ] {
|
||||
local val:8 = 0;
|
||||
val[0,32] = imm;
|
||||
val[32,32] = imm;
|
||||
@@ -576,16 +592,33 @@ simdExpImm_16: "#"^imm is TMode=1 & thv_c2828 & thv_c1618 & thv_c0003 & thv_c11
|
||||
}
|
||||
|
||||
# cmode 110x I32
|
||||
simdExpImm_16: "#"^imm is TMode=0 & c2424 & c1618 & c0003 & c0911=6 & c0808
|
||||
[ imm = ((c2424 << 7) | (c1618 << 4) | c0003) << (8*(c0808+1)) | (c0808*(0xff << 8)) | 0xff; ] {
|
||||
simdExpImm_16: "#"^imm is TMode=0 & c2424 & c1618 & c0003 & c0911=6 & c0808=0
|
||||
[ imm = ((c2424 << 7) | (c1618 << 4) | c0003) << 8 | 0xff; ] {
|
||||
local val:16 = 0;
|
||||
val[0,32] = imm;
|
||||
val[32,32] = imm;
|
||||
val = (val << 64) | val;
|
||||
export *[const]:16 val;
|
||||
}
|
||||
simdExpImm_16: "#"^imm is TMode=1 & thv_c2828 & thv_c1618 & thv_c0003 & thv_c0911=6 & thv_c0808
|
||||
[ imm = ((thv_c2828 << 7) | (thv_c1618 << 4) | thv_c0003) << (8*(thv_c0808+1)) | (thv_c0808*(0xff << 8)) | 0xff; ] {
|
||||
simdExpImm_16: "#"^imm is TMode=0 & c2424 & c1618 & c0003 & c0911=6 & c0808=1
|
||||
[ imm = ((c2424 << 7) | (c1618 << 4) | c0003) << 16 | 0xffff; ] {
|
||||
local val:16 = 0;
|
||||
val[0,32] = imm;
|
||||
val[32,32] = imm;
|
||||
val = (val << 64) | val;
|
||||
export *[const]:16 val;
|
||||
}
|
||||
|
||||
simdExpImm_16: "#"^imm is TMode=1 & thv_c2828 & thv_c1618 & thv_c0003 & thv_c0911=6 & thv_c0808=0
|
||||
[ imm = ((thv_c2828 << 7) | (thv_c1618 << 4) | thv_c0003) << 8 | 0xff; ] {
|
||||
local val:16 = 0;
|
||||
val[0,32] = imm;
|
||||
val[32,32] = imm;
|
||||
val = (val << 64) | val;
|
||||
export *[const]:16 val;
|
||||
}
|
||||
simdExpImm_16: "#"^imm is TMode=1 & thv_c2828 & thv_c1618 & thv_c0003 & thv_c0911=6 & thv_c0808=1
|
||||
[ imm = ((thv_c2828 << 7) | (thv_c1618 << 4) | thv_c0003) << 16 | 0xffff; ] {
|
||||
local val:16 = 0;
|
||||
val[0,32] = imm;
|
||||
val[32,32] = imm;
|
||||
@@ -625,14 +658,14 @@ simdExpImm_16: "#"^imm is TMode=1 & thv_c2828 & thv_c1618 & thv_c0003 & thv_cmo
|
||||
|
||||
# op 1 cmode 1110 I64
|
||||
simdExpImm_16: "#"^imm is TMode=0 & c2424 & c1818 & c1717 & c1616 & c0303 & c0202 & c0101 & c0000 & cmode=0xe & c0505=1
|
||||
[ imm = ((1 << (8*c2424))-1 << 56) | ((1 << (8*c1818))-1 << 48) | ((1 << (8*c1717))-1 << 40) | ((1 << (8*c1616))-1 << 32) | ((1 << (8*c0303))-1 << 24) | ((1 << (8*c0202))-1 << 16) | ((1 << (8*c0101))-1 << 8) | (1 << (8*c0000))-1; ] {
|
||||
[ imm = ((0xff*c2424) << 56) | ((0xff*c1818) << 48) | ((0xff*c1717) << 40) | ((0xff*c1616) << 32) | ((0xff*c0303) << 24) | ((0xff*c0202) << 16) | ((0xff*c0101) << 8) | (0xff*c0000); ] {
|
||||
local val:16 = 0;
|
||||
val[0,64] = imm;
|
||||
val = (val << 64) | val;
|
||||
export *[const]:16 val;
|
||||
}
|
||||
simdExpImm_16: "#"^imm is TMode=1 & thv_c2828 & thv_c1818 & thv_c1717 & thv_c1616 & thv_c0303 & thv_c0202 & thv_c0101 & thv_c0000 & thv_cmode=0xe & thv_c0505=1
|
||||
[ imm = ((1 << (8*thv_c2828))-1 << 56) | ((1 << (8*thv_c1818))-1 << 48) | ((1 << (8*thv_c1717))-1 << 40) | ((1 << (8*thv_c1616))-1 << 32) | ((1 << (8*thv_c0303))-1 << 24) | ((1 << (8*thv_c0202))-1 << 16) | ((1 << (8*thv_c0101))-1 << 8) | (1 << (8*thv_c0000))-1; ] {
|
||||
[ imm = ((0xff*thv_c2828) << 56) | ((0xff*thv_c1818) << 48) | ((0xff*thv_c1717) << 40) | ((0xff*thv_c1616) << 32) | ((0xff*thv_c0303) << 24) | ((0xff*thv_c0202) << 16) | ((0xff*thv_c0101) << 8) | (0xff*thv_c0000); ] {
|
||||
local val:16 = 0;
|
||||
val[0,64] = imm;
|
||||
val = (val << 64) | val;
|
||||
@@ -641,7 +674,7 @@ simdExpImm_16: "#"^imm is TMode=1 & thv_c2828 & thv_c1818 & thv_c1717 & thv_c16
|
||||
|
||||
# op 0 cmode 1111 F32
|
||||
simdExpImm_16: "#"^imm is TMode=0 & c2424 & c1818 & c1717 & c1616 & c0003 & cmode=0xf & c0505=0
|
||||
[ imm = (c2424 << 31) | ((~(c1818) & 0x1) << 30) | ((1 << (5*c1818))-1 << 25) | (c1717 << 24) | (c1616 << 23) | (c0003 << 19); ] {
|
||||
[ imm = (c2424 << 31) | ((~(c1818) & 0x1) << 30) | ((0x1f*c1818) << 25) | (c1717 << 24) | (c1616 << 23) | (c0003 << 19); ] {
|
||||
local val:16 = 0;
|
||||
val[0,32] = imm;
|
||||
val[32,32] = imm;
|
||||
@@ -649,7 +682,7 @@ simdExpImm_16: "#"^imm is TMode=0 & c2424 & c1818 & c1717 & c1616 & c0003 & cmo
|
||||
export *[const]:16 val;
|
||||
}
|
||||
simdExpImm_16: "#"^imm is TMode=1 & thv_c2828 & thv_c1818 & thv_c1717 & thv_c1616 & thv_c0003 & thv_cmode=0xf & thv_c0505=0
|
||||
[ imm = (thv_c2828 << 31) | ((~(thv_c1818) & 0x1) << 30) | ((1 << (5*thv_c1818))-1 << 25) | (thv_c1717 << 24) | (thv_c1616 << 23) | (thv_c0003 << 19); ] {
|
||||
[ imm = (thv_c2828 << 31) | ((~(thv_c1818) & 0x1) << 30) | ((0x1f*thv_c1818) << 25) | (thv_c1717 << 24) | (thv_c1616 << 23) | (thv_c0003 << 19); ] {
|
||||
local val:16 = 0;
|
||||
val[0,32] = imm;
|
||||
val[32,32] = imm;
|
||||
@@ -4335,7 +4368,7 @@ vldrRn16: "["^pc^",#-"^vldrImm^"]" is TMode=1 & thv_Rn=15 & pc & thv_immed & thv
|
||||
vldrRn16: "["^pc^",#"^vldrImm^"]" is TMode=1 & thv_Rn=15 & pc & thv_immed & thv_c2323=1 [ vldrImm = thv_immed * 2; ] { ptr:4 = ((inst_start + 4) & 0xfffffffc) + vldrImm; export ptr; }
|
||||
|
||||
|
||||
:vldr^COND^".16" Sd,vldrRn16 is COND & ( ($(AMODE) & ARMcond=1 & c2427=13 & c2021=1 & c0811=01) | ($(TMODE_E) & thv_c2427=13 & thv_c2021=1 & thv_c0811=01)) & Sd & vldrRn16
|
||||
:vldr^COND^".16" Sd,vldrRn16 is COND & ( ($(AMODE) & ARMcond=1 & c2427=13 & c2021=1 & c0811=9) | ($(TMODE_E) & thv_c2427=13 & thv_c2021=1 & thv_c0811=9)) & Sd & vldrRn16
|
||||
{
|
||||
Sd = *:2 vldrRn16;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user