bug fixed: generate "add.l #65536,a1" rather than "lea 65536(a1),a1".

The latter form is only generated for constants that fit in a word.
This commit is contained in:
bal 1984-10-08 12:45:38 +00:00
parent 8958cb6faf
commit 46dc90f366

View file

@ -1048,7 +1048,8 @@ adp $1 >= 1 && $1 <= 8
... | ADDSCR | "add.l #$1,%[1]"
erase(%[1])
setcc(%[1]) | %[1] | |
adp | nocoercions: EXTERNAL_ADDR | | {EXTERNAL_ADDR,%[1.off] + "+"
adp $1 >= 0-32767 && $1 <= 32767
| nocoercions: EXTERNAL_ADDR | | {EXTERNAL_ADDR,%[1.off] + "+"
+ tostring($1)} | |
... | nocoercions: LOCAL_ADDR | | {LOCAL_ADDR,%[1.off]+$1} | |
... | nocoercions: REGOFF_ADDR | | {REGOFF_ADDR,%[1.reg],%[1.off]+$1} | |
@ -1056,6 +1057,11 @@ adp | nocoercions: EXTERNAL_ADDR | | {EXTERNAL_ADDR,%[1.off] + "+"
... | ADDSCR | "lea $1(%[1]),%[1]"
erase(%[1])
setcc(%[1]) | %[1] | |
adp | nocoercions: EXTERNAL_ADDR | | {EXTERNAL_ADDR,%[1.off] + "+"
+ tostring($1)} | |
... | ADDSCR | "add.l #$1,%[1]"
erase(%[1])
setcc(%[1]) | %[1] | |
/* The next patterns are for efficient translation of "*p++" in C */
ldl ldl adp sdl $1 == $2 && $2 == $4 | |