It should work as long the structure is packed and stored just like a big endian 64-bit long in memory. But you're better off doing something like this:
long long val = (long long)((ptr->ev_hi << 32) + ptr->ev_lo);
And then you don't have to worry about how EClockVal is stored. Plus, the shift and add will allow the compiler to optimize the code. Casting pointers may require guessing on the compiler's part, which may lead to no optimization at all. The VBCC manual does a pretty good job of documenting what's optimized and what's not.
Per VBCC, the following register pairs are used for storing long long values: d0/d1, d2/d3, d4/d5, and d6/d7. Keep that in mind if you plan on using assembler or direct register references in your C code.
But if you're going to use floating point division, then you may as well keep your code simple and use double values throughout.
Trev