mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-04-27 08:50:49 +02:00
Correct the convert to and from float instructions
This commit is contained in:
parent
c179bc9901
commit
2cc0c3b997
2 changed files with 42 additions and 4 deletions
|
|
@ -87,6 +87,20 @@ union spe_inst_RI7 {
|
|||
};
|
||||
|
||||
|
||||
/**
|
||||
* Encode one output register with one input reg. and an 8-bit signed immed
|
||||
*/
|
||||
union spe_inst_RI8 {
|
||||
uint32_t bits;
|
||||
struct {
|
||||
unsigned op:10;
|
||||
unsigned i8:8;
|
||||
unsigned rA:7;
|
||||
unsigned rT:7;
|
||||
} inst;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Encode one output register with one input reg. and a 10-bit signed immed
|
||||
*/
|
||||
|
|
@ -169,6 +183,20 @@ static void emit_RI7(struct spe_function *p, unsigned op, unsigned rT,
|
|||
|
||||
|
||||
|
||||
static void emit_RI8(struct spe_function *p, unsigned op, unsigned rT,
|
||||
unsigned rA, int imm)
|
||||
{
|
||||
union spe_inst_RI8 inst;
|
||||
inst.inst.op = op;
|
||||
inst.inst.i8 = imm;
|
||||
inst.inst.rA = rA;
|
||||
inst.inst.rT = rT;
|
||||
*p->csr = inst.bits;
|
||||
p->csr++;
|
||||
}
|
||||
|
||||
|
||||
|
||||
static void emit_RI10(struct spe_function *p, unsigned op, unsigned rT,
|
||||
unsigned rA, int imm)
|
||||
{
|
||||
|
|
@ -238,6 +266,12 @@ void _name (struct spe_function *p, unsigned rT, unsigned rA, int imm) \
|
|||
emit_RI7(p, _op, rT, rA, imm); \
|
||||
}
|
||||
|
||||
#define EMIT_RI8(_name, _op) \
|
||||
void _name (struct spe_function *p, unsigned rT, unsigned rA, int imm) \
|
||||
{ \
|
||||
emit_RI8(p, _op, rT, rA, 155 - imm); \
|
||||
}
|
||||
|
||||
#define EMIT_RI10(_name, _op) \
|
||||
void _name (struct spe_function *p, unsigned rT, unsigned rA, int imm) \
|
||||
{ \
|
||||
|
|
|
|||
|
|
@ -60,6 +60,9 @@ extern void spe_release_func(struct spe_function *p);
|
|||
#define EMIT_RI7(_name, _op) \
|
||||
extern void _name (struct spe_function *p, unsigned rT, unsigned rA, \
|
||||
int imm)
|
||||
#define EMIT_RI8(_name, _op) \
|
||||
extern void _name (struct spe_function *p, unsigned rT, unsigned rA, \
|
||||
int imm)
|
||||
#define EMIT_RI10(_name, _op) \
|
||||
extern void _name (struct spe_function *p, unsigned rT, unsigned rA, \
|
||||
int imm)
|
||||
|
|
@ -270,10 +273,10 @@ EMIT_RR (spe_dfnma, 0x35f);
|
|||
EMIT_R (spe_frest, 0x1b8);
|
||||
EMIT_R (spe_frsqest, 0x1b9);
|
||||
EMIT_RR (spe_fi, 0x3d4);
|
||||
EMIT_RI7 (spe_csflt, 0x3da);
|
||||
EMIT_RI7 (spe_cflts, 0x3d8);
|
||||
EMIT_RI7 (spe_cuflt, 0x3db);
|
||||
EMIT_RI7 (spe_cfltu, 0x3d9);
|
||||
EMIT_RI8 (spe_csflt, 0x1da);
|
||||
EMIT_RI8 (spe_cflts, 0x1d8);
|
||||
EMIT_RI8 (spe_cuflt, 0x1db);
|
||||
EMIT_RI8 (spe_cfltu, 0x1d9);
|
||||
EMIT_R (spe_frds, 0x3b9);
|
||||
EMIT_R (spe_fesd, 0x3b8);
|
||||
EMIT_RR (spe_dfceq, 0x3c3);
|
||||
|
|
@ -302,6 +305,7 @@ EMIT_R (spe_wrch, 0x10d);
|
|||
#undef EMIT_RR
|
||||
#undef EMIT_RRR
|
||||
#undef EMIT_RI7
|
||||
#undef EMIT_RI8
|
||||
#undef EMIT_RI10
|
||||
#undef EMIT_RI16
|
||||
#undef EMIT_RI18
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue