{'fraction_non_alphanumeric': 0.021474588403722263, 'fraction_numerical': 0.0021474588403722263, 'mean_word_length': 5.852941176470588, 'pattern_counts': {'":': 0, '<': 0, '<?xml version=': 0, '>': 0, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
Hardware acceleration for Just-In-Time compilation on heterogeneous embedded systems

Embedded systems are increasingly complex and heterogeneous to deal with increasing performance requirements along with wider ranges of application domains. The architecture of such systems often includes different kinds of computing resources and accelerators (DSPs, GPUs, etc.). Thus, application developers are facing important portability issues to adapt their software code to take maximum advantage of available processing elements. Consequently, software stacks rely more and more on virtualization technologies, leveraging Just-In-Time compilation to maximize performance of applications. Nevertheless, the efficiency of Just-In-Time compilation depends on the ability to compensate its overhead with execution speedups of generated code. In this paper, we propose a solution based on a dedicated processor with specialized instructions for critical functions to improve efficiency of code generators. These specialized instructions provide an average 5× speedup on manipulations of associative arrays and dynamic memory allocation. Based on the LLVM framework, we show a 15% overall speedup on code generator's execution time. Because our specialized instructions are hidden behind standard libraries, we also argue that these instructions may be transparently reused for a wider range of applications.