projects
/
unix-history
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
tags
|
clone url
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
The situation with unsigned char/short comparisons and constants was worse
[unix-history]
/
usr
/
src
/
old
/
pcc
/
ccom.tahoe
/
table.c
diff --git
a/usr/src/old/pcc/ccom.tahoe/table.c
b/usr/src/old/pcc/ccom.tahoe/table.c
index
f00b408
..
9e18185
100644
(file)
--- a/
usr/src/old/pcc/ccom.tahoe/table.c
+++ b/
usr/src/old/pcc/ccom.tahoe/table.c
@@
-1,5
+1,5
@@
#ifndef lint
#ifndef lint
-static char sccsid[] = "@(#)table.c 1.
14
(Berkeley) %G%";
+static char sccsid[] = "@(#)table.c 1.
20
(Berkeley) %G%";
#endif
# include "pass2.h"
#endif
# include "pass2.h"
@@
-47,13
+47,13
@@
SCONV, INAREG|INTAREG,
SCONV, INAREG|INTAREG,
SAREG|AWD, ANYFIXED,
SANY, ANYFIXED,
SCONV, INAREG|INTAREG,
SAREG|AWD, ANYFIXED,
SANY, ANYFIXED,
- NAREG|NASL, RESC1
|RESCC
,
+ NAREG|NASL, RESC1,
" ZU\n",
SCONV, FORCC,
SAREG|AWD, ANYFIXED,
SANY, ANYFIXED,
" ZU\n",
SCONV, FORCC,
SAREG|AWD, ANYFIXED,
SANY, ANYFIXED,
- NAREG|NASL, RESC
1|RESC
C,
+ NAREG|NASL, RESCC,
" ZV\n",
SCONV, INAREG|INTAREG|FORCC,
" ZV\n",
SCONV, INAREG|INTAREG|FORCC,
@@
-171,22
+171,35
@@
OPLOG, FORCC,
0, RESCC,
" cmpl AL,AR\nZP",
0, RESCC,
" cmpl AL,AR\nZP",
-/* tahoe won't handle uns char/short equality/inequality with mem and const */
-EQ, FORCC,
- AWD, TUCHAR|TUSHORT,
+/* more grot: constants in unsigned char/short comparisons sign-extend */
+/* optim2() ensures that SCCON/SSCON iff high bit is not set */
+OPLOG, FORCC,
+ SAREG|AWD, TUCHAR,
+ SCCON, TANY,
+ 0, RESCC,
+ " cmpZL AL,AR\nZP",
+
+OPLOG, FORCC,
+ AWD, TUCHAR,
SCON, TANY,
NAREG, RESCC,
SCON, TANY,
NAREG, RESCC,
- " movzZLl AL,A1\n cmp
ZL
A1,AR\nZP",
+ " movzZLl AL,A1\n cmp
l
A1,AR\nZP",
-NE, FORCC,
- AWD, TUCHAR|TUSHORT,
+OPLOG, FORCC,
+ SAREG|AWD, TUSHORT,
+ SSCON, TANY,
+ 0, RESCC,
+ " cmpZL AL,AR\nZP",
+
+OPLOG, FORCC,
+ AWD, TUSHORT,
SCON, TANY,
NAREG, RESCC,
SCON, TANY,
NAREG, RESCC,
- " movzZLl AL,A1\n cmp
ZL
A1,AR\nZP",
+ " movzZLl AL,A1\n cmp
l
A1,AR\nZP",
/* optim2() handles degenerate comparisons with constants */
OPLOG, FORCC,
/* optim2() handles degenerate comparisons with constants */
OPLOG, FORCC,
- SAREG|AWD, TCHAR|T
UCHAR|TSHORT|TU
SHORT,
+ SAREG|AWD, TCHAR|TSHORT,
SCON, TANY,
0, RESCC,
" cmpZL AL,AR\nZP",
SCON, TANY,
0, RESCC,
" cmpZL AL,AR\nZP",
@@
-322,13
+335,13
@@
OPSHFT, INAREG|INTAREG|FORCC,
" ZB AR,A1\n ZH A1,AL,A1\n",
INCR, FOREFF,
" ZB AR,A1\n ZH A1,AL,A1\n",
INCR, FOREFF,
- SAREG|AWD, T
WORD
,
+ SAREG|AWD, T
ANY
,
SCON|SNAME, TANY,
0, RLEFT,
" ZE\n",
DECR, FOREFF,
SCON|SNAME, TANY,
0, RLEFT,
" ZE\n",
DECR, FOREFF,
- SAREG|AWD, T
WORD
,
+ SAREG|AWD, T
ANY
,
SCON|SNAME, TANY,
0, RLEFT,
" ZE\n",
SCON|SNAME, TANY,
0, RLEFT,
" ZE\n",
@@
-345,12
+358,18
@@
DECR, INAREG|INTAREG,
NAREG, RESC1,
" ZD\n",
NAREG, RESC1,
" ZD\n",
-ASSIGN, INAREG|FOREFF
|FORCC
,
+ASSIGN, INAREG|FOREFF,
SAREG|AWD, ANYFIXED,
SAREG|AWD, ANYFIXED,
SAREG|AWD, ANYFIXED,
SAREG|AWD, ANYFIXED,
- 0, RLEFT
|RRIGHT|RESCC
,
+ 0, RLEFT,
" ZU\n",
" ZU\n",
+ASSIGN, FORCC,
+ SAREG|AWD, ANYFIXED,
+ SAREG|AWD, ANYFIXED,
+ 0, RESCC,
+ " ZV\n",
+
ASSIGN, INAREG|FOREFF|FORCC,
SIREG, TDOUBLE,
SZERO, TANY,
ASSIGN, INAREG|FOREFF|FORCC,
SIREG, TDOUBLE,
SZERO, TANY,
@@
-381,6
+400,18
@@
ASSIGN, INAREG|FOREFF|FORCC,
0, RLEFT|RRIGHT|RESCC,
" movl UR,UL\n movl AR,AL\n",
0, RLEFT|RRIGHT|RESCC,
" movl UR,UL\n movl AR,AL\n",
+ASSIGN, INAREG|FOREFF|FORCC,
+ SAREG|AWD, TDOUBLE,
+ STARNM, TDOUBLE,
+ 0, RLEFT|RRIGHT|RESCC,
+ " ldd AR\n std AL\n",
+
+ASSIGN, INAREG|FOREFF|FORCC,
+ STARNM, TDOUBLE,
+ SAREG|AWD, TDOUBLE,
+ 0, RLEFT|RRIGHT|RESCC,
+ " ldd AR\n std AL\n",
+
ASSIGN, INAREG|FOREFF|FORCC,
SAREG|AWD, TFLOAT,
SZERO, TANY,
ASSIGN, INAREG|FOREFF|FORCC,
SAREG|AWD, TFLOAT,
SZERO, TANY,
@@
-536,6
+567,12
@@
OPLTYPE, INAREG|INTAREG,
NAREG, RESC1,
" movl AR,A1\n movl UR,U1\n",
NAREG, RESC1,
" movl AR,A1\n movl UR,U1\n",
+OPLTYPE, INAREG|INTAREG,
+ SANY, TANY,
+ STARNM, TDOUBLE,
+ NAREG|NASR, RESC1,
+ " ldd AR\n std A1\n",
+
OPLTYPE, INAREG|INTAREG,
SANY, TANY,
SZERO, TANY,
OPLTYPE, INAREG|INTAREG,
SANY, TANY,
SZERO, TANY,
@@
-604,10
+641,16
@@
OPLTYPE, FORARG,
OPLTYPE, FORARG,
SANY, TANY,
OPLTYPE, FORARG,
SANY, TANY,
- SAREG|
AWD
, TDOUBLE,
+ SAREG|
SNAME|SOREG
, TDOUBLE,
0, RNULL,
" pushl UR\n pushl AR\n",
0, RNULL,
" pushl UR\n pushl AR\n",
+OPLTYPE, FORARG,
+ SANY, TANY,
+ STARNM, TDOUBLE,
+ 0, RNULL,
+ " ldd AR\n pushd\n",
+
OPLTYPE, FORARG,
SANY, TANY,
SAREG|AWD, TFLOAT,
OPLTYPE, FORARG,
SANY, TANY,
SAREG|AWD, TFLOAT,
@@
-708,11
+751,12
@@
MOD, INAREG|FOREFF,
" movl AL,U1\n clrl A1\n ediv AR,A1,U1,A1\n",
/* should only see UNSIGNED lhs here if converted from UCHAR/USHORT lhs */
" movl AL,U1\n clrl A1\n ediv AR,A1,U1,A1\n",
/* should only see UNSIGNED lhs here if converted from UCHAR/USHORT lhs */
+/* beware -- the ediv remainder operand must be a register */
ASG MOD, INAREG|FOREFF,
SAREG|AWD, TINT|TLONG|TUNSIGNED|TULONG,
SAREG|AWD, TINT|TLONG,
NAREG|NEVEN, RLEFT|RESCC,
ASG MOD, INAREG|FOREFF,
SAREG|AWD, TINT|TLONG|TUNSIGNED|TULONG,
SAREG|AWD, TINT|TLONG,
NAREG|NEVEN, RLEFT|RESCC,
- " ZM ediv AR,A1,A1,AL\n",
+ " ZM ediv AR,A1,
U1,A1\n movl
A1,AL\n",
ASG MOD, INAREG|FOREFF,
SAREG|AWD, TINT|TLONG|TUNSIGNED|TULONG,
ASG MOD, INAREG|FOREFF,
SAREG|AWD, TINT|TLONG|TUNSIGNED|TULONG,
@@
-724,7
+768,7
@@
ASG MOD, INAREG|FOREFF,
SAREG|AWD, TINT|TLONG|TUNSIGNED|TULONG,
SCON, ANYUSIGNED,
NAREG|NEVEN, RLEFT,
SAREG|AWD, TINT|TLONG|TUNSIGNED|TULONG,
SCON, ANYUSIGNED,
NAREG|NEVEN, RLEFT,
- " movl AL,U1\n clrl A1\n ediv AR,A1,A1,AL\n",
+ " movl AL,U1\n clrl A1\n ediv AR,A1,
U1,A1\n movl
A1,AL\n",
/* XXX is this supposed to help on overflow? */
ASG MUL, INAREG|FOREFF|FORCC,
/* XXX is this supposed to help on overflow? */
ASG MUL, INAREG|FOREFF|FORCC,
@@
-950,13
+994,25
@@
OPSIMP, INAREG|INTAREG|FORCC,
" movl AL,A1\n",
OPSIMP, INAREG|INTAREG|FORCC,
" movl AL,A1\n",
OPSIMP, INAREG|INTAREG|FORCC,
- AWD, TDOUBLE,
+ SIREG, TDOUBLE,
+ SZERO, TANY,
+ NAREG, RESC1|RESCC,
+ " ldd AL\n std A1\n",
+
+OPSIMP, INAREG|INTAREG|FORCC,
+ SAREG|SNAME|SOREG, TDOUBLE,
SZERO, TANY,
NAREG, RESC1|RESCC,
" movl UL,U1\n movl AL,A1\n",
MUL, INAREG|INTAREG|FORCC,
SZERO, TANY,
NAREG, RESC1|RESCC,
" movl UL,U1\n movl AL,A1\n",
MUL, INAREG|INTAREG|FORCC,
- SAREG|AWD, TDOUBLE,
+ SIREG, TDOUBLE,
+ SZERO, TANY,
+ NAREG|NASR, RESC1|RESCC,
+ " cvld $0\n std A1\n",
+
+MUL, INAREG|INTAREG|FORCC,
+ SAREG|SNAME|SOREG, TDOUBLE,
SZERO, TANY,
NAREG|NASR, RESC1|RESCC,
" clrl U1\n clrl A1\n",
SZERO, TANY,
NAREG|NASR, RESC1|RESCC,
" clrl U1\n clrl A1\n",