1e4442059SWarner Losh /* 2e4442059SWarner Losh * FreeBSD amd64 register structures 3e4442059SWarner Losh * 4e4442059SWarner Losh * Copyright (c) 2015 Stacey Son 5e4442059SWarner Losh * All rights reserved. 6e4442059SWarner Losh * 7e4442059SWarner Losh * This program is free software; you can redistribute it and/or modify 8e4442059SWarner Losh * it under the terms of the GNU General Public License as published by 9e4442059SWarner Losh * the Free Software Foundation; either version 2 of the License, or 10e4442059SWarner Losh * (at your option) any later version. 11e4442059SWarner Losh * 12e4442059SWarner Losh * This program is distributed in the hope that it will be useful, 13e4442059SWarner Losh * but WITHOUT ANY WARRANTY; without even the implied warranty of 14e4442059SWarner Losh * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15e4442059SWarner Losh * GNU General Public License for more details. 16e4442059SWarner Losh * 17e4442059SWarner Losh * You should have received a copy of the GNU General Public License 18e4442059SWarner Losh * along with this program; if not, see <http://www.gnu.org/licenses/>. 19e4442059SWarner Losh */ 20e4442059SWarner Losh 21*9c092804SMarkus Armbruster #ifndef TARGET_ARCH_REG_H 22*9c092804SMarkus Armbruster #define TARGET_ARCH_REG_H 23e4442059SWarner Losh 24e4442059SWarner Losh /* See sys/amd64/include/reg.h */ 25e4442059SWarner Losh typedef struct target_reg { 26e4442059SWarner Losh uint64_t r_r15; 27e4442059SWarner Losh uint64_t r_r14; 28e4442059SWarner Losh uint64_t r_r13; 29e4442059SWarner Losh uint64_t r_r12; 30e4442059SWarner Losh uint64_t r_r11; 31e4442059SWarner Losh uint64_t r_r10; 32e4442059SWarner Losh uint64_t r_r9; 33e4442059SWarner Losh uint64_t r_r8; 34e4442059SWarner Losh uint64_t r_rdi; 35e4442059SWarner Losh uint64_t r_rsi; 36e4442059SWarner Losh uint64_t r_rbp; 37e4442059SWarner Losh uint64_t r_rbx; 38e4442059SWarner Losh uint64_t r_rdx; 39e4442059SWarner Losh uint64_t r_rcx; 40e4442059SWarner Losh uint64_t r_rax; 41e4442059SWarner Losh uint32_t r_trapno; 42e4442059SWarner Losh uint16_t r_fs; 43e4442059SWarner Losh uint16_t r_gs; 44e4442059SWarner Losh uint32_t r_err; 45e4442059SWarner Losh uint16_t r_es; 46e4442059SWarner Losh uint16_t r_ds; 47e4442059SWarner Losh uint64_t r_rip; 48e4442059SWarner Losh uint64_t r_cs; 49e4442059SWarner Losh uint64_t r_rflags; 50e4442059SWarner Losh uint64_t r_rsp; 51e4442059SWarner Losh uint64_t r_ss; 52e4442059SWarner Losh } target_reg_t; 53e4442059SWarner Losh 54e4442059SWarner Losh typedef struct target_fpreg { 55e4442059SWarner Losh uint64_t fpr_env[4]; 56e4442059SWarner Losh uint8_t fpr_acc[8][16]; 57e4442059SWarner Losh uint8_t fpr_xacc[16][16]; 58e4442059SWarner Losh uint64_t fpr_spare[12]; 59e4442059SWarner Losh } target_fpreg_t; 60e4442059SWarner Losh target_copy_regs(target_reg_t * regs,const CPUX86State * env)61e4442059SWarner Loshstatic inline void target_copy_regs(target_reg_t *regs, const CPUX86State *env) 62e4442059SWarner Losh { 63e4442059SWarner Losh 64e4442059SWarner Losh regs->r_r15 = env->regs[15]; 65e4442059SWarner Losh regs->r_r14 = env->regs[14]; 66e4442059SWarner Losh regs->r_r13 = env->regs[13]; 67e4442059SWarner Losh regs->r_r12 = env->regs[12]; 68e4442059SWarner Losh regs->r_r11 = env->regs[11]; 69e4442059SWarner Losh regs->r_r10 = env->regs[10]; 70e4442059SWarner Losh regs->r_r9 = env->regs[9]; 71e4442059SWarner Losh regs->r_r8 = env->regs[8]; 72e4442059SWarner Losh regs->r_rdi = env->regs[R_EDI]; 73e4442059SWarner Losh regs->r_rsi = env->regs[R_ESI]; 74e4442059SWarner Losh regs->r_rbp = env->regs[R_EBP]; 75e4442059SWarner Losh regs->r_rbx = env->regs[R_EBX]; 76e4442059SWarner Losh regs->r_rdx = env->regs[R_EDX]; 77e4442059SWarner Losh regs->r_rcx = env->regs[R_ECX]; 78e4442059SWarner Losh regs->r_rax = env->regs[R_EAX]; 79e4442059SWarner Losh /* regs->r_trapno = env->regs[R_TRAPNO]; XXX */ 80e4442059SWarner Losh regs->r_fs = env->segs[R_FS].selector & 0xffff; 81e4442059SWarner Losh regs->r_gs = env->segs[R_GS].selector & 0xffff; 82e4442059SWarner Losh regs->r_err = env->error_code; /* XXX ? */ 83e4442059SWarner Losh regs->r_es = env->segs[R_ES].selector & 0xffff; 84e4442059SWarner Losh regs->r_ds = env->segs[R_DS].selector & 0xffff; 85e4442059SWarner Losh regs->r_rip = env->eip; 86e4442059SWarner Losh regs->r_cs = env->segs[R_CS].selector & 0xffff; 87e4442059SWarner Losh regs->r_rflags = env->eflags; 88e4442059SWarner Losh regs->r_rsp = env->regs[R_ESP]; 89e4442059SWarner Losh regs->r_ss = env->segs[R_SS].selector & 0xffff; 90e4442059SWarner Losh } 91e4442059SWarner Losh 92*9c092804SMarkus Armbruster #endif /* TARGET_ARCH_REG_H */ 93