forked from M-Labs/nac3
nac3embedded: RTIO syscalls
This commit is contained in:
parent
13bd18bfcb
commit
ac17bf50f8
|
@ -1,11 +1,37 @@
|
||||||
from language import *
|
from language import *
|
||||||
|
from numpy import int32, int64
|
||||||
|
|
||||||
|
|
||||||
|
@syscall
|
||||||
|
def rtio_init():
|
||||||
|
raise NotImplementedError("syscall not simulated")
|
||||||
|
|
||||||
|
|
||||||
|
@syscall
|
||||||
|
def rtio_get_counter() -> int64:
|
||||||
|
raise NotImplementedError("syscall not simulated")
|
||||||
|
|
||||||
|
|
||||||
|
@syscall
|
||||||
|
def rtio_output(target: int32, data: int32):
|
||||||
|
raise NotImplementedError("syscall not simulated")
|
||||||
|
|
||||||
|
|
||||||
|
@syscall
|
||||||
|
def rtio_input_timestamp(timeout_mu: int64, channel: int32) -> int64:
|
||||||
|
raise NotImplementedError("syscall not simulated")
|
||||||
|
|
||||||
|
|
||||||
|
@syscall
|
||||||
|
def rtio_input_data(channel: int32) -> int32:
|
||||||
|
raise NotImplementedError("syscall not simulated")
|
||||||
|
|
||||||
|
|
||||||
@kernel
|
@kernel
|
||||||
class Demo:
|
class Demo:
|
||||||
@kernel
|
@kernel
|
||||||
def run(self):
|
def run(self):
|
||||||
pass
|
rtio_init()
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
|
|
@ -4,26 +4,32 @@ from functools import wraps
|
||||||
import nac3embedded
|
import nac3embedded
|
||||||
|
|
||||||
|
|
||||||
__all__ = ["kernel"]
|
__all__ = ["syscall", "kernel"]
|
||||||
|
|
||||||
|
|
||||||
nac3 = nac3embedded.NAC3()
|
nac3 = nac3embedded.NAC3()
|
||||||
allow_class_registration = True
|
allow_object_registration = True
|
||||||
|
|
||||||
|
|
||||||
|
def syscall(function):
|
||||||
|
assert allow_object_registration
|
||||||
|
nac3.register_object(function)
|
||||||
|
return function
|
||||||
|
|
||||||
|
|
||||||
def kernel(function_or_class):
|
def kernel(function_or_class):
|
||||||
global allow_class_registration
|
global allow_object_registration
|
||||||
|
|
||||||
if isclass(function_or_class):
|
if isclass(function_or_class):
|
||||||
assert allow_class_registration
|
assert allow_object_registration
|
||||||
nac3.register_class(function_or_class)
|
nac3.register_object(function_or_class)
|
||||||
return function_or_class
|
return function_or_class
|
||||||
else:
|
else:
|
||||||
@wraps(function_or_class)
|
@wraps(function_or_class)
|
||||||
def run_on_core(self, *args, **kwargs):
|
def run_on_core(self, *args, **kwargs):
|
||||||
global allow_class_registration
|
global allow_object_registration
|
||||||
if allow_class_registration:
|
if allow_object_registration:
|
||||||
nac3.analyze()
|
nac3.analyze()
|
||||||
allow_class_registration = False
|
allow_object_registration = False
|
||||||
nac3.compile_method(self.__class__.__name__, function_or_class.__name__)
|
nac3.compile_method(self.__class__.__name__, function_or_class.__name__)
|
||||||
return run_on_core
|
return run_on_core
|
||||||
|
|
|
@ -67,7 +67,7 @@ impl Nac3 {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn register_class(&mut self, obj: PyObject) -> PyResult<()> {
|
fn register_object(&mut self, obj: PyObject) -> PyResult<()> {
|
||||||
Python::with_gil(|py| -> PyResult<()> {
|
Python::with_gil(|py| -> PyResult<()> {
|
||||||
let obj: &PyAny = obj.extract(py)?;
|
let obj: &PyAny = obj.extract(py)?;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue