/* -*- asm -*- * * Creation Date: <2001/02/03 19:38:07 samuel> * Time-stamp: <2003/07/08 18:55:50 samuel> * * * * 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 */