[SCSI] aic7xxx: Update aicasm
This patchset updates aicasm code with the latest fixes from adaptec. Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
This commit is contained in:
Родитель
663e1aa12f
Коммит
2628ed2b1a
|
@ -37,7 +37,7 @@
|
||||||
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
* POSSIBILITY OF SUCH DAMAGES.
|
* POSSIBILITY OF SUCH DAMAGES.
|
||||||
*
|
*
|
||||||
* $Id: //depot/aic7xxx/aic7xxx/aicasm/aicasm.c#22 $
|
* $Id: //depot/aic7xxx/aic7xxx/aicasm/aicasm.c#23 $
|
||||||
*
|
*
|
||||||
* $FreeBSD$
|
* $FreeBSD$
|
||||||
*/
|
*/
|
||||||
|
@ -609,10 +609,10 @@ output_listing(char *ifilename)
|
||||||
|
|
||||||
while (line < cur_instr->srcline) {
|
while (line < cur_instr->srcline) {
|
||||||
fgets(buf, sizeof(buf), ifile);
|
fgets(buf, sizeof(buf), ifile);
|
||||||
fprintf(listfile, "\t\t%s", buf);
|
fprintf(listfile, " \t%s", buf);
|
||||||
line++;
|
line++;
|
||||||
}
|
}
|
||||||
fprintf(listfile, "%03x %02x%02x%02x%02x", instrptr,
|
fprintf(listfile, "%04x %02x%02x%02x%02x", instrptr,
|
||||||
#ifdef __LITTLE_ENDIAN
|
#ifdef __LITTLE_ENDIAN
|
||||||
cur_instr->format.bytes[0],
|
cur_instr->format.bytes[0],
|
||||||
cur_instr->format.bytes[1],
|
cur_instr->format.bytes[1],
|
||||||
|
@ -624,14 +624,23 @@ output_listing(char *ifilename)
|
||||||
cur_instr->format.bytes[1],
|
cur_instr->format.bytes[1],
|
||||||
cur_instr->format.bytes[0]);
|
cur_instr->format.bytes[0]);
|
||||||
#endif
|
#endif
|
||||||
fgets(buf, sizeof(buf), ifile);
|
/*
|
||||||
fprintf(listfile, "\t%s", buf);
|
* Macro expansions can cause several instructions
|
||||||
line++;
|
* to be output for a single source line. Only
|
||||||
|
* advance the line once in these cases.
|
||||||
|
*/
|
||||||
|
if (line == cur_instr->srcline) {
|
||||||
|
fgets(buf, sizeof(buf), ifile);
|
||||||
|
fprintf(listfile, "\t%s", buf);
|
||||||
|
line++;
|
||||||
|
} else {
|
||||||
|
fprintf(listfile, "\n");
|
||||||
|
}
|
||||||
instrptr++;
|
instrptr++;
|
||||||
}
|
}
|
||||||
/* Dump the remainder of the file */
|
/* Dump the remainder of the file */
|
||||||
while(fgets(buf, sizeof(buf), ifile) != NULL)
|
while(fgets(buf, sizeof(buf), ifile) != NULL)
|
||||||
fprintf(listfile, "\t\t%s", buf);
|
fprintf(listfile, " %s", buf);
|
||||||
|
|
||||||
fclose(ifile);
|
fclose(ifile);
|
||||||
}
|
}
|
||||||
|
|
|
@ -38,7 +38,7 @@
|
||||||
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
* POSSIBILITY OF SUCH DAMAGES.
|
* POSSIBILITY OF SUCH DAMAGES.
|
||||||
*
|
*
|
||||||
* $Id: //depot/aic7xxx/aic7xxx/aicasm/aicasm_gram.y#29 $
|
* $Id: //depot/aic7xxx/aic7xxx/aicasm/aicasm_gram.y#30 $
|
||||||
*
|
*
|
||||||
* $FreeBSD$
|
* $FreeBSD$
|
||||||
*/
|
*/
|
||||||
|
@ -157,6 +157,8 @@ static int is_download_const(expression_t *immed);
|
||||||
|
|
||||||
%token T_END_CS
|
%token T_END_CS
|
||||||
|
|
||||||
|
%token T_PAD_PAGE
|
||||||
|
|
||||||
%token T_FIELD
|
%token T_FIELD
|
||||||
|
|
||||||
%token T_ENUM
|
%token T_ENUM
|
||||||
|
@ -189,6 +191,10 @@ static int is_download_const(expression_t *immed);
|
||||||
|
|
||||||
%token <value> T_OR
|
%token <value> T_OR
|
||||||
|
|
||||||
|
/* 16 bit extensions */
|
||||||
|
%token <value> T_OR16 T_AND16 T_XOR16 T_ADD16
|
||||||
|
%token <value> T_ADC16 T_MVI16 T_TEST16 T_CMP16 T_CMPXCHG
|
||||||
|
|
||||||
%token T_RET
|
%token T_RET
|
||||||
|
|
||||||
%token T_NOP
|
%token T_NOP
|
||||||
|
@ -207,7 +213,7 @@ static int is_download_const(expression_t *immed);
|
||||||
|
|
||||||
%type <expression> expression immediate immediate_or_a
|
%type <expression> expression immediate immediate_or_a
|
||||||
|
|
||||||
%type <value> export ret f1_opcode f2_opcode jmp_jc_jnc_call jz_jnz je_jne
|
%type <value> export ret f1_opcode f2_opcode f4_opcode jmp_jc_jnc_call jz_jnz je_jne
|
||||||
|
|
||||||
%type <value> mode_value mode_list macro_arglist
|
%type <value> mode_value mode_list macro_arglist
|
||||||
|
|
||||||
|
@ -1304,6 +1310,15 @@ f2_opcode:
|
||||||
| T_ROR { $$ = AIC_OP_ROR; }
|
| T_ROR { $$ = AIC_OP_ROR; }
|
||||||
;
|
;
|
||||||
|
|
||||||
|
f4_opcode:
|
||||||
|
T_OR16 { $$ = AIC_OP_OR16; }
|
||||||
|
| T_AND16 { $$ = AIC_OP_AND16; }
|
||||||
|
| T_XOR16 { $$ = AIC_OP_XOR16; }
|
||||||
|
| T_ADD16 { $$ = AIC_OP_ADD16; }
|
||||||
|
| T_ADC16 { $$ = AIC_OP_ADC16; }
|
||||||
|
| T_MVI16 { $$ = AIC_OP_MVI16; }
|
||||||
|
;
|
||||||
|
|
||||||
code:
|
code:
|
||||||
f2_opcode destination ',' expression opt_source ret ';'
|
f2_opcode destination ',' expression opt_source ret ';'
|
||||||
{
|
{
|
||||||
|
|
|
@ -37,13 +37,14 @@
|
||||||
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
* POSSIBILITY OF SUCH DAMAGES.
|
* POSSIBILITY OF SUCH DAMAGES.
|
||||||
*
|
*
|
||||||
* $Id: //depot/aic7xxx/aic7xxx/aicasm/aicasm_insformat.h#11 $
|
* $Id: //depot/aic7xxx/aic7xxx/aicasm/aicasm_insformat.h#12 $
|
||||||
*
|
*
|
||||||
* $FreeBSD$
|
* $FreeBSD$
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <asm/byteorder.h>
|
#include <asm/byteorder.h>
|
||||||
|
|
||||||
|
/* 8bit ALU logic operations */
|
||||||
struct ins_format1 {
|
struct ins_format1 {
|
||||||
#ifdef __LITTLE_ENDIAN
|
#ifdef __LITTLE_ENDIAN
|
||||||
uint32_t immediate : 8,
|
uint32_t immediate : 8,
|
||||||
|
@ -62,6 +63,7 @@ struct ins_format1 {
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* 8bit ALU shift/rotate operations */
|
||||||
struct ins_format2 {
|
struct ins_format2 {
|
||||||
#ifdef __LITTLE_ENDIAN
|
#ifdef __LITTLE_ENDIAN
|
||||||
uint32_t shift_control : 8,
|
uint32_t shift_control : 8,
|
||||||
|
@ -80,6 +82,7 @@ struct ins_format2 {
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* 8bit branch control operations */
|
||||||
struct ins_format3 {
|
struct ins_format3 {
|
||||||
#ifdef __LITTLE_ENDIAN
|
#ifdef __LITTLE_ENDIAN
|
||||||
uint32_t immediate : 8,
|
uint32_t immediate : 8,
|
||||||
|
@ -96,10 +99,68 @@ struct ins_format3 {
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* 16bit ALU logic operations */
|
||||||
|
struct ins_format4 {
|
||||||
|
#ifdef __LITTLE_ENDIAN
|
||||||
|
uint32_t opcode_ext : 8,
|
||||||
|
source : 9,
|
||||||
|
destination : 9,
|
||||||
|
ret : 1,
|
||||||
|
opcode : 4,
|
||||||
|
parity : 1;
|
||||||
|
#else
|
||||||
|
uint32_t parity : 1,
|
||||||
|
opcode : 4,
|
||||||
|
ret : 1,
|
||||||
|
destination : 9,
|
||||||
|
source : 9,
|
||||||
|
opcode_ext : 8;
|
||||||
|
#endif
|
||||||
|
};
|
||||||
|
|
||||||
|
/* 16bit branch control operations */
|
||||||
|
struct ins_format5 {
|
||||||
|
#ifdef __LITTLE_ENDIAN
|
||||||
|
uint32_t opcode_ext : 8,
|
||||||
|
source : 9,
|
||||||
|
address : 10,
|
||||||
|
opcode : 4,
|
||||||
|
parity : 1;
|
||||||
|
#else
|
||||||
|
uint32_t parity : 1,
|
||||||
|
opcode : 4,
|
||||||
|
address : 10,
|
||||||
|
source : 9,
|
||||||
|
opcode_ext : 8;
|
||||||
|
#endif
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Far branch operations */
|
||||||
|
struct ins_format6 {
|
||||||
|
#ifdef __LITTLE_ENDIAN
|
||||||
|
uint32_t page : 3,
|
||||||
|
opcode_ext : 5,
|
||||||
|
source : 9,
|
||||||
|
address : 10,
|
||||||
|
opcode : 4,
|
||||||
|
parity : 1;
|
||||||
|
#else
|
||||||
|
uint32_t parity : 1,
|
||||||
|
opcode : 4,
|
||||||
|
address : 10,
|
||||||
|
source : 9,
|
||||||
|
opcode_ext : 5,
|
||||||
|
page : 3;
|
||||||
|
#endif
|
||||||
|
};
|
||||||
|
|
||||||
union ins_formats {
|
union ins_formats {
|
||||||
struct ins_format1 format1;
|
struct ins_format1 format1;
|
||||||
struct ins_format2 format2;
|
struct ins_format2 format2;
|
||||||
struct ins_format3 format3;
|
struct ins_format3 format3;
|
||||||
|
struct ins_format4 format4;
|
||||||
|
struct ins_format5 format5;
|
||||||
|
struct ins_format6 format6;
|
||||||
uint8_t bytes[4];
|
uint8_t bytes[4];
|
||||||
uint32_t integer;
|
uint32_t integer;
|
||||||
};
|
};
|
||||||
|
@ -118,6 +179,8 @@ struct instruction {
|
||||||
#define AIC_OP_ROL 0x5
|
#define AIC_OP_ROL 0x5
|
||||||
#define AIC_OP_BMOV 0x6
|
#define AIC_OP_BMOV 0x6
|
||||||
|
|
||||||
|
#define AIC_OP_MVI16 0x7
|
||||||
|
|
||||||
#define AIC_OP_JMP 0x8
|
#define AIC_OP_JMP 0x8
|
||||||
#define AIC_OP_JC 0x9
|
#define AIC_OP_JC 0x9
|
||||||
#define AIC_OP_JNC 0xa
|
#define AIC_OP_JNC 0xa
|
||||||
|
@ -131,3 +194,26 @@ struct instruction {
|
||||||
#define AIC_OP_SHL 0x10
|
#define AIC_OP_SHL 0x10
|
||||||
#define AIC_OP_SHR 0x20
|
#define AIC_OP_SHR 0x20
|
||||||
#define AIC_OP_ROR 0x30
|
#define AIC_OP_ROR 0x30
|
||||||
|
|
||||||
|
/* 16bit Ops. Low byte main opcode. High byte extended opcode. */
|
||||||
|
#define AIC_OP_OR16 0x8005
|
||||||
|
#define AIC_OP_AND16 0x8105
|
||||||
|
#define AIC_OP_XOR16 0x8205
|
||||||
|
#define AIC_OP_ADD16 0x8305
|
||||||
|
#define AIC_OP_ADC16 0x8405
|
||||||
|
#define AIC_OP_JNE16 0x8805
|
||||||
|
#define AIC_OP_JNZ16 0x8905
|
||||||
|
#define AIC_OP_JE16 0x8C05
|
||||||
|
#define AIC_OP_JZ16 0x8B05
|
||||||
|
#define AIC_OP_JMP16 0x9005
|
||||||
|
#define AIC_OP_JC16 0x9105
|
||||||
|
#define AIC_OP_JNC16 0x9205
|
||||||
|
#define AIC_OP_CALL16 0x9305
|
||||||
|
#define AIC_OP_CALL16 0x9305
|
||||||
|
|
||||||
|
/* Page extension is low three bits of second opcode byte. */
|
||||||
|
#define AIC_OP_JMPF 0xA005
|
||||||
|
#define AIC_OP_CALLF 0xB005
|
||||||
|
#define AIC_OP_JCF 0xC005
|
||||||
|
#define AIC_OP_JNCF 0xD005
|
||||||
|
#define AIC_OP_CMPXCHG 0xE005
|
||||||
|
|
|
@ -38,7 +38,7 @@
|
||||||
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
* POSSIBILITY OF SUCH DAMAGES.
|
* POSSIBILITY OF SUCH DAMAGES.
|
||||||
*
|
*
|
||||||
* $Id: //depot/aic7xxx/aic7xxx/aicasm/aicasm_scan.l#19 $
|
* $Id: //depot/aic7xxx/aic7xxx/aicasm/aicasm_scan.l#20 $
|
||||||
*
|
*
|
||||||
* $FreeBSD$
|
* $FreeBSD$
|
||||||
*/
|
*/
|
||||||
|
@ -132,7 +132,7 @@ if[ \t]*\( {
|
||||||
*string_buf_ptr++ = *yptr++;
|
*string_buf_ptr++ = *yptr++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else { return T_ELSE; }
|
||||||
VERSION { return T_VERSION; }
|
VERSION { return T_VERSION; }
|
||||||
PREFIX { return T_PREFIX; }
|
PREFIX { return T_PREFIX; }
|
||||||
PATCH_ARG_LIST { return T_PATCH_ARG_LIST; }
|
PATCH_ARG_LIST { return T_PATCH_ARG_LIST; }
|
||||||
|
@ -173,10 +173,6 @@ RW|RO|WO {
|
||||||
yylval.value = WO;
|
yylval.value = WO;
|
||||||
return T_MODE;
|
return T_MODE;
|
||||||
}
|
}
|
||||||
BEGIN_CRITICAL { return T_BEGIN_CS; }
|
|
||||||
END_CRITICAL { return T_END_CS; }
|
|
||||||
SET_SRC_MODE { return T_SET_SRC_MODE; }
|
|
||||||
SET_DST_MODE { return T_SET_DST_MODE; }
|
|
||||||
field { return T_FIELD; }
|
field { return T_FIELD; }
|
||||||
enum { return T_ENUM; }
|
enum { return T_ENUM; }
|
||||||
mask { return T_MASK; }
|
mask { return T_MASK; }
|
||||||
|
@ -192,6 +188,13 @@ none { return T_NONE; }
|
||||||
sindex { return T_SINDEX; }
|
sindex { return T_SINDEX; }
|
||||||
A { return T_A; }
|
A { return T_A; }
|
||||||
|
|
||||||
|
/* Instruction Formatting */
|
||||||
|
PAD_PAGE { return T_PAD_PAGE; }
|
||||||
|
BEGIN_CRITICAL { return T_BEGIN_CS; }
|
||||||
|
END_CRITICAL { return T_END_CS; }
|
||||||
|
SET_SRC_MODE { return T_SET_SRC_MODE; }
|
||||||
|
SET_DST_MODE { return T_SET_DST_MODE; }
|
||||||
|
|
||||||
/* Opcodes */
|
/* Opcodes */
|
||||||
shl { return T_SHL; }
|
shl { return T_SHL; }
|
||||||
shr { return T_SHR; }
|
shr { return T_SHR; }
|
||||||
|
@ -223,7 +226,17 @@ and { return T_AND; }
|
||||||
or { return T_OR; }
|
or { return T_OR; }
|
||||||
ret { return T_RET; }
|
ret { return T_RET; }
|
||||||
nop { return T_NOP; }
|
nop { return T_NOP; }
|
||||||
else { return T_ELSE; }
|
|
||||||
|
/* ARP2 16bit extensions */
|
||||||
|
or16 { return T_OR16; }
|
||||||
|
and16 { return T_AND16; }
|
||||||
|
xor16 { return T_XOR16; }
|
||||||
|
add16 { return T_ADD16; }
|
||||||
|
adc16 { return T_ADC16; }
|
||||||
|
mvi16 { return T_MVI16; }
|
||||||
|
test16 { return T_TEST16; }
|
||||||
|
cmp16 { return T_CMP16; }
|
||||||
|
cmpxchg { return T_CMPXCHG; }
|
||||||
|
|
||||||
/* Allowed Symbols */
|
/* Allowed Symbols */
|
||||||
\<\< { return T_EXPR_LSHIFT; }
|
\<\< { return T_EXPR_LSHIFT; }
|
||||||
|
|
Загрузка…
Ссылка в новой задаче