It is worth noting that only a subset of the C/C++ libraries have been implemented and in some special cases, a function has been provided that has no real implementation.
- Open Source version has no support for Graphical UI functions
-
The open source version of Proteus does not contain any implementation of graphical user interface libraries. Contact if you wish to obtain graphical user interface library support.
- Open source version has no support for TCP/IP functions
-
The open source version of Proteus does not contain any implementation of TCP/IP functionality, although a number of method stubs are provided to allow compilation. Execution of these methods will throw an UnsupportedOperationException. Contact if you wish to obtain TCP/IP support.
- Open source version has no support for thread libraries
-
The open source version of Proteus does not contain any implementation of thread functionality, although a number of method stubs are provided to allow compilation. Execution of these methods will throw an UnsupportedOperationException. Contact if you wish to obtain thread support.
- No support for ASM in ll files
-
Ideally, no ASM will be produced in ll files. Occasionally, lines of ll files might contain
asm sideeffect
. Proteus will parse these but discard the line from the internal model and emit a warning - with no change in program behaviour. This is a feature that cannot be easily implemented in Java. Suggestions to work around such issues would be to (a) change the original source (b) change the resulting ll file or (c) remove the function completely. - Note all potential llvm types are supported
-
LLVM can produce ll files with integer and floating point types with a variety of widths. Proteus only supports the following integer types
i1
,i8
,i16
,i32
,i64
,i96
,i128
and only logical operations are fully supported for types larger that 64 bits. Functions using i128 and i96 integer types are run in interpreted mode in the open source version. Floating point types that are supported arefloat
anddouble
. Higher precision values are operated on as doubles but can be parsed and used.In practice, this has not problematic except in a couple of circumstances where
i3
(experimenting with llvm opt tool) ori36
(produced when no -O option given to llvm opt tool) integer types have been produced. In this case, changing the optimizations given to llvm compiler has removed the issue. In such cases, Proteus issues a warning and converts the i3 or i36 to the next largest power of two sized integer (i8 or i64). This is done during parsing so that downstream code assumes that the substituting type is used. - LLVM Vector Value types
-
Vector value types i.e. [4xfloat] may occur at low -O levels from fortran code. These can be removed using -O2 or -O3 during generation of the ll file.