1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 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 */
|