95 lines
2.0 KiB
C
95 lines
2.0 KiB
C
|
#ifndef __ARCH_MIPS64_DEFS_H
|
||
|
#define __ARCH_MIPS64_DEFS_H
|
||
|
|
||
|
#define REG_SZ (4)
|
||
|
|
||
|
#define REG_R0 (0)
|
||
|
#define REG_R1 (1)
|
||
|
#define REG_R2 (2)
|
||
|
#define REG_R3 (3)
|
||
|
#define REG_R4 (4)
|
||
|
#define REG_R5 (5)
|
||
|
#define REG_R6 (6)
|
||
|
#define REG_R7 (7)
|
||
|
#define REG_R8 (8)
|
||
|
#define REG_R9 (9)
|
||
|
#define REG_R10 (10)
|
||
|
#define REG_R11 (11)
|
||
|
#define REG_R12 (12)
|
||
|
#define REG_R13 (13)
|
||
|
#define REG_R14 (14)
|
||
|
#define REG_R15 (15)
|
||
|
#define REG_R16 (16)
|
||
|
#define REG_R17 (17)
|
||
|
#define REG_R18 (18)
|
||
|
#define REG_R19 (19)
|
||
|
#define REG_R20 (20)
|
||
|
#define REG_R21 (21)
|
||
|
#define REG_R22 (22)
|
||
|
#define REG_R23 (23)
|
||
|
#define REG_R24 (24)
|
||
|
#define REG_R25 (25)
|
||
|
#define REG_R26 (26)
|
||
|
#define REG_R27 (27)
|
||
|
#define REG_R28 (28)
|
||
|
#define REG_R29 (29)
|
||
|
#define REG_R30 (30)
|
||
|
#define REG_R31 (31)
|
||
|
|
||
|
/* $a0 is $4 */
|
||
|
#define REG_A0 (4)
|
||
|
|
||
|
/* stack pointer is actually $29 */
|
||
|
#define REG_SP (29)
|
||
|
|
||
|
/* frame pointer is actually $30 */
|
||
|
#define REG_FP (30)
|
||
|
|
||
|
/* $s0 ($16) is used as link register */
|
||
|
#define REG_LNK (16)
|
||
|
|
||
|
/* $t9 ($25) is used as entry */
|
||
|
#define REG_ENTRY (25)
|
||
|
|
||
|
/* offset to mc_gregs in ucontext_t */
|
||
|
#define MCONTEXT_GREGS (40)
|
||
|
|
||
|
/* offset to PC in ucontext_t */
|
||
|
#define MCONTEXT_PC (32)
|
||
|
|
||
|
/* offset to uc_link in ucontext_t */
|
||
|
#define UCONTEXT_UC_LINK (4)
|
||
|
|
||
|
/* offset to uc_stack.ss_sp in ucontext_t */
|
||
|
#define UCONTEXT_STACK_PTR (8)
|
||
|
|
||
|
/* offset to uc_stack.ss_size in ucontext_t */
|
||
|
#define UCONTEXT_STACK_SIZE (12)
|
||
|
|
||
|
/* setup frame, from MIPS N32/N64 calling convention manual */
|
||
|
#define ALSZ 15
|
||
|
#define ALMASK ~15
|
||
|
#define FRAMESZ (((LOCALSZ * REG_SZ) + ALSZ) & ALMASK) // 16
|
||
|
#define GPOFF (FRAMESZ - (LOCALSZ * REG_SZ)) // [16 - 16]
|
||
|
|
||
|
#define SETUP_FRAME(__proc) \
|
||
|
.frame $sp, FRAMESZ, $ra; \
|
||
|
.mask 0x10000000, 0; \
|
||
|
.fmask 0x00000000, 0; \
|
||
|
.set noreorder; \
|
||
|
.cpload $25; \
|
||
|
.set reorder;
|
||
|
|
||
|
#define PUSH_FRAME(__proc) \
|
||
|
addiu $sp, -FRAMESZ; \
|
||
|
.cprestore GPOFF;
|
||
|
|
||
|
#define POP_FRAME(__proc) \
|
||
|
addiu $sp, FRAMESZ
|
||
|
|
||
|
#define ENT(__proc) .ent __proc, 0;
|
||
|
|
||
|
#include <common-defs.h>
|
||
|
|
||
|
#endif
|