VirtualBox

Changeset 12086

Show
Ignore:
Timestamp:
09/04/08 14:04:41 (3 months ago)
Author:
vboxsync
Message:

Functions to fetch dr0-3 & 6.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/include/iprt/asm.h

    r11173 r12086  
    17291729#endif 
    17301730 
     1731/** 
     1732 * Gets dr0. 
     1733 * 
     1734 * @returns dr0. 
     1735 */ 
     1736#if RT_INLINE_ASM_EXTERNAL 
     1737DECLASM(RTCCUINTREG) ASMGetDR0(void); 
     1738#else 
     1739DECLINLINE(RTCCUINTREG) ASMGetDR0(void) 
     1740{ 
     1741    RTCCUINTREG uDR0; 
     1742# if RT_INLINE_ASM_GNU_STYLE 
     1743#  ifdef RT_ARCH_AMD64 
     1744    __asm__ __volatile__("movq   %%dr0, %0\n\t" : "=r" (uDR0)); 
     1745#  else 
     1746    __asm__ __volatile__("movl   %%dr0, %0\n\t" : "=r" (uDR0)); 
     1747#  endif 
     1748# else 
     1749    __asm 
     1750    { 
     1751#  ifdef RT_ARCH_AMD64 
     1752        mov     rax, dr0 
     1753        mov     [uDR0], rax 
     1754#  else 
     1755        mov     eax, dr0 
     1756        mov     [uDR0], eax 
     1757#  endif 
     1758    } 
     1759# endif 
     1760    return uDR0; 
     1761} 
     1762#endif 
     1763 
     1764 
     1765/** 
     1766 * Gets dr1. 
     1767 * 
     1768 * @returns dr1. 
     1769 */ 
     1770#if RT_INLINE_ASM_EXTERNAL 
     1771DECLASM(RTCCUINTREG) ASMGetDR1(void); 
     1772#else 
     1773DECLINLINE(RTCCUINTREG) ASMGetDR1(void) 
     1774{ 
     1775    RTCCUINTREG uDR1; 
     1776# if RT_INLINE_ASM_GNU_STYLE 
     1777#  ifdef RT_ARCH_AMD64 
     1778    __asm__ __volatile__("movq   %%dr1, %0\n\t" : "=r" (uDR1)); 
     1779#  else 
     1780    __asm__ __volatile__("movl   %%dr1, %0\n\t" : "=r" (uDR1)); 
     1781#  endif 
     1782# else 
     1783    __asm 
     1784    { 
     1785#  ifdef RT_ARCH_AMD64 
     1786        mov     rax, dr1 
     1787        mov     [uDR1], rax 
     1788#  else 
     1789        mov     eax, dr1 
     1790        mov     [uDR1], eax 
     1791#  endif 
     1792    } 
     1793# endif 
     1794    return uDR1; 
     1795} 
     1796#endif 
     1797 
     1798/** 
     1799 * Gets dr2. 
     1800 * 
     1801 * @returns dr2. 
     1802 */ 
     1803#if RT_INLINE_ASM_EXTERNAL 
     1804DECLASM(RTCCUINTREG) ASMGetDR2(void); 
     1805#else 
     1806DECLINLINE(RTCCUINTREG) ASMGetDR2(void) 
     1807{ 
     1808    RTCCUINTREG uDR2; 
     1809# if RT_INLINE_ASM_GNU_STYLE 
     1810#  ifdef RT_ARCH_AMD64 
     1811    __asm__ __volatile__("movq   %%dr2, %0\n\t" : "=r" (uDR2)); 
     1812#  else 
     1813    __asm__ __volatile__("movl   %%dr2, %0\n\t" : "=r" (uDR2)); 
     1814#  endif 
     1815# else 
     1816    __asm 
     1817    { 
     1818#  ifdef RT_ARCH_AMD64 
     1819        mov     rax, dr2 
     1820        mov     [uDR2], rax 
     1821#  else 
     1822        mov     eax, dr2 
     1823        mov     [uDR2], eax 
     1824#  endif 
     1825    } 
     1826# endif 
     1827    return uDR2; 
     1828} 
     1829#endif 
     1830 
     1831/** 
     1832 * Gets dr3. 
     1833 * 
     1834 * @returns dr3. 
     1835 */ 
     1836#if RT_INLINE_ASM_EXTERNAL 
     1837DECLASM(RTCCUINTREG) ASMGetDR3(void); 
     1838#else 
     1839DECLINLINE(RTCCUINTREG) ASMGetDR3(void) 
     1840{ 
     1841    RTCCUINTREG uDR3; 
     1842# if RT_INLINE_ASM_GNU_STYLE 
     1843#  ifdef RT_ARCH_AMD64 
     1844    __asm__ __volatile__("movq   %%dr3, %0\n\t" : "=r" (uDR3)); 
     1845#  else 
     1846    __asm__ __volatile__("movl   %%dr3, %0\n\t" : "=r" (uDR3)); 
     1847#  endif 
     1848# else 
     1849    __asm 
     1850    { 
     1851#  ifdef RT_ARCH_AMD64 
     1852        mov     rax, dr3 
     1853        mov     [uDR3], rax 
     1854#  else 
     1855        mov     eax, dr3 
     1856        mov     [uDR3], eax 
     1857#  endif 
     1858    } 
     1859# endif 
     1860    return uDR3; 
     1861} 
     1862#endif 
    17311863 
    17321864/** 

© 2008 Sun Microsystems, Inc.
ContactPrivacy policy