3. In detail explain the code generated for function2 (line 28 through 39). The following questions should be answered using the optimized code. 4. In detail explain the code generated for function1. 5. How are function calls optimized? The following questions should be answered using by comparing the unoptimized code and the optimized code. 6. Compare the code

Computer Networking: A Top-Down Approach (7th Edition)
7th Edition
ISBN:9780133594140
Author:James Kurose, Keith Ross
Publisher:James Kurose, Keith Ross
Chapter1: Computer Networks And The Internet
Section: Chapter Questions
Problem R1RQ: What is the difference between a host and an end system? List several different types of end...
icon
Related questions
Question
100%

/* GCC */
/* gcc -Wa,-adhln -g -masm=intel -m32 "Project 2.c" > "Project 2-g.asm" */
/* gcc -Wa,-adhln -O -masm=intel -m32 "Project 2.c" > "Project 2-o.asm" */

#include <stdio.h>

#define NOINLINE __attribute__ ((noinline))

static NOINLINE int function1(int x, int y)
{

int i;
int sum;
int values[10];

sum = 0;
for (i = 0; i < 10; i++) {
values[i] = 10 * i + x * y;
sum += values[i];
}

return (sum);

}

static int NOINLINE function2(int *values, int valuesLen)
{

int i;
int sum;

sum = 0;
for (i = 0; i < valuesLen; i++) {
sum += values[i];
}

return (sum);

}

static NOINLINE int function3(int x)
{

int y;

y = x / 10;

return (y);

}

static NOINLINE int function4(int a, int b, int c, int d)
{

int r;

if (a > b)
r = a;
else if (a > c)
r = 2 * a;
else if (a > d)
r = 3 * a;
else
r = -1;

return (r);

}

int main(int argc, char **argv)
{

int i;
int j;
int k;
int values[10];

i = 1;
j = 2;
k = function1(i, j);
printf("function1: i = %d, j = %d, k = %d\n", i, j, k);

for (i = 0; i < 10; i++) {
values[i] = i;
}
k = function2(values, 10);
printf("function2: k = %d\n", k);

k = function3(100);
printf("function3: k = %d\n", k);

k = function4(1, 2, 3, 4);
printf("function4: k = %d\n", k);

return (0);
}

question 3-6

