mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2025-10-03 17:59:46 +02:00
Merge remote-tracking branch 'origin/GP-4702_emteere_PPCPseudoOpDestAssignPPC' into patch
This commit is contained in:
commit
217b08c741
2 changed files with 36 additions and 32 deletions
|
@ -2654,8 +2654,8 @@ define pcodeop ROTL64;
|
||||||
define pcodeop VectorSplatFractionalImmediate;
|
define pcodeop VectorSplatFractionalImmediate;
|
||||||
:evsplatfi D,BU_SIMM is OP=4 & D & BU_SIMM & XOP_0_10=0x22B {
|
:evsplatfi D,BU_SIMM is OP=4 & D & BU_SIMM & XOP_0_10=0x22B {
|
||||||
# TODO definition
|
# TODO definition
|
||||||
# RT0:31 ô SI || 270
|
# RT0:31 = SI || 270
|
||||||
# RT32:63 ô SI || 270
|
# RT32:63 = SI || 270
|
||||||
# The value specified by SI is padded with trailing zeros
|
# The value specified by SI is padded with trailing zeros
|
||||||
# and placed in both elements of RT. The SI ends up in
|
# and placed in both elements of RT. The SI ends up in
|
||||||
# bit positions RT0:4 and RT32:36.
|
# bit positions RT0:4 and RT32:36.
|
||||||
|
@ -2687,9 +2687,9 @@ define pcodeop VectorSplatImmediate;
|
||||||
define pcodeop VectorShiftRightWordImmediateSigned;
|
define pcodeop VectorShiftRightWordImmediateSigned;
|
||||||
:evsrwis D,A,EVUIMM is OP=4 & A & D & EVUIMM & XOP_0_10=0x223 {
|
:evsrwis D,A,EVUIMM is OP=4 & A & D & EVUIMM & XOP_0_10=0x223 {
|
||||||
# TODO definition
|
# TODO definition
|
||||||
# n ô UI
|
# n = UI
|
||||||
# RT0:31 ô EXTS((RA)0:31-n)
|
# RT0:31 = EXTS((RA)0:31-n)
|
||||||
# RT32:63 ô EXTS((RA)32:63-n)
|
# RT32:63 = EXTS((RA)32:63-n)
|
||||||
# Both high and low elements of RA are shifted right by
|
# Both high and low elements of RA are shifted right by
|
||||||
# the 5-bit UI value. Bits in the most significant positions
|
# the 5-bit UI value. Bits in the most significant positions
|
||||||
# vacated by the shift are filled with a copy of the sign bit.
|
# vacated by the shift are filled with a copy of the sign bit.
|
||||||
|
@ -2703,9 +2703,9 @@ define pcodeop VectorShiftRightWordImmediateSigned;
|
||||||
define pcodeop VectorShiftRightWordImmediateUnsigned;
|
define pcodeop VectorShiftRightWordImmediateUnsigned;
|
||||||
:evsrwiu D,A,EVUIMM is OP=4 & A & D & EVUIMM & XOP_0_10=0x222 {
|
:evsrwiu D,A,EVUIMM is OP=4 & A & D & EVUIMM & XOP_0_10=0x222 {
|
||||||
# TODO definition
|
# TODO definition
|
||||||
# n ô UI
|
# n = UI
|
||||||
# RT0:31 ô EXTZ((RA)0:31-n)
|
# RT0:31 = EXTZ((RA)0:31-n)
|
||||||
# RT32:63 ô EXTZ((RA)32:63-n)
|
# RT32:63 = EXTZ((RA)32:63-n)
|
||||||
# Both high and low elements of RA are shifted right by
|
# Both high and low elements of RA are shifted right by
|
||||||
# the 5-bit UI value; zeros are shifted into the most significant
|
# the 5-bit UI value; zeros are shifted into the most significant
|
||||||
# position.
|
# position.
|
||||||
|
|
|
@ -18,15 +18,19 @@ define pcodeop vectorShiftRightWordUnsigned;
|
||||||
vrD_64_0 = vrA_64_0 ^ vrB_64_0;
|
vrD_64_0 = vrA_64_0 ^ vrB_64_0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@if REGISTER_SIZE=="8"
|
||||||
:evmergehi S,A,B is OP=4 & S & A & B & XOP_0_10=556
|
:evmergehi S,A,B is OP=4 & S & A & B & XOP_0_10=556
|
||||||
{
|
{
|
||||||
vectorMergeHigh(S,A,B);
|
S[32,32] = A[32,32];
|
||||||
|
S[ 0,32] = B[ 0,32];
|
||||||
}
|
}
|
||||||
|
|
||||||
:evmergelo S,A,B is OP=4 & S & A & B & XOP_0_10=557
|
:evmergelo S,A,B is OP=4 & S & A & B & XOP_0_10=557
|
||||||
{
|
{
|
||||||
vectorMergeLow(S,A,B);
|
S[32,32] = A[0,32];
|
||||||
|
S[ 0,32] = B[0,32];
|
||||||
}
|
}
|
||||||
|
@endif
|
||||||
|
|
||||||
|
|
||||||
:evldd RT,dUI16PlusRAOrZeroAddress is OP=4 & RT & dUI16PlusRAOrZeroAddress & XOP_0_10=769
|
:evldd RT,dUI16PlusRAOrZeroAddress is OP=4 & RT & dUI16PlusRAOrZeroAddress & XOP_0_10=769
|
||||||
|
@ -41,19 +45,31 @@ define pcodeop vectorShiftRightWordUnsigned;
|
||||||
RT = *:8 ($(EATRUNC));
|
RT = *:8 ($(EATRUNC));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@if REGISTER_SIZE=="8"
|
||||||
@ifndef IS_ISA
|
@ifndef IS_ISA
|
||||||
:evsrws S,A,B is OP=4 & S & A & B & XOP_0_10=545
|
:evsrws S,A,B is OP=4 & S & A & B & XOP_0_10=545
|
||||||
{
|
{
|
||||||
vectorShiftRightWordSigned(S,A,B);
|
local low:4 = A[0,32];
|
||||||
|
local high:4 = A[32,32];
|
||||||
|
local low_shift:1 = B[0,5];
|
||||||
|
local high_shift:1 = B[32,5];
|
||||||
|
S[0,32] = low s>> zext(low_shift);
|
||||||
|
S[32,32] = high s>> zext(high_shift);
|
||||||
}
|
}
|
||||||
@endif
|
@endif
|
||||||
|
|
||||||
@ifndef IS_ISA
|
@ifndef IS_ISA
|
||||||
:evsrwu S,A,B is OP=4 & S & A & B & XOP_0_10=544
|
:evsrwu S,A,B is OP=4 & S & A & B & XOP_0_10=544
|
||||||
{
|
{
|
||||||
vectorShiftRightWordUnsigned(S,A,B);
|
local low:4 = A[0,32];
|
||||||
|
local high:4 = A[32,32];
|
||||||
|
local low_shift:1 = B[0,5];
|
||||||
|
local high_shift:1 = B[32,5];
|
||||||
|
S[0,32] = low >> zext(low_shift);
|
||||||
|
S[32,32] = high >> zext(high_shift);
|
||||||
}
|
}
|
||||||
@endif
|
@endif
|
||||||
|
@endif
|
||||||
|
|
||||||
:evstdd RS,dUI16PlusRAOrZeroAddress is OP=4 & RS & dUI16PlusRAOrZeroAddress & XOP_0_10=801
|
:evstdd RS,dUI16PlusRAOrZeroAddress is OP=4 & RS & dUI16PlusRAOrZeroAddress & XOP_0_10=801
|
||||||
{
|
{
|
||||||
|
@ -73,32 +89,20 @@ define pcodeop vectorShiftRightWordUnsigned;
|
||||||
RT = RA;
|
RT = RA;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@if REGISTER_SIZE=="8"
|
||||||
# evmergehilo rD,rA,rB 010 0010 1110
|
# evmergehilo rD,rA,rB 010 0010 1110
|
||||||
define pcodeop VectorMergeHighLow;
|
:evmergehilo S,A,B is OP=4 & S & A & B & XOP_0_10=558 {
|
||||||
:evmergehilo D,A,B is OP=4 & A & B & D & XOP_0_10=558 {
|
S[32,32] = A[32,32];
|
||||||
local lo = (A & 0x00000000FFFFFFFF);
|
S[ 0,32] = B[ 0,32];
|
||||||
local hi = ((A & 0xFFFFFFFF00000000) >> 32);
|
|
||||||
#local b_lo:$(REGISTER_SIZE) = (B & 0x00000000FFFFFFFF);
|
|
||||||
local b_hi:$(REGISTER_SIZE) = ((B & 0xFFFFFFFF00000000) >> 32);
|
|
||||||
|
|
||||||
lo = lo;
|
|
||||||
hi = b_hi;
|
|
||||||
|
|
||||||
D = ((hi << 32) | lo);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# evmergelohi rD,rA,rB 010 0010 1111
|
# evmergelohi rD,rA,rB 010 0010 1111
|
||||||
:evmergelohi D,A,B is OP=4 & D & A & B & XOP_0_10=559 {
|
:evmergelohi S,A,B is OP=4 & S & A & B & XOP_0_10=559 {
|
||||||
local lo = (A & 0x00000000FFFFFFFF);
|
S[32,32] = A[ 0,32];
|
||||||
local hi = ((A & 0xFFFFFFFF00000000) >> 32);
|
S[ 0,32] = B[32,32];
|
||||||
local b_lo:$(REGISTER_SIZE) = (B & 0x00000000FFFFFFFF);
|
|
||||||
#local b_hi:$(REGISTER_SIZE) = ((B & 0xFFFFFFFF00000000) >> 32);
|
|
||||||
|
|
||||||
lo = lo;
|
|
||||||
hi = b_lo;
|
|
||||||
|
|
||||||
D = ((hi << 32) | lo);
|
|
||||||
}
|
}
|
||||||
|
@endif
|
||||||
|
|
||||||
# evstwwe rS,rA,UIMM 011 0011 1001
|
# evstwwe rS,rA,UIMM 011 0011 1001
|
||||||
:evstwwe RS,dUI16PlusRAOrZeroAddress is OP=4 & RS & dUI16PlusRAOrZeroAddress & XOP_0_10=0x339
|
:evstwwe RS,dUI16PlusRAOrZeroAddress is OP=4 & RS & dUI16PlusRAOrZeroAddress & XOP_0_10=0x339
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue