/* * Selector definitions * * Copyright 1995 Alexandre Julliard */ #ifndef __WINE_SELECTORS_H #define __WINE_SELECTORS_H #include "windef.h" #include "ldt.h" extern WORD SELECTOR_AllocBlock( const void *base, DWORD size, enum seg_type type, BOOL is32bit, BOOL readonly ); extern WORD SELECTOR_ReallocBlock( WORD sel, const void *base, DWORD size ); extern void SELECTOR_MoveBlock( WORD sel, const void *new_base ); extern void SELECTOR_FreeBlock( WORD sel, WORD count ); #ifdef __i386__ # ifdef __GNUC__ # define __DEFINE_GET_SEG(seg) \ extern inline unsigned short __get_##seg(void) \ { unsigned short res; __asm__("movw %%" #seg ",%w0" : "=r"(res)); return res; } # define __DEFINE_SET_SEG(seg) \ extern inline void __set_##seg(int val) { __asm__("movl %0,%%" #seg : : "r" (val)); } # else /* __GNUC__ */ # define __DEFINE_GET_SEG(seg) extern unsigned short __get_##seg(void); # define __DEFINE_SET_SEG(seg) extern void __set_##seg(unsigned int); # endif /* __GNUC__ */ #else /* __i386__ */ # define __DEFINE_GET_SEG(seg) static inline unsigned short __get_##seg(void) { return 0; } # define __DEFINE_SET_SEG(seg) /* nothing */ #endif /* __i386__ */ __DEFINE_GET_SEG(cs) __DEFINE_GET_SEG(ds) __DEFINE_GET_SEG(es) __DEFINE_GET_SEG(fs) __DEFINE_GET_SEG(gs) __DEFINE_GET_SEG(ss) __DEFINE_SET_SEG(fs) __DEFINE_SET_SEG(gs) #endif /* __WINE_SELECTORS_H */