mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-07 01:33:56 -06:00
target-arm: A64: Implement CRC instructions
Implement the optional A64 CRC instructions. Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Message-id: 1401458125-27977-6-git-send-email-peter.maydell@linaro.org
This commit is contained in:
parent
da5141fc45
commit
130f2e7dcb
4 changed files with 86 additions and 1 deletions
|
@ -24,6 +24,8 @@
|
|||
#include "sysemu/sysemu.h"
|
||||
#include "qemu/bitops.h"
|
||||
#include "internals.h"
|
||||
#include "qemu/crc32c.h"
|
||||
#include <zlib.h> /* For crc32 */
|
||||
|
||||
/* C2.4.7 Multiply and divide */
|
||||
/* special cases for 0 and LLONG_MIN are mandated by the standard */
|
||||
|
@ -408,6 +410,34 @@ float32 HELPER(fcvtx_f64_to_f32)(float64 a, CPUARMState *env)
|
|||
return r;
|
||||
}
|
||||
|
||||
/* 64-bit versions of the CRC helpers. Note that although the operation
|
||||
* (and the prototypes of crc32c() and crc32() mean that only the bottom
|
||||
* 32 bits of the accumulator and result are used, we pass and return
|
||||
* uint64_t for convenience of the generated code. Unlike the 32-bit
|
||||
* instruction set versions, val may genuinely have 64 bits of data in it.
|
||||
* The upper bytes of val (above the number specified by 'bytes') must have
|
||||
* been zeroed out by the caller.
|
||||
*/
|
||||
uint64_t HELPER(crc32_64)(uint64_t acc, uint64_t val, uint32_t bytes)
|
||||
{
|
||||
uint8_t buf[8];
|
||||
|
||||
stq_le_p(buf, val);
|
||||
|
||||
/* zlib crc32 converts the accumulator and output to one's complement. */
|
||||
return crc32(acc ^ 0xffffffff, buf, bytes) ^ 0xffffffff;
|
||||
}
|
||||
|
||||
uint64_t HELPER(crc32c_64)(uint64_t acc, uint64_t val, uint32_t bytes)
|
||||
{
|
||||
uint8_t buf[8];
|
||||
|
||||
stq_le_p(buf, val);
|
||||
|
||||
/* Linux crc32c converts the output to one's complement. */
|
||||
return crc32c(acc, buf, bytes) ^ 0xffffffff;
|
||||
}
|
||||
|
||||
/* Handle a CPU exception. */
|
||||
void aarch64_cpu_do_interrupt(CPUState *cs)
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue