From 6b2539e3e6a8643a88d6302f4f479243defa7e1f Mon Sep 17 00:00:00 2001 From: Nick Clifton Date: Tue, 27 Jun 2000 18:21:39 +0000 Subject: [PATCH] Do not allow EITHER_BUT_PREFER_MU opcodes to be packed into reverse sequential buckets, and warn if the user does so. --- gas/ChangeLog | 8 ++++++++ gas/config/tc-d30v.c | 24 ++++++++++++++++-------- gas/testsuite/ChangeLog | 5 +++++ gas/testsuite/gas/d30v/bittest.l | 16 ++++++---------- 4 files changed, 35 insertions(+), 18 deletions(-) diff --git a/gas/ChangeLog b/gas/ChangeLog index fdbd4d6c5ae..9c694b4e4a0 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,11 @@ +2000-06-27 Nick Clifton + + * config/tc-d30v.c (write_2_short): Do not allow opcodes with + the EITHER_BUT_PREFER_MU attribute to be combined into a reverse + sequential order, and emit warning messages if the input source + code contains constructs like that, or parallel constructs + containing such opcodes. + 2000-06-26 Marek Michalkiewicz * config/tc-avr.c (mcu_types): Rename avr4 to avr5, add avr4. diff --git a/gas/config/tc-d30v.c b/gas/config/tc-d30v.c index 5f9e2d0e57e..023e14c2af3 100644 --- a/gas/config/tc-d30v.c +++ b/gas/config/tc-d30v.c @@ -832,10 +832,17 @@ write_2_short (opcode1, insn1, opcode2, insn2, exec_type, fx) write_1_short (opcode1, insn1, fx->next, false); return 1; } - else if (opcode1->op->unit == IU - || (opcode1->op->unit == EITHER - && opcode2->op->unit == EITHER_BUT_PREFER_MU)) + else if (opcode1->op->unit == IU) { + if (opcode2->op->unit == EITHER_BUT_PREFER_MU) + { + /* Case 103810 is a request from Mitsubishi that opcodes + with EITHER_BUT_PREFER_MU should not be executed in + reverse sequential order. */ + write_1_short (opcode1, insn1, fx->next, false); + return 1; + } + /* reverse sequential */ insn = FM10 | (insn2 << 32) | insn1; exec_type = EXEC_REVSEQ; @@ -872,7 +879,8 @@ write_2_short (opcode1, insn1, opcode2, insn2, exec_type, fx) else { if (opcode2->op->unit == EITHER_BUT_PREFER_MU) - as_warn (_("Executing %s in IU may not work"), opcode2->op->name); + as_warn (_("Executing %s in IU in parallel with %s may not work"), + opcode1->op->name, opcode2->op->name); insn = FM00 | (insn1 << 32) | insn2; fx = fx->next; @@ -887,8 +895,6 @@ write_2_short (opcode1, insn1, opcode2, insn2, exec_type, fx) as_bad (_("special left instruction `%s' kills instruction " "`%s' in right container"), opcode1->op->name, opcode2->op->name); - if (opcode2->op->unit == EITHER_BUT_PREFER_MU) - as_warn (_("Executing %s in IU may not work"), opcode2->op->name); insn = FM01 | (insn1 << 32) | insn2; fx = fx->next; break; @@ -896,8 +902,10 @@ write_2_short (opcode1, insn1, opcode2, insn2, exec_type, fx) case EXEC_REVSEQ: /* reverse sequential */ if (opcode2->op->unit == MU) as_bad (_("MU instruction may not be in the right container")); - if (opcode2->op->unit == EITHER_BUT_PREFER_MU) - as_warn (_("Executing %s in IU may not work"), opcode2->op->name); + if (opcode1->op->unit == EITHER_BUT_PREFER_MU + || opcode2->op->unit == EITHER_BUT_PREFER_MU) + as_warn (_("Executing %s in reverse serial with %s may not work"), + opcode1->op->name, opcode2->op->name); insn = FM10 | (insn1 << 32) | insn2; fx = fx->next; break; diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog index a1a799c9ac2..8617f12ec5f 100644 --- a/gas/testsuite/ChangeLog +++ b/gas/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2000-06-27 Nick Clifton + + * gas/d30v/bittest.l: Edit to match new warning messages produced + by assembler. + 2000-06-19 Timothy Wall * gas/macros/macros.exp: Avoid tests which are not useful on tic54x. diff --git a/gas/testsuite/gas/d30v/bittest.l b/gas/testsuite/gas/d30v/bittest.l index 75d1b7ed544..9a5596d8003 100644 --- a/gas/testsuite/gas/d30v/bittest.l +++ b/gas/testsuite/gas/d30v/bittest.l @@ -1,9 +1,7 @@ .*: Assembler messages: .*: Warning: Swapping instruction order -.*: Warning: Executing bset in IU may not work -.*: Warning: Executing btst in IU may not work -.*: Warning: Executing bclr in IU may not work -.*: Warning: Executing bnot in IU may not work +.*: Warning: Executing nop in reverse serial with btst may not work +.*: Warning: Executing nop in IU in parallel with bclr may not work .*: Warning: Executing bset in IU may not work .*: Warning: Swapping instruction order GAS LISTING .* @@ -25,16 +23,14 @@ GAS LISTING .* 11 00F00000 12 13 0010 00F00000 nop -> BSET R1, R2, R3 -.* Warning:Executing bset in IU may not work 13 82201083 14 0018 80F00000 nop <- BTST F1, R2, R3 -.* Warning:Executing btst in IU may not work +.* Warning:Executing nop in reverse serial with btst may not work 14 02001083 15 0020 00F00000 nop || BCLR R1, R2, R3 -.* Warning:Executing bclr in IU may not work +.* Warning:Executing nop in IU in parallel with bclr may not work 15 02301083 16 0028 00F00000 nop -> BNOT R1, R2, R3 -.* Warning:Executing bnot in IU may not work 16 82101083 17 0030 02101083 BNOT r1, r2, r3 -> nop 17 80F00000 @@ -52,5 +48,5 @@ GAS LISTING .* 25 88C04146 26 27 joinll r4, r5, r6 - 28 0050 82201083 bset r1, r2, r3 - 28 08C04146 + 28 0050 08C04146 bset r1, r2, r3 + 28 82201083 -- 2.30.2