Introduction to computer science using the TURING programming language
Introduction to computer science using the TURING programming language
An Introduction to S/SL: Syntax/Semantic Language
ACM Transactions on Programming Languages and Systems (TOPLAS)
A Model for Implementing EUCLID Modules and Prototypes
ACM Transactions on Programming Languages and Systems (TOPLAS)
Design and implementation of a diagnostic compiler for PL/I
Communications of the ACM
Communications of the ACM
Compiler Construction
The Design of an Optimizing Compiler
The Design of an Optimizing Compiler
Generating machine code for high-level programming languages
Generating machine code for high-level programming languages
An analysis of pascal programs and several basic block optimizations
An analysis of pascal programs and several basic block optimizations
An orthogonal model for code generation
An orthogonal model for code generation
Reverse interpretation + mutation analysis = automatic retargeting
Proceedings of the ACM SIGPLAN 1997 conference on Programming language design and implementation
Automatic derivation of compiler machine descriptions
ACM Transactions on Programming Languages and Systems (TOPLAS)
Hi-index | 0.00 |
Data descriptors, which have evolved from Wilcox's value descriptors [16], are a notation for representing run-time data objects at compile time. One of the principal reasons for developing this notation was to aid in the rapid construction of code generators, especially for new microprocessors. Each data descriptor contains a base, a displacement, and a level of indirection. For example, a variable x lying at displacement 28 from base register B3 is represented by this data descriptor: @B3.28. The general form of a data descriptor is @kb.d.i where k gives the number of levels of indirection, b is a base, d is a displacement, and I is an index.Data descriptors are convenient for representing addressing in Fortran (with static allocation and common blocks), in Pascal and Turing (with automatic allocation and stack frames), and in more general languages such as Euclid and PL/I. This generality of data descriptors allows code generation to be largely independent of the source language.Data descriptors are able to encode the addressing modes of typical computer architectures such as the IBM 360 and the PDP-11. This generality of data descriptors allows code generation to be largely machine independent.This paper gives a machine independent method of storage allocation that uses data descriptors. Techniques are given for local optimization of basic arithmetic and addressing code using data descriptors. Target machine dependencies are isolated so that the part of the code generator that handles high-level addressing (such as subscripting) is machine independent. The techniques described in this paper have proven effective in the rapid development of a number of production code generators.