VirtualBox

Changeset 12086 in vbox for trunk/include/iprt


Ignore:
Timestamp:
Sep 4, 2008 12:04:41 PM (17 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
36024
Message:

Functions to fetch dr0-3 & 6.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • 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/**
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette