diff options
author | Stephane Carrez <stcarrez@nerim.fr> | 2000-11-26 21:18:15 +0000 |
---|---|---|
committer | Stephane Carrez <stcarrez@nerim.fr> | 2000-11-26 21:18:15 +0000 |
commit | ae3e85dd270c1dba87ac81cd431ebc6a44a28e44 (patch) | |
tree | 3a962511d10f783ae1fa82202a25ae8b088f396e | |
parent | 639aa4f72f2d6abfb62c46d24ac699d9b52724b6 (diff) | |
download | gdb-ae3e85dd270c1dba87ac81cd431ebc6a44a28e44.zip gdb-ae3e85dd270c1dba87ac81cd431ebc6a44a28e44.tar.gz gdb-ae3e85dd270c1dba87ac81cd431ebc6a44a28e44.tar.bz2 |
Fix movw/movb operands for 68HC12
-rw-r--r-- | gas/ChangeLog | 6 | ||||
-rw-r--r-- | gas/config/tc-m68hc11.c | 31 | ||||
-rw-r--r-- | gas/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gas/testsuite/gas/m68hc11/opers12.d | 13 | ||||
-rw-r--r-- | gas/testsuite/gas/m68hc11/opers12.s | 10 |
5 files changed, 57 insertions, 8 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog index 5ab54b2..19a9449 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,9 @@ +2000-11-26 Stephane Carrez <Stephane.Carrez@worldnet.fr> + + * config/tc-m68hc11.c (build_indexed_byte): Print the offset in + the error message. + (get_operand): Fix analysis for movw/movb instructions. + 2000-11-24 Nick Clifton <nickc@redhat.com> * configure.in (xscale-elf): Add target. diff --git a/gas/config/tc-m68hc11.c b/gas/config/tc-m68hc11.c index eabf8ef..3901ad0 100644 --- a/gas/config/tc-m68hc11.c +++ b/gas/config/tc-m68hc11.c @@ -1073,6 +1073,8 @@ get_operand (oper, which, opmode) if (*p == ',') { + int possible_mode = M6811_OP_NONE; + char *old_input_line; p++; /* 68HC12 pre increment or decrement. */ @@ -1080,23 +1082,37 @@ get_operand (oper, which, opmode) { if (*p == '-') { - mode = M6812_PRE_DEC; + possible_mode = M6812_PRE_DEC; p++; - if (current_architecture & cpu6811) - as_bad (_("Pre-decrement mode is not valid for 68HC11")); } else if (*p == '+') { - mode = M6812_PRE_INC; + possible_mode = M6812_PRE_INC; p++; - if (current_architecture & cpu6811) - as_bad (_("Pre-increment mode is not valid for 68HC11")); } p = skip_whites (p); } + old_input_line = input_line_pointer; input_line_pointer = p; reg = register_name (); + /* Backtrack if we have a valid constant expression and + it does not correspond to the offset of the 68HC12 indexed + addressing mode (as in N,x). */ + if (reg == REG_NONE && mode == M6811_OP_NONE + && possible_mode != M6811_OP_NONE) + { + oper->mode = M6811_OP_IND16 | M6811_OP_JUMP_REL; + input_line_pointer = skip_whites (old_input_line); + return 1; + } + + if (possible_mode != M6811_OP_NONE) + mode = possible_mode; + + if ((current_architecture & cpu6811) + && possible_mode != M6811_OP_NONE) + as_bad (_("Pre-increment mode is not valid for 68HC11")); /* Backtrack. */ if (which == 0 && opmode & M6812_OP_IDX_P2 && reg != REG_X && reg != REG_Y @@ -1700,7 +1716,8 @@ build_indexed_byte (op, format, move_insn) if (move_insn && !(val >= -16 && val <= 15)) { - as_bad (_("Offset out of 5-bit range for movw/movb insn.")); + as_bad (_("Offset out of 5-bit range for movw/movb insn: %ld."), + val); return -1; } diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog index e5527d5..4bb3ecc 100644 --- a/gas/testsuite/ChangeLog +++ b/gas/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2000-11-26 Stephane Carrez <Stephane.Carrez@worldnet.fr> + + * gas/m68hc11/opers12.s: New test for movw operands. + * gas/m68hc11/opers12.d: Likewise. + 2000-11-24 Nick Clifton <nickc@redhat.com> * arm.exp: Run tests for xscale as well as arm. diff --git a/gas/testsuite/gas/m68hc11/opers12.d b/gas/testsuite/gas/m68hc11/opers12.d index fec02eb..2fbd3dd 100644 --- a/gas/testsuite/gas/m68hc11/opers12.d +++ b/gas/testsuite/gas/m68hc11/opers12.d @@ -67,4 +67,15 @@ Disassembly of section .text: 0+0b6 <L1\+0xad> trap #64 0+0b8 <L1\+0xaf> trap #128 0+0ba <L1\+0xb1> trap #255 -0+0bc <L2> rts +0+0bc <L2> movw 1,X, 2,X +0+0c0 <L2\+0x4> movw 0+0ffff <L2\+0xff43>, 0000ffff <L2\+0xff43> +0+0c6 <L2\+0xa> movw 0+0ffff <L2\+0xff43>, 1,X +0+0cb <L2\+0xf> movw #0+0ffff <L2\+0xff43>, 1,X +0+0d0 <L2\+0x14> movw 0+03 <start\+0x3>, 0+08 <start\+0x8> +0+0d6 <L2\+0x1a> movw #0+03 <start\+0x3>, 0+03 <start\+0x3> +0+0dc <L2\+0x20> movw #0+03 <start\+0x3>, 1,X +0+0e1 <L2\+0x25> movw 0+03 <start\+0x3>, 1,X +0+0e6 <L2\+0x2a> movw 0+03 <start\+0x3>, 2,X +0+0eb <L2\+0x2f> movw 0+04 <start\+0x4>, -2,X +0+0f0 <L2\+0x34> rts + diff --git a/gas/testsuite/gas/m68hc11/opers12.s b/gas/testsuite/gas/m68hc11/opers12.s index dcf53d1..b4a9c24 100644 --- a/gas/testsuite/gas/m68hc11/opers12.s +++ b/gas/testsuite/gas/m68hc11/opers12.s @@ -69,4 +69,14 @@ L1: ldy ,x trap #0x80 trap #255 L2: + movw 1,x,2,x + movw -1,-1 + movw -1,1,x + movw #-1,1,x + movw 3,8 + movw #3,3 + movw #3,1,x + movw 3,1,x + movw 3,+2,x + movw 4,-2,x rts |