The purpose of this project is to gain a greater understanding of the Intel 32-bit instruction set and understand how a compiler translates C code into assembly language. By
compiling the program in unoptimized mode you will hopefully see a fairly clear translation. When running in optimization mode, you will see how well compilers can optimize
your code.
To compile an unoptimized version use:
gcc -Wa, -adhln -g -masm=intel -m32 "Project 2.c" > "Project 2.aSA"
To compile an optimized version use:
gcc -Wa, -adhin -0 -maSn-intel -m32 "Project 2.c" > "Project 2-o.asm"
The -Wa, -adhln option causes gcc to generate intermixed source and assembly code.
The -maS-intel option causes gcc to generate assembly code in intel format.
The -m32 generates 32-bit code.
The -g option generates unoptimized code while -0 generates optimized code.
The generated code includes quite a few directives that can be ignored. Most of the directives begin with a period (.). There are also a few call instructions to procedures
that you may not know what they mean that can be ignored. For example:
callx86.get_pc_thunk.bx
add ebx, OFFSET FLAT: GLOBAL_OFFSET_TABLE_
The following questions should be answered using the unoptimized code.
1. Describe the stack at line 24 (return (sum) ;). The bottom of the stack is the first row below. The top of the stack will be the last item. The first few items are
provided. You will probably need to add some additional rows to the table below.
Description
Value
Transcribed Image Text:The purpose of this project is to gain a greater understanding of the Intel 32-bit instruction set and understand how a compiler translates C code into assembly language. By compiling the program in unoptimized mode you will hopefully see a fairly clear translation. When running in optimization mode, you will see how well compilers can optimize your code. To compile an unoptimized version use: gcc -Wa, -adhln -g -masm=intel -m32 "Project 2.c" > "Project 2.aSA" To compile an optimized version use: gcc -Wa, -adhin -0 -maSn-intel -m32 "Project 2.c" > "Project 2-o.asm" The -Wa, -adhln option causes gcc to generate intermixed source and assembly code. The -maS-intel option causes gcc to generate assembly code in intel format. The -m32 generates 32-bit code. The -g option generates unoptimized code while -0 generates optimized code. The generated code includes quite a few directives that can be ignored. Most of the directives begin with a period (.). There are also a few call instructions to procedures that you may not know what they mean that can be ignored. For example: callx86.get_pc_thunk.bx add ebx, OFFSET FLAT: GLOBAL_OFFSET_TABLE_ The following questions should be answered using the unoptimized code. 1. Describe the stack at line 24 (return (sum) ;). The bottom of the stack is the first row below. The top of the stack will be the last item. The first few items are provided. You will probably need to add some additional rows to the table below. Description Value
provided. You will probably need to add some additional rows to the table below.
Description
Value
First argument to main
argv
Second argument to main
argo
Return address of main
Caller's return address
C runtime value of bp
Caller's bp register
Local variable i in main [bp-12)
2. In detail explain the code generated for line 82 (k = functionl (i, j);). For this and all further questions in which you are asked to explain the code generated
in detail, I expect you to copy the generated code and add a comment for each line. For example:
006e C745FC00 mov DWORD PTR -4[ebp), 0 ; initialize i
3. In detail explain the code generated for function2 (line 28 through 39).
The following questions should be answered using the optimized code.
4. In detail explain the code generated for function1.
5. How are function calls optimized?
The following questions should be answered using by comparing the unoptimized code and the optimized code.
6. Compare the code generated by function4 in the unoptimized and ontimized
Transcribed Image Text:provided. You will probably need to add some additional rows to the table below. Description Value First argument to main argv Second argument to main argo Return address of main Caller's return address C runtime value of bp Caller's bp register Local variable i in main [bp-12) 2. In detail explain the code generated for line 82 (k = functionl (i, j);). For this and all further questions in which you are asked to explain the code generated in detail, I expect you to copy the generated code and add a comment for each line. For example: 006e C745FC00 mov DWORD PTR -4[ebp), 0 ; initialize i 3. In detail explain the code generated for function2 (line 28 through 39). The following questions should be answered using the optimized code. 4. In detail explain the code generated for function1. 5. How are function calls optimized? The following questions should be answered using by comparing the unoptimized code and the optimized code. 6. Compare the code generated by function4 in the unoptimized and ontimized
Expert Solution
trending now

Trending now

This is a popular solution!

steps

Step by step

Solved in 4 steps

Blurred answer
Follow-up Questions
Read through expert solutions to related follow-up questions below.
Follow-up Question

In detail explain the code generated for function3. This a very hard. Try your best. Why is the compiler doing this?

Solution
Bartleby Expert
SEE SOLUTION
Recommended textbooks for you
Computer Networking: A Top-Down Approach (7th Edi…
Computer Networking: A Top-Down Approach (7th Edi…
Computer Engineering
ISBN:
9780133594140
Author:
James Kurose, Keith Ross
Publisher:
PEARSON
Computer Organization and Design MIPS Edition, Fi…
Computer Organization and Design MIPS Edition, Fi…
Computer Engineering
ISBN:
9780124077263
Author:
David A. Patterson, John L. Hennessy
Publisher:
Elsevier Science
Network+ Guide to Networks (MindTap Course List)
Network+ Guide to Networks (MindTap Course List)
Computer Engineering
ISBN:
9781337569330
Author:
Jill West, Tamara Dean, Jean Andrews
Publisher:
Cengage Learning
Concepts of Database Management
Concepts of Database Management
Computer Engineering
ISBN:
9781337093422
Author:
Joy L. Starks, Philip J. Pratt, Mary Z. Last
Publisher:
Cengage Learning
Prelude to Programming
Prelude to Programming
Computer Engineering
ISBN:
9780133750423
Author:
VENIT, Stewart
Publisher:
Pearson Education
Sc Business Data Communications and Networking, T…
Sc Business Data Communications and Networking, T…
Computer Engineering
ISBN:
9781119368830
Author:
FITZGERALD
Publisher:
WILEY