mirror of
https://github.com/Vita3K/Vita3K.git
synced 2026-07-11 01:34:23 +02:00
shader: add imad decoder
This commit is contained in:
@@ -376,6 +376,60 @@ SOP2:
|
||||
- src2_n:
|
||||
offset: 0
|
||||
size: 7
|
||||
IMAD:
|
||||
description: Integer multiply-add
|
||||
members:
|
||||
- op1: '11010'
|
||||
- pred:
|
||||
size: 3
|
||||
type: ExtPredicate
|
||||
- DONTCARE:
|
||||
size: 1
|
||||
- nosched:
|
||||
size: 1
|
||||
- sn:
|
||||
size: 2
|
||||
- dest_bank_ext:
|
||||
size: 1
|
||||
type: bool
|
||||
- end:
|
||||
size: 1
|
||||
- src1_bank_ext:
|
||||
size: 1
|
||||
type: bool
|
||||
- src2_bank_ext:
|
||||
size: 1
|
||||
type: bool
|
||||
- src0_bank_ext:
|
||||
size: 1
|
||||
type: bool
|
||||
- count:
|
||||
size: 3
|
||||
- unk0: '00'
|
||||
- is_signed:
|
||||
size: 1
|
||||
type: bool
|
||||
- negative_src1:
|
||||
size: 1
|
||||
- negative_src2:
|
||||
size: 1
|
||||
- unk1: '0000'
|
||||
- src0_bank:
|
||||
size: 1
|
||||
- dest_bank:
|
||||
size: 2
|
||||
- src1_bank:
|
||||
size: 2
|
||||
- src2_bank:
|
||||
size: 2
|
||||
- dest_n:
|
||||
size: 7
|
||||
- src0_n:
|
||||
size: 7
|
||||
- src1_n:
|
||||
size: 7
|
||||
- src2_n:
|
||||
size: 7
|
||||
VTST:
|
||||
description: Test Instructions
|
||||
members:
|
||||
|
||||
@@ -357,6 +357,27 @@ public:
|
||||
Imm7 src1_n,
|
||||
Imm7 src2_n);
|
||||
|
||||
bool imad(ExtPredicate pred,
|
||||
Imm1 nosched,
|
||||
Imm2 sn,
|
||||
bool dest_bank_ext,
|
||||
Imm1 end,
|
||||
bool src1_bank_ext,
|
||||
bool src2_bank_ext,
|
||||
bool src0_bank_ext,
|
||||
Imm3 count,
|
||||
bool is_signed,
|
||||
Imm1 negative_src1,
|
||||
Imm1 negative_src2,
|
||||
Imm1 src0_bank,
|
||||
Imm2 dest_bank,
|
||||
Imm2 src1_bank,
|
||||
Imm2 src2_bank,
|
||||
Imm7 dest_n,
|
||||
Imm7 src0_n,
|
||||
Imm7 src1_n,
|
||||
Imm7 src2_n);
|
||||
|
||||
bool vtst(ExtPredicate pred,
|
||||
Imm1 skipinv,
|
||||
Imm1 onceonly,
|
||||
|
||||
@@ -140,6 +140,28 @@ bool USSETranslatorVisitor::vmad(
|
||||
return true;
|
||||
}
|
||||
|
||||
bool USSETranslatorVisitor::imad(ExtPredicate pred,
|
||||
Imm1 nosched,
|
||||
Imm2 sn,
|
||||
bool dest_bank_ext,
|
||||
Imm1 end,
|
||||
bool src1_bank_ext,
|
||||
bool src2_bank_ext,
|
||||
bool src0_bank_ext,
|
||||
Imm3 count,
|
||||
bool is_signed,
|
||||
Imm1 negative_src1,
|
||||
Imm1 negative_src2,
|
||||
Imm1 src0_bank,
|
||||
Imm2 dest_bank,
|
||||
Imm2 src1_bank,
|
||||
Imm2 src2_bank,
|
||||
Imm7 dest_n,
|
||||
Imm7 src0_n,
|
||||
Imm7 src1_n,
|
||||
Imm7 src2_n) {
|
||||
}
|
||||
|
||||
bool USSETranslatorVisitor::vmad2(
|
||||
Imm1 dat_fmt,
|
||||
Imm2 pred,
|
||||
|
||||
@@ -250,6 +250,34 @@ boost::optional<const USSEMatcher<V> &> DecodeUSSE(uint64_t instruction) {
|
||||
AAAAAAA = src2_n (7 bits)
|
||||
*/
|
||||
INST(&V::sop2, "SOP2 ()", "10000ppcsnaaderbmooofllggghhhittkkjjqqqqqqquvvwwxyzzzzzzzAAAAAAA"),
|
||||
// Integer multiply-add
|
||||
/*
|
||||
11010 = op1
|
||||
ppp = pred (3 bits, ExtPredicate)
|
||||
- = don't care
|
||||
n = nosched (1 bit)
|
||||
ss = sn (2 bits)
|
||||
d = dest_bank_ext (1 bit, bool)
|
||||
e = end (1 bit)
|
||||
r = src1_bank_ext (1 bit, bool)
|
||||
c = src2_bank_ext (1 bit, bool)
|
||||
b = src0_bank_ext (1 bit, bool)
|
||||
ooo = count (3 bits)
|
||||
00 = unk0
|
||||
i = is_signed (1 bit, bool)
|
||||
g = negative_src1 (1 bit)
|
||||
a = negative_src2 (1 bit)
|
||||
0000 = unk1
|
||||
k = src0_bank (1 bit)
|
||||
tt = dest_bank (2 bits)
|
||||
ff = src1_bank (2 bits)
|
||||
hh = src2_bank (2 bits)
|
||||
jjjjjjj = dest_n (7 bits)
|
||||
lllllll = src0_n (7 bits)
|
||||
mmmmmmm = src1_n (7 bits)
|
||||
qqqqqqq = src2_n (7 bits)
|
||||
*/
|
||||
INST(&V::imad, "IMAD ()", "11010ppp-nssdercbooo00iga0000kttffhhjjjjjjjlllllllmmmmmmmqqqqqqq"),
|
||||
// Test Instructions
|
||||
/*
|
||||
01001 = op1
|
||||
|
||||
Reference in New Issue
Block a user