ETISS 0.11.2
ExtendableTranslatingInstructionSetSimulator(version0.11.2)
Loading...
Searching...
No Matches
FastMemory.cpp
Go to the documentation of this file.
1// SPDX-License-Identifier: BSD-3-Clause
2//
3// This file is part of ETISS. It is licensed under the BSD 3-Clause License; you may not use this file except in
4// compliance with the License. You should have received a copy of the license along with this project. If not, see the
5// LICENSE file.
6
7#include "etiss/FastMemory.h"
8#include "etiss/jit/ReturnCode.h"
9#include "etiss/jit/System.h"
10#include <cstring>
11
13{
14 return 0;
15}
16static etiss_int32 system_call_iwrite(void *handle, ETISS_CPU *cpu, etiss_uint64 addr, etiss_uint8 *buffer,
18{
19 return etiss::RETURNCODE::IBUS_WRITE_ERROR;
20}
21
22static etiss_int32 system_call_dread(void *handle, ETISS_CPU *cpu, etiss_uint64 addr, etiss_uint8 *buffer,
24{
25 memcpy(buffer, ((uint8_t *)handle) + (size_t)addr, length);
26 return 0;
27}
28static etiss_int32 system_call_dwrite(void *handle, ETISS_CPU *cpu, etiss_uint64 addr, etiss_uint8 *buffer,
30{
31 memcpy(((uint8_t *)handle) + (size_t)addr, buffer, length);
32 return 0;
33}
34
36{
37 memcpy(buffer, ((uint8_t *)handle) + (size_t)addr, length);
38 return 0;
39}
40
42{
43 memcpy(((uint8_t *)handle) + (size_t)addr, buffer, length);
44 return 0;
45}
46
47static void system_call_syncTime(void *handle, ETISS_CPU *cpu) {}
48
49std::shared_ptr<ETISS_System> etiss::createFastMemory(size_t size)
50{
51 auto ret = std::make_shared<ETISS_System>();
52
53 ret->iread = &system_call_iread;
54 ret->iwrite = &system_call_iwrite;
55
56 ret->dread = &system_call_dread;
57 ret->dwrite = &system_call_dwrite;
58
59 ret->dbg_read = &system_call_dbg_read;
60 ret->dbg_write = &system_call_dbg_write;
61
62 ret->syncTime = &system_call_syncTime;
63
64 ret->handle = new uint8_t[size];
65
66 return ret;
67}
static void system_call_syncTime(void *handle, ETISS_CPU *cpu)
static etiss_int32 system_call_dbg_read(void *handle, etiss_uint64 addr, etiss_uint8 *buffer, etiss_uint32 length)
static etiss_int32 system_call_iread(void *handle, ETISS_CPU *cpu, etiss_uint64 addr, etiss_uint32 length)
static etiss_int32 system_call_dwrite(void *handle, ETISS_CPU *cpu, etiss_uint64 addr, etiss_uint8 *buffer, etiss_uint32 length)
static etiss_int32 system_call_dread(void *handle, ETISS_CPU *cpu, etiss_uint64 addr, etiss_uint8 *buffer, etiss_uint32 length)
static etiss_int32 system_call_dbg_write(void *handle, etiss_uint64 addr, etiss_uint8 *buffer, etiss_uint32 length)
static etiss_int32 system_call_iwrite(void *handle, ETISS_CPU *cpu, etiss_uint64 addr, etiss_uint8 *buffer, etiss_uint32 length)
provides a fast memory implementation for ETISS
__DEVICE__ void * memcpy(void *__a, const void *__b, size_t __c)
static __inline__ uint8_t
Definition arm_mve.h:323
uint64_t etiss_uint64
Definition types.h:58
uint32_t etiss_uint32
Definition types.h:55
uint8_t etiss_uint8
Definition types.h:49
int32_t etiss_int32
Definition types.h:54
std::shared_ptr< ETISS_System > createFastMemory(size_t size)
creates a very fast ETISS_System structure.
float __ovld __cnfn length(float p)
Return the length of vector p, i.e., sqrt(p.x2 + p.y 2 + ...)
basic cpu state structure needed for execution of any cpu architecture.
Definition CPU.h:51