This (now familiar) MIPS/SPIM programLinks to an external site. includes a subroutine called myadd that performs x[0]=x[1]+x[2];. In the space below, write a replacement for the myadd subroutine named myones that will make x[0]=ones(x[1]). The ones function is perhaps better known as population count; it simply returns the number of 1 bits in the binary representation of a value. The following C code gives a simple algorithm to compute it. This code uses a little trick credited to Brian Kernighan (and described hereLinks to an external site.) to count the population of 1s; t0 & (t0 - 1) removes the least-significant 1 bit from the value of t0. extern int x[3]; void ones(void) { int t0 = x[1]; int t1 = 0; while (t0) { t1 = t1 + 1; t2 = t0 - 1; t0 = t0 & t2; } x[0] = t1; }
This (now familiar) MIPS/SPIM programLinks to an external site. includes a subroutine called myadd that performs x[0]=x[1]+x[2];. In the space below, write a replacement for the myadd subroutine named myones that will make x[0]=ones(x[1]). The ones function is perhaps better known as population count; it simply returns the number of 1 bits in the binary representation of a value. The following C code gives a simple
extern int x[3];
void
ones(void) {
int t0 = x[1];
int t1 = 0;
while (t0) {
t1 = t1 + 1;
t2 = t0 - 1;
t0 = t0 & t2;
}
x[0] = t1;
}
Trending now
This is a popular solution!
Step by step
Solved in 3 steps with 2 images