summaryrefslogtreecommitdiff
path: root/gas/config/tc-crx.c
diff options
context:
space:
mode:
authorNick Clifton <nickc@redhat.com>2004-10-07 14:18:17 +0000
committerNick Clifton <nickc@redhat.com>2004-10-07 14:18:17 +0000
commit2b9d11255242b1e1bc84563fa36415db51ca6349 (patch)
tree9b8753ea438eceaa92d489ea0f9681f7798a4958 /gas/config/tc-crx.c
parentf47da9a7c0d4f5ca0ef6d748e3508d93a0809ba9 (diff)
downloadbinutils-redhat-2b9d11255242b1e1bc84563fa36415db51ca6349.tar.gz
Add support for CRX co-processor opcodes
Diffstat (limited to 'gas/config/tc-crx.c')
-rw-r--r--gas/config/tc-crx.c17
1 files changed, 15 insertions, 2 deletions
diff --git a/gas/config/tc-crx.c b/gas/config/tc-crx.c
index 382c5629c3..6c144b399b 100644
--- a/gas/config/tc-crx.c
+++ b/gas/config/tc-crx.c
@@ -1724,7 +1724,7 @@ static int
get_cinv_parameters (char * operand)
{
char *p = operand;
- int d_used = 0, i_used = 0, u_used = 0;
+ int d_used = 0, i_used = 0, u_used = 0, b_used = 0;
while (*++p != ']')
{
@@ -1737,11 +1737,14 @@ get_cinv_parameters (char * operand)
i_used = 1;
else if (*p == 'u')
u_used = 1;
+ else if (*p == 'b')
+ b_used = 1;
else
as_bad (_("Illegal `cinv' parameter: `%c'"), *p);
}
- return ((d_used ? 4 : 0)
+ return ((b_used ? 8 : 0)
+ + (d_used ? 4 : 0)
+ (i_used ? 2 : 0)
+ (u_used ? 1 : 0));
}
@@ -2374,12 +2377,22 @@ preprocess_reglist (char *param, int *allocated)
strncpy (reg_name, regP, paramP - regP);
+ /* Coprocessor register c<N>. */
if (IS_INSN_TYPE (COP_REG_INS))
{
if ((cr = get_copregister (reg_name)) == nullcopregister)
as_bad (_("Illegal register `%s' in cop-register list"), reg_name);
mask_reg (getreg_image (cr - c0), &mask);
}
+ /* Coprocessor Special register cs<N>. */
+ else if (IS_INSN_TYPE (COPS_REG_INS))
+ {
+ if ((cr = get_copregister (reg_name)) == nullcopregister)
+ as_bad (_("Illegal register `%s' in cop-special-register list"),
+ reg_name);
+ mask_reg (getreg_image (cr - cs0), &mask);
+ }
+ /* General purpose register r<N>. */
else
{
if ((r = get_register (reg_name)) == nullregister)