diff options
author | J.T. Conklin <jtc@acorntoolworks.com> | 1996-08-22 05:30:14 +0000 |
---|---|---|
committer | J.T. Conklin <jtc@acorntoolworks.com> | 1996-08-22 05:30:14 +0000 |
commit | dcf5d11760ce0936c467ff48b8c1da159d1de7ad (patch) | |
tree | 1f6966f8a3269450989c05486c2e52552af1568f /gas/config | |
parent | e89a42c117c011814e707a9c40502271e581bb9c (diff) | |
download | gdb-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.c | 51 |
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); + } } |