A64: Implement UADDLP

This commit is contained in:
MerryMage 2018-07-15 18:26:54 +01:00
parent 5563bbbd79
commit 70ff2d73b5
6 changed files with 104 additions and 8 deletions

View file

@ -1140,6 +1140,21 @@ U128 IREmitter::VectorOr(const U128& a, const U128& b) {
return Inst<U128>(Opcode::VectorOr, a, b);
}
U128 IREmitter::VectorPairedAdd(size_t esize, const U128& a, const U128& b) {
switch (esize) {
case 8:
return Inst<U128>(Opcode::VectorPairedAdd8, a, b);
case 16:
return Inst<U128>(Opcode::VectorPairedAdd16, a, b);
case 32:
return Inst<U128>(Opcode::VectorPairedAdd32, a, b);
case 64:
return Inst<U128>(Opcode::VectorPairedAdd64, a, b);
}
UNREACHABLE();
return {};
}
U128 IREmitter::VectorPairedAddLower(size_t esize, const U128& a, const U128& b) {
switch (esize) {
case 8:
@ -1153,16 +1168,14 @@ U128 IREmitter::VectorPairedAddLower(size_t esize, const U128& a, const U128& b)
return {};
}
U128 IREmitter::VectorPairedAdd(size_t esize, const U128& a, const U128& b) {
switch (esize) {
U128 IREmitter::VectorPairedAddUnsignedWiden(size_t original_esize, const U128& a) {
switch (original_esize) {
case 8:
return Inst<U128>(Opcode::VectorPairedAdd8, a, b);
return Inst<U128>(Opcode::VectorPairedAddUnsignedWiden8, a);
case 16:
return Inst<U128>(Opcode::VectorPairedAdd16, a, b);
return Inst<U128>(Opcode::VectorPairedAddUnsignedWiden16, a);
case 32:
return Inst<U128>(Opcode::VectorPairedAdd32, a, b);
case 64:
return Inst<U128>(Opcode::VectorPairedAdd64, a, b);
return Inst<U128>(Opcode::VectorPairedAddUnsignedWiden32, a);
}
UNREACHABLE();
return {};

View file

@ -236,6 +236,7 @@ public:
U128 VectorOr(const U128& a, const U128& b);
U128 VectorPairedAdd(size_t esize, const U128& a, const U128& b);
U128 VectorPairedAddLower(size_t esize, const U128& a, const U128& b);
U128 VectorPairedAddUnsignedWiden(size_t original_esize, const U128& a);
U128 VectorPopulationCount(const U128& a);
U128 VectorReverseBits(const U128& a);
U128 VectorRotateLeft(size_t esize, const U128& a, u8 amount);

View file

@ -319,6 +319,9 @@ OPCODE(VectorOr, T::U128, T::U128, T::U
OPCODE(VectorPairedAddLower8, T::U128, T::U128, T::U128 )
OPCODE(VectorPairedAddLower16, T::U128, T::U128, T::U128 )
OPCODE(VectorPairedAddLower32, T::U128, T::U128, T::U128 )
OPCODE(VectorPairedAddUnsignedWiden8, T::U128, T::U128 )
OPCODE(VectorPairedAddUnsignedWiden16, T::U128, T::U128 )
OPCODE(VectorPairedAddUnsignedWiden32, T::U128, T::U128 )
OPCODE(VectorPairedAdd8, T::U128, T::U128, T::U128 )
OPCODE(VectorPairedAdd16, T::U128, T::U128, T::U128 )
OPCODE(VectorPairedAdd32, T::U128, T::U128, T::U128 )