162306a36Sopenharmony_ci/*
262306a36Sopenharmony_ci * Copyright 2003 PathScale, Inc.
362306a36Sopenharmony_ci *
462306a36Sopenharmony_ci * Licensed under the GPL
562306a36Sopenharmony_ci */
662306a36Sopenharmony_ci
762306a36Sopenharmony_ci#ifndef __UM_PROCESSOR_X86_64_H
862306a36Sopenharmony_ci#define __UM_PROCESSOR_X86_64_H
962306a36Sopenharmony_ci
1062306a36Sopenharmony_cistruct arch_thread {
1162306a36Sopenharmony_ci        unsigned long debugregs[8];
1262306a36Sopenharmony_ci        int debugregs_seq;
1362306a36Sopenharmony_ci        unsigned long fs;
1462306a36Sopenharmony_ci        struct faultinfo faultinfo;
1562306a36Sopenharmony_ci};
1662306a36Sopenharmony_ci
1762306a36Sopenharmony_ci#define INIT_ARCH_THREAD { .debugregs  		= { [ 0 ... 7 ] = 0 }, \
1862306a36Sopenharmony_ci			   .debugregs_seq	= 0, \
1962306a36Sopenharmony_ci			   .fs			= 0, \
2062306a36Sopenharmony_ci			   .faultinfo		= { 0, 0, 0 } }
2162306a36Sopenharmony_ci
2262306a36Sopenharmony_ci#define STACKSLOTS_PER_LINE 4
2362306a36Sopenharmony_ci
2462306a36Sopenharmony_cistatic inline void arch_flush_thread(struct arch_thread *thread)
2562306a36Sopenharmony_ci{
2662306a36Sopenharmony_ci}
2762306a36Sopenharmony_ci
2862306a36Sopenharmony_cistatic inline void arch_copy_thread(struct arch_thread *from,
2962306a36Sopenharmony_ci                                    struct arch_thread *to)
3062306a36Sopenharmony_ci{
3162306a36Sopenharmony_ci	to->fs = from->fs;
3262306a36Sopenharmony_ci}
3362306a36Sopenharmony_ci
3462306a36Sopenharmony_ci#define current_sp() ({ void *sp; __asm__("movq %%rsp, %0" : "=r" (sp) : ); sp; })
3562306a36Sopenharmony_ci#define current_bp() ({ unsigned long bp; __asm__("movq %%rbp, %0" : "=r" (bp) : ); bp; })
3662306a36Sopenharmony_ci
3762306a36Sopenharmony_ci#endif
38