1098ca2bdSWarner Losh /*- 2aa6dfd9dSJustin T. Gibbs * Instruction formats for the sequencer program downloaded to 3aa6dfd9dSJustin T. Gibbs * Aic7xxx SCSI host adapters 4aa6dfd9dSJustin T. Gibbs * 5*718cf2ccSPedro F. Giffuni * SPDX-License-Identifier: BSD-3-Clause 6*718cf2ccSPedro F. Giffuni * 7aa6dfd9dSJustin T. Gibbs * Copyright (c) 1997, 1998, 2000 Justin T. Gibbs. 8aa6dfd9dSJustin T. Gibbs * All rights reserved. 9aa6dfd9dSJustin T. Gibbs * 10aa6dfd9dSJustin T. Gibbs * Redistribution and use in source and binary forms, with or without 11aa6dfd9dSJustin T. Gibbs * modification, are permitted provided that the following conditions 12aa6dfd9dSJustin T. Gibbs * are met: 13aa6dfd9dSJustin T. Gibbs * 1. Redistributions of source code must retain the above copyright 14aa6dfd9dSJustin T. Gibbs * notice, this list of conditions, and the following disclaimer, 15aa6dfd9dSJustin T. Gibbs * without modification. 167ce72dbaSJustin T. Gibbs * 2. Redistributions in binary form must reproduce at minimum a disclaimer 177ce72dbaSJustin T. Gibbs * substantially similar to the "NO WARRANTY" disclaimer below 187ce72dbaSJustin T. Gibbs * ("Disclaimer") and any redistribution must be conditioned upon 197ce72dbaSJustin T. Gibbs * including a substantially similar Disclaimer requirement for further 207ce72dbaSJustin T. Gibbs * binary redistribution. 217ce72dbaSJustin T. Gibbs * 3. Neither the names of the above-listed copyright holders nor the names 227ce72dbaSJustin T. Gibbs * of any contributors may be used to endorse or promote products derived 237ce72dbaSJustin T. Gibbs * from this software without specific prior written permission. 24aa6dfd9dSJustin T. Gibbs * 25aa6dfd9dSJustin T. Gibbs * Alternatively, this software may be distributed under the terms of the 267ce72dbaSJustin T. Gibbs * GNU General Public License ("GPL") version 2 as published by the Free 277ce72dbaSJustin T. Gibbs * Software Foundation. 28aa6dfd9dSJustin T. Gibbs * 297ce72dbaSJustin T. Gibbs * NO WARRANTY 307ce72dbaSJustin T. Gibbs * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 317ce72dbaSJustin T. Gibbs * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 327ce72dbaSJustin T. Gibbs * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR 337ce72dbaSJustin T. Gibbs * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 347ce72dbaSJustin T. Gibbs * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 35aa6dfd9dSJustin T. Gibbs * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 36aa6dfd9dSJustin T. Gibbs * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 377ce72dbaSJustin T. Gibbs * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 387ce72dbaSJustin T. Gibbs * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 397ce72dbaSJustin T. Gibbs * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 407ce72dbaSJustin T. Gibbs * POSSIBILITY OF SUCH DAMAGES. 41aa6dfd9dSJustin T. Gibbs * 427fc23fe6SScott Long * $Id: //depot/aic7xxx/aic7xxx/aicasm/aicasm_insformat.h#11 $ 43aa6dfd9dSJustin T. Gibbs */ 44aa6dfd9dSJustin T. Gibbs 45aa6dfd9dSJustin T. Gibbs struct ins_format1 { 46aa6dfd9dSJustin T. Gibbs #if BYTE_ORDER == LITTLE_ENDIAN 47aa6dfd9dSJustin T. Gibbs uint32_t immediate : 8, 48aa6dfd9dSJustin T. Gibbs source : 9, 49aa6dfd9dSJustin T. Gibbs destination : 9, 50aa6dfd9dSJustin T. Gibbs ret : 1, 51aa6dfd9dSJustin T. Gibbs opcode : 4, 52aa6dfd9dSJustin T. Gibbs parity : 1; 53aa6dfd9dSJustin T. Gibbs #else 54aa6dfd9dSJustin T. Gibbs uint32_t parity : 1, 55aa6dfd9dSJustin T. Gibbs opcode : 4, 56aa6dfd9dSJustin T. Gibbs ret : 1, 57aa6dfd9dSJustin T. Gibbs destination : 9, 58aa6dfd9dSJustin T. Gibbs source : 9, 59aa6dfd9dSJustin T. Gibbs immediate : 8; 60aa6dfd9dSJustin T. Gibbs #endif 61aa6dfd9dSJustin T. Gibbs }; 62aa6dfd9dSJustin T. Gibbs 63aa6dfd9dSJustin T. Gibbs struct ins_format2 { 64aa6dfd9dSJustin T. Gibbs #if BYTE_ORDER == LITTLE_ENDIAN 65aa6dfd9dSJustin T. Gibbs uint32_t shift_control : 8, 66aa6dfd9dSJustin T. Gibbs source : 9, 67aa6dfd9dSJustin T. Gibbs destination : 9, 68aa6dfd9dSJustin T. Gibbs ret : 1, 69aa6dfd9dSJustin T. Gibbs opcode : 4, 70aa6dfd9dSJustin T. Gibbs parity : 1; 71aa6dfd9dSJustin T. Gibbs #else 72aa6dfd9dSJustin T. Gibbs uint32_t parity : 1, 73aa6dfd9dSJustin T. Gibbs opcode : 4, 74aa6dfd9dSJustin T. Gibbs ret : 1, 75aa6dfd9dSJustin T. Gibbs destination : 9, 76aa6dfd9dSJustin T. Gibbs source : 9, 77aa6dfd9dSJustin T. Gibbs shift_control : 8; 78aa6dfd9dSJustin T. Gibbs #endif 79aa6dfd9dSJustin T. Gibbs }; 80aa6dfd9dSJustin T. Gibbs 81aa6dfd9dSJustin T. Gibbs struct ins_format3 { 82aa6dfd9dSJustin T. Gibbs #if BYTE_ORDER == LITTLE_ENDIAN 83aa6dfd9dSJustin T. Gibbs uint32_t immediate : 8, 84aa6dfd9dSJustin T. Gibbs source : 9, 85aa6dfd9dSJustin T. Gibbs address : 10, 86aa6dfd9dSJustin T. Gibbs opcode : 4, 87aa6dfd9dSJustin T. Gibbs parity : 1; 88aa6dfd9dSJustin T. Gibbs #else 89aa6dfd9dSJustin T. Gibbs uint32_t parity : 1, 90aa6dfd9dSJustin T. Gibbs opcode : 4, 91aa6dfd9dSJustin T. Gibbs address : 10, 92aa6dfd9dSJustin T. Gibbs source : 9, 93aa6dfd9dSJustin T. Gibbs immediate : 8; 94aa6dfd9dSJustin T. Gibbs #endif 95aa6dfd9dSJustin T. Gibbs }; 96aa6dfd9dSJustin T. Gibbs 97aa6dfd9dSJustin T. Gibbs union ins_formats { 98aa6dfd9dSJustin T. Gibbs struct ins_format1 format1; 99aa6dfd9dSJustin T. Gibbs struct ins_format2 format2; 100aa6dfd9dSJustin T. Gibbs struct ins_format3 format3; 101aa6dfd9dSJustin T. Gibbs uint8_t bytes[4]; 102aa6dfd9dSJustin T. Gibbs uint32_t integer; 103aa6dfd9dSJustin T. Gibbs }; 104aa6dfd9dSJustin T. Gibbs struct instruction { 105aa6dfd9dSJustin T. Gibbs union ins_formats format; 106aa6dfd9dSJustin T. Gibbs u_int srcline; 107aa6dfd9dSJustin T. Gibbs struct symbol *patch_label; 108aa6dfd9dSJustin T. Gibbs STAILQ_ENTRY(instruction) links; 109aa6dfd9dSJustin T. Gibbs }; 110aa6dfd9dSJustin T. Gibbs 111aa6dfd9dSJustin T. Gibbs #define AIC_OP_OR 0x0 112aa6dfd9dSJustin T. Gibbs #define AIC_OP_AND 0x1 113aa6dfd9dSJustin T. Gibbs #define AIC_OP_XOR 0x2 114aa6dfd9dSJustin T. Gibbs #define AIC_OP_ADD 0x3 115aa6dfd9dSJustin T. Gibbs #define AIC_OP_ADC 0x4 116aa6dfd9dSJustin T. Gibbs #define AIC_OP_ROL 0x5 117aa6dfd9dSJustin T. Gibbs #define AIC_OP_BMOV 0x6 118aa6dfd9dSJustin T. Gibbs 119aa6dfd9dSJustin T. Gibbs #define AIC_OP_JMP 0x8 120aa6dfd9dSJustin T. Gibbs #define AIC_OP_JC 0x9 121aa6dfd9dSJustin T. Gibbs #define AIC_OP_JNC 0xa 122aa6dfd9dSJustin T. Gibbs #define AIC_OP_CALL 0xb 123aa6dfd9dSJustin T. Gibbs #define AIC_OP_JNE 0xc 124aa6dfd9dSJustin T. Gibbs #define AIC_OP_JNZ 0xd 125aa6dfd9dSJustin T. Gibbs #define AIC_OP_JE 0xe 126aa6dfd9dSJustin T. Gibbs #define AIC_OP_JZ 0xf 127aa6dfd9dSJustin T. Gibbs 128aa6dfd9dSJustin T. Gibbs /* Pseudo Ops */ 129aa6dfd9dSJustin T. Gibbs #define AIC_OP_SHL 0x10 130aa6dfd9dSJustin T. Gibbs #define AIC_OP_SHR 0x20 131aa6dfd9dSJustin T. Gibbs #define AIC_OP_ROR 0x30 132