| /* |
| * 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, unsigned char flags ); |
| extern WORD SELECTOR_ReallocBlock( WORD sel, const void *base, DWORD size ); |
| extern void SELECTOR_FreeBlock( WORD sel ); |
| |
| #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__("movw %w0,%%" #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 */ |