diff options
author | DJ Delorie <dj@redhat.com> | 2005-10-26 14:59:12 +0000 |
---|---|---|
committer | DJ Delorie <dj@redhat.com> | 2005-10-26 14:59:12 +0000 |
commit | f75eb1c00406df9d115a49dcf36c28dfef1478a6 (patch) | |
tree | fcf3521fe2f0638a87b654c609add945362d160d /opcodes/m32c-asm.c | |
parent | 2005-10-26 Paul Brook <paul@codesourcery.com> (diff) | |
download | binutils-gdb-f75eb1c00406df9d115a49dcf36c28dfef1478a6.tar.gz binutils-gdb-f75eb1c00406df9d115a49dcf36c28dfef1478a6.tar.bz2 binutils-gdb-f75eb1c00406df9d115a49dcf36c28dfef1478a6.zip |
* m32c.cpu (f-dsp-8-s24, Dsp-8-s24): New.
(mov-dspsp-dst-defn, mov-src-dspsp-defn, mov16-dspsp-dst-defn,
mov16-src-dspsp-defn, mov32-dspsp-dst-defn, mov32-src-dspsp-defn):
dsp8[sp] is signed.
(mov.WL:S #imm,A0/A1): dsp24 is signed (i.e. -0x800000..0xffffff).
(mov.BW:S r0,r1): Fix typo r1l->r1.
(tst): Allow :G suffix.
* m32c.opc (parse_signed24): New, for -0x800000..0xffffff.
* m32c-asm.c: Regenerate.
* m32c-desc.c: Regenerate.
* m32c-desc.h: Regenerate.
* m32c-dis.c: Regenerate.
* m32c-ibld.c: Regenerate.
* m32c-opc.c: Regenerate.
* m32c-opc.h: Regenerate.
Diffstat (limited to 'opcodes/m32c-asm.c')
-rw-r--r-- | opcodes/m32c-asm.c | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/opcodes/m32c-asm.c b/opcodes/m32c-asm.c index 1bfa926efdb..235b0b7ad92 100644 --- a/opcodes/m32c-asm.c +++ b/opcodes/m32c-asm.c @@ -407,6 +407,26 @@ parse_unsigned24 (CGEN_CPU_DESC cd, const char **strp, return 0; } +/* This should only be used for #imm->reg. */ +static const char * +parse_signed24 (CGEN_CPU_DESC cd, const char **strp, + int opindex, signed long *valuep) +{ + const char *errmsg = 0; + signed long value; + + PARSE_SIGNED; + + if (value <= 0xffffff && value > 0x7fffff) + value -= 0x1000000; + + if (value > 0xffffff) + return _("dsp:24 immediate is out of range"); + + *valuep = value; + return 0; +} + static const char * parse_signed32 (CGEN_CPU_DESC cd, const char **strp, int opindex, signed long *valuep) @@ -1038,6 +1058,9 @@ m32c_cgen_parse_operand (CGEN_CPU_DESC cd, case M32C_OPERAND_DSP_48_U8 : errmsg = parse_unsigned8 (cd, strp, M32C_OPERAND_DSP_48_U8, (unsigned long *) (& fields->f_dsp_48_u8)); break; + case M32C_OPERAND_DSP_8_S24 : + errmsg = parse_signed24 (cd, strp, M32C_OPERAND_DSP_8_S24, (long *) (& fields->f_dsp_8_s24)); + break; case M32C_OPERAND_DSP_8_S8 : errmsg = parse_signed8 (cd, strp, M32C_OPERAND_DSP_8_S8, (long *) (& fields->f_dsp_8_s8)); break; |