diff options
author | Richard Stallman <rms@gnu.org> | 1992-04-26 01:53:32 +0000 |
---|---|---|
committer | Richard Stallman <rms@gnu.org> | 1992-04-26 01:53:32 +0000 |
commit | 88d3b7f03d06f58d34f4b8fbaa25e469bec792c1 (patch) | |
tree | 919ab141dbbcbbd954000e303d409f80896ee530 | |
parent | a8481f2b7e0aaf2b3aa6cd334e56adbfea51144d (diff) | |
download | gcc-88d3b7f03d06f58d34f4b8fbaa25e469bec792c1.zip gcc-88d3b7f03d06f58d34f4b8fbaa25e469bec792c1.tar.gz gcc-88d3b7f03d06f58d34f4b8fbaa25e469bec792c1.tar.bz2 |
*** empty log message ***
From-SVN: r835
-rw-r--r-- | gcc/expr.c | 19 |
1 files changed, 14 insertions, 5 deletions
@@ -6490,7 +6490,7 @@ do_store_flag (exp, target, mode, only_cheap) /* INDEX is the value being switched on, with the lowest value in the table already subtracted. - MODE is its expected mode (needed if INDEX is ever constant). + MODE is its expected mode (needed if INDEX is constant). RANGE is the length of the jump table. TABLE_LABEL is a CODE_LABEL rtx for the table itself. @@ -6504,13 +6504,22 @@ do_tablejump (index, mode, range, table_label, default_label) { register rtx temp, vector; - /* Code below assumes that MODE is Pmode, - but I think that is a mistake. Let's see if that is true. */ - if (mode != Pmode) - abort (); + /* Do an unsigned comparison (in the proper mode) between the index + expression and the value which represents the length of the range. + Since we just finished subtracting the lower bound of the range + from the index expression, this comparison allows us to simultaneously + check that the original index expression value is both greater than + or equal to the minimum value of the range and less than or equal to + the maximum value of the range. */ emit_cmp_insn (range, index, LTU, 0, mode, 0, 0); emit_jump_insn (gen_bltu (default_label)); + + /* If index is in range, it must fit in Pmode. + Convert to Pmode so we can index with it. */ + if (mode != Pmode) + index = convert_to_mode (Pmode, index, 1); + /* If flag_force_addr were to affect this address it could interfere with the tricky assumptions made about addresses that contain label-refs, |