IXP1200 Programming: The Microengine Coding Guide for the Intel IXP1200 Network Processor Family

The goal of this chapter is to understand what the various components of the IXP12xx hardware and IXA SDK 2.0 software tools do for your software and how they impact the overall programming environment.
Programming the IXP12xx differs considerably from programming on general-purpose processors. It may be that when you first opened your IXP12xx system you were looking for a list of the ported operating systems and a working ANSI C/C++ compiler. What you discovered was that the microengines don t run any operating systems, and the C compiler, with its new __declspec(...) modifiers and slew of intrinsics, looks only vaguely familiar.
In traditional programming environments, operating systems, and compilers the details of thread scheduling, register counts, register sizes, and machine instruction sets can be ignored. When programming the IXP12xx mircorengines, ignoring these details makes it difficult to produce optimized code and let the hardware do what it was designed to do.
Understanding the IXP12xx programming environment goes beyond just learning yet another set of software programming interfaces. Understanding the IXP12xx programming environment means, perhaps for the first time, understanding the processor architecture. But consider the upside: by taking advantage of the IXP12xx hardware, you can offload work to it. And one less thing to write and debug is always a win.
This chapter describes those components of the processor s architecture relevant to programmers. Typically such descriptions provide good reference material, but can be difficult to remember. So, in order to put the pieces of the processor architecture into perspective,...