389d388
< template <class T>
391,455d389
< AtomicSimpleCPU::read(Addr addr, T &data, unsigned flags)
< {
< uint8_t *dataPtr = (uint8_t *)&data;
< memset(dataPtr, 0, sizeof(data));
< Fault fault = readBytes(addr, dataPtr, sizeof(data), flags);
< if (fault == NoFault) {
< data = gtoh(data);
< if (traceData)
< traceData->setData(data);
< }
< return fault;
< }
<
< #ifndef DOXYGEN_SHOULD_SKIP_THIS
<
< template
< Fault
< AtomicSimpleCPU::read(Addr addr, Twin32_t &data, unsigned flags);
<
< template
< Fault
< AtomicSimpleCPU::read(Addr addr, Twin64_t &data, unsigned flags);
<
< template
< Fault
< AtomicSimpleCPU::read(Addr addr, uint64_t &data, unsigned flags);
<
< template
< Fault
< AtomicSimpleCPU::read(Addr addr, uint32_t &data, unsigned flags);
<
< template
< Fault
< AtomicSimpleCPU::read(Addr addr, uint16_t &data, unsigned flags);
<
< template
< Fault
< AtomicSimpleCPU::read(Addr addr, uint8_t &data, unsigned flags);
<
< #endif //DOXYGEN_SHOULD_SKIP_THIS
<
< template<>
< Fault
< AtomicSimpleCPU::read(Addr addr, double &data, unsigned flags)
< {
< return read(addr, *(uint64_t*)&data, flags);
< }
<
< template<>
< Fault
< AtomicSimpleCPU::read(Addr addr, float &data, unsigned flags)
< {
< return read(addr, *(uint32_t*)&data, flags);
< }
<
<
< template<>
< Fault
< AtomicSimpleCPU::read(Addr addr, int32_t &data, unsigned flags)
< {
< return read(addr, (uint32_t&)data, flags);
< }
<
<
< Fault
558,631d491
< template <class T>
< Fault
< AtomicSimpleCPU::write(T data, Addr addr, unsigned flags, uint64_t *res)
< {
< uint8_t *dataPtr = (uint8_t *)&data;
< if (traceData)
< traceData->setData(data);
< data = htog(data);
<
< Fault fault = writeBytes(dataPtr, sizeof(data), addr, flags, res);
< if (fault == NoFault && data_write_req.isSwap()) {
< *res = gtoh((T)*res);
< }
< return fault;
< }
<
<
< #ifndef DOXYGEN_SHOULD_SKIP_THIS
<
< template
< Fault
< AtomicSimpleCPU::write(Twin32_t data, Addr addr,
< unsigned flags, uint64_t *res);
<
< template
< Fault
< AtomicSimpleCPU::write(Twin64_t data, Addr addr,
< unsigned flags, uint64_t *res);
<
< template
< Fault
< AtomicSimpleCPU::write(uint64_t data, Addr addr,
< unsigned flags, uint64_t *res);
<
< template
< Fault
< AtomicSimpleCPU::write(uint32_t data, Addr addr,
< unsigned flags, uint64_t *res);
<
< template
< Fault
< AtomicSimpleCPU::write(uint16_t data, Addr addr,
< unsigned flags, uint64_t *res);
<
< template
< Fault
< AtomicSimpleCPU::write(uint8_t data, Addr addr,
< unsigned flags, uint64_t *res);
<
< #endif //DOXYGEN_SHOULD_SKIP_THIS
<
< template<>
< Fault
< AtomicSimpleCPU::write(double data, Addr addr, unsigned flags, uint64_t *res)
< {
< return write(*(uint64_t*)&data, addr, flags, res);
< }
<
< template<>
< Fault
< AtomicSimpleCPU::write(float data, Addr addr, unsigned flags, uint64_t *res)
< {
< return write(*(uint32_t*)&data, addr, flags, res);
< }
<
<
< template<>
< Fault
< AtomicSimpleCPU::write(int32_t data, Addr addr, unsigned flags, uint64_t *res)
< {
< return write((uint32_t)data, addr, flags, res);
< }
<
<