diff options
Diffstat (limited to 'gas/config/tc-sh.c')
-rw-r--r-- | gas/config/tc-sh.c | 27 |
1 files changed, 21 insertions, 6 deletions
diff --git a/gas/config/tc-sh.c b/gas/config/tc-sh.c index 634d5dc..bc0380a 100644 --- a/gas/config/tc-sh.c +++ b/gas/config/tc-sh.c @@ -1222,10 +1222,6 @@ static char * get_operands (sh_opcode_info *info, char *args, sh_operand_info *operand) { char *ptr = args; - - operand[0].type = 0; - operand[1].type = 0; - operand[2].type = 0; if (info->arg[0]) { /* The pre-processor will eliminate whitespace in front of '@' @@ -1238,7 +1234,9 @@ get_operands (sh_opcode_info *info, char *args, sh_operand_info *operand) if (info->arg[1]) { if (*ptr == ',') - ptr++; + { + ptr++; + } get_operand (&ptr, operand + 1); /* ??? Hack: psha/pshl have a varying operand number depending on the type of the first operand. We handle this by having the @@ -1249,11 +1247,28 @@ get_operands (sh_opcode_info *info, char *args, sh_operand_info *operand) if (info->arg[2] && operand[0].type != A_IMM) { if (*ptr == ',') - ptr++; + { + ptr++; + } get_operand (&ptr, operand + 2); } + else + { + operand[2].type = 0; + } + } + else + { + operand[1].type = 0; + operand[2].type = 0; } } + else + { + operand[0].type = 0; + operand[1].type = 0; + operand[2].type = 0; + } return ptr; } |