mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-07 01:33:56 -06:00
target-arm: A64: Implement SIMD FP compare and set insns
This adds all forms of the SIMD floating point and set instructions: FCM(GT|GE|EQ|LE|LT) Most of the heavy lifting is done by either the existing neon helpers or some new helpers for the 64bit double cases. Most of the code paths are common although the 2misc versions are a little special as they compare against zero. Signed-off-by: Alex Bennée <alex.bennee@linaro.org> [PMM: fixed some minor bugs, added the 2-misc-scalar encoding] Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Reviewed-by: Richard Henderson <rth@twiddle.net>
This commit is contained in:
parent
b033cd3d00
commit
8908f4d185
3 changed files with 207 additions and 12 deletions
|
@ -179,3 +179,22 @@ uint64_t HELPER(simd_tbl)(CPUARMState *env, uint64_t result, uint64_t indices,
|
|||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
/* 64bit/double versions of the neon float compare functions */
|
||||
uint64_t HELPER(neon_ceq_f64)(float64 a, float64 b, void *fpstp)
|
||||
{
|
||||
float_status *fpst = fpstp;
|
||||
return -float64_eq_quiet(a, b, fpst);
|
||||
}
|
||||
|
||||
uint64_t HELPER(neon_cge_f64)(float64 a, float64 b, void *fpstp)
|
||||
{
|
||||
float_status *fpst = fpstp;
|
||||
return -float64_le(b, a, fpst);
|
||||
}
|
||||
|
||||
uint64_t HELPER(neon_cgt_f64)(float64 a, float64 b, void *fpstp)
|
||||
{
|
||||
float_status *fpst = fpstp;
|
||||
return -float64_lt(b, a, fpst);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue