sequencer.h
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:4k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*
  2.  * Instruction formats for the sequencer program downloaded to
  3.  * Aic7xxx SCSI host adapters
  4.  *
  5.  * Copyright (c) 1997, 1998 Justin T. Gibbs.
  6.  * All rights reserved.
  7.  *
  8.  * Redistribution and use in source and binary forms, with or without
  9.  * modification, are permitted provided that the following conditions
  10.  * are met:
  11.  * 1. Redistributions of source code must retain the above copyright
  12.  *    notice, this list of conditions, and the following disclaimer,
  13.  *    without modification, immediately at the beginning of the file.
  14.  * 2. The name of the author may not be used to endorse or promote products
  15.  *    derived from this software without specific prior written permission.
  16.  *
  17.  * Where this Software is combined with software released under the terms of 
  18.  * the GNU General Public License ("GPL") and the terms of the GPL would require the 
  19.  * combined work to also be released under the terms of the GPL, the terms
  20.  * and conditions of this License will apply in addition to those of the
  21.  * GPL with the exception of any terms or conditions of this License that
  22.  * conflict with, or are expressly prohibited by, the GPL.
  23.  *
  24.  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
  25.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  26.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  27.  * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
  28.  * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  29.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  30.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  31.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  32.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  33.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  34.  * SUCH DAMAGE.
  35.  *
  36.  *      $Id: sequencer.h,v 1.3 1997/09/27 19:37:31 gibbs Exp $
  37.  */
  38. #ifdef __LITTLE_ENDIAN_BITFIELD
  39. struct ins_format1 {
  40. unsigned int
  41. immediate : 8,
  42. source : 9,
  43. destination : 9,
  44. ret : 1,
  45. opcode : 4,
  46. parity : 1;
  47. };
  48. struct ins_format2 {
  49. unsigned int
  50. shift_control : 8,
  51. source : 9,
  52. destination : 9,
  53. ret : 1,
  54. opcode : 4,
  55. parity : 1;
  56. };
  57. struct ins_format3 {
  58. unsigned int
  59. immediate : 8,
  60. source : 9,
  61. address : 10,
  62. opcode : 4,
  63. parity : 1;
  64. };
  65. #elif defined(__BIG_ENDIAN_BITFIELD)
  66. struct ins_format1 {
  67. unsigned int
  68. parity : 1,
  69. opcode : 4,
  70. ret : 1,
  71. destination : 9,
  72. source : 9,
  73. immediate : 8;
  74. };
  75. struct ins_format2 {
  76. unsigned int
  77. parity : 1,
  78. opcode : 4,
  79. ret : 1,
  80. destination : 9,
  81. source : 9,
  82. shift_control : 8;
  83. };
  84. struct ins_format3 {
  85. unsigned int
  86. parity : 1,
  87. opcode : 4,
  88. address : 10,
  89. source : 9,
  90. immediate : 8;
  91. };
  92. #endif
  93. union ins_formats {
  94. struct ins_format1 format1;
  95. struct ins_format2 format2;
  96. struct ins_format3 format3;
  97. unsigned char    bytes[4];
  98. unsigned int    integer;
  99. };
  100. struct instruction {
  101. union ins_formats format;
  102. unsigned int srcline;
  103. struct symbol *patch_label;
  104.   struct {
  105.     struct instruction *stqe_next;
  106.   } links;
  107. };
  108. #define AIC_OP_OR 0x0
  109. #define AIC_OP_AND 0x1
  110. #define AIC_OP_XOR 0x2
  111. #define AIC_OP_ADD 0x3
  112. #define AIC_OP_ADC 0x4
  113. #define AIC_OP_ROL 0x5
  114. #define AIC_OP_BMOV 0x6
  115. #define AIC_OP_JMP 0x8
  116. #define AIC_OP_JC 0x9
  117. #define AIC_OP_JNC 0xa
  118. #define AIC_OP_CALL 0xb
  119. #define AIC_OP_JNE 0xc
  120. #define AIC_OP_JNZ 0xd
  121. #define AIC_OP_JE 0xe
  122. #define AIC_OP_JZ 0xf
  123. /* Pseudo Ops */
  124. #define AIC_OP_SHL 0x10
  125. #define AIC_OP_SHR 0x20
  126. #define AIC_OP_ROR 0x30