I was under the impression CPU space was write-only. The movec instruction says:
Description: Moves the contents of the general-purpose register to the specified control register. This transfer is always 32 bits even though the control register may be implemented with fewer bits. Note that the control registers are write only. The on-chip debug module can be used to read control registers. Note that this instruction synchronizes the pipeline.
You can remember every time you update a CPU space register (by shadowing the update to a static variable) and you can do that in C with a routine like this (which is resilient to whatever selected calling convention you are using):
static int
setvbr(uint32 x)
{
asm {
move x,d0
movec d0,vbr
}
}