Add qemu 2.4.0
[kvmfornfv.git] / qemu / roms / openbios / arch / ppc / timebase.S
diff --git a/qemu/roms/openbios/arch/ppc/timebase.S b/qemu/roms/openbios/arch/ppc/timebase.S
new file mode 100644 (file)
index 0000000..19faed4
--- /dev/null
@@ -0,0 +1,33 @@
+#include "asm/asmdefs.h"
+#include "asm/processor.h"
+
+/*
+ * unsigned long long _get_ticks(void);
+ */
+_GLOBAL(_get_ticks):
+1:      mftbu   r3
+        mftb    r4
+        mftbu   r5
+        cmpw    0,r3,r5
+        bne     1b
+        blr
+
+/*
+ * Delay for a number of ticks
+ */
+_GLOBAL(_wait_ticks):
+        mflr    r8              /* save link register */
+        mr      r7, r3          /* save tick count */
+        bl      BRANCH_LABEL(_get_ticks)       /* Get start time */
+
+        /* Calculate end time */
+        addc    r7, r4, r7      /* Compute end time lower */
+        addze   r6, r3          /*     and end time upper */
+
+1:      bl      BRANCH_LABEL(_get_ticks)       /* Get current time */
+        subfc   r4, r4, r7      /* Subtract current time from end time */
+        subfe.  r3, r3, r6
+        bge     1b              /* Loop until time expired */
+
+        mtlr    r8              /* restore link register */
+        blr