home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 15 / 15.iso / s / s053 / 8.ddi / usr / include / sys / inline.h < prev    next >
Encoding:
C/C++ Source or Header  |  1990-12-08  |  6.0 KB  |  442 lines

  1. /*    Copyright (c) 1990 UNIX System Laboratories, Inc.    */
  2. /*    Copyright (c) 1984, 1986, 1987, 1988, 1989, 1990 AT&T    */
  3. /*      All Rights Reserved      */
  4.  
  5. /*    THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF         */
  6. /*    UNIX System Laboratories, Inc.                         */
  7. /*    The copyright notice above does not evidence any       */
  8. /*    actual or intended publication of such source code.    */
  9.  
  10. #ifndef _SYS_INLINE_H
  11. #define _SYS_INLINE_H
  12.  
  13. #ident    "@(#)/usr/include/sys/inline.h.sl 1.1 4.0 12/08/90 10469 AT&T-USL"
  14.  
  15. #if !defined(lint)
  16.  
  17. asm    void flushtlb()    
  18. {
  19.     movl    %cr3, %eax
  20.     movl    %eax, %cr3
  21. }
  22.  
  23. asm    int _cr0()
  24. {
  25.     movl    %cr0, %eax
  26. }
  27.  
  28. asm    int _cr2()
  29. {
  30.     movl    %cr2, %eax
  31. }
  32.  
  33. asm    int _cr3()
  34. {
  35.     movl    %cr3, %eax
  36.     andl    $0x7FFFFFFF, %eax
  37. }
  38.  
  39. asm    void _wdr0(x)
  40. {
  41. %reg    x;
  42.     movl    x, %db0
  43. %ureg    x;
  44.     movl    x, %db0
  45. %con    x;
  46.     movl    x,%eax    
  47.     movl    %eax, %db0
  48. %mem    x;
  49.     movl    x,%eax
  50.     movl    %eax, %db0
  51. }
  52.  
  53. asm    void _wdr1(x)
  54. {
  55. %reg    x;
  56.     movl    x, %db1
  57. %ureg    x;
  58.     movl    x, %db1
  59. %con    x;
  60.     movl    x,%eax
  61.     movl    %eax, %db1
  62. %mem    x;
  63.     movl    x,%eax
  64.     movl    %eax, %db1
  65. }
  66.  
  67. asm    void _wdr2(x)
  68. {
  69. %reg    x;
  70.     movl    x, %db2
  71. %ureg    x;
  72.     movl    x, %db2
  73. %con    x;
  74.     movl    x,%eax
  75.     movl    %eax, %db2
  76. %mem    x;
  77.     movl    x,%eax
  78.     movl    %eax, %db2
  79. }
  80.  
  81. asm    void _wdr3(x)
  82. {
  83. %reg    x;
  84.     movl    x, %db3
  85. %ureg    x;
  86.     movl    x, %db3
  87. %con    x;
  88.     movl    x,%eax
  89.     movl    %eax, %db3
  90. %mem    x;
  91.     movl    x,%eax
  92.     movl    %eax, %db3
  93. }
  94.  
  95. asm    void _wdr6(x)
  96. {
  97. %reg    x;
  98.     movl    x, %db6
  99. %ureg    x;
  100.     movl    x, %db6
  101. %con    x;
  102.     movl    x,%eax
  103.     movl    %eax, %db6
  104. %mem    x;
  105.     movl    x,%eax
  106.     movl    %eax, %db6
  107. }
  108.  
  109. asm    void _wdr7(x)
  110. {
  111. %reg    x;
  112.     movl    x, %db7
  113. %ureg    x;
  114.     movl    x, %db7
  115. %con    x;
  116.     movl    x,%eax
  117.     movl    %eax, %db7
  118. %mem    x;
  119.     movl    x,%eax
  120.     movl    %eax, %db7
  121. }
  122.  
  123. asm    int _dr0()
  124. {
  125.     movl    %dr0, %eax
  126. }
  127.  
  128. asm    int _dr1()
  129. {
  130.     movl    %dr1, %eax
  131. }
  132.  
  133. asm    int _dr2()
  134. {
  135.     movl    %dr2, %eax
  136. }
  137.  
  138. asm    int _dr3()
  139. {
  140.     movl    %dr3, %eax
  141. }
  142.  
  143. asm    int _dr6()
  144. {
  145.     movl    %dr6, %eax
  146. }
  147.  
  148. asm    int _dr7()
  149. {
  150.     movl    %dr7, %eax
  151. }
  152.  
  153. asm    void loadtr(x)
  154. {
  155. %reg    x;
  156.     movl    x,%eax
  157.     ltr    %ax
  158. %ureg    x;
  159.     movl    x,%eax
  160.     ltr    %ax
  161. %con    x;
  162.     movl    x,%eax
  163.     ltr    %ax
  164. %mem    x;
  165.     movl    x,%eax
  166.     ltr    %ax
  167. }
  168.  
  169. asm     void outl(port,val)
  170. {
  171. %reg    port,val;
  172.     movl    port, %edx
  173.     movl    val, %eax
  174.     outl    (%dx)
  175. %reg    port; mem    val;
  176.     movl    port, %edx
  177.     movl    val, %eax
  178.     outl    (%dx)
  179. %mem    port; reg    val;
  180.     movw    port, %dx
  181.     movl    val, %eax
  182.     outl    (%dx)
  183. %mem    port,val;
  184.     movw    port, %dx
  185.     movl    val, %eax
  186.     outl    (%dx)
  187. }
  188.  
  189. asm    void outw(port,val)
  190. {
  191. %reg    port,val;
  192.     movl    port, %edx
  193.     movl    val, %eax
  194.     data16
  195.     outl    (%dx)
  196. %reg    port; mem    val;
  197.     movl    port, %edx
  198.     movw    val, %ax
  199.     data16
  200.     outl    (%dx)
  201. %mem    port; reg    val;
  202.     movw    port, %dx
  203.     movl    val, %eax
  204.     data16
  205.     outl    (%dx)
  206. %mem    port,val;
  207.     movw    port, %dx
  208.     movw    val, %ax
  209.     data16
  210.     outl    (%dx)
  211. }
  212.  
  213. asm    void outb(port,val)
  214. {
  215. %reg    port,val;
  216.     movl    port, %edx
  217.     movl    val, %eax
  218.     outb    (%dx)
  219. %reg    port; mem    val;
  220.     movl    port, %edx
  221.     movb    val, %al
  222.     outb    (%dx)
  223. %mem    port; reg    val;
  224.     movw    port, %dx
  225.     movl    val, %eax
  226.     outb    (%dx)
  227. %mem    port,val;
  228.     movw    port, %dx
  229.     movb    val, %al
  230.     outb    (%dx)
  231. }
  232.  
  233. asm     int inl(port)
  234. {
  235. %reg    port;
  236.     movl    port, %edx
  237.     inl    (%dx)
  238. %mem    port;
  239.     movw    port, %dx
  240.     inl    (%dx)
  241. }
  242.  
  243. asm    int inw(port)
  244. {
  245. %reg    port;
  246.     subl    %eax, %eax
  247.     movl    port, %edx
  248.     data16
  249.     inl    (%dx)
  250. %mem    port;
  251.     subl    %eax, %eax
  252.     movw    port, %dx
  253.     data16
  254.     inl    (%dx)
  255. }
  256.  
  257. asm    int inb(port)
  258. {
  259. %reg    port;
  260.     subl    %eax, %eax
  261.     movl    port, %edx
  262.     inb    (%dx)
  263. %mem    port;
  264.     subl    %eax, %eax
  265.     movw    port, %dx
  266.     inb    (%dx)
  267. }
  268.  
  269. asm     void intr_disable()
  270. {
  271.     pushfl
  272.     cli
  273. }
  274.  
  275. asm     void intr_restore()
  276. {
  277.     popfl
  278. }
  279.  
  280. asm     void intr_enable()
  281. {
  282.     popfl
  283.     sti
  284. }
  285.  
  286. asm int struct_zero(addr, len)
  287. {
  288. %mem    addr; con    len;
  289.     pushl    %edi
  290.     pushl    addr
  291.     movl    len, %ecx
  292.     popl    %edi
  293.     movl    $0, %eax
  294.     rep
  295.     sstob
  296.     popl    %edi
  297. %mem    addr; reg    len;
  298.     pushl    %edi
  299.     pushl    addr
  300.     movl    len, %ecx
  301.     popl    %edi
  302.     movl    $0, %eax
  303.     rep
  304.     sstob
  305.     popl    %edi
  306. %mem    addr, len;
  307.     pushl    %edi
  308.     pushl    addr
  309.     movl    len, %ecx
  310.     popl    %edi
  311.     movl    $0, %eax
  312.     rep
  313.     sstob
  314.     popl    %edi
  315. }
  316.  
  317. asm void copy_bytes(from, to, count)
  318. {
  319. %mem    from,to; con    count;
  320.     pushl    %esi
  321.     pushl    %edi
  322.     pushl    from
  323.     pushl    to
  324.     movl    count, %ecx
  325.     popl    %edi
  326.     popl    %esi
  327.     rep
  328.     smovb
  329.     popl    %edi
  330.     popl    %esi
  331. %mem    from,to; reg    count;
  332.     pushl    %esi
  333.     pushl    %edi
  334.     pushl    from
  335.     pushl    to
  336.     movl    count, %ecx
  337.     popl    %edi
  338.     popl    %esi
  339.     rep
  340.     smovb
  341.     popl    %edi
  342.     popl    %esi
  343. %mem    from,to,count;
  344.     pushl    %esi
  345.     pushl    %edi
  346.     pushl    from
  347.     pushl    to
  348.     movl    count, %ecx
  349.     popl    %edi
  350.     popl    %esi
  351.     rep
  352.     smovb
  353.     popl    %edi
  354.     popl    %esi
  355. }
  356. #else    /* !defined(lint) */
  357. /*
  358.  *    Very fast byte-at-a-time copy, as opposed to bcopy, which is
  359.  *    longword-at-a-time. For controler boards which can't handle 32 bit accesses.
  360. */
  361. void copy_bytes(from, to, count)
  362. register caddr_t from, to;
  363. register int count;
  364. {    *to = *from;
  365.     while (--count)
  366.         *(++to) = *(++from);
  367. }
  368.  
  369. #if defined(__STDC__)
  370.  
  371. extern    void flushtlb(void);
  372. extern    int _cr0(void);
  373. extern    int _cr2(void);
  374. extern    int _cr3(void);
  375. extern    void _wdr0(ulong);
  376. extern    void _wdr1(ulong);
  377. extern    void _wdr2(ulong);
  378. extern    void _wdr3(ulong);
  379. extern    void _wdr6(ulong);
  380. extern    void _wdr7(ulong);
  381. extern    int _dr0(void);
  382. extern    int _dr1(void);
  383. extern    int _dr2(void);
  384. extern    int _dr3(void);
  385. extern    int _dr6(void);
  386. extern    int _dr7(void);
  387. extern    void loadtr(ulong);
  388. extern  void outl(unsigned, ulong);
  389. extern    void outw(unsigned,ulong);
  390. extern    void outb(unsigned,ulong);
  391. extern  int inl(unsigned);
  392. extern    int inw(unsigned);
  393. extern    int inb(unsigned);
  394. extern  void intr_disable();
  395. extern  void intr_restore();
  396. extern  void intr_enable();
  397. extern  int struct_zero(caddr_t, int);
  398.  
  399. #else    /* __STDC__ */
  400.  
  401. extern    void flushtlb();    
  402. extern    int _cr0();
  403. extern    int _cr2();
  404. extern    int _cr3();
  405. extern    void _wdr0();
  406. extern    void _wdr1();
  407. extern    void _wdr2();
  408. extern    void _wdr3();
  409. extern    void _wdr6();
  410. extern    void _wdr7();
  411. extern    int _dr0();
  412. extern    int _dr1();
  413. extern    int _dr2();
  414. extern    int _dr3();
  415. extern    int _dr6();
  416. extern    int _dr7();
  417. extern    void loadtr();
  418. extern  void outl();
  419. extern    void outw();
  420. extern    void outb();
  421. extern  int inl();
  422. extern    int inw();
  423. extern    int inb();
  424. extern  void intr_disable();
  425. extern  void intr_restore();
  426. extern  void intr_enable();
  427. extern  int struct_zero();
  428.  
  429. #endif    /* __STDC__ */
  430.  
  431. #endif    /* !defined(lint) */
  432.  
  433. #endif    /* _SYS_INLINE_H */
  434.  
  435. #ifdef    KPERF  /* This is for kernel performance tool */
  436. asm    int
  437. get_spl()
  438. {
  439.     movl    ipl, %eax
  440. }
  441. #endif    /* KPERF */
  442.