summaryrefslogtreecommitdiffstats
path: root/qemu/roms/openbios/include/arch/ppc/asmdefs.h
diff options
context:
space:
mode:
Diffstat (limited to 'qemu/roms/openbios/include/arch/ppc/asmdefs.h')
-rw-r--r--qemu/roms/openbios/include/arch/ppc/asmdefs.h151
1 files changed, 151 insertions, 0 deletions
diff --git a/qemu/roms/openbios/include/arch/ppc/asmdefs.h b/qemu/roms/openbios/include/arch/ppc/asmdefs.h
new file mode 100644
index 000000000..3b3cad434
--- /dev/null
+++ b/qemu/roms/openbios/include/arch/ppc/asmdefs.h
@@ -0,0 +1,151 @@
+/* -*- asm -*-
+ *
+ * Creation Date: <2001/02/03 19:38:07 samuel>
+ * Time-stamp: <2003/07/08 18:55:50 samuel>
+ *
+ * <asmdefs.h>
+ *
+ * Common assembly definitions
+ *
+ * Copyright (C) 2001, 2002, 2003 Samuel Rydh (samuel@ibrium.se)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation
+ *
+ */
+
+#ifndef _H_ASMDEFS
+#define _H_ASMDEFS
+
+/************************************************************************/
+/* High/low halfword compatibility macros */
+/************************************************************************/
+
+#ifndef __darwin__
+#define ha16( v ) (v)##@ha
+#define hi16( v ) (v)##@h
+#define lo16( v ) (v)##@l
+#endif
+#define HA(v) ha16(v)
+#define HI(v) hi16(v)
+#define LO(v) lo16(v)
+
+/* from Linux: include/asm-powerpc/ppc_asm.h */
+/*
+ * Copyright (C) 1995-1999 Gary Thomas, Paul Mackerras, Cort Dougan.
+ */
+
+/* General Purpose Registers (GPRs) */
+
+#define r0 0
+#define r1 1
+#define r2 2
+#define r3 3
+#define r4 4
+#define r5 5
+#define r6 6
+#define r7 7
+#define r8 8
+#define r9 9
+#define r10 10
+#define r11 11
+#define r12 12
+#define r13 13
+#define r14 14
+#define r15 15
+#define r16 16
+#define r17 17
+#define r18 18
+#define r19 19
+#define r20 20
+#define r21 21
+#define r22 22
+#define r23 23
+#define r24 24
+#define r25 25
+#define r26 26
+#define r27 27
+#define r28 28
+#define r29 29
+#define r30 30
+#define r31 31
+
+/************************************************************************/
+/* MISC */
+/************************************************************************/
+
+#ifdef __powerpc64__
+
+#define LOAD_REG_IMMEDIATE(D, x) \
+ lis (D), (x)@highest ; \
+ ori (D), (D), (x)@higher ; \
+ sldi (D), (D), 32 ; \
+ oris (D), (D), (x)@h ; \
+ ori (D), (D), (x)@l
+
+#define LOAD_REG_FUNC(D, x) \
+ LOAD_REG_IMMEDIATE((D), (x)) ; \
+ ld (D), 0(D)
+
+#else
+
+#define LOAD_REG_IMMEDIATE(D, x) \
+ lis (D), HA(x) ; \
+ addi (D), (D), LO(x)
+
+#define LOAD_REG_FUNC(D, x) \
+ LOAD_REG_IMMEDIATE((D), (x))
+
+#endif
+
+#ifdef __powerpc64__
+#define PPC_LL ld
+#define PPC_STL std
+#define PPC_STLU stdu
+#define RFI rfid
+#define MTMSRD(r) mtmsrd r
+#define DATA_LONG(x) .quad x
+#define BRANCH_LABEL(name) . ## name
+#define PPC_LR_STKOFF 16
+#else
+#define PPC_LL lwz
+#define PPC_STL stw
+#define PPC_STLU stwu
+#define RFI rfi
+#define MTMSRD(r) mtmsr r
+#define DATA_LONG(x) .long x
+#define BRANCH_LABEL(name) name
+#define PPC_LR_STKOFF 4
+#endif
+
+#ifndef __darwin__
+#define GLOBL( name ) .globl name ; name
+#define EXTERN( name ) name
+#else
+/* an underscore is needed on Darwin */
+#define GLOBL( name ) .globl _##name ; name: ; _##name
+#define EXTERN( name ) _##name
+#endif
+
+#if defined(__powerpc64__) && !defined(__darwin__)
+#define _GLOBAL(name) \
+ .align 2 ; \
+ .section ".opd", "aw" ; \
+ .globl name ; \
+ .globl .##name ; \
+ name: \
+ .quad .##name ; \
+ .quad .TOC.@tocbase ; \
+ .quad 0 ; \
+ .previous ; \
+ .type .##name, @function ; \
+ .##name
+#else
+#define _GLOBAL(name) \
+ GLOBL(name)
+#endif
+
+#define BIT(n) (1<<(31-(n)))
+
+#endif /* _H_ASMDEFS */