ghidra/Ghidra/Processors/PowerPC/data/languages/altivec.sinc

1853 lines
53 KiB
Plaintext

# altivec pcodes are stubbed out with pseudocode calls
define pcodeop dataStreamStop;
define pcodeop dataStreamStopAll;
define pcodeop dataStreamTouch;
define pcodeop dataStreamTouchSoon;
define pcodeop dataStreamTouchForStore;
define pcodeop dataStreamTouchForStoreTransient;
define pcodeop loadVectorElementByteIndexed;
define pcodeop loadVectorElementHalfWordIndexed;
define pcodeop loadVectorElementWordIndexed;
define pcodeop loadVectorForShiftLeft;
define pcodeop loadVectorForShiftRight;
define pcodeop loadVectorIndexed;
define pcodeop loadVectorIndexedLRU;
define pcodeop moveFromVectorStatusAndControlRegister;
define pcodeop moveToVectorStatusAndControlRegister;
define pcodeop storeVectorElementByteIndexed;
define pcodeop storeVectorElementHalfWordIndexed;
define pcodeop storeVectorElementWordIndexed;
define pcodeop storeVectorIndexed;
define pcodeop storeVectorIndexedLRU;
define pcodeop vectorAddCarryoutUnsignedWord;
define pcodeop vectorAddFloatingPoint;
define pcodeop vectorAddSignedByteSaturate;
define pcodeop vectorAddSignedHalfWordSaturate;
define pcodeop vectorAddSignedWordSaturate;
define pcodeop vectorAddUnsignedByteSaturate;
define pcodeop vectorAddUnsignedHalfWordModulo;
define pcodeop vectorAddUnsignedHalfWordSaturate;
define pcodeop vectorAddUnsignedWordSaturate;
define pcodeop vectorLogicalAnd;
define pcodeop vectorLogicalAndWithComplement;
define pcodeop vectorAverageSignedByte;
define pcodeop vectorAverageSignedHalfWord;
define pcodeop vectorAverageSignedWord;
define pcodeop vectorAverageUnsignedByte;
define pcodeop vectorAverageUnsignedHalfWord;
define pcodeop vectorAverageUnsignedWord;
define pcodeop vectorConvertFromSignedFixedPointWord;
define pcodeop vectorConvertFromUnsignedFixedPointWord;
define pcodeop vectorCompareBoundsFloatingPoint;
define pcodeop vectorCompareEqualToFloatingPoint;
define pcodeop vectorCompareEqualToUnsignedByte;
define pcodeop vectorCompareEqualToUnsignedHalfWord;
define pcodeop vectorCompareEqualToUnsignedWord;
define pcodeop vectorCompareGreaterThanOrEqualToFloatingPoint;
define pcodeop vectorCompareGreaterThanFloatingPoint;
define pcodeop vectorCompareGreaterThanSignedByte;
define pcodeop vectorCompareGreaterThanConditionRegisterSignedHalfWord;
define pcodeop vectorCompareGreaterThanSignedWord;
define pcodeop vectorCompareGreaterThanUnsignedByte;
define pcodeop vectorCompareGreaterThanUnsignedHalfWord;
define pcodeop vectorCompareGreaterThanUnsignedWord;
define pcodeop vectorConvertToSignedFixedPointWordSaturate;
define pcodeop vectorConvertToUnsignedFixedPointWordSaturate;
define pcodeop vector2RaisedToTheExponentEstimateFloatingPoint;
define pcodeop vectorLog2EstimateFloatingPoint;
define pcodeop vectorMultiplyAddFloatingPoint;
define pcodeop vectorMaximumFloatingPoint;
define pcodeop vectorMaximumSignedByte;
define pcodeop vectorMaximumSignedHalfWord;
define pcodeop vectorMaximumSignedWord;
define pcodeop vectorMaximumUnsignedByte;
define pcodeop vectorMaximumUnsignedHalfWord;
define pcodeop vectorMaximumUnsignedWord;
define pcodeop vectorMultiplyHighAndAddSignedHalfWordSaturate;
define pcodeop vectorMultiplyHighRoundAndAddSignedHalfWordSaturate;
define pcodeop vectorMinimumFloatingPoint;
define pcodeop vectorMinimumSignedByte;
define pcodeop vectorMinimumSignedHalfWord;
define pcodeop vectorMinimumSignedWord;
define pcodeop vectorMinimumUnsignedByte;
define pcodeop vectorMinimumUnsignedHalfWord;
define pcodeop vectorMinimumUnsignedWord;
define pcodeop vectorMultiplyLowAndAddUnsignedHalfWordModulo;
define pcodeop vectorMergeHighByte;
define pcodeop vectorMergeHighHalfWord;
define pcodeop vectorMergeHighWord;
define pcodeop vectorMergeLowByte;
define pcodeop vectorMergeLowHalfWord;
define pcodeop vectorMergeLowWord;
define pcodeop vectorMultiplySumMixedSignByteModulo;
define pcodeop vectorMultiplySumSignedHalfWordModulo;
define pcodeop vectorMultiplySumSignedHalfWordSaturate;
define pcodeop vectorMultiplySumUnsignedByteModulo;
define pcodeop vectorMultiplySumUnsignedHalfWordModulo;
define pcodeop vectorMultiplySumUnsignedHalfWordSaturate;
define pcodeop vectorMultiplyEvenSignedByte;
define pcodeop vectorMultiplyEvenSignedHalfWord;
define pcodeop vectorMultiplyEvenUnsignedByte;
define pcodeop vectorMultiplyEvenUnsignedHalfWord;
define pcodeop vectorMultiplyOddSignedByte;
define pcodeop vectorMultiplyOddSignedHalfWord;
define pcodeop vectorMultiplyOddUnsignedByte;
define pcodeop vectorMultiplyOddUnsignedHalfWord;
define pcodeop vectorNegativeMultiplySubtractFloatingPoint;
define pcodeop vectorLogicalNOR;
define pcodeop vectorLogicalOR;
define pcodeop vectorPackPixel32;
define pcodeop vectorPackSignedHalfWordSignedSaturate;
define pcodeop vectorPackSignedHalfWordUnsignedSaturate;
define pcodeop vectorPackSignedWordSignedSaturate;
define pcodeop vectorPackSignedWordUnsignedSaturate;
define pcodeop vectorPackUnsignedHalfWordUnsignedModulo;
define pcodeop vectorPackUnsignedHalfWordUnsignedSaturate;
define pcodeop vectorPackUnsignedWordUnsignedModulo;
define pcodeop vectorPackUnsignedWordUnsignedSaturate;
define pcodeop vectorReciprocalEstimateFloatingPoint;
define pcodeop vectorRoundToFloatingPointIntegerTowardMinusInfinity;
define pcodeop vectorRoundToFloatingPointIntegerNearest;
define pcodeop vectorRoundToFloatingPointIntegerTowardPluInfinity;
define pcodeop vectorRoundToFloatingPointIntegerTowardZero;
define pcodeop vectorRotateLeftIntegerByte;
define pcodeop vectorRotateLeftIntegerHalfWord;
define pcodeop vectorRotateLeftIntegerWord;
define pcodeop vectorReciprocalSquareRootEstimateFloatingPoint;
define pcodeop vectorConditionalSelect;
define pcodeop vectorShiftLeft;
define pcodeop vectorShiftLeftIntegerByte;
define pcodeop vectorShiftLeftDoubleByOctetImmediate;
define pcodeop vectorShiftLeftIntegerHalfWord;
define pcodeop vectorShiftLeftByOctet;
define pcodeop vectorShiftLeftIntegerWord;
define pcodeop vectorSplatByte;
define pcodeop vectorSplatHalfWord;
define pcodeop vectorSplatImmediateSignedByte;
define pcodeop vectorSplatImmediateSignedHalfWord;
define pcodeop vectorSplatImmediateSignedWord;
define pcodeop vectorSplatWord;
define pcodeop vectorShiftRight;
define pcodeop vectorShiftRightAlgebraicByte;
define pcodeop vectorShiftRightAlgebraicHalfWord;
define pcodeop vectorShiftRightAlgebraicWord;
define pcodeop vectorShiftRightByte;
define pcodeop vectorShiftRightHalfWord;
define pcodeop vectorShiftRightByOctet;
define pcodeop vectorShiftRightWord;
define pcodeop vectorSubtractCarryoutUnsignedWord;
define pcodeop vectorSubtractFloatingPoint;
define pcodeop vectorSubtractSignedByteSaturate;
define pcodeop vectorSubtractSignedHalfWordSaturate;
define pcodeop vectorSubtractSignedWordSaturate;
define pcodeop vectorSubtractUnsignedByteModulo;
define pcodeop vectorSubtractUnsignedByteSaturate;
define pcodeop vectorSubtractUnsignedHalfWordSaturate;
define pcodeop vectorSubtractUnsignedWordModulo;
define pcodeop vectorSubtractUnsignedWordSaturate;
define pcodeop vectorSumAcrossSignedWordSaturate;
define pcodeop vectorSumAcrossPartialSignedWordSaturate;
define pcodeop vectorSumAcrossPartialSignedByteSaturate;
define pcodeop vectorSumAcrossPartialSignedHalfWordSaturate;
define pcodeop vectorSumAcrossPartialUnsignedByteSaturate;
define pcodeop vectorUnpackHighPixel16;
define pcodeop vectorUnpackHighSignedByte;
define pcodeop vectorUnpackHighSignedHalfWord;
define pcodeop vectorUnpackLowPixel16;
define pcodeop vectorUnpackLowSignedByte;
define pcodeop vectorUnpackLowSignedHalfWord;
# dss
:dss STRM is $(NOTVLE) & OP=31 & BIT_25=0 & BITS_23_24=0 & STRM & BITS_16_20=0 & BITS_11_15=0 & XOP_1_10=822 & Rc=0
{
dataStreamStop(STRM:1);
}
# dssall
:dssall STRM is $(NOTVLE) & OP=31 & BIT_25=1 & BITS_23_24=0 & STRM & BITS_16_20=0 & BITS_11_15=0 & XOP_1_10=822 & Rc=0
{
dataStreamStopAll(STRM:1);
}
:dst A,B,STRM is $(NOTVLE) & OP=31 & BIT_25=0 & BITS_23_24=0 & STRM & A & B & XOP_1_10=342 & Rc=0
{
dataStreamTouch(A,B,STRM:1);
}
:dstt A,B,STRM is $(NOTVLE) & OP=31 & BIT_25=1 & BITS_23_24=0 & STRM & A & B & XOP_1_10=342 & Rc=0
{
dataStreamTouchSoon(A,B,STRM:1);
}
:dstst A,B,STRM is $(NOTVLE) & OP=31 & BIT_25=0 & BITS_23_24=0 & STRM & A & B & XOP_1_10=374 & Rc=0
{
dataStreamTouchForStore(A,B,STRM:1);
}
:dststt A,B,STRM is $(NOTVLE) & OP=31 & BIT_25=1 & BITS_23_24=0 & STRM & A & B & XOP_1_10=374 & Rc=0
{
dataStreamTouchForStoreTransient(A,B,STRM:1);
}
:lvebx vrD,RA_OR_ZERO,B is OP=31 & vrD & RA_OR_ZERO & B & XOP_1_10=7 & Rc=0
{
tmp:$(REGISTER_SIZE) = (RA_OR_ZERO + B);
tmpb:1 = *[ram]:1 tmp;
eb:1 = tmp[0,4];
# This looks backwards from what the manual says, but it's ok since byte 0 in the manual is MSB
# where as for us byte 0 is LSB
@if ENDIAN == "big"
eb = 0xF - eb;
@endif
eb = eb * 8;
vrD = (zext(tmpb) << eb);
#vrD = loadVectorElementByteIndexed(A,B);
}
:lvehx vrD,A,B is OP=31 & vrD & A & B & XOP_1_10=39 & Rc=0
{ # TODO defintion
vrD = loadVectorElementHalfWordIndexed(A,B);
}
:lvewx vrD,A,B is OP=31 & vrD & A & B & XOP_1_10=71 & Rc=0
{ # TODO definition
vrD = loadVectorElementWordIndexed(A,B);
}
:lvsl vrD,A,B is OP=31 & vrD & A & B & XOP_1_10=6 & Rc=0
{ # TODO definition
vrD = loadVectorForShiftLeft(A,B);
}
:lvsr vrD,RA_OR_ZERO,B is OP=31 & vrD & RA_OR_ZERO & B & XOP_1_10=38 & Rc=0
{
tmp:$(REGISTER_SIZE) = (RA_OR_ZERO + B);
eb:1 = tmp[0,4];
eb = eb * 8;
srca:32=0x0001020304050607;
srcb:32=0x08090a0b0c0d0e0f;
srcc:32=0x1011121314151617;
srcd:32=0x18191a1b1c1d1e1f;
src:32 = (srca << 192) | (srcb << 128) | (srcc << 64) | srcd;
src = src >> eb;
vrD = src:16;
}
:lvx vrD,RA_OR_ZERO,B is OP=31 & vrD & RA_OR_ZERO & B & XOP_1_10=103 & Rc=0
{
# vrD = loadVectorIndexed(A,B);
build RA_OR_ZERO;
tmp:$(REGISTER_SIZE) = (RA_OR_ZERO + B) & 0xfffffffffffffff0;
vrD = *[ram]:16 tmp;
}
:lvxl vrD,A,B is OP=31 & vrD & A & B & XOP_1_10=359 & Rc=0
{ # TODO definition
vrD = loadVectorIndexedLRU(A,B);
}
:mfvscr vrD is OP=4 & vrD & vrAR=0 & vrBR=0 & XOP_1_10=770 & Rc=0
{ # TODO definition
vrD = moveFromVectorStatusAndControlRegister();
}
:mtvscr vrB is OP=4 & vrDR=0 & vrAR=0 & vrB & XOP_1_10=802 & Rc=0
{ # TODO definition
moveToVectorStatusAndControlRegister(vrB);
}
:stvebx vrS,RA_OR_ZERO,B is OP=31 & vrS & RA_OR_ZERO & B & XOP_1_10=135 & Rc=0
{ # TODO definition
EA:$(REGISTER_SIZE) = RA_OR_ZERO + B;
*[ram]:1 EA = storeVectorElementByteIndexed(vrS,RA_OR_ZERO,B);
}
:stvehx vrS,RA_OR_ZERO,B is OP=31 & vrS & RA_OR_ZERO & B & XOP_1_10=167 & Rc=0
{ # TODO definition
EA:$(REGISTER_SIZE) = RA_OR_ZERO + B;
*[ram]:2 EA = storeVectorElementHalfWordIndexed(vrS,RA_OR_ZERO,B);
}
:stvewx vrS,RA_OR_ZERO,B is OP=31 & vrS & RA_OR_ZERO & B & XOP_1_10=199 & Rc=0
{ # TODO definition
EA:$(REGISTER_SIZE) = (RA_OR_ZERO + B) & 0xfffffffffffffffc;
*[ram]:4 EA = storeVectorElementWordIndexed(vrS,RA_OR_ZERO,B);
}
:stvx vrS,RA_OR_ZERO,B is OP=31 & vrS & B & RA_OR_ZERO & XOP_1_10=231 & Rc=0
{
tmp:$(REGISTER_SIZE) = (RA_OR_ZERO + B) & 0xfffffffffffffff0;
*[ram]:16 tmp = vrS;
}
:stvxl vrS,RA_OR_ZERO,B is OP=31 & vrS & B & RA_OR_ZERO & XOP_1_10=487 & Rc=0
{ # TODO definition
tmp:$(REGISTER_SIZE) = (RA_OR_ZERO + B) & 0xfffffffffffffff0;
*[ram]:16 tmp = vrS;
# mark_as_not_likely_to_be_needed_again_anytime_soon(tmp);
}
:vaddcuw vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=384
{ # TODO definition
vrD = vectorAddCarryoutUnsignedWord(vrA,vrB);
}
:vaddfp vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=10
{ # TODO definition
vrD = vectorAddFloatingPoint(vrA,vrB);
}
:vaddsbs vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=768
{ # TODO definition
vrD = vectorAddSignedByteSaturate(vrA,vrB);
}
:vaddshs vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=832
{ # TODO definition
vrD = vectorAddSignedHalfWordSaturate(vrA,vrB);
}
:vaddsws vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=896
{ # TODO definition
vrD = vectorAddSignedWordSaturate(vrA,vrB);
}
vaddubm_part1: is vrA_8_0 & vrA_8_1 & vrA_8_2 & vrA_8_3 & vrA_8_4 & vrA_8_5 & vrA_8_6 & vrA_8_7
& vrB_8_0 & vrB_8_1 & vrB_8_2 & vrB_8_3 & vrB_8_4 & vrB_8_5 & vrB_8_6 & vrB_8_7
& vrD_8_0 & vrD_8_1 & vrD_8_2 & vrD_8_3 & vrD_8_4 & vrD_8_5 & vrD_8_6 & vrD_8_7
{
vrD_8_0 = vrA_8_0 + vrB_8_0;
vrD_8_1 = vrA_8_1 + vrB_8_1;
vrD_8_2 = vrA_8_2 + vrB_8_2;
vrD_8_3 = vrA_8_3 + vrB_8_3;
vrD_8_4 = vrA_8_4 + vrB_8_4;
vrD_8_5 = vrA_8_5 + vrB_8_5;
vrD_8_6 = vrA_8_6 + vrB_8_6;
vrD_8_7 = vrA_8_7 + vrB_8_7;
}
vaddubm_part2: is vrA_8_8 & vrA_8_9 & vrA_8_10 & vrA_8_11 & vrA_8_12 & vrA_8_13 & vrA_8_14 & vrA_8_15
& vrB_8_8 & vrB_8_9 & vrB_8_10 & vrB_8_11 & vrB_8_12 & vrB_8_13 & vrB_8_14 & vrB_8_15
& vrD_8_8 & vrD_8_9 & vrD_8_10 & vrD_8_11 & vrD_8_12 & vrD_8_13 & vrD_8_14 & vrD_8_15
{
vrD_8_8 = vrA_8_8 + vrB_8_8;
vrD_8_9 = vrA_8_9 + vrB_8_9;
vrD_8_10 = vrA_8_10 + vrB_8_10;
vrD_8_11 = vrA_8_11 + vrB_8_11;
vrD_8_12 = vrA_8_12 + vrB_8_12;
vrD_8_13 = vrA_8_13 + vrB_8_13;
vrD_8_14 = vrA_8_14 + vrB_8_14;
vrD_8_15 = vrA_8_15 + vrB_8_15;
}
# A bug in sleigh compiler forces us to keep the number of imported symbols less than 35 (it slows to a halt pass there), that is why we have vaddubm_part1 & vaddubm_part2
:vaddubm vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=0 & vaddubm_part1 & vaddubm_part2
{
}
:vaddubs vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=512
{ # TODO definition
vrD = vectorAddUnsignedByteSaturate(vrA,vrB);
}
:vadduhm vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=64
& vrA_16_0 & vrA_16_1 & vrA_16_2 & vrA_16_3 & vrA_16_4 & vrA_16_5 & vrA_16_6 & vrA_16_7
& vrB_16_0 & vrB_16_1 & vrB_16_2 & vrB_16_3 & vrB_16_4 & vrB_16_5 & vrB_16_6 & vrB_16_7
& vrD_16_0 & vrD_16_1 & vrD_16_2 & vrD_16_3 & vrD_16_4 & vrD_16_5 & vrD_16_6 & vrD_16_7
{
vrD_16_0 = vrA_16_0 + vrB_16_0;
vrD_16_1 = vrA_16_1 + vrB_16_0;
vrD_16_2 = vrA_16_2 + vrB_16_2;
vrD_16_3 = vrA_16_3 + vrB_16_3;
vrD_16_4 = vrA_16_3 + vrB_16_4;
vrD_16_5 = vrA_16_5 + vrB_16_5;
vrD_16_6 = vrA_16_6 + vrB_16_6;
vrD_16_7 = vrA_16_7 + vrB_16_7;
}
:vadduhs vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=576
{ # TODO definition
vrD = vectorAddUnsignedHalfWordSaturate(vrA,vrB);
}
:vadduwm vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=128
& vrA_32_0 & vrA_32_1 & vrA_32_2 & vrA_32_3
& vrB_32_0 & vrB_32_1 & vrB_32_2 & vrB_32_3
& vrD_32_0 & vrD_32_1 & vrD_32_2 & vrD_32_3
{
vrD_32_0 = vrA_32_0 + vrB_32_0;
vrD_32_1 = vrA_32_1 + vrB_32_1;
vrD_32_2 = vrA_32_2 + vrB_32_2;
vrD_32_3 = vrA_32_3 + vrB_32_3;
}
# Collides with vadduws
# :vadduws vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=640
# { # TODO definition
# vrD = vectorAddUnsignedWordSaturate(vrA,vrB);
# }
:vand vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=1028
{ # TODO definition
vrD = vectorLogicalAnd(vrA,vrB);
}
:vandc vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=1092
{ # TODO definition
vrD = vectorLogicalAndWithComplement(vrA,vrB);
}
:vavgsb vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=1282
{ # TODO definition
vrD = vectorAverageSignedByte(vrA,vrB);
}
:vavgsh vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=1346
{ # TODO definition
vrD = vectorAverageSignedHalfWord(vrA,vrB);
}
:vavgsw vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=1410
{ # TODO definition
vrD = vectorAverageSignedWord(vrA,vrB);
}
:vavgub vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=1026
{ # TODO definition
vrD = vectorAverageUnsignedByte(vrA,vrB);
}
:vavguh vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=1090
{ # TODO definition
vrD = vectorAverageUnsignedHalfWord(vrA,vrB);
}
:vavguw vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=1154
{ # TODO definition
vrD = vectorAverageUnsignedWord(vrA,vrB);
}
:vcfsx vrD,vrB,A_BITS is OP=4 & vrD & A_BITS & vrB & XOP_0_10=842
{ # TODO definition
vrD = vectorConvertFromSignedFixedPointWord(vrB,A_BITS:1);
}
:vcfux vrD,vrB,A_BITS is OP=4 & vrD & A_BITS & vrB & XOP_0_10=778
{ # TODO definition
vrD = vectorConvertFromUnsignedFixedPointWord(vrB,A_BITS:1);
}
:vcmpbfp vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & BIT_10=0 & XOP_0_9=966
{ # TODO definition
vrD = vectorCompareBoundsFloatingPoint(vrA,vrB);
}
:vcmpbfp. vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & BIT_10=1 & XOP_0_9=966
{ # TODO definition
# TODO change CR6
vrD = vectorCompareBoundsFloatingPoint(vrA,vrB);
}
:vcmpeqfp vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & BIT_10=0 & XOP_0_9=198
{ # TODO definition
# TODO change CR6
vrD = vectorCompareEqualToFloatingPoint(vrA,vrB);
}
:vcmpeqfp. vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & BIT_10=1 & XOP_0_9=198
{ # TODO definition
vrD = vectorCompareEqualToFloatingPoint(vrA,vrB);
}
:vcmpequb vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & BIT_10=0 & XOP_0_9=6
{ # TODO definition
# TODO change CR6
vrD = vectorCompareEqualToUnsignedByte(vrA,vrB);
}
:vcmpequb. vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & BIT_10=1 & XOP_0_9=6
{ # TODO definition
# TODO change CR6
vrD = vectorCompareEqualToUnsignedByte(vrA,vrB);
}
:vcmpequh vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & BIT_10=0 & XOP_0_9=70
{ # TODO definition
# TODO change CR6
vrD = vectorCompareEqualToUnsignedHalfWord(vrA,vrB);
}
:vcmpequh. vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & BIT_10=1 & XOP_0_9=70
{ # TODO definition
# TODO change CR6
vrD = vectorCompareEqualToUnsignedHalfWord(vrA,vrB);
}
:vcmpequw vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & BIT_10=0 & XOP_0_9=134
{ # TODO definition
# TODO change CR6
vrD = vectorCompareEqualToUnsignedWord(vrA,vrB);
}
:vcmpequw. vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & BIT_10=1 & XOP_0_9=134
{ # TODO definition
# TODO change CR6
vrD = vectorCompareEqualToUnsignedWord(vrA,vrB);
}
:vcmpgefp vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & BIT_10=0 & XOP_0_9=454
{ # TODO definition
# TODO change CR6
vrD = vectorCompareGreaterThanOrEqualToFloatingPoint(vrA,vrB);
}
:vcmpgefp. vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & BIT_10=1 & XOP_0_9=454
{ # TODO definition
# TODO change CR6
vrD = vectorCompareGreaterThanOrEqualToFloatingPoint(vrA,vrB);
}
:vcmpgtfp vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & BIT_10=0 & XOP_0_9=710
{ # TODO definition
# TODO change CR6
vrD = vectorCompareGreaterThanFloatingPoint(vrA,vrB);
}
:vcmpgtfp. vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & BIT_10=1 & XOP_0_9=710
{ # TODO definition
# TODO change CR6
vrD = vectorCompareGreaterThanFloatingPoint(vrA,vrB);
}
:vcmpgtsb vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & BIT_10=0 & XOP_0_9=774
{ # TODO definition
# TODO change CR6
vrD = vectorCompareGreaterThanSignedByte(vrA,vrB);
}
:vcmpgtsb. vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & BIT_10=1 & XOP_0_9=774
{ # TODO definition
# TODO change CR6
vrD = vectorCompareGreaterThanSignedByte(vrA,vrB);
}
:vcmpgtsh vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & BIT_10=0 & XOP_0_9=838
{ # TODO definition
# TODO change CR6
vrD = vectorCompareGreaterThanConditionRegisterSignedHalfWord(vrA,vrB);
}
:vcmpgtsh. vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & BIT_10=1 & XOP_0_9=838
{ # TODO definition
# TODO change CR6
vrD = vectorCompareGreaterThanConditionRegisterSignedHalfWord(vrA,vrB);
}
:vcmpgtsw vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & BIT_10=0 & XOP_0_9=902
{ # TODO definition
# TODO change CR6
vrD = vectorCompareGreaterThanSignedWord(vrA,vrB);
}
:vcmpgtsw. vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & BIT_10=1 & XOP_0_9=902
{ # TODO definition
# TODO change CR6
vrD = vectorCompareGreaterThanSignedWord(vrA,vrB);
}
:vcmpgtub vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & BIT_10=0 & XOP_0_9=518
{ # TODO definition
# TODO change CR6
vrD = vectorCompareGreaterThanUnsignedByte(vrA,vrB);
}
:vcmpgtub. vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & BIT_10=1 & XOP_0_9=518
{ # TODO definition
# TODO change CR6
vrD = vectorCompareGreaterThanUnsignedByte(vrA,vrB);
}
:vcmpgtuh vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & BIT_10=0 & XOP_0_9=582
{ # TODO definition
# TODO change CR6
vrD = vectorCompareGreaterThanUnsignedHalfWord(vrA,vrB);
}
:vcmpgtuh. vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & BIT_10=1 & XOP_0_9=582
{ # TODO definition
# TODO change CR6
vrD = vectorCompareGreaterThanUnsignedHalfWord(vrA,vrB);
}
:vcmpgtuw vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & BIT_10=0 & XOP_0_9=646
{ # TODO definition
# TODO change CR6
vrD = vectorCompareGreaterThanUnsignedWord(vrA,vrB);
}
:vcmpgtuw. vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & BIT_10=1 & XOP_0_9=646
{ # TODO definition
# TODO change CR6
vrD = vectorCompareGreaterThanUnsignedWord(vrA,vrB);
}
:vctsxs vrD,vrB,A_BITS is OP=4 & vrD & A_BITS & vrB & XOP_0_10=970
{ # TODO definition
vrD = vectorConvertToSignedFixedPointWordSaturate(vrB,A_BITS:1);
}
:vctuxs vrD,vrB,A_BITS is OP=4 & vrD & A_BITS & vrB & XOP_0_10=906
{ # TODO definition
vrD = vectorConvertToUnsignedFixedPointWordSaturate(vrB,A_BITS:1);
}
:vexptefp vrD,vrB is OP=4 & vrD & A_BITS=0 & vrB & XOP_0_10=394
{ # TODO definition
vrD = vector2RaisedToTheExponentEstimateFloatingPoint(vrB);
}
:vlogefp vrD,vrB is OP=4 & vrD & A_BITS=0 & vrB & XOP_0_10=458
{ # TODO definition
vrD = vectorLog2EstimateFloatingPoint(vrB);
}
:vmaddfp vrD,vrA,vrC,vrB is OP=4 & vrD & vrA & vrB & vrC & XOP_0_5=46
{ # TODO definition
vrD = vectorMultiplyAddFloatingPoint(vrA,vrC,vrB);
}
:vmaxfp vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=1034
{ # TODO definition
vrD = vectorMaximumFloatingPoint(vrA,vrB);
}
:vmaxsb vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=258
{ # TODO definition
vrD = vectorMaximumSignedByte(vrA,vrB);
}
:vmaxsh vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=322
{ # TODO definition
vrD = vectorMaximumSignedHalfWord(vrA,vrB);
}
:vmaxsw vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=386
{ # TODO definition
vrD = vectorMaximumSignedWord(vrA,vrB);
}
:vmaxub vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=2
{ # TODO definition
vrD = vectorMaximumUnsignedByte(vrA,vrB);
}
:vmaxuh vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=66
{ # TODO definition
vrD = vectorMaximumUnsignedHalfWord(vrA,vrB);
}
:vmaxuw vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=130
{ # TODO definition
vrD = vectorMaximumUnsignedWord(vrA,vrB);
}
:vmhaddshs vrD,vrA,vrB,vrC is OP=4 & vrD & vrA & vrB & vrC & XOP_0_5=32
{ # TODO definition
vrD = vectorMultiplyHighAndAddSignedHalfWordSaturate(vrA,vrB,vrC);
}
:vmhraddshs vrD,vrA,vrB,vrC is OP=4 & vrD & vrA & vrB & vrC & XOP_0_5=33
{ # TODO definition
vrD = vectorMultiplyHighRoundAndAddSignedHalfWordSaturate(vrA,vrB,vrC);
}
:vminfp vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=1098
{ # TODO definition
vrD = vectorMinimumFloatingPoint(vrA,vrB);
}
:vminsb vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=770
{ # TODO definition
vrD = vectorMinimumSignedByte(vrA,vrB);
}
:vminsh vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=834
{ # TODO definition
vrD = vectorMinimumSignedHalfWord(vrA,vrB);
}
:vminsw vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=898
{ # TODO definition
vrD = vectorMinimumSignedWord(vrA,vrB);
}
:vminub vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=514
{ # TODO definition
vrD = vectorMinimumUnsignedByte(vrA,vrB);
}
:vminuh vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=578
{ # TODO definition
vrD = vectorMinimumUnsignedHalfWord(vrA,vrB);
}
:vminuw vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=642
{ # TODO definition
vrD = vectorMinimumUnsignedWord(vrA,vrB);
}
:vmladduhm vrD,vrA,vrB,vrC is OP=4 & vrD & vrA & vrB & vrC & XOP_0_5=34
{ # TODO definition
vrD = vectorMultiplyLowAndAddUnsignedHalfWordModulo(vrA,vrB,vrC);
}
:vmrghb vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=12
{ # TODO definition
vrD = vectorMergeHighByte(vrA,vrB);
}
:vmrghh vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=76
{ # TODO definition
vrD = vectorMergeHighHalfWord(vrA,vrB);
}
:vmrghw vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=140
{ # TODO definition
vrD = vectorMergeHighWord(vrA,vrB);
}
:vmrglb vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=268
{ # TODO definition
vrD = vectorMergeLowByte(vrA,vrB);
}
:vmrglh vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=332
{ # TODO definition
vrD = vectorMergeLowHalfWord(vrA,vrB);
}
:vmrglw vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=396
{ # TODO definition
vrD = vectorMergeLowWord(vrA,vrB);
}
:vmsummbm vrD,vrA,vrB,vrC is OP=4 & vrD & vrA & vrB & vrC & XOP_0_5=37
{ # TODO definition
vrD = vectorMultiplySumMixedSignByteModulo(vrA,vrB,vrC);
}
:vmsumshm vrD,vrA,vrB,vrC is OP=4 & vrD & vrA & vrB & vrC & XOP_0_5=40
{ # TODO definition
vrD = vectorMultiplySumSignedHalfWordModulo(vrA,vrB,vrC);
}
:vmsumshs vrD,vrA,vrB,vrC is OP=4 & vrD & vrA & vrB & vrC & XOP_0_5=41
{ # TODO definition
vrD = vectorMultiplySumSignedHalfWordSaturate(vrA,vrB,vrC);
}
:vmsumubm vrD,vrA,vrB,vrC is OP=4 & vrD & vrA & vrB & vrC & XOP_0_5=36
{ # TODO definition
vrD = vectorMultiplySumUnsignedByteModulo(vrA,vrB,vrC);
}
:vmsumuhm vrD,vrA,vrB,vrC is OP=4 & vrD & vrA & vrB & vrC & XOP_0_5=38
{ # TODO definition
vrD = vectorMultiplySumUnsignedHalfWordModulo(vrA,vrB,vrC);
}
:vmsumuhs vrD,vrA,vrB,vrC is OP=4 & vrD & vrA & vrB & vrC & XOP_0_5=39
{ # TODO definition
vrD = vectorMultiplySumUnsignedHalfWordSaturate(vrA,vrB,vrC);
}
:vmulesb vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=776
{ # TODO definition
vrD = vectorMultiplyEvenSignedByte(vrA,vrB);
}
:vmulesh vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=840
{ # TODO definition
vrD = vectorMultiplyEvenSignedHalfWord(vrA,vrB);
}
:vmuleub vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=520
{ # TODO definition
vrD = vectorMultiplyEvenUnsignedByte(vrA,vrB);
}
:vmuleuh vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=584
{ # TODO definition
vrD = vectorMultiplyEvenUnsignedHalfWord(vrA,vrB);
}
:vmulosb vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=264
{ # TODO definition
vrD = vectorMultiplyOddSignedByte(vrA,vrB);
}
:vmulosh vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=328
{ # TODO definition
vrD = vectorMultiplyOddSignedHalfWord(vrA,vrB);
}
:vmuloub vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=8
{ # TODO definition
vrD = vectorMultiplyOddUnsignedByte(vrA,vrB);
}
:vmulouh vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=72
{ # TODO definition
vrD = vectorMultiplyOddUnsignedHalfWord(vrA,vrB);
}
:vnmsubfp vrD,vrA,vrC,vrB is OP=4 & vrD & vrA & vrB & vrC & XOP_0_5=47
{ # TODO definition
vrD = vectorNegativeMultiplySubtractFloatingPoint(vrA,vrC,vrB);
}
:vnor vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=1284
{
vrD = ~(vrA | vrB);
}
:vor vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=1156
{
vrD = vrA | vrB;
}
:vperm vrD,vrA,vrB,vrC is OP=4 & vrD & vrA & vrB & vrC & XOP_0_5=43
{
# tmp:32 = (zext(vrA) << 128) | zext(vrB);
# tmp2:16 = 0;
# tmp3:32 = 0;
# cnt:1 = 15;
# <top>
# tmp2 = (vrC >> (cnt * 8)) & 0x1F;
# tmp3 = tmp >> ((31 - tmp2) * 8);
# vrD = vrD << 8;
# vrD[0,8] = tmp3[0,8];
# if (cnt == 0) goto <end>;
# cnt = cnt - 1;
# goto <top>;
# <end>
vrD = vectorPermute(vrA,vrB,vrC);
}
:vpkpx vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=782
{ # TODO definition
vrD = vectorPackPixel32(vrA,vrB);
}
:vpkshss vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=398
{ # TODO definition
vrD = vectorPackSignedHalfWordSignedSaturate(vrA,vrB);
}
:vpkshus vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=270
{ # TODO definition
vrD = vectorPackSignedHalfWordUnsignedSaturate(vrA,vrB);
}
:vpkswss vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=462
{ # TODO definition
vrD = vectorPackSignedWordSignedSaturate(vrA,vrB);
}
:vpkswus vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=334
{ # TODO definition
vrD = vectorPackSignedWordUnsignedSaturate(vrA,vrB);
}
:vpkuhum vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=14
{ # TODO definition
vrD = vectorPackUnsignedHalfWordUnsignedModulo(vrA,vrB);
}
:vpkuhus vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=142
{ # TODO definitionXTF =
vrD = vectorPackUnsignedHalfWordUnsignedSaturate(vrA,vrB);
}
:vpkuwum vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=78
{ # TODO definition
vrD = vectorPackUnsignedWordUnsignedModulo(vrA,vrB);
}
:vpkuwus vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=206
{ # TODO definition
vrD = vectorPackUnsignedWordUnsignedSaturate(vrA,vrB);
}
:vrefp vrD,vrB is OP=4 & vrD & A_BITS=0 & vrB & XOP_0_10=266
{ # TODO definition
vrD = vectorReciprocalEstimateFloatingPoint(vrB);
}
:vrfim vrD,vrB is OP=4 & vrD & A_BITS=0 & vrB & XOP_0_10=714
{ # TODO definition
vrD = vectorRoundToFloatingPointIntegerTowardMinusInfinity(vrB);
}
:vrfin vrD,vrB is OP=4 & vrD & A_BITS=0 & vrB & XOP_0_10=522
{ # TODO definition
vrD = vectorRoundToFloatingPointIntegerNearest(vrB);
}
:vrfip vrD,vrB is OP=4 & vrD & A_BITS=0 & vrB & XOP_0_10=650
{ # TODO definition
vrD = vectorRoundToFloatingPointIntegerTowardPluInfinity(vrB);
}
:vrfiz vrD,vrB is OP=4 & vrD & A_BITS=0 & vrB & XOP_0_10=586
{ # TODO definition
vrD = vectorRoundToFloatingPointIntegerTowardZero(vrB);
}
:vrlb vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=4
{ # TODO definition
vrD = vectorRotateLeftIntegerByte(vrA,vrB);
}
:vrlh vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=68
{ # TODO definition
vrD = vectorRotateLeftIntegerHalfWord(vrA,vrB);
}
:vrlw vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=132
{ # TODO definition
vrD = vectorRotateLeftIntegerWord(vrA,vrB);
}
:vrsqrtefp vrD,vrB is OP=4 & vrD & A_BITS=0 & vrB & XOP_0_10=330
{ # TODO definition
vrD = vectorReciprocalSquareRootEstimateFloatingPoint(vrB);
}
:vsel vrD,vrA,vrB,vrC is OP=4 & vrD & vrA & vrB & vrC & XOP_0_5=42
{ # TODO definition
vrD = vectorConditionalSelect(vrA,vrB,vrC);
}
:vsl vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=452
{ # TODO definition
vrD = vectorShiftLeft(vrA,vrB);
}
:vslb vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=260
{ # TODO definition
vrD = vectorShiftLeftIntegerByte(vrA,vrB);
}
:vsldoi vrD,vrA,vrB,SHB is OP=4 & vrD & vrA & vrB & BIT_10=0 & SHB & XOP_0_5=44
{
tmp:32 = (zext(vrA) << 128) | zext(vrB);
tmp = tmp << (SHB:1 * 8);
vrD = tmp[128,128];
}
:vslh vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=324
{ # TODO definition
vrD = vectorShiftLeftIntegerHalfWord(vrA,vrB);
}
:vslo vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=1036
{ # TODO definition
vrD = vectorShiftLeftByOctet(vrA,vrB);
}
:vslw vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=388
{ # TODO definition
vrD = vectorShiftLeftIntegerWord(vrA,vrB);
}
:vspltb vrD,vrB,UIMB is OP=4 & vrD & BITS_20_20=0 & UIMB & vrB & XOP_0_10=524
{
tmp:1 = (0xF - UIMB) * 8;
tmpa:16 = (vrB >> tmp) & 0xFF;
vrD = tmpa | (tmpa << 8) | (tmpa << 16) | (tmpa << 24) | (tmpa << 32) | (tmpa << 40) | (tmpa << 48) | (tmpa << 56);
vrD = vrD | (tmpa << 64) | (tmpa << 72) | (tmpa << 80) | (tmpa << 88) | (tmpa << 96) | (tmpa << 104) | (tmpa << 112) | (tmpa << 120);
}
:vsplth vrD,vrB,UIMH is OP=4 & vrD & BITS_19_20=0 & UIMH & vrB & XOP_0_10=588
{ # TODO definition
vrD = vectorSplatHalfWord(vrB,UIMH:1);
}
:vspltisb vrD,A_BITSS is OP=4 & vrD & A_BITSS & B_BITS=0 & XOP_0_10=780
{ # TODO definition
vrD = vectorSplatImmediateSignedByte(A_BITSS:1);
}
:vspltish vrD,A_BITSS is OP=4 & vrD & A_BITSS & B_BITS=0 & XOP_0_10=844
{ # TODO definition
vrD = vectorSplatImmediateSignedHalfWord(A_BITSS:1);
}
:vspltisw vrD,A_BITSS is OP=4 & vrD & A_BITSS & B_BITS=0 & XOP_0_10=908
{
tmpw:4 = sext(A_BITSS:1);
tmp:16 = zext(tmpw);
vrD = (tmp) | (tmp << 32) | (tmp << 64) | (tmp << 96);
}
# A better way to do this would be to make a subtable to interpret
# UIMW into the corresponding subword, then assign the subregisters of vrD
# to that value.
:vspltw vrD,vrB,UIMW is OP=4 & vrD & vrB & BITS_18_20=0 & UIMW & XOP_0_10=652
{
local b = (3 - UIMW) * 32;
local tmp:16 = (vrB >> b) & 0xffffffff;
vrD = (tmp) | (tmp << 32) | (tmp << 64) | (tmp << 96);
}
:vsr vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=708
{ # TODO definition
vrD = vectorShiftRight(vrA,vrB);
}
:vsrab vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=772
{ # TODO definition
vrD = vectorShiftRightAlgebraicByte(vrA,vrB);
}
:vsrah vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=836
{ # TODO definition
vrD = vectorShiftRightAlgebraicHalfWord(vrA,vrB);
}
:vsraw vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=900
{ # TODO definition
vrD = vectorShiftRightAlgebraicWord(vrA,vrB);
}
:vsrb vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=516
{ # TODO definition
vrD = vectorShiftRightByte(vrA,vrB);
}
:vsrh vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=580
{ # TODO definition
vrD = vectorShiftRightHalfWord(vrA,vrB);
}
:vsro vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=1100
{ # TODO definition
vrD = vectorShiftRightByOctet(vrA,vrB);
}
:vsrw vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=644
{ # TODO definition
vrD = vectorShiftRightWord(vrA,vrB);
}
:vsubcuw vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=1408
{ # TODO definition
vrD = vectorSubtractCarryoutUnsignedWord(vrA,vrB);
}
:vsubfp vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=74
{ # TODO definition
vrD = vectorSubtractFloatingPoint(vrA,vrB);
}
:vsubsbs vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=1792
{ # TODO definition
vrD = vectorSubtractSignedByteSaturate(vrA,vrB);
}
:vsubshs vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=1856
{ # TODO definition
vrD = vectorSubtractSignedHalfWordSaturate(vrA,vrB);
}
:vsubsws vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=1920
{ # TODO definition
vrD = vectorSubtractSignedWordSaturate(vrA,vrB);
}
:vsububm vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=1024
{ # TODO definition
vrD = vectorSubtractUnsignedByteModulo(vrA,vrB);
}
:vsububs vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=1536
{ # TODO definition
vrD = vectorSubtractUnsignedByteSaturate(vrA,vrB);
}
:vsubuhm vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=1088
& vrA_16_0 & vrA_16_1 & vrA_16_2 & vrA_16_3 & vrA_16_4 & vrA_16_5 & vrA_16_6 & vrA_16_7
& vrB_16_0 & vrB_16_1 & vrB_16_2 & vrB_16_3 & vrB_16_4 & vrB_16_5 & vrB_16_6 & vrB_16_7
& vrC_16_0 & vrC_16_1 & vrC_16_2 & vrC_16_3 & vrC_16_4 & vrC_16_5 & vrC_16_6 & vrC_16_7
{
vrC_16_0 = vrA_16_0 - vrB_16_0;
vrC_16_1 = vrA_16_1 - vrB_16_1;
vrC_16_2 = vrA_16_2 - vrB_16_2;
vrC_16_3 = vrA_16_3 - vrB_16_3;
vrC_16_4 = vrA_16_4 - vrB_16_4;
vrC_16_5 = vrA_16_5 - vrB_16_5;
vrC_16_6 = vrA_16_6 - vrB_16_6;
vrC_16_7 = vrA_16_7 - vrB_16_7;
}
:vsubuhs vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=1600
{ # TODO definition
vrD = vectorSubtractUnsignedHalfWordSaturate(vrA,vrB);
}
:vsubuwm vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=1152
{ # TODO definition
vrD = vectorSubtractUnsignedWordModulo(vrA,vrB);
}
:vsubuws vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=1664
{ # TODO definition
vrD = vectorSubtractUnsignedWordSaturate(vrA,vrB);
}
:vsumsws vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=1928
{ # TODO definition
vrD = vectorSumAcrossSignedWordSaturate(vrA,vrB);
}
:vsum2sws vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=1672
{ # TODO definition
vrD = vectorSumAcrossPartialSignedWordSaturate(vrA,vrB);
}
:vsum4sbs vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=1800
{ # TODO definition
vrD = vectorSumAcrossPartialSignedByteSaturate(vrA,vrB);
}
:vsum4shs vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=1608
{ # TODO definition
vrD = vectorSumAcrossPartialSignedHalfWordSaturate(vrA,vrB);
}
:vsum4ubs vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=1544
{ # TODO definition
vrD = vectorSumAcrossPartialUnsignedByteSaturate(vrA,vrB);
}
:vupkhpx vrD,vrB is OP=4 & vrD & A_BITS=0 & vrB & XOP_0_10=846
{ # TODO definition
vrD = vectorUnpackHighPixel16(vrB);
}
:vupkhsb vrD,vrB is OP=4 & vrD & A_BITS=0 & vrB & XOP_0_10=526
{ # TODO definition
vrD = vectorUnpackHighSignedByte(vrB);
}
:vupkhsh vrD,vrB is OP=4 & vrD & A_BITS=0 & vrB & XOP_0_10=590
{ # TODO definition
vrD = vectorUnpackHighSignedHalfWord(vrB);
}
:vupklpx vrD,vrB is OP=4 & vrD & A_BITS=0 & vrB & XOP_0_10=974
{ # TODO definition
vrD = vectorUnpackLowPixel16(vrB);
}
:vupklsb vrD,vrB is OP=4 & vrD & A_BITS=0 & vrB & XOP_0_10=654
{ # TODO definition
vrD = vectorUnpackLowSignedByte(vrB);
}
:vupklsh vrD,vrB is OP=4 & vrD & A_BITS=0 & vrB & XOP_0_10=718
{ # TODO definition
vrD = vectorUnpackLowSignedHalfWord(vrB);
}
:vxor vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=1220
{
vrD = vrA ^ vrB;
}
define pcodeop altv207_1;
define pcodeop altv207_2;
define pcodeop altv207_3;
define pcodeop altv207_4;
define pcodeop altv207_5;
define pcodeop altv207_6;
define pcodeop altv207_7;
define pcodeop altv207_8;
define pcodeop altv207_9;
define pcodeop altv207_10;
define pcodeop altv207_11;
define pcodeop altv207_12;
define pcodeop altv207_13;
define pcodeop altv207_14;
define pcodeop altv207_15;
define pcodeop altv207_16;
define pcodeop altv207_17;
define pcodeop altv207_18;
define pcodeop altv207_19;
define pcodeop altv207_20;
define pcodeop altv207_21;
define pcodeop altv207_22;
define pcodeop altv207_23;
define pcodeop altv207_24;
define pcodeop altv207_25;
define pcodeop altv207_26;
define pcodeop altv207_27;
define pcodeop altv207_28;
define pcodeop altv207_29;
define pcodeop altv207_30;
define pcodeop altv207_31;
define pcodeop altv207_32;
define pcodeop altv207_33;
define pcodeop altv207_34;
define pcodeop altv207_35;
define pcodeop altv207_36;
define pcodeop altv207_37;
define pcodeop altv207_38;
define pcodeop altv207_39;
define pcodeop altv207_40;
define pcodeop altv207_41;
define pcodeop altv207_42;
define pcodeop altv207_43;
define pcodeop altv207_44;
define pcodeop altv207_45;
define pcodeop altv207_46;
define pcodeop altv207_47;
define pcodeop altv207_48;
define pcodeop altv207_49;
define pcodeop altv207_50;
define pcodeop altv207_51;
define pcodeop altv207_52;
define pcodeop altv207_53;
define pcodeop altv207_54;
define pcodeop altv207_55;
define pcodeop altv207_56;
define pcodeop altv207_57;
define pcodeop altv207_58;
define pcodeop altv207_59;
define pcodeop altv207_60;
define pcodeop altv207_61;
define pcodeop altv207_62;
define pcodeop altv207_63;
define pcodeop altv207_64;
define pcodeop altv207_65;
define pcodeop altv300_1;
define pcodeop altv300_2;
define pcodeop altv300_3;
define pcodeop altv300_4;
define pcodeop altv300_5;
define pcodeop altv300_6;
define pcodeop altv300_7;
define pcodeop altv300_8;
define pcodeop altv300_9;
define pcodeop altv300_10;
define pcodeop altv300_11;
define pcodeop altv300_12;
define pcodeop altv300_13;
define pcodeop altv300_14;
define pcodeop altv300_15;
define pcodeop altv300_16;
define pcodeop altv300_17;
define pcodeop altv300_18;
define pcodeop altv300_19;
define pcodeop altv300_20;
define pcodeop altv300_21;
define pcodeop altv300_22;
define pcodeop altv300_23;
define pcodeop altv300_24;
define pcodeop altv300_25;
define pcodeop altv300_26;
define pcodeop altv300_27;
define pcodeop altv300_28;
define pcodeop altv300_29;
define pcodeop altv300_30;
define pcodeop altv300_31;
define pcodeop altv300_32;
define pcodeop altv300_33;
define pcodeop altv300_34;
define pcodeop altv300_35;
define pcodeop altv300_36;
define pcodeop altv300_41;
define pcodeop altv300_42;
define pcodeop altv300_43;
define pcodeop altv300_44;
define pcodeop altv300_45;
define pcodeop altv300_46;
define pcodeop altv300_47;
define pcodeop altv300_48;
define pcodeop altv300_49;
define pcodeop altv300_50;
define pcodeop altv300_51;
define pcodeop altv300_52;
define pcodeop altv300_53;
define pcodeop altv300_54;
define pcodeop altv300_55;
define pcodeop altv300_56;
define pcodeop altv300_57;
define pcodeop altv300_58;
define pcodeop altv300_59;
define pcodeop altv300_60;
define pcodeop altv300_61;
define pcodeop altv300_62;
define pcodeop altv300_63;
define pcodeop altv300_64;
define pcodeop altv300_65;
define pcodeop altv300_66;
define pcodeop altv300_67;
define pcodeop altv300_68;
define pcodeop altv300_69;
define pcodeop altv300_70;
define pcodeop altv300_71;
#################
# 2.07 additions
:bcdadd. vrD,vrA,vrB,PS is OP=4 & BIT_10=1 & XOP_0_8=1 & vrA & vrB & vrD & PS {
vrD = altv207_64(vrA,vrB,PS:1);
}
:bcdsub. vrD,vrA,vrB,PS is OP=4 & BIT_10=1 & XOP_0_8=65 & vrA & vrB & vrD & PS {
vrD = altv207_65(vrA,vrB,PS:1);
}
:vaddcuq vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=320 {
vrD = altv207_1(vrA,vrB);
}
:vaddecuq vrD,vrA,vrB,vrC is OP=4 & vrD & vrA & vrB & vrC & XOP_0_5=61 {
vrD = altv207_2(vrA,vrB,vrC);
}
:vaddeuqm vrD,vrA,vrB,vrC is OP=4 & vrD & vrA & vrB & vrC & XOP_0_5=60 {
vrD = altv207_3(vrA,vrB,vrC);
}
:vaddudm vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=192 {
vrD = altv207_4(vrA,vrB);
}
:vadduqm vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=256 {
vrD = altv207_5(vrA,vrB);
}
:vbpermq vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=1356 {
vrD = altv207_6(vrA,vrB);
}
:vcipher vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=1288 {
vrD = altv207_7(vrA,vrB);
}
:vcipherlast vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=1289 {
vrD = altv207_8(vrA,vrB);
}
:vclzb vrD,vrB is OP=4 & vrD & vrB & BITS_16_20=0 & XOP_0_10=1794 {
vrD = altv207_9(vrB);
}
:vclzd vrD,vrB is OP=4 & vrD & vrB & BITS_16_20=0 & XOP_0_10=1986 {
vrD = altv207_10(vrB);
}
:vclzh vrD,vrB is OP=4 & vrD & vrB & BITS_16_20=0 & XOP_0_10=1858 {
vrD = altv207_11(vrB);
}
:vclzw vrD,vrB is OP=4 & vrD & vrB & BITS_16_20=0 & XOP_0_10=1922 {
vrD = altv207_12(vrB);
}
:vcmpequd vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & Rc2=0 & XOP_0_9=199 {
vrD = altv207_13(vrA,vrB);
}
:vcmpequd. vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & Rc2=1 & XOP_0_9=199 {
vrD = altv207_14(vrA,vrB);
}
:vcmpgtsd vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & Rc2=0 & XOP_0_9=967 {
vrD = altv207_15(vrA,vrB);
}
:vcmpgtsd. vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & Rc2=1 & XOP_0_9=967 {
vrD = altv207_16(vrA,vrB);
}
:vcmpgtud vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & Rc2=0 & XOP_0_9=711 {
vrD = altv207_17(vrA,vrB);
}
:vcmpgtud. vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & Rc2=1 & XOP_0_9=711 {
vrD = altv207_18(vrA,vrB);
}
:veqv vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=1668 {
vrD = altv207_19(vrA,vrB);
}
:vgbbd vrD,vrB is OP=4 & vrD & vrB & BITS_16_20=0 & XOP_0_10=1292 {
vrD = altv207_20(vrB);
}
:vmaxsd vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=450 {
vrD = altv207_21(vrA,vrB);
}
:vmaxud vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=194 {
vrD = altv207_22(vrA,vrB);
}
:vminsd vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=962 {
vrD = altv207_23(vrA,vrB);
}
:vminud vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=706 {
altv207_24(vrA,vrB);
}
:vmrgew vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=1932 {
vrD = altv207_25(vrA,vrB);
}
:vmrgow vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=1676 {
vrD = altv207_26(vrA,vrB);
}
:vmulesw vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=904 {
vrD = altv207_27(vrA,vrB);
}
:vmuleuw vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=648 {
vrD = altv207_28(vrA,vrB);
}
:vmulosw vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=392 {
vrD = altv207_29(vrA,vrB);
}
:vmulouw vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=136 {
vrD = altv207_30(vrA,vrB);
}
:vmuluwm vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=137 {
vrD = altv207_31(vrA,vrB);
}
:vnand vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=1412 {
vrD = altv207_32(vrA,vrB);
}
:vncipher vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=1352 {
vrD = altv207_33(vrA,vrB);
}
:vncipherlast vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=1353 {
vrD = altv207_34(vrA,vrB);
}
:vorc vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=1348 {
vrD = altv207_35(vrA,vrB);
}
:vpermxor vrD,vrA,vrB,vrC is OP=4 & vrD & vrA & vrB & vrC & XOP_0_5=45 {
vrD = altv207_36(vrA,vrB,vrC);
}
:vpksdss vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=1486 {
vrD = altv207_37(vrA,vrB);
}
:vpksdus vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=1358 {
vrD = altv207_38(vrA,vrB);
}
:vpkudum vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=1102 {
vrD = altv207_39(vrA,vrB);
}
:vpkudus vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=1230 {
vrD = altv207_41(vrA,vrB);
}
:vpmsumb vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=1032 {
vrD = altv207_42(vrA,vrB);
}
:vpmsumd vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=1224 {
vrD = altv207_43(vrA,vrB);
}
:vpmsumh vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=1096 {
vrD = altv207_44(vrA,vrB);
}
:vpmsumw vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=1160 {
vrD = altv207_45(vrA,vrB);
}
:vpopcntb vrD,vrB is OP=4 & vrD & vrB & BITS_16_20=0 & XOP_0_10=1795 {
vrD = altv207_46(vrB);
}
:vpopcntd vrD,vrB is OP=4 & vrD & vrB & BITS_16_20=0 & XOP_0_10=1987 {
vrD = altv207_47(vrB);
}
:vpopcnth vrD,vrB is OP=4 & vrD & vrB & BITS_16_20=0 & XOP_0_10=1859 {
vrD = altv207_48(vrB);
}
:vpopcntw vrD,vrB is OP=4 & vrD & vrB & BITS_16_20=0 & XOP_0_10=1923 {
vrD = altv207_49(vrB);
}
:vrld vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=196 {
vrD = altv207_50(vrA,vrB);
}
:vsbox vrD,vrA is OP=4 & vrD & vrA & BITS_11_15=0 & XOP_0_10=1480 {
vrD = altv207_51(vrA);
}
:vshasigmad vrD,vrA,ST,SIX is OP=4 & vrD & vrA & ST & SIX & XOP_0_10=1730 {
vrD = altv207_52(vrA,ST:1,SIX:1);
}
:vshasigmaw vrD,vrA,ST,SIX is OP=4 & vrD & vrA & ST & SIX & XOP_0_10=1666 {
vrD = altv207_53(vrA,ST:1,SIX:1);
}
:vsld vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=1476 {
vrD = altv207_54(vrA,vrB);
}
:vsrad vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=964 {
vrD = altv207_55(vrA,vrB);
}
:vsrd vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=1732 {
vrD = altv207_56(vrA,vrB);
}
:vsubcuq vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=1344 {
vrD = altv207_57(vrA,vrB);
}
:vsubecuq vrD,vrA,vrB,vrC is OP=4 & vrD & vrA & vrB & vrC & XOP_0_5=63 {
vrD = altv207_58(vrA,vrB,vrC);
}
:vsubeuqm vrD,vrA,vrB,vrC is OP=4 & vrD & vrA & vrB & vrC & XOP_0_5=62 {
vrD = altv207_59(vrA,vrB,vrC);
}
:vsubudm vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=1216 {
vrD = altv207_60(vrA,vrB);
}
:vsubuqm vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=1280 {
vrD = altv207_61(vrA,vrB);
}
:vupkhsw vrD,vrB is OP=4 & vrD & vrB & BITS_16_20=0 & XOP_0_10=1614 {
vrD = altv207_62(vrB);
}
:vupklsw vrD,vrB is OP=4 & vrD & vrB & BITS_16_20=0 & XOP_0_10=1742 {
vrD = altv207_63(vrB);
}
###################
# v3.0
:bcdcfn. vrD,vrB,PS is OP=4 & vrD & vrB & BITS_16_20=7 & XOP_0_8=385 & BIT_10=1 & PS {
vrD = altv300_1(vrB,PS:1);
}
:bcdcfsq. vrD,vrB,PS is OP=4 & vrD & vrB & BITS_16_20=2 & XOP_0_8=385 & BIT_10=1 & PS {
vrD = altv300_2(vrB,PS:1);
}
:bcdcfz. vrD,vrB,PS is OP=4 & vrD & vrB & BITS_16_20=6 & XOP_0_8=385 & BIT_10=1 & PS {
vrD = altv300_3(vrB,PS:1);
}
:bcdcpsgn. vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=833 {
vrD = altv300_4(vrA,vrB);
}
:bcdctn. vrD,vrB is OP=4 & vrD & vrB & BITS_16_20=5 & XOP_0_8=385 & BIT_10=1 & BIT_9=0 {
vrD = altv300_5(vrB);
}
:bcdctsq. vrD,vrB is OP=4 & vrD & vrB & BITS_16_20=0 & XOP_0_8=385 & BIT_10=1 & BIT_9=0 {
vrD = altv300_6(vrB);
}
:bcdctz. vrD,vrB,PS is OP=4 & vrD & vrB & BITS_16_20=4 & XOP_0_8=385 & BIT_10=1 & PS {
vrD = altv300_7(vrB,PS:1);
}
:bcds. vrD,vrA,vrB,PS is OP=4 & vrD & vrA & vrB & XOP_0_8=193 & BIT_10=1 & PS {
vrD = altv300_8(vrA,vrB,PS:1);
}
:bcdsetsgn. vrD,vrB,PS is OP=4 & vrD & vrB & BITS_16_20=31 & XOP_0_8=385 & BIT_10=1 & PS {
vrD = altv300_9(vrB,PS:1);
}
:bcdsr. vrD,vrA,vrB,PS is OP=4 & vrD & vrA & vrB & XOP_0_8=449 & BIT_10=1 & PS {
vrD = altv300_10(vrA,vrB,PS:1);
}
:bcdtrunc. vrD,vrA,vrB,PS is OP=4 & vrD & vrA & vrB & XOP_0_8=257 & BIT_10=1 & PS {
vrD = altv300_12(vrA,vrB,PS:1);
}
:bcdus. vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_8=129 & BIT_10=1 {
vrD = altv300_13(vrA,vrB);
}
:bcdutrunc. vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_8=321 & BIT_10=1 {
vrD = altv300_14(vrA,vrB);
}
:vabsdub vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=1027 {
vrD = altv300_15(vrA,vrB);
}
:vabsduh vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=1091 {
vrD = altv300_16(vrA,vrB);
}
:vabsduw vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=1155 {
vrD = altv300_17(vrA,vrB);
}
:vbpermd vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=1484 {
vrD = altv300_18(vrA,vrB);
}
:vclzlsbb vrD,vrB is OP=4 & vrD & vrB & BITS_16_20=0 & XOP_0_10=1538 {
vrD = altv300_19(vrB);
}
:vcmpneb vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & Rc2=0 & XOP_0_9=7 {
vrD = altv300_20(vrA,vrB);
}
:vcmpneb. vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & Rc2=1 & XOP_0_9=7 {
vrD = altv300_21(vrA,vrB);
}
:vcmpneh vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & Rc2=0 & XOP_0_9=71 {
vrD = altv300_22(vrA,vrB);
}
:vcmpneh. vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & Rc2=1 & XOP_0_9=71 {
vrD = altv300_23(vrA,vrB);
}
:vcmpnew vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & Rc2=0 & XOP_0_9=135 {
vrD = altv300_24(vrA,vrB);
}
:vcmpnew. vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & Rc2=1 & XOP_0_9=135 {
vrD = altv300_25(vrA,vrB);
}
:vcmpnezb vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & Rc2=0 & XOP_0_9=263 {
vrD = altv300_26(vrA,vrB);
}
:vcmpnezb. vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & Rc2=1 & XOP_0_9=263 {
vrD = altv300_27(vrA,vrB);
}
:vcmpnezh vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & Rc2=0 & XOP_0_9=327 {
vrD = altv300_28(vrA,vrB);
}
:vcmpnezh. vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & Rc2=1 & XOP_0_9=327 {
vrD = altv300_29(vrA,vrB);
}
:vcmpnezw vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & Rc2=0 & XOP_0_9=391 {
vrD = altv300_30(vrA,vrB);
}
:vcmpnezw. vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & Rc2=1 & XOP_0_9=391 {
vrD = altv300_31(vrA,vrB);
}
:vctzb vrD,vrB is OP=4 & vrD & vrB & BITS_16_20=28 & XOP_0_10=1538 {
vrD = altv300_32(vrB);
}
:vctzh vrD,vrB is OP=4 & vrD & vrB & BITS_16_20=29 & XOP_0_10=1538 {
vrD = altv300_33(vrB);
}
:vctzd vrD,vrB is OP=4 & vrD & vrB & BITS_16_20=31 & XOP_0_10=1538 {
vrD = altv300_34(vrB);
}
:vctzlsbb vrD,vrB is OP=4 & vrD & vrB & BITS_16_20=1 & XOP_0_10=1538 {
vrD = altv300_35(vrB);
}
:vctzw vrD,vrB is OP=4 & vrD & vrB & BITS_16_20=30 & XOP_0_10=1538 {
vrD = altv300_36(vrB);
}
:vextractd vrD,vrB,UIMB is OP=4 & vrD & BITS_20_20=0 & UIMB & vrB & XOP_0_10=717 {
# if UIMB > 8 the result is undefined
vrD = (vrB >> (16 * (8 - UIMB))) & 0xffffffffffffffff;
}
:vextractub vrD,vrB,UIMB is OP=4 & vrD & BITS_20_20=0 & UIMB & vrB & XOP_0_10=525 {
# if UIMB > 15 the result is undefined
vrD = (vrB >> (16 * (15 - UIMB))) & 0xff;
}
:vextractuh vrD,vrB,UIMB is OP=4 & vrD & BITS_20_20=0 & UIMB & vrB & XOP_0_10=589 {
# if UIMB > 14 the result is undefined
vrD = (vrB >> (16 * (14 - UIMB))) & 0xffff;
}
:vextractuw vrD,vrB,UIMB is OP=4 & vrD & BITS_20_20=0 & UIMB & vrB & XOP_0_10=653 {
# if UIMB > 12 the result is undefined
vrD = (vrB >> (16 * (12 - UIMB))) & 0xffffffff;
}
:vextsb2d vrD,vrB is OP=4 & vrD & vrB & BITS_16_20=24 & XOP_0_10=1538 {
vrD = altv300_41(vrB);
}
:vextsb2w vrD,vrB is OP=4 & vrD & vrB & BITS_16_20=16 & XOP_0_10=1538 {
vrD = altv300_42(vrB);
}
:vextsh2d vrD,vrB is OP=4 & vrD & vrB & BITS_16_20=25 & XOP_0_10=1538 {
vrD = altv300_43(vrB);
}
:vextsh2w vrD,vrB is OP=4 & vrD & vrB & BITS_16_20=17 & XOP_0_10=1538 {
vrD = altv300_44(vrB);
}
:vextsw2d vrD,vrB is OP=4 & vrD & vrB & BITS_16_20=26 & XOP_0_10=1538 {
vrD = altv300_45(vrB);
}
:vextublx D,A,vrB is OP=4 & D & A & vrB & XOP_0_10=1549 {
D = altv300_46(A,vrB);
}
:vextubrx D,A,vrB is OP=4 & D & A & vrB & XOP_0_10=1805 {
D = altv300_47(A,vrB);
}
:vextuhlx D,A,vrB is OP=4 & D & A & vrB & XOP_0_10=1613 {
D = altv300_48(A,vrB);
}
:vextuhrx D,A,vrB is OP=4 & D & A & vrB & XOP_0_10=1869 {
D = altv300_49(A,vrB);
}
# beware the backwards bit/byte ordering in the manual
:vextuwlx D,A,vrB is OP=4 & D & A & vrB & XOP_0_10=1677
{
local offs:2 = (12 - zext(A[0,4])) * 8;
local out:16 = (vrB >> offs) & 0xffffffff;
D = out:4;
}
:vextuwrx D,A,vrB is OP=4 & D & A & vrB & XOP_0_10=1933 {
D = altv300_51(A,vrB);
}
:vinsertb vrD,vrB,UIMB is OP=4 & vrD & BITS_20_20=0 & UIMB & vrB & XOP_0_10=781 {
vrD = altv300_52(vrB,UIMB:1);
}
:vinsertd vrD,vrB,UIMB is OP=4 & vrD & BITS_20_20=0 & UIMB & vrB & XOP_0_10=973 {
vrD = altv300_53(vrB,UIMB:1);
}
:vinserth vrD,vrB,UIMB is OP=4 & vrD & BITS_20_20=0 & UIMB & vrB & XOP_0_10=845 {
vrD = altv300_54(vrB,UIMB:1);
}
:vinsertw vrD,vrB,UIMB is OP=4 & vrD & BITS_20_20=0 & UIMB & vrB & XOP_0_10=909 {
vrD = altv300_55(vrB,UIMB:1);
}
:vmul10cuq vrD,vrA is OP=4 & vrD & vrA & BITS_11_15=0 & XOP_0_10=1 {
vrD = altv300_56(vrA);
}
:vmul10ecuq vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=65 {
vrD = altv300_57(vrA,vrB);
}
:vmul10euq vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=577 {
vrD = altv300_58(vrA,vrB);
}
:vmul10uq vrD,vrA is OP=4 & vrD & vrA & BITS_11_15=0 & XOP_0_10=513 {
vrD = altv300_59(vrA);
}
:vnegd vrD,vrB is OP=4 & vrD & vrB & BITS_16_20=7 & XOP_0_10=1538 {
vrD = altv300_60(vrB);
}
:vnegw vrD,vrB is OP=4 & vrD & vrB & BITS_16_20=6 & XOP_0_10=1538 {
vrD = altv300_61(vrB);
}
:vpermr vrD,vrA,vrB,vrC is OP=4 & vrD & vrA & vrB & vrC & XOP_0_5=59 {
vrD = altv300_62(vrA,vrB,vrC);
}
:vprtybd vrD,vrB is OP=4 & vrD & vrB & BITS_16_20=9 & XOP_0_10=1538 {
vrD = altv300_63(vrB);
}
:vprtybq vrD,vrB is OP=4 & vrD & vrB & BITS_16_20=10 & XOP_0_10=1538 {
vrD = altv300_64(vrB);
}
:vprtybw vrD,vrB is OP=4 & vrD & vrB & BITS_16_20=8 & XOP_0_10=1538 {
vrD = altv300_65(vrB);
}
:vrldmi vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=197 {
vrD = altv300_66(vrA,vrB);
}
:vrldnm vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=453 {
vrD = altv300_67(vrA,vrB);
}
:vrlwmi vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=133 {
vrD = altv300_68(vrA,vrB);
}
:vrlwnm vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=389 {
vrD = altv300_69(vrA,vrB);
}
:vslv vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=1860 {
vrD = altv300_70(vrA,vrB);
}
:vsrv vrD,vrA,vrB is OP=4 & vrD & vrA & vrB & XOP_0_10=1796 {
vrD = altv300_71(vrA,vrB);
}