From 31b2323cf7e7b8c52d556031036689cda7c101a2 Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Thu, 28 Dec 2006 07:09:16 +0000 Subject: [PATCH] 2006-12-27 H.J. Lu * config/tc-i386.c (disp_expressions): Use MAX_MEMORY_OPERANDS for array size instead of 2. (im_expressions): Use MAX_IMMEDIATE_OPERANDS for for array size instead of 2. (i386_immediate): Update immediate operand overflow error message. (i386_displacement): Check displacement operand overflow. --- gas/ChangeLog | 10 ++++++++++ gas/config/tc-i386.c | 15 ++++++++++++--- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/gas/ChangeLog b/gas/ChangeLog index 13eb34840df..c545ce1b34e 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,13 @@ +2006-12-27 H.J. Lu + + * config/tc-i386.c (disp_expressions): Use MAX_MEMORY_OPERANDS + for array size instead of 2. + (im_expressions): Use MAX_IMMEDIATE_OPERANDS for for array size + instead of 2. + (i386_immediate): Update immediate operand overflow error + message. + (i386_displacement): Check displacement operand overflow. + 2006-12-27 H.J. Lu * config/tc-i386.c: Document tc-i386.c, not i386.c. diff --git a/gas/config/tc-i386.c b/gas/config/tc-i386.c index fa6953470ba..856e953da4a 100644 --- a/gas/config/tc-i386.c +++ b/gas/config/tc-i386.c @@ -272,8 +272,9 @@ static i386_insn i; /* Possible templates for current insn. */ static const templates *current_templates; -/* Per instruction expressionS buffers: 2 displacements & 2 immediate max. */ -static expressionS disp_expressions[2], im_expressions[2]; +/* Per instruction expressionS buffers: max displacements & immediates. */ +static expressionS disp_expressions[MAX_MEMORY_OPERANDS]; +static expressionS im_expressions[MAX_IMMEDIATE_OPERANDS]; /* Current operand we are working on. */ static int this_operand; @@ -4504,7 +4505,8 @@ i386_immediate (char *imm_start) if (i.imm_operands == MAX_IMMEDIATE_OPERANDS) { - as_bad (_("only 1 or 2 immediate operands are allowed")); + as_bad (_("at most %d immediate operands are allowed"), + MAX_IMMEDIATE_OPERANDS); return 0; } @@ -4645,6 +4647,13 @@ i386_displacement (disp_start, disp_end) int bigdisp, override; unsigned int types = Disp; + if (i.disp_operands == MAX_MEMORY_OPERANDS) + { + as_bad (_("at most %d displacement operands are allowed"), + MAX_MEMORY_OPERANDS); + return 0; + } + if ((i.types[this_operand] & JumpAbsolute) || !(current_templates->start->opcode_modifier & (Jump | JumpDword))) {