This preview shows page 1. Sign up to view the full content.
Unformatted text preview: the intermediate format generated by Java compilers, and the Postscript page formatting language. End Aside. 173 Having the ﬂoating-point registers organized as a bounded stack makes it difﬁcult for compilers to use these registers for storing the local variables of a procedure that calls other procedures. For storing local integer variables, we have seen that some of the general purpose registers can be designated as callee saved and hence be used to hold local variables across a procedure call. Such a designation is not possible for an IA32 ﬂoating-point register, since its identity changes as values are pushed onto and popped from the stack. For a push operation causes the value in %st(0) to now be in %st(1). On the other hand, it might be tempting to treat the ﬂoating-point registers as a true stack, with each procedure call pushing its local values onto it. Unfortunately, this approach would quickly lead to a stack overﬂow, since there is room for only eight values. Instead, compilers generate code that saves every local ﬂoating-point value on the main program stack before calling another procedure and then retrieves them on return. This generates memory trafﬁc that can degrade prog...
View Full Document
- Spring '10
- The American