nouveau/mme: Add a mul64 helper
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24326>
This commit is contained in:
committed by
Marge Bot
parent
adb880cd29
commit
62bd03a0e7
@@ -158,6 +158,17 @@ mme_imm(uint32_t imm)
|
||||
return val;
|
||||
}
|
||||
|
||||
static inline bool
|
||||
mme_is_zero(struct mme_value x)
|
||||
{
|
||||
switch (x.type) {
|
||||
case MME_VALUE_TYPE_ZERO: return true;
|
||||
case MME_VALUE_TYPE_IMM: return x.imm == 0;
|
||||
case MME_VALUE_TYPE_REG: return false;
|
||||
default: unreachable("Invalid MME value type");
|
||||
}
|
||||
}
|
||||
|
||||
static inline struct mme_value64
|
||||
mme_value64(struct mme_value lo, struct mme_value hi)
|
||||
{
|
||||
@@ -381,6 +392,27 @@ mme_umul_32x32_64(struct mme_builder *b,
|
||||
mme_value64(y, mme_zero()));
|
||||
}
|
||||
|
||||
static inline struct mme_value64
|
||||
mme_mul64(struct mme_builder *b,
|
||||
struct mme_value64 x, struct mme_value64 y)
|
||||
{
|
||||
if (mme_is_zero(x.hi) && mme_is_zero(y.hi))
|
||||
return mme_umul_32x32_64(b, x.lo, y.lo);
|
||||
|
||||
struct mme_value64 dst = mme_umul_32x32_64(b, x.lo, y.lo);
|
||||
struct mme_value tmp = mme_alloc_reg(b);
|
||||
|
||||
mme_mul_to(b, tmp, x.lo, y.hi);
|
||||
mme_add64_to(b, dst, dst, mme_value64(mme_zero(), tmp));
|
||||
|
||||
mme_mul_to(b, tmp, x.hi, y.lo);
|
||||
mme_add64_to(b, dst, dst, mme_value64(mme_zero(), tmp));
|
||||
|
||||
mme_free_reg(b, tmp);
|
||||
|
||||
return dst;
|
||||
}
|
||||
|
||||
static inline void
|
||||
mme_merge_to(struct mme_builder *b, struct mme_value dst,
|
||||
struct mme_value x, struct mme_value y,
|
||||
|
||||
Reference in New Issue
Block a user