aboutsummaryrefslogtreecommitdiff
path: root/gas/config
diff options
context:
space:
mode:
authorJ.T. Conklin <jtc@acorntoolworks.com>1996-08-22 05:30:14 +0000
committerJ.T. Conklin <jtc@acorntoolworks.com>1996-08-22 05:30:14 +0000
commitdcf5d11760ce0936c467ff48b8c1da159d1de7ad (patch)
tree1f6966f8a3269450989c05486c2e52552af1568f /gas/config
parente89a42c117c011814e707a9c40502271e581bb9c (diff)
downloadgdb-dcf5d11760ce0936c467ff48b8c1da159d1de7ad.zip
gdb-dcf5d11760ce0936c467ff48b8c1da159d1de7ad.tar.gz
gdb-dcf5d11760ce0936c467ff48b8c1da159d1de7ad.tar.bz2
parse [reg], lo(exp), and hi(exp)
Diffstat (limited to 'gas/config')
-rw-r--r--gas/config/tc-v850.c51
1 files changed, 44 insertions, 7 deletions
diff --git a/gas/config/tc-v850.c b/gas/config/tc-v850.c
index 49dd76a..c7c420b 100644
--- a/gas/config/tc-v850.c
+++ b/gas/config/tc-v850.c
@@ -31,7 +31,7 @@
const char comment_chars[] = "#";
/* Characters which start a comment at the beginning of a line. */
-const char line_comment_chars[] = "#";
+const char line_comment_chars[] = ";#";
/* Characters which may be used to separate multiple commands on a
single line. */
@@ -359,15 +359,44 @@ get_operands (exp)
if (*p==0 || *p=='\n' || *p=='\r')
break;
- input_line_pointer = p;
+ /* skip trailing parens */
+ if (*p == ')' || *p == ']')
+ {
+ p++;
+ continue;
+ }
- if (!register_name(&exp[numops]))
- expression(&exp[numops]);
+ if (*p == '[')
+ {
+ p++;
+ input_line_pointer = p;
+ register_name(&exp[numops]);
+ }
+ else if (strncmp(p, "lo(", 3) == 0)
+ {
+ p += 3;
+ input_line_pointer = p;
+ expression(&exp[numops]);
+ }
+ else if (strncmp(p, "hi(", 3) == 0)
+ {
+ p += 3;
+ input_line_pointer = p;
+ expression(&exp[numops]);
+ }
+ else
+ {
+ input_line_pointer = p;
+ if (!register_name(&exp[numops]))
+ expression(&exp[numops]);
+ }
- numops++;
p = input_line_pointer;
+ numops++;
}
+ input_line_pointer = p;
+
exp[numops].X_op = 0;
return (numops);
}
@@ -473,8 +502,16 @@ md_assemble (str)
#endif
/* Write out the instruction. */
- f = frag_more (2);
- md_number_to_chars (f, insn, 2);
+ if ((insn & 0x0600) == 0x0600)
+ {
+ f = frag_more (4);
+ md_number_to_chars (f, insn, 4);
+ }
+ else
+ {
+ f = frag_more (2);
+ md_number_to_chars (f, insn, 2);
+ }
}