//@Description Sketch to reverse all the bits in a word in log-time using log-shifting.

pragma options "--bnd-cbits 3 ";

int W = 32;

bit[W] reverseSketch(bit[W] in) implements reverse {

	bit[W]  t = in;	
	int s = 1;
	int r = ??;
	repeat(??){
		bit[W] tmp1 = (t << s);
		bit[W] tmp2 = (t >> s);
		t = tmp1 {|} tmp2; // The {|} operator is syntactic sugar for m=??, (tmp1&m | tmp2&!m).
		s = s*r;
	}
	return t;
}


bit[W] reverse (bit[W] in) {
	bit [W] out=0;
	for (int i = 0; i < W; i++) {
		out[i] = in[W-1 - i];
	}
	return out;
}