Suppose we are generating code for an imperative language on a machine with 8-byte floating-point numbers, 4-byte

Question:

Suppose we are generating code for an imperative language on a machine with 8-byte floating-point numbers, 4-byte integers, 1-byte characters, and 4-byte alignment for both integers and floating-point numbers. Suppose further that we plan to use contiguous row-major layout for multidimensional arrays, that we do not wish to reorder fields of records or pack either records or arrays, and that we will assume without checking that all array subscripts are in bounds.
(a) Consider the following variable declarations:
A : array [1..10, 10..100] of real
i : integer
x : real
Show the code that our compiler should generate for the following assignment: x := A[3,i]. Explain how you arrived at your answer.

(b) Consider the following more complex declarations:
r : record
        x : integer
        y : char
        A : array [1..10, 10..20] of record
                z : real
                B : array [0..71] of char
j, k : integer

Assume that these declarations are local to the current subroutine. Note the lower bounds on indices in A; the first element is A[1,10].

Describe how r would be laid out in memory. Then show code to load r.A[2,j].B[k] into a register. Be sure to indicate which portions of the address calculation could be performed at compile time.

Fantastic news! We've Found the answer you've been seeking!

Step by Step Answer:

Related Book For  book-img-for-question
Question Posted: