historical/m0-applesillicon.git/xnu-qemu-arm64-5.1.0/roms/openbios/include/arch/ppc/asmdefs.h
2024-01-16 11:20:27 -06:00

151 lines
3.1 KiB
C

/* -*- 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 */