|
Please report any new errata to
Randy Bryant and Dave O'Hallaron.
Errata posted after Sept 1, 2006 are marked as
Last modified: Wed Jan 2 22:25:37 EST 2008
First North American Printing [2003, ISBN 0-13-034074-X, hardcover]
Note that some of these errors have been corrected in more recent
printings of the book.
- Preface
- p. xvii (last paragraph): "Figure .1" should be "Figure P.1"
- p. xxiii (line 7): "topic of the next section"
should read "topic of the next chapter"
- p. xxiii (line 8): "students to point" should read "students
to the point"
- p. xxiii and p. xxiv (last paragraphs):
"Figure .2" should be "Figure P.2"
- p. xxvi (Last paragraph): The name "Sandhya Dwarkadas" was mispelled.
Posted 01/12/2005. Michael Scott
- p. xxvi, last paragraph: Acknowledge Al Davis (Univ. of Utah) as
a beta tester.
- Chapter 1: A Tour of Computer Systems
-
p. 15, 3rd paragagraph. "to a some new process" should read
"to some new process".
Posted 5/12/2003. Jeff Goldblat
- Chapter 2: Representing and Manipulating Information
- p. 30, Problem 2.2: The fourth case in the table should have entry
0x20000 rather than 0x2000
- p. 36, Lines 3-6 below disassembler output. This line should read:
"For now, we simply note that this line states that the hexadecimal
byte sequence 01 05 64 94 04 08 is the byte-level representation of an
instruction that adds a word of data to the value stored in memory at
address 0x8049464."
Posted 09/25/2003. Anne Rogers
- p. 36, Aside "New to C?: Naming data types with typedef." The
last sentence should end "... the declaration of a variable of
type 'unsigned char *'."
Posted 12/03/2007. Carl Marcinik
- p. 38, "New to C?: Pointers and arrays" section. The 3rd
sentence should read
"In C, we can dereference a pointer with array
notation, and we can reference array elements with pointer notation."
- p. 51, Fig. 2.8: under "unsigned short":
Guaranteed max and typical 32-bit
max should be 65,535
not 63,535.
Posted 6/23/2003. Daniel Amelang
- p. 57, just before Equation 2.3:
"If we let x = B2T_w(vec{x}) ..." should be
"If we let vec{x} = T2B_w(x) ...".
Posted 8/7/2003. Thomas Niemann
- p. 60, Figure 2.13:
- Change the value -2147483648 in entries four and five
to -2147483647-1
- Add the following sentences to the
caption:
``We must write
TMin_32 in C as -2147483647-1, rather than
-2147483648,
to avoid overflow problems. The compiler processes an expression of the
form -X by first reading the expression X and then
negating it, but 2147483648 is too large to represent as a
32-bit, two's complement number.''
See the Note on writing TMin in C for a more detailed
discussion.
- p. 60, Problem 2.20:
- The value -2147483648 should be written
-2147483647-1 in entries 1, 2, and 4, and as
(-2147483647-1) in entries 3 and 5.
See the Note on writing TMin in C for a discussion.
- 2nd & 3rd entries in table should have -2147483647
rather than -21474836487.
- 4th & 5th entries in table should have 2147483647
rather than 21474836487.
- p. 61, second paragraph. The first line should read: "As an
example, consider the effect of executing the following code when integer variable
val is set to -12345:"
Posted 10/18/2007. Carl Marcinik
- p. 64, multiple places. Several of the bit vectors have one too
many bits:
- [x_{w}, x_{w-1}, ..., x_0] should be [x_{w-1}, x_{w-2}, ..., x_0]
in the following places:
- Left hand side of the first equation
- In the text of the second paragraph
- On the right hand sides of Equations 2.7 and 2.8.
- [x_{k}, x_{k-1}, ..., x_0] should be [x_{k-1}, x_{k-2}, ..., x_0]
in the following places:
- Bottom line of equation
- In the text of the second paragraph
- On the left hand sides of Equations 2.7 and 2.8.
Posted 11/18/2003. Rui Carvalho
- p. 64, Equation 2.8.
Inner function on right hand side should be B2U rather than B2T.
Posted 05/04/2006. Will Marrero
- p. 69, middle line of equation at bottom: There should be no minus signs in front of x_{w-1} and y_{w-1}.
Posted 09/18/2003. Simone Martins
- p. 72, Practice Problem 2.25: In the third column heading, the "4" should
be a "5".
- p. 73, 2nd & 3rd lines. All subscripts "w+1" should read "w-1".
Posted 09/13/2005. Day Zhong
- p. 73, 4th line should read "for x in the range -2^{w-1} <= x < 2^{w-1}"
Posted 07/19/2004. Yin Yongsheng
- p. 75, 5th line after Equation 2.15.
Should read
"... complement product B2T(x) * B2T(y)" (y instead of x at the end).
Posted 09/15/2005. Jordan Brough
- p. 77, Practice Problem 2.28. Parameter k can be 0, 1, 2, or 3.
Posted 09/08/2003. Darren Shultz
- p. 77, Practice Problem 2.28.
The expression a<<k + b
should be written as
(a<<k) + b to avoid problems with operator precedence. Similarly we should write (a<<1) + a.
Posted 01/02/2008. Zeyang Li
- p. 78, 3rd line.
The equation for x' should be SUM(i=k,w-1) x_i * 2^(i-k).
Posted 04/22/2005. Guanpeng Xu
- p. 78, End of second full paragraph. Last sentence should read
"Thus, this shifted bit vector is the two's complement representation
of |_ x / 2^k _|," (rather than
|_ x / y _|.)
Posted 04/22/2005. Randy Bryant
- p. 82, Problem 2.31: The entry at row 7, column 3 should be
5.625 rather than 5.375.
- p. 91, Section 2.4.5, 3rd paragraph, 1st line. The word
"complement" should not be italicized, and there should be a space
before it.
Posted 12/02/2003. Mark Morrissey
- p. 104, Problem 2.54, second paragraph. The last part of the sentence should read "... we convert them to other unsigned values ...".
Posted 10/18/2007. Carl Marcinik
- p. 107, Problem 2.61. Local variable sig should be
renamed frac, and referred to as the fraction, rather than
the significand.
Posted 08/08/2006. Randy Bryant
- p. 108, Problem 2.1 solution: In the answer to D, one of the hexadecimal digits was
omitted, along with its binary encoding. It should read:
Binary 11 0101 1011 0111 1110 0110
Hexadecimal 3 5 B 7 E 6
Posted 10/07/2002. John Hampton
- p. 108, Problem 2.2 solution:
Cases 3 through 5 in the table should read
13 8192 0x2000
17 131072 0x20000
16 65536 0x10000
Posted 10/07/2002. John Hampton
- p. 109, Problem 2.4 Solution, part D. The first part should read
0x50da-0x502c = 0xae.
Posted 06/14/2004. Alan West
- p. 114, Problem 2.20 solution:
- The value -2147483648 should be written
-2147483647-1 in entries 1, 2, and 4, and as
(-2147483647-1) in entries 3 and 5.
See the Note on writing TMin in C for a discussion.
- 2nd & 3rd entries in table should have -2147483647
rather than -21474836487.
- 4th & 5th entries in table should have 2147483647
rather than 21474836487.
- p. 116, Problem 2.25
solution: In the third column heading, the "4" should be a "5".
- p. 117, Problem 2.27 solution: The entry for row 5, column 5 (the
two's complement representation of 1 * -1 truncated to 3 bits) should
be "-1 [111]". rather than "7 [111]".
Posted 01/22/2003. Al Davis
- p. 118, Problem 2.31 solution: Row 5 should read: "45/16 10.1101 2.8125".
Posted 01/22/2003. Al Davis
- p. 118, Problem 2.32 solution: The subproblems (A--D) and the answers (A--C) don't line up:
- The answer to subproblem B is given in A (9.54 X 10^{-8})
- The answer to C is given in B (0.343)
- The answer to D is given in C (687).
Posted 12/07/2004. Thomas Gross
- p. 120, Problem 2.37 solution for part H. The problem states that
the value for d is not infinity or NaN, so we must find another
counterexample. Here is one: when d is 1.0E25 and f is 1.0, then
(d+f) will be rounded to 1.0E25 and so (d+f)-d will evaluate to 0.0.
Posted 01/03/2006. Ricky Liu
- Chapter 3: Machine-Level Representation of Programs
- p. 126, The i486 CPU had 1.2M transistors (not 1.9), and the PentiumPro had 5.5M (not 6.5).
This leads to a very slight change in the graph for Moore's Law on p. 127,
but the trend of doubling every 30 months continues to hold.
Posted 01/23/2006. Ricky Liu
- p. 126, The Pentium 4 was first delivered in 2000, not 2001.
Posted 01/23/2006. Ricky Liu
- p. 133, first line. Should read "Then, we could generate an executable program prog as follows:"
Posted 03/27/2005. Mario Lo Conte
- p. 133, 5 lines before start of Section 3.2.3. Should state "On line 6 of the disassembly ...".
Posted 09/16/2002. Arun Krishnaswamy
- p. 133, Right after disassembly. Should read "... the disassembly of
code.o."
Posted 03/27/2005. Mario Lo Conte
-
p. 137, Figure 3.3, 10th row, 4th column. "Scaled Index" should be "Scaled index" (inconsistent capitalization).
Posted 04/01/2003. Haudy Kazemi
-
p. 141, New to C, line 10. "This also a form of" should be "This is also a form of".
Posted 09/15/2003. Darren Shultz
-
p. 147, first paragraph. The last sentence should read "In general,
compilers generate code that uses individual registers for multiple
program values and moves program values among the registers."
Posted 10/15/2006. Nawanan Theera-Ampornpunt
- p. 149, End of last complete paragraph. Add sentence "For reasons that are a bit obscure,
the incl and decl instructions set the zero, sign, and overflow flags, but they leave the
carry flag unchanged."
Posted 01/23/2006. Ricky Liu
-
p. 150, Section 3.6.2, line 5. Should be "condition codes" rather than
"conditions codes".
Posted 10/15/2006. Nawanan Theera-Ampornpunt
- p. 150, Figure 3.10, final row. The result should be D <-- CF | ZF.
Posted 02/03/2003. Ray I. H. Shih
- p. 153, Figure 3.11, final row. The branch condition should be CF | ZF.
- p. 153, Figure 3.11, final row.
The description should be "Below or ..." (incorrect capitalization).
Posted 04/01/2003. Haudy Kazemi
- p. 154, line #2 in assembly code listing. The comment should state:
"Aligns next instruction to multiple of 16".
Posted 05/02/2004. Randy Bryant
- p. 156, last line of text. "... skipping the statement on line 7." should read
"skipping the statements on lines 7 and 8."
Posted 01/23/2006. Ricky Liu
- p. 160, last line of first paragraph.
Should read "Once the loop exits, val is copied to register %eax ..."
Posted 02/06/2006. James Caroll
- p. 162, Figure 3.14c. There should be an additional line:
14 movl %ebx, %eax
Posted 09/01/2004. Inge Frick
- p. 163, The last sentence of first paragraph states "This saves
one instruction in the assembly code," but that's not really true. The compiler could have generated the instruction
12 jns .L10
to perform the test nmi >= 0, so there is no performance
gain in the compiler-generated code. The last sentence should
therefore state "Although this modified test is valid, it gives no
real performance advantage." Posted
09/01/2004. Inge Frick
- p. 163, Problem 3.11 assembly code. There should be an additional line:
12 movl %edx,%eax
Posted 06/14/2004. Michael Li
- p. 173, Aside, 4th line from bottom, should read "... P (the caller) must save the value before calling Q ...".
Posted 06/14/2004. Michael Li
- p. 180, Figure 3.22. In both stack frames, the offset of the frame pointer should be 0, not -4.
Posted 01/12/2005. Qing Xu
- p. 180, Figure 3.22. In both stack frames, the value at offset -24 should be "Saved %ebx", not "Saved %ebp".
Posted 07/01/2004. Steven Zhang
- p. 182, last paragraph, second line.
"(except in the first case ...)" should read
"(except in the first and last cases,
where the former copies the address, and the latter copies the index)"
Posted 01/23/2006. Ricky Liu
-
p. 183, Aside on why to avoid integer multiply. The Pentium III, on which the book is based, requires 4 clock cycles for integer multiplication. More recent processors
from Intel and AMD require between 3 and 10 clock cycles.
Posted 2/21/2007. Yixin Cao
- p. 190, Figure 3.25b. Line 5 should read "int nTjPk = k;".
Posted 10/06/2003. Seiki
- p. 198, Problem 3.22, part C.
Line 4 of the code should be removed.
Posted 01/23/2006. Ricky Liu
-
p. 200, Paragraph in middle of page beginning "Instead, the compiler will allocate". In this sentence "S1" should be changed to "S2".
Posted 04/01/2003. Haudy Kazemi
- p. 213, stack diagram at bottom.
Step 8 value should be (a-b)/(-b+c).
Posted 01/23/2006. Ricky Liu
- p. 219, second example.
fmul should be fmull.
Posted 01/23/2006. Ricky Liu
-
p. 219, second example. The example expression should be x =
(-(a*b)+c)*(a*b). The expression in the box for step 6 should
be (-(a*b)+c)*(a*b).
Posted 06/04/2004. Thomas Niemann
- p. 219, second example.
There should be a seventh step
with the instruction fstpl x.
Posted 01/23/2006. Ricky Liu
-
p. 221, Practice Problem 3.28. There should be one more line of code at the end:
12 fsubrp %st,%st(1)
Posted 04/04/2003. Christian Dufour
- p. 222, second to last line of text, and last two entries of table in Figure 3.36.
The binary representations of 69 and 64 are [01000101] and [01000000], respectively.
Posted 01/23/2006. Ricky Liu
-
p. 228, second paragraph.
We stated that with GCC's inline assembly
"...there are no direct ways to specify a program value to use as the
destination operand for the setae instruction, since the
operand must be a single byte." In fact, you can specify
single-byte operands with gcc by declaring variables of
type char.
See Note on byte operands with inline assembly.
Posted 04/07/2003. Michael Trigoboff
-
p. 229, first two lines (lines 13-14 of okmul.c). Recent versions of
GCC do not allow a quoted string to split across multiple lines, and so attempting to compile this code gives an error message. Instead, the lines should be written as two separate strings, as follows:
asm("movl %2,%%eax; mull %3; movl %%eax,%0;"
"setae %%dl; movzbl %%dl,%1"
Posted 10/18/2007. Wang Yuanxuan
- p. 234, Figure 3.37. The annotation "default" shown on line 28 with label .L14 should instead be on line 26 with label .L20.
Posted 10/04/2005. Scott Wright
- p. 241, Solution to Problem 3.8A. Jump target is
0x8048d1e - 0x26 =
0x8048cf8. (Remember that 0xda is a one-byte two's complement number).
Posted 07/06/2004. Randy Bryant
- p. 241, Solution to Problem 3.9b.
Replace || with &&.
Posted 01/22/2003. Al Davis
- p. 246, Solution to Problem 3.17. First entry in table. Total size should be 14 rather than 28.
Posted 10/07/2003. David O'Hallaron
-
p. 247, Solution to Problem 3.20, C code line 4.
It would be better to use N*N-1 instead of 255 here. The C preprocessor would automatically substitute 255 and then scale this by 4 to get 1020.
Posted 2/14/2007. Yixin Cao
-
p. 247, Solution to Problem 3.20, assembly code line 3.
The comment should read i = 15, rather than i = 0
Posted 4/16/2008. Hiep Hong
- Chapter 4: Processor Architecture
- p. 259, Figure 4.2. The boxes for the Dest fields of
the jXX and call instructions are too wide.
These fields are 4 bytes long.
- p. 265, Aside on "The RISC versus CISC controversy".
The last word of the fourth line of text should be "instructions",
not "instruction".
Posted 10/21/2005. Scott Wright
- p. 270-1, Problem 4.5, code for poptest. The instruction
movl %esp, %edx should precede the instruction that pushes
tval. The first argument to the asm directive then reads:
asm("movl %%esp,%%edx; pushl %1; popl %%esp; movl %%esp,%0; movl %%edx,%%esp"
The existing code causes a segmentation fault.
Posted 01/23/2006. Ricky Liu
- p. 278, Section 4.2.4. line 5.
The reference to Figure 4.12
should instead be to the diagram at the bottom of p. 276.
Posted 01/23/2006. Ricky Liu
- p. 278, second to last line.
The value being tested is iexpr, not expr.
Posted 01/23/2006. Ricky Liu
- p. 288, Practice Problem 4.10, Write back stage. The second register update should be R[rA] <-- valM
Posted 11/07/2002. Max Gebhardt
- p. 288, Practice Problem 4.11.
The second sentence should be "Does this conform ...".
Posted 10/21/2005. Scott Wright
- p. 292, Fig. 4.20, Decode stage.
Labels dstA and dstB should be dstE and dstM, respectively
Posted 11/23/2005. Scott Wright
- p. 299, Figure 4.24, 3rd row from bottom. The value for RESP should be 4.
Posted 05/02/2004. Anita Gupta
- p. 300, Just before subheading "Decode and Write-Back Stages."
The formula should read "p + 1 + r + 4i"
Posted 04/02/2004. John Ross
- p. 301, first paragraph, line 7.
The write port address inputs are dstE and dstM, not dstA and dstB.
Posted 03/13/2005. Inge Frick
- p. 305, second line of Section 4.3.5, "PC stage" should be "PC update stage".
Posted 05/19/2006. Ronald Jones
- p. 306, Fig. 4.30, Decode stage.
Labels dstA and dstB should be dstE and dstM, respectively.
Posted 11/23/2005. Scott Wright
- p. 308, second line below diagram. "This an ..." should be "This is an ...".
Posted 01/23/2006. Ricky Liu
- p. 311, Figure 4.34.
The final number on the timeline should be 600, not 640.
Posted 05/27/2003. Jörg Brauer
- p. 322, Aside on "Other branch prediction strategies." The third
sentence should read "A slightly more sophisticated strategy, known as
backward taken, forward not-taken (BTFNT), predicts branches to lower
addresses than the next instruction will be taken, while those to
higher addresses will not be taken."
Posted 12/03/2007. Carl Marcinik
- p. 325, Line 5 of second paragraph.
Third word "instruction" should be "instructions".
Posted 11/23/2005. Scott Wright
- p. 326, Figure 4.44, expanded box for Cycle 5 labeled "W".
The operation R[%eax] <-- 10
should read R[%edx] <-- 10.
Posted 03/19/2007. Devon Macey
- p. 326, Line 1 of first full paragraph.
Last word "instructions" should be "instruction".
Posted 11/23/2005. Scott Wright
- p. 331, Fig. 4.49, expanded box for Cycle 6.
Box labeled "M" should have label "W".
Posted 11/23/2005. Scott Wright
- p. 332, Fig. 4.51, expanded box for Cycle 4, box labeled "M".
Labels "W_dstE" and "W_valE" should be "M_dstE" and "M_valE", respectively.
Posted 11/23/2005. Scott Wright
- p. 335, line 4.
Should refer to pipeline register E, not M.
Posted 03/13/2005. Inge Frick
- p. 335, Fig. 4.54, near bottom.
Arrow labeled "Error" should point to the line "valB <-- R[%eax] = 0".
Posted 11/23/2005. Scott Wright
- p. 336, Line 2.
The address of the irmovl instruction is 0x012, not 0x00c.
Posted 02/06/2006. Ricky Liu
- p. 336, Line 8 of first full paragraph.
Should refer to register %ebx rather than %edx.
Posted 11/23/2005. Scott Wright
- p. 337, Section 4.5.8, line 4 of first paragraph.
Missing "of" between "design" and "the".
Posted 11/23/2005. Scott Wright
- p. 339, Figure 4.57 caption, 5th line.
"dstA" and "dstB" should be "dstE" and "dstM", respectively
Posted 02/06/2006. Ricky Liu
- p. 346, Figure 4.63.
The line of code at address 0x007 should be:
0x007: irmovl $1, %eax # Fall through
Posted 02/06/2006. Ricky Liu
- p. 348, Figure 4.65B.
Label in box on right should be "x" rather than "y"
Posted 10/17/2005. Caren Yang
- p. 350, 4th line from bottom. Sentence should read "Clearly, we
do not want the pipeline to perform both sets of actions." (Omit
first "to"). And next sentence should read "Instead, we want it to ..." (add "to").
Posted 02/06/2006 and 05/19/2006. Ricky Liu
and Ronald Jones
- p. 351, first paragraph, last line. Omit word "implement" from
the sentence.
Posted 02/06/2006. Ricky Liu
- p. 352, Code for D_bubble. Should be:
# Mispredicted branch,
(E_icode == IJXX && !e_Bch) ||
# or stalling at fetch while ret passes through pipeline
IRET in { D_icode, E_icode, M_icode } &&
# but not condition for a load/use hazard
!(E_icode in { IMRMOVL, IPOPL } && E_dstM in { d_srcA, d_srcB });
Posted 11/24/2005. Randy Bryant
- p. 363, Problem 4.41, line 3. Omit word "requires" from
the sentence.
Posted 02/06/2006. Ricky Liu
- p. 368, Problem 4.6 Solution.
The signal should be called xor, rather than eq.
Posted 11/16/2005. Betsy Wolff
- p. 368, Problem 4.7 Solution.
The figure should have an OR gate, rather than an AND gate.
Posted 09/15/2005. Michael Bombyk
- p. 368, Problem 4.8 Solution.
The correct code is:
int Med3 = [
(A <= B && B <= C) || (C < B && B < A) : B;
(B <= A && A <= C) || (C < A && A < B) : A;
1 : C;
];
Posted 10/21/2005. Scott Wright
- Chapter 5: Optimizing Program Performance
- p. 388, Table in middle of page. The entry for Integer + with function combine2 should be 20.66, not 22.61.
Posted 01/20/2004. Thomas Niemann
- p. 394, Fig 5.10: Line 9 of code (*dest = IDENT) is not necessary.
Posted 6/23/2003. Daniel Amelang
- p. 398, 2nd line. "such transcendental" should be "such as transcendental".
Posted 12/02/2003. Mark Morrissey
- p. 399, first paragraph under section 5.7.2: should be "...documents the
performance of some of the basic operations...".
(Add a "the" after the second "of".)
Posted 6/23/2003. Daniel Amelang
- p. 402, line after code cmpl %esi, %edx.1 -> cc.1.
"... compares the value in %esi ... with the newly computed value for %edx."
Should read
"... compares the newly computed value for %edx with the value in %esi ...."
Posted 2/22/2006. Ricky Liu
- p. 405, second to last line of text. The reference should be to
Fig 5.16, not to Fig 5.15.
Posted 2/12/2004. Michael Trigoboff
- p. 405. last line. Should read "...parallel on cycle 3 and..." rather than "cycles 3".
Posted 3/16/2005. James Troup
- p. 409, 3rd line from bottom. "maximum loop index" should read
"maximum array index".
Posted 2/22/2006. Ricky Liu
- p. 410, first text box. addl %edx, 3 should read
addl $3, %edx,
in both the assembly instructions and the execution unit operations.
Posted 7/01/2003. Daniel Amelang
- p. 410, Figure 5.20. addl %edx.0, 3 should read
addl $3, %edx.0.
Posted 7/01/2003. Daniel Amelang
- p. 416. Formulae for PE_n and PO_n. Both should have n/2-1 as
their upper bounds.
Posted 2/22/2006. Ricky Liu
- p. 418, Figure 5.26. The figure shows two load operations
starting at cycle 2 and two at cycle 3, but this would not be possible
with a single load unit. The six load operations
should begin at cycles 1 through 6 (from left to right). This
will not affect the overall program performance.
Posted 03/15/2005. Michael Trigoboff
- p. 421, second line of text. "accumulate sums" should read
"accumulate products".
Posted 2/22/2006. Ricky Liu
- p. 421, Practice Problem 5.5, Part A, "being" should be "been".
Posted 6/23/2003. Daniel Amelang
- p. 422, last line before Practice Problem 5.6
Should be "addition" rather than "multiplication".
Posted 03/13/2005. Inge Frick
- p. 423. last line. Should read "... (80-bit) ...".
Posted 3/16/2005. James Troup
- p. 424, Figure 5.27. The entry for floating point addition that
is unrolled x4, parallelism x2 should also be shown in boldface,
since it tied with unroll x8 parallelism x4.
Posted 2/22/2006. Ricky Liu
- p. 425, Figure 5.28. The entry for floating point addition that
is unrolled x4, parallelism x2 should be shown in boldface,
since it achieves better performance (2.34 vs. 2.36) than does unrolling x8 parallelism x4.
Posted 2/22/2006. Randy Bryant
- p. 427, Figure 5.29. Comment on line 6 of assembly code.
It should read "If >= 0, goto end".
Posted 2/22/2006. Ricky Liu
- p. 428, Practice Problem 5.7.
Assembly code line 4 should read
cmovzl %edx,%eax
Posted 11/10/2003. Tim Freeman
- p. 429, Section 5.13, second paragraph, "All of our programs
...", should read "The loops of all of our programs ...".
Posted 2/22/2006. Ricky Liu
- p. 433, second paragraph. Drop "(a)" in the reference to Figure 5.33.
Posted 2/22/2006. Ricky Liu
- p. 434, assembly code and its translation at the top of the page. The code given has
two bugs: 1) the decl instruction does not set the
condition codes, and 2) the loop test should be jne, not
jnc. The correct last two lines are:
subl $1, %eax subl $1, %eax.0 --> %eax.1
jne .l32 jne-taken cc.1
Posted 2/22/2006. Ricky Liu
- p. 442, Line 3. "26946/1007" should read "26,946/1,021".
Posted 2/22/2006. Ricky Liu
- p. 442, Line 7. "2.70" should read "2.69".
Posted 2/22/2006. Ricky Liu
- p. 447, Problem 5.12, Part A, "greater" should be "less".
Posted 2/5/2004. Grant Davis
- p. 449, Problem 5.17, in text box column labeled "Execution unit operation". Code movl 4(%edx.0) should be
load 4(%edx.0).
Posted 6/23/2003. Daniel Amelang
- p. 449, Problem 5.18, in text box column labeled "Execution unit operation". Code movl 4(%edx.0) should be
load 4(%ecx.0).
Posted 02/16/2004. Mark Morrissey
- p. 451, Problem 5.4 Solution, code for combine5px8. Fourth line should read:
int limit = length - 7;
Posted 6/23/2003. Daniel Amelang.
Errata entry corrected 3/13/2004. Mark Morrissey.
- p. 453, Solution to Problem 5.6: The second line should
read "...A3 and A4 take 5 cycles per iteration..."
- p. 453, Solution to Problem 5.7.
The first sentence of the second paragraph should read "This code always dereferences xp (assembly code line 2)."
- p. 453, Problem 5.8D Solution. The CPE would be 3.00.
Posted 10/21/2003. Joe Trdinich
- Chapter 6: The Memory Hierarchy
- p. 474, Line 1. "0xa" should be "0xa0".
Posted 2/28/2006. Ricky Liu
- p. 475, Figure 6.14 caption. "SourceDIXtrac" should be "Source: DIXtrac"
Posted 4/7/2005. Dave O'Hallaron
- p. 476, first line. "more tracks are packed" should be "more
sectors are packed".
Posted 3/1/2004. Michael Trigoboff
- p. 483, first line. "In general the storage devices get faster, cheaper,
and larger" should be "In general, the storage devices get
slower, cheaper, and larger".
- p. 479, 2nd last line: "stride-(N x sizeof(int))" should be "stride-N".
Posted 2/28/2006. Ricky Liu
- p.480, Figure 6.19, description: "stride-(N x sizeof(int))"
should be "stride-N".
Posted 2/28/2006. Ricky Liu
- p. 505, Impact of Cache Size:
"must have a hit time of one clock cycle" should read
"must have a short hit time".
Posted 2/28/2006. Ricky Liu
- p. 509, 1 para, last sentence,
"the array size is larger than the cache size" should
read "the array size is larger than the cache size, and M > E".
Posted 2/28/2006. Ricky Liu
- p. 511, Problem 6.16 and 6.17, part D:
"What the miss rate be if the cache were twice as big?"
should be "What would the miss rate be if the cache had the same
block size but twice as many sets?"
Posted 2/28/2006. Ricky Liu
- p. 513, 2nd para, 2nd sentence:
"start at 1 KB, increasing by a factor of two, to
a maximum of 8 MB" should be "start at 8 MB, decreasing by a factor
of two, to a minimum of 1 KB".
Posted 2/28/2006. Ricky Liu
- p. 533, Solution to Problem 6.8, Part B, line 4, should
read "(4096 * 4)/32 = 512 blocks".
Posted 12/29/2003. Suryanto
- p. 534, Solution to Problem 6.12, line 1,
"0x1FF4" should be "0x1FE4".
Posted 2/28/2006. Michael Trigoboff
- p. 536, Solution to Problem 6.16, Line 2. "grid[16][0]"
should be "grid[8][0]".
Posted 12/08/2003. Tim Wong
- p.536, Problem 6.19 Solution, part B, line 4:
"256 bytes" should be "256 KB".
Posted 2/28/2006. Ricky Liu
- Chapter 7: Linking
- p. 546, Line after the code segment, "two integers in .bss" should be
"integers in .data".
Posted 4/25/2006. Ricky Liu
- p. 546, line 5, "corresponds module" should be "corresponds to module".
Posted 5/11/2004. Dirk Maas
- p. 551, last line, "negative one" should be "negative zero".
Posted 4/25/2006. Ricky Liu
- p. 552, first paragraph. GCC also provides the
"-fno-common" flag, which triggers an error if it encounters multiply
defined global symbols. Also, "multiply defined" should be "multiple".
Posted 4/25/2006. Ricky Liu
- p. 553, second paragraph, line 3, "random" should be "rand".
Posted 4/25/2006. Ricky Liu
- p. 557, Practice Problem 7.3, "file object file" should be "object file".
Posted 3/16/2005. James Troup
- p. 558, line 7-8, ".relo.text" and ".relo.data" should be
".rel.text" and ".rel.data" respectively.
Posted 6/1/2004. Dirk Maas
- p. 558, sect 7.7.1, paragraph 2, "how to the modify"
should be "how to modify".
Posted 3/16/2005. Mao Fan
- p. 553, second paragraph, line 3, "random" should be "rand".
Posted 4/25/2006. Ricky Liu
- p. 562, Figure 7.10 caption, "data" should be ".data".
Posted 4/25/2006. Ricky Liu
- p. 563, line 8, ".relo" should be ".rel".
Posted 6/1/2004. Dirk Maas
- p. 564, second last line, "in from" should be "from".
Posted 4/25/2006. Ricky Liu
- p. 565, line 1, "calls the exit function" should
read "terminates normally".
Posted 4/25/2006. Ricky Liu
- p. 570, command line before section 7.12, "main3.c" should be "dll.c".
Posted 4/25/2006. Ricky Liu
- p. 572, in both code fragments, "popl %ebx;" should be "popl %ebx".
Posted 4/25/2006. Ricky Liu
- Chapter 8: Exceptional Control Flow
- p. 592, Figure 8.7 caption, "on the whether" should read "on
whether".
Posted 4/25/2006. Ricky Liu
- p. 593, Figure 8.9, "Iinterrupt or trap" should be "Interrupt or trap".
Posted 3/29/2005. David Po
- p. 604, Figure 8.14, remove the '!' character from each printf
Posted 12/29/2003. Mark Morrissey
- p. 605, Practice problem 8.2. Remove the '!' character from the
printf
Posted 4/25/2006. Ricky Liu
- p. 607, top of page, third bullet item should be:
"WNOHANG|WUNTRACED: Return immediately, with a return value
of 0 if none of the children in the wait set has stopped or
terminated, or with a return value equal to the PID of one
of the stopped or terminated children."
Posted 12/30/2003. Michael Trigoboff
- p. 611, in function prototype of "execve", the third parameter should be
"char *envp[]", not "char *envp".
Posted 6/23/2003. Daniel Amelang
- p. 611, Figure 8.17, the last argv parameter should
be /usr/include instead of /user/include.
Posted 12/29/2003. Mark Morrissey
- p. 616, Figure 8.22. Function parseline in
shellex.c incorrectly returns a pointer to the local stack
variable array via argv. Corrected version of
shellex.c
- p. 620, Figure 8.24. There should be a line drawn from
Shell to Background Job #1.
Posted 11/04/2003. Mark Morrissey
- p. 623, in function prototype box at bottom of page,
the typdef and signal() statements
should both end with semicolons.
Posted 12/29/2003. Mark Morrissey
- p. 625, last line, "children the terminate"
should read "children to terminate".
Posted 4/25/2006. Ricky Liu
- p. 629, 2nd to last paragraph, line 3.
"modification to signal1" should be "modification to signal2".
Posted 11/04/2003. Mark Morrissey
- p. 635 (first line): "possible deletejob" should
be "possible for deletejob"
- Chapter 9: Measuring Program Execution Time
- p. 654, Figure 9.1. The second sentence of the caption should read
"The processor hardware operates at a microscopic time scale in which events have durations on the order of a few nanoseconds (ns)."
Posted 01/12/2004. Mark Morrissey
- p. 655, 1st line after aside. Should be "... a hypothetical 250 ms ..."
Posted 12/02/2003. Mark Morrissey
- p. 656, middle of full paragraph. Missing left paren: ``I'') should be (``I'').
Posted 01/21/2004. Mark Morrissey
- p. 660, 3rd line from bottom. "96.7" should be "96.6".
Posted 12/02/2003. Mark Morrissey
- p. 663, third line.
Should say T_c rather than T_m.
Posted 3/31/2006. Ricky Liu
- p. 664, code in Figure 9.9, line 34.
Should read borrow = cyc_lo > ncyc_lo
Posted 3/31/2006. Ricky Liu
- p. 668, in the caption for Figure 9.13: "caches.aches" should just be
"caches."
Posted 6/23/2003. Daniel Amelang
- p. 684, bullet before Section 9.7, third line.
Should read "... as long as it uses cycle-based timing."
Posted 3/31/2006. Ricky Liu
- p. 686, second-to-last paragraph of Section 9.10, last line.
Should read "... whether the minimum ...".
Posted 3/31/2006. Ricky Liu
- Chapter 10: Virtual Memory
- p. 698, 10.3.3, last sentence. "PP 0 should be PP 1".
Posted 12/02/2003. Mark Morrissey
- p. 701, Figure 10.9 caption, "the operating maintains" should read the
"the operating system maintains".
Posted 8/12/2004. Venkata Naidu
- p. 704, Section 10.6, end of first paragraph. "symbols we will using" should read "symbols we will be using".
Posted 3/21/2005. Constantine Kousoulis
- p. 707, 4th line from bottom. "PTE in order the" should
read "PTE in order to"
Posted 12/13/2005. Inge Frick
- p. 709, Figure 10.17(a). "Cashe/memory" should be "Cache/memory".
- p. 709, Last line, first paragraph. "addresses spaces" should be
"address spaces".
Posted 11/21/2003. Emil Tarazi
- p. 712, Figure 10.21(a) The valid bit for the third entry in
set 3 should be "1" instead of "13".
- p. 712, Figure 10.21(b). The PPN entries for VPNs 01, 04, 06, and
07 should be "--", to reinforce the fact that these PPNs are invalid.
- p. 713, Figure 10.21 (c). The entry for Idx 7 and Blk 0 should
be "11" rather than "--".
-
p. 714, last line of first paragraph, "perform" should be "performs".
Posted 6/23/2003. Daniel Amelang
- p. 727, sec 10.8.3, second bullet, line 3, "write The text"
should be "write. The text".
Posted 4/25/2006. Ricky Liu
- p. 729, paragraph after bullets, line 2, delete "and fd is NULL".
(with MAP_ANON, the fd arg is ignored)
Posted 4/25/2006. Ricky Liu
- p. 731, line 4. "new and free calls in C++" should be "new
and delete operators in C++".
Posted 11/4/2003. Quarup Barreirinhas
- p. 734, second program, although unnecessary, we should set a good
example by calling free() before the exit() in line 11.
Posted 4/25/2006. Ricky Liu
- p. 745, figure 10.43, comments for global variables:
mem_brk points to the last current heap byte plus 1, and
mem_max_addr points to the last legal heap byte plus 1.
Posted 4/25/2006. Ricky Liu
- p. 751, sec 10.9.13, line 2, "block allocation" would be clearer
if it read "block allocation time"
Posted 4/25/2006. Ricky Liu
- p. 752, second last line, "{1024}, ..., {1025-2048}" should be
"{1024}, {1025-2048}"
Posted 4/25/2006. Ricky Liu
- p. 754, third paragraph, second last line, "largest size class" should read "appropriate size class".
Posted 4/25/2006. Ricky Liu
- p. 757, 5th bullet: "int length(b)" should read
"int length(ptr b)".
Posted 4/25/2006. Ricky Liu
- p. 758, Figure 10.53: Missing labels (a) and (b).
Posted 4/25/2006. Ricky Liu
- p. 758, first sentence. "Figure 10.53" should be "Figure 10.54".
Posted 12/02/2003. Mark Morrissey
- p. 760, sec 10.11.3, line 4: "the use the" should read
"use the".
Posted 4/25/2006. Ricky Liu
- p. 763, 2nd line above code for heapref. "line 12" should be
"line 10"
Posted 12/13/2005. Inge
Frick
- Chapter 11: System-Level I/O
- p. 783, 4th line from the bottom. "rio_read" should
be "rio_readn".
- p. 784, 4th line from the bottom. "reads n bytes" should
be "reads up to n bytes".
- p. 784, 3rd line from the bottom. "rio_readn" should be
"rio_readnb".
Posted 12/04/2002. Paul Raff
- p. 785, rio_writen function. Comment in line 12. "errorno" should
be "errno".
Posted 12/02/2003. Mark Morrissey
- p. 796, line 10. "alternative alternative" should be "alternative".
Posted 07/31/2003.
- Chapter 12: Network Programming
- p. 802. Fig 12.1. Circle on the right should be labeled "Server process"
instead of "Client process".
Posted 12/05/2003. Darren Shultz
- p. 809. First line below function declarations. "The hotnl
function" should read "The htonl function".
Posted 7/12/2004. Steven Zhang
- p. 810. Practice problem 12.1. "0xef000001" should
be "0x7f000001.
Posted 7/12/2004. Steven Zhang
- p. 813. Figure 12.12, line 26 should be
addr.s_addr = ((struct in_addr *)*pp)->s_addr;
Posted 11/21/2006. Randy Bryant
- p. 817. Fig 12.5. In the top and bottom lines,
netinit/in.h should be netinet/in.h
Posted 3/5/2005. Sacha Krakowiak
- p. 820. Figure 12.16, line 15 should be
bcopy(char *)hp->h_addr_list[0];
Posted 11/21/2006. Randy Bryant
- p. 830. 3rd line from bottom, "size in byte" should be "size in
bytes".
Posted 3/19/2007. James Woodruff
- p. 831. 4th line from bottom, "to creates a child process" should
be "to create a child process".
Posted 4/29/2005. Bhas Nalabothula
- p. 843. Prob 12.12, "contest" should be "content".
Posted 3/6/2005. Sacha Krakowiak
- Chapter 13: Concurrent Programming
- p. 847. Line 1 table of contents should be "849", not "489".
Posted 7/12/2004. Sacha Krakowiak
- p. 854. Line 4, "if an only if" should be "if and only if"
Posted 4/22/2005. Mao Fan
- p. 872. Fig 13.17, asm code, third block, label ".L9"
should be deleted.
Posted 5/2/2005. Mao Fan
- p. 887. Fig 13.33, line 8. Simply copying the structure hostent
does not suffice, since it contains pointers; a deep copy is required.
Posted 12/12/2006. Martin Vopatek
- p. 887. Fig 13.33 caption, "Class 2" should be "Class 3".
Posted 12/12/2006. Martin Vopatek
- p. 889. Practice Problem 13.8. "gethostbyame_ts" should
be "gethostbyname_ts"
- Appendix A: HCL Descriptions of Processor Control Logic
- p. 922, Code for D_bubble (lines 255-258). Should be:
# Mispredicted branch
(E_icode == IJXX && !e_Bch) ||
# Stalling at fetch while ret passes through pipeline
# but not condition for a load/use hazard
!(E_icode in { IMRMOVL, IPOPL } && E_dstM in { d_srcA, d_srcB }) &&
IRET in { D_icode, E_icode, M_icode };
Posted 11/24/2005. Randy Bryant
- Appendix B: Error Handling
- p. 945. line number 664, "Rio_writenb error"
should be "Rio_writen error".
Posted 6/8/2004. Brian Kell
- p. 947. open_listenfd, lines 739, 748, and 752.
Function should close listenfd descriptor
before returning.
Posted 2/17/2004. Martin Kulas
- Bibliography
- p. 950, entry [35], "Arlso" should be "Also".
Posted 4/11/2007. Yixin Cao
- Index
- p. 953: "addl [IA32] and double word" should read
"addl [IA32] add double word"
- p. 953: "andl [IA32] add double word" should read
"andl [IA32] and double word"
- p. 973: "Scud millse 82" should read "Scud missile 82"
First International Printing [2003, ISBN 0-13-178456-0, softcover]
- Preface
- p. xxvi (Last paragraph): The name "Sandhya Dwarkadas" was mispelled.
Posted 01/12/2005. Michael Scott
- Chapter 1: A Tour of Computer Systems
-
p. 15, 3rd paragagraph. "to a some new process" should read
"to some new process".
Posted 5/12/2003. Jeff Goldblat
- Chapter 2: Representing and Manipulating Information
- p. 36, Lines 3-6 below disassembler output. This line should read:
"For now, we simply note that this line states that the hexadecimal
byte sequence 01 05 64 94 04 08 is the byte-level representation of an
instruction that adds a word of data to the value stored in memory at
address 0x8049464."
Posted 09/25/2003. Anne Rogers
- p. 36, Aside "New to C?: Naming data types with typedef." The
last sentence should end "... the declaration of a variable of
type 'unsigned char *'."
Posted 12/03/2007. Carl Marcinik
- p. 51, Fig. 2.8: under "unsigned short":
Guaranteed max and typical 32-bit
max should be 65,535 not 63,535.
Posted 6/23/2003. Daniel Amelang
- p. 57, just before Equation 2.3:
"If we let x = B2T_w(vec{x}) ..." should be
"If we let vec{x} = T2B_w(x) ...".
Posted 8/7/2003. Thomas Niemann
- p. 61, second paragraph. The first line should read: "As an
example, consider the effect of executing the following code when integer variable
val is set to -12345:"
Posted 10/18/2007. Carl Marcinik
- p. 64, multiple places. Several of the bit vectors have one too
many bits:
- [x_{w}, x_{w-1}, ..., x_0] should be [x_{w-1}, x_{w-2}, ..., x_0]
in the following places:
- Left hand side of the first equation
- In the text of the second paragraph
- On the right hand sides of Equations 2.7 and 2.8.
- [x_{k}, x_{k-1}, ..., x_0] should be [x_{k-1}, x_{k-2}, ..., x_0]
in the following places:
- Bottom line of equation
- In the text of the second paragraph
- On the left hand sides of Equations 2.7 and 2.8.
Posted 11/18/2003. Rui Carvalho
- p. 64, Equation 2.8.
Inner function on right hand side should be B2U rather than B2T.
Posted 05/04/2006. Will Marrero
- p. 69, middle line of equation at bottom: There should be no minus signs in front of x_{w-1} and y_{w-1}.
Posted 09/18/2003. Simone Martins
- p. 73, 2nd & 3rd lines. All subscripts "w+1" should read "w-1".
Posted 09/13/2005. Day Zhong
- p. 73, 4th line should read "for x in the range -2^{w-1} <= x < 2^{w-1}"
Posted 07/19/2004. Yin Yongsheng
- p. 75, 5th line after Equation 2.15.
Should read
"... complement product B2T(x) * B2T(y)" (y instead of x at the end).
Posted 09/15/2005. Jordan Brough
- p. 77, Practice Problem 2.28. Parameter k can be 0, 1, 2, or 3.
Posted 09/08/2003. Darren Shultz
- p. 77, Practice Problem 2.28. The expression a << k + b
should be written as (a<<k) + b to avoid problems with operator precedence. Similarly we should write (a<<1) + a.
Posted 01/02/2008. Zeyang Li
- p. 78, 3rd line.
The equation for x' should be SUM(i=k,w-1) x_i * 2^(i-k).
Posted 04/22/2005. Guanpeng Xu
- p. 78, End of second full paragraph. Last sentence should read
"Thus, this shifted bit vector is the two's complement representation
of |_ x / 2^k _|," (rather than
|_ x / y _|.)
Posted 04/22/2005. Randy Bryant
- p. 91, Section 2.4.5, 3rd paragraph, 1st line. The word
"complement" should not be italicized, and there should be a space
before it.
Posted 12/02/2003. Mark Morrissey
- p. 104, Problem 2.54, second paragraph. The last part of the sentence should read "... we convert them to other unsigned values ...".
Posted 10/18/2007. Carl Marcinik
- p. 107, Problem 2.61. Local variable sig should be
renamed frac, and referred to as the fraction, rather than
the significand.
Posted 08/08/2006. Randy Bryant
- p. 109, Problem 2.4 Solution, part D. The first part should read
0x50da-0x502c = 0xae.
Posted 06/14/2004. Alan West
- p. 118, Problem 2.32 solution: The subproblems (A--D) and the answers (A--C) don't line up:
- The answer to subproblem B is given in A (9.54 X 10^{-8})
- The answer to C is given in B (0.343)
- The answer to D is given in C (687).
Posted 12/07/2004. Thomas Gross
- p. 120, Problem 2.37 solution for part H.
The problem states that the value for d is not infinity
or NaN, so we must find another counterexample. Here is one: when d is 1.0E25 and
f is 1.0, then (d+f) will be rounded to 1.0E25 and so (d+f)-d will
evaluate to 0.0.
Posted 01/03/2006. Ricky Liu
- p. 126, The i486 CPU had 1.2M transistors (not 1.9), and the PentiumPro had 5.5M (not 6.5).
This leads to a very slight change in the graph for Moore's Law on p. 127,
but the trend of doubling every 30 months continues to hold.
Posted 01/23/2006. Ricky Liu
- p. 126, The Pentium 4 was first delivered in 2000, not 2001.
Posted 01/23/2006. Ricky Liu
- Chapter 3: Machine-Level Representation of Programs
- p. 133, first line. Should read "Then, we could generate an executable program prog as follows:"
Posted 03/27/2005. Mario Lo Conte
- p. 133, Right after disassembly. Should read "... the disassembly of
code.o."
Posted 03/27/2005. Mario Lo Conte
- p. 141, New to C, line 10. "This also a form of" should be "This is also a form of".
Posted 09/15/2003. Darren Shultz
-
p. 147, first paragraph. The last sentence should read "In general,
compilers generate code that uses individual registers for multiple
program values and moves program values among the registers."
Posted 10/15/2006. Nawanan Theera-Ampornpunt
- p. 149, End of last complete paragraph. Add sentence "For reasons that are a bit obscure,
the incl and decl instructions set the zero, sign, and overflow flags, but they leave the
carry flag unchanged."
Posted 01/23/2006. Ricky Liu
-
p. 150, Section 3.6.2, line 5. Should be "condition codes" rather than
"conditions codes".
Posted 10/15/2006. Nawanan Theera-Ampornpunt
-
p. 154, line #2 in assembly code listing. The comment should state:
"Aligns next instruction to multiple of 16".
Posted 05/02/2004. Randy Bryant
- p. 156, last line of text. "... skipping the statement on line 7." should read
"skipping the statements on lines 7 and 8."
Posted 01/23/2006. Ricky Liu
- p. 160, last line of first paragraph.
Should read "Once the loop exits, val is copied to register %eax ..."
Posted 02/06/2006. James Caroll
- p. 162, Figure 3.14c. There should be an additional line:
14 movl %ebx, %eax
Posted 09/01/2004. Inge Frick
- p. 163, The last sentence of first paragraph states "This saves
one instruction in the assembly code," but that's not really true. The compiler could have generated the instruction
12 jns .L10
to perform the test nmi >= 0, so there is no performance
gain in the compiler-generated code. The last sentence should therefore
state "Although this modified test is valid, it gives no real performance advantage."
Posted 09/01/2004. Inge Frick
12 movl %ebx, %eax
Posted 09/01/2004. Inge Frick
- p. 163, Problem 3.11 assembly code. There should be an additional line:
12 movl %edx,%eax
Posted 06/14/2004. Michael Li
- p. 173, Aside, 4th line from bottom, should read "... P (the caller) must save the value before calling Q ...".
Posted 06/14/2004. Michael Li
- p. 180, Figure 3.22. In both stack frames, the offset of the frame pointer should be 0, not -4.
Posted 01/12/2005. Qing Xu
- p. 180, Figure 3.22. In both stack frames, the value at offset -24 should be "Saved %ebx", not "Saved %ebp".
Posted 07/01/2004. Steven Zhang
- p. 182, last paragraph, second line.
"(except in the first case ...)" should read
"(except in the first and last cases,
where the former copies the address, and the latter copies the index)"
Posted 01/23/2006. Ricky Liu
-
p. 183, Aside on why to avoid integer multiply. The Pentium III, on which the book is based, requires 4 clock cycles for integer multiplication. More recent processors
from Intel and AMD require between 3 and 10 clock cycles.
Posted 2/21/2007. Yixin Cao
-
p. 190, Figure 3.25b. Line 5 should read "int nTjPk = k;".
Posted 10/06/2003. Seiki
- p. 198, Problem 3.22, part C.
Line 4 of the code should be removed.
Posted 01/23/2006. Ricky Liu
- p. 213, stack diagram at bottom.
Step 8 value should be (a-b)/(-b+c).
Posted 01/23/2006. Ricky Liu
- p. 219, second example.
fmul should be fmull.
Posted 01/23/2006. Ricky Liu
-
p. 219, second example. The example expression should be x =
(-(a*b)+c)*(a*b). The expression in the box for step 6 should
be (-(a*b)+c)*(a*b).
Posted 06/04/2004. Thomas Niemann
- p. 219, second example.
There should be a seventh step
with the instruction fstpl x.
Posted 01/23/2006. Ricky Liu
- p. 222, second to last line of text, and last two entries of table in Figure 3.36.
The binary representations of 69 and 64 are [01000101] and [01000000], respectively.
Posted 01/23/2006. Ricky Liu
-
p. 228, second paragraph.
We stated that with GCC's inline assembly
"...there are no direct ways to specify a program value to use as the
destination operand for the setae instruction, since the
operand must be a single byte." In fact, you can specify
single-byte operands with gcc by declaring variables of
type char.
See Note on byte operands with inline assembly.
Posted 04/07/2003. Michael Trigoboff
-
p. 229, first two lines (lines 13-14 of okmul.c). Recent versions of
GCC do not allow a quoted string to split across multiple lines, and so attempting to compile this code gives an error message. Instead, the lines should be written as two separate strings, as follows:
asm("movl %2,%%eax; mull %3; movl %%eax,%0;"
"setae %%dl; movzbl %%dl,%1"
Posted 10/18/2007. Wang Yuanxuan
- p. 234, Figure 3.37. The annotation "default" shown on line 28 with label .L14 should instead be on line 26 with label .L20.
Posted 10/04/2005. Scott Wright
- p. 241, Solution to Problem 3.8A. Jump target is
0x8048d1e - 0x26 =
0x8048cf8. (Remember that 0xda is a one-byte two's complement number).
The first line of the disassembled code should read:
8048d1c: 76 da jbe 8048cf8
Posted 05/02/2004. Hyoung-Kee Choi
- p. 246, Solution to Problem 3.17. First entry in table. Total size should be 14 rather than 28.
Posted 10/07/2003. David O'Hallaron
-
p. 247, Solution to Problem 3.20, C code line 4.
It would be better to use N*N-1 instead of 255 here. The C preprocessor would automatically substitute 255 and then scale this by 4 to get 1020.
Posted 2/14/2007. Yixin Cao
-
p. 247, Solution to Problem 3.20, assembly code line 3.
The comment should read i = 15, rather than i = 0
Posted 4/16/2008. Hiep Hong
- Chapter 4: Processor Architecture
- p. 265, Aside on "The RISC versus CISC controversy".
The last word of the fourth line of text should be "instructions",
not "instruction".
Posted 10/21/2005. Scott Wright
- p. 270-1, Problem 4.5, code for poptest. The instruction
movl %esp, %edx should precede the instruction that pushes
tval. The first argument to the asm directive then reads:
asm("movl %%esp,%%edx; pushl %1; popl %%esp; movl %%esp,%0; movl %%edx,%%esp"
The existing code causes a segmentation fault.
Posted 01/23/2006. Ricky Liu
- p. 278, Section 4.2.4. line 5.
The reference to Figure 4.12
should instead be to the diagram at the bottom of p. 276.
Posted 01/23/2006. Ricky Liu
- p. 278, second to last line.
The value being tested is iexpr, not expr.
Posted 01/23/2006. Ricky Liu
- p. 288, Practice Problem 4.11.
The second sentence should be "Does this conform ...".
Posted 10/21/2005. Scott Wright
- p. 292, Fig. 4.20, Decode stage.
Labels dstA and dstB should be dstE and dstM, respectively.
Posted 11/23/2005. Scott Wright
- p. 299, Figure 4.24, 3rd row from bottom. The value for RESP should be 4.
Posted 05/02/2004. Anita Gupta
- p. 300, Just before subheading "Decode and Write-Back Stages."
The formula should read "p + 1 + r + 4i"
Posted 04/02/2004. John Ross
- p. 301, first paragraph, line 7.
The write port address inputs are dstE and dstM, not dstA and dstB.
Posted 03/13/2005. Inge Frick
- p. 305, second line of Section 4.3.5, "PC stage" should be "PC update stage".
Posted 05/19/2006. Ronald Jones
- p. 306, Fig. 4.30, Decode stage.
Labels dstA and dstB should be dstE and dstM, respectively.
Posted 11/23/2005. Scott Wright
- p. 308, second line below diagram. "This an ..." should be "This is an ...".
Posted 01/23/2006. Ricky Liu
- p. 311, Figure 4.34.
The final number on the timeline should be 600, not 640.
Posted 05/27/2003. Jörg Brauer
- p. 322, Aside on "Other branch prediction strategies." The third
sentence should read "A slightly more sophisticated strategy, known as
backward taken, forward not-taken (BTFNT), predicts branches to lower
addresses than the next instruction will be taken, while those to
higher addresses will not be taken."
Posted 12/03/2007. Carl Marcinik
- p. 325, Line 5 of second paragraph.
Third word "instruction" should be "instructions".
Posted 11/23/2005. Scott Wright
- p. 326, Figure 4.44, expanded box for Cycle 5 labeled "W".
The operation R[%eax] <-- 10
should read R[%edx] <-- 10.
Posted 03/19/2007. Devon Macey
- p. 326, Line 1 of first full paragraph.
Last word "instructions" should be "instruction".
Posted 11/23/2005. Scott Wright
- p. 335, line 4.
Should refer to pipeline register E, not M.
Posted 03/13/2005. Inge Frick
- p. 331, Fig. 4.49, expanded box for Cycle 6.
Box labeled "M" should have label "W".
Posted 11/23/2005. Scott Wright
- p. 332, Fig. 4.51, expanded box for Cycle 4, box labeled "M".
Labels "W_dstE" and "W_valE" should be "M_dstE" and "M_valE", respectively.
Posted 11/23/2005. Scott Wright
- p. 335, Fig. 4.54, near bottom.
Arrow labeled "Error" should point to the line "valB <-- R[%eax] = 0".
Posted 11/23/2005. Scott Wright
- p. 336, Line 2.
The address of the irmovl instruction is 0x012, not 0x00c.
Posted 02/06/2006. Ricky Liu
- p. 336, Line 8 of first full paragraph.
Should refer to register %ebx rather than %edx.
Posted 11/23/2005. Scott Wright
- p. 337, Section 4.5.8, line 4 of first paragraph.
Missing "of" between "design" and "the".
Posted 11/23/2005. Scott Wright
- p. 339, Figure 4.57 caption, 5th line.
"dstA" and "dstB" should be "dstE" and "dstM", respectively
Posted 02/06/2006. Ricky Liu
- p. 346, Figure 4.63.
The line of code at address 0x007 should be:
0x007: irmovl $1, %eax # Fall through
Posted 02/06/2006. Ricky Liu
- p. 348, Figure 4.65B.
Label in box on right should be "x" rather than "y"
Posted 10/17/2005. Caren Yang
- p. 350, 4th line from bottom. Sentence should read "Clearly, we
do not want the pipeline to perform both sets of actions." (Omit
first "to"). And next sentence should read "Instead, we want it to ..." (add "to").
Posted 02/06/2006 and 05/19/2006. Ricky Liu
and Ronald Jones
- p. 351, first paragraph, last line. Omit word "implement" from
the sentence.
Posted 02/06/2006. Ricky Liu
- p. 352, Code for D_bubble. Should be:
# Mispredicted branch,
(E_icode == IJXX && !e_Bch) ||
# or stalling at fetch while ret passes through pipeline
IRET in { D_icode, E_icode, M_icode } &&
# but not condition for a load/use hazard
!(E_icode in { IMRMOVL, IPOPL } && E_dstM in { d_srcA, d_srcB });
Posted 11/24/2005. Randal Bryant
- p. 363, Problem 4.41, line 3. Omit word "requires" from
the sentence.
Posted 02/06/2006. Ricky Liu
- p. 368, Problem 4.6 Solution.
The signal should be called xor, rather than eq.
Posted 11/16/2005. Betsy Wolff
- p. 368, Problem 4.7 Solution.
The figure should have an OR gate, rather than an AND gate.
Posted 09/15/2005. Michael Bombyk
- p. 368, Problem 4.8 Solution.
The correct code is:
int Med3 = [
(A <= B && B <= C) || (C < B && B < A) : B;
(B <= A && A <= C) || (C < A && A < B) : A;
1 : C;
]
Posted 10/21/2005. Scott Wright
- Chapter 5: Optimizing Program Performance
- p. 388, Table in middle of page. The entry for Integer + with function combine2 should be 20.66, not 22.61.
Posted 01/20/2004. Thomas Niemann
- p. 394, Fig 5.10: Line 9 of code (*dest = IDENT) is not necessary.
Posted 6/23/2003. Daniel Amelang
- p. 398, 2nd line. "such transcendental" should be "such as transcendental".
Posted 12/02/2003. Mark Morrissey
- p. 399, first paragraph under section 5.7.2: should be "...documents the
performance of some of the basic operations...".
(Add a "the" after the second "of".)
Posted 6/23/2003. Daniel Amelang
- p. 402, line after code cmpl %esi, %edx.1 -> cc.1.
"... compares the value in %esi ... with the newly computed value for %edx."
Should read
"... compares the newly computed value for %edx with the value in %esi ...."
Posted 2/22/2006. Ricky Liu
- p. 405, second to last line of text. The reference should be to
Fig 5.16, not to Fig 5.15.
Posted 2/12/2004. Michael Trigoboff
- p. 405. last line. Should read "...parallel on cycle 3 and..." rather than "cycles 3".
Posted 3/16/2005. James Troup
- p. 409, 3rd line from bottom. "maximum loop index" should read
"maximum array index".
Posted 2/22/2006. Ricky Liu
- p. 410, first text box. addl %edx, 3 should read
addl $3, %edx,
in both the assembly instructions and the execution unit operations.
Posted 7/01/2003. Daniel Amelang
- p. 410, Figure 5.20. addl %edx.0, 3 should read
addl $3, %edx.0.
Posted 7/01/2003. Daniel Amelang
- p. 416. Formulae for PE_n and PO_n. Both should have n/2-1 as
their upper bounds.
Posted 2/22/2006. Ricky Liu
- p. 418, Figure 5.26. The figure shows two load operations
starting at cycle 2 and two at cycle 3, but this would not be possible
with a single load unit. The six load operations
should begin at cycles 1 through 6 (from left to right). This
will not affect the overall program performance.
Posted 03/15/2005. Michael Trigoboff
- p. 421, second line of text. "accumulate sums" should read
"accumulate products".
Posted 2/22/2006. Ricky Liu
- p. 421, Practice Problem 5.5, Part A, "being" should be "been".
Posted 6/23/2003. Daniel Amelang
- p. 422, last line before Practice Problem 5.6
Should be "addition" rather than "multiplication".
Posted 03/13/2005. Inge Frick
- p. 423. last line. Should read "... (80-bit) ...".
Posted 3/16/2005. James Troup
- p. 424, Figure 5.27. The entry for floating point addition that
is unrolled x4, parallelism x2 should also be shown in boldface,
since it tied with unroll x8 parallelism x4.
Posted 2/22/2006. Ricky Liu
- p. 425, Figure 5.28. The entry for floating point addition that
is unrolled x4, parallelism x2 should be shown in boldface,
since it achieves better performance (2.34 vs. 2.36) than does unrolling x8 parallelism x4.
Posted 2/22/2006. Randy Bryant
- p. 427, Figure 5.29. Comment on line 6 of assembly code.
It should read "If >= 0, goto end".
Posted 2/22/2006. Ricky Liu
- p. 428, Practice Problem 5.7.
Assembly code line 4 should read
cmovzl %edx,%eax
Posted 11/10/2003. Tim Freeman
- p. 429, Section 5.13, second paragraph, "All of our programs
...", should read "The loops of all of our programs ...".
Posted 2/22/2006. Ricky Liu
- p. 433, second paragraph. Drop "(a)" in the reference to Figure 5.33.
Posted 2/22/2006. Ricky Liu
- p. 434, assembly code and its translation at the top of the page. The code given has
two bugs: 1) the decl instruction does not set the
condition codes, and 2) the loop test should be jne, not
jnc. The correct last two lines are:
subl $1, %eax subl $1, %eax.0 --> %eax.1
jne .l32 jne-taken cc.1
Posted 2/22/2006. Ricky Liu
- p. 442, Line 3. "26946/1007" should read "26,946/1,021".
Posted 2/22/2006. Ricky Liu
- p. 442, Line 7. "2.70" should read "2.69".
Posted 2/22/2006. Ricky Liu
- p. 447, Problem 5.12, Part C, "greater" should be "less".
Posted 2/5/2004. Grant Davis
- p. 449, Problem 5.17, in text box column labeled "Execution unit operation". Code movl 4(%edx.0) should be
load 4(%edx.0).
Posted 6/23/2003. Daniel Amelang
- p. 449, Problem 5.18, in text box column labeled "Execution unit operation". Code movl 4(%edx.0) should be
load 4(%ecx.0).
Posted 02/16/2004. Mark Morrissey
- p. 451, Problem 5.4 Solution, code for combine5px8. Fourth line should read:
int limit = length - 7;
Posted 6/23/2003. Daniel Amelang.
Errata entry corrected 3/13/2004. Mark Morrissey.
- p. 453, Solution to Problem 5.7.
The first sentence of the second paragraph should read "This code always dereferences xp (assembly code line 2)."
- p. 453, Problem 5.8D Solution. The CPE would be 3.00.
Posted 10/21/2003. Joe Trdinich
- Chapter 6: The Memory Hierarchy
- p. 474, Line 1. "0xa" should be "0xa0".
Posted 2/28/2006. Ricky Liu
- p. 475, Figure 6.14 caption. "SourceDIXtrac" should be "Source: DIXtrac"
Posted 4/7/2005. Dave O'Hallaron
- p. 476, first line. "more tracks are packed"
should be "more sectors are packed".
Posted 3/1/2004. Michael Trigoboff
- p. 479, 2nd last line: "stride-(N x sizeof(int))" should be "stride-N".
Posted 2/28/2006. Ricky Liu
- p. 480, Figure 6.19, description: "stride-(N x sizeof(int))"
should be "stride-N".
Posted 2/28/2006. Ricky Liu
- p. 505, Impact of Cache Size:
"must have a hit time of one clock cycle" should
read "must have a short hit time".
Posted 2/28/2006. Ricky Liu
- p. 509, 1 para, last sentence,
"the array size is larger than the cache size" should
read "the array size is larger than the cache size, and M > E".
Posted 2/28/2006. Ricky Liu
- p. 511, Problem 6.16 and 6.17, part D:
"What the miss rate be if the cache were twice as big?"
should be "What would the miss rate be if the cache had the same
block size but twice as many sets?"
Posted 2/28/2006. Ricky Liu
- p. 513, 2nd para, 2nd sentence:
"start at 1 KB, increasing by a factor of two, to
a maximum of 8 MB" should be "start at 8 MB, decreasing by a factor
of two, to a minimum of 1 KB".
Posted 2/28/2006. Ricky Liu
- p. 533, Solution to Problem 6.8, Part B, line 4, should
read "(4096 * 4)/32 = 512 blocks".
Posted 12/29/2003. Suryanto
- p. 536, Solution to Problem 6.16, Line 2. "grid[16][0]" should be
"grid[8][0]".
Posted 12/08/2003. Tim Wong
- p.536, Problem 6.19 Solution, part B, line 4:
"256 bytes" should be "256 KB".
Posted 2/28/2006. Ricky Liu
- Chapter 7: Linking
- p. 546, Line after the code segment, "two integers in .bss" should be
"integers in .data".
Posted 4/25/2006. Ricky Liu
- p. 546, line 5, "corresponds module" should be "corresponds to module".
Posted 5/11/2004. Dirk Maas
- p. 551, last line, "negative one" should be "negative zero".
Posted 4/25/2006. Ricky Liu
- p. 552, first paragraph. GCC also provides the
"-fno-common" flag, which triggers an error if it encounters multiply
defined global symbols. Also, "multiply defined" should be "multiple".
Posted 4/25/2006. Ricky Liu
- p. 553, second paragraph, line 3, "random" should be "rand".
Posted 4/25/2006. Ricky Liu
- p. 557, Practice Problem 7.3, "file object file" should be "object file".
Posted 3/16/2005. James Troup
- p. 558, line 7-8, ".relo.text" and ".relo.data" should be
".rel.text" and ".rel.data" respectively.
Posted 6/1/2004. Dirk Maas
- p. 558, sect 7.7.1, paragraph 2,
"how to the modify" should be "how to modify".
Posted 3/16/2005. Mao Fan
- p. 562, Figure 7.10 caption, "data" should be ".data".
Posted 4/25/2006. Ricky Liu
- p. 563, line 8, ".relo" should be ".rel".
Posted 6/1/2004. Dirk Maas
- p. 564, second last line, "in from" should be "from".
Posted 4/25/2006. Ricky Liu
- p. 565, line 1, "calls the exit function" should
read "terminates normally".
Posted 4/25/2006. Ricky Liu
- p. 570, command line before section 7.12, "main3.c" should be "dll.c".
Posted 4/25/2006. Ricky Liu
- p. 572, in both code fragments, "popl %ebx;" should be "popl %ebx".
Posted 4/25/2006. Ricky Liu
- Chapter 8: Exceptional Control Flow
- p. 592, Figure 8.7 caption, "on the whether" should read "on whether".
Posted 4/25/2006. Ricky Liu
- p. 593, Figure 8.9, "Iinterrupt or trap" should be "Interrupt or trap".
Posted 3/29/2005. David Po
- p. 604, Figure 8.14, remove the '!' character from each printf
Posted 12/29/2003. Mark Morrissey
- p. 605, Practice problem 8.2. Remove the '!' character from the
printf
Posted 4/25/2006. Ricky Liu
- p. 607, top of page, third bullet item should be:
"WNOHANG|WUNTRACED: Return immediately, with a return value
of 0 if none of the children in the wait set has stopped or
terminated, or with a return value equal to the PID of one
of the stopped or terminated children."
Posted 12/30/2003. Michael Trigoboff
- p. 611, in function prototype of "execve", the third parameter should be
"char *envp[]", not "char *envp".
Posted 6/23/2003. Daniel Amelang
- p. 611, Figure 8.17, the last argv parameter should
be /usr/include instead of /user/include.
Posted 12/29/2003. Mark Morrissey
- p. 620, Figure 8.24. There should be a line drawn from
Shell to Background Job #1.
Posted 11/04/2003. Mark Morrissey
- p. 623, in function prototype box at bottom of page,
the typdef and signal() statements
should both end with semicolons.
Posted 12/29/2003. Mark Morrissey
- p. 625, last line, "children the terminate"
should read "children to terminate".
Posted 4/25/2006. Ricky Liu
- p. 629, 2nd to last paragraph, line 3.
"modification to signal1" should be "modification to signal2".
Posted 11/04/2003. Mark Morrissey
- Chapter 9: Measuring Program Execution Time
- p. 654, Figure 9.1. The second sentence of the caption should read
"The processor hardware operates at a microscopic time scale in which events have durations on the order of a few nanoseconds (ns)."
Posted 01/12/2004. Mark Morrissey
- p. 655, 1st line after aside. Should be "... a hypothetical 250 ms ..."
Posted 12/02/2003. Mark Morrissey
- p. 656, middle of full paragraph. Missing left paren: ``I'') should be (``I'').
Posted 01/21/2004. Mark Morrissey
- p. 660, 3rd line from bottom. "96.7" should be "96.6".
Posted 12/02/2003. Mark Morrissey
- p. 663, third line.
Should say T_c rather than T_m.
Posted 3/31/2006. Ricky Liu
- p. 664, code in Figure 9.9, line 34.
Should read borrow = cyc_lo > ncyc_lo
Posted 3/31/2006. Ricky Liu
- p. 668, in the caption for Figure 9.13: "caches.aches" should just be
"caches."
Posted 6/23/2003. Daniel Amelang
- p. 684, bullet before Section 9.7, third line.
Should read "... as long as it uses cycle-based timing."
Posted 3/31/2006. Ricky Liu
- p. 686, second-to-last paragraph of Section 9.10, last line.
Should read "... whether the minimum ...".
Posted 3/31/2006. Ricky Liu
- Chapter 10: Virtual Memory
- p. 698, 10.3.3, last sentence. "PP 0 should be PP 1".
Posted 12/02/2003. Mark Morrissey
- p. 701, Figure 10.9 caption, "the operating maintains" should read the
"the operating system maintains".
Posted 8/12/2004. Venkata Naidu
- p. 704, Section 10.6, end of first paragraph. "symbols we will using" should read "symbols we will be using".
Posted 3/21/2005. Constantine Kousoulis
- p. 707, 4th line from bottom. "PTE in order the" should
read "PTE in order to"
Posted 12/13/2005. Inge Frick
- p. 709, Last line, first paragraph. "addresses spaces" should be
"address spaces".
Posted 11/21/2003. Emil Tarazi
-
p. 714, last line of first paragraph, "perform" should be "performs".
Posted 6/23/2003. Daniel Amelang
- p. 727, sec 10.8.3, second bullet, line 3, "write The text" should be
"write. The text".
Posted 4/25/2006. Ricky Liu
- p. 729, paragraph after bullets, line 2, delete "and fd is NULL".
(with MAP_ANON, the fd arg is ignored)
Posted 4/25/2006. Ricky Liu
- p. 731, line 4. "new and free calls in C++" should be "new
and delete operators in C++".
Posted 11/4/2003. Quarup Barreirinhas
- p. 734, second program, although unnecessary, we should set a good
example by calling free() before the exit() in line 11.
Posted 4/25/2006. Ricky Liu
- p. 745, figure 10.43, comments for global variables:
mem_brk points to the last current heap byte plus 1, and
mem_max_addr points to the last legal heap byte plus 1.
Posted 4/25/2006. Ricky Liu
- p. 751, sec 10.9.13, line 2, "block allocation" would be clearer
if it read "block allocation time"
Posted 4/25/2006. Ricky Liu
- p. 752, second last line, "{1024}, ..., {1025-2048}" should be
"{1024}, {1025-2048}"
Posted 4/25/2006. Ricky Liu
- p. 754, third paragraph, second last line, "largest size class" should read "appropriate size class".
Posted 4/25/2006. Ricky Liu
- p. 757, 5th bullet: "int length(b)" should read
"int length(ptr b)".
Posted 4/25/2006. Ricky Liu
- p. 758, Figure 10.53: Missing labels (a) and (b).
Posted 4/25/2006. Ricky Liu
- p. 758, first sentence. "Figure 10.53" should be "Figure 10.54".
Posted 12/02/2003. Mark Morrissey
- p. 760, sec 10.11.3, line 4: "the use the" should read
"use the".
Posted 4/25/2006. Ricky Liu
- p. 763, 2nd line above code for heapref. "line 12" should be
"line 10"
Posted 12/13/2005. Inge
Frick
- Chapter 11: System-Level I/O
- p. 785, rio_writen function. Comment in line 12. "errorno" should
be "errno".
Posted 12/02/2003. Mark Morrissey
- p. 796, line 10. "alternative alternative" should be "alternative".
Posted 07/31/2003.
- Chapter 12: Network Programming
- p. 802. Fig 12.1. Circle on the right should be labeled "Server process"
instead of "Client process".
Posted 12/05/2003. Darren Shultz
- p. 809. First line below function declarations. "The hotnl
function" should read "The htonl function".
Posted 7/12/2004. Steven Zhang
- p. 810. Practice problem 12.1. "0xef000001" should
be "0x7f000001.
Posted 7/12/2004. Steven Zhang
- p. 813. Figure 12.12, line 26 should be
addr.s_addr = ((struct in_addr *)*pp)->s_addr;
Posted 11/21/2006. Randy Bryant
- p. 817. Fig 12.5. In the top and bottom lines,
netinit/in.h should be netinet/in.h
Posted 3/5/2005. Sacha Krakowiak
- p. 820. Figure 12.16, line 15 should be
bcopy(char *)hp->h_addr_list[0];
Posted 11/21/2006. Randy Bryant
- p. 830. 3rd line from bottom, "size in byte" should be "size in
bytes".
Posted 3/19/2007. James Woodruff
- p. 831. 4th line from bottom, "to creates a child process" should
be "to create a child process".
Posted 4/29/2005. Bhas Nalabothula
- p. 843. Prob 12.12, "contest" should be "content".
Posted 3/6/2005. Sacha Krakowiak
- Chapter 13: Concurrent Programming
- p. 847. Line 1 table of contents should be "849", not "489".
Posted 7/12/2004. Sacha Krakowiak
- p. 854. Line 4, "if an only if" should be "if and only if"
Posted 4/22/2005. Mao Fan
- p. 887. Fig 13.33, line 8. Simply copying the structure hostent
does not suffice, since it contains pointers; a deep copy is required.
Posted 12/12/2006. Martin Vopatek
- p. 887. Fig 13.33 caption, "Class 2" should be "Class 3".
Posted 12/12/2006. Martin Vopatek
- p. 872. Fig 13.17, asm code, third block, label ".L9"
should be deleted.
Posted 5/2/2005. Mao Fan
- Appendix A: HCL Descriptions of Processor Control Logic
- p. 922, Code for D_bubble (lines 255-258). Should be:
# Mispredicted branch
(E_icode == IJXX && !e_Bch) ||
# Stalling at fetch while ret passes through pipeline
# but not condition for a load/use hazard
!(E_icode in { IMRMOVL, IPOPL } && E_dstM in { d_srcA, d_srcB }) &&
IRET in { D_icode, E_icode, M_icode };
Posted 11/24/2005. Randal Bryant
- Appendix B: Error Handling
- p. 945. line number 664, "Rio_writenb error"
should be "Rio_writen error".
Posted 6/8/2004. Brian Kell
- p. 947. open_listenfd, lines 739, 748, and 752.
Function should close listenfd descriptor
before returning.
Posted 2/17/2004. Martin Kulas
- Bibliography
- p. 950, entry [35], "Arlso" should be "Also".
Posted 4/11/2007. Yixin Cao
- Index
Randy Bryant and Dave O'Hallaron
|