From 40f0c904981b102fba67110c8f4a0f18b0d3d373 Mon Sep 17 00:00:00 2001 From: "Frank Ch. Eigler" Date: Thu, 7 May 1998 15:27:13 +0000 Subject: [PATCH] * Fixes for d30v PR 15627. * First batch of fixes for sky PR 15853 (20-bit break/sdbbp) * Fixes for d30v test suite. --- gas/ChangeLog | 18 ++++++++++++++- gas/config/tc-mips.c | 50 +++++++++++++++++++++++++++++++++++++---- gas/testsuite/ChangeLog | 17 ++++++++++++-- 3 files changed, 78 insertions(+), 7 deletions(-) diff --git a/gas/ChangeLog b/gas/ChangeLog index ef1cf226536..4688c0defd6 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,17 @@ +start-sanitize-d30v +Thu May 7 11:13:00 1998 Frank Ch. Eigler + + * config/tc-d30v.c (do_assemble): Abort with error message + if opcode operands do not match. + +end-sanitize-d30v +Thu May 7 09:36:06 1998 Frank Ch. Eigler + + * config/tc-mips.c (macro_build, validate_mips_insn): Implement + 'q' operand format for 20-bit "break"/"sdbbp" instructions. + (mips_ip): Truncate overflowed "break" 'c' operand. Implement + similar new 'q' operand. + Thu May 7 07:47:14 1998 Michael Meissner * cgen.c (cgen_asm_finish_insn): Fix typo. @@ -39,12 +53,14 @@ Wed May 6 15:11:12 1998 Klaus Kaempf * doc/c-vax.texi: Correct and extend vax/vms documentation. +start-sanitize-d30v Wed May 6 11:51:51 1998 Richard Henderson * config/tc-d30v.c (do_assemble): Accept a new parameter requesting a short format insn. (md_assemble): Set it for explicitly packed insns. - +end-sanitize-d30v + Tue May 5 13:23:13 1998 Nick Clifton * config/obj-coff.c (c_symbol_merge): Do not take address of diff --git a/gas/config/tc-mips.c b/gas/config/tc-mips.c index 92baf337538..4fa3e3b7009 100644 --- a/gas/config/tc-mips.c +++ b/gas/config/tc-mips.c @@ -2557,6 +2557,10 @@ macro_build (place, counter, ep, name, fmt, va_alist) insn.insn_opcode |= va_arg (args, int) << 6; continue; + case 'q': + insn.insn_opcode |= va_arg (args, int) << 6; + continue; + case 'b': case 's': case 'r': @@ -3433,6 +3437,7 @@ macro (ip) int dbl = 0; int coproc = 0; int lr = 0; + int imm = 0; offsetT maxnum; int off; bfd_reloc_code_real_type r; @@ -5912,6 +5917,7 @@ macro2 (ip) int dbl = 0; int coproc = 0; int lr = 0; + int imm = 0; int off; offsetT maxnum; bfd_reloc_code_real_type r; @@ -5953,15 +5959,24 @@ macro2 (ip) macro_build ((char *) NULL, &icnt, NULL, "mflo", "d", dreg); break; + case M_DMULO_I: + dbl = 1; + case M_MULO_I: + imm = 1; + goto do_mulo; + case M_DMULO: dbl = 1; case M_MULO: + do_mulo: mips_emit_delays (true); ++mips_opts.noreorder; mips_any_noreorder = 1; + if (imm) + load_register (&icnt, AT, &imm_expr, dbl); macro_build ((char *) NULL, &icnt, NULL, dbl ? "dmult" : "mult", - "s,t", sreg, treg); + "s,t", sreg, imm ? AT : treg); macro_build ((char *) NULL, &icnt, NULL, "mflo", "d", dreg); macro_build ((char *) NULL, &icnt, NULL, dbl ? "dsra32" : "sra", @@ -5980,15 +5995,24 @@ macro2 (ip) macro_build ((char *) NULL, &icnt, NULL, "mflo", "d", dreg); break; + case M_DMULOU_I: + dbl = 1; + case M_MULOU_I: + imm = 1; + goto do_mulou; + case M_DMULOU: dbl = 1; case M_MULOU: + do_mulou: mips_emit_delays (true); ++mips_opts.noreorder; mips_any_noreorder = 1; + if (imm) + load_register (&icnt, AT, &imm_expr, dbl); macro_build ((char *) NULL, &icnt, NULL, dbl ? "dmultu" : "multu", - "s,t", sreg, treg); + "s,t", sreg, imm ? AT : treg); macro_build ((char *) NULL, &icnt, NULL, "mfhi", "d", AT); macro_build ((char *) NULL, &icnt, NULL, "mflo", "d", dreg); if (mips_trap) @@ -6903,6 +6927,7 @@ validate_mips_insn (opc) case 'l': break; case 'o': USE_BITS (OP_MASK_DELTA, OP_SH_DELTA); break; case 'p': USE_BITS (OP_MASK_DELTA, OP_SH_DELTA); break; + case 'q': USE_BITS (OP_MASK_CODE2, OP_SH_CODE2); break; case 'r': USE_BITS (OP_MASK_RS, OP_SH_RS); break; case 's': USE_BITS (OP_MASK_RS, OP_SH_RS); break; case 't': USE_BITS (OP_MASK_RT, OP_SH_RT); break; @@ -7387,13 +7412,30 @@ mips_ip (str, ip) my_getExpression (&imm_expr, s); check_absolute_expr (ip, &imm_expr); if ((unsigned) imm_expr.X_add_number > 1023) - as_warn (_("Illegal break code (%ld)"), - (long) imm_expr.X_add_number); + { + as_warn (_("Illegal break code (%ld)"), + (long) imm_expr.X_add_number); + imm_expr.X_add_number &= 0x3ff; + } ip->insn_opcode |= imm_expr.X_add_number << 16; imm_expr.X_op = O_absent; s = expr_end; continue; + case 'q': /* lower break code */ + my_getExpression (&imm_expr, s); + check_absolute_expr (ip, &imm_expr); + if ((unsigned) imm_expr.X_add_number > 1023) + { + as_warn (_("Illegal lower break code (%ld)"), + (long) imm_expr.X_add_number); + imm_expr.X_add_number &= 0x3ff; + } + ip->insn_opcode |= imm_expr.X_add_number << 6; + imm_expr.X_op = O_absent; + s = expr_end; + continue; + case 'B': /* syscall code */ my_getExpression (&imm_expr, s); check_absolute_expr (ip, &imm_expr); diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog index 58c2c9ceb0e..53a8eb59133 100644 --- a/gas/testsuite/ChangeLog +++ b/gas/testsuite/ChangeLog @@ -1,8 +1,21 @@ +start-sanitize-d30v +Thu Apr 30 11:55:01 1998 Frank Ch. Eigler + + * gas/d30v/{inst,array,opt,reloc}.d: Accept labels + in disassembly, where the offset is in hex and has a "0x" prefix. + +end-sanitize-d30v +Tue Apr 28 16:38:34 1998 Frank Ch. Eigler + + * gas/mips/lineno.[sd]: Assembly source line number test. + * gas/mips/mips.exp: Added lineno test. + start-sanitize-sky Thu Apr 16 11:23:13 1998 Doug Evans - * gas/testsuite/dvp/{vif-1.[sd],vif-3.s}: Update, '*' no longer - supported as unpack address. + * gas/dvp/{vif-1.[sd],vif-3.s}: Update, '*' no longer supported as + unpack address. * gas/dvp/vif-4.[sd]: Test wl > cl with no input + data. end-sanitize-sky start-sanitize-r5900 -- 2.30.2