We provide the following services related to compiler:
- Development of optimizing "C / C++" compiler
We have developed compilers for 8-bit RISC micro-controller, 16-bit RISC
micro-controller, 32-bit MIPS processor with 16 & 32 bit modes and 16-bit
fixed point DSP. We posses the skills required to develop compilers for
complex processor architectures. The compilers we develop are tailor-made to
customer requirements. We support a variety of command-line options, support
architecture specific functionalities like pragmas and interrupts, mixed
language programming (assembly with C/C++), listing files as required,
intermediate language listing, standard and architecture specific
optimizations.
We have a streamlined development process which helps to identify defects in
early stages of development. Our development process and emphasis on
documentation ensures that the code is easy to maintain. We have a vast and
effective test base apart from the standard test suites (like Perenial &
Plum hall) which ensures quality validation of the compilers. We also use QA
tools like Numega Dev Partner Studio & QAC.
- Porting compilers to another architecture / platform
We can port compilers for one architecture to architecture. Such
requirements usually involve adding additional targets to the compiler. Our
compiler development expertise helps us understand the existing
implementation and port the compilers.
We can also port compilers developed for one platform to another platform.
(e.g.) We can port a compiler developed for Windows to Linux. Since we had
done porting of the compilers we had developed, we understand how to
identify non-portable fragments of code that could result is difference in
behavior across different platforms.
- Upgrade / Maintenance of compilers
We provide services on upgrade or maintenance of compilers. Maintaining
legacy code is quite a challenging task and we have pick up these skills
through the compiler projects we had done. Typical compiler upgrade /
maintenance work we take up includes the following:
- Implementation of additional features
- Implementation of new optimizations (code size reduction)
- Defect identification & rectification
- Source code refinement
- Validation of compilers
We understand the finer details of compiler validation through the compiler
projects we had done. We have a proprietary compiler regression system,
which runs the compiler tests simultaneously on multiple machines. Our test
base includes the following tests:
- acmet generated test programs - This includes
- Test programs to test each feature / optimization
- Test programs developed to validate fix to defects
- Application programs developed at acmet
- Standard test suites
- GCC test vectors
The typical validation tasks we take up include the following:
- Identifying defects in compiler & defect reporting. Both black box and white box tests
- Test case generation
- Evaluation of optimizations
- Analysis of assembly generate by compilers to identify code improvements / to identify defects
Our in-depth understanding of compiler internals makes our compiler validation more effective
- Benchmarking of compilers
We can perform benchmarking of compilers against the specified performance
goal. Typical approaches for benchmarking compilers are:
- Comparing the code generated by compiler under evaluation against the
code generated by a reference(benchmark) compiler.
- Analyzing the code generated by compiler under evaluation for a set of
benchmark programs.
- Analyzing the execution speed of code generated by compiler under
evaluation for a set of benchmark programs using profiling.
- Development / optimization of emulation libraries
We can develop emulation libraries for float / double / long for compilers
in case the architecture does not support these data types. Emulation
libraries have stringent code size, execution performance and precision
requirements. We had developed emulation libraries for different
architectures. We understand floating point formats, optimal method of
implementing floating point operations and testing of emulation libraries.
We have effective test base to test emulation libraries.
- Evaluation of libraries for code size and performance
We can take up evaluation of libraries for code size and performance. Such
an evaluation is usually done before a library is deployed as a part of a
compiler package. Since the performance of libraries directly affect the
performance of target applications, it is important for libraries to be
optimal. We can perform evaluation of library functions with different range
of inputs to identify performance bottlenecks.
We can also takeup other specific requirements related to compilers.
Related Topics:
Compiler related projects we had done so far are the following: