On Dec 27, 2017, at 1:48 PM, Segher Boessenkool segher@kernel.crashing.org wrote:
On Wed, Dec 27, 2017 at 01:35:46PM -0500, John Arbuckle wrote:
+/* reads the lower timebase register ( -- tbl ) */ +static void get_tbl(void) +{
- int time;
- asm volatile("mftb %0" : "=r"(time)); // load from TBL register
- PUSH(time);
+}
This doesn't get TBL: on 64-bit implementations it gets all of TB. You'll have to mask out the high half if you want to get just TBL. Or, you could just use mftb (mfspr 268) on 64-bit systems, instead of the TBU dance that you need on 32-bit systems.
Segher
I wasn't aware that OpenBIOS supported 64-bit PowerPC. What if I change the type of the time variable to uint32_t. This type can only hold a 32-bit value, would the following code work on 64-bit PowerPC?
/* reads the lower timebase register ( -- tbl ) */ static void get_tbl(void) { uint32_t time; asm volatile("mftb %0" : "=r"(time)); // load from TBL register PUSH(time); }
Also how would I test 64-bit PowerPC code in QEMU? If you could send the command-line needed that would help.