This paper presents a new approach to solving the DSP address code generation problem. A minimum cost circulation approach is used to efficiently generate high-performance addressing code in polynomial time. Results show that addressing code size improvements of up to 62 are obtained, accounting for up to 1:62 improvement in code size and performance of compiler-generated DSP code. This research is important for industry since this value-added technique can improve code size, energy dissipation, and performance, without increasing cost. Index Terms-Digital signal processors, optimization methods, optimizing compilers, program compilers. I. INTRODUCTION A S digital signal processing (DSP) applications are rapidly growing more complex, some designers are moving from full custom digital circuitry to programmable processors or in-house cores to obtain lower risk solutions. The DSP core is a DSP processor that can be reused and combined with program/data memory, dedicated logic, plus applicationspecific integrated circuits (ASIC's), and incorporated onto a large silicon chip, providing a cost efficient and flexible solution for many typical embedded applications requiring low power and high reliability. These systems demand small code size and high-performance. Due to increasing complexities, high-level compilation is a necessity. However, the biggest drawback to both DSP processors or DSP core use is the code generation. The use of conventional code generation techniques and even compilers specifically designed for commercial DSP processors produce very inefficient code [2], [4], [24]. There are many more limitations placed upon code generation for the DSP processor than for the general-purpose processor. The difficulty arises from nonhomogeneous register sets, small number of very specialized registers, very specialized functional units, restricted connectivity, limited addressing, and highly irregular datapaths [1]. For example specialized functional units such as address calculation units are typically found in these architectures. Instructions take operands and store results of computations in well defined registers with limited connectivity.