mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-02 23:33:54 -06:00
Hexagon (target/hexagon) add F2_sfrecipa instruction
Rd32,Pe4 = sfrecipa(Rs32, Rt32) Recripocal approx Test cases in tests/tcg/hexagon/multi_result.c FP exception tests added to tests/tcg/hexagon/fpstuff.c Signed-off-by: Taylor Simpson <tsimpson@quicinc.com> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Message-Id: <1617930474-31979-18-git-send-email-tsimpson@quicinc.com> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
parent
85580a6557
commit
d934c16d8a
10 changed files with 252 additions and 3 deletions
|
@ -289,6 +289,43 @@ int32_t HELPER(fcircadd)(int32_t RxV, int32_t offset, int32_t M, int32_t CS)
|
|||
return new_ptr;
|
||||
}
|
||||
|
||||
static float32 build_float32(uint8_t sign, uint32_t exp, uint32_t mant)
|
||||
{
|
||||
return make_float32(
|
||||
((sign & 1) << 31) |
|
||||
((exp & 0xff) << SF_MANTBITS) |
|
||||
(mant & ((1 << SF_MANTBITS) - 1)));
|
||||
}
|
||||
|
||||
/*
|
||||
* sfrecipa, sfinvsqrta have two 32-bit results
|
||||
* r0,p0=sfrecipa(r1,r2)
|
||||
* r0,p0=sfinvsqrta(r1)
|
||||
*
|
||||
* Since helpers can only return a single value, we pack the two results
|
||||
* into a 64-bit value.
|
||||
*/
|
||||
uint64_t HELPER(sfrecipa)(CPUHexagonState *env, float32 RsV, float32 RtV)
|
||||
{
|
||||
int32_t PeV = 0;
|
||||
float32 RdV;
|
||||
int idx;
|
||||
int adjust;
|
||||
int mant;
|
||||
int exp;
|
||||
|
||||
arch_fpop_start(env);
|
||||
if (arch_sf_recip_common(&RsV, &RtV, &RdV, &adjust, &env->fp_status)) {
|
||||
PeV = adjust;
|
||||
idx = (RtV >> 16) & 0x7f;
|
||||
mant = (recip_lookup_table[idx] << 15) | 1;
|
||||
exp = SF_BIAS - (float32_getexp(RtV) - SF_BIAS) - 1;
|
||||
RdV = build_float32(extract32(RtV, 31, 1), exp, mant);
|
||||
}
|
||||
arch_fpop_end(env);
|
||||
return ((uint64_t)RdV << 32) | PeV;
|
||||
}
|
||||
|
||||
/*
|
||||
* mem_noshuf
|
||||
* Section 5.5 of the Hexagon V67 Programmer's Reference Manual
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue