The table covers two consecutive binades, so is indexed by the least significant bit of the stored exponent and the most significant seven bits of the stored significand of the function argument, which is an IEEE-754 binary64 number. In essence, $x \in [1,2)$ is mapped to indexes $128 \ldots 255$, and $x \in [2, 4)$ is mapped to indexes $0 \ldots 127$. Each 16-bit table entries comprises two bytes, the most significant of which represents an 8-bit approximation to $\sqrt{x}$ while the least significant represents an 8-bit approximation to $\frac{1}{2\sqrt{x}}$.
What is stored in the table are the leading bits of the significands of the two approximations which get combined by bit manipulation with the exponent bits of an IEEE-754 binary64 in the appropriate range and re-interpreted as an IEEE-754 binary64 number. The square root approximation winds up in $g$ and the approximation to half the reciprocal square root winds up in $y$.
The table provides approximations valid to slightly under eight bits. Three steps of a Newton-Raphson type coupled sqrt / rsqrt iteration are performed. This iteration has quadratic convergence. This delivers square root approximation results with slightly under sixty-four valid bits to the final rounding step. Several different arrangements of such Newton-Raphson iterations are described in the literature and in practical use. The one used in the linked code matches with that shown in Figure 2 of the following publication:
P. W. Markstein, "Computation of elementary functions on the IBM RISC System/6000 processor," IBM Journal of Research and Development, Vol. 34, No. 1, Jan. 1990, pp. 111-119.
The approximations provided by the table include both overestimates and underestimates, which suggests that they were selected to minimize the approximation error in each sub-interval. I am not able to replicate the table exactly, despite trying for some time. I am able to generate a table that only differs by ± 1 in the least significant bit of each tabulated value, using the following C code:
double x;
int idx = 0;
for (x = 2.0; x < 4.0; x += 1.0 / 64) {
double midpoint = x + 1.0 / 128;
double s = sqrt (midpoint);
double r = 1.0 / s;
int hi = round ((s - 1.0) * 256);
int lo = round ((2 * r - 1.0) * 256);
int tab = hi * 256 + lo;
printf ("%d, ", tab);
idx++;
if ((idx % 12) == 0) printf ("\n");
}
for (x = 1.0; x < 2.0; x += 1.0 / 128) {
double midpoint = x + 1.0 / 256;
double s = sqrt (midpoint);
double r = 1.0 / s;
int hi = round ((s - 1.0) * 256);
int lo = round ((2 * r - 1.0) * 256);
int tab = hi * 256 + lo;
printf ("%d, ", tab);
idx++;
if ((idx % 12) == 0) printf ("\n");
}