shader: add imad decoder

This commit is contained in:
sunho
2020-08-17 16:00:59 +09:00
committed by Sunho Kim
parent 7dc3ecaa99
commit 04791a3170
4 changed files with 125 additions and 0 deletions
+54
View File
@@ -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,
+22
View File
@@ -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