diff options
author | Richard Henderson <rth@cygnus.com> | 2000-01-25 19:13:13 -0800 |
---|---|---|
committer | Richard Henderson <rth@gcc.gnu.org> | 2000-01-25 19:13:13 -0800 |
commit | 5850dc005d75b4018726807b5e074c793a58b729 (patch) | |
tree | 15e16a4e408c579329781b7a74e3e1c1cfa4745f /gcc | |
parent | 7913f3d028aaa490bb6cad8817f1d0ba25d5970e (diff) | |
download | gcc-5850dc005d75b4018726807b5e074c793a58b729.zip gcc-5850dc005d75b4018726807b5e074c793a58b729.tar.gz gcc-5850dc005d75b4018726807b5e074c793a58b729.tar.bz2 |
sparc.c (output_cbranch): Fix accidental squashing of the fp branch pre-delay nop.
* sparc.c (output_cbranch): Fix accidental squashing of the
fp branch pre-delay nop.
From-SVN: r31625
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/config/sparc/sparc.c | 201 |
2 files changed, 108 insertions, 98 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 644ba3e..6a7dcca 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,10 @@ 2000-01-25 Richard Henderson <rth@cygnus.com> + * sparc.c (output_cbranch): Fix accidental squashing of the + fp branch pre-delay nop. + +2000-01-25 Richard Henderson <rth@cygnus.com> + * tree.def (UNNE_EXPR): Remove. * c-typeck.c (build_binary_op): Don't handle it. * expr.c (expand_expr, do_jump, do_store_flag): Likewise. diff --git a/gcc/config/sparc/sparc.c b/gcc/config/sparc/sparc.c index cbf246f..88502a3 100644 --- a/gcc/config/sparc/sparc.c +++ b/gcc/config/sparc/sparc.c @@ -4641,15 +4641,6 @@ output_cbranch (op, label, reversed, annul, noop, insn) const char *branch; int labeloff, spaces = 8; - /* ??? !v9: FP branches cannot be preceded by another floating point insn. - Because there is currently no concept of pre-delay slots, we can fix - this only by always emitting a nop before a floating point branch. */ - - if ((mode == CCFPmode || mode == CCFPEmode) && ! TARGET_V9) - strcpy (string, "nop\n\t"); - else - string[0] = '\0'; - if (reversed) { /* Reversal of FP compares takes care -- an ordered compare @@ -4662,98 +4653,112 @@ output_cbranch (op, label, reversed, annul, noop, insn) /* Start by writing the branch condition. */ if (mode == CCFPmode || mode == CCFPEmode) - switch (code) - { - case NE: - branch = "fbne"; - break; - case EQ: - branch = "fbe"; - break; - case GE: - branch = "fbge"; - break; - case GT: - branch = "fbg"; - break; - case LE: - branch = "fble"; - break; - case LT: - branch = "fbl"; - break; - case UNORDERED: - branch = "fbu"; - break; - case ORDERED: - branch = "fbo"; - break; - case UNGT: - branch = "fbug"; - break; - case UNLT: - branch = "fbul"; - break; - case UNEQ: - branch = "fbue"; - break; - case UNGE: - branch = "fbuge"; - break; - case UNLE: - branch = "fbule"; - break; - case LTGT: - branch = "fblg"; - break; + { + switch (code) + { + case NE: + branch = "fbne"; + break; + case EQ: + branch = "fbe"; + break; + case GE: + branch = "fbge"; + break; + case GT: + branch = "fbg"; + break; + case LE: + branch = "fble"; + break; + case LT: + branch = "fbl"; + break; + case UNORDERED: + branch = "fbu"; + break; + case ORDERED: + branch = "fbo"; + break; + case UNGT: + branch = "fbug"; + break; + case UNLT: + branch = "fbul"; + break; + case UNEQ: + branch = "fbue"; + break; + case UNGE: + branch = "fbuge"; + break; + case UNLE: + branch = "fbule"; + break; + case LTGT: + branch = "fblg"; + break; - default: - abort (); - } + default: + abort (); + } + + /* ??? !v9: FP branches cannot be preceded by another floating point + insn. Because there is currently no concept of pre-delay slots, + we can fix this only by always emitting a nop before a floating + point branch. */ + + string[0] = '\0'; + if (! TARGET_V9) + strcpy (string, "nop\n\t"); + strcat (string, branch); + } else - switch (code) - { - case NE: - branch = "bne"; - break; - case EQ: - branch = "be"; - break; - case GE: - if (mode == CC_NOOVmode) - branch = "bpos"; - else - branch = "bge"; - break; - case GT: - branch = "bg"; - break; - case LE: - branch = "ble"; - break; - case LT: - if (mode == CC_NOOVmode) - branch = "bneg"; - else - branch = "bl"; - break; - case GEU: - branch = "bgeu"; - break; - case GTU: - branch = "bgu"; - break; - case LEU: - branch = "bleu"; - break; - case LTU: - branch = "blu"; - break; + { + switch (code) + { + case NE: + branch = "bne"; + break; + case EQ: + branch = "be"; + break; + case GE: + if (mode == CC_NOOVmode) + branch = "bpos"; + else + branch = "bge"; + break; + case GT: + branch = "bg"; + break; + case LE: + branch = "ble"; + break; + case LT: + if (mode == CC_NOOVmode) + branch = "bneg"; + else + branch = "bl"; + break; + case GEU: + branch = "bgeu"; + break; + case GTU: + branch = "bgu"; + break; + case LEU: + branch = "bleu"; + break; + case LTU: + branch = "blu"; + break; - default: - abort (); - } - strcpy (string, branch); + default: + abort (); + } + strcpy (string, branch); + } spaces -= strlen (branch); /* Now add the annulling, the label, and a possible noop. */ |