unixALib.s
上传用户:nvosite88
上传日期:2007-01-17
资源大小:4983k
文件大小:3k
源码类别:

VxWorks

开发平台:

C/C++

  1. /* unixALib.s - assembly language routines for tcpip */
  2. /* Copyright 1984-2001 Wind River Systems, Inc. */
  3. .data
  4. .globl copyright_wind_river
  5. /*
  6.  * This file has been developed or significantly modified by the
  7.  * MIPS Center of Excellence Dedicated Engineering Staff.
  8.  * This notice is as per the MIPS Center of Excellence Master Partner
  9.  * Agreement, do not remove this notice without checking first with
  10.  * WR/Platforms MIPS Center of Excellence engineering management.
  11.  */
  12. /*
  13. modification history
  14. --------------------
  15. 02g,02aug01,mem  Diab integration
  16. 02f,16jul01,ros  add CofE comment
  17. 02e,19oct93,cd   forced cksum() to return 0, MIPS uses portable in_cksum().
  18. 02d,26may92,rrr  the tree shuffle
  19. 02c,04oct91,rrr  passed through the ansification filter
  20.   -changed ASMLANGUAGE to _ASMLANGUAGE
  21.   -changed copyright notice
  22. 02b,08may90,rtp  modified remque; fixed addu error in cksum; added
  23.  documentation.
  24. 02a,01may90,rtp  converted to MIPS assembly language and added comments
  25.  to cksum.
  26. 01j,22jun88,dnw  removed unnecessary intLock()s in insque() and remque().
  27.  removed setjmp()/longjmp() to cALib.s.
  28. 01i,13feb87,dnw  changed setjmp and longjmp register lists to be processable
  29.    by Motorola assemblers.
  30.  added .data before copyright.
  31. 01h,13nov87,rdc  added setjmp and longjmp (temporary).
  32. 01g,24oct87,dnw  removed erroneous ';' at end of copyright.
  33. 01f,03apr87,ecs  added copyright.
  34. 01e,02apr87,jlf  removed .globl of tas, left behind after 01d.
  35. 01d,27mar86,rdc  moved tas() to vxALib.s for non-network systems.
  36. 01c,22dec86,dnw  more changes for assembler compatibility:
  37.    changed jeq/jne/jra to beq/bne/bra.
  38.    added .globl declarations of intLock(), intUnlock().
  39. 01b,30nov86,dnw  changed to be acceptable to various assemblers:
  40.    changed ".align 1" to ".even".
  41.    changed "mov" to "move"
  42.    replaced <n>[fb] labels with real labels.
  43. 01a,06aug86,rdc  written
  44. */
  45. #define _ASMLANGUAGE
  46. #include "vxWorks.h"
  47. #include "asm.h"
  48. #define  CARRY_MASK 0x10000 /* for carry on half-word operations */
  49. /* internals */
  50. .globl cksum
  51. .globl  insque
  52. .globl  remque
  53. .text
  54. .set reorder
  55. /**************************************************************************
  56. *
  57. * cksum - compute checksum
  58. *
  59. * Optimized checksum routine not implemented for MIPS.
  60. *
  61. * RETURNS: zero.
  62. *
  63. * int cksum (sum, string, len, sumlen);
  64. *
  65. * INTERNAL
  66. * The portable checksum routine, in unixLib.c, is used for MIPS.
  67. */
  68. .ent cksum
  69. cksum:
  70. move v0,zero
  71. j ra
  72. .end cksum
  73. /****************************************************************************
  74. *
  75. * insque - insert a node into a linked list
  76. *
  77. *   int insque ( q, p )
  78. * caddr_t q;
  79. * caddr_t p;
  80. *
  81. */
  82. .ent insque
  83. insque:
  84. move t0, a0 /* new  */
  85. move t1, a1 /* pred */
  86. lw t2, (t1) /* succ */
  87. sw t2, (t0)
  88. sw t1, 4(t0)
  89. sw t0, (t1)
  90. move t1, t2
  91. sw t0, 4(t1)
  92. j ra
  93. .end insque
  94. /****************************************************************************
  95. *
  96. * remque - delete a node from a (doubly) linked list
  97. *
  98. * int remque ( node )
  99. * caddr_t node;
  100. */
  101. .ent  remque
  102. remque:
  103. move t0,a0 /* current = node to be deleted  */
  104. lw t1,0(t0) /* next = curent->next           */
  105. lw t2,4(t0) /* previous = current->prev      */
  106. sw t2,4(t1) /* next->prev = previous         */
  107. lw v0,0(t0) /* return value = current node   */
  108. sw t1,0(t2) /* prev->next = next             */
  109. j  ra /* return                        */
  110. .end  remque