mirror of
https://github.com/Vita3K/Vita3K.git
synced 2026-07-11 01:34:23 +02:00
shader: add i32mad decoder
This commit is contained in:
@@ -788,8 +788,61 @@ I32MAD:
|
||||
description: 32-bit Integer multiply-add
|
||||
members:
|
||||
- opcode1: '10101'
|
||||
- pred:
|
||||
size: 2
|
||||
type: ShortPredicate
|
||||
- src0_high:
|
||||
size: 1
|
||||
- DONTCARE:
|
||||
size: 59
|
||||
size: 1
|
||||
- nosched:
|
||||
size: 1
|
||||
- src1_high:
|
||||
size: 1
|
||||
- src2_high:
|
||||
size: 1
|
||||
- dest_bank_ext:
|
||||
size: 1
|
||||
type: bool
|
||||
- end:
|
||||
size: 1
|
||||
- src1_bank_ext:
|
||||
size: 1
|
||||
type: bool
|
||||
- src2_bank_ext:
|
||||
size: 1
|
||||
type: bool
|
||||
- unk0: '0'
|
||||
- repeat_count:
|
||||
size: 3
|
||||
type: RepeatCount
|
||||
- is_signed:
|
||||
size: 1
|
||||
type: bool
|
||||
- is_sat:
|
||||
size: 1
|
||||
type: bool
|
||||
- unk1: '00'
|
||||
- src2_type:
|
||||
size: 2
|
||||
- unk2: '000'
|
||||
- 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
|
||||
|
||||
ILLEGAL22:
|
||||
description: Illegal instruction
|
||||
members:
|
||||
|
||||
@@ -512,7 +512,27 @@ public:
|
||||
|
||||
bool i16mad();
|
||||
|
||||
bool i32mad();
|
||||
bool i32mad(ShortPredicate pred,
|
||||
Imm1 src0_high,
|
||||
Imm1 nosched,
|
||||
Imm1 src1_high,
|
||||
Imm1 src2_high,
|
||||
bool dest_bank_ext,
|
||||
Imm1 end,
|
||||
bool src1_bank_ext,
|
||||
bool src2_bank_ext,
|
||||
RepeatCount repeat_count,
|
||||
bool is_signed,
|
||||
bool is_sat,
|
||||
Imm2 src2_type,
|
||||
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 illegal22();
|
||||
|
||||
|
||||
@@ -151,7 +151,28 @@ bool USSETranslatorVisitor::i16mad() {
|
||||
return true;
|
||||
}
|
||||
|
||||
bool USSETranslatorVisitor::i32mad() {
|
||||
bool USSETranslatorVisitor::i32mad(
|
||||
ShortPredicate pred,
|
||||
Imm1 src0_high,
|
||||
Imm1 nosched,
|
||||
Imm1 src1_high,
|
||||
Imm1 src2_high,
|
||||
bool dest_bank_ext,
|
||||
Imm1 end,
|
||||
bool src1_bank_ext,
|
||||
bool src2_bank_ext,
|
||||
RepeatCount repeat_count,
|
||||
bool is_signed,
|
||||
bool is_sat,
|
||||
Imm2 src2_type,
|
||||
Imm1 src0_bank,
|
||||
Imm2 dest_bank,
|
||||
Imm2 src1_bank,
|
||||
Imm2 src2_bank,
|
||||
Imm7 dest_n,
|
||||
Imm7 src0_n,
|
||||
Imm7 src1_n,
|
||||
Imm7 src2_n) {
|
||||
LOG_DISASM("Unimplmenet Opcode: i32mad");
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -458,9 +458,33 @@ boost::optional<const USSEMatcher<V> &> DecodeUSSE(uint64_t instruction) {
|
||||
// 32-bit Integer multiply-add
|
||||
/*
|
||||
10101 = opcode1
|
||||
----------------------------------------------------------- = don't care
|
||||
pp = pred (2 bits, ShortPredicate)
|
||||
s = src0_high (1 bit)
|
||||
- = don't care
|
||||
n = nosched (1 bit)
|
||||
r = src1_high (1 bit)
|
||||
c = src2_high (1 bit)
|
||||
d = dest_bank_ext (1 bit, bool)
|
||||
e = end (1 bit)
|
||||
b = src1_bank_ext (1 bit, bool)
|
||||
a = src2_bank_ext (1 bit, bool)
|
||||
0 = unk0
|
||||
ttt = repeat_count (3 bits, RepeatCount)
|
||||
i = is_signed (1 bit, bool)
|
||||
f = is_sat (1 bit, bool)
|
||||
00 = unk1
|
||||
yy = src2_type (2 bits)
|
||||
000 = unk2
|
||||
k = src0_bank (1 bit)
|
||||
gg = dest_bank (2 bits)
|
||||
hh = src1_bank (2 bits)
|
||||
jj = src2_bank (2 bits)
|
||||
lllllll = dest_n (7 bits)
|
||||
mmmmmmm = src0_n (7 bits)
|
||||
ooooooo = src1_n (7 bits)
|
||||
qqqqqqq = src2_n (7 bits)
|
||||
*/
|
||||
INST(&V::i32mad, "I32MAD ()", "10101-----------------------------------------------------------"),
|
||||
INST(&V::i32mad, "I32MAD ()", "10101pps-nrcdeba0tttif00yy000kgghhjjlllllllmmmmmmmoooooooqqqqqqq"),
|
||||
// Illegal instruction
|
||||
/*
|
||||
10110 = opcode1
|
||||
|
||||
Reference in New Issue
Block a user